diff options
Diffstat (limited to 'applications')
54 files changed, 4437 insertions, 142 deletions
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po index a3c982f3d..f436f5cc2 100644 --- a/applications/luci-app-adblock/po/ja/adblock.po +++ b/applications/luci-app-adblock/po/ja/adblock.po @@ -8,15 +8,15 @@ msgstr "" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 1.8.12\n" "Language: ja\n" msgid "" "). Note that list URLs and Shallalist category selections are not " "configurable via Luci." msgstr "" -")。これらのリストのURLおよびshallaリストのカテゴリー選択は、Luciによって設定" -"できないことに注意します。" +")。これらのリストのURLおよびshallaリストの選択済みカテゴリーは、Luciを通して" +"設定することができません。" msgid "Adblock" msgstr "Adblock" @@ -25,7 +25,7 @@ msgid "Available blocklist sources (" msgstr "利用可能なブロックリスト提供元です(" msgid "Backup directory" -msgstr "バックアップ ディレクトリ" +msgstr "バックアップ先 ディレクトリ" msgid "Backup options" msgstr "バックアップ オプション" @@ -36,7 +36,8 @@ msgstr "ブロックリスト提供元" msgid "" "Configuration of the adblock package to block ad/abuse domains by using DNS." msgstr "" -"広告/不正ドメインをDNSを利用してブロックする、adblock パッケージの設定です。" +"DNSの利用によって広告/不正ドメインをブロックする、adblock パッケージの設定で" +"す。" msgid "Description" msgstr "説明" @@ -60,7 +61,7 @@ msgid "" "File with whitelisted hosts/domains that are allowed despite being on a " "blocklist." msgstr "" -"ファイルのホワイトリスト ホスト/ドメインは、ブロックリストに登録されていても" +"ホワイトリスト ファイル内のホスト/ドメインは、ブロックリストの登録に関わらず" "許可されます。" msgid "Global options" diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po new file mode 100644 index 000000000..a238dc7f9 --- /dev/null +++ b/applications/luci-app-adblock/po/pt-br/adblock.po @@ -0,0 +1,92 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"). Note that list URLs and Shallalist category selections are not " +"configurable via Luci." +msgstr "" +"). Note que a lista de URL e as seleções de categoria da Shallalist não são " +"configuráveis pelo Luci." + +msgid "Adblock" +msgstr "Adblock" + +msgid "Available blocklist sources (" +msgstr "Fontes de listas de bloqueio disponíveis (" + +msgid "Backup directory" +msgstr "Diretório da cópia de segurança" + +msgid "Backup options" +msgstr "Opções da cópia de segurança" + +msgid "Blocklist sources" +msgstr "Fontes de listas de bloqueio" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"Configuração do pacote adblock para bloquear, usando o DNS, domínios que " +"distribuem propagandas abusivas." + +msgid "Description" +msgstr "Descrição" + +msgid "Enable adblock" +msgstr "Habilitar adblock" + +msgid "Enable blocklist backup" +msgstr "Habilitar cópia de segurança da lista de bloqueio" + +msgid "Enable verbose debug logging" +msgstr "Habilite registros detalhados para depuração" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Extra options" +msgstr "Opções adicionais" + +msgid "" +"File with whitelisted hosts/domains that are allowed despite being on a " +"blocklist." +msgstr "" +"Arquivo com a lista branca dos equipamentos/domínios que serão autorizados " +"mesmo estando na lista de bloqueio." + +msgid "Global options" +msgstr "Opções Globais" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" +"Opções para aprimoramentos adicionais caso as opções padrão não sejam " +"suficientes para você." + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)" + +msgid "" +"Space separated list of wan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" +"Lista das interfaces WAN, separadas por espaço, que podem disparar uma ação " +"de recarga. Para desabilitar este gatilho, defina-o como 'false'. Padrão: em " +"branco" + +msgid "Whitelist file" +msgstr "Arquivo da lista branca" + +msgid "see list details" +msgstr "veja os detalhes da lista" diff --git a/applications/luci-app-ahcp/po/pt-br/ahcp.po b/applications/luci-app-ahcp/po/pt-br/ahcp.po index 55ec29cdc..741c14572 100644 --- a/applications/luci-app-ahcp/po/pt-br/ahcp.po +++ b/applications/luci-app-ahcp/po/pt-br/ahcp.po @@ -1,20 +1,20 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-29 23:07+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-17 17:07-0200\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \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 " diff --git a/applications/luci-app-aria2/po/pt-br/aria2.po b/applications/luci-app-aria2/po/pt-br/aria2.po new file mode 100644 index 000000000..1bb413744 --- /dev/null +++ b/applications/luci-app-aria2/po/pt-br/aria2.po @@ -0,0 +1,236 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "\"Falloc\" is not available in all cases." +msgstr "\"Falloc\" não está disponível em todas as classes." + +msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled" +msgstr "" +"<abbr title=\"Distributed Hash Table/Tabla de disperção distribuída\">DHT</" +"abbr> habilitado" + +msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled" +msgstr "" +"<abbr title=\"Local Peer Discovery/Descoberta de Parceiros Locais\">LPD</" +"abbr> habilitado" + +msgid "Additional Bt tracker enabled" +msgstr "Rastreadores BitTorrent adicionais habilitado" + +msgid "Aria2" +msgstr "Aria2" + +msgid "Aria2 Settings" +msgstr "Configurações do Aria2" + +msgid "Aria2 Status" +msgstr "Estado do Aria2" + +msgid "" +"Aria2 is a multi-protocol & multi-source download utility, here you can " +"configure the settings." +msgstr "" +"Aria2 é um utilitário de transferência multi-protocolo de múltiplas fontes, " +"aqui você pode configurá-lo." + +msgid "Autosave session interval" +msgstr "Intervalo para autossalvamento da sessão" + +msgid "BitTorrent Settings" +msgstr "Configurações do BitTorrent" + +msgid "BitTorrent listen port" +msgstr "Porta de escuta do BitTorrent" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Config file directory" +msgstr "Diretório dos arquivos de configuração" + +msgid "Debug" +msgstr "Depuração" + +msgid "Default download directory" +msgstr "Diretório padrão de arquivos baixados" + +msgid "Disk cache" +msgstr "Cache em Disco" + +msgid "Enable log" +msgstr "Habilitar registros" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Error" +msgstr "Erro" + +msgid "Extra Settings" +msgstr "Configurações Adicionais" + +msgid "Falloc" +msgstr "Falloc" + +msgid "Files and Locations" +msgstr "Arquivos e Locais" + +msgid "Follow torrent" +msgstr "Seguir torrent" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Generate Randomly" +msgstr "Gerar aleatoriamente" + +msgid "Info" +msgstr "Informações" + +msgid "List of additional Bt tracker" +msgstr "Lista de rastreadores BitTorrent adicionais" + +msgid "List of extra settings" +msgstr "Lista de configurações adicionais" + +msgid "Log file is in the config file dir." +msgstr "" +"Arquivo de registro (log) está no diretório do arquivo de configuração." + +msgid "Log level" +msgstr "Nível do registro" + +msgid "Max concurrent downloads" +msgstr "Número máximo de transferencias simultâneas" + +msgid "Max connection per server" +msgstr "Numero máximo de conexões por servidor" + +msgid "Max number of peers per torrent" +msgstr "Numero máximo de parceiros por torrent" + +msgid "Max number of split" +msgstr "Numero máximo de divisões" + +msgid "Min split size" +msgstr "Tamanho mínimo da divisão" + +msgid "No Authentication" +msgstr "Sem Autenticação" + +msgid "Notice" +msgstr "Aviso" + +msgid "Off" +msgstr "Desligado" + +msgid "Open WebUI-Aria2" +msgstr "Abrir WebUI-Aria2" + +msgid "Open YAAW" +msgstr "Abrir YAAW" + +msgid "Overall download limit" +msgstr "Limite global para baixar" + +msgid "Overall speed limit enabled" +msgstr "Limite da taxa de transferência global habilitado" + +msgid "Overall upload limit" +msgstr "Limite global para subir" + +msgid "Per task download limit" +msgstr "Limite por tarefa para baixar" + +msgid "Per task speed limit enabled" +msgstr "Limite da taxa de transferência por tarefa habilitado" + +msgid "Per task upload limit" +msgstr "Limite por tarefa para subir" + +msgid "Prealloc" +msgstr "Pré-alocação" + +msgid "Preallocation" +msgstr "Pré-alocação" + +msgid "Prefix of peer ID" +msgstr "Prefixo da identificação do paceiro" + +msgid "RPC Token" +msgstr "" +"Chave eletrônica do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "RPC authentication method" +msgstr "" +"Método de autenticação do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "RPC password" +msgstr "" +"Senha do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto" +"\">RPC</abbr>" + +msgid "RPC port" +msgstr "" +"Porta do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto" +"\">RPC</abbr>" + +msgid "RPC username" +msgstr "" +"Nome do usuario do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "Run daemon as user" +msgstr "Executar serviço como usuário" + +msgid "Sec" +msgstr "Segurança" + +msgid "Task Settings" +msgstr "Configurações das tarefas" + +msgid "The Aria2 service is not running." +msgstr "O serviço Aria2 está parado." + +msgid "The Aria2 service is running." +msgstr "O serviço Aria2 está em execução." + +msgid "Token" +msgstr "Chave eletrônica" + +msgid "Trunc" +msgstr "Truncar" + +msgid "Use WebSocket" +msgstr "Use WebSockets" + +msgid "User agent value" +msgstr "Valor da identificação do agente do usuário" + +msgid "Username & Password" +msgstr "Usuário & Senha" + +msgid "View Json-RPC URL" +msgstr "Visualizar URL do JSON-RPC" + +msgid "Warn" +msgstr "Atenção" + +msgid "in bytes, You can append K or M." +msgstr "em bytes. Você pode sufixar com K (quilo) ou M (mega)." + +msgid "in bytes/sec, You can append K or M." +msgstr "em bytes por segundo. Você pode sufixar com K (quilo) ou M (mega)." diff --git a/applications/luci-app-bcp38/Makefile b/applications/luci-app-bcp38/Makefile new file mode 100644 index 000000000..9ab5a6701 --- /dev/null +++ b/applications/luci-app-bcp38/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2010 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:=BCP38 LuCI interface +LUCI_DEPENDS:=+luci-mod-admin-full +bcp38 + +PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-bcp38/luasrc/controller/bcp38.lua b/applications/luci-app-bcp38/luasrc/controller/bcp38.lua new file mode 100644 index 000000000..7ea22835d --- /dev/null +++ b/applications/luci-app-bcp38/luasrc/controller/bcp38.lua @@ -0,0 +1,7 @@ +module("luci.controller.bcp38", package.seeall) + +function index() + entry({"admin", "network", "firewall", "bcp38"}, + cbi("bcp38"), + _("BCP38"), 50).dependent = false +end diff --git a/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua new file mode 100644 index 000000000..632074a56 --- /dev/null +++ b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua @@ -0,0 +1,60 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2014 Toke Høiland-Jørgensen <toke@toke.dk> + +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 wa = require "luci.tools.webadmin" +local net = require "luci.model.network".init() +local ifaces = net:get_interfaces() + +m = Map("bcp38", translate("BCP38"), + translate("This function blocks packets with private address destinations " .. + "from going out onto the internet as per " .. + "<a href=\"http://tools.ietf.org/html/bcp38\">BCP 38</a>. " .. + "For IPv6, only source specific default routes are installed, so " .. + "no BCP38 firewall routes are needed.")) + +s = m:section(TypedSection, "bcp38", translate("BCP38 config")) +s.anonymous = true +-- BASIC +e = s:option(Flag, "enabled", translate("Enable")) +e.rmempty = false + +a = s:option(Flag, "detect_upstream", translate("Auto-detect upstream IP"), + translate("Attempt to automatically detect if the upstream IP " .. + "will be blocked by the configuration, and add an exception if it will. " .. + "If this does not work correctly, you can add exceptions manually below.")) +a.rmempty = false + +n = s:option(ListValue, "interface", translate("Interface name"), translate("Interface to apply the blocking to " .. + "(should be the upstream WAN interface).")) +for _, iface in ipairs(ifaces) do + if iface:is_up() then + n:value(iface:name()) + end +end +n.rmempty = false + +ma = s:option(DynamicList, "match", + translate("Blocked IP ranges")) + +ma.datatype = "ip4addr" + +nm = s:option(DynamicList, "nomatch", + translate("Allowed IP ranges"), translate("Takes precedence over blocked ranges. ".. + "Use to whitelist your upstream network if you're behind a double NAT " .. + "and the auto-detection doesn't work.")) + +nm.datatype = "ip4addr" + + +return m diff --git a/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 b/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 new file mode 100755 index 000000000..c204236e3 --- /dev/null +++ b/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@bcp38[-1] + add ucitrack bcp38 + add_list ucitrack.@bcp38[0].affects=firewall + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-clamav/Makefile b/applications/luci-app-clamav/Makefile new file mode 100644 index 000000000..f91e692af --- /dev/null +++ b/applications/luci-app-clamav/Makefile @@ -0,0 +1,18 @@ +# +# 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:=ClamAV LuCI interface +LUCI_DEPENDS:=+luci-mod-admin-full +clamav + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-clamav/luasrc/controller/clamav.lua b/applications/luci-app-clamav/luasrc/controller/clamav.lua new file mode 100644 index 000000000..02f3bfc4b --- /dev/null +++ b/applications/luci-app-clamav/luasrc/controller/clamav.lua @@ -0,0 +1,22 @@ +--[[ + +LuCI ClamAV module + +Copyright (C) 2015, Itus Networks, Inc. + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +module("luci.controller.clamav", package.seeall) + +function index() + entry({"admin", "services", "clamav"}, cbi("clamav"), _("ClamAV")) +end diff --git a/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua b/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua new file mode 100644 index 000000000..ff98139d4 --- /dev/null +++ b/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua @@ -0,0 +1,178 @@ +--[[ + +LuCI ClamAV module + +Copyright (C) 2015, Itus Networks, Inc. + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +require "ubus" + +m = Map("clamav", translate("ClamAV")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/clamav restart") end + +s = m:section(TypedSection, "clamav") +s.anonymous = true +s.addremove = false + +s:tab("tab_advanced", translate("Settings")) +s:tab("tab_logs", translate("Log")) + +--------------- Settings -------------- + +LogFileMaxSize = s:taboption("tab_advanced", Value, "LogFileMaxSize", translate("Max size of log file")) +LogFileMaxSize:value("512K", translate("512K")) +LogFileMaxSize:value("1M", translate("1M")) +LogFileMaxSize:value("2M", translate("2M")) +LogFileMaxSize.default = "1M" + +LogTime = s:taboption("tab_advanced", ListValue, "LogTime", translate("Log time with each message")) +LogTime:value("no", translate("No")) +LogTime:value("yes", translate("Yes")) +LogTime.default = "no" + +LogVerbose = s:taboption("tab_advanced", ListValue, "LogVerbose", translate("Enable verbose logging")) +LogVerbose:value("no", translate("No")) +LogVerbose:value("yes", translate("Yes")) +LogVerbose.default = "no" + +ExtendedDetectionInfo = s:taboption("tab_advanced", ListValue, "ExtendedDetectionInfo", translate("Log additional infection info")) +ExtendedDetectionInfo:value("no", translate("No")) +ExtendedDetectionInfo:value("yes", translate("Yes")) +ExtendedDetectionInfo.default = "no" + +dummy3 = s:taboption("tab_advanced", DummyValue, "") +dummy4 = s:taboption("tab_advanced", DummyValue, "") + +MaxDirectoryRecursion = s:taboption("tab_advanced", Value, "MaxDirectoryRecursion", translate("Max directory scan depth")) +MaxDirectoryRecursion:value("15", translate("15")) +MaxDirectoryRecursion:value("20", translate("20")) +MaxDirectoryRecursion.default = "15" + +FollowDirectorySymlink = s:taboption("tab_advanced", ListValue, "FollowDirectorySymlink", translate("Follow directory symlinks")) +FollowDirectorySymlink:value("no", translate("No")) +FollowDirectorySymlink:value("yes", translate("Yes")) +FollowDirectorySymlink.default = "no" + +FollowFileSymlinks = s:taboption("tab_advanced", ListValue, "FollowFileSymlinks", translate("Follow file symlinks")) +FollowFileSymlinks:value("no", translate("No")) +FollowFileSymlinks:value("yes", translate("Yes")) +FollowFileSymlinks.default = "no" + +DetectPUA = s:taboption("tab_advanced", ListValue, "DetectPUA", translate("Detect possibly unwanted apps")) +DetectPUA:value("no", translate("No")) +DetectPUA:value("yes", translate("Yes")) +DetectPUA.default = "no" + +ScanPE = s:taboption("tab_advanced", ListValue, "ScanPE", translate("Scan portable executables")) +ScanPE:value("no", translate("No")) +ScanPE:value("yes", translate("Yes")) +ScanPE.default = "yes" + +ScanELF = s:taboption("tab_advanced", ListValue, "ScanELF", translate("Scan ELF files")) +ScanELF:value("no", translate("No")) +ScanELF:value("yes", translate("Yes")) +ScanELF.default = "yes" + +DetectBrokenExecutables = s:taboption("tab_advanced", ListValue, "DetectBrokenExecutables", translate("Detect broken executables")) +DetectBrokenExecutables:value("no", translate("No")) +DetectBrokenExecutables:value("yes", translate("Yes")) +DetectBrokenExecutables.default = "no" + +ScanOLE2 = s:taboption("tab_advanced", ListValue, "ScanOLE2", translate("Scan MS Office and .msi files")) +ScanOLE2:value("no", translate("No")) +ScanOLE2:value("yes", translate("Yes")) +ScanOLE2.default = "yes" + +ScanPDF = s:taboption("tab_advanced", ListValue, "ScanPDF", translate("Scan pdf files")) +ScanPDF:value("no", translate("No")) +ScanPDF:value("yes", translate("Yes")) +ScanPDF.default = "yes" + +ScanSWF = s:taboption("tab_advanced", ListValue, "ScanSWF", translate("Scan swf files")) +ScanSWF:value("no", translate("No")) +ScanSWF:value("yes", translate("Yes")) +ScanSWF.default = "yes" + +ScanMail = s:taboption("tab_advanced", ListValue, "ScanMail", translate("Scan emails")) +ScanMail:value("no", translate("No")) +ScanMail:value("yes", translate("Yes")) +ScanMail.default = "yes" + +ScanPartialMessages = s:taboption("tab_advanced", ListValue, "ScanPartialMessages", translate("Scan RFC1341 messages split over many emails")) +ScanPartialMessages:value("no", translate("No")) +ScanPartialMessages:value("yes", translate("Yes")) +ScanPartialMessages.default = "no" + +ScanArchive = s:taboption("tab_advanced", ListValue, "ScanArchive", translate("Scan archives")) +ScanArchive:value("no", translate("No")) +ScanArchive:value("yes", translate("Yes")) +ScanArchive.default = "yes" + +ArchiveBlockEncrypted = s:taboption("tab_advanced", ListValue, "ArchiveBlockEncrypted", translate("Block encrypted archives")) +ArchiveBlockEncrypted:value("no", translate("No")) +ArchiveBlockEncrypted:value("yes", translate("Yes")) +ArchiveBlockEncrypted.default = "no" + +dummy5 = s:taboption("tab_advanced", DummyValue, "") +dummy6 = s:taboption("tab_advanced", DummyValue, "") + +StreamMinPort = s:taboption("tab_advanced", Value, "StreamMinPort", translate("Port range, lowest port")) +StreamMinPort.datatype = "portrange" +StreamMinPort:value("1024",translate("1024")) +StreamMinPort.default = "1024" + +StreamMaxPort = s:taboption("tab_advanced", Value, "StreamMaxPort", translate("Port range, highest port")) +StreamMaxPort.datatype = "portrange" +StreamMaxPort:value("2048",translate("2048")) +StreamMaxPort.default = "2048" + +MaxThreads = s:taboption("tab_advanced", Value, "MaxThreads", translate("Max number of threads")) +MaxThreads.datatype = "and(uinteger,min(1))" +MaxThreads:value("10",translate("10")) +MaxThreads:value("20",translate("20")) +MaxThreads.default = "10" + +SelfCheck = s:taboption("tab_advanced", Value, "SelfCheck", translate("Database check every N sec")) +SelfCheck.datatype = "and(uinteger,min(1))" +SelfCheck:value("600",translate("600")) +SelfCheck.default = "600" + +MaxFileSize = s:taboption("tab_advanced", Value, "MaxFileSize", translate("Max size of scanned file")) +MaxFileSize.datatype = "string" +MaxFileSize:value("150M",translate("150M")) +MaxFileSize:value("50M",translate("50M")) +MaxFileSize.default = "150M" + +------------------ Log -------------------- + +clamav_logfile = s:taboption("tab_logs", TextValue, "lines", "") +clamav_logfile.wrap = "off" +clamav_logfile.rows = 25 +clamav_logfile.rmempty = true + +function clamav_logfile.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + local file = "/tmp/clamd.log" + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function clamav_logfile.write() +end + +return m diff --git a/applications/luci-app-commands/po/pt-br/commands.po b/applications/luci-app-commands/po/pt-br/commands.po index f6bee73c9..4d04bffbc 100644 --- a/applications/luci-app-commands/po/pt-br/commands.po +++ b/applications/luci-app-commands/po/pt-br/commands.po @@ -1,15 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-15 22:02+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-20 17:39-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "A short textual description of the configured command" msgstr "Uma pequena descrição textual do comando configurado" @@ -40,10 +41,10 @@ msgid "Command" msgstr "Comando" msgid "Command executed successfully." -msgstr "" +msgstr "O comando executou com sucesso." msgid "Command exited with status code" -msgstr "" +msgstr "O comando encerrou com um estado de erro" msgid "Command failed" msgstr "O comando falhou" @@ -76,7 +77,7 @@ msgid "Download" msgstr "Baixar" msgid "Download execution result" -msgstr "" +msgstr "Baixar os resultados da execução" msgid "Failed to execute command!" msgstr "Falha ao executar comando!" @@ -88,7 +89,7 @@ msgid "Loading" msgstr "Carregando" msgid "Or display result" -msgstr "" +msgstr "Ou mostre o resultado" msgid "Public access" msgstr "Acesso público" @@ -97,10 +98,10 @@ msgid "Run" msgstr "Executar" msgid "Standard Error" -msgstr "" +msgstr "Saída de Erro" msgid "Standard Output" -msgstr "" +msgstr "Saída Padrão" msgid "" "This page allows you to configure custom shell commands which can be easily " diff --git a/applications/luci-app-ddns/po/pt-br/ddns.po b/applications/luci-app-ddns/po/pt-br/ddns.po index 497084651..ab22837b2 100644 --- a/applications/luci-app-ddns/po/pt-br/ddns.po +++ b/applications/luci-app-ddns/po/pt-br/ddns.po @@ -2,15 +2,15 @@ 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 <matheusdalmago10@gmail.com>\n" +"PO-Revision-Date: 2017-02-20 17:41-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" msgid "&" msgstr "&" @@ -228,7 +228,7 @@ msgid "Error Retry Interval" msgstr "Intervalo de tentativas em Erro" msgid "Event Network" -msgstr "" +msgstr "Rede de Evento" msgid "File" msgstr "Arquivo" @@ -438,16 +438,16 @@ msgid "No certificates found" msgstr "Nenhum certificado encontrado" msgid "No data" -msgstr "" +msgstr "Sem dados" msgid "No logging" -msgstr "" +msgstr "Sem registros" msgid "Non-public and by default blocked IP's" msgstr "IPs não públicos e bloqueados por padrão" msgid "Notice" -msgstr "" +msgstr "Aviso" msgid "Number of last lines stored in log files" msgstr "Número das últimas linhas salvas nos arquivos de log" @@ -475,7 +475,7 @@ msgstr "" "Em Erro, o script irá para a execução após um número definido de tentativas" msgid "OpenWrt Wiki" -msgstr "" +msgstr "Wiki do OpenWRT" msgid "Optional Encoded Parameter" msgstr "Parâmetro Opcionalmente Codificado" @@ -490,7 +490,7 @@ msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização" msgid "Overview" -msgstr "" +msgstr "Visão Geral" msgid "PROXY-Server" msgstr "servidor PROXY" @@ -575,7 +575,7 @@ msgid "There is no service configured." msgstr "Não há serviço configurado" msgid "Timer Settings" -msgstr "" +msgstr "Configurações do Controlador de Tempo" msgid "To change global settings click here" msgstr "Clique aqui para mudar configurações globais" diff --git a/applications/luci-app-dynapoint/po/pt-br/dynapoint.po b/applications/luci-app-dynapoint/po/pt-br/dynapoint.po new file mode 100644 index 000000000..59b02629a --- /dev/null +++ b/applications/luci-app-dynapoint/po/pt-br/dynapoint.po @@ -0,0 +1,107 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Activate this wVIF if status is:" +msgstr "Aivar este wVIF se o estado for:" + +msgid "Append hostname to ssid" +msgstr "Sufixar o nome do equipamento ao SSID" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" +"Sufixar o nome do roteador ao SSID quando a verificação da conectividade " +"falhar" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "Cerifique a conectividade com a internet baixando o cabeçalho HTTP " + +msgid "Configuration" +msgstr "Configuração" + +msgid "Curl is currently not installed." +msgstr "O cURL não está instalado." + +msgid "Device" +msgstr "Dispositivo" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "DynaPoint" +msgstr "DynaPoint" + +msgid "Dynamic Access Point Manager" +msgstr "Gerenciamento do Ponto de Acesso Dinâmico" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "Numero de falhar para considerar como inalcançável" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "Lista de Interfaces Virtuais Wireless (wVIF)" + +msgid "List of host addresses" +msgstr "Lista de endereços dos equipamentos" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" +"Lista de endereços dos equipamentos (URL ou endereço IP) para requisitar " +"cabeçalhos HTTP" + +msgid "Mode" +msgstr "Modo" + +msgid "Not used by DynaPoint" +msgstr "Não usado pelo DynaPoint" + +msgid "Offline" +msgstr "Desconectado" + +msgid "Online" +msgstr "Conectado" + +msgid "SSID" +msgstr "SSID" + +msgid "Switch_to_offline threshold" +msgstr "Limiar para mudar para desconectado" + +msgid "Test-run interval" +msgstr "Intervalo para execução do teste" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "Intervalo, em segundos, para reiniciar um nova execução do teste" + +msgid "Use curl" +msgstr "Usar cURL" + +msgid "Use curl instead of wget" +msgstr "Usar cURL ao invés do wget" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "Usar cURL ao invés do wget para testar a conectividade." + +msgid "Used interface" +msgstr "Dispositivos usadas" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "Qual dispositivo o cURL deve usar. (Use ifconfig para listá-las)" + +msgid "WiFi Status" +msgstr "Estado da WiFi" diff --git a/applications/luci-app-e2guardian/Makefile b/applications/luci-app-e2guardian/Makefile new file mode 100644 index 000000000..c3ac02988 --- /dev/null +++ b/applications/luci-app-e2guardian/Makefile @@ -0,0 +1,18 @@ +# +# 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:=E2Guardian LuCI Interface +LUCI_DEPENDS:=+luci-mod-admin-full +e2guardian + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua new file mode 100644 index 000000000..dd545f50b --- /dev/null +++ b/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua @@ -0,0 +1,22 @@ +--[[ + +LuCI E2Guardian module + +Copyright (C) 2015, Itus Networks, Inc. + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +module("luci.controller.e2guardian", package.seeall) + +function index() + entry({"admin", "services", "e2guardian"}, cbi("e2guardian"), _("E2Guardian")) +end diff --git a/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua new file mode 100644 index 000000000..b62132108 --- /dev/null +++ b/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua @@ -0,0 +1,399 @@ +--[[ + +LuCI E2Guardian module + +Copyright (C) 2015, Itus Networks, Inc. + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" + +m = Map("e2guardian", translate("E2Guardian")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/e2guardian restart") end + +s = m:section(TypedSection, "e2guardian") +s.anonymous = true +s.addremove = false + +s:tab("tab_general", translate("General Settings")) +s:tab("tab_additional", translate("Additional Settings")) +s:tab("tab_logs", translate("Logs")) + + +----------------- General Settings Tab ----------------------- + +filterip = s:taboption("tab_general", Value, "filterip", translate("IP that E2Guardian listens")) +filterip.datatype = "ip4addr" + +filterports = s:taboption("tab_general", Value, "filterports", translate("Port that E2Guardian listens")) +filterports.datatype = "portrange" +filterports.placeholder = "0-65535" + +proxyip = s:taboption("tab_general", Value, "proxyip", translate("IP address of the proxy")) +proxyip.datatype = "ip4addr" +proxyip.default = "127.0.0.1" + +proxyport = s:taboption("tab_general", Value, "proxyport", translate("Port of the proxy")) +proxyport.datatype = "portrange" +proxyport.placeholder = "0-65535" + +languagedir = s:taboption("tab_general", Value, "languagedir", translate("Language dir")) +languagedir.datatype = "string" +languagedir.default = "/usr/share/e2guardian/languages" + +language = s:taboption("tab_general", Value, "language", translate("Language to use")) +language.datatype = "string" +language.default = "ukenglish" + +loglevel = s:taboption("tab_general", ListValue, "loglevel", translate("Logging Settings")) +loglevel:value("0", translate("none")) +loglevel:value("1", translate("just denied")) +loglevel:value("2", translate("all text based")) +loglevel:value("3", translate("all requests")) +loglevel.default = "2" + +logexceptionhits = s:taboption("tab_general", ListValue, "logexceptionhits", translate("Log Exception Hits")) +logexceptionhits:value("0", translate("never")) +logexceptionhits:value("1", translate("log, but don't mark as exceptions")) +logexceptionhits:value("2", translate("log and mark")) +logexceptionhits.default = "2" + +logfileformat = s:taboption("tab_general", ListValue, "logfileformat", translate("Log File Format")) +logfileformat:value("1", translate("DansgGuardian format, space delimited")) +logfileformat:value("2", translate("CSV-style format")) +logfileformat:value("3", translate("Squid Log File Format")) +logfileformat:value("4", translate("Tab delimited")) +logfileformat:value("5", translate("Protex format")) +logfileformat:value("6", translate("Protex format with server field blanked")) +logfileformat.default = "1" + +accessdeniedaddress = s:taboption("tab_general", Value, "accessdeniedaddress", translate("Access denied address"), +translate("Server to which the cgi e2guardian reporting script was copied. Reporting levels 1 and 2 only")) +accessdeniedaddress.datatype = "string" +accessdeniedaddress.default = "http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl" + +usecustombannedimage = s:taboption("tab_general", ListValue, "usecustombannedimage", translate("Banned image replacement")) +usecustombannedimage:value("on", translate("Yes")) +usecustombannedimage:value("off", translate("No")) +usecustombannedimage.default = "on" + +custombannedimagefile = s:taboption("tab_general", Value, "custombannedimagefile", translate("Custom banned image file")) +custombannedimagefile.datatype = "string" +custombannedimagefile.default = "/usr/share/e2guardian/transparent1x1.gif" + +usecustombannedflash = s:taboption("tab_general", ListValue, "usecustombannedflash", translate("Banned flash replacement")) +usecustombannedflash:value("on", translate("Yes")) +usecustombannedflash:value("off", translate("No")) +usecustombannedflash.default = "on" + +custombannedflashfile = s:taboption("tab_general", Value, "custombannedflashfile", translate("Custom banned flash file")) +custombannedflashfile.datatype = "string" +custombannedflashfile.default = "/usr/share/e2guardian/blockedflash.swf" + +filtergroups = s:taboption("tab_general", Value, "filtergroups", translate("Number of filter groups")) +filtergroups.datatype = "and(uinteger,min(1))" +filtergroups.default = "1" + +filtergroupslist = s:taboption("tab_general", Value, "filtergroupslist", translate("List of filter groups")) +filtergroupslist.datatype = "string" +filtergroupslist.default = "/etc/e2guardian/lists/filtergroupslist" + +bannediplist = s:taboption("tab_general", Value, "bannediplist", translate("List of banned IPs")) +bannediplist.datatype = "string" +bannediplist.default = "/etc/e2guardian/lists/bannediplist" + +exceptioniplist = s:taboption("tab_general", Value, "exceptioniplist", translate("List of IP exceptions")) +exceptioniplist.datatype = "string" +exceptioniplist.default = "/etc/e2guardian/lists/exceptioniplist" + +perroomblockingdirectory = s:taboption("tab_general", Value, "perroomblockingdirectory", translate("Per-Room blocking definition directory")) +perroomblockingdirectory.datatype = "string" +perroomblockingdirectory.default = "/etc/e2guardian/lists/bannedrooms/" + +showweightedfound = s:taboption("tab_general", ListValue, "showweightedfound", translate("Show weighted phrases found")) +showweightedfound:value("on", translate("Yes")) +showweightedfound:value("off", translate("No")) +showweightedfound.default = "on" + +weightedphrasemode = s:taboption("tab_general", ListValue, "weightedphrasemode", translate("Weighted phrase mode")) +weightedphrasemode:value("0", translate("off")) +weightedphrasemode:value("1", translate("on, normal operation")) +weightedphrasemode:value("2", translate("on, phrase found only counts once on a page")) +weightedphrasemode.default = "2" + +urlcachenumber = s:taboption("tab_general", Value, "urlcachenumber", translate("Clean result caching for URLs")) +urlcachenumber.datatype = "and(uinteger,min(0))" +urlcachenumber.default = "1000" + +urlcacheage = s:taboption("tab_general", Value, "urlcacheage", translate("Age before they should be ignored in seconds")) +urlcacheage.datatype = "and(uinteger,min(0))" +urlcacheage.default = "900" + +scancleancache = s:taboption("tab_general", ListValue, "scancleancache", translate("Cache for content (AV) scans as 'clean'")) +scancleancache:value("on", translate("Yes")) +scancleancache:value("off", translate("No")) +scancleancache.default = "on" + +phrasefiltermode = s:taboption("tab_general", ListValue, "phrasefiltermode", translate("Filtering options")) +phrasefiltermode:value("0", translate("raw")) +phrasefiltermode:value("1", translate("smart")) +phrasefiltermode:value("2", translate("both raw and smart")) +phrasefiltermode:value("3", translate("meta/title")) +phrasefiltermode.default = "2" + +preservecase = s:taboption("tab_general", ListValue, "perservecase", translate("Lower caseing options")) +preservecase:value("0", translate("force lower case")) +preservecase:value("1", translate("don't change")) +preservecase:value("2", translate("scan fist in lower, then in original")) +preservecase.default = "0" + +hexdecodecontent = s:taboption("tab_general", ListValue, "hexdecodecontent", translate("Hex decoding options")) +hexdecodecontent:value("on", translate("Yes")) +hexdecodecontent:value("off", translate("No")) +hexdecodecontent.default = "off" + +forcequicksearch = s:taboption("tab_general", ListValue, "forcequicksearch", translate("Quick search")) +forcequicksearch:value("on", translate("Yes")) +forcequicksearch:value("off", translate("No")) +forcequicksearch.default = "off" + +reverseaddresslookups= s:taboption("tab_general", ListValue, "reverseaddresslookups", translate("Reverse lookups for banned site and URLs")) +reverseaddresslookups:value("on", translate("Yes")) +reverseaddresslookups:value("off", translate("No")) +reverseaddresslookups.default = "off" + +reverseclientiplookups = s:taboption("tab_general", ListValue, "reverseclientiplookups", translate("Reverse lookups for banned and exception IP lists")) +reverseclientiplookups:value("on", translate("Yes")) +reverseclientiplookups:value("off", translate("No")) +reverseclientiplookups.default = "off" + +logclienthostnames = s:taboption("tab_general", ListValue, "logclienthostnames", translate("Perform reverse lookups on client IPs for successful requests")) +logclienthostnames:value("on", translate("Yes")) +logclienthostnames:value("off", translate("No")) +logclienthostnames.default = "off" + +createlistcachefiles = s:taboption("tab_general", ListValue, "createlistcachefiles", translate("Build bannedsitelist and bannedurllist cache files")) +createlistcachefiles:value("on",translate("Yes")) +createlistcachefiles:value("off",translate("No")) +createlistcachefiles.default = "on" + +prefercachedlists = s:taboption("tab_general", ListValue, "prefercachedlists", translate("Prefer cached list files")) +prefercachedlists:value("on", translate("Yes")) +prefercachedlists:value("off", translate("No")) +prefercachedlists.default = "off" + +maxuploadsize = s:taboption("tab_general", Value, "maxuploadsize", translate("Max upload size (in Kbytes)")) +maxuploadsize:value("-1", translate("no blocking")) +maxuploadsize:value("0", translate("complete block")) +maxuploadsize.default = "-1" + +maxcontentfiltersize = s:taboption("tab_general", Value, "maxcontentfiltersize", translate("Max content filter size"), +translate("The value must not be higher than max content ram cache scan size or 0 to match it")) +maxcontentfiltersize.datatype = "and(uinteger,min(0))" +maxcontentfiltersize.default = "256" + +maxcontentramcachescansize = s:taboption("tab_general", Value, "maxcontentramcachescansize", translate("Max content ram cache scan size"), +translate("This is the max size of file that DG will download and cache in RAM")) +maxcontentramcachescansize.datatype = "and(uinteger,min(0))" +maxcontentramcachescansize.default = "2000" + +maxcontentfilecachescansize = s:taboption("tab_general", Value, "maxcontentfilecachescansize", translate("Max content file cache scan size")) +maxcontentfilecachescansize.datatype = "and(uinteger,min(0))" +maxcontentfilecachescansize.default = "20000" + +proxytimeout = s:taboption("tab_general", Value, "proxytimeout", translate("Proxy timeout (5-100)")) +proxytimeout.datatype = "range(5,100)" +proxytimeout.default = "20" + +proxyexchange = s:taboption("tab_general", Value, "proxyexchange", translate("Proxy header excahnge (20-300)")) +proxyexchange.datatype = "range(20,300)" +proxyexchange.default = "20" + +pcontimeout = s:taboption("tab_general", Value, "pcontimeout", translate("Pconn timeout"), +translate("How long a persistent connection will wait for other requests")) +pcontimeout.datatype = "range(5,300)" +pcontimeout.default = "55" + +filecachedir = s:taboption("tab_general", Value, "filecachedir", translate("File cache directory")) +filecachedir.datatype = "string" +filecachedir.default = "/tmp" + +deletedownloadedtempfiles = s:taboption("tab_general", ListValue, "deletedownloadedtempfiles", translate("Delete file cache after user completes download")) +deletedownloadedtempfiles:value("on", translate("Yes")) +deletedownloadedtempfiles:value("off", translate("No")) +deletedownloadedtempfiles.default = "on" + +initialtrickledelay = s:taboption("tab_general", Value, "initialtrickledelay", translate("Initial Trickle delay"), +translate("Number of seconds a browser connection is left waiting before first being sent *something* to keep it alive")) +initialtrickledelay.datatype = "and(uinteger,min(0))" +initialtrickledelay.default = "20" + +trickledelay = s:taboption("tab_general", Value, "trickledelay", translate("Trickle delay"), +translate("Number of seconds a browser connection is left waiting before being sent more *something* to keep it alive")) +trickledelay.datatype = "and(uinteger,min(0))" +trickledelay.default = "10" + +downloadmanager = s:taboption("tab_general", Value, "downloadmanager", translate("Download manager")) +downloadmanager.datatype = "string" +downloadmanager.default = "/etc/e2guardian/downloadmanagers/default.conf" + +contentscannertimeout = s:taboption("tab_general", Value, "contentscannertimeout", translate("Content scanner timeout")) +contentscannertimeout.datatype = "and(uinteger,min(0))" +contentscannertimeout.default = "60" + +contentscanexceptions = s:taboption("tab_general", ListValue, "contentscanexceptions", translate("Content scan exceptions")) +contentscanexceptions:value("on", translate("Yes")) +contentscanexceptions:value("off", translate("No")) +contentscanexceptions.default = "off" + +recheckreplacedurls = s:taboption("tab_general", ListValue, "recheckreplacedurls", translate("e-check replaced URLs")) +recheckreplacedurls:value("on", translate("Yes")) +recheckreplacedurls:value("off", translate("No")) +recheckreplacedurls.default = "off" + +forwardedfor = s:taboption("tab_general", ListValue, "forwardedfor", translate("Misc setting: forwardedfor"), +translate("If on, it may help solve some problem sites that need to know the source ip.")) +forwardedfor:value("on", translate("Yes")) +forwardedfor:value("off", translate("No")) +forwardedfor.default = "off" + +usexforwardedfor = s:taboption("tab_general", ListValue, "usexforwardedfor", translate("Misc setting: usexforwardedfor"), +translate("This is for when you have squid between the clients and E2Guardian")) +usexforwardedfor:value("on", translate("Yes")) +usexforwardedfor:value("off", translate("No")) +usexforwardedfor.default = "off" + +logconnectionhandlingerrors = s:taboption("tab_general", ListValue, "logconnectionhandlingerrors", translate("Log debug info about log()ing and accept()ing")) +logconnectionhandlingerrors:value("on", translate("Yes")) +logconnectionhandlingerrors:value("off", translate("No")) +logconnectionhandlingerrors.default = "on" + +logchildprocesshandling = s:taboption("tab_general", ListValue, "logchildprocesshandling", translate("Log child process handling")) +logchildprocesshandling:value("on", translate("Yes")) +logchildprocesshandling:value("off", translate("No")) +logchildprocesshandling.default = "off" + +maxchildren = s:taboption("tab_general", Value, "maxchildren", translate("Max number of processes to spawn")) +maxchildren.datatype = "and(uinteger,min(0))" +maxchildren.default = "180" + +minchildren = s:taboption("tab_general", Value, "minchildren", translate("Min number of processes to spawn")) +minchildren.datatype = "and(uinteger,min(0))" +minchildren.default = "20" + +minsparechildren = s:taboption("tab_general", Value, "minsparechildren", translate("Min number of processes to keep ready")) +minsparechildren.datatype = "and(uinteger,min(0))" +minsparechildren.default = "16" + +preforkchildren = s:taboption("tab_general", Value, "preforkchildren", translate("Sets minimum nuber of processes when it runs out")) +preforkchildren.datatype = "and(uinteger,min(0))" +preforkchildren.default = "10" + +maxsparechildren = s:taboption("tab_general", Value, "maxsparechildren", translate("Sets the maximum number of processes to have doing nothing")) +maxsparechildren.datatype = "and(uinteger,min(0))" +maxsparechildren.default = "32" + +maxagechildren = s:taboption("tab_general", Value, "maxagechildren", translate("Max age of child process")) +maxagechildren.datatype = "and(uinteger,min(0))" +maxagechildren.default = "500" + +maxips = s:taboption("tab_general", Value, "maxips", translate("Max number of clinets allowed to connect")) +maxips:value("0", translate("no limit")) +maxips.default = "0" + +ipipcfilename = s:taboption("tab_general", Value, "ipipcfilename", translate("IP list IPC server directory and filename")) +ipipcfilename.datatype = "string" +ipipcfilename.default = "/tmp/.dguardianipc" + +urlipcfilename = s:taboption("tab_general", Value, "urlipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process")) +urlipcfilename.datatype = "string" +urlipcfilename.default = "/tmp/.dguardianurlipc" + +ipcfilename = s:taboption("tab_general", Value, "ipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process")) +ipcfilename.datatype = "string" +ipcfilename.default = "/tmp/.dguardianipipc" + +nodeamon = s:taboption("tab_general", ListValue, "nodeamon", translate("Disable deamoning")) +nodeamon:value("on", translate("Yes")) +nodeamon:value("off", translate("No")) +nodeamon.default = "off" + +nologger = s:taboption("tab_general", ListValue, "nologger", translate("Disable logger")) +nologger:value("on", translate("Yes")) +nologger:value("off", translate("No")) +nologger.default = "off" + +logadblock = s:taboption("tab_general", ListValue, "logadblock", translate("Enable logging of ADs")) +logadblock:value("on", translate("Yes")) +logadblock:value("off", translate("No")) +logadblock.default = "off" + +loguseragent = s:taboption("tab_general", ListValue, "loguseragent", translate("Enable logging of client user agent")) +loguseragent:value("on", translate("Yes")) +loguseragent:value("off", translate("No")) +loguseragent.default = "off" + +softrestart = s:taboption("tab_general", ListValue, "softrestart", translate("Enable soft restart")) +softrestart:value("on", translate("Yes")) +softrestart:value("off", translate("No")) +softrestart.default = "off" + + +------------------------ Additional Settings Tab ---------------------------- + +e2guardian_config_file = s:taboption("tab_additional", TextValue, "_data", "") +e2guardian_config_file.wrap = "off" +e2guardian_config_file.rows = 25 +e2guardian_config_file.rmempty = false + +function e2guardian_config_file.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + file = "/etc/e2guardian/e2guardianf1.conf" + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function e2guardian_config_file.write(self, section, value) + if value then + local uci = require "luci.model.uci".cursor_state() + file = "/etc/e2guardian/e2guardianf1.conf" + fs.writefile(file, value:gsub("\r\n", "\n")) + end +end + + +---------------------------- Logs Tab ----------------------------- + +e2guardian_logfile = s:taboption("tab_logs", TextValue, "lines", "") +e2guardian_logfile.wrap = "off" +e2guardian_logfile.rows = 25 +e2guardian_logfile.rmempty = true + +function e2guardian_logfile.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + file = "/tmp/e2guardian/access.log" + if file then + return fs.readfile(file) or "" + else + return "Can't read log file" + end +end + +function e2guardian_logfile.write() + return "" +end + +return m diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po index 2d601f857..ab714b50b 100644 --- a/applications/luci-app-firewall/po/pt-br/firewall.po +++ b/applications/luci-app-firewall/po/pt-br/firewall.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <eder.grigorio@openmailbox.org>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 17:43-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "%s in %s" msgstr "%s in %s" @@ -143,7 +143,7 @@ msgid "Forward to" msgstr "Encaminhar para" msgid "Friday" -msgstr "" +msgstr "Sexta-feira" msgid "From %s in %s" msgstr "Vindo de %s em %s" @@ -222,10 +222,10 @@ msgstr "" "equipamento cliente." msgid "Monday" -msgstr "" +msgstr "Segunda-Feira" msgid "Month Days" -msgstr "" +msgstr "Dias do mês" msgid "Name" msgstr "Nome" @@ -296,7 +296,7 @@ msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redireciona tráfego entrante para o computador interno especificado" msgid "Restart Firewall" -msgstr "" +msgstr "Reiniciar o Firewall" msgid "Restrict Masquerading to given destination subnets" msgstr "Restringe o mascaramento para uma subrede de destino específica" @@ -330,7 +330,7 @@ msgid "SNAT port" msgstr "Porta da SNAT" msgid "Saturday" -msgstr "" +msgstr "Sábado" msgid "Source IP address" msgstr "Endereço IP de origem" @@ -360,19 +360,19 @@ msgid "Source zone" msgstr "Zona de origem" msgid "Start Date (yyyy-mm-dd)" -msgstr "" +msgstr "Dia inicial (aaaa-mm-dd)" msgid "Start Time (hh:mm:ss)" -msgstr "" +msgstr "Hora inicial (hh:mm:ss)" msgid "Stop Date (yyyy-mm-dd)" -msgstr "" +msgstr "Dia final (aaaa-mm-dd)" msgid "Stop Time (hh:mm:ss)" -msgstr "" +msgstr "Hora final (hh:mm:ss)" msgid "Sunday" -msgstr "" +msgstr "Domingo" msgid "" "The firewall creates zones over your network interfaces to control network " @@ -411,7 +411,6 @@ 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 <em>input</em> and " "<em>output</em> options set the default policies for traffic entering and " @@ -427,10 +426,10 @@ msgstr "" "zona." msgid "Thursday" -msgstr "" +msgstr "Quita-feira" msgid "Time in UTC" -msgstr "" +msgstr "Hora em UTC" msgid "To %s at %s on <var>this device</var>" msgstr "Para %s em %s <var>neste dispositivo</var>" @@ -463,7 +462,7 @@ msgstr "" "ou abrir portas WAN no roteador." msgid "Tuesday" -msgstr "" +msgstr "Terça-feira" msgid "Via %s" msgstr "Via %s" @@ -472,10 +471,10 @@ msgid "Via %s at %s" msgstr "Via %s at %s" msgid "Wednesday" -msgstr "" +msgstr "Quarta-feira" msgid "Week Days" -msgstr "" +msgstr "Dias da semana" msgid "" "You may specify multiple by selecting \"-- custom --\" and then entering " diff --git a/applications/luci-app-fwknopd/po/pt-br/fwknopd.po b/applications/luci-app-fwknopd/po/pt-br/fwknopd.po new file mode 100644 index 000000000..286b49db3 --- /dev/null +++ b/applications/luci-app-fwknopd/po/pt-br/fwknopd.po @@ -0,0 +1,116 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"Allow SPA clients to request access to services through an iptables firewall " +"instead of just to it." +msgstr "" +"Permitir que clientes SPA requeiram acesso a serviços através de um firewall " +"iptables ao invés de apenas fazê-lo." + +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" +"Permitir que clientes SPA requeiram encaminhamento de destinos por nome DNS." + +msgid "Base 64 key" +msgstr "Chave em formato base64" + +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 um conjunto de porta e protocolos (TCP ou UDP) que serão abertos se " +"uma sequência de batidas for observada. Se esta entrada não estiver " +"definida, fwknopd irá tentar honrar qualquer requisição de protocolo/porta " +"especificada nos dados SPA (a não ser se casar com qualquer entrada de " +"\"RESTRICT_PORTS\"). Múltiplas entradas serão separadas por vírgula." + +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 a duração do tempo de acesso que será concedido pelo fwknopd através " +"do firewall depois de uma sequência de batidas válida de um endereço IP. Se " +"“FW_ACCESS_TIMEOUT” não estiver definido, o valor padrão será de 30 " +"segundos. " + +msgid "" +"Define the symmetric key used for decrypting an incoming SPA packet that is " +"encrypted by the fwknop client with Rijndael." +msgstr "" +"Define a chave simétrica usada para decifrar um pacote SPA entrante que foi " +"cifrado pelo cliente fwknop com o algoritmo Rijndael." + +msgid "Enable Uci/Luci control" +msgstr "Habilitar o controle UCI/Luci" + +msgid "Enable config overwrite" +msgstr "Habilitar a sobrescrita da configuração" + +msgid "Firewall Knock Daemon" +msgstr "Servidor do Firwall Knock" + +msgid "Firewall Knock Operator" +msgstr "Operador do Firewall Knock" + +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 "" +"Forçar que todos os pacotes SPA contenham um endereço IP real dentro do " +"pacote cifrado. Isto torna impossível o uso do argumento de linha de comando " +"'-s' no cliente fwknop. Desta forma, ou o argumento '-R' deve ser usada para " +"resolver os endereços externos automaticamente (se o cliente estiver atrás " +"de uma NAT) ou o ciente deve conhecer o seu endereço IP externo e defini-lo " +"através do argumento '-a'." + +msgid "" +"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 " +"seconds" +msgstr "" +"Idade máxima, em segundos, que um pacote SPA será aceito. Padrão é 120 " +"segundos." + +msgid "Normal Key" +msgstr "Chave Normal" + +msgid "Specify the ethernet interface on which fwknopd will sniff packets." +msgstr "" +"Especifica o dispositivo ethernet no qual o fwknopd irá observar os pacotes." + +msgid "The base64 hmac key" +msgstr "A chave de autenticação HMAC em formato base64" + +msgid "Use ANY for any source ip" +msgstr "Use \"ANY\" para qualquer endereço IP de origem" + +msgid "" +"When unchecked, the config files in /etc/fwknopd will be used as is, " +"ignoring any settings here." +msgstr "" +"Quando desmarcado, os arquivos de configuração em /etc/fwknopd serão usados " +"como estão, ignorando qualquer ajustes feitos aqui." + +msgid "access.conf stanzas" +msgstr "Estâncias do access.conf" + +msgid "fwknopd.conf config options" +msgstr "Opções do fwknopd.conf" diff --git a/applications/luci-app-lxc/Makefile b/applications/luci-app-lxc/Makefile new file mode 100644 index 000000000..9f313dfb1 --- /dev/null +++ b/applications/luci-app-lxc/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2017 Dan Luedtke <mail@danrl.com> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LXC management Web UI +LUCI_DEPENDS:=+luci-mod-admin-full +lxc +lxc-create +liblxc +rpcd-mod-lxc +getopt +xz +LUCI_PKGARCH:=all + +PKG_MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr> + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif Binary files differnew file mode 100644 index 000000000..d09febf12 --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif Binary files differnew file mode 100644 index 000000000..f0d68cc8b --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif Binary files differnew file mode 100644 index 000000000..c1b39bbed --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua new file mode 100644 index 000000000..ea7adbafb --- /dev/null +++ b/applications/luci-app-lxc/luasrc/controller/lxc.lua @@ -0,0 +1,167 @@ +--[[ + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +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 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +]]-- + +module("luci.controller.lxc", package.seeall) + +require "ubus" +local conn = ubus.connect() +if not conn then + error("Failed to connect to ubus") +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 index() + page = node("admin", "services", "lxc") + page.target = cbi("lxc") + page.title = _("LXC Containers") + page.order = 70 + + page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil) + page.leaf = true + +end + +function lxc_get_downloadable() + luci.http.prepare_content("application/json") + + local f = io.popen('uname -m', 'r') + local target = f:read('*a') + f:close() + target = target:gsub("^%s*(.-)%s*$", "%1") + + local templates = {} + + local f = io.popen('lxc-create -n just_want_to_list_available_lxc_templates -t download -- --list', 'r') + + for line in f:lines() do + local dist,version = line:match("^(%S+)%s+(%S+)%s+" .. target .. "%s+default%s+%S+$") + if dist~=nil and version~=nil then templates[#templates + 1] = dist .. ":" .. version end + end + + f:close() + luci.http.write_json(templates) +end + +function lxc_create(lxc_name, lxc_template) + luci.http.prepare_content("text/plain") + + local uci = require("uci").cursor() + + local url = uci:get("lxc", "lxc", "url") + + if not pcall(dofile, "/etc/openwrt_release") then + return luci.http.write("1") + end + + local f = io.popen('uname -m', 'r') + local target = f:read('*a') + f:close() + target = target:gsub("^%s*(.-)%s*$", "%1") + + local lxc_dist = lxc_template:gsub("(.*):(.*)", '%1') + local lxc_release = lxc_template:gsub("(.*):(.*)", '%2') + + local data = conn:call("lxc", "create", { name = lxc_name, template = "download", args = { "--server", url, "--no-validate", "--dist", lxc_dist, "--release", lxc_release, "--arch", target } } ) + + luci.http.write(data) +end + +function lxc_action(lxc_action, lxc_name) + luci.http.prepare_content("application/json") + + local data, ec = conn:call("lxc", lxc_action, lxc_name and { name = lxc_name} or {} ) + + luci.http.write_json(ec and {} or data) +end + +function lxc_get_config_path() + local f = io.open("/etc/lxc/lxc.conf", "r") + local content = f:read("*all") + f:close() + local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)') + if ret then + return ret .. "/" + else + return "/srv/lxc/" + end +end + +function lxc_configuration_get(lxc_name) + luci.http.prepare_content("text/plain") + + local f = io.open(lxc_get_config_path() .. lxc_name .. "/config", "r") + local content = f:read("*all") + f:close() + + luci.http.write(content) +end + +function lxc_configuration_set(lxc_name) + luci.http.prepare_content("text/plain") + + local lxc_configuration = luci.http.formvalue("lxc_configuration") + + if lxc_configuration == nil then + return luci.http.write("1") + end + + local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+") + if not f then + return luci.http.write("2") + end + + f:write(lxc_configuration) + f:close() + + luci.http.write("0") +end + diff --git a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua new file mode 100644 index 000000000..ac0fdff33 --- /dev/null +++ b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua @@ -0,0 +1,31 @@ +--[[ + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +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 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +]]-- + +local fs = require "nixio.fs" + +m = Map("lxc", translate("LXC Containers")) + +if fs.access("/etc/config/lxc") then + m:section(SimpleSection).template = "lxc" + + s = m:section(TypedSection, "lxc", translate("Options")) + s.anonymous = true + s.addremove = false + + s:option(Value, "url", translate("Containers URL")) +end + +return m diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm new file mode 100644 index 000000000..edfff8e06 --- /dev/null +++ b/applications/luci-app-lxc/luasrc/view/lxc.htm @@ -0,0 +1,458 @@ +<%# + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +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 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +-%> + +<fieldset class="cbi-section"> + <legend><%:Available Containers%></legend> + <div class="cbi-section-node"> + <table id="t_lxc_list" class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Name%></th> + <th class="cbi-section-table-cell"><%:Status%></th> + <th class="cbi-section-table-cell"><%:Actions%></th> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <span id="lxc-list-output"></span> +</fieldset> + +<hr/> +<fieldset class="cbi-section"> + <legend><%:Create New Container%></legend> + <div class="cbi-section-node"> + <table id="t_lxc_create" class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Name%></th> + <th class="cbi-section-table-cell"><%:Template%></th> + <th class="cbi-section-table-cell"><%:Actions%></th> + </tr> + <tr id="tr_holder"> + <td> + <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /> + </td> + <td> + <select id="s_template" class="cbi-input-select cbi-button"> + </select> + </td> + <td> + <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" /> + <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span> + </td> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <span id="lxc-add-output"></span> +</fieldset> + +<hr/> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" } + window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"} + + var t_lxc_list = document.getElementById('t_lxc_list'); + var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> '; + var timeout_msg = 0 + var output_list = document.getElementById("lxc-list-output") + var output_add = document.getElementById("lxc-add-output") + var loader_add = document.getElementById("lxc-add-loader") + + function lxc_create(tr) + { + var lxc_name = tr.querySelector("#tx_name").value.trim() + var lxc_template = tr.querySelector("#s_template").value + var bt_create = tr.querySelector("#bt_create") + + if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null) + return info_message(output_add, "Container with that name already exists!", 4000) + + bt_create.disabled = true + output_add.innerHTML = '' + + if (!lxc_name || !lxc_name.length) + { + bt_create.disabled = false + return info_message(output_add, "Name cannot be empty!", 4000) + } + + loading(loader_add) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null, + function(x) + { + bt_create.disabled = false + loading(loader_add, 0) + + if (!x) + info_message(output_add, "Container creation failed!") + }) + } + + function lxc_create_template(lxc_name, lxc_state) + { + var info_row = t_lxc_list.querySelector("#empty") + if (info_row) + t_lxc_list.deleteRow(1) + + var actions = '' + actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />' + actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />' + actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />' + actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\ + <option selected disabled>more</option>\ + <option>configure</option>\ + <option>freeze</option>\ + <option>unfreeze</option>\ + <option>reboot</option>\ + </select>' + actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>' + + var row = t_lxc_list.insertRow(-1) + var cell = row.insertCell(-1) + cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>") + cell.width = "30%" + cell.setAttribute("data-id", lxc_name) + + cell = row.insertCell(-1) + cell.width = "20%" + cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>" + + cell = row.insertCell(-1) + cell.width = "50%" + cell.innerHTML = actions + } + + function action_handler(self) + { + var action = self.getAttribute("data-action"); + + var bt_action = self + var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id') + var status_img = self.parentNode.parentNode.querySelector('img') + var loader = self.parentNode.querySelector('[data-loader]') + + bt_action.disabled = true + + if (action == "stop") + { + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + bt_action.disabled = false + + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(status_img, "red") + + }); + } + + else if (action == "start") + { + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, data) + { + loading(loader, 0) + bt_action.disabled = false + + //FIXME: uncomment after fixing 'lxc-start' + if (!x /*|| ec */) + return info_message(output_list,"Action failed!") + + //FIXME: uncomment after fixing 'lxc-start' + //set_status(status_img, "green") + }); + } + + else if (action == "destroy") + { + if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)")) + return + + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + bt_action.disabled = false + + if (!x || ec) + return info_message(output_list,"Action failed!") + + var row = self.parentNode.parentNode + row.parentNode.removeChild(row) + + }); + } + } + + function lxc_configure_handler(self) + { + var td = self.parentNode + var textarea = td.querySelector('[data-id]') + var lxc_name = textarea.getAttribute('data-id') + var lxc_configuration = textarea.value + + new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) , + function(x) + { + if (!x || x.responseText != "0") + return info_message(output_list,"Action failed!") + + info_message(output_list,"LXC configuration updated") + var row = td.parentNode + row.parentNode.removeChild(row) + }) + } + + function lxc_rename_template(lxc_name) + { + var h = '\ + <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \ + <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />' + + return h + } + + function lxc_configure_template(lxc_name, lxc_configuration) + { + var h = '\ + <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \ + <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />' + + return h + } + + function action_more_handler(self) + { + var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id') + var loader = self.parentNode.parentNode.querySelector('[data-loader]') + + var option = self.options[self.selectedIndex].text + + self.value = "more" + + switch (option) + { + case "configure": + var tr = document.createElement('tr') + var row = self.parentNode.parentNode + var next_row = row.nextSibling + if (next_row && next_row.getAttribute('data-action') !== null) + row.parentNode.removeChild(next_row) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null, + function(x) + { + tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>" + tr.setAttribute('data-action','') + row.parentNode.insertBefore(tr, row.nextSibling) + }) + + break + + case "freeze": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + if(img.getAttribute('src') != window.img["green"]) + return info_message(output_list,"Container is not running!") + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(img, "purple") + }) + + break + + case "unfreeze": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + + if(img.getAttribute('src') != window.img["purple"]) + return info_message(output_list,"Container is not frozen!") + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(img, "green") + }) + + break + + case "reboot": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + if(img.getAttribute('src') != window.img["green"]) + return info_message(output_list,"Container is not running!") + + if (!confirm("Are you sure?")) + return + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + info_message(output_list,"LXC rebooted") + }) + break + } + + } + + function set_empty(t_lxc_list) + { + if (document.getElementById('empty') !== null) + return + + var row_count = t_lxc_list.rows.length; + while(--row_count) t_lxc_list.deleteRow(row_count); + + var row = t_lxc_list.insertRow(-1); + row.id = 'empty' + var cell = row.insertCell(0); + cell.colSpan = 4; + cell.innerHTML = '<em><br />There are no containers available yet.</em>'; + } + + function lxc_list_update() + { + XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null, + function(x, data) + { + if (!x) return; + + var lxc_count = Object.keys(data).length + if (!data || !lxc_count) + return set_empty(t_lxc_list) + + if (document.getElementById('empty') !== null) + t_lxc_list.deleteRow(1); + + var lxcs = t_lxc_list.querySelectorAll('td[data-id]') + var lxc_name_table = {} + for (var i = 0, len = lxcs.length; i < len; i++) + { + var lxc_name = lxcs[i].getAttribute('data-id') + if (!(lxc_name in data)) + { + var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode + row.parentNode.removeChild(row) + continue + } + + lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img') + } + + for(var key in data) + { + var lxc_name = key + var state = window.states[data[key]] + + if (!(lxc_name in lxc_name_table)) + lxc_create_template(lxc_name, state) + + else if (state != get_status(lxc_name_table[lxc_name])) + set_status(lxc_name_table[lxc_name], state) + } + + }) + } + + function loading(elem, state) + { + state = (typeof state === 'undefined') ? 1 : state + + if (state === 1) + elem.innerHTML = loader_html + else + setTimeout(function() { elem.innerHTML = ''}, 1000) + } + + function set_status(elem, state) + { + state = (typeof state === 'undefined') ? 1 : state + + setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300) + } + + function get_status(elem) + { + var src = elem.getAttribute('src') + + for (var i in img) + { + if (img[i] == src) + return i + } + } + + function info_message(output, msg, timeout) + { + timeout = timeout || 3000 + output.innerHTML = msg + clearTimeout(timeout_msg) + timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout); + } + + lxc_list_update() + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null, + function(x, data) + { + if (!x) return; + + var lxc_count = Object.keys(data).length + if (!data || !lxc_count) return; + var select = document.getElementById("s_template"); + for(var key in data) + { + var option = document.createElement('option'); + option.value = data[key]; + option.text = data[key].replace(/[_:]/g, ' '); + select.add(option, -1); + } + }) + +//]]></script> diff --git a/applications/luci-app-lxc/root/etc/config/lxc b/applications/luci-app-lxc/root/etc/config/lxc new file mode 100644 index 000000000..5572c735f --- /dev/null +++ b/applications/luci-app-lxc/root/etc/config/lxc @@ -0,0 +1,6 @@ +# +# lxc uci configuration +# + +config lxc 'lxc' + option url 'virtualwrt.org/containers/' diff --git a/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua b/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua index 68f7a5a25..62ce25eff 100644 --- a/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua +++ b/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua @@ -103,10 +103,7 @@ uci:foreach("wireless", "wifi-device", function(section) -- 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 + if hwtype == "mac80211" then sys.exec("iw reg set " .. syscc) elseif hwtype == "broadcom" then sys.exec ("wlc country " .. syscc) diff --git a/applications/luci-app-meshwizard/po/pt-br/meshwizard.po b/applications/luci-app-meshwizard/po/pt-br/meshwizard.po index a2238e52e..9421e0253 100644 --- a/applications/luci-app-meshwizard/po/pt-br/meshwizard.po +++ b/applications/luci-app-meshwizard/po/pt-br/meshwizard.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:00-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Activate or deactivate IPv6 config globally." msgstr "Habilita e desabilita a configuração IPv6 globalmente." @@ -70,7 +70,6 @@ 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." diff --git a/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po new file mode 100644 index 000000000..28bfa186b --- /dev/null +++ b/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po @@ -0,0 +1,172 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "Permitir que o buffer em anel exceda o limite por essa quantidade" + +msgid "Ask for username and password on connect" +msgstr "Pergunte por um usuário e senha na conexão" + +msgid "Authentication required" +msgstr "Requer autenticação" + +msgid "Auto" +msgstr "Automático" + +msgid "Automatic disabling of MJPEG mode" +msgstr "Desativação automática do modo MJPEG" + +msgid "Blink" +msgstr "Pisca" + +msgid "Check to save the stream to an mjpeg file" +msgstr "Marque para salvar o fluxo em um arquivo MJPEG" + +msgid "Command to run" +msgstr "Comando para executar:" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "Não inicie o dynctrls do driver do Linux-UVC" + +msgid "Don't initalize dynctrls" +msgstr "Não inicia o dynctrls" + +msgid "Drop frames smaller then this limit" +msgstr "Descarte quadros menores que este limite" + +msgid "Enable MJPG-streamer" +msgstr "Ativa o MJPG-streamer" + +msgid "Enable YUYV format" +msgstr "Ativar Formato YUYV" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Exceed" +msgstr "Ultrapassado" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "" +"Execute o comando depois de salvar a imagem. Mjpg-streamer passa o nome do " +"arquivo como primeiro parâmetro para o comando." + +msgid "File input" +msgstr "Entrada do arquivo" + +msgid "File output" +msgstr "Saída do arquivo" + +msgid "Folder" +msgstr "Pasta" + +msgid "Folder that contains webpages" +msgstr "Pasta que contém páginas web" + +msgid "Frames per second" +msgstr "Quadros por segundos" + +msgid "General" +msgstr "Geral" + +msgid "HTTP output" +msgstr "Saída HTTP" + +msgid "Input plugin" +msgstr "Plugins de entrada" + +msgid "Interval between saving pictures" +msgstr "Intervalo entre o salvamento das imagens" + +msgid "JPEG compression quality" +msgstr "Qualidade da compressão JPEG" + +msgid "Led control" +msgstr "Controle de LED" + +msgid "MJPG-streamer" +msgstr "MJPG-streamer" + +msgid "Max. number of pictures to hold" +msgstr "Número máximo de imagens a serem mantidas" + +msgid "Mjpeg output" +msgstr "Saída Mjpeg" + +msgid "Off" +msgstr "Desligado" + +msgid "On" +msgstr "Ligado" + +msgid "Output plugin" +msgstr "Plugin de saída" + +msgid "Password" +msgstr "Senha" + +msgid "Plugin settings" +msgstr "Configurações do Plugin" + +msgid "Port" +msgstr "Porta" + +msgid "Resolution" +msgstr "Resolução" + +msgid "Ring buffer size" +msgstr "Tamanho do buffer em anel" + +msgid "Set folder to save pictures" +msgstr "Definir pasta para salvas as imagens" + +msgid "Set the inteval in millisecond" +msgstr "Defina o intervalo em milisegundos" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "" +"Defina o tamanho mínimo se a webcam produz quadros lixo de tamanho pequeno. " +"Pode acontecer sob condições de pouca luz" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "" +"Defina a qualidade em porcentagem. Esta definição ativa o formato YUYV, " +"desativa MJPEG" + +msgid "TCP port for this HTTP server" +msgstr "Porta TCP para este servidor HTTP" + +msgid "UVC input" +msgstr "Dispositivo UVC de entrada" + +msgid "Username" +msgstr "Usuário" + +msgid "WWW folder" +msgstr "Pasta WWW" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "" +"Mjpg streamer é uma aplicação de streaming para webcams compatíveis com o " +"Linux-UVC" diff --git a/applications/luci-app-olsr/po/pt-br/olsr.po b/applications/luci-app-olsr/po/pt-br/olsr.po index 1461c1dd8..499176c16 100644 --- a/applications/luci-app-olsr/po/pt-br/olsr.po +++ b/applications/luci-app-olsr/po/pt-br/olsr.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <eder.grigorio@openmailbox.org>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:01-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Active MID announcements" msgstr "" @@ -59,7 +59,6 @@ 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'" @@ -173,7 +172,6 @@ msgstr "" "Validade do <abbr title=\"Host and network association, Associação de " "equipamentos e redes\">HNA</abbr>" -#, fuzzy msgid "HNA6 Announcements" msgstr "" "Anúncios do <abbr title=\"Host and network association, Associação de " @@ -215,7 +213,6 @@ 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." @@ -496,7 +493,6 @@ msgstr "" "> 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:<br /" @@ -551,7 +547,6 @@ msgstr "" "OLSR - Anúncios <abbr title=\"Host and network association, Associação de " "equipamentos e redes\">HNA</abbr>" -#, fuzzy msgid "OLSR - HNA6-Announcements" msgstr "" "OLSR - Anúncios <abbr title=\"Host and network association, Associação de " @@ -654,7 +649,6 @@ msgstr "" "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 " @@ -857,7 +851,6 @@ msgstr "" "and network association, Associação de equipamentos e redes\">HNA</abbr> " "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 " diff --git a/applications/luci-app-openvpn/po/pt-br/openvpn.po b/applications/luci-app-openvpn/po/pt-br/openvpn.po index 916370e7f..84b054058 100644 --- a/applications/luci-app-openvpn/po/pt-br/openvpn.po +++ b/applications/luci-app-openvpn/po/pt-br/openvpn.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:04-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "%s" msgstr "%s" @@ -154,7 +154,7 @@ msgid "Don't log timestamps" msgstr "Não registar a data/hora" msgid "Don't pull routes automatically" -msgstr "" +msgstr "Não puxe as rotas automaticamente" msgid "Don't re-read key on restart" msgstr "Não reler a chave entre os reinícios" @@ -505,13 +505,13 @@ 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 "" +msgstr "A mais alta versão suporta do TLS" msgid "The key direction for 'tls-auth' and 'secret' options" -msgstr "" +msgstr "A direção da chave para as opções 'tls-auth' e 'secret'" msgid "The lowest supported TLS version" -msgstr "" +msgstr "A mais baixa versão suporta do TLS" msgid "Timeframe for key exchange" msgstr "Janela temporal para troca de chaves" diff --git a/applications/luci-app-privoxy/po/pt-br/privoxy.po b/applications/luci-app-privoxy/po/pt-br/privoxy.po new file mode 100644 index 000000000..8d3eee20d --- /dev/null +++ b/applications/luci-app-privoxy/po/pt-br/privoxy.po @@ -0,0 +1,516 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" +"A URL a ser exibida na página de erro que os usuários verão se o acesso a " +"uma página não confiável é negado." + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" +"A URL para a documentação sobre o Privoxy local, configuração ou políticas." + +msgid "A directory where Privoxy can create temporary files." +msgstr "Um diretório onde Privoxy pode criar arquivos temporários." + +msgid "Access Control" +msgstr "Controle de Acesso" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" +"Ações que são aplicadas a todos as páginas e talvez descartado mais tarde." + +msgid "An alternative directory where the templates are loaded from." +msgstr "Um diretório alternativo de onde os modelos são carregados." + +msgid "An email address to reach the Privoxy administrator." +msgstr "Um endereço de e-mail para alcançar o administrador do Privoxy." + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" +"Tempo limite, em segundos, da manutenção da conexão (keep-alive) do servidor " +"se não for especificado." + +msgid "Boot delay" +msgstr "Atraso de iniciação" + +msgid "CGI user interface" +msgstr "Interface de usuário CGI" + +msgid "Common Log Format" +msgstr "Formato de registros (log) comum" + +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 "" +"Configure aqui o encaminhamento de pedidos HTTP através de uma cadeia de " +"múltiplos proxies. Note-se que proxies pai pode diminuir muito o nível de " +"privacidade. Também serão aceitos proxies SOCKS." + +msgid "Debug GIF de-animation" +msgstr "Depurar de-animação GIF" + +msgid "Debug force feature" +msgstr "Recurso de depuração forçado" + +msgid "Debug redirects" +msgstr "Redirecionamentos de depuração" + +msgid "Debug regular expression filters" +msgstr "Depuração de filtros de expressão regular" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "" +"Atraso (em segundos) durante a inicialização do sistema antes do Privoxy " +"iniciar" + +msgid "Directory does not exist!" +msgstr "O diretório não existe!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "Desativado == Modo Proxy Transparente" + +msgid "Documentation" +msgstr "Documentação" + +msgid "During delay ifup-events are not monitored !" +msgstr "Durante a espera, eventos ifup não serão monitorados!" + +msgid "Enable proxy authentication forwarding" +msgstr "Habilitar o encaminhamento de autenticação de proxy" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" +"Ativar/Desativar a iniciação automática do Privoxy junto com a iniciação do " +"sistema ou eventos de interface" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Ativar / Desativar filtragem quando Privoxy iniciar." + +msgid "Enabled" +msgstr "Habilitado" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" +"A ativação dessa opção não é recomendado se não houver nenhum proxy pai que " +"requer autenticação!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "O arquivo '%s' não foi encontrado dentro do Diretório de Configuração" + +msgid "File not found or empty" +msgstr "Arquivo não encontrado ou vazio" + +msgid "Files and Directories" +msgstr "Arquivos e diretórios" + +msgid "For help use link at the relevant option" +msgstr "Para ajuda, use o link na respectiva opção" + +msgid "Forwarding" +msgstr "Encaminhando" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" +"Se ativado, Privoxy esconde o link \"ir lá de qualquer maneira\". O usuário, " +"obviamente, não deve ser capaz de contornar qualquer bloqueio." + +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 "" +"Se você pretende operar Privoxy para mais usuários do que apenas a si mesmo, " +"pode ser uma boa ideia para que eles saibam como falar com você, o que você " +"bloquear e por que você faz isso, as suas políticas, etc." + +msgid "Invalid email address" +msgstr "Endereço de e-mail inválido" + +msgid "It is NOT recommended for the casual user." +msgstr "Não é recomendado para o usuário casual." + +msgid "Location of the Privoxy User Manual." +msgstr "Localização do Manual do Usuário do Privoxy." + +msgid "Log File Viewer" +msgstr "Visualizador de arquivo de registros (log)" + +msgid "Log all data read from the network" +msgstr "Registrar todos os dados lidos da rede" + +msgid "Log all data written to the network" +msgstr "Registrar todos os dados gravados na rede" + +msgid "Log the applying actions" +msgstr "Registrar as ações aplicadas" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" +"Registrar o destino para cada pedido que o Privoxy deixou passar. Consulte " +"também 'Debug 1024'." + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" +"Registrar o destino para os pedidos que o Privoxy não deixou passar, e a " +"razão pela qual." + +msgid "Logging" +msgstr "Registrando (logging)" + +msgid "Main actions file" +msgstr "Arquivo principal de ações" + +msgid "Mandatory Input: No Data given!" +msgstr "Entrada obrigatória: Dados não foram informados!" + +msgid "Mandatory Input: No Directory given!" +msgstr "Entrada obrigatória: Nenhum Diretório foi informado!" + +msgid "Mandatory Input: No File given!" +msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!" + +msgid "Mandatory Input: No Port given!" +msgstr "Entrada obrigatória: Nenhuma Porta foi informado!" + +msgid "Mandatory Input: No files given!" +msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "" +"Entrada obrigatória: Nenhum endereço IPv4 ou nome de equipamento válido foi " +"fornecido!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "Entrada obrigatória: Nenhum endereço IPv6 válido foi informado!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "Entrada obrigatória: Nenhuma porta válida foi informada!" + +msgid "Maximum number of client connections that will be served." +msgstr "O número máximo de conexões de cliente que será aceito." + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "Tamanho máximo (em KB) do buffer para filtragem de conteúdo." + +msgid "Miscellaneous" +msgstr "Diversos" + +msgid "NOT installed" +msgstr "NÃO instalado" + +msgid "No trailing '/', please." +msgstr "Sem '/' final, por favor." + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "Erros não fatais - *é altamente recomendado ativar isto*" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" +"Número de segundos após o qual uma conexão expira se nenhum dado for " +"recebido." + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" +"Número de segundos após o qual uma conexão aberta deixará de ser reutilizada." + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" +"Somente quando for usado os \"filtros externos\". O Privoxy tem que criar " +"arquivos temporários." + +msgid "Please install current version !" +msgstr "Por favor, instale a versão atual!" + +msgid "Please press [Read] button" +msgstr "Por favor, pressione o botão [Ler]" + +msgid "Please read Privoxy manual for details!" +msgstr "Por favor, leia o manual do Privoxy para mais detalhes!" + +msgid "Please update to the current version!" +msgstr "Por favor, atualize para a versão atual!" + +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 pode (e normalmente o faz) utilizar uma série de outros arquivos de " +"configuração, ajuda e de registros. Esta seção do arquivo de configuração " +"informa o Privoxy onde encontrar os outros arquivos." + +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 é um proxy web sem cache com capacidades avançadas de filtragem para " +"aumentar a privacidade, modificar dados de páginas web e cabeçalhos HTTP, " +"controlar o acesso e remover anúncios e outras porcarias detestável da " +"Internet." + +msgid "Read / Reread log file" +msgstr "Ler / Ler novamente o arquivo de registros (log)" + +msgid "Show I/O status" +msgstr "Mostrar status de Entrada/Saída" + +msgid "Show each connection status" +msgstr "Mostrar cada estado de conexão" + +msgid "Show header parsing" +msgstr "Mostrar análise do cabeçalho" + +msgid "Software package '%s' is not installed." +msgstr "O pacote de software '%s' não está instalado." + +msgid "Software package '%s' is outdated." +msgstr "O pacote '%' está desatualizado." + +msgid "Start" +msgstr "Iniciar" + +msgid "Start / Stop" +msgstr "Iniciar / Parar" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "Inicia / Para o Privoxy Web Proxy" + +msgid "Startup banner and warnings." +msgstr "Mensagens e avisos iniciais." + +msgid "Syntax:" +msgstr "Sintaxe:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "Sintaxe: nomes de cabeçalho do cliente delimitados por espaços." + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "Sintaxe: padrão_alvo http_superior[:porta]" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "Sintaxe: padrão_alvo proxy_socks[:porta] http_superior[:porta]" + +msgid "System" +msgstr "Sistema" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" +"O(s) arquivo(s) ações a ser usado. Várias linhas no arquivo são permitidas, " +"e são, de fato, recomendadas!" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" +"O endereço e porta TCP em que Privoxy vai esperar por pedidos dos clientes." + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" +"O nível de compressão que é passada para a biblioteca zlib ao comprimir o " +"conteúdo em buffer." + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "" +"O diretório onde todos os registros ocorrem (ex: onde o arquivo de log está " +"localizado)." + +msgid "The directory where the other configuration files are located." +msgstr "O diretório onde os outros arquivos de configuração estão localizados." + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" +"Os arquivos de filtro contêm regras de modificação de conteúdo que usam " +"expressões regulares." + +msgid "The hostname shown on the CGI pages." +msgstr "O nome da máquina mostrado nas páginas de CGI." + +msgid "The log file to use. File name, relative to log directory." +msgstr "" +"O arquivo de registros a ser usado. O nome do arquivo, relativo ao diretório " +"de log." + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" +"A ordem em que os cabeçalhos dos clientes são classificados antes de " +"encaminhá-los." + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" +"O código de status Privoxy retorna para páginas bloqueadas com +handle-as-" +"empty-document." + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" +"O mecanismo de confiança é um recurso experimental para a construção de " +"listas de destinos confiáveis e deve ser usado com cuidado." + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" +"O valor desta opção só importa se o mecanismo de confiança experimental foi " +"ativado." + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" +"Esta opção só está lá para fins de depuração. Ele irá reduzir drasticamente " +"o desempenho." + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "" +"Esta opção será removida em versões futuras, uma vez que ficou obsoleta " +"pelos marcadores de cabeçalho mais genéricos." + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" +"Esta guia controla os aspectos da configuração do Privoxy relevantes para a " +"segurança." + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" +"Através de qual Proxy SOCKS (e, opcionalmente, para o qual proxy HTTP " +"superior) pedidos específicos devem ser encaminhados." + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" +"Para qual proxy HTTP superior os pedidos específicos devem ser encaminhados." + +msgid "User customizations" +msgstr "Personalizações do usuário" + +msgid "Value is not a number" +msgstr "O valor não é um número" + +msgid "Value not between 0 and 300" +msgstr "Valor não está entre 0 e 300" + +msgid "Value not between 0 and 9" +msgstr "Valor não está entre 0 e 9" + +msgid "Value not between 1 and 4096" +msgstr "Valor não entre 1 e 4096" + +msgid "Value not greater 0 or empty" +msgstr "Valor não é maior que 0 ou vazio" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "Faixa do valor de 1 até 4096. Se vazio, será 4096" + +msgid "Version" +msgstr "Versão" + +msgid "Version Information" +msgstr "Informação da Versão" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "Se as solicitações interceptados deve ser tratadas como válidas." + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" +"Se o Privoxy deve reconhecer cabeçalhos HTTP especiais para mudar de " +"alternância do estado." + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "Se o conteúdo em buffer é comprimido antes da entrega." + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" +"Se as conexões de saída que foram mantidas vivas devem ser compartilhadas " +"entre diferentes conexões de entrada." + +msgid "Whether or not pipelined requests should be served." +msgstr "Se os pedidos de pipeline deve ser aceitos." + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "Se a autenticação de proxy através do Privoxy deve funcionar." + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "Se o editor de arquivos de ações baseadas na web deve ser utilizado." + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "Se deve ser usado o recurso de alternância baseado na web." + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "" +"Se as solicitações para páginas CGI do Privoxy podem ser bloqueadas ou " +"redirecionadas." + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" +"Se a interface CGI deve se manter compatível com clientes HTTP mal " +"implementados." + +msgid "Whether to run only one server thread." +msgstr "Se deseja executar o servidor como apenas uma thread." + +msgid "Who can access what." +msgstr "Quem pode acessar o quê." + +msgid "installed" +msgstr "instalado" + +msgid "or higher" +msgstr "ou maior" + +msgid "required" +msgstr "necessário" diff --git a/applications/luci-app-radicale/po/pt-br/radicale.po b/applications/luci-app-radicale/po/pt-br/radicale.po new file mode 100644 index 000000000..67bf58690 --- /dev/null +++ b/applications/luci-app-radicale/po/pt-br/radicale.po @@ -0,0 +1,432 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"'AUTO' selects the highest protocol version that client and server support." +msgstr "'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor suportar." + +msgid "" +"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" +msgstr "'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o Radicale deve escutar" + +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 "Additional HTTP headers" + +msgid "Address:Port" +msgstr "Endereço: Porta" + +#, fuzzy +msgid "Authentication" +msgstr "Autenticação" + +msgid "" +"Authentication login is matched against the 'user' key, and collection's " +"path is matched against the 'collection' key." +msgstr "O nome do usuário na autenticação é comparado com a chave do 'user', e o caminho da coleção é comparado com a chave 'coleção'." + +msgid "Authentication method" +msgstr "Método de autenticação" + +msgid "Authentication method to allow access to Radicale server." +msgstr "Método de autenticação para permitir o acesso ao servidor Radicale." + +msgid "Auto-start" +msgstr "Iniciar automaticamente" + +msgid "Boot delay" +msgstr "Atraso na iniciação" + +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 "Agendas e contados estão disponíveis tanto para acesso local como remoto, possivelmente limitado através das políticas de autenticação." + +msgid "Certificate file" +msgstr "Arquivo do certificado" + +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 "Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para respostas a clientes ou para armazenar dados dentro das coleções." + +msgid "Ciphers" +msgstr "Cifras" + +msgid "Console Log level" +msgstr "Nível de detalhamento dos registros (log)" + +msgid "Control the access to data collections." +msgstr "Controlar o acesso às coleções de dados." + +#, fuzzy +msgid "Critical" +msgstr "Crítico" + +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 "O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, etc.) em uma página web ser solicitado de outro domínio fora do domínio a partir do qual o recurso foi originado." + +msgid "Custom" +msgstr "Personalizadas" + +msgid "Database" +msgstr "Banco de Dados" + +#, fuzzy +msgid "Debug" +msgstr "Depuração" + +msgid "Delay (in seconds) during system boot before Radicale start" +msgstr "Atraso (em segundos) durante a inicialização do sistema antes do Radicale iniciar" + +#, fuzzy +msgid "Directory" +msgstr "Diretório" + +msgid "Directory not exists/found !" +msgstr "O diretório não foi encontrado!" + +msgid "Directory required !" +msgstr "O diretório é necessário!" + +msgid "Directory where the rotating log-files are stored" +msgstr "O diretório onde os registros(log) rotativos são armazenados" + +msgid "During delay ifup-events are not monitored !" +msgstr "Durante a espera, eventos ifup não serão monitorados!" + +msgid "Enable HTTPS" +msgstr "Ativar HTTPS" + +msgid "" +"Enable/Disable auto-start of Radicale on system start-up and interface events" +msgstr "Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e em eventos de interface" + +msgid "Encoding" +msgstr "Codificação" + +msgid "Encoding for responding requests." +msgstr "Codificação para responder pedidos." + +msgid "Encoding for storing local collections." +msgstr "Codificação para armazenar coleções locais." + +msgid "Encryption method" +msgstr "Método de criptografia" + +#, fuzzy +msgid "Error" +msgstr "Erro" + +msgid "File '%s' not found !" +msgstr "Arquivo '%s' não encontrado!" + +msgid "File Log level" +msgstr "Nível de detalhamento dos registos(log) em arquivos" + +msgid "File not found !" +msgstr "Arquivo não encontrado!" + +msgid "File-system" +msgstr "Sistema de arquivos" + +msgid "" +"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " +"means 'anybody' (including anonymous users)." +msgstr "Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '.*' Significa 'qualquer um' (incluindo usuários anônimos)." + +msgid "Full access for Owner only" +msgstr "Acesso completo somente para o proprietário" + +msgid "Full access for authenticated Users" +msgstr "Acesso completo para usuários autenticados" + +msgid "Full access for everybody (including anonymous)" +msgstr "Acesso completo para todos (incluindo anônimo)" + +msgid "Full path and file name of certificate" +msgstr "Caminho completo e nome do arquivo do certificado" + +msgid "Full path and file name of private key" +msgstr "Caminho e arquivo nome completo da chave privada" + +#, fuzzy +msgid "Info" +msgstr "Informações" + +msgid "Keep in mind to use the correct hashing algorithm !" +msgstr "Fique atento para usar o algoritmo de resumo digital(hash) correto!" + +msgid "Leading or ending slashes are trimmed from collection's path." +msgstr "Barras inicias e finais serão removidas do caminho da coleção." + +msgid "Log-backup Count" +msgstr "Contagem Registro(log) de Backup" + +msgid "Log-file Viewer" +msgstr "Visualizador de Arquivo de Registros(log)" + +msgid "Log-file directory" +msgstr "Diretório do arquivo de registros(log)" + +msgid "Log-file size" +msgstr "Tamanho do arquivo de registros(log)" + +#, fuzzy +msgid "Logging" +msgstr "Registrando os eventos" + +msgid "Logon message" +msgstr "Mensagem de entrada" + +msgid "Maximum size of each rotation log-file." +msgstr "Tamanho máximo para a rotação do arquivo de registros(log)" + +msgid "Message displayed in the client when a password is needed." +msgstr "Mensagem exibida para o cliente quando uma senha é necessária." + +#, fuzzy +msgid "NOT installed" +msgstr "NÃO instalado" + +#, fuzzy +msgid "None" +msgstr "Nada" + +msgid "Number of backup files of log to create." +msgstr "Número de backups dos arquivos de registros(log) a serem criados." + +msgid "OPTIONAL: See python's ssl module for available ciphers" +msgstr "Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis" + +msgid "One or more missing/invalid fields on tab" +msgstr "Um ou campos inválidos/ausentes na aba" + +msgid "Owner allow write, authenticated users allow read" +msgstr "O proprietário pode escrever, os usuários autenticados podem ler" + +msgid "Path/File required !" +msgstr "O caminho/arquivo é necessário!" + +msgid "" +"Place here the 'user:password' pairs for your users which should have access " +"to Radicale." +msgstr "Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter acesso a Radicale." + +msgid "Please install current version !" +msgstr "Por favor, instale a versão atual!" + +msgid "Please press [Reload] button below to reread the file." +msgstr "Por favor, pressione o botão [Recarregar] abaixo para reler o arquivo." + +msgid "Please update to current version !" +msgstr "Por favor, atualize para a versão atual!" + +msgid "Port numbers below 1024 (Privileged ports) are not supported" +msgstr "Os porta abaixo de 1024 (portas privilegiadas) não são suportadas" + +msgid "Private key file" +msgstr "Arquivo da chave privada" + +msgid "Radicale CalDAV/CardDAV Server" +msgstr "Radicale Servidor CalDAV/CardDAV" + +msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." +msgstr "Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão regular." + +msgid "Radicale uses '/etc/radicale/users' as htpasswd file." +msgstr "Radicale usa o '/etc/radicale/users' como o arquivo htpasswd." + +msgid "Read only!" +msgstr "Somente leitura!" + +msgid "RegExp file" +msgstr "Arquivo de expressões regulares" + +msgid "Reload" +msgstr "Recarregar" + +msgid "Response Encoding" +msgstr "Codificação da Resposta" + +msgid "Rights" +msgstr "Direitos" + +msgid "Rights are based on a regexp-based file" +msgstr "Os direitos são baseados em um arquivo baseado em expressões regulares" + +msgid "Rights backend" +msgstr "Serviço de Direitos" + +msgid "SHA-1" +msgstr "SHA-1" + +msgid "SSL Protocol" +msgstr "Protocolo SSL" + +#, fuzzy +msgid "Save" +msgstr "Salvar" + +msgid "Section names are only used for naming the rule." +msgstr "Os nomes das seção são usados apenas para nomear a regra." + +#, fuzzy +msgid "Server" +msgstr "Servidor" + +msgid "Setting this parameter to '0' will disable rotation of log-file." +msgstr "Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de registros(log)." + +msgid "Software package '%s' is not installed." +msgstr "O pacote de software '%s' não está instalado." + +msgid "Software package '%s' is outdated." +msgstr "O pacote '%' está desatualizado." + +#, fuzzy +msgid "Software update required" +msgstr "A atualização do software é necessária" + +#, fuzzy +msgid "Start" +msgstr "Iniciar" + +#, fuzzy +msgid "Start / Stop" +msgstr "Iniciar / Parar" + +msgid "Start/Stop Radicale server" +msgstr "Iniciar/Parar o servidor Radicale" + +msgid "Storage" +msgstr "Armazenamento" + +msgid "Storage Encoding" +msgstr "Codificação do Armazenamento" + +msgid "Storage backend" +msgstr "Serviço de armazenamento" + +msgid "Syslog Log level" +msgstr "Nível de detalhamento do serviço de registro (syslog)" + +#, fuzzy +msgid "System" +msgstr "Sistema" + +msgid "" +"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " +"server solution." +msgstr "O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV (contatos)." + +msgid "" +"They can be viewed and edited by calendar and contact clients on mobile " +"phones or computers." +msgstr "Eles podem ser visualizados e editados pelos clientes de agenda e de contatos em telefones celulares ou computadores." + +msgid "To edit the file follow this link!" +msgstr "Para editar o arquivo, siga este link!" + +msgid "To view latest log file follow this link!" +msgstr "Para visualizar mais recente arquivo de registros(log), siga este link!" + +msgid "Value is not a number" +msgstr "O valor não é um número" + +msgid "Value is not an Integer >= 0 !" +msgstr "O valor não é um número natural (>=0)!" + +msgid "Value not between 0 and 300" +msgstr "Valor não está entre 0 e 300" + +msgid "Value required ! Integer >= 0 !" +msgstr "O valor é necessário! Número natural (>=0)!" + +#, fuzzy +msgid "Version" +msgstr "Versão" + +#, fuzzy +msgid "Version Information" +msgstr "Informação da Versão" + +msgid "" +"WARNING: Only 'File-system' is documented and tested by Radicale development" +msgstr "AVISO: Apenas 'Sistema de Arquivos "está documentado e testado pelo desenvolvimento do Radicale" + +#, fuzzy +msgid "Warning" +msgstr "Alerta" + +msgid "" +"You can also get groups from the user regex in the collection with {0}, {1}, " +"etc." +msgstr "Você também pode obter grupos a partir da expressão regular do usuário na coleção com {0}, {1} , etc." + +msgid "" +"You can use Python's ConfigParser interpolation values %(login)s and " +"%(path)s." +msgstr "Você pode usar a interpolação de valores %(login)s e %(path)s do ConfigParser do Python." + +msgid "crypt" +msgstr "cifrar" + +msgid "custom" +msgstr "personalizado" + +msgid "htpasswd file" +msgstr "arquivo htpasswd" + +#, fuzzy +msgid "installed" +msgstr "instalado" + +msgid "no valid path given!" +msgstr "Nenhum caminho válido foi informado!" + +#, fuzzy +msgid "or higher" +msgstr "ou maior" + +msgid "plain" +msgstr "plano" + +#, fuzzy +msgid "required" +msgstr "necessário" + +msgid "salted SHA-1" +msgstr "SHA-1 com salto" + diff --git a/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po new file mode 100644 index 000000000..f2b18e374 --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po @@ -0,0 +1,97 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Access Control" +msgstr "Controle de Acesso" + +msgid "Allow all except listed" +msgstr "Permitir todos, exceto os listados" + +msgid "Allow listed only" +msgstr "Permitir somente os listados" + +msgid "Bypassed IP" +msgstr "Endereços IP Ignorados" + +msgid "Connection Timeout" +msgstr "Tempo limite de conexão" + +msgid "Custom" +msgstr "Personalizado" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "Enable" +msgstr "Ativar" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Encrypt Method" +msgstr "Método de Cifragem" + +msgid "Forwarded IP" +msgstr "Endereço IP Encaminhado" + +msgid "Forwarding Tunnel" +msgstr "Tunel para Encaminhamento" + +msgid "Global Setting" +msgstr "Opções Globais" + +msgid "Ignore List" +msgstr "Lista de Ignorados" + +msgid "LAN" +msgstr "LAN" + +msgid "LAN IP List" +msgstr "Lista de endereços IP da LAN" + +msgid "Local Port" +msgstr "Porta Local" + +msgid "Password" +msgstr "Senha" + +msgid "Relay Mode" +msgstr "Modo de Retransmissor" + +msgid "Server Address" +msgstr "Endereço do Servidor" + +msgid "Server Port" +msgstr "Porta do servidor" + +msgid "ShadowSocks-libev" +msgstr "ShadowSocks-libev" + +msgid "ShadowSocks-libev is not running" +msgstr "O serviço ShadowSocks-libev está parado" + +msgid "ShadowSocks-libev is running" +msgstr "O serviço ShadowSocks-libev está em execução." + +msgid "UDP Forward" +msgstr "Encaminhamento UDP" + +msgid "UDP Local Port" +msgstr "Porta Local UDP" + +msgid "UDP Relay" +msgstr "Retransmissão UDP" + +msgid "WAN" +msgstr "WAN" diff --git a/applications/luci-app-shairplay/po/pt-br/shairplay.po b/applications/luci-app-shairplay/po/pt-br/shairplay.po new file mode 100644 index 000000000..c7d0ab18a --- /dev/null +++ b/applications/luci-app-shairplay/po/pt-br/shairplay.po @@ -0,0 +1,54 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"X-Poedit-Bookmarks: -1,5,-1,-1,-1,-1,-1,-1,-1,-1\n" + +msgid "AO Device ID" +msgstr "Identificador do dispositivo AO" + +msgid "AO Device Name" +msgstr "Nome do dispositivo AO" + +msgid "AO Driver" +msgstr "Driver do AO" + +msgid "Airport Name" +msgstr "Nome do Airport" + +msgid "Default" +msgstr "Padrão" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "HW Address" +msgstr "Endereço de Hardware" + +msgid "Password" +msgstr "Senha" + +msgid "Port" +msgstr "Porta" + +msgid "Respawn" +msgstr "Redisparar" + +msgid "Shairplay" +msgstr "Shairplay" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" +"Shairplay é uma implementação simples de um servidor AirPlay. Aqui você pode " +"configurá-lo." diff --git a/applications/luci-app-squid/Makefile b/applications/luci-app-squid/Makefile new file mode 100644 index 000000000..82802c0e5 --- /dev/null +++ b/applications/luci-app-squid/Makefile @@ -0,0 +1,18 @@ +# +# 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:=Squid LuCI Interface +LUCI_DEPENDS:=+luci-mod-admin-full +squid + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-squid/luasrc/controller/squid.lua b/applications/luci-app-squid/luasrc/controller/squid.lua new file mode 100644 index 000000000..09946a151 --- /dev/null +++ b/applications/luci-app-squid/luasrc/controller/squid.lua @@ -0,0 +1,21 @@ +--[[ + +LuCI Squid module + +Copyright (C) 2015, OpenWrt.org + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + +]]-- + +module("luci.controller.squid", package.seeall) + +function index() + entry({"admin", "services", "squid"}, cbi("squid"), _("Squid")) +end diff --git a/applications/luci-app-squid/luasrc/model/cbi/squid.lua b/applications/luci-app-squid/luasrc/model/cbi/squid.lua new file mode 100644 index 000000000..0ac554a3e --- /dev/null +++ b/applications/luci-app-squid/luasrc/model/cbi/squid.lua @@ -0,0 +1,67 @@ +--[[ + +LuCI Squid module + +Copyright (C) 2015, OpenWrt.org + +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 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +require "ubus" + +m = Map("squid", translate("Squid")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/squid restart") end + +s = m:section(TypedSection, "squid") +s.anonymous = true +s.addremove = false + +s:tab("general", translate("General Settings")) + +http_port = s:taboption("general", Value, "http_port", translate("Port")) +http_port.datatype = "portrange" +http_port.placeholder = "0-65535" + +visible_hostname = s:taboption("general", Value, "visible_hostname", translate("Visible Hostname")) +visible_hostname.datatype="string" +visible_hostname.placeholder = "OpenWrt" + +coredump_dir = s:taboption("general", Value, "coredump_dir", translate("Coredump files directory")) +coredump_dir.datatype="string" +coredump_dir.placeholder = "/tmp/squid" + +s:tab("advanced", translate("Advanced Settings")) + +squid_config_file = s:taboption("advanced", TextValue, "_data", "") +squid_config_file.wrap = "off" +squid_config_file.rows = 25 +squid_config_file.rmempty = false + +function squid_config_file.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + local file = uci:get("squid", "squid", "config_file") + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function squid_config_file.write(self, section, value) + if value then + local uci = require "luci.model.uci".cursor_state() + local file = uci:get("squid", "squid", "config_file") + fs.writefile(file, value:gsub("\r\n", "\n")) + end +end + +return m diff --git a/applications/luci-app-statistics/po/pt-br/statistics.po b/applications/luci-app-statistics/po/pt-br/statistics.po index 44f53f046..864cb28ee 100644 --- a/applications/luci-app-statistics/po/pt-br/statistics.po +++ b/applications/luci-app-statistics/po/pt-br/statistics.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-22 18:27-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Action (target)" msgstr "Ação (destino)" @@ -29,7 +29,7 @@ msgid "Add notification command" msgstr "Adicionar o comando de notificação" msgid "Aggregate number of connected users" -msgstr "" +msgstr "Numero agregado de usuários conectados" msgid "Base Directory" msgstr "Diretório Base" @@ -38,10 +38,10 @@ msgid "Basic monitoring" msgstr "Monitoramento básico" msgid "CPU Frequency" -msgstr "" +msgstr "Frequência da CPU" msgid "CPU Frequency Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin da Frequência da CPU" msgid "CPU Plugin Configuration" msgstr "Configuração do plugin CPU" @@ -134,16 +134,16 @@ msgid "Email" msgstr "Email" msgid "Empty value = monitor all" -msgstr "" +msgstr "Valor vazio = monitore todos" msgid "Enable this plugin" msgstr "Habilitar este plugin" msgid "Entropy" -msgstr "" +msgstr "Entropia" msgid "Entropy Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Entropia" msgid "Exec" msgstr "Exec" @@ -165,13 +165,13 @@ msgstr "" "Encaminhamento entre o endereço de escuta e os endereços dos servidores" msgid "Gather compression statistics" -msgstr "" +msgstr "Obter estatísticas sobre a compressão" msgid "General plugins" -msgstr "" +msgstr "Plugins Gerais" msgid "Generate a separate graph for each logged user" -msgstr "" +msgstr "Gerar um gráfico separado para cada usuário conectado" msgid "Graphs" msgstr "Gráficos" @@ -204,6 +204,7 @@ msgstr "" msgid "Hold Ctrl to select multiple items or to deselect entries." msgstr "" +"Segure o Ctrl para selecionar múltiplos itens ou para retirar entradas. " msgid "Host" msgstr "Equipamento" @@ -259,6 +260,8 @@ msgid "" "Max values for a period can be used instead of averages when not using 'only " "average RRAs'" msgstr "" +"Valores máximos para um período podem ser usados em vez de médias quando não " +"estiver usando 'somente RRAs de médias'" msgid "Maximum allowed connections" msgstr "Máximo de conexões permitidas" @@ -276,10 +279,10 @@ msgid "Monitor all local listen ports" msgstr "Monitorar todas as portas locais" msgid "Monitor all sensors" -msgstr "" +msgstr "Monitorar todas os sensores" msgid "Monitor device(s) / thermal zone(s)" -msgstr "" +msgstr "Dispositivo(s) de monitoramento / zona(s) térmica(s)" msgid "Monitor devices" msgstr "Monitorar dispositivos" @@ -336,6 +339,9 @@ msgid "" "Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " "directory and all its parent directories need to be world readable." msgstr "" +"Nota: como as páginas são renderizadas pelo usuário 'nobody', os arquivos * ." +"rrd, o diretório de armazenamento e todos os seus diretórios superiores " +"precisam ser legíveis a todos." msgid "Number of threads for data collection" msgstr "Número de threads para o coletor de dados" @@ -350,13 +356,13 @@ msgid "Only create average RRAs" msgstr "Somente criar RRAs de média" msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" msgid "OpenVPN Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin do OpenVPN" msgid "OpenVPN status files" -msgstr "" +msgstr "Arquivos de estado do OpenVPN" msgid "Options" msgstr "Opções" @@ -416,13 +422,13 @@ msgid "Seconds" msgstr "Segundos" msgid "Sensor list" -msgstr "" +msgstr "Lista de sensores" msgid "Sensors" -msgstr "" +msgstr "Sensores" msgid "Sensors Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Sensores" msgid "Server host" msgstr "Endereço do servidor" @@ -431,13 +437,13 @@ msgid "Server port" msgstr "Porta do servidor" msgid "Setup" -msgstr "" +msgstr "Configuração" msgid "Shaping class monitoring" msgstr "Monitoramento das Classes de Shaping" msgid "Show max values instead of averages" -msgstr "" +msgstr "Mostrar valores máximos em vez de médias" msgid "Socket file" msgstr "Arquivo do socket" @@ -461,10 +467,10 @@ 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 "" +msgstr "Concessões do Splash" msgid "Splash Leases Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin das Concessões do Splash" msgid "Statistics" msgstr "Estatística" @@ -513,6 +519,7 @@ msgid "" "The OpenVPN plugin gathers information about the current vpn connection " "status." msgstr "" +"O plugin OpenVPN reúne informações sobre o status atual da conexão VPN." msgid "" "The conntrack plugin collects statistics about the number of tracked " @@ -565,7 +572,7 @@ msgstr "" "Plugin::Collectd mas pode ser utilizado de outras maneiras também." msgid "The entropy plugin collects statistics about the available entropy." -msgstr "" +msgstr "O plugin de entropia coleta estatísticas sobre a entropia disponível." msgid "" "The exec plugin starts external commands to read values from or to notify " @@ -656,17 +663,24 @@ msgid "" "The sensors plugin uses the Linux Sensors framework to gather environmental " "statistics." msgstr "" +"O plugin de sensores usa a estrutura de sensores do Linux para coletar " +"estatísticas ambientais." msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" +"O plug-in de concessões splash usa o libuci para coletar estatísticas sobre " +"concessões de splash." msgid "" "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " "render diagram images." msgstr "" +"O pacote de estatísticas usa <a href=\"https://collectd.org/\"> Collectd </" +"a> para coletar dados e <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</" +"a> para desenhar os gráficos." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -680,6 +694,9 @@ msgid "" "read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " "read, e.g. thermal_zone1 )" msgstr "" +"O plugin térmico monitorará a temperatura do sistema. Os dados são " +"tipicamente lidos de /sys/class/thermal/*/temp ('*' indica o dispositivo " +"térmico a ser lido, ex:, thermal_zone1)" msgid "" "The unixsock plugin creates a unix socket which can be used to read " @@ -690,15 +707,19 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +"O plugin de tempo de atividade coleta estatísticas sobre o tempo de " +"atividade do sistema." msgid "Thermal" -msgstr "" +msgstr "Térmico" msgid "Thermal Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin Térmico" msgid "This plugin collects statistics about the processor frequency scaling." msgstr "" +"Este plugin coleta as estatísticas sobre o escalonamento da frequência do " +"processador." msgid "" "This section defines on which interfaces collectd will wait for incoming " @@ -732,13 +753,13 @@ msgid "Unixsock Plugin Configuration" msgstr "Configuração do plugin Unixsock" msgid "Uptime" -msgstr "" +msgstr "Tempo de atividade" msgid "Uptime Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Tempo de Atividade" msgid "Use improved naming schema" -msgstr "" +msgstr "Use um esquema de nomeação melhorado" msgid "Used PID file" msgstr "Arquivo PID usado" @@ -758,6 +779,8 @@ msgstr "Configuração do Plugin iwinfo da Rede Sem Fio (Wireless)" msgid "" "You can install additional collectd-mod-* plugins to enable more statistics." msgstr "" +"Você pode instalar plugins adicionais (collectd-mod-*) para habilitar mais " +"estatísticas." msgid "e.g. br-ff" msgstr "ex: br-ff" diff --git a/applications/luci-app-statistics/root/usr/bin/stat-genconfig b/applications/luci-app-statistics/root/usr/bin/stat-genconfig index df9af1526..c4542bbc2 100755 --- a/applications/luci-app-statistics/root/usr/bin/stat-genconfig +++ b/applications/luci-app-statistics/root/usr/bin/stat-genconfig @@ -349,12 +349,6 @@ plugins = { { } }, - madwifi = { - { "WatchSet" }, - { }, - { "Interfaces", "WatchAdds" } - }, - memory = { { }, { }, diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po new file mode 100644 index 000000000..bcfc1cfa2 --- /dev/null +++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po @@ -0,0 +1,78 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\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 "" +"Breve conselho: Crie uma interface wwan, configure-a para usar DHCP e " +"adicione-a à zona wan no firewall. Crie as interfaces wifi a serem usadas " +"(modo 'cliente', atribuído à rede wwan, deixado como desativado). O " +"Travelmate tentará se conectar às interfaces de cliente wifi conhecidas na " +"ordem definida." + +msgid "" +"Configuration of the Travelmate package to enable travel router " +"functionality." +msgstr "" +"Configuração do pacote Travelmate para permitir a funcionalidade de roteador " +"de viagem." + +msgid "Debug logging" +msgstr "Registros(log) para depuração" + +msgid "Default 20, range 10-60" +msgstr "Padrão 20, faixa 10-60" + +msgid "Default 3, range 1-10" +msgstr "Padrão 3, faixa 1-10" + +msgid "Disable this if you want to use iwinfo instead of iw" +msgstr "Desabilite isto se você quer usar o iwinfo ao invés do iw" + +msgid "Enable Travelmate" +msgstr "Habilitar o Travelmate" + +msgid "Extra options" +msgstr "Opções adicionais" + +msgid "Global options" +msgstr "Opções Globais" + +msgid "Link to detailed advice" +msgstr "Endereço para conselhos detalhados" + +msgid "Max. number of connection retries to an uplink" +msgstr "Máximo número de tentativas de conexão para um enlace" + +msgid "Max. timeout in seconds for wlan interface reload" +msgstr "Tempo limite máximo em segundos para recarregar a interface wlan" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)" + +msgid "" +"Space separated list of wwan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" +"Lista separada por espaços de interfaces wwan que acionam a ação de recarga. " +"Para desabilitar o gatilho de recarga, defina-o como 'false'. Padrão: vazio" + +msgid "Travelmate" +msgstr "Travelmate" + +msgid "Use iw for scanning" +msgstr "Use o iw para escaneamento" diff --git a/applications/luci-app-uhttpd/po/pt-br/uhttpd.po b/applications/luci-app-uhttpd/po/pt-br/uhttpd.po new file mode 100644 index 000000000..af68b9e14 --- /dev/null +++ b/applications/luci-app-uhttpd/po/pt-br/uhttpd.po @@ -0,0 +1,208 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" +"(/old/path=/new/path) ou (just /old/path que se torna /cgi-prefix/old/path)" + +msgid "404 Error" +msgstr "Erro 404" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "Um servidor HTTP(S) leve de únida thread." + +msgid "Advanced Settings" +msgstr "Opções Avançadas" + +msgid "Aliases" +msgstr "Pseudônimos (Aliases)" + +msgid "Base directory for files to be served" +msgstr "Diretório Base para publicar arquivos" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" +"Escute em uma interface:porta específica (especificando o endereço da " +"interface" + +msgid "CGI filetype handler" +msgstr "Interpretador de tipo de arquivo CGI" + +msgid "CGI is disabled if not present." +msgstr "O CGI estará desabilitado se não presente." + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "Arquivo de configuração (ex: credenciais para autenticação básica)" + +msgid "Connection reuse" +msgstr "Reutilizar conexão" + +msgid "Country" +msgstr "País" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "Desabilita a autorização JSON-RPC através da API de sessão ubus" + +msgid "Do not follow symlinks outside document root" +msgstr "Não siga ligações simbólicas (symlinks) para fora do documento raiz" + +msgid "Do not generate directory listings." +msgstr "Não gere listagens de diretórios" + +msgid "Document root" +msgstr "Documento Raiz" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "Ex: use index.html e index.php quando usar PHP" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "O interpretador Lua embutido será desabilitado se não presente." + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "Habilite o suporte para recursos JSON-RPC de origem cruzada" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "Para ajustes envolvidos com mais do que prover a interface web" + +msgid "Full Web Server Settings" +msgstr "Configurações Completas do Servidor Web" + +msgid "Full real path to handler for Lua scripts" +msgstr "Caminho completo para o interpretador de scripts Lua" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "HTTP listeners (address:port)" +msgstr "Escutas do HTTP (endereço:porta)" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "Certificado do HTTPS (codificado em formato PEM)" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "Chave Privada do HTTPS (codificado como DER)" + +msgid "HTTPS listener (address:port)" +msgstr "Escuta do HTTPS (endereço:porta)" + +msgid "Ignore private IPs on public interface" +msgstr "Ignore endereços IP privados na interface pública" + +msgid "Index page(s)" +msgstr "Página(s) Índice(s)" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" +"Interpretador para associar com extensões de arquivos " +"('extensão=interpretador', ex: '.php=/usr/bin/php-cgi')" + +msgid "Length of key in bits" +msgstr "Comprimento da chave em bits" + +msgid "Location" +msgstr "Localização" + +msgid "Maximum number of connections" +msgstr "Número máximo de requisições para script" + +msgid "Maximum number of script requests" +msgstr "Número máximo de requisições para script" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "Tempo máximo de espera para execuções de Lua, CGI ou ubus" + +msgid "Maximum wait time for network activity" +msgstr "Tempo máximo de espera para atividade na rede" + +msgid "Override path for ubus socket" +msgstr "Sobrescrever o caminho do socket ubus" + +msgid "Path prefix for CGI scripts" +msgstr "Prefixo do caminho para scripts CGI" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" +"Evite acesso de endereços privados (RFC1918) na interface que tem um " +"endereço IP público" + +msgid "Realm for Basic Auth" +msgstr "Reino para Autenticação Simples" + +msgid "Redirect all HTTP to HTTPS" +msgstr "Redirecionar todo tráfego HTTP para HTTPS" + +msgid "Remove configuration for certificate and key" +msgstr "Remove a configuração para o certificado e chave" + +msgid "Remove old certificate and key" +msgstr "Remove os certificados e chaves antigas" + +msgid "Server Hostname" +msgstr "Nome do Servidor" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "Ajustes que são raramente usadas ou que afetam a interface web" + +msgid "State" +msgstr "Estado" + +msgid "TCP Keepalive" +msgstr "Manter conexões TCP abertas (Keepalive)" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "Isto apaga permanentemente o certificado, a chave e a configuração." + +msgid "Valid for # of Days" +msgstr "Valido por # dias" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" +"URL virtual ou script CGI para mostrar quando ocorrer erro '404 Não " +"Encontrado'. Deve começar com '/'" + +msgid "Virtual path prefix for Lua scripts" +msgstr "Prefixo do caminho virtual para scripts Lua" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "Prefixo do caminho virtual para o ubus através da integração JSON-RPC" + +msgid "Will not use HTTP authentication if not present" +msgstr "Não usar autenticação HTTP se não presente" + +msgid "a.k.a CommonName" +msgstr "também conhecido como Nome Comum" + +msgid "uHTTPd" +msgstr "uHTTPd" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "Parâmetros do Certificado Auto-assinado do uHTTPd" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "" +"o uHTTPd gerará um certificado auto-assinado usando a configuração mostrada " +"abaixo." + +msgid "ubus integration is disabled if not present" +msgstr "A integração com o ubus será desativada se não presente" diff --git a/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua b/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua index f1bb450dd..74b9d1d03 100644 --- a/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua +++ b/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua @@ -12,21 +12,21 @@ 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 = s:taboption("general", Flag, "enabled", 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.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 + + return Flag.write(self, section, value) end s:taboption("general", Flag, "enable_upnp", translate("Enable UPnP functionality")).default = "1" diff --git a/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po b/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po new file mode 100644 index 000000000..5adc5ed4f --- /dev/null +++ b/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po @@ -0,0 +1,87 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Domains to Bypass" +msgstr "Domínios para evitar a VPN" + +msgid "Domains to be accessed directly (outside of the VPN tunnel), see" +msgstr "" + +msgid "Enable VPN Bypass" +msgstr "Habilitar o VPN Bypass" + +msgid "Local IP Addresses to Bypass" +msgstr "" + +msgid "" +"Local IP addresses or subnets with direct internet access (outside of the " +"VPN tunnel)" +msgstr "" + +msgid "Local Ports to Bypass" +msgstr "Portas locais para evitar a VPN" + +msgid "Local ports to trigger VPN Bypass" +msgstr "Portas locais para disparar o VPN Bypass" + +msgid "README" +msgstr "" + +msgid "Remote IP Addresses to Bypass" +msgstr "" + +msgid "" +"Remote IP addresses or subnets which will be accessed directly (outside of " +"the VPN tunnel)" +msgstr "" + +msgid "Remote Ports to Bypass" +msgstr "Portas remotas para evitar a VPN" + +msgid "Remote ports to trigger VPN Bypass" +msgstr "Portas remotas para disparar o VPN Bypass" + +msgid "VPN Bypass" +msgstr "VPN Bypass" + +msgid "VPN Bypass Settings" +msgstr "Configurações do VPN Bypass" + +msgid "for syntax" +msgstr "" + +#~ msgid "Configuration of VPN Bypass Settings" +#~ msgstr "Configurações do VPN Bypass" + +#~ msgid "Domains which will be accessed directly (outside of the VPN tunnel)" +#~ msgstr "Domínios que serão acessados diretamente (fora do túnel VPN)" + +#~ msgid "Local IP Subnets to Bypass" +#~ msgstr "Subredes IP locais para evitar a VPN" + +#~ msgid "" +#~ "Local IP ranges with direct internet access (outside of the VPN tunnel)" +#~ msgstr "" +#~ "Faixa de endereços IP locais que terão acesso internet direto (fora do " +#~ "túnel VPN)" + +#~ msgid "Remote IP Subnets to Bypass" +#~ msgstr "Subredes IP remotas para evitar a VPN" + +#~ msgid "" +#~ "Remote IP ranges which will be accessed directly (outside of the VPN " +#~ "tunnel)" +#~ msgstr "" +#~ "Faixa de endereços IP remotos que serão acessados diretamente (fora do " +#~ "túnel VPN)" diff --git a/applications/luci-app-watchcat/po/pt-br/watchcat.po b/applications/luci-app-watchcat/po/pt-br/watchcat.po index fe9703637..e37066c3d 100644 --- a/applications/luci-app-watchcat/po/pt-br/watchcat.po +++ b/applications/luci-app-watchcat/po/pt-br/watchcat.po @@ -1,15 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-29 23:20+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-20 18:10-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "Forced reboot delay" msgstr "Atraso para reinício forçado" @@ -51,15 +52,13 @@ 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 " +"Watchcat permite a configuração de 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 " diff --git a/applications/luci-app-wifischedule/po/pt-br/wifischedule.po b/applications/luci-app-wifischedule/po/pt-br/wifischedule.po new file mode 100644 index 000000000..19e31b54c --- /dev/null +++ b/applications/luci-app-wifischedule/po/pt-br/wifischedule.po @@ -0,0 +1,114 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Activate wifi" +msgstr "Ativar a WiFi" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "" +"Não foi possível localizar os programas necessários '/usr/bin/wifi_schedule." +"sh' ou '/sbin/wifi'." + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "Não foi possível localizar o programa necessário '/usr/bin/iwinfo'" + +msgid "Cron Jobs" +msgstr "Tarefas da Cron" + +msgid "Day(s) of Week" +msgstr "Dia(s) da semana" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "Define um agendamento para quando ligar ou desligar a WiFi." + +msgid "Determine Modules Automatically" +msgstr "Determinar os Módulos Automaticamente" + +msgid "Disable wifi gracefully" +msgstr "Desabilitar a WiFi amistosamente" + +msgid "Disabled wifi forced" +msgstr "WiFi foi desabilitada de forma forçada." + +msgid "Enable" +msgstr "Habilitar" + +msgid "Enable Wifi Schedule" +msgstr "Habilitar o agendamento da WiFi" + +msgid "Enable logging" +msgstr "Habilite os registros (log)" + +msgid "Force disabling wifi even if stations associated" +msgstr "Force a desativação da WiFi mesmo se existirem estações associadas " + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Global Settings" +msgstr "Configurações Globais" + +msgid "Monday" +msgstr "Segunda-Feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Schedule" +msgstr "Agendamento" + +msgid "Schedule events" +msgstr "Eventos do agendamento" + +msgid "Start Time" +msgstr "Hora Inicial" + +msgid "Start WiFi" +msgstr "Iniciar WiFi" + +msgid "Stop Time" +msgstr "Hora Final" + +msgid "Stop WiFi" +msgstr "Parar WiFi" + +msgid "Sunday" +msgstr "Domingo" + +msgid "The value %s is invalid" +msgstr "O valor %s é inválido" + +msgid "Thursday" +msgstr "Quita-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "Descarregar Módulos (experimental, poupa mais energia)" + +msgid "View Cron Jobs" +msgstr "Visualizar Tarefas da Cron" + +msgid "View Logfile" +msgstr "Visualizar o Arquivo de Registros (log)" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Wifi Schedule" +msgstr "Agendamento da Wifi" + +msgid "Wifi Schedule Logfile" +msgstr "Arquivo de Registros (log) do Agendamento da Wifi" diff --git a/applications/luci-app-wireguard/Makefile b/applications/luci-app-wireguard/Makefile new file mode 100644 index 000000000..92cdcf270 --- /dev/null +++ b/applications/luci-app-wireguard/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=WireGuard Status +LUCI_DEPENDS:=+wireguard-tools +kmod-wireguard +LUCI_PKGARCH:=all + +PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com> + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-wireguard/luasrc/controller/wireguard.lua b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua new file mode 100644 index 000000000..68a82fe5c --- /dev/null +++ b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua @@ -0,0 +1,8 @@ +-- Copyright 2016-2017 Dan Luedtke <mail@danrl.com> +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.wireguard", package.seeall) + +function index() + entry({"admin", "status", "wireguard"}, template("wireguard"), _("WireGuard Status"), 92) +end diff --git a/applications/luci-app-wireguard/luasrc/view/wireguard.htm b/applications/luci-app-wireguard/luasrc/view/wireguard.htm new file mode 100644 index 000000000..5b5d59a96 --- /dev/null +++ b/applications/luci-app-wireguard/luasrc/view/wireguard.htm @@ -0,0 +1,209 @@ +<%# + Copyright 2016-2017 Dan Luedtke <mail@danrl.com> + Licensed to the public under the Apache License 2.0. +-%> + +<% + local data = { } + local last_device = "" + + local wg_dump = io.popen("wg show all dump") + if wg_dump then + local line + for line in wg_dump:lines() do + local line = string.split(line, "\t") + if not (last_device == line[1]) then + last_device = line[1] + data[line[1]] = { + name = line[1], + public_key = line[3], + listen_port = line[5], + fwmark = line[6], + peers = { } + } + else + local peer = { + public_key = line[2], + endpoint = line[3], + allowed_ips = { }, + latest_handshake = line[5], + transfer_rx = line[6], + transfer_tx = line[7], + persistent_keepalive = line[8] + } + if not (line[4] == '(none)') then + for ipkey, ipvalue in pairs(string.split(line[4], ",")) do + if #ipvalue > 0 then + table.insert(peer['allowed_ips'], ipvalue) + end + end + end + table.insert(data[line[1]].peers, peer) + end + end + end + + if luci.http.formvalue("status") == "1" then + luci.http.prepare_content("application/json") + luci.http.write_json(data) + return + end +-%> + +<%+header%> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + function bytes_to_str(bytes) { + bytes = parseFloat(bytes); + if (bytes < 1) { return "0 B"; } + var sizes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB']; + var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); + return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; + }; + + function timestamp_to_str(timestamp) { + if (timestamp < 1) { + return '<%:Never%>'; + } + var now = new Date(); + var seconds = (now.getTime() / 1000) - timestamp; + var ago = ""; + if (seconds < 60) { + ago = parseInt(seconds) + '<%:s ago%>'; + } else if (seconds < 3600) { + ago = parseInt(seconds / 60) + '<%:m ago%>'; + } else if (seconds < 86401) { + ago = parseInt(seconds / 3600) + '<%:h ago%>'; + } else { + ago = '<%:over a day ago%>'; + } + var t = new Date(timestamp * 1000); + return t.toUTCString() + ' (' + ago + ')'; + } + + XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, + function(x, data) { + for (var key in data) { + if (!data.hasOwnProperty(key)) { continue; } + var ifname = key; + var iface = data[key]; + var s = ""; + if (iface.public_key == '(none)') { + s += '<em><%:Interface does not have a public key!%></em>'; + } else { + s += String.format( + '<strong><%:Public Key%>: </strong>%s', + iface.public_key + ); + } + if (iface.listen_port > 0) { + s += String.format( + '<br /><strong><%:Listen Port%>: </strong>%s', + iface.listen_port + ); + } + if (iface.fwmark != 'off') { + s += String.format( + '<br /><strong><%:Firewall Mark%>: </strong>%s', + iface.fwmark + ); + } + document.getElementById(ifname + "_info").innerHTML = s; + for (var i = 0, ilen = iface.peers.length; i < ilen; i++) { + var peer = iface.peers[i]; + var s = String.format( + '<strong><%:Public Key%>: </strong>%s', + peer.public_key + ); + if (peer.endpoint != '(none)') { + s += String.format( + '<br /><strong><%:Endpoint%>: </strong>%s', + peer.endpoint + ); + } + if (peer.allowed_ips.length > 0) { + s += '<br /><strong><%:Allowed IPs%>:</strong>'; + for (var k = 0, klen = peer.allowed_ips.length; k < klen; k++) { + s += '<br /> • ' + peer.allowed_ips[k]; + } + } + if (peer.persistent_keepalive != 'off') { + s += String.format( + '<br /><strong><%:Persistent Keepalive%>: </strong>%ss', + peer.persistent_keepalive + ); + } + var icon = '<img src="<%=resource%>/icons/tunnel_disabled.png" />'; + var now = new Date(); + if (((now.getTime() / 1000) - peer.latest_handshake) < 140) { + icon = '<img src="<%=resource%>/icons/tunnel.png" />'; + } + s += String.format( + '<br /><strong><%:Latest Handshake%>: </strong>%s', + timestamp_to_str(peer.latest_handshake) + ); + s += String.format( + '<br /><strong><%:Data Received%>: </strong>%s' + + '<br /><strong><%:Data Transmitted%>: </strong>%s', + bytes_to_str(peer.transfer_rx), + bytes_to_str(peer.transfer_tx) + ); + document.getElementById(ifname + "_" + peer.public_key + "_icon").innerHTML = icon; + document.getElementById(ifname + "_" + peer.public_key + "_info").innerHTML = s; + } + } + }); +//]]></script> + +<h2>WireGuard Status</h2> + +<fieldset class="cbi-section"> +<%- +for ikey, iface in pairs(data) do + -%> + <legend><%:Interface%> <%=ikey%></legend> + <table width="100%" cellspacing="10"> + <tr> + <td width="33%" style="vertical-align:top"><%:Configuration%></td> + <td> + <table> + <tr> + <td id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px"> + + </td> + <td id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px"> + <em><%:Collecting data...%></em> + </td> + </tr></table> + </td> + </tr> + <%- + for pkey, peer in pairs(iface.peers) do + -%> + <tr> + <td width="33%" style="vertical-align:top"><%:Peer%></td> + <td> + <table> + <tr> + <td id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align:center; padding:3px"> + <img src="<%=resource%>/icons/tunnel_disabled.png" /><br /> + <small>?</small> + </td> + <td id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px"> + <em><%:Collecting data...%></em> + </td> + </tr></table> + </td> + </tr> + <%- + end + -%> + </table> + <%- +end +-%> +</fieldset> + +<%+footer%> diff --git a/applications/luci-app-wireguard/po/ja/wireguard.po b/applications/luci-app-wireguard/po/ja/wireguard.po new file mode 100644 index 000000000..5cd7a9003 --- /dev/null +++ b/applications/luci-app-wireguard/po/ja/wireguard.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-02-28 00:31+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\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.12\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Allowed IPs" +msgstr "許可されたIP" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Configuration" +msgstr "設定" + +msgid "Data Received" +msgstr "受信済みデータ" + +msgid "Data Transmitted" +msgstr "送信済みデータ" + +msgid "Endpoint" +msgstr "エンドポイント" + +msgid "Firewall Mark" +msgstr "ファイアウォール マーク" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Interface does not have a public key!" +msgstr "インターフェースに公開鍵がありません!" + +msgid "Latest Handshake" +msgstr "最新のハンドシェイク" + +msgid "Listen Port" +msgstr "待ち受けポート" + +msgid "Never" +msgstr "無し" + +msgid "Peer" +msgstr "ピア" + +msgid "Persistent Keepalive" +msgstr "永続的なキープアライブ" + +msgid "Public Key" +msgstr "公開鍵" + +msgid "WireGuard Status" +msgstr "WireGuard ステータス" + +msgid "h ago" +msgstr "時間前" + +msgid "m ago" +msgstr "分前" + +msgid "over a day ago" +msgstr "1日以上前" + +msgid "s ago" +msgstr "秒前" diff --git a/applications/luci-app-wireguard/po/pt-br/wireguard.po b/applications/luci-app-wireguard/po/pt-br/wireguard.po new file mode 100644 index 000000000..d3b5059d5 --- /dev/null +++ b/applications/luci-app-wireguard/po/pt-br/wireguard.po @@ -0,0 +1,73 @@ +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: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Allowed IPs" +msgstr "Endereços IP autorizados" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Configuration" +msgstr "Configuração" + +msgid "Data Received" +msgstr "Dados Recebidos" + +msgid "Data Transmitted" +msgstr "Dados Enviados" + +msgid "Endpoint" +msgstr "Equipamento do ponto final" + +msgid "Firewall Mark" +msgstr "Marca do Firewall" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface does not have a public key!" +msgstr "A interface não tem uma chave pública!" + +msgid "Latest Handshake" +msgstr "Última Negociação" + +msgid "Listen Port" +msgstr "Porta de Escuta" + +msgid "Never" +msgstr "Nunca" + +msgid "Peer" +msgstr "Parceiro" + +msgid "Persistent Keepalive" +msgstr "Manter Conexões Abertas (Keepalive)" + +msgid "Public Key" +msgstr "Chave Pública" + +msgid "WireGuard Status" +msgstr "Estado do WireGuard" + +msgid "h ago" +msgstr "horas atrás" + +msgid "m ago" +msgstr "meses atrás" + +msgid "over a day ago" +msgstr "mais de um dia atrás" + +msgid "s ago" +msgstr "segundos atrás" diff --git a/applications/luci-app-wireguard/po/templates/wireguard.pot b/applications/luci-app-wireguard/po/templates/wireguard.pot new file mode 100644 index 000000000..9ec5c6004 --- /dev/null +++ b/applications/luci-app-wireguard/po/templates/wireguard.pot @@ -0,0 +1,62 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Allowed IPs" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Data Received" +msgstr "" + +msgid "Data Transmitted" +msgstr "" + +msgid "Endpoint" +msgstr "" + +msgid "Firewall Mark" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface does not have a public key!" +msgstr "" + +msgid "Latest Handshake" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Peer" +msgstr "" + +msgid "Persistent Keepalive" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "WireGuard Status" +msgstr "" + +msgid "h ago" +msgstr "" + +msgid "m ago" +msgstr "" + +msgid "over a day ago" +msgstr "" + +msgid "s ago" +msgstr "" diff --git a/applications/luci-app-wol/po/pt-br/wol.po b/applications/luci-app-wol/po/pt-br/wol.po index 6195e4cba..783ec0bc0 100644 --- a/applications/luci-app-wol/po/pt-br/wol.po +++ b/applications/luci-app-wol/po/pt-br/wol.po @@ -2,18 +2,18 @@ # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-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 <luizluca@gmail.com>\n" +"PO-Revision-Date: 2017-02-20 18:13-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\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" +"X-Generator: Poedit 1.8.11\n" msgid "Broadcast on all interfaces" msgstr "Broadcast em todas as interfaces" @@ -28,14 +28,13 @@ msgid "Network interface to use" msgstr "Interfaces de rede para usar" msgid "Send to broadcast address" -msgstr "" +msgstr "Enviar para o endereço de broadcast" -#, 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" +"Algumas vezes, somente uma das duas 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" |