tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
April 2020
- 25 participants
- 2156 discussions
commit 2ba8f859afbfb5259c6c3a830eb94fb3d536f351
Author: Arlo Breault <arlolra(a)gmail.com>
Date: Wed Apr 15 18:35:39 2020 -0400
Add a button to retry probe
Trac: 33365
Trac: 33112
---
init-badge.js | 60 +++++++++++++++++++++----------------
init-webext.js | 32 +++++++++++++-------
static/_locales/en_US/messages.json | 6 ++++
static/embed.html | 1 +
static/popup.js | 29 +++++++++++++-----
webext/embed.js | 10 +++----
6 files changed, 89 insertions(+), 49 deletions(-)
diff --git a/init-badge.js b/init-badge.js
index 4beceb1..d9660a8 100644
--- a/init-badge.js
+++ b/init-badge.js
@@ -22,7 +22,20 @@ class BadgeUI extends UI {
constructor() {
super();
- this.popup = new Popup((...args) => messages.getMessage(...args));
+ this.popup = new Popup(
+ (...args) => messages.getMessage(...args),
+ (event) => {
+ if (event.target.checked) {
+ setSnowflakeCookie('1', COOKIE_LIFETIME);
+ } else {
+ setSnowflakeCookie('', COOKIE_EXPIRE);
+ }
+ update();
+ },
+ () => {
+ tryProbe();
+ }
+ );
}
setStatus() {}
@@ -92,7 +105,7 @@ function getLang() {
return defaultLang;
}
-var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotifications, query;
+var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotifications, query, tryProbe;
(function() {
@@ -116,21 +129,7 @@ var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotific
if (debug) { log(msg); }
};
- update = function() {
- const cookies = Parse.cookie(document.cookie);
- if (cookies[COOKIE_NAME] !== '1') {
- ui.turnOff();
- snowflake.disable();
- log('Currently not active.');
- return;
- }
-
- if (!Util.hasWebRTC()) {
- ui.missingFeature('popupWebRTCOff');
- snowflake.disable();
- return;
- }
-
+ tryProbe = function() {
WS.probeWebsocket(config.relayAddr)
.then(
() => {
@@ -148,6 +147,24 @@ var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotific
);
};
+ update = function() {
+ const cookies = Parse.cookie(document.cookie);
+ if (cookies[COOKIE_NAME] !== '1') {
+ ui.turnOff();
+ snowflake.disable();
+ log('Currently not active.');
+ return;
+ }
+
+ if (!Util.hasWebRTC()) {
+ ui.missingFeature('popupWebRTCOff');
+ snowflake.disable();
+ return;
+ }
+
+ tryProbe();
+ };
+
init = function() {
ui = new BadgeUI();
@@ -164,15 +181,6 @@ var debug, snowflake, config, broker, ui, log, dbg, init, update, silenceNotific
snowflake = new Snowflake(config, ui, broker);
log('== snowflake proxy ==');
update();
-
- document.getElementById('enabled').addEventListener('change', (event) => {
- if (event.target.checked) {
- setSnowflakeCookie('1', COOKIE_LIFETIME);
- } else {
- setSnowflakeCookie('', COOKIE_EXPIRE);
- }
- update();
- })
};
// Notification of closing tab with active proxy.
diff --git a/init-webext.js b/init-webext.js
index 3eb42dd..4b09988 100644
--- a/init-webext.js
+++ b/init-webext.js
@@ -25,6 +25,21 @@ class WebExtUI extends UI {
}), 60 * 60 * 1000);
}
+ tryProbe() {
+ WS.probeWebsocket(config.relayAddr)
+ .then(
+ () => {
+ this.missingFeature = false;
+ this.setEnabled(true);
+ },
+ () => {
+ log('Could not connect to bridge.');
+ this.missingFeature = 'popupBridgeUnreachable';
+ this.setEnabled(false);
+ }
+ );
+ }
+
initToggle() {
// First, check if we have our status stored
(new Promise((resolve) => {
@@ -48,17 +63,7 @@ class WebExtUI extends UI {
this.setEnabled(false);
return;
}
- WS.probeWebsocket(config.relayAddr)
- .then(
- () => {
- this.setEnabled(true);
- },
- () => {
- log('Could not connect to bridge.');
- this.missingFeature = 'popupBridgeUnreachable';
- this.setEnabled(false);
- }
- );
+ this.tryProbe();
});
}
@@ -83,6 +88,11 @@ class WebExtUI extends UI {
}
onMessage(m) {
+ if (m.retry) {
+ // FIXME: Can set a retrying state here
+ this.tryProbe();
+ return;
+ }
(new Promise((resolve) => {
chrome.storage.local.set({ "snowflake-enabled": m.enabled }, resolve);
}))
diff --git a/static/_locales/en_US/messages.json b/static/_locales/en_US/messages.json
index 0d638c7..393a1c4 100644
--- a/static/_locales/en_US/messages.json
+++ b/static/_locales/en_US/messages.json
@@ -26,6 +26,12 @@
"popupDescOn": {
"message": "Number of users your Snowflake has helped circumvent censorship in the last 24 hours: $1"
},
+ "popupRetry": {
+ "message": "Retry"
+ },
+ "popupRetrying": {
+ "message": "Retrying ..."
+ },
"badgeCookiesOff": {
"message": "Cookies are not enabled."
},
diff --git a/static/embed.html b/static/embed.html
index b3ca800..6cc6a88 100644
--- a/static/embed.html
+++ b/static/embed.html
@@ -15,6 +15,7 @@
<div id="statusimg"></div>
<p id="statustext">__MSG_popupStatusOff__</p>
<p id="statusdesc"></p>
+ <button type="button" id="retry">__MSG_popupRetry__</button>
</div>
<div class="b button">
<label id="toggle" for="enabled">__MSG_popupEnabled__</label>
diff --git a/static/popup.js b/static/popup.js
index 5223350..e11584f 100644
--- a/static/popup.js
+++ b/static/popup.js
@@ -10,12 +10,21 @@ function setClass(elem, className, cond) {
}
class Popup {
- constructor(getMsgFunc) {
+ constructor(getMsgFunc, changeFunc, retryFunc) {
this.getMsgFunc = getMsgFunc;
+ this.enabled = document.getElementById('enabled');
+ this.enabled.addEventListener('change', changeFunc);
+ this.retry = document.getElementById('retry');
+ this.retry.addEventListener('click', () => {
+ this.setStatusDesc(getMsgFunc('popupRetrying'));
+ this.setRetry(false);
+ setTimeout(retryFunc, 1000); // Just some UI feedback
+ });
this.div = document.getElementById('active');
this.statustext = document.getElementById('statustext');
this.statusdesc = document.getElementById('statusdesc');
this.img = document.getElementById('statusimg');
+ this.button = document.querySelector('.button');
}
setEnabled(enabled) {
setClass(this.img, 'on', enabled);
@@ -30,11 +39,14 @@ class Popup {
this.statusdesc.innerText = desc;
setClass(this.statusdesc, 'error', error);
}
- hideButton() {
- document.querySelector('.button').style.display = 'none';
+ setButton(hide) {
+ this.button.style.display = hide ? 'none' : 'block';
+ }
+ setRetry(display) {
+ this.retry.style.display = display ? 'inline-block' : 'none';
}
setChecked(checked) {
- document.getElementById('enabled').checked = checked;
+ this.enabled.checked = checked;
}
static fill(n, func) {
switch(n.nodeType) {
@@ -58,16 +70,19 @@ class Popup {
this.setStatusDesc((total > 0) ? this.getMsgFunc('popupDescOn', String(total)) : '');
this.setEnabled(true);
this.setActive(this.active);
+ this.setButton(false);
+ this.setRetry(false);
}
- turnOff(desc, error) {
+ turnOff(desc, error, retry) {
this.setChecked(false);
this.setStatusText(this.getMsgFunc('popupStatusOff'));
this.setStatusDesc(desc ? this.getMsgFunc(desc) : '', error);
this.setEnabled(false);
this.setActive(false);
+ this.setButton(error);
+ this.setRetry(retry);
}
missingFeature(desc) {
- this.turnOff(desc, true);
- this.hideButton();
+ this.turnOff(desc, true, desc === 'popupBridgeUnreachable');
}
}
diff --git a/webext/embed.js b/webext/embed.js
index 7371005..c17f602 100644
--- a/webext/embed.js
+++ b/webext/embed.js
@@ -13,7 +13,11 @@ const port = chrome.runtime.connect({
port.onMessage.addListener((m) => {
const { active, enabled, total, missingFeature } = m;
- const popup = new Popup((...args) => chrome.i18n.getMessage(...args));
+ const popup = new Popup(
+ (...args) => chrome.i18n.getMessage(...args),
+ (event) => port.postMessage({ enabled: event.target.checked }),
+ () => port.postMessage({ retry: true })
+ );
if (missingFeature) {
popup.missingFeature(missingFeature);
@@ -28,7 +32,3 @@ port.onMessage.addListener((m) => {
popup.turnOff();
}
});
-
-document.addEventListener('change', (event) => {
- port.postMessage({ enabled: event.target.checked });
-})
1
0

[translation/policies-code_of_conducttxtpot_completed] https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_conducttxtpot_completed
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit 66c934df16db52a0ffd1fe3d3901c0b915a16fda
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 18:47:01 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_co…
---
code_of_conduct+da.po | 794 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 794 insertions(+)
diff --git a/code_of_conduct+da.po b/code_of_conduct+da.po
new file mode 100644
index 0000000000..cf06da1fc4
--- /dev/null
+++ b/code_of_conduct+da.po
@@ -0,0 +1,794 @@
+# Code of conduct of the tor project
+# Copyright (C) 2019 tor project.
+# This Code of Conduct is licensed under a Creative Commons CC-BY-SA 4.0
+# International license.e.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+# Translators:
+# scootergrisen, 2019
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Code of conduct of the Tor Project\n"
+"POT-Creation-Date: 2019-08-02 12:00+0000\n"
+"PO-Revision-Date: 2019-08-27 18:54+0000\n"
+"Last-Translator: scootergrisen, 2019\n"
+"Language-Team: Danish (https://www.transifex.com/otf/teams/1519/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:1 ../code_of_conduct.txt:24
+#: ../code_of_conduct.txt:51 ../code_of_conduct.txt:75
+#: ../code_of_conduct.txt:104 ../code_of_conduct.txt:180
+#: ../code_of_conduct.txt:193 ../code_of_conduct.txt:213
+#: ../code_of_conduct.txt:231 ../code_of_conduct.txt:243
+#: ../code_of_conduct.txt:253 ../code_of_conduct.txt:278
+#, no-wrap
+msgid "============================================================\n"
+msgstr "============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:3
+#, no-wrap
+msgid ""
+"Tor Project Code of Conduct\n"
+"============================================================\n"
+msgstr ""
+"Tor Project Code of Conduct\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:6
+msgid "Statement of Intent:"
+msgstr "Statement of Intent:"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:10
+msgid ""
+"The Tor Project is committed to fostering an inclusive environment and "
+"community. Tor is a place where people should feel safe to engage, share "
+"their point of view, and participate."
+msgstr ""
+"The Tor Project is committed to fostering an inclusive environment and "
+"community. Tor is a place where people should feel safe to engage, share "
+"their point of view, and participate."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:15
+msgid ""
+"This code of conduct applies to The Tor Project as a whole. It is intended "
+"to provide guidelines for contributors. Employees and contractors of The Tor"
+" Project, Inc. (TPI) are also subject to company policies and procedures. "
+"Those people should feel free to contact HR with questions or concerns."
+msgstr ""
+"This code of conduct applies to The Tor Project as a whole. It is intended "
+"to provide guidelines for contributors. Employees and contractors of The Tor"
+" Project, Inc. (TPI) are also subject to company policies and procedures. "
+"Those people should feel free to contact HR with questions or concerns."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:23
+msgid ""
+"This code of conduct is not exhaustive or complete. It is an ongoing effort "
+"to summarize our shared understanding. We want to provide a welcoming, safe "
+"environment, so we can work together to pursue powerful solutions. We "
+"reserve the right to deviate from strictly enforcing this code. Any "
+"deviations must produce an outcome which is fairer, and aligned with our "
+"values. We understand that keeping a living document relevant and “patched” "
+"involves sustained effort."
+msgstr ""
+"This code of conduct is not exhaustive or complete. It is an ongoing effort "
+"to summarize our shared understanding. We want to provide a welcoming, safe "
+"environment, so we can work together to pursue powerful solutions. We "
+"reserve the right to deviate from strictly enforcing this code. Any "
+"deviations must produce an outcome which is fairer, and aligned with our "
+"values. We understand that keeping a living document relevant and “patched” "
+"involves sustained effort."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:26
+#, no-wrap
+msgid ""
+"0. Summary: Don't be a jerk. Be awesome instead.\n"
+"============================================================\n"
+msgstr ""
+"0. Summary: Don't be a jerk. Be awesome instead.\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:29
+msgid "The Tor community should be a good place where people are glad to be."
+msgstr "The Tor community should be a good place where people are glad to be."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:31
+#, no-wrap
+msgid " DO: Be kind, thoughtful, and considerate.\n"
+msgstr " DO: Be kind, thoughtful, and considerate.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:33
+#, no-wrap
+msgid " DO: Make Tor a place where people are happy and comfortable.\n"
+msgstr " DO: Make Tor a place where people are happy and comfortable.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:36
+#, no-wrap
+msgid ""
+" DO: Remember: We are all contributing; we are all learning. Nobody was born\n"
+" an expert.\n"
+msgstr ""
+" DO: Remember: We are all contributing; we are all learning. Nobody was born\n"
+" an expert.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:38
+#, no-wrap
+msgid " DO: Yield the floor. Listen. Make sure everyone gets heard.\n"
+msgstr " DO: Yield the floor. Listen. Make sure everyone gets heard.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:40
+#, no-wrap
+msgid " DON'T: Insult, harass, intimidate, or be a jerk.\n"
+msgstr " DON'T: Insult, harass, intimidate, or be a jerk.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:43
+#, no-wrap
+msgid ""
+" DON'T: Treat honest mistakes as an excuse to hassle people. Mistakes are for\n"
+" learning.\n"
+msgstr ""
+" DON'T: Treat honest mistakes as an excuse to hassle people. Mistakes are for\n"
+" learning.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:46
+#, no-wrap
+msgid ""
+" DON'T: Hunt for ways to uphold the letter of this code while violating its\n"
+" spirit.\n"
+msgstr ""
+" DON'T: Hunt for ways to uphold the letter of this code while violating its\n"
+" spirit.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:50
+#, no-wrap
+msgid ""
+" AND DO: Eagerly email: tor-community-council(a)lists.torproject.org with\n"
+" questions or concerns. Public key:\n"
+" https://trac.torproject.org/projects/tor/wiki/org/CommunityCouncil#Contact\n"
+msgstr ""
+" AND DO: Eagerly email: tor-community-council(a)lists.torproject.org with\n"
+" questions or concerns. Public key:\n"
+" https://trac.torproject.org/projects/tor/wiki/org/CommunityCouncil#Contact\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:53
+#, no-wrap
+msgid ""
+"1. Purpose\n"
+"============================================================\n"
+msgstr ""
+"1. Purpose\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:63
+msgid ""
+"A primary goal of the Tor community is to be inclusive of many different "
+"contributors. We want to include contributors from the most varied and "
+"diverse backgrounds possible. As such, we are committed to providing a "
+"friendly, safe and welcoming environment for all, regardless of their "
+"experience, gender identity or expression, sexual orientation, family, "
+"relationships, ability (whether bodily or mental), personal appearance, "
+"socioeconomic status, body size, race, ethnicity, age, religion, "
+"nationality, or membership in a disadvantaged and/or underrepresented group."
+msgstr ""
+"A primary goal of the Tor community is to be inclusive of many different "
+"contributors. We want to include contributors from the most varied and "
+"diverse backgrounds possible. As such, we are committed to providing a "
+"friendly, safe and welcoming environment for all, regardless of their "
+"experience, gender identity or expression, sexual orientation, family, "
+"relationships, ability (whether bodily or mental), personal appearance, "
+"socioeconomic status, body size, race, ethnicity, age, religion, "
+"nationality, or membership in a disadvantaged and/or underrepresented group."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:68
+msgid ""
+"A safe environment means one free from abuse, whether isolated or systemic. "
+"We explicitly acknowledge that tolerating abuse is a security problem. "
+"Allowing abusers and malicious people to disrupt our community puts our "
+"software, developers, and users at risk."
+msgstr ""
+"A safe environment means one free from abuse, whether isolated or systemic. "
+"We explicitly acknowledge that tolerating abuse is a security problem. "
+"Allowing abusers and malicious people to disrupt our community puts our "
+"software, developers, and users at risk."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:71
+msgid ""
+"This code of conduct outlines our expectations for all those who participate"
+" in our community, as well as the consequences for unacceptable behavior."
+msgstr ""
+"This code of conduct outlines our expectations for all those who participate"
+" in our community, as well as the consequences for unacceptable behavior."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:74
+msgid ""
+"We invite all those who participate in The Tor Project to help us create "
+"safe and positive experiences for everyone."
+msgstr ""
+"We invite all those who participate in The Tor Project to help us create "
+"safe and positive experiences for everyone."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:77
+#, no-wrap
+msgid ""
+"2. Be your best self\n"
+"============================================================\n"
+msgstr ""
+"2. Be your best self\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:80
+msgid ""
+"The following behaviors are expected and requested of all community members:"
+msgstr ""
+"The following behaviors are expected and requested of all community members:"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:83
+msgid ""
+"Participate in an honest and active way. In doing so, you contribute to the "
+"health and longevity of this community."
+msgstr ""
+"Participate in an honest and active way. In doing so, you contribute to the "
+"health and longevity of this community."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:85
+msgid "Exercise consideration and respect in your speech and actions."
+msgstr "Exercise consideration and respect in your speech and actions."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:87
+msgid "Attempt collaboration and dialog before engaging in conflict."
+msgstr "Attempt collaboration and dialog before engaging in conflict."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:89
+msgid ""
+"Refrain from demeaning, discriminatory, or harassing behavior and speech."
+msgstr ""
+"Refrain from demeaning, discriminatory, or harassing behavior and speech."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:92
+msgid ""
+"Be mindful of your surroundings and of your fellow participants. Alert "
+"community leaders if you notice:"
+msgstr ""
+"Be mindful of your surroundings and of your fellow participants. Alert "
+"community leaders if you notice:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:94
+msgid "a dangerous situation"
+msgstr "a dangerous situation"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:96
+msgid "someone in distress"
+msgstr "someone in distress"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:98
+msgid "violations of this code of conduct, even if they seem minor"
+msgstr "violations of this code of conduct, even if they seem minor"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:101
+msgid ""
+"Remember that community event venues may be shared with members of the "
+"public. Please be respectful to everyone using these locations."
+msgstr ""
+"Remember that community event venues may be shared with members of the "
+"public. Please be respectful to everyone using these locations."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:103
+msgid "Respect the privacy of your fellow community members."
+msgstr "Respect the privacy of your fellow community members."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:106
+#, no-wrap
+msgid ""
+"3. Unacceptable behaviors\n"
+"============================================================\n"
+msgstr ""
+"3. Unacceptable behaviors\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:109
+msgid "The following behaviors are unacceptable within our community:"
+msgstr "The following behaviors are unacceptable within our community:"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:114
+msgid ""
+"Violence, sexual assault, threats of violence, or violent language directed "
+"against another person, especially violence against a person or group based "
+"on a protected characteristic. (Display of weapons may constitute "
+"intimidation or a threat of violence.)"
+msgstr ""
+"Violence, sexual assault, threats of violence, or violent language directed "
+"against another person, especially violence against a person or group based "
+"on a protected characteristic. (Display of weapons may constitute "
+"intimidation or a threat of violence.)"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:117
+msgid ""
+"Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory"
+" jokes and language."
+msgstr ""
+"Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory"
+" jokes and language."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:122
+msgid ""
+"Spontaneously posting or displaying sexually explicit or violent material. "
+"(If it is necessary to share such material when working on Tor's mission, do"
+" so with sensitivity. Be aware that many people don't want to see it.)"
+msgstr ""
+"Spontaneously posting or displaying sexually explicit or violent material. "
+"(If it is necessary to share such material when working on Tor's mission, do"
+" so with sensitivity. Be aware that many people don't want to see it.)"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:125
+msgid ""
+"Posting or threatening to post other people’s personally identifying "
+"information (\"doxing\") without their consent."
+msgstr ""
+"Posting or threatening to post other people’s personally identifying "
+"information (\"doxing\") without their consent."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:127
+msgid "Personal insults or attacks, particularly those related to:"
+msgstr "Personal insults or attacks, particularly those related to:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:129
+msgid "experience"
+msgstr "experience"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:131
+msgid "gender identity or expression"
+msgstr "gender identity or expression"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:133
+msgid "sexual orientation"
+msgstr "sexual orientation"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:135
+msgid "family"
+msgstr "family"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:137
+msgid "relationships"
+msgstr "relationships"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:139
+msgid "ability (whether bodily or mental)"
+msgstr "ability (whether bodily or mental)"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:141
+msgid "personal appearance"
+msgstr "personal appearance"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:143
+msgid "socioeconomic status"
+msgstr "socioeconomic status"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:145
+msgid "body size"
+msgstr "body size"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:147
+msgid "race"
+msgstr "race"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:149
+msgid "ethnicity"
+msgstr "ethnicity"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:151
+msgid "age"
+msgstr "age"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:153
+msgid "religion"
+msgstr "religion"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:155
+msgid "nationality"
+msgstr "nationality"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:157
+msgid "membership in a disadvantaged and/or underrepresented group"
+msgstr "membership in a disadvantaged and/or underrepresented group"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:161
+msgid ""
+"Inappropriate photography, audio recording, or recording of personal "
+"information. You should have someone's consent before recording these "
+"things, and before posting them publicly."
+msgstr ""
+"Inappropriate photography, audio recording, or recording of personal "
+"information. You should have someone's consent before recording these "
+"things, and before posting them publicly."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:164
+msgid ""
+"Inappropriate physical contact. You should have someone’s consent before "
+"touching them."
+msgstr ""
+"Inappropriate physical contact. You should have someone’s consent before "
+"touching them."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:167
+msgid ""
+"Unwelcome sexual attention: this includes sexualized comments or jokes, "
+"inappropriate touching, groping, and unwelcome sexual advances."
+msgstr ""
+"Unwelcome sexual attention: this includes sexualized comments or jokes, "
+"inappropriate touching, groping, and unwelcome sexual advances."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:169
+msgid "Deliberate intimidation, stalking or following (online or in person)."
+msgstr "Deliberate intimidation, stalking or following (online or in person)."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:172
+msgid ""
+"Deliberately undermining the spirit of this code while following the letter."
+msgstr ""
+"Deliberately undermining the spirit of this code while following the letter."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:175
+msgid ""
+"Sustained disruption of any community events, including talks, "
+"presentations, and online conversations."
+msgstr ""
+"Sustained disruption of any community events, including talks, "
+"presentations, and online conversations."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:177
+msgid "Deliberately pushing against someone's stated boundaries."
+msgstr "Deliberately pushing against someone's stated boundaries."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:179
+msgid "Advocating for, or encouraging, any of the above behavior."
+msgstr "Advocating for, or encouraging, any of the above behavior."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:182
+#, no-wrap
+msgid ""
+"4. Unacceptable behavior has consequences\n"
+"============================================================\n"
+msgstr ""
+"4. Unacceptable behavior has consequences\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:188
+msgid ""
+"We will not tolerate unacceptable behavior from any community member. We "
+"will not make exceptions for sponsors and those with decision-making "
+"authority. People in formal or informal leadership roles must model the "
+"highest standards of behavior."
+msgstr ""
+"We will not tolerate unacceptable behavior from any community member. We "
+"will not make exceptions for sponsors and those with decision-making "
+"authority. People in formal or informal leadership roles must model the "
+"highest standards of behavior."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:192
+msgid ""
+"Anyone asked by another community member to stop unacceptable behavior is "
+"expected to comply immediately. Please don't step in on someone else's "
+"behalf without their consent."
+msgstr ""
+"Anyone asked by another community member to stop unacceptable behavior is "
+"expected to comply immediately. Please don't step in on someone else's "
+"behalf without their consent."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:195
+#, no-wrap
+msgid ""
+"5. Where to go for help\n"
+"============================================================\n"
+msgstr ""
+"5. Where to go for help\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:201
+msgid ""
+"The Community Council is an elected body of Tor Core Contributors who can "
+"assist with intra-community conflict resolution. Community Council policies "
+"and information can be found on the Community Council wiki [1]. You can "
+"contact the whole Community council:"
+msgstr ""
+"The Community Council is an elected body of Tor Core Contributors who can "
+"assist with intra-community conflict resolution. Community Council policies "
+"and information can be found on the Community Council wiki [1]. You can "
+"contact the whole Community council:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:203
+msgid "if you have questions or concerns about the code of conduct, or"
+msgstr "if you have questions or concerns about the code of conduct, or"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:205
+msgid "if you feel that you have witnessed a code of conduct violation"
+msgstr "if you feel that you have witnessed a code of conduct violation"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:212
+msgid ""
+"However, if you feel that there is a conflict of interest with any council "
+"member, you may contact members individually. Council members' GPG keys are "
+"listed on the Community Council wiki. If there is a conflict of interest, "
+"the affected council member will recuse themselves. They will not be "
+"involved in any discussion or documentation of the incident. More about the "
+"Community Council can be found in the guidelines [2]."
+msgstr ""
+"However, if you feel that there is a conflict of interest with any council "
+"member, you may contact members individually. Council members' GPG keys are "
+"listed on the Community Council wiki. If there is a conflict of interest, "
+"the affected council member will recuse themselves. They will not be "
+"involved in any discussion or documentation of the incident. More about the "
+"Community Council can be found in the guidelines [2]."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:215
+#, no-wrap
+msgid ""
+"6. What to do if you witness unacceptable behavior\n"
+"============================================================\n"
+msgstr ""
+"6. What to do if you witness unacceptable behavior\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:230
+msgid ""
+"If you are subject to or witness unacceptable behavior, or have any other "
+"concerns, please notify the Community Council as soon as possible. You can "
+"contact the community council in person, or at tor-community-"
+"council(a)lists.torproject.org. Current councilmembers are listed on the wiki "
+"[1]. The Community Council's incident response will vary on a case-by-case "
+"basis. The council will make every effort to respond to the incident "
+"immediately. The council will prioritize the safety of the person who has "
+"been harmed, or is at risk of harm. Person(s) who have been harmed or are at"
+" risk of harm can withdraw the incident report at any time. We will never do"
+" anything without the consent of the person who has been harmed or is at "
+"risk of harm, except in situations where there is a threat of imminent "
+"danger or harm to anyone. More information about the Community Council's "
+"incident reporting and response policies can be found on their wiki [1]."
+msgstr ""
+"If you are subject to or witness unacceptable behavior, or have any other "
+"concerns, please notify the Community Council as soon as possible. You can "
+"contact the community council in person, or at tor-community-"
+"council(a)lists.torproject.org. Current councilmembers are listed on the wiki "
+"[1]. The Community Council's incident response will vary on a case-by-case "
+"basis. The council will make every effort to respond to the incident "
+"immediately. The council will prioritize the safety of the person who has "
+"been harmed, or is at risk of harm. Person(s) who have been harmed or are at"
+" risk of harm can withdraw the incident report at any time. We will never do"
+" anything without the consent of the person who has been harmed or is at "
+"risk of harm, except in situations where there is a threat of imminent "
+"danger or harm to anyone. More information about the Community Council's "
+"incident reporting and response policies can be found on their wiki [1]."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:233
+#, no-wrap
+msgid ""
+"7. What the person reporting a violation can expect\n"
+"============================================================\n"
+msgstr ""
+"7. What the person reporting a violation can expect\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:242
+msgid ""
+"The Community Council prioritizes the safety and well-being of any person "
+"who feels that they have been harmed or may be in danger of being harmed. "
+"Anyone reporting an issue to the Community Council can expect that their "
+"report will be taken seriously. Initial reports can be taken in written or "
+"verbal form. If the incident does not require an immediate resolution, then "
+"a written report can be shared with the Community Council in an encrypted "
+"format. The next steps in an incident response will vary on a case-by-case "
+"basis."
+msgstr ""
+"The Community Council prioritizes the safety and well-being of any person "
+"who feels that they have been harmed or may be in danger of being harmed. "
+"Anyone reporting an issue to the Community Council can expect that their "
+"report will be taken seriously. Initial reports can be taken in written or "
+"verbal form. If the incident does not require an immediate resolution, then "
+"a written report can be shared with the Community Council in an encrypted "
+"format. The next steps in an incident response will vary on a case-by-case "
+"basis."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:245
+#, no-wrap
+msgid ""
+"8. How the Community Council responds to incidents\n"
+"============================================================\n"
+msgstr ""
+"8. How the Community Council responds to incidents\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:252
+msgid ""
+"If a community member engages in unacceptable behavior, the Community "
+"Council may take any action they deem appropriate, including but not limited"
+" to a warning, informal mediation, temporary ban or permanent expulsion from"
+" the community. Any actions and decisions by the Community Council may be "
+"appealed by following the appeals process in the Community Council "
+"Guidelines [1]."
+msgstr ""
+"If a community member engages in unacceptable behavior, the Community "
+"Council may take any action they deem appropriate, including but not limited"
+" to a warning, informal mediation, temporary ban or permanent expulsion from"
+" the community. Any actions and decisions by the Community Council may be "
+"appealed by following the appeals process in the Community Council "
+"Guidelines [1]."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:255
+#, no-wrap
+msgid ""
+"9. Scope of this document\n"
+"============================================================\n"
+msgstr ""
+"9. Scope of this document\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:258
+msgid "This code of conduct covers all community participants:"
+msgstr "This code of conduct covers all community participants:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:260
+msgid "paid and unpaid contributors"
+msgstr "paid and unpaid contributors"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:262
+msgid "sponsors"
+msgstr "sponsors"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:264
+msgid "other guests"
+msgstr "other guests"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:266
+msgid "when interacting:"
+msgstr "when interacting:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:268
+msgid "in all online and in-person community venues"
+msgstr "in all online and in-person community venues"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:270
+msgid "in one-on-one communications that relate to community work"
+msgstr "in one-on-one communications that relate to community work"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:277
+msgid ""
+"This code of conduct and its related procedures also applies to unacceptable"
+" behavior occurring outside the scope of community activities when such "
+"behavior has the potential to adversely affect the safety and well-being of "
+"community members. As members of the Tor community, we support and follow "
+"this Code while we are working on Tor, and take care not to undermine it in "
+"the rest of our time."
+msgstr ""
+"This code of conduct and its related procedures also applies to unacceptable"
+" behavior occurring outside the scope of community activities when such "
+"behavior has the potential to adversely affect the safety and well-being of "
+"community members. As members of the Tor community, we support and follow "
+"this Code while we are working on Tor, and take care not to undermine it in "
+"the rest of our time."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:280
+#, no-wrap
+msgid ""
+"10. License and attribution\n"
+"============================================================\n"
+msgstr ""
+"10. License and attribution\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:284
+msgid ""
+"This code of conduct is shared under a Creative Commons CC-BY-SA 4.0 "
+"International license."
+msgstr ""
+"This code of conduct is shared under a Creative Commons CC-BY-SA 4.0 "
+"International license."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:287
+msgid ""
+"This code of conduct uses some language and framing from the Citizen Code of"
+" Conduct, which is shared under a CC-BY-SA license: citizencodeofconduct.org"
+msgstr ""
+"This code of conduct uses some language and framing from the Citizen Code of"
+" Conduct, which is shared under a CC-BY-SA license: citizencodeofconduct.org"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:289
+msgid ""
+"[1] https://trac.torproject.org/projects/tor/wiki/org/CommunityCouncil [2] "
+"https://gitweb.torproject.org/community/policies.git/tree/community_council…"
+msgstr ""
+"[1] https://trac.torproject.org/projects/tor/wiki/org/CommunityCouncil [2] "
+"https://gitweb.torproject.org/community/policies.git/tree/community_council…"
1
0

[translation/tails-openpgp-applet_completed] https://gitweb.torproject.org/translation.git/commit/?h=tails-openpgp-applet_completed
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit f94a72da28c2dab2fe60dda037f8907554e98c59
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 18:19:34 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tails-openpgp-apple…
---
da/openpgp-applet.pot | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/da/openpgp-applet.pot b/da/openpgp-applet.pot
index 8641b3f331..35be176cc6 100644
--- a/da/openpgp-applet.pot
+++ b/da/openpgp-applet.pot
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the OpenPGP_Applet package.
#
# Translators:
-# scootergrisen, 2017-2019
+# scootergrisen, 2017-2020
# 7110bbed2db4fadc642a4cd0e91bb1b9, 2015
msgid ""
msgstr ""
"Project-Id-Version: Tor Project\n"
"Report-Msgid-Bugs-To: tails(a)boum.org\n"
"POT-Creation-Date: 2017-08-05 15:07-0400\n"
-"PO-Revision-Date: 2019-03-08 16:43+0000\n"
+"PO-Revision-Date: 2020-04-30 18:12+0000\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish (http://www.transifex.com/otf/torproject/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -113,11 +113,11 @@ msgstr "Skjul modtagere"
msgid ""
"Hide the user IDs of all recipients of an encrypted message. Otherwise "
"anyone that sees the encrypted message can see who the recipients are."
-msgstr "Skjul bruger-id'erne på alle modtagere af en krypteret besked. Ellers kan alle der ser den krypterede besked se hvem modtagerne er."
+msgstr "Skjul alle modtagernes bruger-id'er for en krypteret meddelelse. Ellers kan alle der ser den krypterede meddelelse se hvem modtagerne er."
#: bin/openpgp-applet:545
msgid "Sign message as:"
-msgstr "Underskriv beskeden som:"
+msgstr "Underskriv meddelelsen som:"
#: bin/openpgp-applet:549
msgid "Choose keys"
@@ -125,19 +125,19 @@ msgstr "Vælg nøgler"
#: bin/openpgp-applet:589
msgid "Do you trust these keys?"
-msgstr "Stoler du på nøglerne?"
+msgstr "Har du tillid til nøglerne?"
#: bin/openpgp-applet:592
msgid "The following selected key is not fully trusted:"
msgid_plural "The following selected keys are not fully trusted:"
msgstr[0] "Der stoles ikke fuldt på følgende nøgle:"
-msgstr[1] "Der stoles ikke fuldt på følgende nøgler:"
+msgstr[1] "Der er ikke fuld tillid til følgende nøgler:"
#: bin/openpgp-applet:610
msgid "Do you trust this key enough to use it anyway?"
msgid_plural "Do you trust these keys enough to use them anyway?"
msgstr[0] "Stoler du tilstrækkeligt på nøglen til at bruge den alligevel?"
-msgstr[1] "Stoler du tilstrækkeligt på nøglerne til at bruge dem alligevel?"
+msgstr[1] "Har du tillid nok til nøglerne til at bruge dem alligevel?"
#: bin/openpgp-applet:623
msgid "No keys selected"
@@ -147,7 +147,7 @@ msgstr "Der er ikke valgt nogen nøgler"
msgid ""
"You must select a private key to sign the message, or some public keys to "
"encrypt the message, or both."
-msgstr "Du skal vælge en privat nøgle for at underskrive beskeden, eller nogle offentlige nøgler til at kryptere beskeden, eller begge."
+msgstr "Du skal vælge en privat nøgle for at underskrive meddelelsen, eller nogle offentlige nøgler til at kryptere meddelelsen, eller begge."
#: bin/openpgp-applet:653
msgid "No keys available"
@@ -156,7 +156,7 @@ msgstr "Der er ikke nogen tilgængelige nøgler"
#: bin/openpgp-applet:655
msgid ""
"You need a private key to sign messages or a public key to encrypt messages."
-msgstr "Du skal bruge en privat nøgle til at underskrive beskeder eller en offentlig nøgle til at kryptere dem."
+msgstr "Du skal bruge en privat nøgle til at underskrive meddelelser eller en offentlig nøgle til at kryptere meddelelser."
#: bin/openpgp-applet:783
msgid "GnuPG error"
@@ -176,4 +176,4 @@ msgstr "Output fra GnuPG:"
#: bin/openpgp-applet:885
msgid "Other messages provided by GnuPG:"
-msgstr "Andre beskeder som leveres af GnuPG:"
+msgstr "Andre meddelelser fra GnuPG:"
1
0

[translation/tails-openpgp-applet] https://gitweb.torproject.org/translation.git/commit/?h=tails-openpgp-applet
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit 329c17378e0992257c24dae554504cf3699a643b
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 18:19:28 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tails-openpgp-applet
---
da/openpgp-applet.pot | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/da/openpgp-applet.pot b/da/openpgp-applet.pot
index 8641b3f331..35be176cc6 100644
--- a/da/openpgp-applet.pot
+++ b/da/openpgp-applet.pot
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the OpenPGP_Applet package.
#
# Translators:
-# scootergrisen, 2017-2019
+# scootergrisen, 2017-2020
# 7110bbed2db4fadc642a4cd0e91bb1b9, 2015
msgid ""
msgstr ""
"Project-Id-Version: Tor Project\n"
"Report-Msgid-Bugs-To: tails(a)boum.org\n"
"POT-Creation-Date: 2017-08-05 15:07-0400\n"
-"PO-Revision-Date: 2019-03-08 16:43+0000\n"
+"PO-Revision-Date: 2020-04-30 18:12+0000\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish (http://www.transifex.com/otf/torproject/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -113,11 +113,11 @@ msgstr "Skjul modtagere"
msgid ""
"Hide the user IDs of all recipients of an encrypted message. Otherwise "
"anyone that sees the encrypted message can see who the recipients are."
-msgstr "Skjul bruger-id'erne på alle modtagere af en krypteret besked. Ellers kan alle der ser den krypterede besked se hvem modtagerne er."
+msgstr "Skjul alle modtagernes bruger-id'er for en krypteret meddelelse. Ellers kan alle der ser den krypterede meddelelse se hvem modtagerne er."
#: bin/openpgp-applet:545
msgid "Sign message as:"
-msgstr "Underskriv beskeden som:"
+msgstr "Underskriv meddelelsen som:"
#: bin/openpgp-applet:549
msgid "Choose keys"
@@ -125,19 +125,19 @@ msgstr "Vælg nøgler"
#: bin/openpgp-applet:589
msgid "Do you trust these keys?"
-msgstr "Stoler du på nøglerne?"
+msgstr "Har du tillid til nøglerne?"
#: bin/openpgp-applet:592
msgid "The following selected key is not fully trusted:"
msgid_plural "The following selected keys are not fully trusted:"
msgstr[0] "Der stoles ikke fuldt på følgende nøgle:"
-msgstr[1] "Der stoles ikke fuldt på følgende nøgler:"
+msgstr[1] "Der er ikke fuld tillid til følgende nøgler:"
#: bin/openpgp-applet:610
msgid "Do you trust this key enough to use it anyway?"
msgid_plural "Do you trust these keys enough to use them anyway?"
msgstr[0] "Stoler du tilstrækkeligt på nøglen til at bruge den alligevel?"
-msgstr[1] "Stoler du tilstrækkeligt på nøglerne til at bruge dem alligevel?"
+msgstr[1] "Har du tillid nok til nøglerne til at bruge dem alligevel?"
#: bin/openpgp-applet:623
msgid "No keys selected"
@@ -147,7 +147,7 @@ msgstr "Der er ikke valgt nogen nøgler"
msgid ""
"You must select a private key to sign the message, or some public keys to "
"encrypt the message, or both."
-msgstr "Du skal vælge en privat nøgle for at underskrive beskeden, eller nogle offentlige nøgler til at kryptere beskeden, eller begge."
+msgstr "Du skal vælge en privat nøgle for at underskrive meddelelsen, eller nogle offentlige nøgler til at kryptere meddelelsen, eller begge."
#: bin/openpgp-applet:653
msgid "No keys available"
@@ -156,7 +156,7 @@ msgstr "Der er ikke nogen tilgængelige nøgler"
#: bin/openpgp-applet:655
msgid ""
"You need a private key to sign messages or a public key to encrypt messages."
-msgstr "Du skal bruge en privat nøgle til at underskrive beskeder eller en offentlig nøgle til at kryptere dem."
+msgstr "Du skal bruge en privat nøgle til at underskrive meddelelser eller en offentlig nøgle til at kryptere meddelelser."
#: bin/openpgp-applet:783
msgid "GnuPG error"
@@ -176,4 +176,4 @@ msgstr "Output fra GnuPG:"
#: bin/openpgp-applet:885
msgid "Other messages provided by GnuPG:"
-msgstr "Andre beskeder som leveres af GnuPG:"
+msgstr "Andre meddelelser fra GnuPG:"
1
0

[translation/tor-launcher-properties_completed] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-properties_completed
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit 48f481d016a64f788d6808fb2eb0d438672c5103
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 17:52:34 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-proper…
---
da/torlauncher.properties | 160 +++++++++++++++++++++++-----------------------
1 file changed, 80 insertions(+), 80 deletions(-)
diff --git a/da/torlauncher.properties b/da/torlauncher.properties
index e77f00e09f..ad2a160d46 100644
--- a/da/torlauncher.properties
+++ b/da/torlauncher.properties
@@ -1,95 +1,95 @@
### Copyright (c) 2020, The Tor Project, Inc.
### See LICENSE for licensing information.
-# torlauncher.error_title=Tor Launcher
+torlauncher.error_title=Tor-opstarter
-# torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start.
-# torlauncher.tor_exited=Tor unexpectedly exited. This might be due to a bug in Tor itself, another program on your system, or faulty hardware. Until you restart Tor, the Tor Browser will not able to reach any websites. If the problem persists, please send a copy of your Tor Log to the support team.
-# torlauncher.tor_exited2=Restarting Tor will not close your browser tabs.
-# torlauncher.tor_controlconn_failed=Could not connect to Tor control port.
-# torlauncher.tor_failed_to_start=Tor failed to start.
-# torlauncher.tor_control_failed=Failed to take control of Tor.
-# torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection.
-# torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S).
+torlauncher.tor_exited_during_startup=Tor afsluttede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller fejl i hardware. Tor Browser starter ikke før du løser det underliggende problem og genstarter Tor.
+torlauncher.tor_exited=Tor afsluttede uventet. Det kan skyldes en fejl i selve Tor, et andet program i dit system eller fejl i hardware. Tor Browser vil ikke være i stand til at nå nogen websteder før du genstarter Tor. Send en kopi af din Tor-log til supportteamet hvis problemet fortsætter.
+torlauncher.tor_exited2=Hvis du genstarter Tor, så lukkes fanebladene i din browser.
+torlauncher.tor_controlconn_failed=Kunne ikke oprette forbindelse til Tor-kontrolport.
+torlauncher.tor_failed_to_start=Tor kunne ikke starte.
+torlauncher.tor_control_failed=Det lykkedes ikke at tage kontrol over Tor.
+torlauncher.tor_bootstrap_failed=Tor kunne ikke etablere en forbindelse til Tor-netværket.
+torlauncher.tor_bootstrap_failed_details=%1$S mislykkedes (%2$S).
-# torlauncher.unable_to_start_tor=Unable to start Tor.\n\n%S
-# torlauncher.tor_missing=The Tor executable is missing.
-# torlauncher.torrc_missing=The torrc file is missing and could not be created.
-# torlauncher.datadir_missing=The Tor data directory does not exist and could not be created.
-# torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created.
-# torlauncher.password_hash_missing=Failed to get hashed password.
+torlauncher.unable_to_start_tor=Kan ikke starte Tor.\n\n%S
+torlauncher.tor_missing=Tor-kørbaren mangler.
+torlauncher.torrc_missing=torrc-filen mangler og kunne ikke oprettes.
+torlauncher.datadir_missing=Tor-datamappen findes ikke og kunne ikke oprettes.
+torlauncher.onionauthdir_missing=Tor-onionautentifikationsmappen findes ikke og kunne ikke oprettes.
+torlauncher.password_hash_missing=Kunne ikke hente hashed adgangskode.
-# torlauncher.failed_to_get_settings=Unable to retrieve Tor settings.\n\n%S
-# torlauncher.failed_to_save_settings=Unable to save Tor settings.\n\n%S
-# torlauncher.ensure_tor_is_running=Please ensure that Tor is running.
+torlauncher.failed_to_get_settings=Kan ikke hente Tor-indstillingerne..\n\n%S
+torlauncher.failed_to_save_settings=Kan ikke gemme Tor-indstillingerne.\n\n%S
+torlauncher.ensure_tor_is_running=Sørg venligst for at Tor kører.
-# torlauncher.error_proxy_addr_missing=You must specify both an IP address or hostname and a port number to configure Tor to use a proxy to access the Internet.
-# torlauncher.error_proxy_type_missing=You must select the proxy type.
-# torlauncher.error_bridges_missing=You must specify one or more bridges.
-# torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges.
-# torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
-# torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
+torlauncher.error_proxy_addr_missing=Du skal både angive en IP-adresse, eller værtsnavn og et portnummer, for at konfigurere Tor til at bruge en proxy til at få adgang til internettet.
+torlauncher.error_proxy_type_missing=Du skal vælge proxytypen.
+torlauncher.error_bridges_missing=Du skal angive en eller flere broer.
+torlauncher.error_default_bridges_type_missing=Du skal vælge en transporttype til de tildelte broer.
+torlauncher.error_bridgedb_bridges_missing=Anmod venligst om en bro.
+torlauncher.error_bridge_bad_default_type=Ingen tildelte broer med transporttypen %S er tilgængelige. Juster venligst dine indstillinger.
-# torlauncher.bridge_suffix.meek-amazon=(works in China)
-# torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(virker i Kina)
+torlauncher.bridge_suffix.meek-azure=(virker i Kina)
-# torlauncher.request_a_bridge=Request a Bridge…
-# torlauncher.request_a_new_bridge=Request a New Bridge…
-# torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
-# torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
-# torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
-# torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
-# torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
-# torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
+torlauncher.request_a_bridge=Anmod om en bro…
+torlauncher.request_a_new_bridge=Anmod om en ny bro…
+torlauncher.contacting_bridgedb=Kontakter BridgeDB. Vent venligst.
+torlauncher.captcha_prompt=Løs CAPTCHA'en for at anmode om en bro.
+torlauncher.bad_captcha_solution=Løsningen er ikke korrekt. Prøv venligst igen.
+torlauncher.unable_to_get_bridge=Kan ikke hente en bro fra BridgeDB.\n\n%S
+torlauncher.no_meek=Browseren er ikke konfigureret til meek, som behøves for at hente broer.
+torlauncher.no_bridges_available=Der er på nuværende tidspunkt ingen broer tilgængelige. Beklager.
-# torlauncher.connect=Connect
-# torlauncher.restart_tor=Restart Tor
-# torlauncher.quit=Quit
-# torlauncher.quit_win=Exit
-# torlauncher.done=Done
+torlauncher.connect=Opret forbindelse
+torlauncher.restart_tor=Genstart Tor
+torlauncher.quit=Afslut
+torlauncher.quit_win=Afslut
+torlauncher.done=Færdig
-# torlauncher.forAssistance=For assistance, contact %S
-# torlauncher.forAssistance2=For assistance, visit %S
+torlauncher.forAssistance=Få hjælp ved at kontakte %S
+torlauncher.forAssistance2=Få hjælp ved at besøge %S
-# torlauncher.copiedNLogMessages=Copy complete. %S Tor log messages are ready to be pasted into a text editor or an email message.
+torlauncher.copiedNLogMessages=Kopieringen gennemført. %S logmeddelelser er klar til at blive indsæt i en tekstredigering eller en e-mailmeddelelse.
-# torlauncher.bootstrapStatus.starting=Starting
-# torlauncher.bootstrapStatus.conn_pt=Connecting to bridge
-# torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge
-# torlauncher.bootstrapStatus.conn_proxy=Connecting to proxy
-# torlauncher.bootstrapStatus.conn_done_proxy=Connected to proxy
-# torlauncher.bootstrapStatus.conn=Connecting to a Tor relay
-# torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay
-# torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay
-# torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay
-# torlauncher.bootstrapStatus.onehop_create=Establishing an encrypted directory connection
-# torlauncher.bootstrapStatus.requesting_status=Retrieving network status
-# torlauncher.bootstrapStatus.loading_status=Loading network status
-# torlauncher.bootstrapStatus.loading_keys=Loading authority certificates
-# torlauncher.bootstrapStatus.requesting_descriptors=Requesting relay information
-# torlauncher.bootstrapStatus.loading_descriptors=Loading relay information
-# torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information
-# torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge
-# torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge
-# torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy
-# torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy
-# torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay
-# torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay
-# torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay
-# torlauncher.bootstrapStatus.ap_handshake_done=Building circuits: Finished negotiating with a Tor relay
-# torlauncher.bootstrapStatus.circuit_create=Building circuits: Establishing a Tor circuit
-# torlauncher.bootstrapStatus.done=Connected to the Tor network!
+torlauncher.bootstrapStatus.starting=Starter
+torlauncher.bootstrapStatus.conn_pt=Opretter forbindelse til bro
+torlauncher.bootstrapStatus.conn_done_pt=Forbundet til bro
+torlauncher.bootstrapStatus.conn_proxy=Opretter forbindelse til proxy
+torlauncher.bootstrapStatus.conn_done_proxy=Forbundet til proxy
+torlauncher.bootstrapStatus.conn=Opretter forbindelse til et Tor-relæ
+torlauncher.bootstrapStatus.conn_done=Forbundet til et Tor-relæ
+torlauncher.bootstrapStatus.handshake=Forhandler med et Tor-relæ
+torlauncher.bootstrapStatus.handshake_done=Færdig med at forhandle med et Tor-relæ
+torlauncher.bootstrapStatus.onehop_create=Etablerer en forbindelse for krypteret mappe
+torlauncher.bootstrapStatus.requesting_status=Henter netværksstatus
+torlauncher.bootstrapStatus.loading_status=Indlæser netværksstatus
+torlauncher.bootstrapStatus.loading_keys=Indlæser nøglecentercertifikater
+torlauncher.bootstrapStatus.requesting_descriptors=Anmoder om relæinformation
+torlauncher.bootstrapStatus.loading_descriptors=Indlæser relæinformation
+torlauncher.bootstrapStatus.enough_dirinfo=Færdig med at indlæse relæinformation
+torlauncher.bootstrapStatus.ap_conn_pt=Bygger kredsløb: Opretter forbindelse til bro
+torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kredsløb: Forbundet til bro
+torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kredsløb: Opretter forbindelse til proxy
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kredsløb: Forbundet til proxy
+torlauncher.bootstrapStatus.ap_conn=Bygger kredsløb: Opretter forbindelse til et Tor-relæ
+torlauncher.bootstrapStatus.ap_conn_done=Bygger kredsløb: Forbundet til et Tor-relæ
+torlauncher.bootstrapStatus.ap_handshake=Bygger kredsløb: Forhandler med et Tor-relæ
+torlauncher.bootstrapStatus.ap_handshake_done=Bygger kredsløb: Færdig med at forhandle med et Tor-relæ
+torlauncher.bootstrapStatus.circuit_create=Bygger kredsløb: Etablerer et Tor-kredsløb
+torlauncher.bootstrapStatus.done=Forbundet til Tor-netværket!
-# torlauncher.bootstrapWarning.done=done
-# torlauncher.bootstrapWarning.connectrefused=connection refused
-# torlauncher.bootstrapWarning.misc=miscellaneous
-# torlauncher.bootstrapWarning.resourcelimit=insufficient resources
-# torlauncher.bootstrapWarning.identity=identity mismatch
-# torlauncher.bootstrapWarning.timeout=connection timeout
-# torlauncher.bootstrapWarning.noroute=no route to host
-# torlauncher.bootstrapWarning.ioerror=read/write error
-# torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
+torlauncher.bootstrapWarning.done=færdig
+torlauncher.bootstrapWarning.connectrefused=forbindelse afvist
+torlauncher.bootstrapWarning.misc=diverse
+torlauncher.bootstrapWarning.resourcelimit=utilstrækkelige ressourcer
+torlauncher.bootstrapWarning.identity=identitet matcher ikke
+torlauncher.bootstrapWarning.timeout=forbindelse fik timeout
+torlauncher.bootstrapWarning.noroute=ingen rute til vært
+torlauncher.bootstrapWarning.ioerror=fejl ved læse/skrive
+torlauncher.bootstrapWarning.pt_missing=mangler udskiftelig transport
-# torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
-# torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
-# torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Forbindelsen til serveren blev tabt.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til serveren.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til proxyen.
1
0

[translation/tor-launcher-properties] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-properties
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit 8604ad57de74e6df8bcd18aa79e305fcddb7d486
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 17:52:28 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-proper…
---
da/torlauncher.properties | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/da/torlauncher.properties b/da/torlauncher.properties
index 4bfed5ee68..ad2a160d46 100644
--- a/da/torlauncher.properties
+++ b/da/torlauncher.properties
@@ -21,17 +21,17 @@ torlauncher.password_hash_missing=Kunne ikke hente hashed adgangskode.
torlauncher.failed_to_get_settings=Kan ikke hente Tor-indstillingerne..\n\n%S
torlauncher.failed_to_save_settings=Kan ikke gemme Tor-indstillingerne.\n\n%S
-torlauncher.ensure_tor_is_running=Kontroller venligst at Tor kører.
+torlauncher.ensure_tor_is_running=Sørg venligst for at Tor kører.
-torlauncher.error_proxy_addr_missing=Du skal angive både IP-adresse eller værtsnavn og en port, for at konfigurere Tor til at bruge en proxy som forbindelse til internettet.
-torlauncher.error_proxy_type_missing=Du skal vælge proxytypen:
+torlauncher.error_proxy_addr_missing=Du skal både angive en IP-adresse, eller værtsnavn og et portnummer, for at konfigurere Tor til at bruge en proxy til at få adgang til internettet.
+torlauncher.error_proxy_type_missing=Du skal vælge proxytypen.
torlauncher.error_bridges_missing=Du skal angive en eller flere broer.
-torlauncher.error_default_bridges_type_missing=Du skal vælge en transporttype for de tildelte broer.
+torlauncher.error_default_bridges_type_missing=Du skal vælge en transporttype til de tildelte broer.
torlauncher.error_bridgedb_bridges_missing=Anmod venligst om en bro.
-torlauncher.error_bridge_bad_default_type=Ingen tildelte broer med transporttypen %S er tilgængelige. Justér venligst dine indstillinger.
+torlauncher.error_bridge_bad_default_type=Ingen tildelte broer med transporttypen %S er tilgængelige. Juster venligst dine indstillinger.
-torlauncher.bridge_suffix.meek-amazon=(virker i kina)
-torlauncher.bridge_suffix.meek-azure=(virker i kina)
+torlauncher.bridge_suffix.meek-amazon=(virker i Kina)
+torlauncher.bridge_suffix.meek-azure=(virker i Kina)
torlauncher.request_a_bridge=Anmod om en bro…
torlauncher.request_a_new_bridge=Anmod om en ny bro…
@@ -40,7 +40,7 @@ torlauncher.captcha_prompt=Løs CAPTCHA'en for at anmode om en bro.
torlauncher.bad_captcha_solution=Løsningen er ikke korrekt. Prøv venligst igen.
torlauncher.unable_to_get_bridge=Kan ikke hente en bro fra BridgeDB.\n\n%S
torlauncher.no_meek=Browseren er ikke konfigureret til meek, som behøves for at hente broer.
-torlauncher.no_bridges_available=Der er ingen broer tilgængelige på nuværende tidspunkt. Beklager.
+torlauncher.no_bridges_available=Der er på nuværende tidspunkt ingen broer tilgængelige. Beklager.
torlauncher.connect=Opret forbindelse
torlauncher.restart_tor=Genstart Tor
@@ -48,10 +48,10 @@ torlauncher.quit=Afslut
torlauncher.quit_win=Afslut
torlauncher.done=Færdig
-torlauncher.forAssistance=For at få hjælp, kontakt %S
-torlauncher.forAssistance2=For at få hjælp, besøg %S
+torlauncher.forAssistance=Få hjælp ved at kontakte %S
+torlauncher.forAssistance2=Få hjælp ved at besøge %S
-torlauncher.copiedNLogMessages=Kopieringen er gennemført. %S logbeskeder er klar til at blive indsæt i en tekstredigering eller en e-mail.
+torlauncher.copiedNLogMessages=Kopieringen gennemført. %S logmeddelelser er klar til at blive indsæt i en tekstredigering eller en e-mailmeddelelse.
torlauncher.bootstrapStatus.starting=Starter
torlauncher.bootstrapStatus.conn_pt=Opretter forbindelse til bro
@@ -62,19 +62,19 @@ torlauncher.bootstrapStatus.conn=Opretter forbindelse til et Tor-relæ
torlauncher.bootstrapStatus.conn_done=Forbundet til et Tor-relæ
torlauncher.bootstrapStatus.handshake=Forhandler med et Tor-relæ
torlauncher.bootstrapStatus.handshake_done=Færdig med at forhandle med et Tor-relæ
-torlauncher.bootstrapStatus.onehop_create=Etablerer en krypteret mappe forbindelse
+torlauncher.bootstrapStatus.onehop_create=Etablerer en forbindelse for krypteret mappe
torlauncher.bootstrapStatus.requesting_status=Henter netværksstatus
torlauncher.bootstrapStatus.loading_status=Indlæser netværksstatus
torlauncher.bootstrapStatus.loading_keys=Indlæser nøglecentercertifikater
-torlauncher.bootstrapStatus.requesting_descriptors=Anmoder om relæ information
+torlauncher.bootstrapStatus.requesting_descriptors=Anmoder om relæinformation
torlauncher.bootstrapStatus.loading_descriptors=Indlæser relæinformation
torlauncher.bootstrapStatus.enough_dirinfo=Færdig med at indlæse relæinformation
torlauncher.bootstrapStatus.ap_conn_pt=Bygger kredsløb: Opretter forbindelse til bro
torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kredsløb: Forbundet til bro
torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kredsløb: Opretter forbindelse til proxy
torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kredsløb: Forbundet til proxy
-torlauncher.bootstrapStatus.ap_conn=Bygger kredsløb: Opretter forbindelse til Tor-relæ
-torlauncher.bootstrapStatus.ap_conn_done=Bygger kredsløb: Forbundet til Tor-relæ
+torlauncher.bootstrapStatus.ap_conn=Bygger kredsløb: Opretter forbindelse til et Tor-relæ
+torlauncher.bootstrapStatus.ap_conn_done=Bygger kredsløb: Forbundet til et Tor-relæ
torlauncher.bootstrapStatus.ap_handshake=Bygger kredsløb: Forhandler med et Tor-relæ
torlauncher.bootstrapStatus.ap_handshake_done=Bygger kredsløb: Færdig med at forhandle med et Tor-relæ
torlauncher.bootstrapStatus.circuit_create=Bygger kredsløb: Etablerer et Tor-kredsløb
@@ -85,11 +85,11 @@ torlauncher.bootstrapWarning.connectrefused=forbindelse afvist
torlauncher.bootstrapWarning.misc=diverse
torlauncher.bootstrapWarning.resourcelimit=utilstrækkelige ressourcer
torlauncher.bootstrapWarning.identity=identitet matcher ikke
-torlauncher.bootstrapWarning.timeout=forbindelse timeout
+torlauncher.bootstrapWarning.timeout=forbindelse fik timeout
torlauncher.bootstrapWarning.noroute=ingen rute til vært
-torlauncher.bootstrapWarning.ioerror=læse/skrive fejl
+torlauncher.bootstrapWarning.ioerror=fejl ved læse/skrive
torlauncher.bootstrapWarning.pt_missing=mangler udskiftelig transport
-torlauncher.nsresult.NS_ERROR_NET_RESET=Mistede forbindelsen til serveren.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Forbindelsen til serveren blev tabt.
torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til serveren.
torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til proxyen.
1
0

[translation/tor-launcher-properties] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-properties
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit 6f518747f9033d4a166115f77abc067e997965b7
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 17:22:36 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-proper…
---
da/torlauncher.properties | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/da/torlauncher.properties b/da/torlauncher.properties
index d5925f46ba..4bfed5ee68 100644
--- a/da/torlauncher.properties
+++ b/da/torlauncher.properties
@@ -4,20 +4,20 @@
torlauncher.error_title=Tor-opstarter
torlauncher.tor_exited_during_startup=Tor afsluttede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller fejl i hardware. Tor Browser starter ikke før du løser det underliggende problem og genstarter Tor.
-torlauncher.tor_exited=Tor lukkede uventet. Dette kan skyldes en fejl i selve Tor, et andet program i dit system eller en hardware-fejl. Tor Browser vil ikke være i stand til at forbinde til noget som helst websted før du genstarter Tor. Send en kopi af din Tor-log til support-teamet hvis problemet fortsætter.
-torlauncher.tor_exited2=Fanebladene i din browser vil ikke blive lukket ved af at du genstarter Tor.
-torlauncher.tor_controlconn_failed=Kunne ikke oprette forbindelse til Tor kontrolporten.
+torlauncher.tor_exited=Tor afsluttede uventet. Det kan skyldes en fejl i selve Tor, et andet program i dit system eller fejl i hardware. Tor Browser vil ikke være i stand til at nå nogen websteder før du genstarter Tor. Send en kopi af din Tor-log til supportteamet hvis problemet fortsætter.
+torlauncher.tor_exited2=Hvis du genstarter Tor, så lukkes fanebladene i din browser.
+torlauncher.tor_controlconn_failed=Kunne ikke oprette forbindelse til Tor-kontrolport.
torlauncher.tor_failed_to_start=Tor kunne ikke starte.
torlauncher.tor_control_failed=Det lykkedes ikke at tage kontrol over Tor.
torlauncher.tor_bootstrap_failed=Tor kunne ikke etablere en forbindelse til Tor-netværket.
-torlauncher.tor_bootstrap_failed_details=%1$S fejlede (%2$S).
+torlauncher.tor_bootstrap_failed_details=%1$S mislykkedes (%2$S).
torlauncher.unable_to_start_tor=Kan ikke starte Tor.\n\n%S
-torlauncher.tor_missing=Kunne ikke finde Tor-programmet.
+torlauncher.tor_missing=Tor-kørbaren mangler.
torlauncher.torrc_missing=torrc-filen mangler og kunne ikke oprettes.
torlauncher.datadir_missing=Tor-datamappen findes ikke og kunne ikke oprettes.
torlauncher.onionauthdir_missing=Tor-onionautentifikationsmappen findes ikke og kunne ikke oprettes.
-torlauncher.password_hash_missing=Kunne ikke finde hash-værdi af adgangskode.
+torlauncher.password_hash_missing=Kunne ikke hente hashed adgangskode.
torlauncher.failed_to_get_settings=Kan ikke hente Tor-indstillingerne..\n\n%S
torlauncher.failed_to_save_settings=Kan ikke gemme Tor-indstillingerne.\n\n%S
1
0

[translation/tor-launcher-properties] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-properties
by translation@torproject.org 30 Apr '20
by translation@torproject.org 30 Apr '20
30 Apr '20
commit e1a07fc11d07736f7bcfbc17dd48646d89bc3f73
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Apr 30 16:52:47 2020 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-proper…
---
da/torlauncher.properties | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/da/torlauncher.properties b/da/torlauncher.properties
index 4d34908fc4..d5925f46ba 100644
--- a/da/torlauncher.properties
+++ b/da/torlauncher.properties
@@ -1,9 +1,9 @@
### Copyright (c) 2020, The Tor Project, Inc.
### See LICENSE for licensing information.
-torlauncher.error_title=Tor starter
+torlauncher.error_title=Tor-opstarter
-torlauncher.tor_exited_during_startup=Tor lukkede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller hardwarefejl. Tor Browser vil ikke starte, før du løser det underliggende problem og genstarter Tor.
+torlauncher.tor_exited_during_startup=Tor afsluttede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller fejl i hardware. Tor Browser starter ikke før du løser det underliggende problem og genstarter Tor.
torlauncher.tor_exited=Tor lukkede uventet. Dette kan skyldes en fejl i selve Tor, et andet program i dit system eller en hardware-fejl. Tor Browser vil ikke være i stand til at forbinde til noget som helst websted før du genstarter Tor. Send en kopi af din Tor-log til support-teamet hvis problemet fortsætter.
torlauncher.tor_exited2=Fanebladene i din browser vil ikke blive lukket ved af at du genstarter Tor.
torlauncher.tor_controlconn_failed=Kunne ikke oprette forbindelse til Tor kontrolporten.
1
0
commit 86b559a6beba49e226f8f85389df64e3afa751c6
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Apr 30 18:49:01 2020 +0200
Bump version to 1.15.0-dev.
---
CHANGELOG.md | 3 +++
build.xml | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8e58e7c..e1fc4c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# Changes in version 1.??.? - 2020-??-??
+
+
# Changes in version 1.15.0 - 2020-04-30
* Medium changes
diff --git a/build.xml b/build.xml
index 1e22fef..02e1564 100644
--- a/build.xml
+++ b/build.xml
@@ -9,7 +9,7 @@
<property name="javadoc-title" value="CollecTor API Documentation"/>
<property name="implementation-title" value="CollecTor" />
- <property name="release.version" value="1.15.0" />
+ <property name="release.version" value="1.15.0-dev" />
<property name="project-main-class" value="org.torproject.metrics.collector.Main" />
<property name="name" value="collector"/>
<property name="metricslibversion" value="2.12.1" />
1
0
commit 77d9429797594113d2876ef5c3600d8fa37caf46
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Tue Mar 31 09:18:17 2020 +0200
Simplify logging configuration.
Implements #33549.
---
CHANGELOG.md | 3 +
src/build | 2 +-
.../org/torproject/metrics/collector/Main.java | 4 +-
.../metrics/collector/cron/ShutdownHook.java | 7 +-
.../persist/BandwidthFilePersistence.java | 7 +-
.../collector/persist/DescriptorPersistence.java | 6 -
.../collector/persist/PersistenceUtils.java | 8 +-
.../metrics/collector/persist/VotePersistence.java | 7 +-
.../metrics/collector/sync/SyncManager.java | 21 +--
.../metrics/collector/sync/SyncPersistence.java | 11 +-
.../metrics/collector/webstats/LogFileMap.java | 7 +-
.../metrics/collector/webstats/LogMetadata.java | 6 +-
.../collector/webstats/SanitizeWeblogs.java | 33 ++--
.../collector/webstats/WebServerAccessLogLine.java | 4 +-
src/main/resources/logback.xml | 167 ---------------------
15 files changed, 70 insertions(+), 223 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5606180..c284d47 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changes in version 1.1?.? - 2020-0?-??
+ * Minor changes
+ - Simplify logging configuration.
+
# Changes in version 1.14.1 - 2020-01-16
diff --git a/src/build b/src/build
index 264e498..fd85646 160000
--- a/src/build
+++ b/src/build
@@ -1 +1 @@
-Subproject commit 264e498f54a20f7d299daaf2533d043f880e6a8b
+Subproject commit fd856466bcb260f53ef69a24c102d0e49d171cc3
diff --git a/src/main/java/org/torproject/metrics/collector/Main.java b/src/main/java/org/torproject/metrics/collector/Main.java
index 3822353..3e8ec33 100644
--- a/src/main/java/org/torproject/metrics/collector/Main.java
+++ b/src/main/java/org/torproject/metrics/collector/Main.java
@@ -39,7 +39,7 @@ import java.util.Map;
*/
public class Main {
- private static final Logger log = LoggerFactory.getLogger(Main.class);
+ private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static final String CONF_FILE = "collector.properties";
@@ -116,7 +116,7 @@ public class Main {
+ ") and provide at least one data source and one data sink. "
+ "Refer to the manual for more information.");
} catch (IOException e) {
- log.error("Cannot write default configuration.", e);
+ logger.error("Cannot write default configuration.", e);
throw new RuntimeException(e);
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/cron/ShutdownHook.java b/src/main/java/org/torproject/metrics/collector/cron/ShutdownHook.java
index ec34a19..7e0d0be 100644
--- a/src/main/java/org/torproject/metrics/collector/cron/ShutdownHook.java
+++ b/src/main/java/org/torproject/metrics/collector/cron/ShutdownHook.java
@@ -11,7 +11,8 @@ import org.slf4j.LoggerFactory;
*/
public final class ShutdownHook extends Thread {
- private static final Logger log = LoggerFactory.getLogger(ShutdownHook.class);
+ private static final Logger logger
+ = LoggerFactory.getLogger(ShutdownHook.class);
private boolean stayAlive = true;
@@ -37,13 +38,13 @@ public final class ShutdownHook extends Thread {
@Override
public void run() {
- log.info("Shutdown in progress ... ");
+ logger.info("Shutdown in progress ... ");
Scheduler.getInstance().shutdownScheduler();
synchronized (this) {
this.stayAlive = false;
this.notify();
}
- log.info("Shutdown finished. Exiting.");
+ logger.info("Shutdown finished. Exiting.");
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/persist/BandwidthFilePersistence.java b/src/main/java/org/torproject/metrics/collector/persist/BandwidthFilePersistence.java
index bbbfca5..8664ae8 100644
--- a/src/main/java/org/torproject/metrics/collector/persist/BandwidthFilePersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/persist/BandwidthFilePersistence.java
@@ -7,6 +7,8 @@ import org.torproject.descriptor.BandwidthFile;
import org.torproject.metrics.collector.conf.Annotation;
import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.nio.file.Paths;
import java.time.LocalDateTime;
@@ -16,6 +18,9 @@ import java.time.format.DateTimeFormatter;
public class BandwidthFilePersistence
extends DescriptorPersistence<BandwidthFile> {
+ private static final Logger logger
+ = LoggerFactory.getLogger(BandwidthFilePersistence.class);
+
private static final String BANDWIDTH = "bandwidth";
private static final String BANDWIDTHS = "bandwidths";
@@ -57,7 +62,7 @@ public class BandwidthFilePersistence
System.arraycopy(bytes, start, forDigest, 0, forDigest.length);
digest = DigestUtils.sha256Hex(forDigest).toUpperCase();
} else {
- log.error("No digest calculation possible. Returning empty string.");
+ logger.error("No digest calculation possible. Returning empty string.");
}
return digest;
}
diff --git a/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java b/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java
index 7c648ef..a2c9bc4 100644
--- a/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java
@@ -5,18 +5,12 @@ package org.torproject.metrics.collector.persist;
import org.torproject.descriptor.Descriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
public abstract class DescriptorPersistence<T extends Descriptor> {
- protected static final Logger log = LoggerFactory.getLogger(
- DescriptorPersistence.class);
-
protected static final String BRIDGEDESCS = "bridge-descriptors";
protected static final String BRIDGEPOOLASSIGNMENTS
= "bridge-pool-assignments";
diff --git a/src/main/java/org/torproject/metrics/collector/persist/PersistenceUtils.java b/src/main/java/org/torproject/metrics/collector/persist/PersistenceUtils.java
index 72ad73a..da1403c 100644
--- a/src/main/java/org/torproject/metrics/collector/persist/PersistenceUtils.java
+++ b/src/main/java/org/torproject/metrics/collector/persist/PersistenceUtils.java
@@ -23,7 +23,7 @@ import java.util.TimeZone;
public class PersistenceUtils {
- private static final Logger log = LoggerFactory.getLogger(
+ private static final Logger logger = LoggerFactory.getLogger(
PersistenceUtils.class);
public static final String TEMPFIX = ".tmp";
@@ -55,14 +55,14 @@ public class PersistenceUtils {
}
return createOrAppend(typeAnnotation, data, tmpPath, option);
} catch (FileAlreadyExistsException faee) {
- log.debug("Already have descriptor(s) of type '{}': {}. Skipping.",
+ logger.debug("Already have descriptor(s) of type '{}': {}. Skipping.",
new String(typeAnnotation), outputPath);
} catch (IOException | SecurityException
| UnsupportedOperationException e) {
- log.warn("Could not store descriptor(s) {} of type '{}'",
+ logger.warn("Could not store descriptor(s) {} of type '{}'",
outputPath, new String(typeAnnotation), e);
} catch (Throwable th) { // anything else
- log.warn("Problem storing descriptor(s) {} of type '{}'",
+ logger.warn("Problem storing descriptor(s) {} of type '{}'",
outputPath, new String(typeAnnotation), th);
}
return false;
diff --git a/src/main/java/org/torproject/metrics/collector/persist/VotePersistence.java b/src/main/java/org/torproject/metrics/collector/persist/VotePersistence.java
index 461ca40..5973795 100644
--- a/src/main/java/org/torproject/metrics/collector/persist/VotePersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/persist/VotePersistence.java
@@ -7,6 +7,8 @@ import org.torproject.descriptor.RelayNetworkStatusVote;
import org.torproject.metrics.collector.conf.Annotation;
import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
@@ -14,6 +16,9 @@ import java.nio.file.Paths;
public class VotePersistence
extends DescriptorPersistence<RelayNetworkStatusVote> {
+ private static final Logger logger
+ = LoggerFactory.getLogger(VotePersistence.class);
+
private static final String VOTE = "vote";
private static final String VOTES = "votes";
@@ -56,7 +61,7 @@ public class VotePersistence
System.arraycopy(bytes, start, forDigest, 0, sig - start);
digest = DigestUtils.sha1Hex(forDigest).toUpperCase();
} else {
- log.error("No digest calculation possible. Returning empty string.");
+ logger.error("No digest calculation possible. Returning empty string.");
}
return digest;
}
diff --git a/src/main/java/org/torproject/metrics/collector/sync/SyncManager.java b/src/main/java/org/torproject/metrics/collector/sync/SyncManager.java
index e42ae61..1fa1347 100644
--- a/src/main/java/org/torproject/metrics/collector/sync/SyncManager.java
+++ b/src/main/java/org/torproject/metrics/collector/sync/SyncManager.java
@@ -25,7 +25,8 @@ import java.util.Set;
public class SyncManager {
- private static final Logger log = LoggerFactory.getLogger(SyncManager.class);
+ private static final Logger logger
+ = LoggerFactory.getLogger(SyncManager.class);
public static final String SYNCORIGINS = "SyncOrigins";
private Date collectionDate;
@@ -53,12 +54,12 @@ public class SyncManager {
File storage = new File(basePath.toFile(),
marker + "-" + source.getHost());
storage.mkdirs();
- log.info("Collecting {} from {} ...", marker, source.getHost());
+ logger.info("Collecting {} from {} ...", marker, source.getHost());
descriptorCollector.collectDescriptors(source.toString(),
dirs.toArray(new String[dirs.size()]), 0L, storage, true);
- log.info("Done collecting {} from {}.", marker, source.getHost());
+ logger.info("Done collecting {} from {}.", marker, source.getHost());
} catch (Throwable th) { // catch all
- log.warn("Cannot download {} from {}.", dirs, source, th);
+ logger.warn("Cannot download {} from {}.", dirs, source, th);
}
}
}
@@ -72,7 +73,7 @@ public class SyncManager {
= new ProcessCriterium(UnparseableDescriptor.class);
for (URL source : sources) {
File base = new File(basePath.toFile(), marker + "-" + source.getHost());
- log.info("Merging {} from {} into storage ...", marker,
+ logger.info("Merging {} from {} into storage ...", marker,
source.getHost());
for (Map.Entry<String, Class<? extends Descriptor>> entry
: mapPathDesc.entrySet()) {
@@ -86,21 +87,21 @@ public class SyncManager {
"sync-history-" + source.getHost() + "-" + marker + "-"
+ histFileEnding);
descriptorReader.setHistoryFile(historyFile);
- log.info("Reading {} of type {} ... ", marker, histFileEnding);
+ logger.info("Reading {} of type {} ... ", marker, histFileEnding);
Iterator<Descriptor> descriptors
= descriptorReader.readDescriptors(descFile).iterator();
- log.info("Done reading {} of type {}.", marker, histFileEnding);
+ logger.info("Done reading {} of type {}.", marker, histFileEnding);
Criterium<Descriptor> crit = new ProcessCriterium(entry.getValue());
while (descriptors.hasNext()) {
Descriptor desc = descriptors.next();
if (unparseable.applies(desc)) {
Exception ex
= ((UnparseableDescriptor)desc).getDescriptorParseException();
- log.warn("Parsing of {} caused Exception(s). Processing anyway.",
+ logger.warn("Parsing of {} caused Exception(s). Processing anyway.",
desc.getDescriptorFile(), ex);
}
if (!crit.applies(desc)) {
- log.warn("Not processing {} in {}.", desc.getClass().getName(),
+ logger.warn("Not processing {} in {}.", desc.getClass().getName(),
desc.getDescriptorFile());
continue;
}
@@ -110,7 +111,7 @@ public class SyncManager {
persist.cleanDirectory();
descriptorReader.saveHistoryFile(historyFile);
}
- log.info("Done merging {} from {}.", marker, source.getHost());
+ logger.info("Done merging {} from {}.", marker, source.getHost());
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java b/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java
index f81e164..adffb93 100644
--- a/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java
@@ -48,7 +48,7 @@ import java.nio.file.Path;
/** Provides persistence for descriptors based on the descriptor type. */
public class SyncPersistence {
- private static final Logger log
+ private static final Logger logger
= LoggerFactory.getLogger(SyncPersistence.class);
private final Path recentPath;
@@ -72,7 +72,7 @@ public class SyncPersistence {
try {
PersistenceUtils.cleanDirectory(recentPath);
} catch (IOException ioe) {
- log.error("Cleaning of {} failed.", recentPath.toString(), ioe);
+ logger.error("Cleaning of {} failed.", recentPath.toString(), ioe);
}
}
@@ -126,7 +126,8 @@ public class SyncPersistence {
case "BridgeNetworkStatus": // need to infer authId from filename
String[] filenameParts = filename.split(DASH);
if (filenameParts.length < 3) {
- log.error("Invalid BridgeNetworkStatus; skipping: {}.", filename);
+ logger.error("Invalid BridgeNetworkStatus; skipping: {}.",
+ filename);
break;
}
descPersist = new StatusPersistence(
@@ -160,7 +161,7 @@ public class SyncPersistence {
descPersist = new BridgedbMetricsPersistence((BridgedbMetrics) desc);
break;
default:
- log.trace("Invalid descriptor type {} for sync-merge.",
+ logger.trace("Invalid descriptor type {} for sync-merge.",
clazz.getName());
continue;
}
@@ -171,7 +172,7 @@ public class SyncPersistence {
break;
}
if (!recognizedAndWritten) {
- log.error("Unknown descriptor type {} implementing {}.",
+ logger.error("Unknown descriptor type {} implementing {}.",
desc.getClass().getSimpleName(), desc.getClass().getInterfaces());
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/webstats/LogFileMap.java b/src/main/java/org/torproject/metrics/collector/webstats/LogFileMap.java
index 5be6b50..fb39202 100644
--- a/src/main/java/org/torproject/metrics/collector/webstats/LogFileMap.java
+++ b/src/main/java/org/torproject/metrics/collector/webstats/LogFileMap.java
@@ -22,7 +22,8 @@ import java.util.TreeMap;
public class LogFileMap
extends TreeMap<String, TreeMap<String, TreeMap<LocalDate, LogMetadata>>> {
- private static final Logger log = LoggerFactory.getLogger(LogFileMap.class);
+ private static final Logger logger
+ = LoggerFactory.getLogger(LogFileMap.class);
/**
* The map to keep track of the logfiles by virtual host,
@@ -54,13 +55,13 @@ public class LogFileMap
private FileVisitResult logIfError(Path path, IOException ex) {
if (null != ex) {
- log.warn("Cannot process '{}'.", path, ex);
+ logger.warn("Cannot process '{}'.", path, ex);
}
return FileVisitResult.CONTINUE;
}
});
} catch (IOException ex) {
- log.error("Cannot read directory '{}'.", startDir, ex);
+ logger.error("Cannot read directory '{}'.", startDir, ex);
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/webstats/LogMetadata.java b/src/main/java/org/torproject/metrics/collector/webstats/LogMetadata.java
index d3bf8fb..2cac619 100644
--- a/src/main/java/org/torproject/metrics/collector/webstats/LogMetadata.java
+++ b/src/main/java/org/torproject/metrics/collector/webstats/LogMetadata.java
@@ -17,7 +17,7 @@ import java.util.regex.Pattern;
public class LogMetadata {
- private static final Logger log
+ private static final Logger logger
= LoggerFactory.getLogger(LogMetadata.class);
/** The mandatory web server log descriptor file name pattern. */
@@ -67,7 +67,7 @@ public class LogMetadata {
= LocalDate.parse(mat.group(2), DateTimeFormatter.BASIC_ISO_DATE);
if (null == virtualHost || null == physicalHost || null == logDate
|| virtualHost.isEmpty() || physicalHost.isEmpty()) {
- log.debug("Non-matching file encountered: '{}/{}'.",
+ logger.debug("Non-matching file encountered: '{}/{}'.",
parentPath, file);
} else {
metadata = new LogMetadata(logPath, physicalHost, virtualHost,
@@ -77,7 +77,7 @@ public class LogMetadata {
}
} catch (Throwable ex) {
metadata = null;
- log.debug("Problem parsing path '{}'.", logPath, ex);
+ logger.debug("Problem parsing path '{}'.", logPath, ex);
}
return Optional.ofNullable(metadata);
}
diff --git a/src/main/java/org/torproject/metrics/collector/webstats/SanitizeWeblogs.java b/src/main/java/org/torproject/metrics/collector/webstats/SanitizeWeblogs.java
index 6c8a495..670f686 100644
--- a/src/main/java/org/torproject/metrics/collector/webstats/SanitizeWeblogs.java
+++ b/src/main/java/org/torproject/metrics/collector/webstats/SanitizeWeblogs.java
@@ -55,7 +55,7 @@ import java.util.stream.Stream;
*/
public class SanitizeWeblogs extends CollecTorMain {
- private static final Logger log =
+ private static final Logger logger =
LoggerFactory.getLogger(SanitizeWeblogs.class);
private static final int LIMIT = 2;
@@ -99,7 +99,7 @@ public class SanitizeWeblogs extends CollecTorMain {
Set<SourceType> sources = this.config.getSourceTypeSet(
Key.WebstatsSources);
if (sources.contains(SourceType.Local)) {
- log.info("Processing logs using batch value {}.", BATCH);
+ logger.info("Processing logs using batch value {}.", BATCH);
Map<LogMetadata, Set<LocalDate>> previouslyProcessedWebstats
= this.readProcessedWebstats();
Map<LogMetadata, Set<LocalDate>> newlyProcessedWebstats
@@ -112,7 +112,7 @@ public class SanitizeWeblogs extends CollecTorMain {
cutOffMillis);
}
} catch (Exception e) {
- log.error("Cannot sanitize web-logs: {}", e.getMessage(), e);
+ logger.error("Cannot sanitize web-logs: {}", e.getMessage(), e);
throw new RuntimeException(e);
}
}
@@ -132,9 +132,10 @@ public class SanitizeWeblogs extends CollecTorMain {
}
}
} catch (IOException e) {
- log.error("Cannot read state file {}.", this.processedWebstatsFile, e);
+ logger.error("Cannot read state file {}.", this.processedWebstatsFile,
+ e);
}
- log.debug("Read state file containing {} log files.",
+ logger.debug("Read state file containing {} log files.",
processedWebstats.size());
}
return processedWebstats;
@@ -144,14 +145,14 @@ public class SanitizeWeblogs extends CollecTorMain {
Map<LogMetadata, Set<LocalDate>> previouslyProcessedWebstats) {
Map<LogMetadata, Set<LocalDate>> newlyProcessedWebstats = new HashMap<>();
LogFileMap fileMapIn = new LogFileMap(dir);
- log.info("Found log files for {} virtual hosts.", fileMapIn.size());
+ logger.info("Found log files for {} virtual hosts.", fileMapIn.size());
for (Map.Entry<String,TreeMap<String,TreeMap<LocalDate,LogMetadata>>>
virtualEntry : fileMapIn.entrySet()) {
String virtualHost = virtualEntry.getKey();
for (Map.Entry<String, TreeMap<LocalDate, LogMetadata>> physicalEntry
: virtualEntry.getValue().entrySet()) {
String physicalHost = physicalEntry.getKey();
- log.info("Processing logs for {} on {}.", virtualHost, physicalHost);
+ logger.info("Processing logs for {} on {}.", virtualHost, physicalHost);
/* Go through current input log files for given virtual and physical
* host, and either look up contained log dates from the last execution,
* or parse files to memory now. */
@@ -231,7 +232,7 @@ public class SanitizeWeblogs extends CollecTorMain {
.add(WebServerAccessLogImpl.MARKER)
.add(date.format(DateTimeFormatter.BASIC_ISO_DATE))
.toString() + "." + FileType.XZ.name().toLowerCase();
- log.debug("Storing {}.", name);
+ logger.debug("Storing {}.", name);
Map<String, Long> retainedLines = new TreeMap<>(lineCounts);
lineCounts.clear(); // not needed anymore
try {
@@ -239,13 +240,14 @@ public class SanitizeWeblogs extends CollecTorMain {
= new WebServerAccessLogPersistence(
new WebServerAccessLogImpl(toCompressedBytes(retainedLines),
new File(name), name));
- log.debug("Storing {}.", name);
+ logger.debug("Storing {}.", name);
walp.storeOut(this.outputDirectory.toString());
walp.storeRecent(this.recentDirectory.toString());
} catch (DescriptorParseException dpe) {
- log.error("Cannot store log desriptor {}.", name, dpe);
+ logger.error("Cannot store log desriptor {}.", name, dpe);
} catch (Throwable th) { // catch all else
- log.error("Serious problem. Cannot store log desriptor {}.", name, th);
+ logger.error("Serious problem. Cannot store log desriptor {}.", name,
+ th);
}
}
@@ -327,7 +329,7 @@ public class SanitizeWeblogs extends CollecTorMain {
private Map<LocalDate, Map<String, Long>>
sanitzedLineStream(LogMetadata metadata) {
- log.debug("Processing file {}.", metadata.path);
+ logger.debug("Processing file {}.", metadata.path);
try (BufferedReader br
= new BufferedReader(new InputStreamReader(
metadata.fileType.decompress(Files.newInputStream(metadata.path))))) {
@@ -365,7 +367,7 @@ public class SanitizeWeblogs extends CollecTorMain {
.collect(groupingByConcurrent(Map.Entry::getKey,
summingLong(Map.Entry::getValue))))));
} catch (Exception ex) {
- log.debug("Skipping log-file {}.", metadata.path, ex);
+ logger.debug("Skipping log-file {}.", metadata.path, ex);
}
return Collections.emptyMap();
}
@@ -385,9 +387,10 @@ public class SanitizeWeblogs extends CollecTorMain {
}
Files.write(this.processedWebstatsFile, lines);
} catch (IOException e) {
- log.error("Cannot write state file {}.", this.processedWebstatsFile, e);
+ logger.error("Cannot write state file {}.", this.processedWebstatsFile,
+ e);
}
- log.debug("Wrote state file containing {} log files.",
+ logger.debug("Wrote state file containing {} log files.",
newlyProcessedWebstats.size());
}
}
diff --git a/src/main/java/org/torproject/metrics/collector/webstats/WebServerAccessLogLine.java b/src/main/java/org/torproject/metrics/collector/webstats/WebServerAccessLogLine.java
index 816064a..d187cf2 100644
--- a/src/main/java/org/torproject/metrics/collector/webstats/WebServerAccessLogLine.java
+++ b/src/main/java/org/torproject/metrics/collector/webstats/WebServerAccessLogLine.java
@@ -23,7 +23,7 @@ import java.util.regex.Pattern;
public class WebServerAccessLogLine implements WebServerAccessLog.Line {
- private static final Logger log = LoggerFactory
+ private static final Logger logger = LoggerFactory
.getLogger(WebServerAccessLogLine.class);
private static final String DATE_PATTERN = "dd/MMM/yyyy";
@@ -151,7 +151,7 @@ public class WebServerAccessLogLine implements WebServerAccessLog.Line {
res.valid = true;
}
} catch (Throwable th) {
- log.debug("Unmatchable line: '{}'.", line, th);
+ logger.debug("Unmatchable line: '{}'.", line, th);
return new WebServerAccessLogLine();
}
return res;
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index 6cb5831..0000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<configuration debug="false">
-
- <!-- a path and a prefix -->
- <property name="logfile-base" value="${LOGBASE}/collector-" />
-
- <!-- log file names -->
- <property name="fileall-logname" value="${logfile-base}all" />
- <property name="file-bridgedescs-logname" value="${logfile-base}bridgedescs" />
- <property name="file-exitlists-logname" value="${logfile-base}exitlists" />
- <property name="file-relaydescs-logname" value="${logfile-base}relaydescs" />
- <property name="file-torperf-logname" value="${logfile-base}torperf" />
- <property name="file-updateindex-logname" value="${logfile-base}updateindex" />
-
- <!-- date pattern -->
- <property name="utc-date-pattern" value="%date{ISO8601, UTC}" />
-
- <!-- appender section -->
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>WARN</level>
- </filter>
- </appender>
-
- <appender name="SHUTDOWN" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
- </appender>
-
- <appender name="FILEALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${fileall-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!-- rollover daily -->
- <FileNamePattern>${fileall-logname}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
- <maxHistory>10</maxHistory>
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- or whenever the file size reaches 1MB -->
- <maxFileSize>1MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <appender name="FILEBRIDGEDESCS" class="ch.qos.logback.core.FileAppender">
- <file>${file-bridgedescs-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <appender name="FILEEXITLISTS" class="ch.qos.logback.core.FileAppender">
- <file>${file-exitlists-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <appender name="FILERELAYDESCS" class="ch.qos.logback.core.FileAppender">
- <file>${file-relaydescs-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <appender name="FILETORPERF" class="ch.qos.logback.core.FileAppender">
- <file>${file-torperf-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <appender name="FILEUPDATEINDEX" class="ch.qos.logback.core.FileAppender">
- <file>${file-updateindex-logname}.log</file>
- <encoder>
- <pattern>${utc-date-pattern} %level %logger{20}:%line %msg%n</pattern>
- </encoder>
-
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <!-- logger section -->
- <logger name="org.torproject.collector.bridgedescs" >
- <appender-ref ref="FILEBRIDGEDESCS" />
- </logger>
-
- <logger name="org.torproject.collector.exitlists" >
- <appender-ref ref="FILEEXITLISTS" />
- </logger>
-
- <logger name="org.torproject.collector.relaydescs" >
- <appender-ref ref="FILERELAYDESCS" />
- </logger>
-
- <logger name="org.torproject.collector.torperf" >
- <appender-ref ref="FILETORPERF" />
- </logger>
-
- <logger name="org.torproject.collector.index" level="INFO" >
- <appender-ref ref="FILEUPDATEINDEX" />
- </logger>
-
- <logger name="org.torproject.collector.Main" >
- <appender-ref ref="FILEBRIDGEDESCS" />
- <appender-ref ref="FILEEXITLISTS" />
- <appender-ref ref="FILERELAYDESCS" />
- <appender-ref ref="FILETORPERF" />
- <appender-ref ref="FILEUPDATEINDEX" />
- </logger>
-
- <logger name="org.torproject.collector.conf" >
- <appender-ref ref="FILEBRIDGEDESCS" />
- <appender-ref ref="FILEEXITLISTS" />
- <appender-ref ref="FILERELAYDESCS" />
- <appender-ref ref="FILETORPERF" />
- <appender-ref ref="FILEUPDATEINDEX" />
- </logger>
-
- <logger name="org.torproject.collector.cron" >
- <appender-ref ref="FILEBRIDGEDESCS" />
- <appender-ref ref="FILEEXITLISTS" />
- <appender-ref ref="FILERELAYDESCS" />
- <appender-ref ref="FILETORPERF" />
- <appender-ref ref="FILEUPDATEINDEX" />
- </logger>
-
- <logger name="org.torproject" >
- <appender-ref ref="CONSOLE" />
- </logger>
-
- <logger name="org.torproject.collector.cron.ShutdownHook" >
- <appender-ref ref="SHUTDOWN" />
- </logger>
-
- <root level="ALL">
- <appender-ref ref="FILEALL" />
- </root>
-
-</configuration>
-
1
0