tor-commits
Threads by month
- ----- 2025 -----
- 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
September 2019
- 21 participants
- 2044 discussions
commit a51b6e49cde838422f44d54881d972f17f28372a
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Sep 19 11:10:49 2019 +0200
Prepare for 1.11.0 release.
---
CHANGELOG.md | 7 ++++++-
build.xml | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ecfb35..f5f9488 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# Changes in version 1.11.0 - 2019-09-19
+
+ * Medium changes
+ - Archive bridge pool assignments again.
+
+
# Changes in version 1.10.0 - 2019-09-12
* Medium changes
@@ -15,7 +21,6 @@
- Remove Cobertura from the build process.
- Archive snowflake statistics.
- Update to metrics-lib 2.7.0.
- - Archive bridge pool assignments again.
# Changes in version 1.9.1 - 2019-05-29
diff --git a/build.xml b/build.xml
index 4bada49..faf44a9 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.10.0-dev" />
+ <property name="release.version" value="1.11.0" />
<property name="project-main-class" value="org.torproject.metrics.collector.Main" />
<property name="name" value="collector"/>
<property name="metricslibversion" value="2.7.0" />
1
0

[collector/master] Tone down a warning about outdated assignments.
by karsten@torproject.org 19 Sep '19
by karsten@torproject.org 19 Sep '19
19 Sep '19
commit 54ac654d40544bab48cec58ba64546ef6ffe0bfe
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Sep 19 11:08:41 2019 +0200
Tone down a warning about outdated assignments.
---
.../BridgePoolAssignmentsProcessor.java | 23 ++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java b/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java
index cad91ef..a386fb6 100644
--- a/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java
+++ b/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java
@@ -115,11 +115,19 @@ public class BridgePoolAssignmentsProcessor extends CollecTorMain {
logger.info("Starting bridge-pool-assignments module of CollecTor.");
this.initializeConfiguration();
List<File> assignmentFiles = this.listAssignmentFiles();
+ LocalDateTime latestPublished = null;
for (File assignmentFile : assignmentFiles) {
logger.info("Processing bridge pool assignment file '{}'...",
assignmentFile.getAbsolutePath());
+ SortedMap<LocalDateTime, SortedMap<String, String>>
+ readBridgePoolAssignments
+ = this.readBridgePoolAssignments(assignmentFile);
+ if (null == latestPublished
+ || readBridgePoolAssignments.lastKey().isAfter(latestPublished)) {
+ latestPublished = readBridgePoolAssignments.lastKey();
+ }
for (Map.Entry<LocalDateTime, SortedMap<String, String>> e
- : this.readBridgePoolAssignments(assignmentFile).entrySet()) {
+ : readBridgePoolAssignments.entrySet()) {
LocalDateTime published = e.getKey();
SortedMap<String, String> originalAssignments = e.getValue();
SortedMap<String, String> sanitizedAssignments
@@ -144,6 +152,12 @@ public class BridgePoolAssignmentsProcessor extends CollecTorMain {
}
}
}
+ if (null != latestPublished
+ && latestPublished.minusMinutes(330L).isBefore(LocalDateTime.now())) {
+ logger.warn("The last known bridge pool assignment list was "
+ + "published at {}, which is more than 5:30 hours in the past.",
+ latestPublished);
+ }
this.cleanUpRsyncDirectory();
logger.info("Finished processing bridge pool assignment file(s).");
}
@@ -251,13 +265,6 @@ public class BridgePoolAssignmentsProcessor extends CollecTorMain {
logger.warn("Could not read bridge pool assignment file '{}'. "
+ "Skipping.", assignmentFile.getAbsolutePath(), e);
}
- if (!readBridgePoolAssignments.isEmpty()
- && readBridgePoolAssignments.lastKey().minusMinutes(330L)
- .isBefore(LocalDateTime.now())) {
- logger.warn("The last known bridge pool assignment list was "
- + "published at {}, which is more than 5:30 hours in the past.",
- readBridgePoolAssignments.lastKey());
- }
return readBridgePoolAssignments;
}
1
0

