Skip to content
Commits on Source (23)
FROM node:8 FROM node:12
RUN apt-get update && apt-get install git -y --no-install-recommends && mkdir -p /opt/app RUN apt-get update && apt-get install git -y --no-install-recommends && mkdir -p /opt/app
WORKDIR /opt/app WORKDIR /opt/app
COPY . /opt/app COPY . /opt/app
RUN npm install && cd node_modules/geoip-lite/ && npm run-script updatedb RUN npm install
CMD cd /opt/app && TIMEOUT=2000 PORT=80 npm start CMD cd /opt/app && TIMEOUT=2000 PORT=80 npm start
......
**DEPRECATED. See https://git.silence.dev/Silence/silence.im**
Website of the Silence project. Website of the Silence project.
## Installation ## Installation
......
...@@ -3,8 +3,7 @@ var express = require('express'), ...@@ -3,8 +3,7 @@ var express = require('express'),
request = require('request'), request = require('request'),
commit = null, commit = null,
moment = require('moment'), moment = require('moment'),
fs = require('fs'), fs = require('fs');
async = require('async');
var app = express(); var app = express();
...@@ -35,61 +34,41 @@ app.use(i18n.init); ...@@ -35,61 +34,41 @@ app.use(i18n.init);
app.use(express.static(__dirname + '/assets')); app.use(express.static(__dirname + '/assets'));
app.set('view engine', 'ejs'); app.set('view engine', 'ejs');
updateCache = function(cb){ var cache = parseInt(process.env.CACHE) || 5;
async.parallel({
details: function(callback){ updateCache = function(callback){
request('https://api.github.com/repos/SilenceIM/Silence', {timeout: parseInt(process.env.TIMEOUT) || 2000, headers: {'User-Agent': 'Silence Website'}}, function (err, res) { request('https://git.silence.dev/api/v4/projects/20/repository/commits', {timeout: parseInt(process.env.TIMEOUT) || 2000, headers: {'User-Agent': 'Silence Website'}}, function (err, res) {
if (err || typeof res == 'undefined' || typeof res.statusCode == 'undefined' || res.statusCode != 200) return callback(true); if (err || typeof res == 'undefined' || typeof res.statusCode == 'undefined' || res.statusCode != 200) return callback(true);
fs.writeFile('./cache-details.json', res.body, function (err) { fs.writeFile('./cache-commits.json', res.body, function (err) {
if (err) return callback("Cannot write cache-details.json"); if (err) return callback("Cannot write cache-commits.json");
return callback(null, JSON.parse(res.body)); return callback(null, JSON.parse(res.body));
}); });
});
},
commits: function(callback){
request('https://api.github.com/repos/SilenceIM/Silence/commits', {timeout: parseInt(process.env.TIMEOUT) || 2000, headers: {'User-Agent': 'Silence Website'}}, function (err, res) {
if (err || typeof res == 'undefined' || typeof res.statusCode == 'undefined' || res.statusCode != 200) return callback(true);
fs.writeFile('./cache-commits.json', res.body, function (err) {
if (err) return callback("Cannot write cache-commits.json");
return callback(null, JSON.parse(res.body));
});
});
}
}, function(err, json){
return cb(err, json);
}); });
}; };
getCache = function(cb){ getCache = function(callback){
async.parallel({ fs.readFile('./cache-commits.json', function (err, data) {
commits: function(callback){ if (err) return callback(err);
fs.readFile('./cache-commits.json', function (err, data) { return callback(null, JSON.parse(data));
if (err) return callback(err); });
return callback(null, JSON.parse(data));
});
},
details: function(callback){
fs.readFile('./cache-details.json', function (err, data) {
if (err) return callback(err);
return callback(null, JSON.parse(data));
});
}
}, function(err, json){
return cb(err, json);
})
}; };
getCacheTime = function(callback){ getCacheTime = function(callback){
fs.stat('./cache-commits.json', function(err, stats){ fs.access('./cache-commits.json', fs.constants.F_OK | fs.constants.W_OK, function(err) {
if (err) return callback(err); if (err) return callback(null, cache+1);
return callback(null, Math.floor((new Date().getTime()-stats.mtime.getTime())/1000/60)); fs.stat('./cache-commits.json', function(err, stats){
if (err) return callback(err);
return callback(null, Math.floor((new Date().getTime()-stats.mtime.getTime())/1000/60));
});
}); });
}; };
getData = function(callback){ getData = function(callback){
getCacheTime(function(err, time){ getCacheTime(function(err, time){
var cache = parseInt(process.env.CACHE) || 5; if (err) {
if (err || time >= cache){ console.log('Error when fetching data...');
return callback(err);
} else if (time >= cache){
updateCache(function(err, json){ updateCache(function(err, json){
console.log('Updating cache...'); console.log('Updating cache...');
return callback(err, json); return callback(err, json);
...@@ -107,16 +86,16 @@ app.get('/', function (req, res) { ...@@ -107,16 +86,16 @@ app.get('/', function (req, res) {
moment.locale(res.locale); moment.locale(res.locale);
getData(function(err, json){ getData(function(err, commits){
if (err) console.log(err); if (err) console.log(err);
if (!err){ if (!err){
commit = {}; commit = {};
commit.message = json.commits[0].commit.message.split('\n')[0]; commit.message = commits[0].message.split('\n')[0];
commit.date = moment(json.commits[0].commit.author.date).fromNow(); commit.date = moment(commits[0].committed_date).fromNow();
commit.author = json.commits[0].author.login; commit.author = commits[0].author_name;
commit.link = 'https://git.silence.dev/Silence/Silence-Android/commit/'+json.commits[0].sha; commit.link = 'https://git.silence.dev/Silence/Silence-Android/commit/'+commits[0].id;
} }
return res.render('index', {req: req, res: res, commit: commit, github: json.details}); return res.render('index', {req: req, res: res, commit: commit});
}); });
}); });
...@@ -135,6 +114,10 @@ app.get('/privacy', function(req, res) { ...@@ -135,6 +114,10 @@ app.get('/privacy', function(req, res) {
return res.redirect('/#privacy'); return res.redirect('/#privacy');
}); });
app.get('/donate', function(req, res) {
return res.redirect('/#bitcoin');
});
var server = app.listen(parseInt(process.env.PORT) || 3000, function () { var server = app.listen(parseInt(process.env.PORT) || 3000, function () {
console.log('App listening at http://%s:%s', server.address().address, server.address().port); console.log('App listening at http://%s:%s', server.address().address, server.address().port);
}) })
-----BEGIN PGP SIGNED MESSAGE----- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512 Hash: SHA512
As of today, 2019-07-17, Silence has not been compromised. There As of today, 2020-06-01, Silence has not been compromised. There
is no backdoor and no known security breach has been left. is no backdoor and no known security breach has been left.
This canary should be updated and resigned every two months. This canary should be updated and resigned every two months.
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEJoTs72B2Glsln0XMh41tCR7eCYkFAl0vg+wACgkQh41tCR7e iQIzBAEBCgAdFiEEJoTs72B2Glsln0XMh41tCR7eCYkFAl7VAIwACgkQh41tCR7e
CYkp7Q/8CninGKrcpSLhb4trQ9lH7NXIJfIGXj8l+jWLMHzbzmikj+AVxCSgIpil CYnHAQ//Y5zZhCdH4Cu4UioXDHFZFBFWgH6QzbEFkQ3APTMhLhG3DR3zIif2BRg8
dEpwAjxYXN5QUW+1yI6/Mf677b3PJu0w+pmZ+JzHm3DyZqpq9dLqOlJsatirMgIw Y5XtekA2St0ehRw72dc1cgBupIUmpWVeo1fFsOSr+OjjovqwoLZfK9haDhV27HnF
P6cp168DU3WBqOZozB7Q1gMbpTBaPCHD4kQ8RMA55U8SJR2+b+elkw9NVa/IVPf2 AOjzEPR7SBt3zctxC6ieiEGVf0oAmJ9XEk/7+A/xYFCjdF/c+RJlgpbrZg8usoRw
i+PCFROoWQblch82Rnmd0W1IEYWMiSTP/AJXE4EiHvHfAU+1p5buWqOmNw3cPflo Xt2PyolgD9Q0gNx8rRIHbr1VRKcgq1uutsLbegrPu2wPqOPwAcWtVhQE2StjkL5M
BX5rH00/ABwIj1TbxBxMHevJUqdj2Tue/RRKMVlfzPAV70PdI8F5AXrt9I13EpMH 3bxOdCrYU22JtFU+/i35jdJ5gZcQlS2Jgxk6+NpRCzHKNest04PBzqlYp2OYOrvS
/h0gfEPHO3N78qcTX6q968SmjnIlTwmJCZccerkB5GSILqCzM4nnX6A3XdC410Re ZAJkuTEezTQaVQGkdlSDp8OLi/flvS1cHKNMxY3vhT3GLM19qv4s/hzHpVrjR07U
kHtWGw1/N3WNfn3j5gxNFSzBqNSPrygKwwXt92YHOc/69q3xnfF7f3+OYEq0W0MM CprK6kZmGMvrG1156IcFu4jqPvzfCob+5x1P5/FmUNernFuA8tHABQepkJ56FQ0v
cl/EgDed+qxpaPmBb6RIV6BmDtYfmZ7urliYKwarO9+gxhAV4d4PlkJE8P78na8y qqiGDT30e12x36e1iRF/vK9NsQulw02Ge//Gcm3HkEfI119DLOtB6DJSNErmQf5a
xmtRp6GZrvnB/LnlM1UMDGlEn5Tp3esJu04gfEYE0RtU2eQeeSEMxiMI8EV6sBBh fIxPW67uk6EnjMS5z+5MytuDKiWNmxlIslCSuQUgGzTEUCWrKa5TNmjulFV6143R
uK3a0P4f1TjMmA2CQ+Aypq+iEJnjeNPd4MXpnLQXFtpSZ++Dj2aEmUBwKvnPNCiM oaMi26FLYmwMu/d/2apUo1RR7zQOg9c9XuR+XKJjdeTa2tn445iMlcXOrwWrEJA0
phgxxfUBxA4nHyNvyEEaigRU3bHTCljL1xjHvvkwsRT2MKudoJ8= tx1wgq+Ozl8sMIgw2dKRf4anQAvUO5mbTsCX3XAy/WZi8lN4sxc=
=DbQx =bK/W
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----
As of today, 2019-07-17, Silence has not been compromised. There As of today, 2020-06-01, Silence has not been compromised. There
is no backdoor and no known security breach has been left. is no backdoor and no known security breach has been left.
This canary should be updated and resigned every two months. This canary should be updated and resigned every two months.
...@@ -3,17 +3,17 @@ ...@@ -3,17 +3,17 @@
"SLOGAN": "facile ĉifri SMS/MMS-mesaĝoj", "SLOGAN": "facile ĉifri SMS/MMS-mesaĝoj",
"DESCRIPTION": "Protektu viajn mesaĝojn kaj dum liverado kaj en via poŝtelefono. Silence (ekse SMSSecure) povas entute anstataŭigi antaŭfiksitan etmesaĝan aplikaĵon: ĉiuj mesaĝoj estas ĉifritaj loke kaj mesaĝoj al aliaj uzantoj de Silence estas ĉifritaj dum transsendo.", "DESCRIPTION": "Protektu viajn mesaĝojn kaj dum liverado kaj en via poŝtelefono. Silence (ekse SMSSecure) povas entute anstataŭigi antaŭfiksitan etmesaĝan aplikaĵon: ĉiuj mesaĝoj estas ĉifritaj loke kaj mesaĝoj al aliaj uzantoj de Silence estas ĉifritaj dum transsendo.",
"CATCH_PHRASE": "Ĉu vi bezonas privatecon?", "CATCH_PHRASE": "Ĉu vi bezonas privatecon?",
"SUBTITLE": "Silence ĉifras viajn tekstajn mesaĝojn dum transsendo kaj en via poŝtelefono.", "SUBTITLE": "Silence ĉifras viajn tekstajn mesaĝojn dum transsendi kaj en via poŝtelefono.",
"FORK_US": "Idigi per GitHub!", "FORK_US": "Idigi per GitHub!",
"GET_THE_APP": "Elŝuti aplikaĵon", "GET_THE_APP": "Elŝuti aplikaĵon",
"GET_SOURCE_CODE": "Elŝuti fontkodon", "GET_SOURCE_CODE": "Elŝuti fontkodon",
"SOURCE_CODE_TEXT": "La fontkodo de Silence estas malferma, do iu ajn povas facile kontroli ĉu ĝi funkcias laŭ la priskribo. Ĝia permesilo estas GPLv3 kaj ĝi ćiam estos libera.", "SOURCE_CODE_TEXT": "La fontkodo de Silence estas malferma, do iu ajn povas facile kontroli ĉu ĝi funkcias laŭ la priskribo. Ĝia permesilo estas GPLv3 kaj ĝi ćiam estos libera.",
"GITLAB": "View source code »", "GITLAB": "Montri fontkodon",
"LAST_COMMIT": "Lasta enmeto: “%s”, de %s (%s).", "LAST_COMMIT": "Lasta kontribuo: “%s”, de %s (%s).",
"EASY": "Facila", "EASY": "Facila",
"EASY_TEXT": "Silence laboras kiel iu ajn alia SMS-a aplikaĵo. Vi kaj viaj amikoj ne devos ie ajn ensaluti aŭ aniĝi.", "EASY_TEXT": "Silence laboras kiel iu ajn alia SMS-a aplikaĵo. Vi kaj viaj amikoj ne devos ie ajn ensaluti aŭ aniĝi.",
"RELIABLE": "Senmalfunkcia", "RELIABLE": "Senmalfunkcia",
"RELIABLE_TEXT": "Silence komunikadas per ĉifritaj SMS-aj mesaĝoj. Nenia servilo aŭ retkonekto estas bezonata.", "RELIABLE_TEXT": "Silence komunikadas per ĉifritaj SMSaj mesaĝoj. Nenia servilo aŭ retkonekto estas bezonata.",
"PRIVATE": "Privata", "PRIVATE": "Privata",
"PRIVATE_TEXT": "Silence provizas plenan ĉifradon por viaj mesaĝoj uzante zorgege projektitan ĉifran protokolon de aplikaĵo Signal.", "PRIVATE_TEXT": "Silence provizas plenan ĉifradon por viaj mesaĝoj uzante zorgege projektitan ĉifran protokolon de aplikaĵo Signal.",
"SAFE": "Sekura", "SAFE": "Sekura",
...@@ -38,15 +38,15 @@ ...@@ -38,15 +38,15 @@
"GITHUB_BADGE_ISSUE": "Problemoj", "GITHUB_BADGE_ISSUE": "Problemoj",
"GITHUB_BADGE_ISSUE_LABEL": "Klopodi pri Silence ĉe GitHub", "GITHUB_BADGE_ISSUE_LABEL": "Klopodi pri Silence ĉe GitHub",
"GITHUB_BADGE_ISSUE_COUNT_LABEL": "# problemoj ĉe GitHub", "GITHUB_BADGE_ISSUE_COUNT_LABEL": "# problemoj ĉe GitHub",
"BETA_DESCRIPTION": "Se vi volas partopreni en testado de beta-eldonoj, bonvolu viziti la %sabon-formularon ĉe Play Store%s. Uzantoj de F-Droid ne devas fari ion ajn escepte aktivigi nestabilaj ĝisdatigoj” en la kliento F-Droid.", "BETA_DESCRIPTION": "Se vi volas partopreni en testado de beta-eldonoj, bonvolu viziti la %sabonformularon ĉe la Vendejo Play%s. Uzantoj de F-Droid ne devas fari ion ajn escepte aktivigi nestabilaj ĝisdatigoj” en la kliento FDroid.",
"WARNING": "Averto", "WARNING": "Averto",
"US_WARNING_MODAL": "Pro kialoj rilataj al registrita marko, Silence estas nuntempe ne disponebla per Play Store en Usono, tamen vi plue povas %selŝuti Silence en Usono per F-Droid%s - deponejo de Libera kaj Malfermkoda Programaro (FOSS) por la operaciumo Android subtenata de la Fondaĵo por Libera Programaro (FSF).", "US_WARNING_MODAL": "Pro kialoj rilataj al registrita marko, Silence estas nuntempe ne disponebla per la Vendejo Play en Usono, tamen vi plue povas %selŝuti Silence en Usono per FDroid%s deponejo de Libera kaj Malfermkoda Programaro (FOSS) por la operaciumo Android subtenata de la Fondaĵo por Libera Programaro (FSF).",
"US_WARNING_MODAL_CONTINUE": "Pluigi al Play Store", "US_WARNING_MODAL_CONTINUE": "Pluigi al Vendejo Play",
"SUPPORT_TITLE": "Subtenu Silence!", "SUPPORT_TITLE": "Subtenu Silence!",
"SUPPORT_TEXT": "Silence estas subtenata de viaj donacon. Tio ĉi helpas al ni pagi diversajn kostojn (reteja gastigadon, domajnon, ktp.). Ni akceptas Bitmonon kaj %sreeblajn donacojn per Liberapay%s.", "SUPPORT_TEXT": "Silence estas subtenata per viaj donacoj kaj ni akceptas Bitmonon (₿). Tio ĉi helpas al ni pagi diversajn kostojn (retejan gastigadon, domajnon, ktp.).",
"SUPPORT_TEXT_BITCOIN": "Ni Bitmon-adreso estas %s", "SUPPORT_TEXT_ADDRESS": "Nia Bitmon-adreso estas %s",
"PRIVACY_POLICY": "Politiko pri privateco", "PRIVACY_POLICY": "Privateca politiko",
"PRIVACY_POLICY_TEXT": "Silence ne kolektas aŭ transsendas iujn ajn privatajn informojn. Ni postulas la jenajn permesojn:\n%sINTERNET%s: tiu ĉi permeso estas postulata por transsendi datumojn el/al servo de ĉelret-provizanto por liveri MMS-ajn mesaĝojn. Ĝi ne estas uzata por iu ajn celo.\n%sREAD_CONTACTS%s: tiu ĉi permeso estas postulata por ke aplikaĵo povu sugesti kontaktojn al uzanto dum tajpi, kaj por montri informojn pri kontakto ĉe mesaĝa fadeno. Tiuj ĉi informoj neniam estas transsendataj ekstere la aparato.\n%sREAD_PHONE_STATE%s: tiu ĉi permeso estas postulata por akiri la nunan telefon-numeron. Ĝi estas uzata por priservi du SIM-kartojn kaj por certigi, ke sendado de mesaĝoj el/al nuna numero funkcias ĝuste. Tiuj ĉi informoj neniam estas transsendataj ekstere la aparato.", "PRIVACY_POLICY_TEXT": "Silence ne kolektas aŭ transsendas iujn ajn privatajn informojn. Ni postulas la jenajn permesojn:\n%sINTERNET%s: tiu ĉi permeso estas postulata por transsendi datumojn el/al servo de ĉelretprovizanto por liveri MMSajn mesaĝojn. Ĝi ne estas uzata por iu ajn celo.\n%sREAD_CONTACTS%s: tiu ĉi permeso estas postulata por ke aplikaĵo povu sugesti kontaktojn al uzanto dum tajpi, kaj por montri informojn pri kontakto ĉe mesaĝa fadeno. Tiuj ĉi informoj neniam estas transsendataj ekstere la aparato.\n%sREAD_PHONE_STATE%s: tiu ĉi permeso estas postulata por akiri la nunan telefonnumeron. Ĝi estas uzata por priservi du SIMkartojn kaj por certigi, ke sendado de mesaĝoj el/al nuna numero funkcias ĝuste. Tiuj ĉi informoj neniam estas transsendataj ekstere la aparato.",
"WARRANT_CANARY": "“Kanaria” garantio", "WARRANT_CANARY": "“Kanaria” garantio",
"WARRANT_CANARY_TEXT": "Subskribita “kanaria” garantio estas publikigata ĉiu du monatoj por certigi, ke Silence ne estas kompromitita de ekstera partio per leĝ-ordono. Vi povas %selŝuti la garantion%s kaj la %sPGP-ŝlosilon%s (fingrospuro %s)." "WARRANT_CANARY_TEXT": "Subskribita “kanaria” garantio estas publikigata ĉiu du monatoj por certigi, ke Silence ne estas kompromitita de ekstera partio per leĝordono. Vi povas %selŝuti la garantion%s kaj la %sPGPŝlosilon%s (fingrospuro %s)."
} }
\ No newline at end of file
{ {
"LANG": "pl", "LANG": "pl",
"SLOGAN": "Łatwe szyfrowanie SMS/MMS", "SLOGAN": "Łatwe szyfrowanie SMS/MMS",
"DESCRIPTION": "Chroń swoją komunikację podczas przesyłania i na telefonie. Silence (poprzednio SMSSecure) jest pełnym zamiennikiem domyślnej aplikacji do wiadomości tekstowych: wszystkie wiadomości są szyfrowane lokalnie i podczas transferu do innych użytkowników Silence.", "DESCRIPTION": "Chroń swoją komunikację podczas przesyłania i na telefonie. Silence (wcześniej SMSSecure) jest kompletnym zamiennikiem domyślnej aplikacji do SMS­‑ów: wszystkie wiadomości są szyfrowane lokalnie i podczas transferu do innych użytkowników Silence.",
"CATCH_PHRASE": "Potrzebujesz prywatności?", "CATCH_PHRASE": "Potrzebujesz trochę prywatności?",
"SUBTITLE": "Silence szyfruje Twoje wiadomości tekstowe podczas przesyłu i na telefonie.", "SUBTITLE": "Silence szyfruje Twoje wiadomości tekstowe podczas przesyłu i na telefonie.",
"FORK_US": "Forkuj nas na GitHubie!", "GET_THE_APP": "Pobierz aplikację",
"GET_THE_APP": "Pobierz apkę",
"GET_SOURCE_CODE": "Pobierz kod źródłowy", "GET_SOURCE_CODE": "Pobierz kod źródłowy",
"SOURCE_CODE_TEXT": "Kod źródłowy Silence jest otwarty, więc każdy może z łatwością skontrolować, czy działa on tej jak to jest opisane. Program jest licencjonowany pod GPLv3 i pozostanie wolny na zawsze.", "SOURCE_CODE_TEXT": "Kod źródłowy Silence jest otwarty, więc każdy może zweryfikować, czy program działa tak jak powinien. Udostępniamy go na licencji GPL 3 i pozostanie wolny na zawsze.",
"GITLAB": "View source code »", "GITLAB": "Zobacz kod źródłowy »",
"LAST_COMMIT": "Ostatnia edycja: \"%s\", przez %s (%s).", "LAST_COMMIT": "Ostatnia zmiana: „%s”, przez %s (%s).",
"EASY": "Prostota", "EASY": "Prosty",
"EASY_TEXT": "Silence działa jak każda inna aplikacja SMS. Ty i Twoi przyjaciele nie mus się nigdzie rejestrować.", "EASY_TEXT": "Silence działa jak każda inna aplikacja do SMS­‑ów. Ty i Twoi znajomi nie musicie się nigdzie rejestrować.",
"RELIABLE": "Niezawodność", "RELIABLE": "Niezawodny",
"RELIABLE_TEXT": "Silence komunikuje się przez szyfrowane wiadomości SMS. Nie wymagane żadne serwery, ani połączenie z Internetem.", "RELIABLE_TEXT": "Silence komunikuje się przez szyfrowane wiadomości SMS. Nie wymaga żadnych serwerów ani połączenia z Internetem.",
"PRIVATE": "Prywatność", "PRIVATE": "Prywatny",
"PRIVATE_TEXT": "Silence oferuje pełne (ang. end-to-end) szyfrowanie Twoich wiadomości używając starannie opracowanego protokołu szyfrującego Signal.", "PRIVATE_TEXT": "Silence oferuje pełne szyfrowanie Twoich wiadomości używając starannie opracowanego protokołu Signal.",
"SAFE": "Bezpieczeństwo", "SAFE": "Bezpieczny",
"SAFE_TEXT": "Wszystkie wiadomości są szyfrowane lokalnie, więc jeżeli Twój telefon zaginie lub zostanie skradziony Twoje wiadomości pozostaną bezpieczne.", "SAFE_TEXT": "Wszystkie wiadomości są szyfrowane lokalnie, więc jeśli Twój telefon zaginie lub zostanie skradziony, Twoje wiadomości pozostaną chronione.",
"OSS": "Open Source", "OSS": "Otwartoźródłowy",
"OSS_TEXT": "Silence jest wolnym i otwarto-źródłowym oprogramowaniem, każdy może sprawdzić jego bezpieczeństwo analizując kod źródłowy.", "OSS_TEXT": "Silence jest Wolnym i Otwartym Oprogramowaniem, dzięki czemu każdy może sprawdzić jego bezpieczeństwo analizując kod źródłowy.",
"COMMUNITY": "Dołącz do społeczności!", "COMMUNITY": "Dołącz do społeczności!",
"COMMUNITY_TEXT": "Masz pytanie? Chcesz pomóc?", "COMMUNITY_TEXT": "Masz pytanie? Chcesz pom?",
"COMMUNITY_TEXT_LIST_MATTERMOST": "Mattermost: %s", "COMMUNITY_TEXT_LIST_MATTERMOST": "Mattermost: %s",
"COMMUNITY_TEXT_LIST_TWITTER": "Twitter: %s", "COMMUNITY_TEXT_LIST_TWITTER": "Twitter: %s",
"COMMUNITY_TEXT_LIST_MASTODON": "Mastodon: %s", "COMMUNITY_TEXT_LIST_MASTODON": "Mastodon: %s",
"COMMUNITY_TEXT_LIST_EMAIL": "El-poczta: %s (%sklucz PGP%s)", "COMMUNITY_TEXT_LIST_EMAIL": "E‑mail: %s (%sklucz PGP%s)",
"GITHUB_BADGE_WATCH": "Śledź", "BETA_DESCRIPTION": "Jeśli chcesz dołączyć do naszego programu beta, odwiedź %sformularz subskrypcji Sklepu Play%s. Użytkownicy F‑Droida nie muszą robić nic poza włączeniem „Niestabilnych wersji” w opcjach klienta F‑Droid.",
"GITHUB_BADGE_WATCH_LABEL": "Śledź Silence na GitHub",
"GITHUB_BADGE_WATCH_COUNT_LABEL": "$ obserwujących na GitHub",
"GITHUB_BADGE_STAR": "Polub",
"GITHUB_BADGE_STAR_LABEL": "Polub Silence na GitHub",
"GITHUB_BADGE_STAR_COUNT_LABEL": "# polubień na GitHub",
"GITHUB_BADGE_FORK": "Forkuj",
"GITHUB_BADGE_FORK_LABEL": "Forkuj Silence na GitHub",
"GITHUB_BADGE_FORK_COUNT_LABEL": "# forków na GitHub",
"GITHUB_BADGE_ISSUE": "Problemy",
"GITHUB_BADGE_ISSUE_LABEL": "Zgłoś problem n.t. Silence na GitHub",
"GITHUB_BADGE_ISSUE_COUNT_LABEL": "# zgłoszonych problemów na GitHub",
"BETA_DESCRIPTION": "Jeżeli chcesz dołączyć do naszego programu beta, odwiedź proszę %sformularz subskrypcji w Sklepie Play%s. Użytkownicy F-Droida nie muszą nic robić, wystarczy że aktywują \"Niestabilne wersje\" w opcjach klienta F-Droid.",
"WARNING": "Ostrzeżenie", "WARNING": "Ostrzeżenie",
"US_WARNING_MODAL": "Z powodu naruszenia znaku towarowego, Silence nie jest dostępne w Sklepie Play na terenie USA, ale wciąż możesz %spobrać Silence w USA z F-Droida%s - repozytorium Wolnego i Otwartoźródłowego Oprogramowania (FOSS) na platformę Android, wspieranego przez Fundację Wolnego Oprogramowania (FSF).", "US_WARNING_MODAL": "Z powodu znaków towarowych, Silence obecnie nie jest dostępny w Sklepie Play na terenie Stanów Zjednoczonych, ale nadal możesz %spobrać Silence z F‑Droida%s, repozytorium Wolnych i Otwartych (FOSS) aplikacji na Androida wspieranego przez Fundację Wolnego Oprogramowania (FSF).",
"US_WARNING_MODAL_CONTINUE": "Przejdź do Sklepu Play", "US_WARNING_MODAL_CONTINUE": "Przejdź do Sklepu Play",
"SUPPORT_TITLE": "Wspomóż Silence!", "SUPPORT_TITLE": "Wspieraj Silence!",
"SUPPORT_TEXT": "Silence jest napędzany przez Twoje dotacji i przyjmujemy Bitcoiny. To pomoże nam pokryć rozmaite wydatki (hosting, domena, itp.).", "SUPPORT_TEXT": "Silence jest napędzany przez Twoje dotacje, przyjmujemy również bitcoiny. To pomaga nam pokryć rozmaite wydatki (hosting, domena itp.).",
"SUPPORT_TEXT_ADDRESS": "Nasz adres Bitcoin to %s", "SUPPORT_TEXT_ADDRESS": "Nasz adres Bitcoin to %s",
"PRIVACY_POLICY": "Polityka prywatności", "PRIVACY_POLICY": "Polityka prywatności",
"PRIVACY_POLICY_TEXT": "Silence nie zbiera i przesyła jakichkolwiek osobistych informacji. Wymagamy następujących zezwoleń:\n%sINTERNET%s: to zezwolenie jest wymagane, aby aplikacja mogła przesyłać dane z/do dostawcy sieci komórkowej, do obsługi MMS. Nie jest używane w jakimkolwiek innym celu.\n%sREAD_CONTACTS%s: to zezwolenie jest wymagane, aby aplikacja mogła sugerować kontakty użytkownikowi podczas wpisywania i wyświetl informacje o kontakcie obok wątku wiadomości. Te informacje nie są przesyłane poza urządzenie.\n%sREAD_PHONE_STATE%s: to zezwolenie jest wymagane, aby odczytać obecny numer telefonu. To jest używane do obsługi dwóch kart SIM i do upewnienia się, czy wysyłanie wiadomości z/do obecnego numeru działa poprawnie. Te informacje nie są przesyłane poza urządzenie.", "PRIVACY_POLICY_TEXT": "Silence nie zbiera ani nie przesyła żadnych osobistych informacji. Aplikacja wymaga następujących uprawnień: %sINTERNET%s: wymagane w celu przesyłania danych z/do dostawcy sieci komórkowej dla obsługi MMS‑ów. Nie jest używane w żadnym innym celu. %sREAD_CONTACTS%s: wymagane w celu podpowiadania kontaktów użytkownikowi podczas wpisywania oraz w celu wyświetlania informacji o kontakcie przy wątku wiadomości. Te informacje nigdy nie są przesyłane poza urządzenie. %sREAD_PHONE_STATE%s: wymagane w celu odczytania aktualnego numeru telefonu. Jest to używane do obsługi dwóch kart SIM i dla zapewnienia, że wysyłanie wiadomości z/do aktualnego numeru działa poprawnie. Te informacje nigdy nie są przesyłane poza urządzenie.",
"WARRANT_CANARY": "„Kanarek” bezpieczeństwa", "WARRANT_CANARY": "„Kanarek” bezpieczeństwa",
"WARRANT_CANARY_TEXT": "Podpisany „kanarek” bezpieczeństwa jest publikowany co dwa miesiące, aby zapewnić że Silence nie został skompromitowany przez Służby z użyciem tajnego nakazu. Możesz %spobrać gwarancję%si %sklucz PGP%s (odcisk klucza%s)." "WARRANT_CANARY_TEXT": "Podpisany „kanarek” bezpieczeństwa jest publikowany co dwa miesiące aby zapewnić, że Silence nie został skompromitowany przez jakąkolwiek trzecią stronę wezwaniem sądowym. Możesz %spobrać gwarancję%s oraz %sklucz PGP%s (odcisk klucza %s)."
} }
\ No newline at end of file
...@@ -14,19 +14,18 @@ ...@@ -14,19 +14,18 @@
"author": "Bastien Le Querrec", "author": "Bastien Le Querrec",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"engines": { "engines": {
"node": "8.x.x" "node": "12.x.x"
}, },
"dependencies": { "dependencies": {
"async": "^3.1.0", "bootstrap": "^4.4.1",
"bootstrap": "^4.3.1", "ejs": "^3.1.2",
"ejs": "^2.6.2",
"express": "^4.17.1", "express": "^4.17.1",
"fork-awesome": "^1.1.7", "fork-awesome": "^1.1.7",
"geoip-lite": "^1.3.7", "geoip-lite": "^1.4.1",
"i18n": "^0.8.3", "i18n": "^0.9.0",
"jquery": "^3.4.1", "jquery": "^3.5.0",
"jquery.scrollto": "^2.1.2", "jquery.scrollto": "^2.1.2",
"moment": "^2.24.0", "moment": "^2.24.0",
"request": "^2.88.0" "request": "^2.88.2"
} }
} }