[translation/tbmanual-contentspot] https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit 46894ddee8fc2d0fa1fc5b922b0272cd0a64958a
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 08:49:54 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
---
contents+fa.po | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 70 insertions(+), 4 deletions(-)
diff --git a/contents+fa.po b/contents+fa.po
index 35126d270..88a2033f6 100644
--- a/contents+fa.po
+++ b/contents+fa.po
@@ -952,6 +952,9 @@ msgid ""
"need to enter bridge addresses manually. Read the [Bridges](/en-US/bridges/)"
" section to learn what bridges are and how to obtain them."
msgstr ""
+"اگر شما با هیچ کدام از این موارد نتوانستید به اینترنت متصل شوید، نیاز است تا"
+" به صورت دستی، آدرس یک ایستگاه پل را وارد کنید. برای آشنایی با پل ها و اینکه"
+" چگونه باید آن ها را بدست آورید، بخش [پل ها](/en-US/bridges/) را بخوانید."
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.title)
@@ -1057,6 +1060,8 @@ msgid ""
"[FAQ](https://www.torproject.org/docs/faq#EntryGuards) and [Support "
"Portal](https://support.torproject.org/tbb/tbb-2/)."
msgstr ""
+"در داخل یک چرخه تور، گره نگهبان یا گره ورودی، همیشه به عنوان نخستین گره در چرخه می باشد و به صورت تصادفی و خودکار توسط تور انتخاب می شود و نسبت به سایر گره های داخل چرخه، متفاوت است. به منظور پیشگیری از حملات پروفایل که نوعی حمله مخرب از سوی مهاجم می باشند، بر خلاف سایر گره ها که هر بار که به دامنه اینترنتی جدیدی وصل می شوید، آدرس آن ها تغییر می کند، گره نگهبان فقط پس از 2-3 ماه تغییر خواهد کرد.\n"
+"برای آگاهی بیشتردرباره گرههای نگهبان، به [پرسش های پرتکرار کاربران](https://www.torproject.org/docs/faq#EntryGuards) و [پرتال پشتیبانی](https://support.torproject.org/tbb/tbb-2/) سر بزنید. "
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1102,6 +1107,9 @@ msgid ""
"* See the [Secure Connections](/secure-connections) page for important "
"information on how to secure your connection when logging in."
msgstr ""
+"* برای دریافت اطلاعات مهم در خصوص ایمن سازی ارتباط در هنگام ورود به وب سایت "
+"ها - لاگین کردن - به صفحهی [ارتباطات امن](/secure-connections) مراجعه "
+"کنید."
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1179,6 +1187,14 @@ msgid ""
" does not clear any private information or unlink your activity, nor does it"
" affect your current connections to other websites."
msgstr ""
+"این گزینه برای زمانی مفید خواهد بود که [گره پایانی تور](/about/#how-tor-"
+"works) نتواند شما را به وب سایت موردنظرتان وصل کند و یا وب سایت، به درستی "
+"بارگیری و نمایش داده نشود. با انتخاب این گزینه، سربرگ یا پنجره فعلی مرورگر "
+"تور بر روی چرخه جدید، از نو بارگیری خواهد شد. سایر سربرگ ها یا پنجره های "
+"مربوط \"به همان وب سایت\" نیز دوباره بارگیری شده و بر روی چرخه جدید قرار می "
+"گیرند. این گزینه، هیچ کدام از اطلاعات خصوصی شما را پاک نمی کند، پیوند بین "
+"فعالیت های وبگردی را از بین نمی برد و بر روی ارتباط شما به دیگر وب سایت ها، "
+"هیچ تاثیری نخواهد داشت."
#: https//tb-manual.torproject.org/managing-identities/
#: (content/managing-identities/contents+en.lrtopic.body)
@@ -1235,6 +1251,9 @@ msgid ""
"so you do not need to worry about [connecting over HTTPS](/secure-"
"connections)."
msgstr ""
+"* تمام ترافیک بین کاربران تور و سرویس های پیازی بر اساس رمزگذاری انتها به "
+"انتها انجام می شود و بنابراین، نیازی به نگرانی در مورد [ارتباط بر روی HTTPS"
+"](/secure-connections) نمی باشد."
#: https//tb-manual.torproject.org/onion-services/
#: (content/onion-services/contents+en.lrtopic.body)
@@ -1307,6 +1326,9 @@ msgid ""
"You can also ensure that you're able to access other onion services by "
"connecting to [DuckDuckGo's Onion Service](http://3g2upl4pq6kufc4m.onion/)"
msgstr ""
+"برای اطمینان از اینکه شما می توانید به سایر سرویس های پیازی نیز دسترسی داشته"
+" باشید، به [سرویس پیازی DuckDuckGo](http://3g2upl4pq6kufc4m.onion/) که یک "
+"موتور جستجوی ایمن می باشد، بروید."
#: https//tb-manual.torproject.org/secure-connections/
#: (content/secure-connections/contents+en.lrtopic.title)
@@ -1558,7 +1580,7 @@ msgstr ""
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
msgid "###### Safest"
-msgstr ""
+msgstr "###### ایمن ترین"
#: https//tb-manual.torproject.org/security-slider/
#: (content/security-slider/contents+en.lrtopic.body)
@@ -1570,13 +1592,21 @@ msgid ""
"disabled by default on all sites; most video and audio formats are disabled;"
" and some fonts and icons may not display correctly."
msgstr ""
+"* در این سطح، برای اجرای ویدیوهای HTML5 و رسانه های صوتی، باید با استفاده از"
+" افزونه NoScript که به صورت پیش فرض در مرورگر تور نصب شده است، آن ها را به "
+"صورت دستی اجرا کرد؛ همه بهینه سازی های عملکردهای جاوا اسکریپت غیرفعال شده "
+"اند؛ ممکن است برخی از معادلات ریاضی به درستی نمایش داده نشوند؛ برخی از ویژگی"
+" های شناسایی و نمایش فونت نیز غیرفعال شده اند؛ بعضی از انواع تصاویر غیرفعال "
+"شده اند؛ به صورت پیش فرض، جاوا اسکریپت در همه سایت ها غیرفعال شده است؛ بیشتر"
+" فرمت های ویدیویی و صوتی نیز غیرفعال شده اند؛ و ممکن است برخی فونت ها و "
+"آیکون ها به درستی نمایش داده نشوند."
#: https//tb-manual.torproject.org/security-slider/
#: (content/security-slider/contents+en.lrtopic.body)
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
msgid "###### Safer"
-msgstr ""
+msgstr "###### ایمن تر"
#: https//tb-manual.torproject.org/security-slider/
#: (content/security-slider/contents+en.lrtopic.body)
@@ -1587,13 +1617,20 @@ msgid ""
"features are disabled; some types of image are disabled; and JavaScript is "
"disabled by default on all non-[HTTPS](/secure-connections) sites."
msgstr ""
+"در این سطح، برای اجرای ویدیوهای HTML5 و رسانه های صوتی، باید با استفاده از "
+"افزونه NoScript که به صورت پیش فرض در مرورگر تور نصب شده است، آن ها را به "
+"صورت دستی اجرا کرد؛ همه بهینه سازی های عملکردهای جاوا اسکریپت غیرفعال شده "
+"اند؛ ممکن است برخی از معادلات ریاضی به درستی نمایش داده نشوند؛ برخی از ویژگی"
+" های شناسایی و نمایش فونت نیز غیرفعال شده اند؛ بعضی از انواع تصاویر غیرفعال "
+"شده اند؛ و به صورت پیش فرض، جاوا اسکریپت در همه سایت هایی که از پروتکل "
+"[HTTPS](/secure-connections) استفاده نمی کنند، غیرفعال شده است."
#: https//tb-manual.torproject.org/security-slider/
#: (content/security-slider/contents+en.lrtopic.body)
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
msgid "###### Standard"
-msgstr ""
+msgstr "###### استاندارد"
#: https//tb-manual.torproject.org/security-slider/
#: (content/security-slider/contents+en.lrtopic.body)
@@ -1601,6 +1638,8 @@ msgid ""
"* At this level, all browser features are enabled. This is the most usable "
"option."
msgstr ""
+"* در این مرحله همه ی قابلیت های مرورگر فعال شدند. این پر استفاده ترین گزینه "
+"است."
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.title)
@@ -1715,7 +1754,7 @@ msgstr ""
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
msgid "* At this level, all Tor Browser and website features are enabled."
-msgstr ""
+msgstr "* در این سطح، تمام ویژگی های مرورگر تور و وب سایت ها، فعال می باشند."
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1723,6 +1762,8 @@ msgid ""
"* This level disables website features that are often dangerous. This may "
"cause some sites to lose functionality."
msgstr ""
+"* در این سطح، آن دسته از ویژگیهای وبسایت ها که اغلب خطرناک هستند، غیرفعال "
+"می شوند. این کار ممکن است موجب اختلال در عملکرد برخی سایت ها شود."
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1731,6 +1772,10 @@ msgid ""
"fonts and math symbols are disabled; audio and video (HTML5 media) are "
"click-to-play."
msgstr ""
+"جاوا اسکریپت در تمام وب سایت هایی که از پروتکل [HTTPS](/security-settings) "
+"استفاده نمی کنند، غیرفعال می باشد؛ برخی فونت ها و نشانه های ریاضی غیرفعال "
+"شده اند؛ و برای اجرای رسانه های ویدیویی و صوتی(HTML5) باید به صورت دستی آن "
+"ها را اجرا کنید."
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1738,6 +1783,8 @@ msgid ""
"* This level only allows website features required for static sites and "
"basic services."
msgstr ""
+"* در این سطح، فقط ویژگی هایی از وب سایت فعال هستند که برای سایت های ایستا و "
+"سرویس های پایه موردنیاز می باشند."
#: https//tb-manual.torproject.org/security-settings/
#: (content/security-settings/contents+en.lrtopic.body)
@@ -1751,6 +1798,9 @@ msgid ""
"symbols, and images are disabled; audio and video (HTML5 media) are click-"
"to-play."
msgstr ""
+"* به صورت پیش فرض، جاوا اسکریپت در تمام سایت ها غیر فعال می باشد؛ برخی از "
+"آیکون ها، فونت ها، نشانه های ریاضی و تصاویر نیز غیر فعال هستند؛ و برای اجرای"
+" رسانه های ویدیویی و صوتی(HTML5) باید به صورت دستی آن ها را اجرا کنید."
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.title)
@@ -1853,6 +1903,8 @@ msgid ""
"Remove Tor Browser from your system by deleting the folder that contains it "
"(see the [Uninstalling](/uninstalling) section for more information)."
msgstr ""
+"برای حذف مرورگر تور از سیستم خود، پوشهی آن را حذف کنید (برای اطلاعات بیشتر "
+"بخش [حذف کردن](/uninstalling) را ببینید)."
#: https//tb-manual.torproject.org/updating/
#: (content/updating/contents+en.lrtopic.body)
@@ -1955,6 +2007,13 @@ msgid ""
" displaying correctly, so Tor Browser’s default setting is to allow all "
"websites to run scripts in \"Standard\" mode."
msgstr ""
+"کاربرانی که نیازمند امنیت بالا در هنگام وبگردی هستند، می بایست [سطح امنیتی"
+"](/security-slider) مرورگر تور را بر روی \"ایمن تر\"(که جاوا اسکریپت را برای"
+" وب سایت هایی که از پروتکل HTTPS استفاده نمی کنند، غیرفعال خواهد کرد) و یا "
+"\"ایمن ترین\"(که جاوا اسکریپت را برای همه وب سایت ها غیرفعال خواهد کرد) "
+"تنظیم کنند. با این حال، غیرفعال شدن جاوا اسکریپت موجب می شود تا بسیاری از "
+"سایت ها به درستی نمایش داده نشوند، به همین دلیل، مرورگر تور به صورت پیش فرض "
+"اجازه اجرای جاوا اسکریپت در حالت \"استاندارد\" را می دهد."
#: https//tb-manual.torproject.org/plugins/
#: (content/plugins/contents+en.lrtopic.body)
@@ -2075,6 +2134,9 @@ msgid ""
"censoring connections to the Tor network. Read the "
"[Circumvention](/circumvention) section for possible solutions."
msgstr ""
+"اگر همچنان نمی توانید متصل شوید, احتمال دارد سرویس دهنده شبکه شما, اتصالات "
+"به شبکه تور را مسدود می کند. برای مشاهده راه حل های امکان پذیر، بخش [دور زدن"
+" سانسور](/circumvention) را ببینید."
#: https//tb-manual.torproject.org/troubleshooting/
#: (content/troubleshooting/contents+en.lrtopic.body)
@@ -2088,6 +2150,10 @@ msgid ""
"but not yet fixed. Please check the [Known Issues](/known-issues) page to "
"see if the problem you are experiencing is already listed there."
msgstr ""
+"مرورگر تور به صورت مداوم در حال توسعه می باشد و برخی از مشکلات آن شناسایی "
+"شده اند اما هنوز برطرف نشده اند. لطفاً صفحه [مشکلات شناخته شده](/known-"
+"issues) را بررسی کنید تا ببینید مشکلی که شما در حال تجربه آن هستید، در آن "
+"جا وجود دارد یا نه."
#: https//tb-manual.torproject.org/known-issues/
#: (content/known-issues/contents+en.lrtopic.title)
1
0
commit 522a54ed4751faf9b595100ac63dd5fd0b446f25
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Sep 19 10:29:27 2019 +0200
Upgrade to latest metrics-base.
---
src/build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/build b/src/build
index 75cda35..0674958 160000
--- a/src/build
+++ b/src/build
@@ -1 +1 @@
-Subproject commit 75cda35ba7375ab0f5b12fa214620c3a29917097
+Subproject commit 0674958512c705255d4ec4631d3280068ce0a7af
1
0

19 Sep '19
commit b2b3363232fd1a425a6e83bde89b2687b56abc0a
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Fri Aug 30 11:09:23 2019 +0200
Archive bridge pool assignments again.
Implements #31558.
---
CHANGELOG.md | 1 +
.../org/torproject/metrics/collector/Main.java | 3 +
.../BridgePoolAssignmentsProcessor.java | 363 +++++++++++++++++++++
.../metrics/collector/conf/Annotation.java | 1 +
.../metrics/collector/conf/Configuration.java | 1 +
.../org/torproject/metrics/collector/conf/Key.java | 6 +
.../persist/BridgePoolAssignmentPersistence.java | 34 ++
.../collector/persist/DescriptorPersistence.java | 2 +
.../metrics/collector/sync/SyncPersistence.java | 6 +
src/main/resources/collector.properties | 18 +
.../metrics/collector/conf/ConfigurationTest.java | 2 +-
.../metrics/collector/cron/CollecTorMainTest.java | 1 +
12 files changed, 437 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b38b124..4ecfb35 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@
- Remove Cobertura from the build process.
- Archive snowflake statistics.
- Update to metrics-lib 2.7.0.
+ - Archive bridge pool assignments again.
# Changes in version 1.9.1 - 2019-05-29
diff --git a/src/main/java/org/torproject/metrics/collector/Main.java b/src/main/java/org/torproject/metrics/collector/Main.java
index 6907e93..3150ffc 100644
--- a/src/main/java/org/torproject/metrics/collector/Main.java
+++ b/src/main/java/org/torproject/metrics/collector/Main.java
@@ -4,6 +4,7 @@
package org.torproject.metrics.collector;
import org.torproject.metrics.collector.bridgedescs.SanitizedBridgesWriter;
+import org.torproject.metrics.collector.bridgepools.BridgePoolAssignmentsProcessor;
import org.torproject.metrics.collector.conf.Configuration;
import org.torproject.metrics.collector.conf.ConfigurationException;
import org.torproject.metrics.collector.conf.Key;
@@ -49,6 +50,8 @@ public class Main {
static { // add a new main class here
collecTorMains.put(Key.BridgedescsActivated, SanitizedBridgesWriter.class);
+ collecTorMains.put(Key.BridgePoolAssignmentsActivated,
+ BridgePoolAssignmentsProcessor.class);
collecTorMains.put(Key.ExitlistsActivated, ExitListDownloader.class);
collecTorMains.put(Key.UpdateindexActivated, CreateIndexJson.class);
collecTorMains.put(Key.RelaydescsActivated, ArchiveWriter.class);
diff --git a/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java b/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java
new file mode 100644
index 0000000..cad91ef
--- /dev/null
+++ b/src/main/java/org/torproject/metrics/collector/bridgepools/BridgePoolAssignmentsProcessor.java
@@ -0,0 +1,363 @@
+/* Copyright 2011--2019 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.metrics.collector.bridgepools;
+
+import org.torproject.metrics.collector.conf.Configuration;
+import org.torproject.metrics.collector.conf.ConfigurationException;
+import org.torproject.metrics.collector.conf.Key;
+import org.torproject.metrics.collector.cron.CollecTorMain;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.DateTimeException;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.Stack;
+import java.util.TreeMap;
+
+public class BridgePoolAssignmentsProcessor extends CollecTorMain {
+
+ /**
+ * Class logger.
+ */
+ private static final Logger logger = LoggerFactory.getLogger(
+ BridgePoolAssignmentsProcessor.class);
+
+ /**
+ * Directory containing original, not-yet-sanitized bridge pool assignment
+ * files.
+ */
+ private File assignmentsDirectory;
+
+ /**
+ * Directory containing sanitized bridge pool assignments for tarballs.
+ */
+ private String outputPathName;
+
+ /**
+ * Directory containing recently stored sanitized bridge pool assignments.
+ */
+ private String recentPathName;
+
+ /**
+ * Timestamp format in bridge-pool-assignments line.
+ */
+ private DateTimeFormatter assignmentFormat = DateTimeFormatter.ofPattern(
+ "uuuu-MM-dd HH:mm:ss");
+
+ /**
+ * File name format.
+ */
+ private DateTimeFormatter filenameFormat = DateTimeFormatter.ofPattern(
+ "uuuu/MM/dd/uuuu-MM-dd-HH-mm-ss");
+
+ /**
+ * Initialize this class with the given configuration.
+ */
+ public BridgePoolAssignmentsProcessor(Configuration config) {
+ super(config);
+ }
+
+ /**
+ * Return the module identifier.
+ *
+ * @return Module identifier.
+ */
+ @Override
+ public String module() {
+ return "BridgePoolAssignments";
+ }
+
+ /**
+ * Return the synchronization marker.
+ *
+ * @return Synchronization marker.
+ */
+ @Override
+ protected String syncMarker() {
+ return "BridgePoolAssignments";
+ }
+
+ /**
+ * Start processing files, which includes reading original, not-yet-sanitized
+ * bridge pool assignment files from disk, splitting them into bridge pool
+ * assignment descriptors, sanitizing contained fingerprints, and writing
+ * sanitized bridge pool assignments to disk.
+ *
+ * @throws ConfigurationException Thrown if configuration values cannot be
+ * obtained.
+ */
+ @Override
+ protected void startProcessing() throws ConfigurationException {
+ logger.info("Starting bridge-pool-assignments module of CollecTor.");
+ this.initializeConfiguration();
+ List<File> assignmentFiles = this.listAssignmentFiles();
+ for (File assignmentFile : assignmentFiles) {
+ logger.info("Processing bridge pool assignment file '{}'...",
+ assignmentFile.getAbsolutePath());
+ for (Map.Entry<LocalDateTime, SortedMap<String, String>> e
+ : this.readBridgePoolAssignments(assignmentFile).entrySet()) {
+ LocalDateTime published = e.getKey();
+ SortedMap<String, String> originalAssignments = e.getValue();
+ SortedMap<String, String> sanitizedAssignments
+ = this.sanitizeAssignments(originalAssignments);
+ if (null == sanitizedAssignments) {
+ logger.warn("Unable to sanitize assignments published at {}. "
+ + "Skipping.", published);
+ continue;
+ }
+ String formattedSanitizedAssignments = this.formatSanitizedAssignments(
+ published, sanitizedAssignments);
+ File tarballFile = Paths.get(this.outputPathName,
+ published.format(this.filenameFormat)).toFile();
+ File rsyncFile = new File(this.recentPathName,
+ tarballFile.getName());
+ File[] outputFiles = new File[] { tarballFile, rsyncFile };
+ for (File outputFile : outputFiles) {
+ if (!outputFile.exists()) {
+ this.writeSanitizedAssignmentsToFile(outputFile,
+ formattedSanitizedAssignments);
+ }
+ }
+ }
+ }
+ this.cleanUpRsyncDirectory();
+ logger.info("Finished processing bridge pool assignment file(s).");
+ }
+
+ /**
+ * Initialize configuration by obtaining current configuration values and
+ * storing them in instance attributes.
+ */
+ private void initializeConfiguration() throws ConfigurationException {
+ this.outputPathName = Paths.get(config.getPath(Key.OutputPath).toString(),
+ "bridge-pool-assignments").toString();
+ this.recentPathName = Paths.get(config.getPath(Key.RecentPath).toString(),
+ "bridge-pool-assignments").toString();
+ this.assignmentsDirectory =
+ config.getPath(Key.BridgePoolAssignmentsLocalOrigins).toFile();
+ }
+
+ /**
+ * Compile a list of all assignment files in the input directory.
+ *
+ * @return List of assignment files.
+ */
+ private List<File> listAssignmentFiles() {
+ List<File> assignmentFiles = new ArrayList<>();
+ Stack<File> files = new Stack<>();
+ files.add(this.assignmentsDirectory);
+ while (!files.isEmpty()) {
+ File file = files.pop();
+ if (file.isDirectory()) {
+ File[] filesInDirectory = file.listFiles();
+ if (null != filesInDirectory) {
+ files.addAll(Arrays.asList(filesInDirectory));
+ }
+ } else if (file.getName().startsWith("assignments.log")) {
+ assignmentFiles.add(file);
+ }
+ }
+ return assignmentFiles;
+ }
+
+ /**
+ * Read one or more bridge pool assignments from the given file and store them
+ * in a map with keys being published timestamps and values being maps of
+ * (original, not-yet-sanitized) fingerprints and assignment details.
+ *
+ * @param assignmentFile File containing one or more bridge pool assignments.
+ * @return Map containing all read bridge pool assignments.
+ */
+ private SortedMap<LocalDateTime, SortedMap<String, String>>
+ readBridgePoolAssignments(File assignmentFile) {
+ SortedMap<LocalDateTime, SortedMap<String, String>>
+ readBridgePoolAssignments = new TreeMap<>();
+ try {
+ BufferedReader br;
+ if (assignmentFile.getName().endsWith(".gz")) {
+ br = new BufferedReader(new InputStreamReader(
+ new GzipCompressorInputStream(new FileInputStream(
+ assignmentFile))));
+ } else {
+ br = new BufferedReader(new FileReader(assignmentFile));
+ }
+ String line;
+ SortedMap<String, String> currentAssignments = null;
+ while ((line = br.readLine()) != null) {
+ if (line.startsWith("bridge-pool-assignment ")) {
+ try {
+ LocalDateTime bridgePoolAssignmentTime = LocalDateTime.parse(
+ line.substring("bridge-pool-assignment ".length()),
+ this.assignmentFormat);
+ if (readBridgePoolAssignments.containsKey(
+ bridgePoolAssignmentTime)) {
+ logger.warn("Input file {} contains duplicate line: {}. "
+ + "Discarding previously read line and subsequent assignment "
+ + "lines.", assignmentFile, line);
+ }
+ currentAssignments = new TreeMap<>();
+ readBridgePoolAssignments.put(bridgePoolAssignmentTime,
+ currentAssignments);
+ } catch (DateTimeException e) {
+ logger.warn("Could not parse timestamp from line {}. Skipping "
+ + "bridge pool assignment file '{}'.", line,
+ assignmentFile.getAbsolutePath(), e);
+ break;
+ }
+ } else if (null == currentAssignments) {
+ logger.warn("Input file {} does not start with a "
+ + "bridge-pool-assignments line. Skipping.",
+ assignmentFile);
+ break;
+ } else {
+ String[] parts = line.split(" ", 2);
+ if (parts.length < 2 || parts[0].length() < 40) {
+ logger.warn("Unrecognized line '{}'. Aborting.", line);
+ break;
+ }
+ if (currentAssignments.containsKey(parts[0])) {
+ logger.warn("Input file {} contains duplicate line: {}. "
+ + "Discarding previously read line.", assignmentFile, line);
+ }
+ currentAssignments.put(parts[0], parts[1]);
+ }
+ }
+ br.close();
+ } catch (IOException e) {
+ logger.warn("Could not read bridge pool assignment file '{}'. "
+ + "Skipping.", assignmentFile.getAbsolutePath(), e);
+ }
+ if (!readBridgePoolAssignments.isEmpty()
+ && readBridgePoolAssignments.lastKey().minusMinutes(330L)
+ .isBefore(LocalDateTime.now())) {
+ logger.warn("The last known bridge pool assignment list was "
+ + "published at {}, which is more than 5:30 hours in the past.",
+ readBridgePoolAssignments.lastKey());
+ }
+ return readBridgePoolAssignments;
+ }
+
+ /**
+ * Sanitize the given bridge pool assignments by returning a new map with keys
+ * being SHA-1 digests of keys found in the given map.
+ *
+ * @param originalAssignments Map of (original, not-yet-sanitized)
+ * fingerprints to assignment details.
+ * @return Map of sanitized fingerprints to assignment details.
+ */
+ private SortedMap<String, String> sanitizeAssignments(
+ SortedMap<String, String> originalAssignments) {
+ SortedMap<String, String> sanitizedAssignments = new TreeMap<>();
+ for (Map.Entry<String, String> e : originalAssignments.entrySet()) {
+ String originalFingerprint = e.getKey();
+ String assignmentDetails = e.getValue();
+ try {
+ String hashedFingerprint = Hex.encodeHexString(DigestUtils.sha1(
+ Hex.decodeHex(originalFingerprint.toCharArray()))).toLowerCase();
+ sanitizedAssignments.put(hashedFingerprint, assignmentDetails);
+ } catch (DecoderException ex) {
+ logger.warn("Unable to decode hex fingerprint. Aborting.", ex);
+ return null;
+ }
+ }
+ return sanitizedAssignments;
+ }
+
+ /**
+ * Format sanitized bridge pool assignments consisting of a published
+ * timestamp and a map of sanitized fingerprints to assignment details as a
+ * single string.
+ *
+ * @param published Published timestamp as found in the bridge-pool-assignment
+ * line.
+ * @param sanitizedAssignments Map of sanitized fingerprints to assignment
+ * details.
+ * @return Formatted sanitized bridge pool assignments.
+ */
+ private String formatSanitizedAssignments(LocalDateTime published,
+ SortedMap<String, String> sanitizedAssignments) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("@type bridge-pool-assignment 1.0\n");
+ sb.append(String.format("bridge-pool-assignment %s\n",
+ published.format(this.assignmentFormat)));
+ for (Map.Entry<String, String> e : sanitizedAssignments.entrySet()) {
+ sb.append(String.format("%s %s%n", e.getKey(), e.getValue()));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Write the given formatted sanitized bridge pool assignments to the given
+ * file, or if that fails for any reason, log a warning and exit.
+ *
+ * @param outputFile File to write to.
+ * @param formattedSanitizedAssignments Formatted sanitized bridge pool
+ * assignments to write.
+ */
+ private void writeSanitizedAssignmentsToFile(File outputFile,
+ String formattedSanitizedAssignments) {
+ if (!outputFile.getParentFile().exists()
+ && !outputFile.getParentFile().mkdirs()) {
+ logger.warn("Could not create parent directories of {}.", outputFile);
+ return;
+ }
+ try (BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) {
+ bw.write(formattedSanitizedAssignments);
+ } catch (IOException e) {
+ logger.warn("Unable to write sanitized bridge pool assignments to {}.",
+ outputFile, e);
+ }
+ }
+
+ /**
+ * Delete all files from the rsync directory that have not been modified in
+ * the last three days.
+ */
+ public void cleanUpRsyncDirectory() {
+ Instant cutOff = Instant.now().minus(3L, ChronoUnit.DAYS);
+ Stack<File> allFiles = new Stack<>();
+ allFiles.add(new File(this.recentPathName));
+ while (!allFiles.isEmpty()) {
+ File file = allFiles.pop();
+ if (file.isDirectory()) {
+ File[] filesInDirectory = file.listFiles();
+ if (null != filesInDirectory) {
+ allFiles.addAll(Arrays.asList(filesInDirectory));
+ }
+ } else if (Instant.ofEpochMilli(file.lastModified()).isBefore(cutOff)) {
+ try {
+ Files.deleteIfExists(file.toPath());
+ } catch (IOException e) {
+ logger.warn("Unable to delete file {} that is apparently older than "
+ + "three days.", file, e);
+ }
+ }
+ }
+ }
+}
+
+
diff --git a/src/main/java/org/torproject/metrics/collector/conf/Annotation.java b/src/main/java/org/torproject/metrics/collector/conf/Annotation.java
index 8cd3324..7d2bbe9 100644
--- a/src/main/java/org/torproject/metrics/collector/conf/Annotation.java
+++ b/src/main/java/org/torproject/metrics/collector/conf/Annotation.java
@@ -8,6 +8,7 @@ public enum Annotation {
BandwidthFile("@type bandwidth-file 1.0\n"),
BridgeExtraInfo("@type bridge-extra-info 1.3\n"),
+ BridgePoolAssignment("@type bridge-pool-assignment 1.0\n"),
BridgeServer("@type bridge-server-descriptor 1.2\n"),
Cert("@type dir-key-certificate-3 1.0\n"),
Consensus("@type network-status-consensus-3 1.0\n"),
diff --git a/src/main/java/org/torproject/metrics/collector/conf/Configuration.java b/src/main/java/org/torproject/metrics/collector/conf/Configuration.java
index 27f5125..59229e3 100644
--- a/src/main/java/org/torproject/metrics/collector/conf/Configuration.java
+++ b/src/main/java/org/torproject/metrics/collector/conf/Configuration.java
@@ -88,6 +88,7 @@ public class Configuration extends Observable implements Cloneable {
private void anythingActivated() throws ConfigurationException {
if (!(this.getBool(Key.RelaydescsActivated)
|| this.getBool(Key.BridgedescsActivated)
+ || this.getBool(Key.BridgePoolAssignmentsActivated)
|| this.getBool(Key.ExitlistsActivated)
|| this.getBool(Key.UpdateindexActivated)
|| this.getBool(Key.OnionPerfActivated)
diff --git a/src/main/java/org/torproject/metrics/collector/conf/Key.java b/src/main/java/org/torproject/metrics/collector/conf/Key.java
index e683fe2..dfef673 100644
--- a/src/main/java/org/torproject/metrics/collector/conf/Key.java
+++ b/src/main/java/org/torproject/metrics/collector/conf/Key.java
@@ -27,6 +27,7 @@ public enum Key {
SyncPath(Path.class),
RelaySources(SourceType[].class),
BridgeSources(SourceType[].class),
+ BridgePoolAssignmentsSources(SourceType[].class),
ExitlistSources(SourceType[].class),
OnionPerfSources(SourceType[].class),
WebstatsSources(SourceType[].class),
@@ -35,6 +36,8 @@ public enum Key {
RelaySyncOrigins(URL[].class),
BridgeSyncOrigins(URL[].class),
BridgeLocalOrigins(Path.class),
+ BridgePoolAssignmentsLocalOrigins(Path.class),
+ BridgePoolAssignmentsSyncOrigins(URL[].class),
ExitlistSyncOrigins(URL[].class),
OnionPerfSyncOrigins(URL[].class),
WebstatsSyncOrigins(URL[].class),
@@ -42,6 +45,9 @@ public enum Key {
BridgedescsActivated(Boolean.class),
BridgedescsOffsetMinutes(Integer.class),
BridgedescsPeriodMinutes(Integer.class),
+ BridgePoolAssignmentsActivated(Boolean.class),
+ BridgePoolAssignmentsOffsetMinutes(Integer.class),
+ BridgePoolAssignmentsPeriodMinutes(Integer.class),
ExitlistsActivated(Boolean.class),
ExitlistsOffsetMinutes(Integer.class),
ExitlistsPeriodMinutes(Integer.class),
diff --git a/src/main/java/org/torproject/metrics/collector/persist/BridgePoolAssignmentPersistence.java b/src/main/java/org/torproject/metrics/collector/persist/BridgePoolAssignmentPersistence.java
new file mode 100644
index 0000000..5613060
--- /dev/null
+++ b/src/main/java/org/torproject/metrics/collector/persist/BridgePoolAssignmentPersistence.java
@@ -0,0 +1,34 @@
+/* Copyright 2016--2018 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.metrics.collector.persist;
+
+import org.torproject.descriptor.BridgePoolAssignment;
+import org.torproject.metrics.collector.conf.Annotation;
+
+import java.nio.file.Paths;
+
+public class BridgePoolAssignmentPersistence
+ extends DescriptorPersistence<BridgePoolAssignment> {
+
+ public BridgePoolAssignmentPersistence(BridgePoolAssignment desc) {
+ super(desc, Annotation.BridgePoolAssignment.bytes());
+ calculatePaths();
+ }
+
+ private void calculatePaths() {
+ String file = PersistenceUtils.dateTime(desc.getPublishedMillis());
+ String[] parts = file.split(DASH);
+ this.recentPath = Paths.get(
+ BRIDGEPOOLASSIGNMENTS,
+ file).toString();
+ this.storagePath = Paths.get(
+ BRIDGEPOOLASSIGNMENTS,
+ parts[0], // year
+ parts[1], // month
+ parts[2], // day
+ file).toString();
+ }
+
+}
+
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 fed4839..3e7a06b 100644
--- a/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/persist/DescriptorPersistence.java
@@ -18,6 +18,8 @@ public abstract class DescriptorPersistence<T extends Descriptor> {
DescriptorPersistence.class);
protected static final String BRIDGEDESCS = "bridge-descriptors";
+ protected static final String BRIDGEPOOLASSIGNMENTS
+ = "bridge-pool-assignments";
protected static final String DASH = "-";
protected static final String DOT = ".";
protected static final String MICRODESC = "microdesc";
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 4b3b7bc..cfc3dbe 100644
--- a/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java
+++ b/src/main/java/org/torproject/metrics/collector/sync/SyncPersistence.java
@@ -6,6 +6,7 @@ package org.torproject.metrics.collector.sync;
import org.torproject.descriptor.BandwidthFile;
import org.torproject.descriptor.BridgeExtraInfoDescriptor;
import org.torproject.descriptor.BridgeNetworkStatus;
+import org.torproject.descriptor.BridgePoolAssignment;
import org.torproject.descriptor.BridgeServerDescriptor;
import org.torproject.descriptor.Descriptor;
import org.torproject.descriptor.ExitList;
@@ -21,6 +22,7 @@ import org.torproject.metrics.collector.conf.ConfigurationException;
import org.torproject.metrics.collector.conf.Key;
import org.torproject.metrics.collector.persist.BandwidthFilePersistence;
import org.torproject.metrics.collector.persist.BridgeExtraInfoPersistence;
+import org.torproject.metrics.collector.persist.BridgePoolAssignmentPersistence;
import org.torproject.metrics.collector.persist.BridgeServerDescriptorPersistence;
import org.torproject.metrics.collector.persist.ConsensusPersistence;
import org.torproject.metrics.collector.persist.DescriptorPersistence;
@@ -132,6 +134,10 @@ public class SyncPersistence {
descPersist = new BridgeServerDescriptorPersistence(
(BridgeServerDescriptor) desc, received);
break;
+ case "BridgePoolAssignment":
+ descPersist = new BridgePoolAssignmentPersistence(
+ (BridgePoolAssignment) desc);
+ break;
case "ExitList": // downloaded is part of desc, which to use?
descPersist = new ExitlistPersistence((ExitList) desc, received);
break;
diff --git a/src/main/resources/collector.properties b/src/main/resources/collector.properties
index a4eed7a..b180a3e 100644
--- a/src/main/resources/collector.properties
+++ b/src/main/resources/collector.properties
@@ -18,6 +18,12 @@ BridgedescsPeriodMinutes = 60
# offset in minutes since the epoch and
BridgedescsOffsetMinutes = 9
## the following defines, if this module is activated
+BridgePoolAssignmentsActivated = false
+# period in minutes
+BridgePoolAssignmentsPeriodMinutes = 60
+# offset in minutes since the epoch and
+BridgePoolAssignmentsOffsetMinutes = 9
+## the following defines, if this module is activated
ExitlistsActivated = false
# period in minutes
ExitlistsPeriodMinutes = 60
@@ -146,6 +152,18 @@ ReplaceIpAddressesWithHashes = false
BridgeDescriptorMappingsLimit = inf
#
#
+######## Bridge pool assignments ########
+#
+## Define descriptor sources
+# possible values: Sync, Local
+BridgePoolAssignmentsSources = Local
+## Retrieve files from the following instances.
+## List of URLs separated by comma.
+BridgePoolAssignmentsSyncOrigins = https://collector.torproject.org
+## Relative path to directory to read bridge pool assignment files from
+BridgePoolAssignmentsLocalOrigins = in/bridge-pool-assignments/
+#
+#
######## Exit lists ########
#
## Define descriptor sources
diff --git a/src/test/java/org/torproject/metrics/collector/conf/ConfigurationTest.java b/src/test/java/org/torproject/metrics/collector/conf/ConfigurationTest.java
index 3a69c0c..201d541 100644
--- a/src/test/java/org/torproject/metrics/collector/conf/ConfigurationTest.java
+++ b/src/test/java/org/torproject/metrics/collector/conf/ConfigurationTest.java
@@ -38,7 +38,7 @@ public class ConfigurationTest {
public void testKeyCount() {
assertEquals("The number of properties keys in enum Key changed."
+ "\n This test class should be adapted.",
- 59, Key.values().length);
+ 65, Key.values().length);
}
@Test()
diff --git a/src/test/java/org/torproject/metrics/collector/cron/CollecTorMainTest.java b/src/test/java/org/torproject/metrics/collector/cron/CollecTorMainTest.java
index d0fe173..99f1f48 100644
--- a/src/test/java/org/torproject/metrics/collector/cron/CollecTorMainTest.java
+++ b/src/test/java/org/torproject/metrics/collector/cron/CollecTorMainTest.java
@@ -69,6 +69,7 @@ public class CollecTorMainTest {
switch (marker) {
case "Relay":
case "Bridge":
+ case "BridgePoolAssignments":
case "Exitlist":
case "OnionPerf":
case "Webstats":
1
0

[translation/tbmanual-contentspot] https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit a33b35a917925ef3b7fd1b235db4bc102d3c5e50
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 08:19:50 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tbmanual-contentspot
---
contents+fa.po | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/contents+fa.po b/contents+fa.po
index f7906d92a..35126d270 100644
--- a/contents+fa.po
+++ b/contents+fa.po
@@ -201,6 +201,9 @@ msgid ""
" valid for a single session (until Tor Browser is exited or a [New Identity"
"](/managing-identities/#new-identity) is requested)."
msgstr ""
+"به صورت پیش فرض، مرورگر تور تاریخچه وبگردی شما را نگهداری نمی کند. کوکی ها "
+"فقط برای یک نشست معتبر هستند (تا زمان خروج از مرورگر تور یا درخواست یک [هویت"
+" جدید](/managing-identities/#new-identity))."
#: https//tb-manual.torproject.org/about/
#: (content/about/contents+en.lrtopic.body)
@@ -426,6 +429,12 @@ msgid ""
"connection, but this bar seems to get stuck at a certain point, see the "
"[Troubleshooting](/troubleshooting) page for help solving the problem."
msgstr ""
+"در بیشتر موارد، انتخاب دکمه \"اتصال\" به شما امکان می دهد بدون هیچگونه "
+"تنظیمات اضافی، به شبکه تور وصل شوید. پس از کلیک، نوار وضعیت ظاهر می شود و "
+"پیشرفت اتصال به شبکه تور را نشان می دهد. اگر از یک اینترنت نسبتاً سریع "
+"استفاده می کنید، اما نوار وضعیت اتصال به شبکه تور در یک نقطه مشخص گیر کرده "
+"است، برای کمک به حل این مشکل به صفحه [عیب یابی](/troubleshooting) مراجعه "
+"کنید."
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -459,6 +468,12 @@ msgid ""
" You will then be taken to the [Circumvention](/circumvention) screen to "
"configure a pluggable transport."
msgstr ""
+"در صفحه نخست از شما می پرسد که آیا دسترسی به شبکه تور بر روی ارتباط اینترنتی"
+" شما مسدود یا سانسور شده است؟ اگر فکر می کنید این گونه نیست، گزینه \"خیر\" "
+"را انتخاب کنید. اگر می دانید ارتباط اینترنتی شما سانسور شده است، یا هیچ کدام"
+" از روش ها برای اتصال به شبکه تور کار نکرده است، گزینه \"بله\" را انتخاب "
+"کنید. در این حالت، برای پیکربندی یک Pluggable Transport، به صفحه [دور زدن "
+"سانسور](/circumvention) منتقل می شوید."
#: https//tb-manual.torproject.org/running-tor-browser/
#: (content/running-tor-browser/contents+en.lrtopic.body)
@@ -508,6 +523,12 @@ msgid ""
"so an adversary cannot identify them easily. Using bridges in combination "
"with pluggable transports helps to disguise the fact that you are using Tor."
msgstr ""
+"بیشتر[Pluggable Transport](/transports)ها مانند obfs3 و obfs4، با استفاده از"
+" ایستگاه های پلِ قابل اعتماد، کار می کنند. مانند ایستگاه های معمولی تور، پل "
+"ها نیز توسط افراد داوطلب اجرا می شوند؛ اما برخلاف ایستگاه های معمولی، "
+"ایستگاه های پل، به صورت عمومی منتشر نمی شوند. بنابراین دشمنان شبکه تور نمی "
+"توانند آن ها را به آسانی شناسایی کنند. استفاده از پل ها به همراه Pluggable "
+"Transport ها موجب می شود تا کسی متوجه استفاده شما از تور نشود."
#: https//tb-manual.torproject.org/bridges/
#: (content/bridges/contents+en.lrtopic.body)
@@ -843,6 +864,11 @@ msgid ""
"transports”. See the [Pluggable Transports](/en-US/transports) page for more"
" information on the types of transport that are currently available."
msgstr ""
+"گاهی دسترسی مستقیم به شبکه تور، توسط شرکت فراهم کننده اینترنت - ISP - یا "
+"سایر نهادهای دولتی، مسدود می شود و نمی توان به شبکه وصل شد. مرورگر تور برای "
+"برطرف کردن این مسدودیت ها، ابزارهایی را برای دور زدن سانسور در نظر گرفته است"
+" که با نام Pluggable Transport شناخته می شوند. برای آگاهی بیشتر در این باره،"
+" صفحه[Pluggable Transport](/en-US/transports) را ببینید."
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -906,6 +932,9 @@ msgid ""
"way (for more details, see the [Pluggable Transports](/en-US/transports) "
"page), and their effectiveness depends on your individual circumstances."
msgstr ""
+"هر کدام از انواع Pluggable Transport هایی که در پنجره راه انداز تور لیست شده"
+" اند، با روش های متفاوتی نسبت به یکدیگر کار می کنند(برای آگاهی از جزییات "
+"بیشتر، صفحه[Pluggable Transport](/en-US/transports)را ببینید)."
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
@@ -913,6 +942,8 @@ msgid ""
"If you are trying to circumvent a blocked connection for the first time, you"
" should try the different transports: obfs4, fte, and meek-azure."
msgstr ""
+"اگر برای نخستین با است که می خواهید یک ارتباط سانسور شده را دور بزنید، نیاز "
+"است تا یکی از انواع obfs4 یا fte و یا meek-azure را آزمایش کنید."
#: https//tb-manual.torproject.org/circumvention/
#: (content/circumvention/contents+en.lrtopic.body)
1
0

[translation/policies-code_of_conducttxtpot] https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_conducttxtpot
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit b56d42ac3a4d6464b93587ade1aae1da64d9d1c5
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 08:16:49 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_co…
---
code_of_conduct+fr.po | 132 +++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 115 insertions(+), 17 deletions(-)
diff --git a/code_of_conduct+fr.po b/code_of_conduct+fr.po
index be7ece2d2..24bad301e 100644
--- a/code_of_conduct+fr.po
+++ b/code_of_conduct+fr.po
@@ -163,6 +163,8 @@ msgid ""
" DON'T: Treat honest mistakes as an excuse to hassle people. Mistakes are for\n"
" learning.\n"
msgstr ""
+"NE PAS FAIRE: Traitez les erreurs honnêtes comme une excuse pour embêter des gens. Les erreurs sont pour\n"
+" apprendre.\n"
#. type: Plain text
#: ../code_of_conduct.txt:46
@@ -192,7 +194,9 @@ msgstr ""
msgid ""
"1. Purpose\n"
"============================================================\n"
-msgstr "1. Propos\n"
+msgstr ""
+"1. Propos\n"
+"============================================================\n"
#. type: Plain text
#: ../code_of_conduct.txt:63
@@ -254,7 +258,9 @@ msgstr ""
msgid ""
"2. Be your best self\n"
"============================================================\n"
-msgstr "2. Faîtes le meilleur de vous-même.\n"
+msgstr ""
+"2. Faîtes le meilleur de vous-même.\n"
+"============================================================\n"
#. type: Plain text
#: ../code_of_conduct.txt:80
@@ -387,11 +393,13 @@ msgid ""
"Posting or threatening to post other people’s personally identifying "
"information (\"doxing\") without their consent."
msgstr ""
+"Afficher ou menacer de publier des informations d’identité personnelle "
+"(\"doxing\") d’autres personnes sans leur consentement."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:127
msgid "Personal insults or attacks, particularly those related to:"
-msgstr ""
+msgstr "Insultes ou attaques personnelles, en particulier celles liées à:"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:129
@@ -401,7 +409,7 @@ msgstr "experience"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:131
msgid "gender identity or expression"
-msgstr ""
+msgstr "identité ou expression de genre"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:133
@@ -416,12 +424,12 @@ msgstr "famille"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:137
msgid "relationships"
-msgstr ""
+msgstr "relations"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:139
msgid "ability (whether bodily or mental)"
-msgstr ""
+msgstr "capacité (physique ou mentale)"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:141
@@ -431,12 +439,12 @@ msgstr "apparence personnel"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:143
msgid "socioeconomic status"
-msgstr ""
+msgstr "Statut socioéconomique"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:145
msgid "body size"
-msgstr ""
+msgstr "taille du corps"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:147
@@ -446,7 +454,7 @@ msgstr "race"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:149
msgid "ethnicity"
-msgstr ""
+msgstr "éthnicité"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:151
@@ -466,7 +474,7 @@ msgstr "nationalité"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:157
msgid "membership in a disadvantaged and/or underrepresented group"
-msgstr ""
+msgstr "appartenance à un groupe défavorisé et / ou sous-représenté"
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:161
@@ -475,6 +483,9 @@ msgid ""
"information. You should have someone's consent before recording these "
"things, and before posting them publicly."
msgstr ""
+"Photographie, enregistrement audio ou enregistrement d'informations "
+"personnelles inappropriés. Vous devriez avoir le consentement de quelqu'un "
+"avant d'enregistrer ces choses et avant de les publier publiquement."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:164
@@ -482,6 +493,8 @@ msgid ""
"Inappropriate physical contact. You should have someone’s consent before "
"touching them."
msgstr ""
+"Contact physique inapproprié. Vous devriez avoir le consentement de "
+"quelqu'un avant de le toucher."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:167
@@ -489,17 +502,22 @@ msgid ""
"Unwelcome sexual attention: this includes sexualized comments or jokes, "
"inappropriate touching, groping, and unwelcome sexual advances."
msgstr ""
+"Attention sexuelle importune: cela inclut les commentaires ou les blagues "
+"sexualisés, les attouchements inappropriés, les tâtonnements et les avances "
+"sexuelles importunes."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:169
msgid "Deliberate intimidation, stalking or following (online or in person)."
-msgstr ""
+msgstr "Intimidation délibérée, traque ou suivi (en ligne ou en personne)."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:172
msgid ""
"Deliberately undermining the spirit of this code while following the letter."
msgstr ""
+"Porter délibérément atteinte à l'esprit de ce code tout en suivant la "
+"lettre."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:175
@@ -507,16 +525,18 @@ msgid ""
"Sustained disruption of any community events, including talks, "
"presentations, and online conversations."
msgstr ""
+"Perturbation durable de tout événement communautaire, y compris des "
+"causeries, des présentations et des conversations en ligne."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:177
msgid "Deliberately pushing against someone's stated boundaries."
-msgstr ""
+msgstr "Pousser délibérément contre les limites déclarées de quelqu'un."
#. type: Bullet: ' * '
#: ../code_of_conduct.txt:179
msgid "Advocating for, or encouraging, any of the above behavior."
-msgstr ""
+msgstr "Défendre ou encourager l'un des comportements ci-dessus."
#. type: Plain text
#: ../code_of_conduct.txt:182
@@ -525,6 +545,8 @@ msgid ""
"4. Unacceptable behavior has consequences\n"
"============================================================\n"
msgstr ""
+"4. Un comportement inacceptable a des conséquences \n"
+"=============================================== ==========\n"
#. type: Plain text
#: ../code_of_conduct.txt:188
@@ -534,6 +556,11 @@ msgid ""
"authority. People in formal or informal leadership roles must model the "
"highest standards of behavior."
msgstr ""
+"Nous ne tolérerons aucun comportement inacceptable de la part d’un membre de"
+" la communauté. Nous ne ferons pas d'exceptions pour les sponsors et ceux "
+"qui ont un pouvoir décisionnel. Les personnes occupant des rôles de "
+"direction formels ou informels doivent adopter les normes de comportement "
+"les plus strictes."
#. type: Plain text
#: ../code_of_conduct.txt:192
@@ -542,6 +569,10 @@ msgid ""
"expected to comply immediately. Please don't step in on someone else's "
"behalf without their consent."
msgstr ""
+"Toute personne à laquelle un autre membre de la communauté demande de mettre"
+" fin à un comportement inacceptable doit se conformer immédiatement. S'il "
+"vous plaît, n'intervenez pas au nom de quelqu'un d'autre sans son "
+"consentement."
#. type: Plain text
#: ../code_of_conduct.txt:195
@@ -561,6 +592,11 @@ msgid ""
"and information can be found on the Community Council wiki [1]. You can "
"contact the whole Community council:"
msgstr ""
+"Le conseil de communauté est un organe élu de contributeurs Tor Core qui "
+"peut aider à la résolution de conflits intra-communautaires. Les politiques "
+"et informations du conseil communautaire se trouvent sur le wiki du conseil "
+"communautaire [1]. Vous pouvez contacter l'ensemble du conseil de "
+"communauté:"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:203
@@ -584,6 +620,13 @@ msgid ""
"involved in any discussion or documentation of the incident. More about the "
"Community Council can be found in the guidelines [2]."
msgstr ""
+"Toutefois, si vous estimez qu'il existe un conflit d'intérêts avec l'un des "
+"membres du conseil, vous pouvez contacter les membres individuellement. Les "
+"clés GPG des membres du conseil sont répertoriées sur le wiki du conseil de "
+"communauté. En cas de conflit d'intérêts, le membre du conseil concerné se "
+"récuse. Ils ne seront impliqués dans aucune discussion ou documentation de "
+"l'incident. Vous trouverez plus d'informations sur le conseil communautaire "
+"dans les lignes directrices [2]."
#. type: Plain text
#: ../code_of_conduct.txt:215
@@ -592,6 +635,8 @@ msgid ""
"6. What to do if you witness unacceptable behavior\n"
"============================================================\n"
msgstr ""
+"6. Que faire si vous êtes témoin d'un comportement inacceptable\n"
+" =============================================== ==========\n"
#. type: Plain text
#: ../code_of_conduct.txt:230
@@ -610,6 +655,21 @@ msgid ""
"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 ""
+"Si vous êtes sujet à un comportement inacceptable ou si vous en êtes témoin,"
+" ou si vous avez d'autres préoccupations, veuillez en informer le conseil "
+"communautaire le plus rapidement possible. Vous pouvez contacter le conseil "
+"de communauté en personne ou à tor-community-council(a)lists.torproject.org. "
+"Les membres actuels du conseil sont listés sur le wiki [1]. La réaction du "
+"conseil de communauté aux incidents variera au cas par cas. Le conseil "
+"s'efforcera de réagir immédiatement à l'incident. Le conseil accordera la "
+"priorité à la sécurité de la personne qui a été blessée ou risque de l'être."
+" Les personnes qui ont subi un préjudice ou qui risquent de l'être peuvent "
+"retirer le rapport d'incident à tout moment. Nous ne ferons jamais rien sans"
+" le consentement de la personne qui a subi un préjudice ou qui risque de "
+"l'être, sauf dans des situations où il existe un danger de danger imminent "
+"ou de préjudice pour quiconque. Vous trouverez plus d'informations sur les "
+"rapports d'incident et les politiques de réponse du conseil communautaire "
+"sur son wiki [1]."
#. type: Plain text
#: ../code_of_conduct.txt:233
@@ -618,6 +678,8 @@ msgid ""
"7. What the person reporting a violation can expect\n"
"============================================================\n"
msgstr ""
+"7. Ce à quoi la personne qui signale une violation peut s'attendre\n"
+"=============================================== ==========\n"
#. type: Plain text
#: ../code_of_conduct.txt:242
@@ -631,6 +693,14 @@ msgid ""
"format. The next steps in an incident response will vary on a case-by-case "
"basis."
msgstr ""
+"Le conseil communautaire donne la priorité à la sécurité et au bien-être de "
+"toute personne qui estime avoir été lésée ou risquant de l'être. Toute "
+"personne signalant un problème au Conseil de la communauté peut s’attendre à"
+" ce que son rapport soit pris au sérieux. Les rapports initiaux peuvent être"
+" pris sous forme écrite ou verbale. Si l'incident ne nécessite pas de "
+"résolution immédiate, un rapport écrit peut être partagé avec le conseil de "
+"communauté dans un format crypté. Les prochaines étapes d'une intervention "
+"en cas d'incident varieront au cas par cas."
#. type: Plain text
#: ../code_of_conduct.txt:245
@@ -639,6 +709,8 @@ msgid ""
"8. How the Community Council responds to incidents\n"
"============================================================\n"
msgstr ""
+"8. Comment le conseil communautaire répond aux incidents\n"
+"=============================================== ==========\n"
#. type: Plain text
#: ../code_of_conduct.txt:252
@@ -650,6 +722,13 @@ msgid ""
"appealed by following the appeals process in the Community Council "
"Guidelines [1]."
msgstr ""
+"Si un membre de la communauté adopte un comportement inacceptable, le "
+"conseil de communauté peut prendre toute mesure qu'il juge appropriée, y "
+"compris, sans toutefois s'y limiter, un avertissement, une médiation "
+"informelle, une interdiction temporaire ou une expulsion permanente de la "
+"communauté. Les actions et décisions du conseil communautaire peuvent faire "
+"l'objet d'un appel en suivant la procédure d'appel décrite dans les lignes "
+"directrices du conseil communautaire [1]."
#. type: Plain text
#: ../code_of_conduct.txt:255
@@ -658,16 +737,19 @@ msgid ""
"9. Scope of this document\n"
"============================================================\n"
msgstr ""
+"9. Portée de ce document\n"
+"=============================================== ==========\n"
+"\n"
#. type: Plain text
#: ../code_of_conduct.txt:258
msgid "This code of conduct covers all community participants:"
-msgstr ""
+msgstr "Ce code de conduite couvre tous les participants de la communauté:"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:260
msgid "paid and unpaid contributors"
-msgstr ""
+msgstr "cotisations payés et non payés"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:262
@@ -677,22 +759,25 @@ msgstr "commanditaires"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:264
msgid "other guests"
-msgstr ""
+msgstr "autres invités"
#. type: Plain text
#: ../code_of_conduct.txt:266
msgid "when interacting:"
msgstr ""
+"lors de l'interaction:\n"
+" "
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:268
msgid "in all online and in-person community venues"
-msgstr ""
+msgstr "dans tous les lieux communautaires en ligne et en personne"
#. type: Bullet: ' - '
#: ../code_of_conduct.txt:270
msgid "in one-on-one communications that relate to community work"
msgstr ""
+"dans des communications individuelles en lien avec le travail communautaire"
#. type: Plain text
#: ../code_of_conduct.txt:277
@@ -704,6 +789,13 @@ msgid ""
"this Code while we are working on Tor, and take care not to undermine it in "
"the rest of our time."
msgstr ""
+"Ce code de conduite et les procédures associées s’appliquent également aux "
+"comportements inacceptables survenant en dehors du cadre des activités de la"
+" communauté lorsque de tels comportements sont susceptibles d’affecter la "
+"sécurité et le bien-être des membres de la communauté. En tant que membres "
+"de la communauté Tor, nous soutenons et suivons ce code pendant que nous "
+"travaillons sur Tor et prenons soin de ne pas le saper pendant le reste de "
+"notre temps."
#. type: Plain text
#: ../code_of_conduct.txt:280
@@ -712,6 +804,8 @@ msgid ""
"10. License and attribution\n"
"============================================================\n"
msgstr ""
+"10. License et attribution\n"
+"============================================================\n"
#. type: Plain text
#: ../code_of_conduct.txt:284
@@ -728,6 +822,8 @@ 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 ""
+"Ce code de conduite utilise un libellé et un cadre du code de conduite du "
+"citoyen, qui est partagé sous une licence CC-BY-SA: CitizenCodeofconduct.org"
#. type: Plain text
#: ../code_of_conduct.txt:289
@@ -735,3 +831,5 @@ 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/torcheck] https://gitweb.torproject.org/translation.git/commit/?h=torcheck
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit 0973978d2e30d2e09d08327fececb578aa0a2cbd
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 07:51:51 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=torcheck
---
fa/torcheck.po | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fa/torcheck.po b/fa/torcheck.po
index 35934163c..76669b7e9 100644
--- a/fa/torcheck.po
+++ b/fa/torcheck.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tor Project\n"
"POT-Creation-Date: 2012-02-16 20:28+PDT\n"
-"PO-Revision-Date: 2019-09-19 07:16+0000\n"
+"PO-Revision-Date: 2019-09-19 07:31+0000\n"
"Last-Translator: MYZJ\n"
"Language-Team: Persian (http://www.transifex.com/otf/torproject/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -30,7 +30,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "Congratulations. This browser is configured to use Tor."
-msgstr "تبریک. این مرورگر آماده استفاده از تور است."
+msgstr "تبریک. این مرورگر برای استفاده از تور پیکربندی شده است."
msgid ""
"Please refer to the <a href=\"https://www.torproject.org/\">Tor website</a> "
@@ -44,7 +44,7 @@ msgstr "یک بهروزرسانی امنیتی برای مرورگر تور
msgid ""
"<a href=\"https://www.torproject.org/download/\">Click here to go to the "
"download page</a>"
-msgstr "<a href=\"https://www.torproject.org/download/\">برای رفتن به صفحه دانلود، این جا کلیک کنید</a>"
+msgstr "<a href=\"https://www.torproject.org/download/\">برای رفتن به صفحه دانلود مرورگر تور، این جا کلیک کنید</a>"
msgid "Sorry. You are not using Tor."
msgstr "متاسفیم. شما از تور استفاده نمیکنید."
@@ -71,13 +71,13 @@ msgstr "برای آگاهی بیشتر در مورد این گره پایانی
msgid ""
"The Tor Project is a US 501(c)(3) non-profit dedicated to the research, "
"development, and education of online anonymity and privacy."
-msgstr "پروژه تور، یک سازمان غیر انتفاعی آمریکایی بر اساس قوانین سرویس درآمد داخلی آمریکا با کد 501(c)(3) می باشد.\nرویکرد این پروژه، در زمینه پژوهش، توسعه و آموزش درباره ناشناس بودن و حفاظت از حریم شخصی در فضای آنلاین می باشد."
+msgstr "پروژه تور، یک سازمان غیر انتفاعی آمریکایی بر اساس قوانین سرویس درآمد داخلی آمریکا با کد 501(c)(3) می باشد. رویکرد این پروژه، در زمینه پژوهش، توسعه و آموزش درباره ناشناس بودن و حفاظت از حریم شخصی در فضای آنلاین می باشد."
msgid "Learn More »"
msgstr "بیشتر بدانید »"
msgid "Go"
-msgstr "برو"
+msgstr "تایید"
msgid "Donate to Support Tor"
msgstr "برای پشتیبانی و حمایت از تور کمک مالی کنید"
1
0

[translation/policies-code_of_conducttxtpot] https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_conducttxtpot
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit 1d91bcb1527e0cab7555b1cecaef68d405550cad
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 07:46:48 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=policies-code_of_co…
---
code_of_conduct+fr.po | 737 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 737 insertions(+)
diff --git a/code_of_conduct+fr.po b/code_of_conduct+fr.po
new file mode 100644
index 000000000..be7ece2d2
--- /dev/null
+++ b/code_of_conduct+fr.po
@@ -0,0 +1,737 @@
+# 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:
+# David Georges, 2019
+# AO <ao(a)localizationlab.org>, 2019
+# robin Amielh <robinamielh(a)gmail.com>, 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: robin Amielh <robinamielh(a)gmail.com>, 2019\n"
+"Language-Team: French (https://www.transifex.com/otf/teams/1519/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\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 ""
+"Code de conduite du Projet Tor\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:6
+msgid "Statement of Intent:"
+msgstr "Déclaration d'intention:"
+
+#. 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 ""
+"Le Projet Tor est déterminé à promouvoir un environnement et une communauté "
+"qui favorisent l’intégration. Tor est un lieu où les gens devraient avoir le"
+" sentiment de pouvoir s’impliquer, partager leur point de vue et participer "
+"en toute sécurité."
+
+#. 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 ""
+"Ce code de conduite s’applique au projet Tor dans son ensemble. Il est "
+"destiné à fournir des lignes directrices aux contributeurs. Les employés et "
+"les sous-traitants de The Tor Project, Inc. (TPI) sont également soumis aux "
+"politiques et procédures de la société. Ces personnes ne doivent pas hésiter"
+" à contacter les ressources humaines pour des questions ou des "
+"préoccupations."
+
+#. 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 ""
+"Ce code de conduite n'est ni exhaustif ni complet. C’est un effort continu "
+"pour résumer notre compréhension commune. Nous souhaitons créer un "
+"environnement accueillant et sûr afin de pouvoir travailler ensemble afin de"
+" rechercher des solutions performantes. Nous nous réservons le droit de "
+"déroger à l'application stricte de ce code. Toute déviation doit produire un"
+" résultat plus juste et conforme à nos valeurs. Nous comprenons que garder "
+"un document vivant pertinent et «patché» implique des efforts soutenus."
+
+#. 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. Résumé : Ne soyez idiot. Soyez plutôt génial.\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 ""
+"La communauté Tor devrait être un bon endroit où les gens sont heureux d'y "
+"être."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:31
+#, no-wrap
+msgid " DO: Be kind, thoughtful, and considerate.\n"
+msgstr ""
+"FAIRE: Soyez gentil, réfléchie et attentionné.\n"
+"\n"
+"\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 ""
+"FAIRE: Faites de Tor un endroit où les gens sont heureux et à l'aise.\n"
+"\n"
+"\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 ""
+"FAIRE: Rappelez-vous: nous contribuons tous; nous apprenons tous. Personne "
+"n'est né un 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 ""
+"FAIRE: céder le sol. Écoutez. Assurez-vous que tout le monde se fasse "
+"entendre.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:40
+#, no-wrap
+msgid " DON'T: Insult, harass, intimidate, or be a jerk.\n"
+msgstr ""
+"NE PAS FAIRE: insulter, harceler, intimider ou être un imbécile.\n"
+"\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 ""
+
+#. 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 ""
+"NE PAS FAIRE: rechercher des moyens de respecter la lettre de ce code tout en violant son\n"
+" esprit.\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 FAIRE: E-mails vifs à la communauté - council(a)lists.torproject.org avec\n"
+" questions ou préoccupations. Clé publique:\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. Propos\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 ""
+"L'un des principaux objectifs de la communauté Tor est d'inclure de nombreux"
+" contributeurs. Nous voulons inclure des contributeurs issus des milieux les"
+" plus variés et les plus divers. En tant que tels, nous nous engageons à "
+"fournir à tous un environnement amical, sûr et accueillant, quelles que "
+"soient leur expérience, identité ou expression de genre, orientation "
+"sexuelle, famille, relations, aptitudes (physiques ou psychologiques), "
+"apparence personnelle, statut socio-économique, corps taille, race, "
+"appartenance ethnique, âge, religion, nationalité ou appartenance à un "
+"groupe défavorisé et / ou sous-représenté."
+
+#. 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 ""
+"Un environnement sûr signifie un environnement exempt d'abus, qu'il soit "
+"isolé ou systémique. Nous reconnaissons explicitement que tolérer les abus "
+"est un problème de sécurité. Permettre aux abuseurs et aux personnes "
+"malveillantes de perturber notre communauté met en danger nos logiciels, nos"
+" développeurs et nos utilisateurs."
+
+#. 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 ""
+"Ce code de conduite définit nos attentes envers tous ceux qui participent à "
+"notre communauté, ainsi que les conséquences d'un comportement inacceptable."
+
+#. 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 ""
+"Nous invitons tous ceux qui participent au projet Tor à nous aider à créer "
+"des expériences sûres et positives pour tous."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:77
+#, no-wrap
+msgid ""
+"2. Be your best self\n"
+"============================================================\n"
+msgstr "2. Faîtes le meilleur de vous-même.\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:80
+msgid ""
+"The following behaviors are expected and requested of all community members:"
+msgstr ""
+"Les comportements suivants sont attendus et requis de tous les membres de la"
+" communauté:"
+
+#. 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 ""
+"Participer de manière active et honnête. Ce faisant, vous contribuez à la "
+"santé et à la longévité de cette communauté."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:85
+msgid "Exercise consideration and respect in your speech and actions."
+msgstr ""
+"Exercez la considération et le respect dans votre discours et vos actions."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:87
+msgid "Attempt collaboration and dialog before engaging in conflict."
+msgstr ""
+"Essayez de collaborer et de dialoguer avant de vous engager dans un conflit."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:89
+msgid ""
+"Refrain from demeaning, discriminatory, or harassing behavior and speech."
+msgstr ""
+"S'abstenir de tout comportement et discours humiliants, discriminatoires ou "
+"harcelants."
+
+#. 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 ""
+"Soyez conscient de votre environnement et de celui de vos collègues. Alertez"
+" les leaders de la communauté si vous remarquez:"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:94
+msgid "a dangerous situation"
+msgstr "une dangereuse situation"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:96
+msgid "someone in distress"
+msgstr "quelqu'un en détresse"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:98
+msgid "violations of this code of conduct, even if they seem minor"
+msgstr "violations de ce code de conduite, même si elles semblent mineures"
+
+#. 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 ""
+"Rappelez-vous que les lieux d’événement communautaires peuvent être partagés"
+" avec les membres du public. S'il vous plaît soyez respectueux envers tous "
+"ceux qui utilisent ces emplacements."
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:103
+msgid "Respect the privacy of your fellow community members."
+msgstr "Respectez la vie privée des membres de votre communauté."
+
+#. type: Plain text
+#: ../code_of_conduct.txt:106
+#, no-wrap
+msgid ""
+"3. Unacceptable behaviors\n"
+"============================================================\n"
+msgstr ""
+"3. Comportements inacceptables\n"
+"============================================================\n"
+
+#. type: Plain text
+#: ../code_of_conduct.txt:109
+msgid "The following behaviors are unacceptable within our community:"
+msgstr "Les comportements suivants sont inacceptables dans notre communauté:"
+
+#. 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, agression sexuelle, menaces de violence ou langage violent dirigé "
+"contre une autre personne, en particulier la violence à l'encontre d'une "
+"personne ou d'un groupe sur la base d'une caractéristique protégée. (Le port"
+" d'armes peut constituer une intimidation ou une menace de violence.)"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:117
+msgid ""
+"Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory"
+" jokes and language."
+msgstr ""
+"Blagues et langage sexistes, racistes, homophobes, transphobes, capables ou "
+"autrement discriminatoires."
+
+#. 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 ""
+"Poster ou afficher spontanément du matériel sexuellement explicite ou "
+"violent. (S'il est nécessaire de partager ce matériel lorsque vous "
+"travaillez à la mission de Tor, faites-le avec tact. Sachez que beaucoup de "
+"gens ne veulent pas le voir.)"
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:125
+msgid ""
+"Posting or threatening to post other people’s personally identifying "
+"information (\"doxing\") without their consent."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:127
+msgid "Personal insults or attacks, particularly those related to:"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:129
+msgid "experience"
+msgstr "experience"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:131
+msgid "gender identity or expression"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:133
+msgid "sexual orientation"
+msgstr "orientation sexuelle"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:135
+msgid "family"
+msgstr "famille"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:137
+msgid "relationships"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:139
+msgid "ability (whether bodily or mental)"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:141
+msgid "personal appearance"
+msgstr "apparence personnel"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:143
+msgid "socioeconomic status"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:145
+msgid "body size"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:147
+msgid "race"
+msgstr "race"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:149
+msgid "ethnicity"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:151
+msgid "age"
+msgstr "âge"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:153
+msgid "religion"
+msgstr "religion"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:155
+msgid "nationality"
+msgstr "nationalité"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:157
+msgid "membership in a disadvantaged and/or underrepresented group"
+msgstr ""
+
+#. 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 ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:164
+msgid ""
+"Inappropriate physical contact. You should have someone’s consent before "
+"touching them."
+msgstr ""
+
+#. 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 ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:169
+msgid "Deliberate intimidation, stalking or following (online or in person)."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:172
+msgid ""
+"Deliberately undermining the spirit of this code while following the letter."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:175
+msgid ""
+"Sustained disruption of any community events, including talks, "
+"presentations, and online conversations."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:177
+msgid "Deliberately pushing against someone's stated boundaries."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: ../code_of_conduct.txt:179
+msgid "Advocating for, or encouraging, any of the above behavior."
+msgstr ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:182
+#, no-wrap
+msgid ""
+"4. Unacceptable behavior has consequences\n"
+"============================================================\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:195
+#, no-wrap
+msgid ""
+"5. Where to go for help\n"
+"============================================================\n"
+msgstr ""
+"5. Où obtenir de l’aide\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 ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:203
+msgid "if you have questions or concerns about the code of conduct, or"
+msgstr ""
+"si vous avez des questions ou des préoccupations au sujet du code de "
+"conduite, ou"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:205
+msgid "if you feel that you have witnessed a code of conduct violation"
+msgstr "si vous pensez avoir été témoin d’une violation du code de conduite"
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:215
+#, no-wrap
+msgid ""
+"6. What to do if you witness unacceptable behavior\n"
+"============================================================\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:233
+#, no-wrap
+msgid ""
+"7. What the person reporting a violation can expect\n"
+"============================================================\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:245
+#, no-wrap
+msgid ""
+"8. How the Community Council responds to incidents\n"
+"============================================================\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:255
+#, no-wrap
+msgid ""
+"9. Scope of this document\n"
+"============================================================\n"
+msgstr ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:258
+msgid "This code of conduct covers all community participants:"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:260
+msgid "paid and unpaid contributors"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:262
+msgid "sponsors"
+msgstr "commanditaires"
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:264
+msgid "other guests"
+msgstr ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:266
+msgid "when interacting:"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:268
+msgid "in all online and in-person community venues"
+msgstr ""
+
+#. type: Bullet: ' - '
+#: ../code_of_conduct.txt:270
+msgid "in one-on-one communications that relate to community work"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: ../code_of_conduct.txt:280
+#, no-wrap
+msgid ""
+"10. License and attribution\n"
+"============================================================\n"
+msgstr ""
+
+#. 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 ""
+"Ce code de conduite est partagé sous une licence Creative Commons CC-BY-SA "
+"4.0 International."
+
+#. 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 ""
+
+#. 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
0

[translation/torcheck] https://gitweb.torproject.org/translation.git/commit/?h=torcheck
by translation@torproject.org 19 Sep '19
by translation@torproject.org 19 Sep '19
19 Sep '19
commit ba8168f6b09efa5589e25259e1268670c5147fd5
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 19 07:21:49 2019 +0000
https://gitweb.torproject.org/translation.git/commit/?h=torcheck
---
fa/torcheck.po | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/fa/torcheck.po b/fa/torcheck.po
index 4e34b2121..35934163c 100644
--- a/fa/torcheck.po
+++ b/fa/torcheck.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tor Project\n"
"POT-Creation-Date: 2012-02-16 20:28+PDT\n"
-"PO-Revision-Date: 2019-08-30 10:57+0000\n"
+"PO-Revision-Date: 2019-09-19 07:16+0000\n"
"Last-Translator: MYZJ\n"
"Language-Team: Persian (http://www.transifex.com/otf/torproject/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -71,10 +71,10 @@ msgstr "برای آگاهی بیشتر در مورد این گره پایانی
msgid ""
"The Tor Project is a US 501(c)(3) non-profit dedicated to the research, "
"development, and education of online anonymity and privacy."
-msgstr "پروژهٔ تور سازمان غیر انتفاعی آمریکایی 501(c)(3) مختص پژوهش، توسعه و آموزش در زمین ناشناسی و حریم شخصی آنلاين هست."
+msgstr "پروژه تور، یک سازمان غیر انتفاعی آمریکایی بر اساس قوانین سرویس درآمد داخلی آمریکا با کد 501(c)(3) می باشد.\nرویکرد این پروژه، در زمینه پژوهش، توسعه و آموزش درباره ناشناس بودن و حفاظت از حریم شخصی در فضای آنلاین می باشد."
msgid "Learn More »"
-msgstr "بیشتر بدانید»"
+msgstr "بیشتر بدانید »"
msgid "Go"
msgstr "برو"
@@ -83,7 +83,7 @@ msgid "Donate to Support Tor"
msgstr "برای پشتیبانی و حمایت از تور کمک مالی کنید"
msgid "Tor Q&A Site"
-msgstr "تارنمای پرسش و پاسخ Tor"
+msgstr "وبسایت پرسش و پاسخ تور"
msgid "Volunteer"
msgstr "داوطلب"
@@ -95,13 +95,13 @@ msgid "JavaScript is disabled."
msgstr "جاوا اسکریپت غیر فعال است."
msgid "However, it does not appear to be Tor Browser."
-msgstr "با این حال، به نظر نمی رسد به مرورگر Tor."
+msgstr "با این حال، به نظر نمی رسد مرورگر تور باشد."
msgid "Run a Relay"
msgstr "اجرای یک رله"
msgid "Stay Anonymous"
-msgstr "ناشناس بمان"
+msgstr "ناشناس بمانید"
msgid "Relay Search"
-msgstr "رله جستجو"
+msgstr "جستجوی رله"
1
0