This is an automated email from the git hooks/post-receive script.
pierov pushed a change to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
from 541589634a77 Bug 1798623: Update time zone data to tzdata2022f (ESR102 backport). r=#platform-i18n-reviewers, a=dmeehan add 3ef81d9b3b60 Bug 1774413: Bundled fonts are not picked up on macOS r=jfkthame add bea9010507d7 Bug 1769030: Add a configure flag to load policies only from the local policies.json file r=mkaply,glandium add 4196b578daee Bug 1784588 - Fix SplitDriverVersion when the string has less than 4 numbers. r=aosmond add 10c867009a98 Bug 1768907 - Part 1: Make browser.privatebrowsing.autostart a static pref. r=handyman,necko-reviewers add 3e2f61607e82 Bug 1768907 - Part 2: nsTransferable disk-leaks when private browsing mode is enabled by default. r=handyman add 40539cbb03ec Bug 1670885 - Fix post-fork() handlers for PHC/LogAlloc to work on macOS using unfair locks r=glandium add 5fc5fbd94612 Bug 1670885 - Replace deprecated NSSpinLocks with os_unfair_locks in the memory allocator r=glandium add 09c27cecefe3 Bug 1774458 - Use undocumented, non-public adaptive spinlocks on macOS 10.15+, revert to user-space spinlocks on older versions r=pbone add 686cf978b10d Bug 1784018 - Remove deprecated OSSpinLocks r=glandium add 8dbe174bbc2f Revert "Bug 1724777, optimize suppressed MicroTask handling, r=mccr8 a=RyanVM" add 789a8415b241 fixup! Bug 1761389 - Add and use new PDF-specific document icon on Windows. r=bhearsum add d35625b614e7 Bug 41454: Move focus after calling openPreferences for a sub-category. add 15fcc0f014dc Bug 41116: Normalize system fonts. add 720c3ccf8729 Tweaks to the build system add bbd4cabc8f45 Bug 41117: using MOZ_PROXY_BYPASS_PROTECTION disable share menu on mac and windows, and restpre email link on mac add 4c3d83a30071 Adding issue template for bugs. add bbde4283be7a Base Browser's .mozconfigs. add f332cd4d106a Bug 41108: Remove privileged macOS installation from 102 add b01f23945351 Bug 41149: Re-enable DLL injection protection in all builds not just nightlies add 890a463f70df Bug 24796: Comment out excess permissions from GeckoView add 953d422aa342 Bug 25741: TBA: Disable GeckoNetworkManager add 0f50ad270a34 Bug 28125: Prevent non-Necko network connections add b52775f5a599 Bug 12974: Disable NTLM and Negotiate HTTP Auth add 2b017c1b2f4e Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots add 8433f9c856d5 Bug 16285: Exclude ClearKey system for now add 70c4552874b8 Bug 21431: Clean-up system extensions shipped in Firefox add a880b01c43ee Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc. add be3f9741dbcf Bug 41457: Remove Mozilla permissions add b898d5789fae Bug 40002: Remove about:ion add 20a355885469 Bug 26353: Prevent speculative connect that violated FPI. add 44e037bb8992 Bug 31740: Remove some unnecessary RemoteSettings instances add 26c26384e454 Bug 30541: Disable WebGL readPixel() for web content add fa4c413df733 Bug 28369: Stop shipping pingsender executable add 14093eab1428 Bug 40073: Disable remote Public Suffix List fetching add 61f4c44eeb88 Firefox preference overrides. add 93cfb0c61295 Bug 41043: Hardcode the UI font on Linux add f15dfabb276d Bug 30605: Honor privacy.spoof_english in Android add 4c41389eb233 Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView add 5bdce6bae091 Bug 40171: Make WebRequest and GeckoWebExecutor First-Party aware add 7b3270fb4364 Bug 26345: Hide tracking protection UI add dcd37e4f76f2 Bug 9173: Change the default Firefox profile directory to be relative. add 4fb3bf2d8ba5 Bug 18800: Remove localhost DNS lookup in nsProfileLock.cpp add c57ba7448e2b Bug 27604: Fix addon issues when moving the profile directory add 609f160a3841 Bug 13028: Prevent potential proxy bypass cases. add dfa78455e70f Bug 11641: Disable remoting by default. add d2a120865a6f Bug 23104: Add a default line height compensation add a9eaddbcbc7a Bug 40309: Avoid using regional OS locales add d3692138f763 Bug 40432: Prevent probing installed applications add 033d9e956235 Bug 41434: Letterboxing, preemptively apply margins in a global CSS rule to mitigate race conditions on newly created windows and tabs. add b5b4ca4752be Bug 41434: Letterboxing, improve logging. add 99f8a33f4135 Bug 31064: Letterboxing, exempt browser extensions. add b602ad18804d Bug 32411: Letterboxing, exempt view-source: URIs. add c31dba58a686 Bug 32220: Improve the letterboxing experience add 0e3e8f8e0334 Bug 40069: Add helpers for message passing with extensions add 13e4dd20b07b Bug 40253: Explicitly allow NoScript in Private Browsing mode. add f0e75b468e97 Bug 41369: Improve Firefox language settings for multi-lingual packages add b68f4f8a1591 Bug 41371: Temporary hack to fix language selector popup position add af6ad37ee3c7 Bug 41417: Always prompt users to restart after changing language add 16b3cf5ec73f Bug 40925: Implemented the Security Level component add c032e368d3f2 Bug 40926: Implemented the New Identity feature add f49d1f997d23 Bug 41089: Add tor-browser build scripts + Makefile to tor-browser add 47dcea75a413 Bug 2176: Rebrand Firefox to TorBrowser add 0baeea91b89a Bring back old Firefox onboarding add 7cbd0729480f Bug 26961: New user onboarding. add e31bd50fe9e5 TB3: Tor Browser's official .mozconfigs. add dba2cf96df9a Bug 41340: Enable TOR_BROWSER_NIGHTLY_BUILD features for dev and nightly builds add c9bc13ba8b47 Bug 40562: Added Tor Browser preferences to 000-tor-browser.js add 532f1f526f14 Bug 13252: Do not store data in the app bundle add 2916e169c4ff Bug 40933: Add tor-launcher functionality add 5626decc6a8a Bug 40597: Implement TorSettings module new e1eb5ce81dc8 Bug 10760: Integrate TorButton to TorBrowser core new 17fffe581aaa Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources. new 643de037c6db Add TorStrings module for localization new d7ae3a46b9c9 Bug 14631: Improve profile access error messages. new 9311ed4f256b Bug 40209: Implement Basic Crypto Safety new 974692d92293 Bug 19273: Avoid JavaScript patching of the external app helper dialog. new 833c38192eb6 Bug 40807: Added QRCode.js to toolkit/modules new 748130a9e63f Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection new 6d3dd9b6213f Bug 27476: Implement about:torconnect captive portal within Tor Browser new bfe4ac1031aa Bug 12620: TorBrowser regression tests new cc476c1e85c7 Bug 4234: Use the Firefox Update Process for Tor Browser. new 1c92dda29511 Bug 13379: Sign our MAR files. new 98db2b01e7fd Bug 16940: After update, load local change notes. new aac96d235564 Bug 32658: Create a new MAR signing key new 3054a9a8ee76 Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing new 400e6350a4f4 Bug 23247: Communicating security expectations for .onion new 9c21c3ddd9d2 Bug 30237: Add v3 onion services client authentication prompt new 91f015b892fa Bug 21952: Implement Onion-Location new e232087c429f Bug 40458: Implement .tor.onion aliases new 67ec3e1f28c7 Bug 11698: Incorporate Tor Browser Manual pages into Tor Browser new 031b265ccfba Bug 41435: Add a Tor Browser migration function
The 21 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
Summary of changes: .eslintignore | 3 + .gitignore | 3 + .gitlab/issue_templates/UXBug.md | 29 + .gitlab/issue_templates/bug.md | 32 + browser/actors/AboutTBUpdateChild.jsm | 12 + browser/actors/AboutTBUpdateParent.jsm | 120 + browser/actors/CryptoSafetyChild.jsm | 87 + browser/actors/CryptoSafetyParent.jsm | 142 + browser/actors/NetErrorChild.jsm | 7 + browser/actors/NetErrorParent.jsm | 6 + browser/actors/moz.build | 8 + browser/app/Makefile.in | 4 +- browser/app/macbuild/Contents/Info.plist.in | 2 +- browser/app/macbuild/Contents/MacOS-files.in | 1 - browser/app/permissions | 20 +- browser/app/profile/000-tor-browser.js | 146 + browser/app/profile/001-base-profile.js | 764 ++ browser/app/profile/firefox.js | 32 +- browser/base/content/aboutDialog-appUpdater.js | 2 +- browser/base/content/aboutDialog.js | 14 +- browser/base/content/aboutDialog.xhtml | 40 +- .../base/content/abouttbupdate/aboutTBUpdate.css | 74 + .../base/content/abouttbupdate/aboutTBUpdate.js | 27 + .../base/content/abouttbupdate/aboutTBUpdate.xhtml | 39 + browser/base/content/appmenu-viewcache.inc.xhtml | 15 +- browser/base/content/browser-doctype.inc | 8 + browser/base/content/browser-menubar.inc | 31 +- browser/base/content/browser-sets.inc | 2 + browser/base/content/browser-siteIdentity.js | 65 +- browser/base/content/browser.css | 20 + browser/base/content/browser.js | 117 +- browser/base/content/browser.xhtml | 20 + browser/base/content/certerror/aboutNetError.js | 22 +- browser/base/content/certerror/aboutNetError.xhtml | 1 + browser/base/content/default-bookmarks.html | 69 +- browser/base/content/hiddenWindowMac.xhtml | 4 + browser/base/content/languageNotification.js | 67 + browser/base/content/main-popupset.inc.xhtml | 3 + browser/base/content/navigator-toolbox.inc.xhtml | 14 + browser/base/content/pageinfo/pageInfo.xhtml | 6 + browser/base/content/pageinfo/security.js | 49 +- browser/base/content/popup-notifications.inc | 14 + browser/base/content/utilityOverlay.js | 20 + browser/base/jar.mn | 7 + browser/base/moz.build | 3 + browser/branding/alpha/VisualElements_150.png | Bin 0 -> 8412 bytes browser/branding/alpha/VisualElements_70.png | Bin 0 -> 3496 bytes browser/branding/alpha/background.png | Bin 0 -> 33362 bytes browser/branding/alpha/bgstub.jpg | Bin 0 -> 12506 bytes browser/branding/alpha/bgstub_2x.jpg | Bin 0 -> 49771 bytes browser/branding/{nightly => alpha}/branding.nsi | 0 browser/branding/alpha/configure.sh | 5 + browser/branding/alpha/content/about-logo.png | Bin 0 -> 21173 bytes .../{nightly => alpha}/content/about-logo.svg | 0 browser/branding/alpha/content/about-logo@2x.png | Bin 0 -> 51309 bytes browser/branding/alpha/content/about-wordmark.svg | 36 + browser/branding/alpha/content/about.png | Bin 0 -> 18520 bytes browser/branding/alpha/content/aboutDialog.css | 49 + browser/branding/alpha/content/aboutlogins.svg | 59 + .../content/firefox-wordmark.svg | 0 .../alpha/content/identity-icons-brand.svg | 8 + browser/branding/alpha/content/jar.mn | 23 + .../branding/{aurora => alpha}/content/moz.build | 0 browser/branding/alpha/content/tor-styles.css | 13 + browser/branding/alpha/default128.png | Bin 0 -> 9397 bytes browser/branding/alpha/default16.png | Bin 0 -> 811 bytes browser/branding/alpha/default22.png | Bin 0 -> 1240 bytes browser/branding/alpha/default24.png | Bin 0 -> 1368 bytes browser/branding/alpha/default256.png | Bin 0 -> 20481 bytes browser/branding/alpha/default32.png | Bin 0 -> 1956 bytes browser/branding/alpha/default48.png | Bin 0 -> 3067 bytes browser/branding/alpha/default512.png | Bin 0 -> 44907 bytes browser/branding/alpha/default64.png | Bin 0 -> 4318 bytes browser/branding/alpha/disk.icns | Bin 0 -> 1548786 bytes browser/branding/alpha/document.icns | Bin 0 -> 564054 bytes browser/branding/alpha/document.ico | Bin 0 -> 119671 bytes browser/branding/alpha/document_pdf.ico | Bin 0 -> 20011 bytes browser/branding/{nightly => alpha}/dsstore | Bin .../alpha/firefox.VisualElementsManifest.xml | 12 + browser/branding/alpha/firefox.icns | Bin 0 -> 291096 bytes browser/branding/alpha/firefox.ico | Bin 0 -> 119941 bytes browser/branding/alpha/firefox.svg | 25 + browser/branding/alpha/firefox64.ico | Bin 0 -> 119941 bytes browser/branding/alpha/locales/jar.mn | 6 + .../{aurora/content => alpha/locales}/moz.build | 0 browser/branding/{aurora => alpha}/moz.build | 0 browser/branding/{aurora => alpha}/newtab.ico | Bin browser/branding/{aurora => alpha}/newwindow.ico | Bin browser/branding/{aurora => alpha}/pbmode.ico | Bin browser/branding/alpha/pref/firefox-branding.js | 34 + .../{nightly => alpha}/stubinstaller/bgstub.jpg | Bin .../stubinstaller/installing_page.css | 0 .../stubinstaller/profile_cleanup_page.css | 0 browser/branding/alpha/wizHeader.bmp | Bin 0 -> 34254 bytes browser/branding/alpha/wizHeaderRTL.bmp | Bin 0 -> 34254 bytes browser/branding/alpha/wizWatermark.bmp | Bin 0 -> 206038 bytes browser/branding/branding-common.mozbuild | 2 + browser/branding/nightly/VisualElements_150.png | Bin 25470 -> 11666 bytes browser/branding/nightly/VisualElements_70.png | Bin 9590 -> 4273 bytes browser/branding/nightly/configure.sh | 8 +- .../nightly/content/identity-icons-brand.svg | 8 + browser/branding/nightly/content/jar.mn | 4 + browser/branding/nightly/content/tor-styles.css | 13 + browser/branding/nightly/default128.png | Bin 12392 -> 13686 bytes browser/branding/nightly/default16.png | Bin 756 -> 891 bytes browser/branding/nightly/default22.png | Bin 1146 -> 1377 bytes browser/branding/nightly/default24.png | Bin 1281 -> 1509 bytes browser/branding/nightly/default256.png | Bin 30546 -> 33587 bytes browser/branding/nightly/default32.png | Bin 1910 -> 2254 bytes browser/branding/nightly/default48.png | Bin 3606 -> 3789 bytes browser/branding/nightly/default512.png | Bin 0 -> 87830 bytes browser/branding/nightly/default64.png | Bin 4826 -> 5426 bytes browser/branding/nightly/document.icns | Bin 517716 -> 689723 bytes browser/branding/nightly/document.ico | Bin 47042 -> 124422 bytes browser/branding/nightly/document_pdf.ico | Bin 19994 -> 20011 bytes .../nightly/firefox.VisualElementsManifest.xml | 2 +- browser/branding/nightly/firefox.icns | Bin 1014680 -> 642308 bytes browser/branding/nightly/firefox.ico | Bin 66730 -> 131711 bytes browser/branding/nightly/firefox.svg | 29 + browser/branding/nightly/firefox64.ico | Bin 38630 -> 131711 bytes browser/branding/nightly/locales/jar.mn | 9 +- browser/branding/nightly/locales/moz.build | 2 - browser/branding/nightly/wizHeader.bmp | Bin 25820 -> 34254 bytes browser/branding/nightly/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes browser/branding/nightly/wizWatermark.bmp | Bin 154544 -> 206038 bytes browser/branding/official/VisualElements_150.png | Bin 23037 -> 7949 bytes browser/branding/official/VisualElements_70.png | Bin 8763 -> 3374 bytes browser/branding/official/configure.sh | 16 +- .../official/content/identity-icons-brand.svg | 8 + browser/branding/official/content/jar.mn | 4 + browser/branding/official/content/tor-styles.css | 13 + browser/branding/official/default128.png | Bin 13513 -> 9007 bytes browser/branding/official/default16.png | Bin 722 -> 839 bytes browser/branding/official/default22.png | Bin 1134 -> 1250 bytes browser/branding/official/default24.png | Bin 1312 -> 1405 bytes browser/branding/official/default256.png | Bin 32441 -> 19136 bytes browser/branding/official/default32.png | Bin 1948 -> 1965 bytes browser/branding/official/default48.png | Bin 3448 -> 3074 bytes browser/branding/official/default512.png | Bin 0 -> 40438 bytes browser/branding/official/default64.png | Bin 5459 -> 4196 bytes browser/branding/official/disk.icns | Bin 1525764 -> 172073 bytes browser/branding/official/document.icns | Bin 501145 -> 509227 bytes browser/branding/official/document.ico | Bin 45478 -> 119916 bytes browser/branding/official/document_pdf.ico | Bin 19994 -> 20011 bytes .../official/firefox.VisualElementsManifest.xml | 2 +- browser/branding/official/firefox.icns | Bin 1021785 -> 259709 bytes browser/branding/official/firefox.ico | Bin 68328 -> 118595 bytes browser/branding/official/firefox.svg | 31 + browser/branding/official/firefox64.ico | Bin 38630 -> 118595 bytes browser/branding/official/locales/jar.mn | 8 +- browser/branding/official/wizHeader.bmp | Bin 25820 -> 34254 bytes browser/branding/official/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes browser/branding/official/wizWatermark.bmp | Bin 154544 -> 206038 bytes browser/branding/tor-styles.inc.css | 97 + browser/branding/unofficial/locales/jar.mn | 9 +- browser/components/BrowserContentHandler.jsm | 90 +- browser/components/BrowserGlue.jsm | 230 +- browser/components/about/AboutRedirector.cpp | 81 +- browser/components/about/components.conf | 8 +- .../components/aboutlogins/AboutLoginsParent.jsm | 2 + .../components/aboutlogins/content/aboutLogins.css | 5 + .../components/aboutlogins/content/aboutLogins.js | 6 + .../content/components/fxaccounts-button.css | 5 + .../controlcenter/content/identityPanel.inc.xhtml | 22 + .../customizableui/content/panelUI.inc.xhtml | 2 +- .../schemas/chrome_settings_overrides.json | 6 +- browser/components/moz.build | 13 +- .../components/newidentity/content/newidentity.js | 567 ++ browser/components/newidentity/jar.mn | 13 + .../locale/en-US/newIdentity.properties | 10 + browser/components/newidentity/moz.build | 1 + browser/components/newtab/AboutNewTabService.jsm | 15 +- .../components/onionservices/OnionAliasStore.jsm | 563 ++ .../onionservices/OnionLocationChild.jsm | 48 + .../onionservices/OnionLocationParent.jsm | 169 + .../content/authNotificationIcon.inc.xhtml | 6 + .../onionservices/content/authPopup.inc.xhtml | 16 + .../onionservices/content/authPreferences.css | 24 + .../content/authPreferences.inc.xhtml | 19 + .../onionservices/content/authPreferences.js | 71 + .../components/onionservices/content/authPrompt.js | 378 + .../components/onionservices/content/authUtil.jsm | 27 + .../onionservices/content/netError/browser.svg | 3 + .../onionservices/content/netError/network.svg | 3 + .../content/netError/onionNetError.css | 70 + .../content/netError/onionNetError.js | 241 + .../onionservices/content/netError/onionsite.svg | 8 + .../content/onionlocation-urlbar.inc.xhtml | 10 + .../onionservices/content/onionlocation.css | 46 + .../onionservices/content/onionlocation.svg | 3 + .../content/onionlocationPreferences.inc.xhtml | 11 + .../content/onionlocationPreferences.js | 34 + .../onionservices/content/onionservices.css | 69 + .../onionservices/content/savedKeysDialog.js | 254 + .../onionservices/content/savedKeysDialog.xhtml | 42 + browser/components/onionservices/jar.mn | 12 + browser/components/onionservices/moz.build | 7 + browser/components/places/content/places.xhtml | 3 + browser/components/preferences/home.inc.xhtml | 4 +- browser/components/preferences/main.inc.xhtml | 56 +- browser/components/preferences/main.js | 78 +- browser/components/preferences/preferences.js | 25 +- browser/components/preferences/preferences.xhtml | 12 +- browser/components/preferences/privacy.inc.xhtml | 6 + browser/components/preferences/privacy.js | 44 + browser/components/rulesets/RulesetsChild.jsm | 11 + browser/components/rulesets/RulesetsParent.jsm | 79 + .../components/rulesets/content/aboutRulesets.css | 305 + .../components/rulesets/content/aboutRulesets.html | 107 + .../components/rulesets/content/aboutRulesets.js | 531 ++ browser/components/rulesets/content/securedrop.svg | 173 + browser/components/rulesets/jar.mn | 5 + browser/components/rulesets/moz.build | 6 + browser/components/search/SearchSERPTelemetry.jsm | 6 - .../search/extensions/blockchair-onion/favicon.png | Bin 0 -> 3116 bytes .../extensions/blockchair-onion/manifest.json | 26 + .../search/extensions/blockchair/favicon.png | Bin 0 -> 2898 bytes .../search/extensions/blockchair/manifest.json | 26 + .../search/extensions/ddg-onion/favicon.ico | Bin 0 -> 973 bytes .../search/extensions/ddg-onion/manifest.json | 26 + .../components/search/extensions/ddg/favicon.ico | Bin 5430 -> 0 bytes .../components/search/extensions/ddg/favicon.png | Bin 0 -> 1150 bytes .../components/search/extensions/ddg/manifest.json | 38 +- .../extensions/google/_locales/b-1-d/messages.json | 23 - .../extensions/google/_locales/b-1-e/messages.json | 23 - .../extensions/google/_locales/b-d/messages.json | 23 - .../extensions/google/_locales/b-e/messages.json | 23 - .../extensions/google/_locales/en/messages.json | 24 - .../google/_locales/region-by/messages.json | 20 - .../google/_locales/region-kz/messages.json | 20 - .../google/_locales/region-ru/messages.json | 20 - .../google/_locales/region-tr/messages.json | 20 - .../search/extensions/google/manifest.json | 17 +- .../search/extensions/startpage/favicon.png | Bin 0 -> 1150 bytes .../search/extensions/startpage/manifest.json | 26 + .../extensions/twitter/favicon.ico} | Bin .../search/extensions/twitter/manifest.json | 26 + .../extensions/wikipedia/_locales/NN/messages.json | 20 - .../extensions/wikipedia/_locales/NO/messages.json | 20 - .../extensions/wikipedia/_locales/af/messages.json | 20 - .../extensions/wikipedia/_locales/an/messages.json | 20 - .../extensions/wikipedia/_locales/ar/messages.json | 20 - .../wikipedia/_locales/ast/messages.json | 20 - .../extensions/wikipedia/_locales/az/messages.json | 20 - .../wikipedia/_locales/be-tarask/messages.json | 20 - .../extensions/wikipedia/_locales/be/messages.json | 20 - .../extensions/wikipedia/_locales/bg/messages.json | 20 - .../extensions/wikipedia/_locales/bn/messages.json | 20 - .../extensions/wikipedia/_locales/br/messages.json | 20 - .../extensions/wikipedia/_locales/bs/messages.json | 20 - .../extensions/wikipedia/_locales/ca/messages.json | 20 - .../extensions/wikipedia/_locales/cy/messages.json | 20 - .../extensions/wikipedia/_locales/cz/messages.json | 20 - .../extensions/wikipedia/_locales/da/messages.json | 20 - .../extensions/wikipedia/_locales/de/messages.json | 20 - .../wikipedia/_locales/dsb/messages.json | 20 - .../extensions/wikipedia/_locales/el/messages.json | 20 - .../extensions/wikipedia/_locales/en/messages.json | 20 - .../extensions/wikipedia/_locales/eo/messages.json | 20 - .../extensions/wikipedia/_locales/es/messages.json | 20 - .../extensions/wikipedia/_locales/et/messages.json | 20 - .../extensions/wikipedia/_locales/eu/messages.json | 20 - .../extensions/wikipedia/_locales/fa/messages.json | 20 - .../extensions/wikipedia/_locales/fi/messages.json | 20 - .../extensions/wikipedia/_locales/fr/messages.json | 20 - .../wikipedia/_locales/fy-NL/messages.json | 20 - .../wikipedia/_locales/ga-IE/messages.json | 20 - .../extensions/wikipedia/_locales/gd/messages.json | 20 - .../extensions/wikipedia/_locales/gl/messages.json | 20 - .../extensions/wikipedia/_locales/gn/messages.json | 20 - .../extensions/wikipedia/_locales/gu/messages.json | 20 - .../extensions/wikipedia/_locales/he/messages.json | 20 - .../extensions/wikipedia/_locales/hi/messages.json | 20 - .../extensions/wikipedia/_locales/hr/messages.json | 20 - .../wikipedia/_locales/hsb/messages.json | 20 - .../extensions/wikipedia/_locales/hu/messages.json | 20 - .../extensions/wikipedia/_locales/hy/messages.json | 20 - .../extensions/wikipedia/_locales/ia/messages.json | 20 - .../extensions/wikipedia/_locales/id/messages.json | 20 - .../extensions/wikipedia/_locales/is/messages.json | 20 - .../extensions/wikipedia/_locales/it/messages.json | 20 - .../extensions/wikipedia/_locales/ja/messages.json | 20 - .../extensions/wikipedia/_locales/ka/messages.json | 20 - .../wikipedia/_locales/kab/messages.json | 20 - .../extensions/wikipedia/_locales/kk/messages.json | 20 - .../extensions/wikipedia/_locales/km/messages.json | 20 - .../extensions/wikipedia/_locales/kn/messages.json | 20 - .../extensions/wikipedia/_locales/kr/messages.json | 20 - .../wikipedia/_locales/lij/messages.json | 20 - .../extensions/wikipedia/_locales/lo/messages.json | 20 - .../extensions/wikipedia/_locales/lt/messages.json | 20 - .../wikipedia/_locales/ltg/messages.json | 20 - .../extensions/wikipedia/_locales/lv/messages.json | 20 - .../extensions/wikipedia/_locales/mk/messages.json | 20 - .../extensions/wikipedia/_locales/mr/messages.json | 20 - .../extensions/wikipedia/_locales/ms/messages.json | 20 - .../extensions/wikipedia/_locales/my/messages.json | 20 - .../extensions/wikipedia/_locales/ne/messages.json | 20 - .../extensions/wikipedia/_locales/nl/messages.json | 20 - .../extensions/wikipedia/_locales/oc/messages.json | 20 - .../extensions/wikipedia/_locales/pa/messages.json | 20 - .../extensions/wikipedia/_locales/pl/messages.json | 20 - .../extensions/wikipedia/_locales/pt/messages.json | 20 - .../extensions/wikipedia/_locales/rm/messages.json | 20 - .../extensions/wikipedia/_locales/ro/messages.json | 20 - .../extensions/wikipedia/_locales/ru/messages.json | 20 - .../extensions/wikipedia/_locales/si/messages.json | 20 - .../extensions/wikipedia/_locales/sk/messages.json | 20 - .../extensions/wikipedia/_locales/sl/messages.json | 20 - .../extensions/wikipedia/_locales/sq/messages.json | 20 - .../extensions/wikipedia/_locales/sr/messages.json | 20 - .../wikipedia/_locales/sv-SE/messages.json | 20 - .../extensions/wikipedia/_locales/ta/messages.json | 20 - .../extensions/wikipedia/_locales/te/messages.json | 20 - .../extensions/wikipedia/_locales/th/messages.json | 20 - .../extensions/wikipedia/_locales/tl/messages.json | 20 - .../extensions/wikipedia/_locales/tr/messages.json | 20 - .../extensions/wikipedia/_locales/uk/messages.json | 20 - .../extensions/wikipedia/_locales/ur/messages.json | 20 - .../extensions/wikipedia/_locales/uz/messages.json | 20 - .../extensions/wikipedia/_locales/vi/messages.json | 20 - .../extensions/wikipedia/_locales/wo/messages.json | 20 - .../wikipedia/_locales/zh-CN/messages.json | 20 - .../wikipedia/_locales/zh-TW/messages.json | 20 - .../search/extensions/wikipedia/manifest.json | 15 +- .../components/search/extensions/yahoo/favicon.ico | Bin 0 -> 5430 bytes .../search/extensions/yahoo/manifest.json | 28 + .../search/extensions/youtube/favicon.ico | Bin 0 -> 1150 bytes .../search/extensions/youtube/manifest.json | 26 + .../securitylevel/content/securityLevel.js | 611 ++ .../securitylevel/content/securityLevelButton.css | 18 + .../content/securityLevelButton.inc.xhtml | 7 + .../securitylevel/content/securityLevelIcon.svg | 40 + .../securitylevel/content/securityLevelPanel.css | 71 + .../content/securityLevelPanel.inc.xhtml | 44 + .../content/securityLevelPreferences.css | 51 + .../content/securityLevelPreferences.inc.xhtml | 65 + browser/components/securitylevel/jar.mn | 11 + .../locale/en-US/securityLevel.properties | 30 + browser/components/securitylevel/moz.build | 1 + .../shell/content/setDesktopBackground.xhtml | 6 + browser/components/torconnect/TorConnectChild.jsm | 9 + browser/components/torconnect/TorConnectParent.jsm | 202 + .../torconnect/content/aboutTorConnect.css | 309 + .../torconnect/content/aboutTorConnect.js | 841 ++ .../torconnect/content/aboutTorConnect.xhtml | 66 + .../components/torconnect/content/arrow-right.svg | 4 + browser/components/torconnect/content/bridge.svg | 5 + .../torconnect/content/connection-failure.svg | 5 + .../torconnect/content/connection-location.svg | 5 + .../torconnect/content/onion-slash-fillable.svg | 5 + .../components/torconnect/content/onion-slash.svg | 5 + browser/components/torconnect/content/onion.svg | 4 + .../torconnect/content/torBootstrapUrlbar.js | 95 + .../torconnect/content/torconnect-urlbar.css | 37 + .../torconnect/content/torconnect-urlbar.inc.xhtml | 10 + browser/components/torconnect/jar.mn | 13 + browser/components/torconnect/moz.build | 6 + .../torpreferences/content/bridgeQrDialog.jsm | 51 + .../torpreferences/content/bridgeQrDialog.xhtml | 25 + .../content/bridgemoji-annotations.json | 9032 ++++++++++++++++++++ .../torpreferences/content/bridgemoji/1f300.svg | 1 + .../torpreferences/content/bridgemoji/1f308.svg | 1 + .../torpreferences/content/bridgemoji/1f30a.svg | 1 + .../torpreferences/content/bridgemoji/1f30b.svg | 1 + .../torpreferences/content/bridgemoji/1f319.svg | 1 + .../torpreferences/content/bridgemoji/1f31f.svg | 1 + .../torpreferences/content/bridgemoji/1f321.svg | 1 + .../torpreferences/content/bridgemoji/1f32d.svg | 1 + .../torpreferences/content/bridgemoji/1f32e.svg | 1 + .../torpreferences/content/bridgemoji/1f332.svg | 1 + .../torpreferences/content/bridgemoji/1f333.svg | 1 + .../torpreferences/content/bridgemoji/1f334.svg | 1 + .../torpreferences/content/bridgemoji/1f335.svg | 1 + .../torpreferences/content/bridgemoji/1f336.svg | 1 + .../torpreferences/content/bridgemoji/1f337.svg | 1 + .../torpreferences/content/bridgemoji/1f339.svg | 1 + .../torpreferences/content/bridgemoji/1f33a.svg | 1 + .../torpreferences/content/bridgemoji/1f33b.svg | 1 + .../torpreferences/content/bridgemoji/1f33d.svg | 1 + .../torpreferences/content/bridgemoji/1f33f.svg | 1 + .../torpreferences/content/bridgemoji/1f341.svg | 1 + .../torpreferences/content/bridgemoji/1f344.svg | 1 + .../torpreferences/content/bridgemoji/1f345.svg | 1 + .../torpreferences/content/bridgemoji/1f346.svg | 1 + .../torpreferences/content/bridgemoji/1f347.svg | 1 + .../torpreferences/content/bridgemoji/1f348.svg | 1 + .../torpreferences/content/bridgemoji/1f349.svg | 1 + .../torpreferences/content/bridgemoji/1f34a.svg | 1 + .../torpreferences/content/bridgemoji/1f34b.svg | 1 + .../torpreferences/content/bridgemoji/1f34c.svg | 1 + .../torpreferences/content/bridgemoji/1f34d.svg | 1 + .../torpreferences/content/bridgemoji/1f34f.svg | 1 + .../torpreferences/content/bridgemoji/1f350.svg | 1 + .../torpreferences/content/bridgemoji/1f351.svg | 1 + .../torpreferences/content/bridgemoji/1f352.svg | 1 + .../torpreferences/content/bridgemoji/1f353.svg | 1 + .../torpreferences/content/bridgemoji/1f354.svg | 1 + .../torpreferences/content/bridgemoji/1f355.svg | 1 + .../torpreferences/content/bridgemoji/1f368.svg | 1 + .../torpreferences/content/bridgemoji/1f369.svg | 1 + .../torpreferences/content/bridgemoji/1f36a.svg | 1 + .../torpreferences/content/bridgemoji/1f36b.svg | 1 + .../torpreferences/content/bridgemoji/1f36c.svg | 1 + .../torpreferences/content/bridgemoji/1f36d.svg | 1 + .../torpreferences/content/bridgemoji/1f37f.svg | 1 + .../torpreferences/content/bridgemoji/1f380.svg | 1 + .../torpreferences/content/bridgemoji/1f381.svg | 1 + .../torpreferences/content/bridgemoji/1f382.svg | 1 + .../torpreferences/content/bridgemoji/1f383.svg | 1 + .../torpreferences/content/bridgemoji/1f388.svg | 1 + .../torpreferences/content/bridgemoji/1f389.svg | 1 + .../torpreferences/content/bridgemoji/1f38f.svg | 1 + .../torpreferences/content/bridgemoji/1f392.svg | 1 + .../torpreferences/content/bridgemoji/1f399.svg | 1 + .../torpreferences/content/bridgemoji/1f39f.svg | 1 + .../torpreferences/content/bridgemoji/1f3a0.svg | 1 + .../torpreferences/content/bridgemoji/1f3a1.svg | 1 + .../torpreferences/content/bridgemoji/1f3a2.svg | 1 + .../torpreferences/content/bridgemoji/1f3a8.svg | 1 + .../torpreferences/content/bridgemoji/1f3ac.svg | 1 + .../torpreferences/content/bridgemoji/1f3af.svg | 1 + .../torpreferences/content/bridgemoji/1f3b2.svg | 1 + .../torpreferences/content/bridgemoji/1f3b6.svg | 1 + .../torpreferences/content/bridgemoji/1f3b7.svg | 1 + .../torpreferences/content/bridgemoji/1f3b8.svg | 1 + .../torpreferences/content/bridgemoji/1f3ba.svg | 1 + .../torpreferences/content/bridgemoji/1f3bb.svg | 1 + .../torpreferences/content/bridgemoji/1f3be.svg | 1 + .../torpreferences/content/bridgemoji/1f3c0.svg | 1 + .../torpreferences/content/bridgemoji/1f3c6.svg | 1 + .../torpreferences/content/bridgemoji/1f3c8.svg | 1 + .../torpreferences/content/bridgemoji/1f3d3.svg | 1 + .../torpreferences/content/bridgemoji/1f3d4.svg | 1 + .../torpreferences/content/bridgemoji/1f3d5.svg | 1 + .../torpreferences/content/bridgemoji/1f3dd.svg | 1 + .../torpreferences/content/bridgemoji/1f3e1.svg | 1 + .../torpreferences/content/bridgemoji/1f3ee.svg | 1 + .../torpreferences/content/bridgemoji/1f3f7.svg | 1 + .../torpreferences/content/bridgemoji/1f3f8.svg | 1 + .../torpreferences/content/bridgemoji/1f3f9.svg | 1 + .../torpreferences/content/bridgemoji/1f40a.svg | 1 + .../torpreferences/content/bridgemoji/1f40c.svg | 1 + .../torpreferences/content/bridgemoji/1f40d.svg | 1 + .../torpreferences/content/bridgemoji/1f417.svg | 1 + .../torpreferences/content/bridgemoji/1f418.svg | 1 + .../torpreferences/content/bridgemoji/1f419.svg | 1 + .../torpreferences/content/bridgemoji/1f41a.svg | 1 + .../torpreferences/content/bridgemoji/1f41b.svg | 1 + .../torpreferences/content/bridgemoji/1f41d.svg | 1 + .../torpreferences/content/bridgemoji/1f41e.svg | 1 + .../torpreferences/content/bridgemoji/1f41f.svg | 1 + .../torpreferences/content/bridgemoji/1f420.svg | 1 + .../torpreferences/content/bridgemoji/1f422.svg | 1 + .../torpreferences/content/bridgemoji/1f425.svg | 1 + .../torpreferences/content/bridgemoji/1f426.svg | 1 + .../torpreferences/content/bridgemoji/1f428.svg | 1 + .../torpreferences/content/bridgemoji/1f42a.svg | 1 + .../torpreferences/content/bridgemoji/1f42c.svg | 1 + .../torpreferences/content/bridgemoji/1f42d.svg | 1 + .../torpreferences/content/bridgemoji/1f42e.svg | 1 + .../torpreferences/content/bridgemoji/1f42f.svg | 1 + .../torpreferences/content/bridgemoji/1f430.svg | 1 + .../torpreferences/content/bridgemoji/1f431.svg | 1 + .../torpreferences/content/bridgemoji/1f432.svg | 1 + .../torpreferences/content/bridgemoji/1f433.svg | 1 + .../torpreferences/content/bridgemoji/1f434.svg | 1 + .../torpreferences/content/bridgemoji/1f435.svg | 1 + .../torpreferences/content/bridgemoji/1f436.svg | 1 + .../torpreferences/content/bridgemoji/1f437.svg | 1 + .../torpreferences/content/bridgemoji/1f43a.svg | 1 + .../torpreferences/content/bridgemoji/1f43b.svg | 1 + .../torpreferences/content/bridgemoji/1f43f.svg | 1 + .../torpreferences/content/bridgemoji/1f441.svg | 1 + .../torpreferences/content/bridgemoji/1f451.svg | 1 + .../torpreferences/content/bridgemoji/1f455.svg | 1 + .../torpreferences/content/bridgemoji/1f457.svg | 1 + .../torpreferences/content/bridgemoji/1f45f.svg | 1 + .../torpreferences/content/bridgemoji/1f47d.svg | 1 + .../torpreferences/content/bridgemoji/1f484.svg | 1 + .../torpreferences/content/bridgemoji/1f488.svg | 1 + .../torpreferences/content/bridgemoji/1f48d.svg | 1 + .../torpreferences/content/bridgemoji/1f48e.svg | 1 + .../torpreferences/content/bridgemoji/1f490.svg | 1 + .../torpreferences/content/bridgemoji/1f4a1.svg | 1 + .../torpreferences/content/bridgemoji/1f4a7.svg | 1 + .../torpreferences/content/bridgemoji/1f4b3.svg | 1 + .../torpreferences/content/bridgemoji/1f4bf.svg | 1 + .../torpreferences/content/bridgemoji/1f4cc.svg | 1 + .../torpreferences/content/bridgemoji/1f4ce.svg | 1 + .../torpreferences/content/bridgemoji/1f4d5.svg | 1 + .../torpreferences/content/bridgemoji/1f4e1.svg | 1 + .../torpreferences/content/bridgemoji/1f4e2.svg | 1 + .../torpreferences/content/bridgemoji/1f4fb.svg | 1 + .../torpreferences/content/bridgemoji/1f50b.svg | 1 + .../torpreferences/content/bridgemoji/1f511.svg | 1 + .../torpreferences/content/bridgemoji/1f525.svg | 1 + .../torpreferences/content/bridgemoji/1f526.svg | 1 + .../torpreferences/content/bridgemoji/1f52c.svg | 1 + .../torpreferences/content/bridgemoji/1f52d.svg | 1 + .../torpreferences/content/bridgemoji/1f52e.svg | 1 + .../torpreferences/content/bridgemoji/1f54a.svg | 1 + .../torpreferences/content/bridgemoji/1f58c.svg | 1 + .../torpreferences/content/bridgemoji/1f58d.svg | 1 + .../torpreferences/content/bridgemoji/1f5ff.svg | 1 + .../torpreferences/content/bridgemoji/1f680.svg | 1 + .../torpreferences/content/bridgemoji/1f681.svg | 1 + .../torpreferences/content/bridgemoji/1f686.svg | 1 + .../torpreferences/content/bridgemoji/1f68b.svg | 1 + .../torpreferences/content/bridgemoji/1f68d.svg | 1 + .../torpreferences/content/bridgemoji/1f695.svg | 1 + .../torpreferences/content/bridgemoji/1f697.svg | 1 + .../torpreferences/content/bridgemoji/1f69a.svg | 1 + .../torpreferences/content/bridgemoji/1f69c.svg | 1 + .../torpreferences/content/bridgemoji/1f6a0.svg | 1 + .../torpreferences/content/bridgemoji/1f6a2.svg | 1 + .../torpreferences/content/bridgemoji/1f6a4.svg | 1 + .../torpreferences/content/bridgemoji/1f6f0.svg | 1 + .../torpreferences/content/bridgemoji/1f6f4.svg | 1 + .../torpreferences/content/bridgemoji/1f6f5.svg | 1 + .../torpreferences/content/bridgemoji/1f6f6.svg | 1 + .../torpreferences/content/bridgemoji/1f6f8.svg | 1 + .../torpreferences/content/bridgemoji/1f6f9.svg | 1 + .../torpreferences/content/bridgemoji/1f6fa.svg | 1 + .../torpreferences/content/bridgemoji/1f6fc.svg | 1 + .../torpreferences/content/bridgemoji/1f916.svg | 1 + .../torpreferences/content/bridgemoji/1f93f.svg | 1 + .../torpreferences/content/bridgemoji/1f941.svg | 1 + .../torpreferences/content/bridgemoji/1f94c.svg | 1 + .../torpreferences/content/bridgemoji/1f94f.svg | 1 + .../torpreferences/content/bridgemoji/1f950.svg | 1 + .../torpreferences/content/bridgemoji/1f951.svg | 1 + .../torpreferences/content/bridgemoji/1f955.svg | 1 + .../torpreferences/content/bridgemoji/1f956.svg | 1 + .../torpreferences/content/bridgemoji/1f95c.svg | 1 + .../torpreferences/content/bridgemoji/1f95d.svg | 1 + .../torpreferences/content/bridgemoji/1f95e.svg | 1 + .../torpreferences/content/bridgemoji/1f965.svg | 1 + .../torpreferences/content/bridgemoji/1f966.svg | 1 + .../torpreferences/content/bridgemoji/1f968.svg | 1 + .../torpreferences/content/bridgemoji/1f96c.svg | 1 + .../torpreferences/content/bridgemoji/1f96d.svg | 1 + .../torpreferences/content/bridgemoji/1f96f.svg | 1 + .../torpreferences/content/bridgemoji/1f980.svg | 1 + .../torpreferences/content/bridgemoji/1f981.svg | 1 + .../torpreferences/content/bridgemoji/1f984.svg | 1 + .../torpreferences/content/bridgemoji/1f986.svg | 1 + .../torpreferences/content/bridgemoji/1f987.svg | 1 + .../torpreferences/content/bridgemoji/1f988.svg | 1 + .../torpreferences/content/bridgemoji/1f989.svg | 1 + .../torpreferences/content/bridgemoji/1f98a.svg | 1 + .../torpreferences/content/bridgemoji/1f98b.svg | 1 + .../torpreferences/content/bridgemoji/1f98c.svg | 1 + .../torpreferences/content/bridgemoji/1f98e.svg | 1 + .../torpreferences/content/bridgemoji/1f98f.svg | 1 + .../torpreferences/content/bridgemoji/1f992.svg | 1 + .../torpreferences/content/bridgemoji/1f993.svg | 1 + .../torpreferences/content/bridgemoji/1f994.svg | 1 + .../torpreferences/content/bridgemoji/1f995.svg | 1 + .../torpreferences/content/bridgemoji/1f998.svg | 1 + .../torpreferences/content/bridgemoji/1f999.svg | 1 + .../torpreferences/content/bridgemoji/1f99a.svg | 1 + .../torpreferences/content/bridgemoji/1f99c.svg | 1 + .../torpreferences/content/bridgemoji/1f99d.svg | 1 + .../torpreferences/content/bridgemoji/1f99e.svg | 1 + .../torpreferences/content/bridgemoji/1f9a3.svg | 1 + .../torpreferences/content/bridgemoji/1f9a4.svg | 1 + .../torpreferences/content/bridgemoji/1f9a5.svg | 1 + .../torpreferences/content/bridgemoji/1f9a6.svg | 1 + .../torpreferences/content/bridgemoji/1f9a7.svg | 1 + .../torpreferences/content/bridgemoji/1f9a9.svg | 1 + .../torpreferences/content/bridgemoji/1f9ad.svg | 1 + .../torpreferences/content/bridgemoji/1f9c1.svg | 1 + .../torpreferences/content/bridgemoji/1f9c3.svg | 1 + .../torpreferences/content/bridgemoji/1f9c5.svg | 1 + .../torpreferences/content/bridgemoji/1f9c7.svg | 1 + .../torpreferences/content/bridgemoji/1f9c9.svg | 1 + .../torpreferences/content/bridgemoji/1f9d9.svg | 1 + .../torpreferences/content/bridgemoji/1f9da.svg | 1 + .../torpreferences/content/bridgemoji/1f9dc.svg | 1 + .../torpreferences/content/bridgemoji/1f9e0.svg | 1 + .../torpreferences/content/bridgemoji/1f9e2.svg | 1 + .../torpreferences/content/bridgemoji/1f9e6.svg | 1 + .../torpreferences/content/bridgemoji/1f9e9.svg | 1 + .../torpreferences/content/bridgemoji/1f9ea.svg | 1 + .../torpreferences/content/bridgemoji/1f9ec.svg | 1 + .../torpreferences/content/bridgemoji/1f9ed.svg | 1 + .../torpreferences/content/bridgemoji/1f9ee.svg | 1 + .../torpreferences/content/bridgemoji/1f9f2.svg | 1 + .../torpreferences/content/bridgemoji/1f9f5.svg | 1 + .../torpreferences/content/bridgemoji/1f9f9.svg | 1 + .../torpreferences/content/bridgemoji/1fa73.svg | 1 + .../torpreferences/content/bridgemoji/1fa80.svg | 1 + .../torpreferences/content/bridgemoji/1fa81.svg | 1 + .../torpreferences/content/bridgemoji/1fa83.svg | 1 + .../torpreferences/content/bridgemoji/1fa90.svg | 1 + .../torpreferences/content/bridgemoji/1fa91.svg | 1 + .../torpreferences/content/bridgemoji/1fa95.svg | 1 + .../torpreferences/content/bridgemoji/1fa97.svg | 1 + .../torpreferences/content/bridgemoji/1fab6.svg | 1 + .../torpreferences/content/bridgemoji/1fad0.svg | 1 + .../torpreferences/content/bridgemoji/1fad2.svg | 1 + .../torpreferences/content/bridgemoji/1fad6.svg | 1 + .../torpreferences/content/bridgemoji/23f0.svg | 1 + .../torpreferences/content/bridgemoji/2600.svg | 1 + .../torpreferences/content/bridgemoji/2602.svg | 1 + .../torpreferences/content/bridgemoji/2604.svg | 1 + .../torpreferences/content/bridgemoji/260e.svg | 1 + .../torpreferences/content/bridgemoji/2693.svg | 1 + .../torpreferences/content/bridgemoji/2696.svg | 1 + .../torpreferences/content/bridgemoji/26bd.svg | 1 + .../torpreferences/content/bridgemoji/26f2.svg | 1 + .../torpreferences/content/bridgemoji/26f5.svg | 1 + .../torpreferences/content/bridgemoji/2708.svg | 1 + .../torpreferences/content/bridgemoji/270f.svg | 1 + .../torpreferences/content/bridgemoji/2728.svg | 1 + .../torpreferences/content/bridgemoji/2744.svg | 1 + .../torpreferences/content/builtinBridgeDialog.jsm | 113 + .../content/builtinBridgeDialog.xhtml | 31 + .../components/torpreferences/content/check.svg | 3 + .../content/connectionCategory.inc.xhtml | 9 + .../torpreferences/content/connectionPane.js | 1157 +++ .../torpreferences/content/connectionPane.xhtml | 192 + .../content/connectionSettingsDialog.jsm | 397 + .../content/connectionSettingsDialog.xhtml | 60 + .../components/torpreferences/content/network.svg | 0 .../torpreferences/content/provideBridgeDialog.jsm | 67 + .../content/provideBridgeDialog.xhtml | 21 + .../torpreferences/content/requestBridgeDialog.jsm | 206 + .../content/requestBridgeDialog.xhtml | 35 + .../torpreferences/content/torLogDialog.jsm | 84 + .../torpreferences/content/torLogDialog.xhtml | 23 + .../torpreferences/content/torPreferences.css | 704 ++ .../torpreferences/content/torPreferencesIcon.svg | 8 + browser/components/torpreferences/jar.mn | 22 + browser/components/torpreferences/moz.build | 1 + browser/components/uitour/UITour-lib.js | 7 + browser/components/uitour/UITour.jsm | 130 +- browser/components/uitour/UITourChild.jsm | 33 +- browser/components/urlbar/UrlbarInput.jsm | 37 + browser/config/mozconfigs/base-browser | 43 + browser/config/mozconfigs/base-browser-android | 49 + browser/config/mozconfigs/tor-browser | 10 + browser/config/mozconfigs/tor-browser-android | 10 + browser/confvars.sh | 35 +- browser/extensions/moz.build | 10 +- .../extensions/onboarding/OnboardingTelemetry.jsm | 610 ++ .../extensions/onboarding/OnboardingTourType.jsm | 56 + browser/extensions/onboarding/README.md | 87 + browser/extensions/onboarding/api.js | 275 + browser/extensions/onboarding/background.js | 8 + .../extensions/onboarding/content/Onboarding.jsm | 1920 +++++ .../extensions/onboarding/content/img/close.png | Bin 0 -> 798 bytes .../content/img/figure_tor-circuit-display.png | Bin 0 -> 26334 bytes .../content/img/figure_tor-expect-differences.png | Bin 0 -> 22290 bytes .../onboarding/content/img/figure_tor-network.png | Bin 0 -> 11982 bytes .../content/img/figure_tor-onion-services.png | Bin 0 -> 40968 bytes .../onboarding/content/img/figure_tor-privacy.png | Bin 0 -> 35527 bytes .../content/img/figure_tor-security-level.png | Bin 0 -> 11263 bytes .../onboarding/content/img/figure_tor-security.png | Bin 0 -> 24554 bytes .../content/img/figure_tor-toolbar-layout.png | Bin 0 -> 13269 bytes .../onboarding/content/img/figure_tor-welcome.png | Bin 0 -> 48405 bytes .../onboarding/content/img/icons_no-icon.png | Bin 0 -> 673 bytes .../onboarding/content/img/icons_tour-complete.png | Bin 0 -> 694 bytes .../onboarding/content/img/icons_tour-complete.svg | 17 + .../content/onboarding-tor-circuit-display.js | 324 + .../onboarding/content/onboarding-tour-agent.js | 107 + .../extensions/onboarding/content/onboarding.css | 664 ++ .../extensions/onboarding/content/onboarding.js | 46 + browser/extensions/onboarding/data_events.md | 154 + browser/extensions/onboarding/jar.mn | 19 + .../onboarding/locales/en-US/onboarding.properties | 126 + browser/extensions/onboarding/locales/jar.mn | 8 + .../onboarding/locales}/moz.build | 0 browser/extensions/onboarding/manifest.json | 26 + browser/extensions/onboarding/moz.build | 29 + .../{formautofill => onboarding}/schema.json | 0 .../onboarding/test/browser}/.eslintrc.js | 0 .../extensions/onboarding/test/browser/browser.ini | 18 + .../browser/browser_onboarding_accessibility.js | 121 + .../test/browser/browser_onboarding_keyboard.js | 205 + .../browser/browser_onboarding_notification.js | 79 + .../browser/browser_onboarding_notification_2.js | 114 + .../browser/browser_onboarding_notification_3.js | 135 + .../browser/browser_onboarding_notification_4.js | 114 + .../browser/browser_onboarding_notification_5.js | 32 + ...arding_notification_click_auto_complete_tour.js | 62 + .../browser_onboarding_select_default_tour.js | 112 + .../test/browser/browser_onboarding_skip_tour.js | 65 + .../test/browser/browser_onboarding_tours.js | 163 + .../test/browser/browser_onboarding_tourset.js | 102 + .../test/browser/browser_onboarding_uitour.js | 247 + browser/extensions/onboarding/test/browser/head.js | 387 + .../extensions/onboarding/test/unit}/.eslintrc.js | 0 browser/extensions/onboarding/test/unit/head.js | 58 + .../test/unit/test-onboarding-tour-type.js | 155 + .../extensions/onboarding/test/unit/xpcshell.ini | 5 + browser/installer/Makefile.in | 4 + browser/installer/package-manifest.in | 21 +- browser/installer/windows/nsis/shared.nsh | 1 - browser/locales/Makefile.in | 10 +- .../locales/en-US/browser/languageNotification.ftl | 10 + .../locales/en-US/chrome/browser/aboutTBUpdate.dtd | 8 + browser/locales/filter.py | 1 + browser/locales/jar.mn | 10 +- browser/locales/l10n.ini | 1 + browser/locales/l10n.toml | 4 + browser/modules/BridgeDB.jsm | 61 + browser/modules/HomePage.jsm | 2 +- browser/modules/Moat.jsm | 808 ++ browser/modules/TorConnect.jsm | 1081 +++ browser/modules/TorSettings.jsm | 782 ++ browser/modules/TorStrings.jsm | 977 +++ browser/modules/moz.build | 5 + browser/moz.build | 1 + browser/moz.configure | 8 +- browser/themes/linux/browser.css | 9 - browser/themes/shared/UITour.css | 56 +- browser/themes/shared/aboutNetError.css | 7 + browser/themes/shared/browser-shared.css | 7 + browser/themes/shared/controlcenter/panel.css | 4 +- .../shared/customizableui/panelUI-shared.css | 3 +- browser/themes/shared/icons/new_circuit.svg | 6 + browser/themes/shared/icons/new_identity.svg | 9 + .../shared/identity-block/identity-block.css | 32 +- .../themes/shared/identity-block/onion-slash.svg | 5 + .../themes/shared/identity-block/onion-warning.svg | 4 + browser/themes/shared/identity-block/onion.svg | 4 + browser/themes/shared/jar.inc.mn | 9 + browser/themes/shared/notification-icons.css | 2 + browser/themes/shared/onionPattern.css | 31 + browser/themes/shared/onionPattern.inc.xhtml | 12 + browser/themes/shared/onionPattern.svg | 22 + browser/themes/shared/preferences/privacy.css | 4 + browser/themes/shared/toolbarbutton-icons.css | 8 + browser/themes/windows/browser.css | 9 - build/application.ini.in | 2 +- build/moz.configure/init.configure | 13 +- config/createprecomplete.py | 18 +- .../client/aboutdebugging/src/actions/runtimes.js | 5 + .../images/aboutdebugging-firefox-aurora.svg | 35 +- .../themes/images/aboutdebugging-firefox-beta.svg | 35 +- .../themes/images/aboutdebugging-firefox-logo.svg | 11 +- .../images/aboutdebugging-firefox-nightly.svg | 35 +- .../images/aboutdebugging-firefox-release.svg | 35 +- docshell/base/CanonicalBrowsingContext.cpp | 3 +- docshell/base/nsAboutRedirector.cpp | 6 +- docshell/base/nsDocShell.cpp | 83 +- docshell/build/components.conf | 1 + dom/base/Document.cpp | 131 +- dom/base/Document.h | 10 +- dom/base/nsContentUtils.cpp | 19 + dom/base/nsContentUtils.h | 5 + dom/base/nsGlobalWindowOuter.cpp | 5 +- dom/base/test/mochitest.ini | 2 - dom/base/test/test_suppressed_microtasks.html | 62 - dom/canvas/ClientWebGLContext.cpp | 8 + dom/ipc/BrowserParent.cpp | 21 + dom/ipc/BrowserParent.h | 3 + dom/ipc/PBrowser.ipdl | 9 + dom/ipc/WindowGlobalActor.cpp | 4 +- dom/ipc/WindowGlobalChild.cpp | 6 +- dom/security/nsMixedContentBlocker.cpp | 16 +- dom/webidl/Document.webidl | 8 + dom/workers/RuntimeService.cpp | 4 +- dom/workers/WorkerPrivate.cpp | 2 +- dom/worklet/WorkletThread.cpp | 2 +- extensions/auth/nsHttpNegotiateAuth.cpp | 10 +- extensions/permissions/PermissionManager.cpp | 6 +- gfx/thebes/gfxFcPlatformFontList.cpp | 8 +- gfx/thebes/gfxMacPlatformFontList.h | 12 + gfx/thebes/gfxMacPlatformFontList.mm | 83 + gfx/thebes/gfxPlatformFontList.cpp | 7 +- gfx/thebes/gfxPlatformMac.cpp | 73 +- gfx/thebes/gfxPlatformMac.h | 2 + intl/l10n/Localization.h | 3 +- intl/locale/LocaleService.cpp | 6 + intl/strres/nsStringBundle.cpp | 1 + js/xpconnect/src/xpc.msg | 10 + layout/base/nsLayoutUtils.cpp | 5 +- layout/generic/ReflowInput.cpp | 19 +- layout/generic/test/mochitest.ini | 1 + layout/generic/test/test_tor_bug23104.html | 50 + memory/build/Mutex.cpp | 21 + memory/build/Mutex.h | 81 +- memory/build/moz.build | 1 + memory/replace/logalloc/LogAlloc.cpp | 13 +- memory/replace/phc/PHC.cpp | 5 +- mobile/android/app/000-tor-browser-android.js | 37 + mobile/android/app/geckoview-prefs.js | 2 + mobile/android/app/mobile.js | 4 + mobile/android/app/moz.build | 1 + mobile/android/branding/beta/locales/jar.mn | 9 +- mobile/android/branding/nightly/locales/jar.mn | 9 +- mobile/android/branding/official/locales/jar.mn | 9 +- mobile/android/branding/unofficial/locales/jar.mn | 9 +- .../components/geckoview/GeckoViewStartup.jsm | 5 + mobile/android/confvars.sh | 8 + .../exoplayer2/upstream/DefaultHttpDataSource.java | 46 +- mobile/android/geckoview/api.txt | 9 + mobile/android/geckoview/build.gradle | 1 + .../android/geckoview/src/main/AndroidManifest.xml | 14 + .../gecko/media/GeckoMediaDrmBridgeV21.java | 50 +- .../java/org/mozilla/gecko/util/ProxySelector.java | 25 +- .../java/org/mozilla/geckoview/GeckoRuntime.java | 8 +- .../mozilla/geckoview/GeckoRuntimeSettings.java | 126 +- .../java/org/mozilla/geckoview/WebRequest.java | 18 + mobile/android/gradle/with_gecko_binaries.gradle | 6 +- mobile/android/installer/package-manifest.in | 7 + .../modules/geckoview/GeckoViewProgress.jsm | 4 + mobile/android/moz.configure | 21 +- mobile/android/torbrowser.configure | 30 + modules/libmar/tool/mar.c | 6 +- modules/libmar/tool/moz.build | 12 +- modules/libmar/verify/moz.build | 14 +- modules/libpref/init/StaticPrefList.yaml | 16 + modules/libpref/init/all.js | 5 +- moz.configure | 90 + mozconfig-android-aarch64 | 4 + mozconfig-android-all | 22 + mozconfig-android-armv7 | 4 + mozconfig-android-x86 | 4 + mozconfig-android-x86_64 | 4 + mozconfig-linux-arm | 18 + mozconfig-linux-i686 | 9 + mozconfig-linux-x86_64 | 9 + mozconfig-linux-x86_64-asan | 22 + mozconfig-linux-x86_64-dev | 15 + mozconfig-macos-x86_64 | 8 + mozconfig-windows-i686 | 14 + mozconfig-windows-x86_64 | 14 + netwerk/base/nsSocketTransport2.cpp | 6 + netwerk/build/components.conf | 11 + netwerk/build/nsNetCID.h | 10 + netwerk/dns/IOnionAliasService.idl | 34 + netwerk/dns/OnionAliasService.cpp | 99 + netwerk/dns/OnionAliasService.h | 40 + netwerk/dns/effective_tld_names.dat | 2 + netwerk/dns/moz.build | 4 + netwerk/protocol/http/nsHttpNTLMAuth.cpp | 9 +- netwerk/socket/nsSOCKSIOLayer.cpp | 73 +- .../url-classifier/UrlClassifierFeatureBase.cpp | 2 +- netwerk/url-classifier/components.conf | 6 - python/mozbuild/mozbuild/artifacts.py | 2 - python/mozbuild/mozbuild/mach_commands.py | 4 + run-tbb-tests | 66 + security/certverifier/CertVerifier.cpp | 22 +- security/manager/ssl/RemoteSecuritySettings.jsm | 23 + security/manager/ssl/SSLServerCertVerification.cpp | 23 +- security/manager/ssl/SSLServerCertVerification.h | 4 +- security/manager/ssl/nsNSSIOLayer.cpp | 13 +- security/manager/ssl/nsSecureBrowserUI.cpp | 12 + security/moz.build | 2 +- security/nss/lib/certhigh/ocsp.c | 4 + .../libpkix/pkix_pl_nss/module/pkix_pl_socket.c | 12 + security/nss/lib/mozpkix/include/pkix/Result.h | 2 + security/nss/lib/mozpkix/include/pkix/pkixnss.h | 1 + security/nss/lib/ssl/Makefile | 2 +- services/settings/IDBHelpers.jsm | 4 + services/settings/dumps/blocklists/moz.build | 14 +- services/settings/dumps/main/moz.build | 8 - services/settings/dumps/security-state/moz.build | 1 - taskcluster/ci/source-test/mozlint.yml | 1 + tbb-tests-ignore.txt | 13 + tbb-tests/browser.ini | 5 + tbb-tests/browser_tor_TB4.js | 35 + tbb-tests/browser_tor_bug2950.js | 74 + tbb-tests/browser_tor_omnibox.js | 20 + tbb-tests/mochitest.ini | 3 + tbb-tests/moz.build | 9 + tbb-tests/test_tor_bug2874.html | 25 + toolkit/actors/AboutHttpsOnlyErrorParent.jsm | 5 + .../components/antitracking/antitracking.manifest | 2 +- toolkit/components/antitracking/components.conf | 7 - .../EnterprisePoliciesParent.jsm | 9 +- toolkit/components/extensions/Extension.jsm | 9 + toolkit/components/extensions/ExtensionParent.jsm | 47 + .../components/httpsonlyerror/content/errorpage.js | 19 +- toolkit/components/moz.build | 2 + .../remotebrowserutils/RemoteWebNavigation.jsm | 4 + .../components/resistfingerprinting/RFPHelper.jsm | 237 +- toolkit/components/search/SearchService.jsm | 46 +- toolkit/components/securitylevel/SecurityLevel.jsm | 450 + .../securitylevel/SecurityLevel.manifest | 1 + toolkit/components/securitylevel/components.conf | 10 + toolkit/components/securitylevel/moz.build | 11 + toolkit/components/telemetry/app/TelemetrySend.jsm | 28 +- toolkit/components/telemetry/moz.build | 4 - .../tor-launcher/TorBootstrapRequest.jsm | 129 + .../components/tor-launcher/TorLauncherUtil.jsm | 569 ++ .../components/tor-launcher/TorMonitorService.jsm | 506 ++ toolkit/components/tor-launcher/TorParsers.jsm | 275 + toolkit/components/tor-launcher/TorProcess.jsm | 535 ++ .../components/tor-launcher/TorProtocolService.jsm | 752 ++ .../components/tor-launcher/TorStartupService.jsm | 84 + toolkit/components/tor-launcher/components.conf | 10 + toolkit/components/tor-launcher/moz.build | 17 + .../components/tor-launcher/tor-launcher.manifest | 1 + .../components/windowwatcher/nsWindowWatcher.cpp | 5 +- toolkit/content/license.html | 65 + toolkit/content/widgets/message-bar.css | 2 +- .../mozapps/profile/profileSelection.properties | 5 + toolkit/modules/AppConstants.jsm | 29 + toolkit/modules/Bech32Decode.jsm | 103 + toolkit/modules/PopupNotifications.jsm | 6 + toolkit/modules/QRCode.jsm | 1241 +++ toolkit/modules/RemotePageAccessManager.jsm | 41 + toolkit/modules/UpdateUtils.jsm | 31 +- toolkit/modules/moz.build | 6 + toolkit/moz.build | 1 + toolkit/moz.configure | 10 + toolkit/mozapps/extensions/AddonManager.jsm | 25 + .../mozapps/extensions/internal/XPIProvider.jsm | 14 +- toolkit/mozapps/extensions/test/browser/head.js | 1 + .../extensions/test/xpcshell/head_addons.js | 1 + toolkit/mozapps/update/UpdateService.jsm | 275 +- toolkit/mozapps/update/UpdateServiceStub.jsm | 4 + toolkit/mozapps/update/UpdateTelemetry.jsm | 1 + toolkit/mozapps/update/common/updatehelper.cpp | 8 + toolkit/mozapps/update/nsIUpdateService.idl | 11 + toolkit/mozapps/update/updater/launchchild_osx.mm | 2 + toolkit/mozapps/update/updater/moz.build | 2 +- .../updater/nightly_aurora_level3_primary.der | Bin 1225 -> 1245 bytes .../updater/nightly_aurora_level3_secondary.der | Bin 1225 -> 1245 bytes toolkit/mozapps/update/updater/release_primary.der | Bin 1225 -> 1229 bytes .../mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes .../mozapps/update/updater/updater-common.build | 24 +- toolkit/mozapps/update/updater/updater.cpp | 350 +- toolkit/profile/nsProfileLock.cpp | 11 + toolkit/profile/nsToolkitProfileService.cpp | 57 +- toolkit/profile/nsToolkitProfileService.h | 13 +- toolkit/toolkit.mozbuild | 3 +- toolkit/torbutton/.gitignore | 1 + toolkit/torbutton/CREDITS | 5 + toolkit/torbutton/LICENSE | 29 + .../chrome/content/aboutTor/aboutTor-content.js | 139 + .../chrome/content/aboutTor/aboutTor.xhtml | 112 + .../chrome/content/aboutTor/resources/aboutTor.js | 11 + .../torbutton/chrome/content/preferences-mobile.js | 59 + toolkit/torbutton/chrome/content/preferences.xhtml | 84 + .../chrome/content/tor-circuit-display.js | 604 ++ toolkit/torbutton/chrome/content/torbutton.js | 1044 +++ toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ar/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ar/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ar/brand.dtd | 19 + .../torbutton/chrome/locale/ar/brand.properties | 20 + .../torbutton/chrome/locale/ar/branding/brand.ftl | 12 + .../chrome/locale/ar/browserOnboarding.properties | 72 + .../chrome/locale/ar/network-settings.dtd | 179 + .../chrome/locale/ar/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ar/torbutton.dtd | 56 + .../chrome/locale/ar/torbutton.properties | 187 + .../chrome/locale/ar/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ca/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ca/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ca/brand.dtd | 19 + .../torbutton/chrome/locale/ca/brand.properties | 20 + .../torbutton/chrome/locale/ca/branding/brand.ftl | 12 + .../chrome/locale/ca/browserOnboarding.properties | 72 + .../chrome/locale/ca/network-settings.dtd | 180 + .../chrome/locale/ca/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ca/torbutton.dtd | 56 + .../chrome/locale/ca/torbutton.properties | 187 + .../chrome/locale/ca/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/cs/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/cs/aboutTor.dtd | 41 + toolkit/torbutton/chrome/locale/cs/brand.dtd | 19 + .../torbutton/chrome/locale/cs/brand.properties | 20 + .../torbutton/chrome/locale/cs/branding/brand.ftl | 12 + .../chrome/locale/cs/browserOnboarding.properties | 72 + .../chrome/locale/cs/network-settings.dtd | 179 + .../chrome/locale/cs/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/cs/torbutton.dtd | 56 + .../chrome/locale/cs/torbutton.properties | 187 + .../chrome/locale/cs/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/da/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/da/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/da/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/da/brand.dtd | 19 + .../torbutton/chrome/locale/da/brand.properties | 20 + .../torbutton/chrome/locale/da/branding/brand.ftl | 12 + .../chrome/locale/da/browserOnboarding.properties | 72 + .../chrome/locale/da/network-settings.dtd | 179 + .../chrome/locale/da/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/da/torbutton.dtd | 56 + .../chrome/locale/da/torbutton.properties | 187 + .../chrome/locale/da/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/de/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/de/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/de/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/de/brand.dtd | 19 + .../torbutton/chrome/locale/de/brand.properties | 20 + .../torbutton/chrome/locale/de/branding/brand.ftl | 12 + .../chrome/locale/de/browserOnboarding.properties | 72 + .../chrome/locale/de/network-settings.dtd | 179 + .../chrome/locale/de/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/de/torbutton.dtd | 56 + .../chrome/locale/de/torbutton.properties | 187 + .../chrome/locale/de/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/el/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/el/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/el/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/el/brand.dtd | 19 + .../torbutton/chrome/locale/el/brand.properties | 20 + .../torbutton/chrome/locale/el/branding/brand.ftl | 12 + .../chrome/locale/el/browserOnboarding.properties | 72 + .../chrome/locale/el/network-settings.dtd | 179 + .../chrome/locale/el/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/el/torbutton.dtd | 56 + .../chrome/locale/el/torbutton.properties | 187 + .../chrome/locale/el/torlauncher.properties | 97 + .../torbutton/chrome/locale/en-US/aboutDialog.dtd | 19 + .../chrome/locale/en-US/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/en-US/brand.dtd | 19 + .../torbutton/chrome/locale/en-US/brand.properties | 20 + .../chrome/locale/en-US/branding/brand.ftl | 12 + .../locale/en-US/browserOnboarding.properties | 72 + .../chrome/locale/en-US/network-settings.dtd | 179 + .../chrome/locale/en-US/onboarding.properties | 19 + .../torbutton/chrome/locale/en-US/torbutton.dtd | 56 + .../chrome/locale/en-US/torbutton.properties | 187 + .../chrome/locale/en-US/torlauncher.properties | 97 + .../torbutton/chrome/locale/es-ES/aboutDialog.dtd | 19 + .../chrome/locale/es-ES/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/es-ES/brand.dtd | 19 + .../torbutton/chrome/locale/es-ES/brand.properties | 20 + .../chrome/locale/es-ES/branding/brand.ftl | 12 + .../locale/es-ES/browserOnboarding.properties | 72 + .../chrome/locale/es-ES/network-settings.dtd | 179 + .../chrome/locale/es-ES/onboarding.properties | 19 + .../torbutton/chrome/locale/es-ES/torbutton.dtd | 56 + .../chrome/locale/es-ES/torbutton.properties | 187 + .../chrome/locale/es-ES/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/fa/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/fa/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/fa/brand.dtd | 19 + .../torbutton/chrome/locale/fa/brand.properties | 20 + .../torbutton/chrome/locale/fa/branding/brand.ftl | 12 + .../chrome/locale/fa/browserOnboarding.properties | 72 + .../chrome/locale/fa/network-settings.dtd | 179 + .../chrome/locale/fa/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/fa/torbutton.dtd | 56 + .../chrome/locale/fa/torbutton.properties | 187 + .../chrome/locale/fa/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/fr/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/fr/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/fr/brand.dtd | 19 + .../torbutton/chrome/locale/fr/brand.properties | 20 + .../torbutton/chrome/locale/fr/branding/brand.ftl | 12 + .../chrome/locale/fr/browserOnboarding.properties | 72 + .../chrome/locale/fr/network-settings.dtd | 181 + .../chrome/locale/fr/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/fr/torbutton.dtd | 56 + .../chrome/locale/fr/torbutton.properties | 187 + .../chrome/locale/fr/torlauncher.properties | 97 + .../torbutton/chrome/locale/ga-IE/aboutDialog.dtd | 19 + .../chrome/locale/ga-IE/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ga-IE/brand.dtd | 19 + .../torbutton/chrome/locale/ga-IE/brand.properties | 20 + .../chrome/locale/ga-IE/branding/brand.ftl | 12 + .../locale/ga-IE/browserOnboarding.properties | 72 + .../chrome/locale/ga-IE/network-settings.dtd | 179 + .../chrome/locale/ga-IE/onboarding.properties | 19 + .../torbutton/chrome/locale/ga-IE/torbutton.dtd | 56 + .../chrome/locale/ga-IE/torbutton.properties | 187 + .../chrome/locale/ga-IE/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/he/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/he/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/he/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/he/brand.dtd | 19 + .../torbutton/chrome/locale/he/brand.properties | 20 + .../torbutton/chrome/locale/he/branding/brand.ftl | 12 + .../chrome/locale/he/browserOnboarding.properties | 72 + .../chrome/locale/he/network-settings.dtd | 179 + .../chrome/locale/he/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/he/torbutton.dtd | 56 + .../chrome/locale/he/torbutton.properties | 187 + .../chrome/locale/he/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/hu/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/hu/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/hu/brand.dtd | 19 + .../torbutton/chrome/locale/hu/brand.properties | 20 + .../torbutton/chrome/locale/hu/branding/brand.ftl | 12 + .../chrome/locale/hu/browserOnboarding.properties | 72 + .../chrome/locale/hu/network-settings.dtd | 179 + .../chrome/locale/hu/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/hu/torbutton.dtd | 56 + .../chrome/locale/hu/torbutton.properties | 187 + .../chrome/locale/hu/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/id/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/id/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/id/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/id/brand.dtd | 19 + .../torbutton/chrome/locale/id/brand.properties | 20 + .../torbutton/chrome/locale/id/branding/brand.ftl | 12 + .../chrome/locale/id/browserOnboarding.properties | 72 + .../chrome/locale/id/network-settings.dtd | 179 + .../chrome/locale/id/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/id/torbutton.dtd | 56 + .../chrome/locale/id/torbutton.properties | 187 + .../chrome/locale/id/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/is/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/is/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/is/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/is/brand.dtd | 19 + .../torbutton/chrome/locale/is/brand.properties | 20 + .../torbutton/chrome/locale/is/branding/brand.ftl | 12 + .../chrome/locale/is/browserOnboarding.properties | 72 + .../chrome/locale/is/network-settings.dtd | 179 + .../chrome/locale/is/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/is/torbutton.dtd | 56 + .../chrome/locale/is/torbutton.properties | 187 + .../chrome/locale/is/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/it/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/it/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/it/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/it/brand.dtd | 19 + .../torbutton/chrome/locale/it/brand.properties | 20 + .../torbutton/chrome/locale/it/branding/brand.ftl | 12 + .../chrome/locale/it/browserOnboarding.properties | 72 + .../chrome/locale/it/network-settings.dtd | 179 + .../chrome/locale/it/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/it/torbutton.dtd | 56 + .../chrome/locale/it/torbutton.properties | 187 + .../chrome/locale/it/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ja/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ja/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ja/brand.dtd | 19 + .../torbutton/chrome/locale/ja/brand.properties | 20 + .../torbutton/chrome/locale/ja/branding/brand.ftl | 12 + .../chrome/locale/ja/browserOnboarding.properties | 72 + .../chrome/locale/ja/network-settings.dtd | 179 + .../chrome/locale/ja/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ja/torbutton.dtd | 56 + .../chrome/locale/ja/torbutton.properties | 187 + .../chrome/locale/ja/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ka/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ka/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ka/brand.dtd | 19 + .../torbutton/chrome/locale/ka/brand.properties | 20 + .../torbutton/chrome/locale/ka/branding/brand.ftl | 12 + .../chrome/locale/ka/browserOnboarding.properties | 72 + .../chrome/locale/ka/network-settings.dtd | 179 + .../chrome/locale/ka/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ka/torbutton.dtd | 56 + .../chrome/locale/ka/torbutton.properties | 187 + .../chrome/locale/ka/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ko/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ko/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ko/brand.dtd | 19 + .../torbutton/chrome/locale/ko/brand.properties | 20 + .../torbutton/chrome/locale/ko/branding/brand.ftl | 12 + .../chrome/locale/ko/browserOnboarding.properties | 72 + .../chrome/locale/ko/network-settings.dtd | 179 + .../chrome/locale/ko/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ko/torbutton.dtd | 56 + .../chrome/locale/ko/torbutton.properties | 187 + .../chrome/locale/ko/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/lt/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/lt/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/lt/brand.dtd | 19 + .../torbutton/chrome/locale/lt/brand.properties | 20 + .../torbutton/chrome/locale/lt/branding/brand.ftl | 12 + .../chrome/locale/lt/browserOnboarding.properties | 72 + .../chrome/locale/lt/network-settings.dtd | 179 + .../chrome/locale/lt/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/lt/torbutton.dtd | 56 + .../chrome/locale/lt/torbutton.properties | 187 + .../chrome/locale/lt/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/mk/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/mk/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/mk/brand.dtd | 19 + .../torbutton/chrome/locale/mk/brand.properties | 20 + .../torbutton/chrome/locale/mk/branding/brand.ftl | 12 + .../chrome/locale/mk/browserOnboarding.properties | 72 + .../chrome/locale/mk/network-settings.dtd | 179 + .../chrome/locale/mk/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/mk/torbutton.dtd | 56 + .../chrome/locale/mk/torbutton.properties | 187 + .../chrome/locale/mk/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ms/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ms/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ms/brand.dtd | 19 + .../torbutton/chrome/locale/ms/brand.properties | 20 + .../torbutton/chrome/locale/ms/branding/brand.ftl | 12 + .../chrome/locale/ms/browserOnboarding.properties | 72 + .../chrome/locale/ms/network-settings.dtd | 179 + .../chrome/locale/ms/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ms/torbutton.dtd | 56 + .../chrome/locale/ms/torbutton.properties | 187 + .../chrome/locale/ms/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/my/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/my/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/my/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/my/brand.dtd | 19 + .../torbutton/chrome/locale/my/brand.properties | 20 + .../torbutton/chrome/locale/my/branding/brand.ftl | 12 + .../chrome/locale/my/browserOnboarding.properties | 72 + .../chrome/locale/my/network-settings.dtd | 179 + toolkit/torbutton/chrome/locale/my/torbutton.dtd | 56 + .../chrome/locale/my/torbutton.properties | 187 + .../chrome/locale/my/torlauncher.properties | 97 + .../torbutton/chrome/locale/nb-NO/aboutDialog.dtd | 19 + .../chrome/locale/nb-NO/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/nb-NO/brand.dtd | 19 + .../torbutton/chrome/locale/nb-NO/brand.properties | 20 + .../chrome/locale/nb-NO/branding/brand.ftl | 12 + .../locale/nb-NO/browserOnboarding.properties | 72 + .../chrome/locale/nb-NO/network-settings.dtd | 179 + .../chrome/locale/nb-NO/onboarding.properties | 19 + .../torbutton/chrome/locale/nb-NO/torbutton.dtd | 56 + .../chrome/locale/nb-NO/torbutton.properties | 187 + .../chrome/locale/nb-NO/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/nl/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/nl/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/nl/brand.dtd | 19 + .../torbutton/chrome/locale/nl/brand.properties | 20 + .../torbutton/chrome/locale/nl/branding/brand.ftl | 12 + .../chrome/locale/nl/browserOnboarding.properties | 72 + .../chrome/locale/nl/network-settings.dtd | 179 + .../chrome/locale/nl/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/nl/torbutton.dtd | 56 + .../chrome/locale/nl/torbutton.properties | 187 + .../chrome/locale/nl/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/pl/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/pl/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/pl/brand.dtd | 19 + .../torbutton/chrome/locale/pl/brand.properties | 20 + .../torbutton/chrome/locale/pl/branding/brand.ftl | 12 + .../chrome/locale/pl/browserOnboarding.properties | 72 + .../chrome/locale/pl/network-settings.dtd | 179 + .../chrome/locale/pl/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/pl/torbutton.dtd | 56 + .../chrome/locale/pl/torbutton.properties | 187 + .../chrome/locale/pl/torlauncher.properties | 97 + .../torbutton/chrome/locale/pt-BR/aboutDialog.dtd | 19 + .../chrome/locale/pt-BR/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/pt-BR/brand.dtd | 19 + .../torbutton/chrome/locale/pt-BR/brand.properties | 20 + .../chrome/locale/pt-BR/branding/brand.ftl | 12 + .../locale/pt-BR/browserOnboarding.properties | 72 + .../chrome/locale/pt-BR/network-settings.dtd | 179 + .../chrome/locale/pt-BR/onboarding.properties | 19 + .../torbutton/chrome/locale/pt-BR/torbutton.dtd | 56 + .../chrome/locale/pt-BR/torbutton.properties | 187 + .../chrome/locale/pt-BR/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ro/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ro/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ro/brand.dtd | 19 + .../torbutton/chrome/locale/ro/brand.properties | 20 + .../torbutton/chrome/locale/ro/branding/brand.ftl | 12 + .../chrome/locale/ro/browserOnboarding.properties | 72 + .../chrome/locale/ro/network-settings.dtd | 179 + .../chrome/locale/ro/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ro/torbutton.dtd | 57 + .../chrome/locale/ro/torbutton.properties | 187 + .../chrome/locale/ro/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ru/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ru/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/ru/brand.dtd | 19 + .../torbutton/chrome/locale/ru/brand.properties | 20 + .../torbutton/chrome/locale/ru/branding/brand.ftl | 12 + .../chrome/locale/ru/browserOnboarding.properties | 72 + .../chrome/locale/ru/network-settings.dtd | 179 + .../chrome/locale/ru/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ru/torbutton.dtd | 56 + .../chrome/locale/ru/torbutton.properties | 187 + .../chrome/locale/ru/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/sq/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/sq/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/sq/brand.dtd | 19 + .../torbutton/chrome/locale/sq/brand.properties | 20 + .../torbutton/chrome/locale/sq/branding/brand.ftl | 12 + .../chrome/locale/sq/browserOnboarding.properties | 72 + .../chrome/locale/sq/network-settings.dtd | 179 + .../chrome/locale/sq/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/sq/torbutton.dtd | 56 + .../chrome/locale/sq/torbutton.properties | 187 + .../chrome/locale/sq/torlauncher.properties | 97 + .../torbutton/chrome/locale/sv-SE/aboutDialog.dtd | 19 + .../chrome/locale/sv-SE/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/sv-SE/brand.dtd | 19 + .../torbutton/chrome/locale/sv-SE/brand.properties | 20 + .../chrome/locale/sv-SE/branding/brand.ftl | 12 + .../locale/sv-SE/browserOnboarding.properties | 72 + .../chrome/locale/sv-SE/network-settings.dtd | 179 + .../chrome/locale/sv-SE/onboarding.properties | 19 + .../torbutton/chrome/locale/sv-SE/torbutton.dtd | 56 + .../chrome/locale/sv-SE/torbutton.properties | 187 + .../chrome/locale/sv-SE/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/th/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/th/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/th/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/th/brand.dtd | 19 + .../torbutton/chrome/locale/th/brand.properties | 20 + .../torbutton/chrome/locale/th/branding/brand.ftl | 12 + .../chrome/locale/th/browserOnboarding.properties | 72 + .../chrome/locale/th/network-settings.dtd | 179 + .../chrome/locale/th/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/th/torbutton.dtd | 56 + .../chrome/locale/th/torbutton.properties | 187 + .../chrome/locale/th/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/tr/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/tr/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/tr/brand.dtd | 19 + .../torbutton/chrome/locale/tr/brand.properties | 20 + .../torbutton/chrome/locale/tr/branding/brand.ftl | 12 + .../chrome/locale/tr/browserOnboarding.properties | 72 + .../chrome/locale/tr/network-settings.dtd | 179 + .../chrome/locale/tr/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/tr/torbutton.dtd | 56 + .../chrome/locale/tr/torbutton.properties | 187 + .../chrome/locale/tr/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/uk/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/uk/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/uk/brand.dtd | 19 + .../torbutton/chrome/locale/uk/brand.properties | 20 + .../torbutton/chrome/locale/uk/branding/brand.ftl | 12 + .../chrome/locale/uk/browserOnboarding.properties | 72 + .../chrome/locale/uk/network-settings.dtd | 179 + .../chrome/locale/uk/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/uk/torbutton.dtd | 56 + .../chrome/locale/uk/torbutton.properties | 187 + .../chrome/locale/uk/torlauncher.properties | 97 + toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/vi/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/vi/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/vi/brand.dtd | 19 + .../torbutton/chrome/locale/vi/brand.properties | 20 + .../torbutton/chrome/locale/vi/branding/brand.ftl | 12 + .../chrome/locale/vi/browserOnboarding.properties | 72 + .../chrome/locale/vi/network-settings.dtd | 179 + .../chrome/locale/vi/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/vi/torbutton.dtd | 56 + .../chrome/locale/vi/torbutton.properties | 187 + .../chrome/locale/vi/torlauncher.properties | 97 + .../torbutton/chrome/locale/zh-CN/aboutDialog.dtd | 19 + .../chrome/locale/zh-CN/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/zh-CN/brand.dtd | 19 + .../torbutton/chrome/locale/zh-CN/brand.properties | 20 + .../chrome/locale/zh-CN/branding/brand.ftl | 12 + .../locale/zh-CN/browserOnboarding.properties | 72 + .../chrome/locale/zh-CN/network-settings.dtd | 179 + .../chrome/locale/zh-CN/onboarding.properties | 19 + .../torbutton/chrome/locale/zh-CN/torbutton.dtd | 56 + .../chrome/locale/zh-CN/torbutton.properties | 187 + .../chrome/locale/zh-CN/torlauncher.properties | 97 + .../torbutton/chrome/locale/zh-TW/aboutDialog.dtd | 19 + .../chrome/locale/zh-TW/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd | 60 + toolkit/torbutton/chrome/locale/zh-TW/brand.dtd | 19 + .../torbutton/chrome/locale/zh-TW/brand.properties | 20 + .../chrome/locale/zh-TW/branding/brand.ftl | 12 + .../locale/zh-TW/browserOnboarding.properties | 72 + .../chrome/locale/zh-TW/network-settings.dtd | 179 + .../chrome/locale/zh-TW/onboarding.properties | 19 + .../torbutton/chrome/locale/zh-TW/torbutton.dtd | 56 + .../chrome/locale/zh-TW/torbutton.properties | 187 + .../chrome/locale/zh-TW/torlauncher.properties | 97 + toolkit/torbutton/chrome/skin/about-wordmark.png | Bin 0 -> 4609 bytes toolkit/torbutton/chrome/skin/aboutDialog.css | 34 + toolkit/torbutton/chrome/skin/aboutTor.css | 313 + toolkit/torbutton/chrome/skin/banner-warning.svg | 1 + toolkit/torbutton/chrome/skin/dax-logo.svg | 1 + toolkit/torbutton/chrome/skin/icon-newsletter.png | Bin 0 -> 649 bytes .../torbutton/chrome/skin/preferences-mobile.css | 47 + toolkit/torbutton/chrome/skin/preferences.css | 7 + .../torbutton/chrome/skin/tor-circuit-display.css | 193 + .../chrome/skin/tor-circuit-line-first.svg | 6 + .../chrome/skin/tor-circuit-line-last.svg | 6 + toolkit/torbutton/chrome/skin/tor-circuit-line.svg | 7 + toolkit/torbutton/chrome/skin/tor.png | Bin 0 -> 2073 bytes .../chrome/skin/torbrowser_mobile_logo.png | Bin 0 -> 9345 bytes toolkit/torbutton/chrome/skin/torbutton.css | 14 + toolkit/torbutton/chrome/skin/torbutton.svg | 3 + toolkit/torbutton/components/domain-isolator.js | 228 + toolkit/torbutton/components/dragDropFilter.js | 134 + .../torbutton/components/external-app-blocker.js | 160 + toolkit/torbutton/components/startup-observer.js | 196 + toolkit/torbutton/components/torCheckService.js | 140 + toolkit/torbutton/components/torbutton-logger.js | 185 + toolkit/torbutton/import-translations.sh | 121 + toolkit/torbutton/jar.mn | 129 + toolkit/torbutton/modules/tor-control-port.js | 982 +++ toolkit/torbutton/modules/utils.js | 318 + toolkit/torbutton/moz.build | 6 + toolkit/xre/MacLaunchHelper.h | 2 + toolkit/xre/MacLaunchHelper.mm | 2 + toolkit/xre/MacRunFromDmgUtils.mm | 4 +- .../dllservices/mozglue/WindowsDllBlocklist.cpp | 6 +- toolkit/xre/moz.build | 3 + toolkit/xre/nsAppRunner.cpp | 270 +- toolkit/xre/nsUpdateDriver.cpp | 180 +- toolkit/xre/nsXREDirProvider.cpp | 144 +- toolkit/xre/nsXREDirProvider.h | 14 + tools/lint/codespell.yml | 1 + .../lib/environments/browser-window.js | 10 +- .../lib/environments/frame-script.js | 1 + tools/torbrowser/Makefile | 47 + tools/torbrowser/bridges.js | 77 + tools/torbrowser/build.sh | 7 + tools/torbrowser/clobber.sh | 6 + tools/torbrowser/config.sh | 6 + tools/torbrowser/deploy.sh | 30 + tools/torbrowser/fataar.sh | 34 + tools/torbrowser/fetch.sh | 30 + tools/torbrowser/ide.sh | 7 + tools/torbrowser/jslint.sh | 7 + tools/torbrowser/update_bridgemoiji.py | 115 + tools/update-packaging/common.sh | 64 +- tools/update-packaging/make_full_update.sh | 25 + tools/update-packaging/make_incremental_update.sh | 71 +- .../exthandler/nsExternalHelperAppService.cpp | 222 +- uriloader/exthandler/nsExternalHelperAppService.h | 3 + .../exthandler/nsIExternalHelperAppService.idl | 47 + widget/GfxDriverInfo.h | 3 + widget/LookAndFeel.h | 4 +- widget/android/WebExecutorSupport.cpp | 9 + widget/gtk/nsNativeThemeGTK.cpp | 8 +- widget/nsTransferable.cpp | 5 + widget/nsXPLookAndFeel.cpp | 18 +- widget/nsXPLookAndFeel.h | 3 +- widget/windows/nsWindow.cpp | 3 +- xpcom/base/CycleCollectedJSContext.cpp | 51 +- xpcom/base/CycleCollectedJSContext.h | 29 +- xpcom/base/ErrorList.py | 22 + xpcom/ds/StaticAtoms.py | 1 + xpcom/io/TorFileUtils.cpp | 96 + xpcom/io/TorFileUtils.h | 32 + xpcom/io/moz.build | 5 + xpcom/io/nsAppFileLocationProvider.cpp | 72 +- xpfe/appshell/nsAppShellService.cpp | 3 +- 1458 files changed, 75488 insertions(+), 3534 deletions(-) create mode 100644 .gitlab/issue_templates/UXBug.md create mode 100644 .gitlab/issue_templates/bug.md create mode 100644 browser/actors/AboutTBUpdateChild.jsm create mode 100644 browser/actors/AboutTBUpdateParent.jsm create mode 100644 browser/actors/CryptoSafetyChild.jsm create mode 100644 browser/actors/CryptoSafetyParent.jsm create mode 100644 browser/app/profile/000-tor-browser.js create mode 100644 browser/app/profile/001-base-profile.js create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.css create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.js create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.xhtml create mode 100644 browser/base/content/browser-doctype.inc create mode 100644 browser/base/content/languageNotification.js create mode 100644 browser/branding/alpha/VisualElements_150.png create mode 100644 browser/branding/alpha/VisualElements_70.png create mode 100644 browser/branding/alpha/background.png create mode 100644 browser/branding/alpha/bgstub.jpg create mode 100644 browser/branding/alpha/bgstub_2x.jpg copy browser/branding/{nightly => alpha}/branding.nsi (100%) create mode 100644 browser/branding/alpha/configure.sh create mode 100644 browser/branding/alpha/content/about-logo.png copy browser/branding/{nightly => alpha}/content/about-logo.svg (100%) create mode 100644 browser/branding/alpha/content/about-logo@2x.png create mode 100644 browser/branding/alpha/content/about-wordmark.svg create mode 100644 browser/branding/alpha/content/about.png create mode 100644 browser/branding/alpha/content/aboutDialog.css create mode 100644 browser/branding/alpha/content/aboutlogins.svg copy browser/branding/{nightly => alpha}/content/firefox-wordmark.svg (100%) create mode 100644 browser/branding/alpha/content/identity-icons-brand.svg create mode 100644 browser/branding/alpha/content/jar.mn copy browser/branding/{aurora => alpha}/content/moz.build (100%) create mode 100644 browser/branding/alpha/content/tor-styles.css create mode 100644 browser/branding/alpha/default128.png create mode 100644 browser/branding/alpha/default16.png create mode 100644 browser/branding/alpha/default22.png create mode 100644 browser/branding/alpha/default24.png create mode 100644 browser/branding/alpha/default256.png create mode 100644 browser/branding/alpha/default32.png create mode 100644 browser/branding/alpha/default48.png create mode 100644 browser/branding/alpha/default512.png create mode 100644 browser/branding/alpha/default64.png create mode 100644 browser/branding/alpha/disk.icns create mode 100644 browser/branding/alpha/document.icns create mode 100644 browser/branding/alpha/document.ico create mode 100644 browser/branding/alpha/document_pdf.ico copy browser/branding/{nightly => alpha}/dsstore (100%) create mode 100644 browser/branding/alpha/firefox.VisualElementsManifest.xml create mode 100644 browser/branding/alpha/firefox.icns create mode 100644 browser/branding/alpha/firefox.ico create mode 100644 browser/branding/alpha/firefox.svg create mode 100644 browser/branding/alpha/firefox64.ico create mode 100644 browser/branding/alpha/locales/jar.mn copy browser/branding/{aurora/content => alpha/locales}/moz.build (100%) copy browser/branding/{aurora => alpha}/moz.build (100%) copy browser/branding/{aurora => alpha}/newtab.ico (100%) copy browser/branding/{aurora => alpha}/newwindow.ico (100%) copy browser/branding/{aurora => alpha}/pbmode.ico (100%) create mode 100644 browser/branding/alpha/pref/firefox-branding.js copy browser/branding/{nightly => alpha}/stubinstaller/bgstub.jpg (100%) copy browser/branding/{nightly => alpha}/stubinstaller/installing_page.css (100%) copy browser/branding/{aurora => alpha}/stubinstaller/profile_cleanup_page.css (100%) create mode 100644 browser/branding/alpha/wizHeader.bmp create mode 100644 browser/branding/alpha/wizHeaderRTL.bmp create mode 100644 browser/branding/alpha/wizWatermark.bmp create mode 100644 browser/branding/nightly/content/identity-icons-brand.svg create mode 100644 browser/branding/nightly/content/tor-styles.css create mode 100644 browser/branding/nightly/default512.png create mode 100644 browser/branding/nightly/firefox.svg create mode 100644 browser/branding/official/content/identity-icons-brand.svg create mode 100644 browser/branding/official/content/tor-styles.css create mode 100644 browser/branding/official/default512.png create mode 100644 browser/branding/official/firefox.svg create mode 100644 browser/branding/tor-styles.inc.css create mode 100644 browser/components/newidentity/content/newidentity.js create mode 100644 browser/components/newidentity/jar.mn create mode 100644 browser/components/newidentity/locale/en-US/newIdentity.properties create mode 100644 browser/components/newidentity/moz.build create mode 100644 browser/components/onionservices/OnionAliasStore.jsm create mode 100644 browser/components/onionservices/OnionLocationChild.jsm create mode 100644 browser/components/onionservices/OnionLocationParent.jsm create mode 100644 browser/components/onionservices/content/authNotificationIcon.inc.xhtml create mode 100644 browser/components/onionservices/content/authPopup.inc.xhtml create mode 100644 browser/components/onionservices/content/authPreferences.css create mode 100644 browser/components/onionservices/content/authPreferences.inc.xhtml create mode 100644 browser/components/onionservices/content/authPreferences.js create mode 100644 browser/components/onionservices/content/authPrompt.js create mode 100644 browser/components/onionservices/content/authUtil.jsm create mode 100644 browser/components/onionservices/content/netError/browser.svg create mode 100644 browser/components/onionservices/content/netError/network.svg create mode 100644 browser/components/onionservices/content/netError/onionNetError.css create mode 100644 browser/components/onionservices/content/netError/onionNetError.js create mode 100644 browser/components/onionservices/content/netError/onionsite.svg create mode 100644 browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml create mode 100644 browser/components/onionservices/content/onionlocation.css create mode 100644 browser/components/onionservices/content/onionlocation.svg create mode 100644 browser/components/onionservices/content/onionlocationPreferences.inc.xhtml create mode 100644 browser/components/onionservices/content/onionlocationPreferences.js create mode 100644 browser/components/onionservices/content/onionservices.css create mode 100644 browser/components/onionservices/content/savedKeysDialog.js create mode 100644 browser/components/onionservices/content/savedKeysDialog.xhtml create mode 100644 browser/components/onionservices/jar.mn create mode 100644 browser/components/onionservices/moz.build create mode 100644 browser/components/rulesets/RulesetsChild.jsm create mode 100644 browser/components/rulesets/RulesetsParent.jsm create mode 100644 browser/components/rulesets/content/aboutRulesets.css create mode 100644 browser/components/rulesets/content/aboutRulesets.html create mode 100644 browser/components/rulesets/content/aboutRulesets.js create mode 100644 browser/components/rulesets/content/securedrop.svg create mode 100644 browser/components/rulesets/jar.mn create mode 100644 browser/components/rulesets/moz.build create mode 100644 browser/components/search/extensions/blockchair-onion/favicon.png create mode 100644 browser/components/search/extensions/blockchair-onion/manifest.json create mode 100644 browser/components/search/extensions/blockchair/favicon.png create mode 100644 browser/components/search/extensions/blockchair/manifest.json create mode 100644 browser/components/search/extensions/ddg-onion/favicon.ico create mode 100644 browser/components/search/extensions/ddg-onion/manifest.json delete mode 100644 browser/components/search/extensions/ddg/favicon.ico create mode 100644 browser/components/search/extensions/ddg/favicon.png delete mode 100644 browser/components/search/extensions/google/_locales/b-1-d/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/b-1-e/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/b-d/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/b-e/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/en/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/region-by/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/region-kz/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/region-ru/messages.json delete mode 100644 browser/components/search/extensions/google/_locales/region-tr/messages.json create mode 100644 browser/components/search/extensions/startpage/favicon.png create mode 100644 browser/components/search/extensions/startpage/manifest.json copy browser/components/{newtab/data/content/tippytop/favicons/twitter-com.ico => search/extensions/twitter/favicon.ico} (100%) create mode 100644 browser/components/search/extensions/twitter/manifest.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NN/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NO/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/af/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/an/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ar/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ast/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/az/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bg/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bn/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/br/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bs/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ca/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cy/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cz/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/da/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/de/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/dsb/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/el/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/en/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eo/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/es/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/et/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eu/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fa/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fi/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gd/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gl/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gn/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gu/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/he/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hi/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hsb/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hu/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hy/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ia/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/id/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/is/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/it/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ja/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ka/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kab/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kk/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/km/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kn/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lij/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lo/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lt/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ltg/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lv/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mk/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ms/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/my/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ne/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/nl/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/oc/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pa/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pl/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pt/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/rm/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ro/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ru/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/si/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sk/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sl/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sq/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ta/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/te/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/th/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tl/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tr/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uk/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ur/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uz/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/vi/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/wo/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json create mode 100644 browser/components/search/extensions/yahoo/favicon.ico create mode 100644 browser/components/search/extensions/yahoo/manifest.json create mode 100644 browser/components/search/extensions/youtube/favicon.ico create mode 100644 browser/components/search/extensions/youtube/manifest.json create mode 100644 browser/components/securitylevel/content/securityLevel.js create mode 100644 browser/components/securitylevel/content/securityLevelButton.css create mode 100644 browser/components/securitylevel/content/securityLevelButton.inc.xhtml create mode 100644 browser/components/securitylevel/content/securityLevelIcon.svg create mode 100644 browser/components/securitylevel/content/securityLevelPanel.css create mode 100644 browser/components/securitylevel/content/securityLevelPanel.inc.xhtml create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.css create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml create mode 100644 browser/components/securitylevel/jar.mn create mode 100644 browser/components/securitylevel/locale/en-US/securityLevel.properties create mode 100644 browser/components/securitylevel/moz.build create mode 100644 browser/components/torconnect/TorConnectChild.jsm create mode 100644 browser/components/torconnect/TorConnectParent.jsm create mode 100644 browser/components/torconnect/content/aboutTorConnect.css create mode 100644 browser/components/torconnect/content/aboutTorConnect.js create mode 100644 browser/components/torconnect/content/aboutTorConnect.xhtml create mode 100644 browser/components/torconnect/content/arrow-right.svg create mode 100644 browser/components/torconnect/content/bridge.svg create mode 100644 browser/components/torconnect/content/connection-failure.svg create mode 100644 browser/components/torconnect/content/connection-location.svg create mode 100644 browser/components/torconnect/content/onion-slash-fillable.svg create mode 100644 browser/components/torconnect/content/onion-slash.svg create mode 100644 browser/components/torconnect/content/onion.svg create mode 100644 browser/components/torconnect/content/torBootstrapUrlbar.js create mode 100644 browser/components/torconnect/content/torconnect-urlbar.css create mode 100644 browser/components/torconnect/content/torconnect-urlbar.inc.xhtml create mode 100644 browser/components/torconnect/jar.mn create mode 100644 browser/components/torconnect/moz.build create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.jsm create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.xhtml create mode 100644 browser/components/torpreferences/content/bridgemoji-annotations.json create mode 100644 browser/components/torpreferences/content/bridgemoji/1f300.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f308.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f319.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f31f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f321.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f332.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f333.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f334.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f335.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f336.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f337.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f339.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f341.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f344.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f345.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f346.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f347.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f348.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f349.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f350.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f351.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f352.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f353.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f354.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f355.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f368.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f369.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f37f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f380.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f381.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f382.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f383.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f388.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f389.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f38f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f392.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f399.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f39f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a1.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a8.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ac.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3af.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b7.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b8.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ba.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3bb.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3be.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c8.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d3.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d4.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3dd.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3e1.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ee.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f7.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f8.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f417.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f418.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f419.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f420.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f422.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f425.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f426.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f428.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f430.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f431.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f432.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f433.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f434.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f435.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f436.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f437.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f441.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f451.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f455.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f457.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f45f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f47d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f484.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f488.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f490.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a1.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a7.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4b3.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4bf.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4cc.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4ce.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4d5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e1.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4fb.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f50b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f511.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f525.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f526.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f54a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f5ff.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f680.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f681.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f686.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f695.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f697.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a4.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f4.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f8.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fa.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fc.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f916.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f93f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f941.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f950.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f951.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f955.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f956.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f965.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f966.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f968.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f980.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f981.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f984.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f986.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f987.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f988.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f989.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98b.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f992.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f993.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f994.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f995.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f998.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f999.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99a.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99c.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99d.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a3.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a4.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a7.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ad.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c1.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c3.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c7.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9d9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9da.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9dc.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ea.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ec.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ed.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ee.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f9.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa73.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa80.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa81.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa83.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa90.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa91.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa95.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa97.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fab6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad6.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/23f0.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2600.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2602.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2604.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/260e.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2693.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2696.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/26bd.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/26f2.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/26f5.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2708.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/270f.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2728.svg create mode 100644 browser/components/torpreferences/content/bridgemoji/2744.svg create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.jsm create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.xhtml create mode 100644 browser/components/torpreferences/content/check.svg create mode 100644 browser/components/torpreferences/content/connectionCategory.inc.xhtml create mode 100644 browser/components/torpreferences/content/connectionPane.js create mode 100644 browser/components/torpreferences/content/connectionPane.xhtml create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.jsm create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.xhtml copy toolkit/themes/shared/icons/defaultFavicon.svg => browser/components/torpreferences/content/network.svg (100%) create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.jsm create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.xhtml create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.jsm create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.xhtml create mode 100644 browser/components/torpreferences/content/torLogDialog.jsm create mode 100644 browser/components/torpreferences/content/torLogDialog.xhtml create mode 100644 browser/components/torpreferences/content/torPreferences.css create mode 100644 browser/components/torpreferences/content/torPreferencesIcon.svg create mode 100644 browser/components/torpreferences/jar.mn create mode 100644 browser/components/torpreferences/moz.build create mode 100644 browser/config/mozconfigs/base-browser create mode 100644 browser/config/mozconfigs/base-browser-android create mode 100644 browser/config/mozconfigs/tor-browser create mode 100644 browser/config/mozconfigs/tor-browser-android create mode 100644 browser/extensions/onboarding/OnboardingTelemetry.jsm create mode 100644 browser/extensions/onboarding/OnboardingTourType.jsm create mode 100644 browser/extensions/onboarding/README.md create mode 100644 browser/extensions/onboarding/api.js create mode 100644 browser/extensions/onboarding/background.js create mode 100644 browser/extensions/onboarding/content/Onboarding.jsm create mode 100644 browser/extensions/onboarding/content/img/close.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-circuit-display.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-expect-differences.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-network.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-onion-services.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-privacy.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security-level.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-toolbar-layout.png create mode 100644 browser/extensions/onboarding/content/img/figure_tor-welcome.png create mode 100644 browser/extensions/onboarding/content/img/icons_no-icon.png create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.png create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.svg create mode 100644 browser/extensions/onboarding/content/onboarding-tor-circuit-display.js create mode 100644 browser/extensions/onboarding/content/onboarding-tour-agent.js create mode 100644 browser/extensions/onboarding/content/onboarding.css create mode 100644 browser/extensions/onboarding/content/onboarding.js create mode 100644 browser/extensions/onboarding/data_events.md create mode 100644 browser/extensions/onboarding/jar.mn create mode 100644 browser/extensions/onboarding/locales/en-US/onboarding.properties create mode 100644 browser/extensions/onboarding/locales/jar.mn copy browser/{branding/aurora/content => extensions/onboarding/locales}/moz.build (100%) create mode 100644 browser/extensions/onboarding/manifest.json create mode 100644 browser/extensions/onboarding/moz.build copy browser/extensions/{formautofill => onboarding}/schema.json (100%) copy browser/{base/content/test/about => extensions/onboarding/test/browser}/.eslintrc.js (100%) create mode 100644 browser/extensions/onboarding/test/browser/browser.ini create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_accessibility.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_keyboard.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_2.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_3.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_4.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_5.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_click_auto_complete_tour.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_select_default_tour.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_skip_tour.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tours.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js create mode 100644 browser/extensions/onboarding/test/browser/head.js copy {ipc/testshell/tests => browser/extensions/onboarding/test/unit}/.eslintrc.js (100%) create mode 100644 browser/extensions/onboarding/test/unit/head.js create mode 100644 browser/extensions/onboarding/test/unit/test-onboarding-tour-type.js create mode 100644 browser/extensions/onboarding/test/unit/xpcshell.ini create mode 100644 browser/locales/en-US/browser/languageNotification.ftl create mode 100644 browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd create mode 100644 browser/modules/BridgeDB.jsm create mode 100644 browser/modules/Moat.jsm create mode 100644 browser/modules/TorConnect.jsm create mode 100644 browser/modules/TorSettings.jsm create mode 100644 browser/modules/TorStrings.jsm create mode 100644 browser/themes/shared/icons/new_circuit.svg create mode 100644 browser/themes/shared/icons/new_identity.svg create mode 100644 browser/themes/shared/identity-block/onion-slash.svg create mode 100644 browser/themes/shared/identity-block/onion-warning.svg create mode 100644 browser/themes/shared/identity-block/onion.svg create mode 100644 browser/themes/shared/onionPattern.css create mode 100644 browser/themes/shared/onionPattern.inc.xhtml create mode 100644 browser/themes/shared/onionPattern.svg delete mode 100644 dom/base/test/test_suppressed_microtasks.html create mode 100644 layout/generic/test/test_tor_bug23104.html create mode 100644 memory/build/Mutex.cpp create mode 100644 mobile/android/app/000-tor-browser-android.js create mode 100644 mobile/android/torbrowser.configure create mode 100644 mozconfig-android-aarch64 create mode 100644 mozconfig-android-all create mode 100644 mozconfig-android-armv7 create mode 100644 mozconfig-android-x86 create mode 100644 mozconfig-android-x86_64 create mode 100644 mozconfig-linux-arm create mode 100644 mozconfig-linux-i686 create mode 100644 mozconfig-linux-x86_64 create mode 100644 mozconfig-linux-x86_64-asan create mode 100644 mozconfig-linux-x86_64-dev create mode 100644 mozconfig-macos-x86_64 create mode 100644 mozconfig-windows-i686 create mode 100644 mozconfig-windows-x86_64 create mode 100644 netwerk/dns/IOnionAliasService.idl create mode 100644 netwerk/dns/OnionAliasService.cpp create mode 100644 netwerk/dns/OnionAliasService.h create mode 100755 run-tbb-tests create mode 100644 tbb-tests-ignore.txt create mode 100644 tbb-tests/browser.ini create mode 100644 tbb-tests/browser_tor_TB4.js create mode 100644 tbb-tests/browser_tor_bug2950.js create mode 100644 tbb-tests/browser_tor_omnibox.js create mode 100644 tbb-tests/mochitest.ini create mode 100644 tbb-tests/moz.build create mode 100644 tbb-tests/test_tor_bug2874.html create mode 100644 toolkit/components/securitylevel/SecurityLevel.jsm create mode 100644 toolkit/components/securitylevel/SecurityLevel.manifest create mode 100644 toolkit/components/securitylevel/components.conf create mode 100644 toolkit/components/securitylevel/moz.build create mode 100644 toolkit/components/tor-launcher/TorBootstrapRequest.jsm create mode 100644 toolkit/components/tor-launcher/TorLauncherUtil.jsm create mode 100644 toolkit/components/tor-launcher/TorMonitorService.jsm create mode 100644 toolkit/components/tor-launcher/TorParsers.jsm create mode 100644 toolkit/components/tor-launcher/TorProcess.jsm create mode 100644 toolkit/components/tor-launcher/TorProtocolService.jsm create mode 100644 toolkit/components/tor-launcher/TorStartupService.jsm create mode 100644 toolkit/components/tor-launcher/components.conf create mode 100644 toolkit/components/tor-launcher/moz.build create mode 100644 toolkit/components/tor-launcher/tor-launcher.manifest create mode 100644 toolkit/modules/Bech32Decode.jsm create mode 100644 toolkit/modules/QRCode.jsm create mode 100644 toolkit/torbutton/.gitignore create mode 100644 toolkit/torbutton/CREDITS create mode 100644 toolkit/torbutton/LICENSE create mode 100644 toolkit/torbutton/chrome/content/aboutTor/aboutTor-content.js create mode 100644 toolkit/torbutton/chrome/content/aboutTor/aboutTor.xhtml create mode 100644 toolkit/torbutton/chrome/content/aboutTor/resources/aboutTor.js create mode 100644 toolkit/torbutton/chrome/content/preferences-mobile.js create mode 100644 toolkit/torbutton/chrome/content/preferences.xhtml create mode 100644 toolkit/torbutton/chrome/content/tor-circuit-display.js create mode 100644 toolkit/torbutton/chrome/content/torbutton.js create mode 100644 toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ar/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ar/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ar/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ar/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ar/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ar/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ca/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ca/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ca/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ca/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ca/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ca/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/cs/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/cs/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/cs/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/cs/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/cs/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/cs/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/da/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/da/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/da/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/da/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/da/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/da/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/da/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/de/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/de/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/de/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/de/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/de/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/de/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/de/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/el/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/el/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/el/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/el/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/el/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/el/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/el/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/en-US/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/en-US/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/en-US/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/en-US/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/en-US/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/en-US/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/es-ES/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/es-ES/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/es-ES/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/es-ES/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/es-ES/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/es-ES/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/es-ES/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/fa/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/fa/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/fa/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/fa/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/fa/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/fa/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/fr/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/fr/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/fr/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/fr/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/fr/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/fr/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ga-IE/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/he/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/he/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/he/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/he/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/he/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/he/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/he/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/hu/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/hu/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/hu/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/hu/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/hu/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/hu/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/id/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/id/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/id/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/id/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/id/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/id/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/id/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/is/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/is/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/is/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/is/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/is/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/is/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/is/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/it/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/it/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/it/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/it/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/it/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/it/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/it/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ja/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ja/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ja/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ja/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ja/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ja/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ka/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ka/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ka/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ka/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ka/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ka/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ko/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ko/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ko/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ko/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ko/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ko/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/lt/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/lt/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/lt/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/lt/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/lt/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/lt/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/mk/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/mk/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/mk/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/mk/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/mk/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/mk/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ms/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ms/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ms/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ms/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ms/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ms/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/my/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/my/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/my/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/my/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/my/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/my/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/nb-NO/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/nl/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/nl/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/nl/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/nl/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/nl/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/nl/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/pl/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/pl/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/pl/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/pl/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/pl/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/pl/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/pt-BR/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ro/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ro/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ro/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ro/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ro/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ro/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/ru/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/ru/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ru/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/ru/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/ru/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/ru/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/sq/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/sq/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/sq/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/sq/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/sq/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/sq/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/sv-SE/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/th/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/th/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/th/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/th/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/th/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/th/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/th/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/tr/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/tr/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/tr/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/tr/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/tr/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/tr/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/uk/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/uk/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/uk/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/uk/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/uk/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/uk/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/vi/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/vi/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/vi/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/vi/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/vi/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/vi/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-CN/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/aboutDialog.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/aboutTBUpdate.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/brand.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/brand.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/branding/brand.ftl create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/browserOnboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/network-settings.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/onboarding.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/torbutton.dtd create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/torbutton.properties create mode 100644 toolkit/torbutton/chrome/locale/zh-TW/torlauncher.properties create mode 100644 toolkit/torbutton/chrome/skin/about-wordmark.png create mode 100644 toolkit/torbutton/chrome/skin/aboutDialog.css create mode 100644 toolkit/torbutton/chrome/skin/aboutTor.css create mode 100644 toolkit/torbutton/chrome/skin/banner-warning.svg create mode 100644 toolkit/torbutton/chrome/skin/dax-logo.svg create mode 100644 toolkit/torbutton/chrome/skin/icon-newsletter.png create mode 100644 toolkit/torbutton/chrome/skin/preferences-mobile.css create mode 100644 toolkit/torbutton/chrome/skin/preferences.css create mode 100644 toolkit/torbutton/chrome/skin/tor-circuit-display.css create mode 100644 toolkit/torbutton/chrome/skin/tor-circuit-line-first.svg create mode 100644 toolkit/torbutton/chrome/skin/tor-circuit-line-last.svg create mode 100644 toolkit/torbutton/chrome/skin/tor-circuit-line.svg create mode 100644 toolkit/torbutton/chrome/skin/tor.png create mode 100644 toolkit/torbutton/chrome/skin/torbrowser_mobile_logo.png create mode 100644 toolkit/torbutton/chrome/skin/torbutton.css create mode 100644 toolkit/torbutton/chrome/skin/torbutton.svg create mode 100644 toolkit/torbutton/components/domain-isolator.js create mode 100644 toolkit/torbutton/components/dragDropFilter.js create mode 100644 toolkit/torbutton/components/external-app-blocker.js create mode 100644 toolkit/torbutton/components/startup-observer.js create mode 100644 toolkit/torbutton/components/torCheckService.js create mode 100644 toolkit/torbutton/components/torbutton-logger.js create mode 100755 toolkit/torbutton/import-translations.sh create mode 100644 toolkit/torbutton/jar.mn create mode 100644 toolkit/torbutton/modules/tor-control-port.js create mode 100644 toolkit/torbutton/modules/utils.js create mode 100644 toolkit/torbutton/moz.build create mode 100644 tools/torbrowser/Makefile create mode 100644 tools/torbrowser/bridges.js create mode 100755 tools/torbrowser/build.sh create mode 100755 tools/torbrowser/clobber.sh create mode 100755 tools/torbrowser/config.sh create mode 100755 tools/torbrowser/deploy.sh create mode 100755 tools/torbrowser/fataar.sh create mode 100755 tools/torbrowser/fetch.sh create mode 100755 tools/torbrowser/ide.sh create mode 100755 tools/torbrowser/jslint.sh create mode 100755 tools/torbrowser/update_bridgemoiji.py create mode 100644 xpcom/io/TorFileUtils.cpp create mode 100644 xpcom/io/TorFileUtils.h
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit e1eb5ce81dc8f0bd786597415a0069c3f603c74c Author: Alex Catarineu acat@torproject.org AuthorDate: Wed Feb 19 23:05:08 2020 +0100
Bug 10760: Integrate TorButton to TorBrowser core
Because of the non-restartless nature of Torbutton, it required a two-stage installation process. On mobile, it was a problem, because it was not loading when the user opened the browser for the first time.
Moving it to tor-browser and making it a system extension allows it to load when the user opens the browser for first time.
Additionally, this patch also fixes Bug 27611.
Bug 26321: New Circuit and New Identity menu items
Bug 14392: Make about:tor behave like other initial pages.
Bug 25013: Add torbutton as a tor-browser submodule
Bug 31575: Replace Firefox Home (newtab) with about:tor
Avoid loading AboutNewTab in BrowserGlue.jsm in order to avoid several network requests that we do not need. Besides, about:newtab will now point to about:blank or about:tor (depending on browser.newtabpage.enabled) and about:home will point to about:tor. --- browser/base/content/aboutDialog.xhtml | 40 +- browser/base/content/appmenu-viewcache.inc.xhtml | 11 +- browser/base/content/browser-doctype.inc | 8 + browser/base/content/browser-menubar.inc | 24 +- browser/base/content/browser-sets.inc | 1 + browser/base/content/browser.js | 1 + browser/base/content/browser.xhtml | 13 + browser/base/content/hiddenWindowMac.xhtml | 4 + browser/base/content/navigator-toolbox.inc.xhtml | 5 + browser/base/content/pageinfo/pageInfo.xhtml | 6 + browser/components/BrowserGlue.jsm | 33 +- .../controlcenter/content/identityPanel.inc.xhtml | 22 + browser/components/newtab/AboutNewTabService.jsm | 15 +- browser/components/places/content/places.xhtml | 3 + browser/components/preferences/home.inc.xhtml | 4 +- browser/components/preferences/preferences.xhtml | 5 +- .../shell/content/setDesktopBackground.xhtml | 6 + browser/installer/package-manifest.in | 2 + browser/modules/HomePage.jsm | 2 +- browser/themes/shared/icons/new_circuit.svg | 6 + browser/themes/shared/jar.inc.mn | 2 + browser/themes/shared/toolbarbutton-icons.css | 4 + docshell/base/nsAboutRedirector.cpp | 6 +- docshell/build/components.conf | 1 + mobile/android/installer/package-manifest.in | 4 + toolkit/moz.build | 1 + toolkit/torbutton/.gitignore | 1 + toolkit/torbutton/CREDITS | 5 + toolkit/torbutton/LICENSE | 29 + .../chrome/content/aboutTor/aboutTor-content.js | 139 +++ .../chrome/content/aboutTor/aboutTor.xhtml | 112 +++ .../chrome/content/aboutTor/resources/aboutTor.js | 11 + .../torbutton/chrome/content/preferences-mobile.js | 59 ++ toolkit/torbutton/chrome/content/preferences.xhtml | 84 ++ .../chrome/content/tor-circuit-display.js | 604 +++++++++++ toolkit/torbutton/chrome/content/torbutton.js | 1044 ++++++++++++++++++++ toolkit/torbutton/chrome/skin/about-wordmark.png | Bin 0 -> 4609 bytes toolkit/torbutton/chrome/skin/aboutDialog.css | 34 + toolkit/torbutton/chrome/skin/aboutTor.css | 313 ++++++ toolkit/torbutton/chrome/skin/banner-warning.svg | 1 + toolkit/torbutton/chrome/skin/dax-logo.svg | 1 + toolkit/torbutton/chrome/skin/icon-newsletter.png | Bin 0 -> 649 bytes .../torbutton/chrome/skin/preferences-mobile.css | 47 + toolkit/torbutton/chrome/skin/preferences.css | 7 + .../torbutton/chrome/skin/tor-circuit-display.css | 193 ++++ .../chrome/skin/tor-circuit-line-first.svg | 6 + .../chrome/skin/tor-circuit-line-last.svg | 6 + toolkit/torbutton/chrome/skin/tor-circuit-line.svg | 7 + toolkit/torbutton/chrome/skin/tor.png | Bin 0 -> 2073 bytes .../chrome/skin/torbrowser_mobile_logo.png | Bin 0 -> 9345 bytes toolkit/torbutton/chrome/skin/torbutton.css | 14 + toolkit/torbutton/chrome/skin/torbutton.svg | 3 + toolkit/torbutton/components/domain-isolator.js | 228 +++++ toolkit/torbutton/components/dragDropFilter.js | 134 +++ .../torbutton/components/external-app-blocker.js | 160 +++ toolkit/torbutton/components/startup-observer.js | 196 ++++ toolkit/torbutton/components/torCheckService.js | 140 +++ toolkit/torbutton/components/torbutton-logger.js | 185 ++++ toolkit/torbutton/jar.mn | 46 + toolkit/torbutton/modules/tor-control-port.js | 982 ++++++++++++++++++ toolkit/torbutton/modules/utils.js | 318 ++++++ toolkit/torbutton/moz.build | 6 + .../lib/environments/browser-window.js | 6 +- 63 files changed, 5284 insertions(+), 66 deletions(-)
diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml index 90a568a17dd6..60b1e15b637c 100644 --- a/browser/base/content/aboutDialog.xhtml +++ b/browser/base/content/aboutDialog.xhtml @@ -7,6 +7,12 @@ <?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/aboutDialog.css" type="text/css"?> <?xml-stylesheet href="chrome://branding/content/aboutDialog.css" type="text/css"?> +<?xml-stylesheet href="chrome://torbutton/skin/aboutDialog.css" type="text/css"?> + +<!-- We need to include the localization DTDs until we migrate to Fluent --> +<!DOCTYPE window [ +#include browser-doctype.inc +]>
<window xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" @@ -22,7 +28,7 @@ data-l10n-id="aboutDialog-title" #endif role="dialog" - aria-describedby="version distribution distributionId communityDesc contributeDesc trademark" + aria-describedby="version distribution distributionId projectDesc helpDesc trademark trademarkTor" > #ifdef XP_MACOSX #include macWindow.inc.xhtml @@ -140,24 +146,36 @@ <label is="text-link" useoriginprincipal="true" href="about:credits" data-l10n-name="community-exp-creditsLink"/> </description> </vbox> - <description class="text-blurb" id="communityDesc" data-l10n-id="community-2"> - <label is="text-link" href="https://www.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-name="community-mozillaLink"/> - <label is="text-link" useoriginprincipal="true" href="about:credits" data-l10n-name="community-creditsLink"/> + <!-- Keep communityDesc and contributeDesc to avoid JS errors trying to hide them --> + <description class="text-blurb" id="communityDesc" data-l10n-id="community-2" hidden="true"></description> + <description class="text-blurb" id="contributeDesc" data-l10n-id="helpus" hidden="true"></description> + <description class="text-blurb" id="projectDesc"> + &project.start; + <label is="text-link" href="https://www.torproject.org/"> + &project.tpoLink; + </label>&project.end; </description> - <description class="text-blurb" id="contributeDesc" data-l10n-id="helpus"> - <label is="text-link" href="https://donate.mozilla.org/?utm_source=firefox&utm_medium=referral&utm_campaign=firefox_about&utm_content=firefox_about" data-l10n-name="helpus-donateLink"/> - <label is="text-link" href="https://www.mozilla.org/contribute/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-name="helpus-getInvolvedLink"/> + <description class="text-blurb" id="helpDesc"> + &help.start; + <label is="text-link" href="https://donate.torproject.org/"> + &help.donateLink; + </label> + &help.or; + <label is="text-link" href="https://community.torproject.org/"> + &help.getInvolvedLink; + </label>&help.end; </description> </vbox> </vbox> </hbox> <vbox id="bottomBox"> - <hbox pack="center"> - <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license" data-l10n-id="bottomLinks-license"/> - <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:rights" data-l10n-id="bottomLinks-rights"/> - <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-id="bottomLinks-privacy"/> + <hbox id="newBottom" pack="center" position="1"> + <label is="text-link" class="bottom-link" href="https://support.torproject.org/">&bottomLinks.questions;</label> + <label is="text-link" class="bottom-link" href="https://community.torproject.org/relay/">&bottomLinks.grow;</label> + <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license">&bottomLinks.license;</label> </hbox> <description id="trademark" data-l10n-id="trademarkInfo"></description> + <description id="trademarkTor">&tor.TrademarkStatement;</description> </vbox> </vbox>
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml index c138be3ee86c..cb685a3d0f52 100644 --- a/browser/base/content/appmenu-viewcache.inc.xhtml +++ b/browser/base/content/appmenu-viewcache.inc.xhtml @@ -55,11 +55,17 @@ class="subviewbutton" data-l10n-id="appmenuitem-new-private-window" key="key_privatebrowsing" - command="Tools:PrivateBrowsing"/> + command="Tools:PrivateBrowsing" + hidden="true"/> <toolbarseparator/> <toolbarbutton id="appMenu-new-identity" class="subviewbutton" key="new-identity-key"/> + <toolbarbutton id="appMenuNewCircuit" + class="subviewbutton" + key="torbutton-new-circuit-key" + label="&torbutton.context_menu.new_circuit_sentence_case;" + oncommand="torbutton_new_circuit();"/> <toolbarseparator/> <toolbarbutton id="appMenu-bookmarks-button" class="subviewbutton subviewbutton-nav" @@ -179,7 +185,8 @@ <toolbarbutton id="appMenu-restoreSession" data-l10n-id="appmenu-restore-session" class="subviewbutton" - command="Browser:RestoreLastSession"/> + command="Browser:RestoreLastSession" + hidden="true"/> <toolbarseparator/> <toolbarbutton id="appMenuClearRecentHistory" data-l10n-id="appmenu-clear-history" diff --git a/browser/base/content/browser-doctype.inc b/browser/base/content/browser-doctype.inc new file mode 100644 index 000000000000..fdc302e79de3 --- /dev/null +++ b/browser/base/content/browser-doctype.inc @@ -0,0 +1,8 @@ +<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" > +%brandDTD; +<!ENTITY % torbuttonDTD SYSTEM "chrome://torbutton/locale/torbutton.dtd"> +%torbuttonDTD; +<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd"> +%aboutTorDTD; +<!ENTITY % aboutDialogDTD SYSTEM "chrome://torbutton/locale/aboutDialog.dtd"> +%aboutDialogDTD; diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index 7c3dd4fe6d25..cde4d205b763 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -31,6 +31,11 @@ <menuseparator/> <menuitem id="menu_newIdentity" key="new-identity-key"/> + <menuitem id="menu_newCircuit" + accesskey="&torbutton.context_menu.new_circuit_key;" + key="torbutton-new-circuit-key" + label="&torbutton.context_menu.new_circuit;" + oncommand="torbutton_new_circuit();"/> <menuseparator/> <menuitem id="menu_openLocation" hidden="true" @@ -456,8 +461,20 @@ <menupopup id="menu_HelpPopup" onpopupshowing="buildHelpMenu();"> <!-- Note: Items under here are cloned to the AppMenu Help submenu. The cloned items have their strings defined by appmenu-data-l10n-id. --> + <!-- dummy elements to avoid 'getElementById' errors --> + <box id="feedbackPage"/> + <box id="helpSafeMode"/> + <box id="menu_HelpPopup_reportPhishingtoolmenu"/> + <box id="menu_HelpPopup_reportPhishingErrortoolmenu"/> + <!-- Add Tor Browser manual link --> + <menuitem id="torBrowserUserManual" + oncommand="gBrowser.selectedTab = gBrowser.addTab('about:manual', {triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});" + label="&aboutTor.torbrowser_user_manual.label;" + accesskey="&aboutTor.torbrowser_user_manual.accesskey;"/> + <!-- Bug 18905: Hide unused help menu items --> <menuitem id="menu_openHelp" oncommand="openHelpLink('firefox-help')" + hidden="true" data-l10n-id="menu-get-help" appmenu-data-l10n-id="appmenu-get-help" #ifdef XP_MACOSX @@ -467,14 +484,17 @@ #endif <menuitem id="feedbackPage" oncommand="openFeedbackPage()" - data-l10n-id="menu-help-share-ideas" - appmenu-data-l10n-id="appmenu-help-share-ideas"/> + hidden="true" + data-l10n-id="menu-help-feedback-page" + appmenu-data-l10n-id="appmenu-help-feedback-page"/> <menuitem id="helpSafeMode" oncommand="safeModeRestart();" + hidden="true" data-l10n-id="menu-help-enter-troubleshoot-mode2" appmenu-data-l10n-id="appmenu-help-enter-troubleshoot-mode2"/> <menuitem id="troubleShooting" oncommand="openTroubleshootingPage()" + hidden="true" data-l10n-id="menu-help-more-troubleshooting-info" appmenu-data-l10n-id="appmenu-help-more-troubleshooting-info"/> <menuitem id="help_reportSiteIssue" diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc index 17edb35baf6a..dc5d93978950 100644 --- a/browser/base/content/browser-sets.inc +++ b/browser/base/content/browser-sets.inc @@ -389,4 +389,5 @@ internal="true"/> #endif <key id="new-identity-key" modifiers="accel shift" key="U" oncommand="NewIdentityButton.onCommand(event)"/> + <key id="torbutton-new-circuit-key" modifiers="accel shift" key="L" oncommand="torbutton_new_circuit()"/> </keyset> diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index ee392d55b572..597bff687349 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -645,6 +645,7 @@ var gPageIcons = { };
var gInitialPages = [ + "about:tor", "about:blank", "about:home", ...(AppConstants.NIGHTLY_BUILD ? ["about:firefoxview"] : []), diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml index df33143a7365..5959615f9dc1 100644 --- a/browser/base/content/browser.xhtml +++ b/browser/base/content/browser.xhtml @@ -35,6 +35,12 @@ <?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?> +<?xml-stylesheet href="chrome://torbutton/skin/tor-circuit-display.css" type="text/css"?> +<?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?> + +<!DOCTYPE window [ +#include browser-doctype.inc +]>
<html id="main-window" xmlns:html="http://www.w3.org/1999/xhtml" @@ -116,11 +122,18 @@ Services.scriptloader.loadSubScript("chrome://browser/content/search/autocomplete-popup.js", this); Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this); Services.scriptloader.loadSubScript("chrome://browser/content/languageNotification.js", this); + Services.scriptloader.loadSubScript("chrome://torbutton/content/tor-circuit-display.js", this); + Services.scriptloader.loadSubScript("chrome://torbutton/content/torbutton.js", this);
window.onload = gBrowserInit.onLoad.bind(gBrowserInit); window.onunload = gBrowserInit.onUnload.bind(gBrowserInit); window.onclose = WindowIsClosing;
+ //onLoad Handler + try { + window.addEventListener("load", torbutton_init, false); + } catch (e) {} + window.addEventListener("MozBeforeInitialXULLayout", gBrowserInit.onBeforeInitialXULLayout.bind(gBrowserInit), { once: true });
diff --git a/browser/base/content/hiddenWindowMac.xhtml b/browser/base/content/hiddenWindowMac.xhtml index c27d394d3707..b272a076bb30 100644 --- a/browser/base/content/hiddenWindowMac.xhtml +++ b/browser/base/content/hiddenWindowMac.xhtml @@ -8,6 +8,10 @@
<?xml-stylesheet href="chrome://browser/skin/webRTC-menubar-indicator.css" type="text/css"?>
+<!DOCTYPE window [ +#include browser-doctype.inc +]> + <window id="main-window" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml index cadf68c91679..6123e1336aed 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -539,6 +539,11 @@
<toolbarbutton id="new-identity-button" class="toolbarbutton-1 chromeclass-toolbar-additional"/>
+ <toolbarbutton id="new-circuit-button" class="toolbarbutton-1 chromeclass-toolbar-additional" + label="&torbutton.context_menu.new_circuit;" + oncommand="torbutton_new_circuit();" + tooltiptext="&torbutton.context_menu.new_circuit;"/> + <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional" observes="View:FullScreen" type="checkbox" diff --git a/browser/base/content/pageinfo/pageInfo.xhtml b/browser/base/content/pageinfo/pageInfo.xhtml index 4fe7f4909180..b2b09f753902 100644 --- a/browser/base/content/pageinfo/pageInfo.xhtml +++ b/browser/base/content/pageinfo/pageInfo.xhtml @@ -6,6 +6,12 @@ <?xml-stylesheet href="chrome://browser/content/pageinfo/pageInfo.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/pageInfo.css" type="text/css"?>
+<!DOCTYPE window [ +#ifdef XP_MACOSX +#include ../browser-doctype.inc +#endif +]> + <window id="main-window" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 99b289bd934a..6d0947a464ba 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -18,7 +18,6 @@ const { AppConstants } = ChromeUtils.import( );
XPCOMUtils.defineLazyModuleGetters(this, { - AboutNewTab: "resource:///modules/AboutNewTab.jsm", ActorManagerParent: "resource://gre/modules/ActorManagerParent.jsm", AddonManager: "resource://gre/modules/AddonManager.jsm", AppMenuNotifications: "resource://gre/modules/AppMenuNotifications.jsm", @@ -225,28 +224,6 @@ let JSWINDOWACTORS = { remoteTypes: ["privilegedabout"], },
- AboutNewTab: { - parent: { - moduleURI: "resource:///actors/AboutNewTabParent.jsm", - }, - child: { - moduleURI: "resource:///actors/AboutNewTabChild.jsm", - events: { - DOMContentLoaded: {}, - pageshow: {}, - visibilitychange: {}, - }, - }, - // The wildcard on about:newtab is for the ?endpoint query parameter - // that is used for snippets debugging. The wildcard for about:home - // is similar, and also allows for falling back to loading the - // about:home document dynamically if an attempt is made to load - // about:home?jscache from the AboutHomeStartupCache as a top-level - // load. - matches: ["about:home*", "about:welcome", "about:newtab*"], - remoteTypes: ["privilegedabout"], - }, - AboutPlugins: { parent: { moduleURI: "resource:///actors/AboutPluginsParent.jsm", @@ -1599,8 +1576,6 @@ BrowserGlue.prototype = {
// the first browser window has finished initializing _onFirstWindowLoaded: function BG__onFirstWindowLoaded(aWindow) { - AboutNewTab.init(); - TabCrashHandler.init();
ProcessHangMonitor.init(); @@ -5792,12 +5767,8 @@ var AboutHomeStartupCache = { return { pageInputStream: null, scriptInputStream: null }; }
- let state = AboutNewTab.activityStream.store.getState(); - return new Promise(resolve => { - this._cacheDeferred = resolve; - this.log.trace("Parent is requesting cache streams."); - this._procManager.sendAsyncMessage(this.CACHE_REQUEST_MESSAGE, { state }); - }); + this.log.error("Activity Stream is disabled in Tor Browser."); + return { pageInputStream: null, scriptInputStream: null }; },
/** diff --git a/browser/components/controlcenter/content/identityPanel.inc.xhtml b/browser/components/controlcenter/content/identityPanel.inc.xhtml index ad6f9db340ef..498f374ffde8 100644 --- a/browser/components/controlcenter/content/identityPanel.inc.xhtml +++ b/browser/components/controlcenter/content/identityPanel.inc.xhtml @@ -92,6 +92,28 @@ </vbox> </hbox>
+ <!-- Circuit display section --> + + <vbox id="circuit-display-container" class="identity-popup-section"> + <toolbarseparator/> + <vbox id="circuit-display-header" flex="1" role="group" + aria-labelledby="circuit-display-headline"> + <hbox flex="1"> + <label id="circuit-display-headline" + role="heading" aria-level="2">&torbutton.circuit_display.title;</label> + </hbox> + </vbox> + <vbox id="circuit-display-content"> + <html:ul id="circuit-display-nodes" dir="auto"/> + <hbox id="circuit-guard-note-container"/> + <hbox id="circuit-reload-button-container"> + <html:button id="circuit-reload-button" + onclick="torbutton_new_circuit()" + default="true">&torbutton.circuit_display.new_circuit;</html:button> + </hbox> + </vbox> + </vbox> + <!-- Clear Site Data Button --> <vbox hidden="true" id="identity-popup-clear-sitedata-footer"> diff --git a/browser/components/newtab/AboutNewTabService.jsm b/browser/components/newtab/AboutNewTabService.jsm index f3bc40019f8f..471a3139baa7 100644 --- a/browser/components/newtab/AboutNewTabService.jsm +++ b/browser/components/newtab/AboutNewTabService.jsm @@ -420,20 +420,7 @@ class BaseAboutNewTabService { * the newtab page has no effect on the result of this function. */ get defaultURL() { - // Generate the desired activity stream resource depending on state, e.g., - // "resource://activity-stream/prerendered/activity-stream.html" - // "resource://activity-stream/prerendered/activity-stream-debug.html" - // "resource://activity-stream/prerendered/activity-stream-noscripts.html" - return [ - "resource://activity-stream/prerendered/", - "activity-stream", - // Debug version loads dev scripts but noscripts separately loads scripts - this.activityStreamDebug && !this.privilegedAboutProcessEnabled - ? "-debug" - : "", - this.privilegedAboutProcessEnabled ? "-noscripts" : "", - ".html", - ].join(""); + return "about:tor"; }
get welcomeURL() { diff --git a/browser/components/places/content/places.xhtml b/browser/components/places/content/places.xhtml index e19a58029828..f55d813664f6 100644 --- a/browser/components/places/content/places.xhtml +++ b/browser/components/places/content/places.xhtml @@ -18,6 +18,9 @@ <!DOCTYPE window [ <!ENTITY % editMenuOverlayDTD SYSTEM "chrome://global/locale/editMenuOverlay.dtd"> %editMenuOverlayDTD; +#ifdef XP_MACOSX +#include ../../../base/content/browser-doctype.inc +#endif ]>
<window id="places" diff --git a/browser/components/preferences/home.inc.xhtml b/browser/components/preferences/home.inc.xhtml index 5bb936782ed9..e812d969837e 100644 --- a/browser/components/preferences/home.inc.xhtml +++ b/browser/components/preferences/home.inc.xhtml @@ -33,7 +33,7 @@ class="check-home-page-controlled" data-preference-related="browser.startup.homepage"> <menupopup> - <menuitem value="0" data-l10n-id="home-mode-choice-default" /> + <menuitem value="0" label="&aboutTor.title;" /> <menuitem value="2" data-l10n-id="home-mode-choice-custom" /> <menuitem value="1" data-l10n-id="home-mode-choice-blank" /> </menupopup> @@ -84,7 +84,7 @@ Preferences so we need to handle setting the pref manually.--> <menulist id="newTabMode" flex="1" data-preference-related="browser.newtabpage.enabled"> <menupopup> - <menuitem value="0" data-l10n-id="home-mode-choice-default" /> + <menuitem value="0" label="&aboutTor.title;" /> <menuitem value="1" data-l10n-id="home-mode-choice-blank" /> </menupopup> </menulist> diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml index 8706870466fa..f1a8115843a3 100644 --- a/browser/components/preferences/preferences.xhtml +++ b/browser/components/preferences/preferences.xhtml @@ -15,7 +15,10 @@ <?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?> <?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
-<!DOCTYPE html> +<!DOCTYPE html [ +<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd"> + %aboutTorDTD; +]>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml" diff --git a/browser/components/shell/content/setDesktopBackground.xhtml b/browser/components/shell/content/setDesktopBackground.xhtml index a7d4ced792b6..ef102450ff2c 100644 --- a/browser/components/shell/content/setDesktopBackground.xhtml +++ b/browser/components/shell/content/setDesktopBackground.xhtml @@ -7,6 +7,12 @@ <?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/setDesktopBackground.css" type="text/css"?>
+<!DOCTYPE window [ +#ifdef XP_MACOSX +#include ../../../base/content/browser-doctype.inc +#endif +]> + <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" windowtype="Shell:SetDesktopBackground" diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index cb7891d5b43e..04acc38fa5cf 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -235,6 +235,8 @@ @RESPATH@/chrome/pdfjs.manifest @RESPATH@/chrome/pdfjs/* @RESPATH@/components/tor-launcher.manifest +@RESPATH@/chrome/torbutton.manifest +@RESPATH@/chrome/torbutton/* @RESPATH@/chrome/toolkit@JAREXT@ @RESPATH@/chrome/toolkit.manifest #ifdef MOZ_GTK diff --git a/browser/modules/HomePage.jsm b/browser/modules/HomePage.jsm index f73b0f3e6c8c..26618374df3a 100644 --- a/browser/modules/HomePage.jsm +++ b/browser/modules/HomePage.jsm @@ -21,7 +21,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { });
const kPrefName = "browser.startup.homepage"; -const kDefaultHomePage = "about:home"; +const kDefaultHomePage = "about:tor"; const kExtensionControllerPref = "browser.startup.homepage_override.extensionControlled"; const kHomePageIgnoreListId = "homepage-urls"; diff --git a/browser/themes/shared/icons/new_circuit.svg b/browser/themes/shared/icons/new_circuit.svg new file mode 100644 index 000000000000..ddc819946818 --- /dev/null +++ b/browser/themes/shared/icons/new_circuit.svg @@ -0,0 +1,6 @@ +<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g stroke="none" stroke-width="1" fill="context-fill" fill-rule="evenodd" opacity="context-fill-opacity"> + <path d="m10.707 6h3.993l.3-.3v-3.993c.0002-.09902-.0291-.19586-.084-.27825s-.1331-.14661-.2245-.18453c-.0915-.03792-.1922-.04782-.2893-.02845-.0971.01936-.1863.06713-.2562.13723l-1.459 1.459c-1.2817-1.16743-2.95335-1.813714-4.687-1.812-3.859 0-7 3.141-7 7s3.141 7 7 7c1.74123.007 3.422-.6379 4.7116-1.8079 1.2896-1.1701 2.0945-2.7804 2.2564-4.5141.0156-.1649-.0348-.32927-.1401-.4571s-.2571-.2087-.4219-.2249c-.1644-.01324-.3275.03801-.4548.1429s-.2088.2552-.2272.4191c-.1334 1.42392 [...] + <path d="m8 12.5c-2.48528 0-4.5-2.0147-4.5-4.5 0-2.48528 2.01472-4.5 4.5-4.5z"/> + </g> +</svg> diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn index d04f95e59ea0..95fe3fdbe299 100644 --- a/browser/themes/shared/jar.inc.mn +++ b/browser/themes/shared/jar.inc.mn @@ -266,3 +266,5 @@ skin/classic/browser/syncedtabs/sidebar.css (../shared/syncedtabs/sidebar.css)
skin/classic/browser/new_identity.svg (../shared/icons/new_identity.svg) + + skin/classic/browser/new_circuit.svg (../shared/icons/new_circuit.svg) diff --git a/browser/themes/shared/toolbarbutton-icons.css b/browser/themes/shared/toolbarbutton-icons.css index 8e285fdfd7c2..b2cb4d277e1e 100644 --- a/browser/themes/shared/toolbarbutton-icons.css +++ b/browser/themes/shared/toolbarbutton-icons.css @@ -267,6 +267,10 @@ toolbar { list-style-image: url("chrome://browser/skin/new_identity.svg"); }
+#new-circuit-button { + list-style-image: url("chrome://browser/skin/new_circuit.svg"); +} + #privatebrowsing-button { list-style-image: url("chrome://browser/skin/privateBrowsing.svg"); } diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp index e28bec9bd2c2..232104214844 100644 --- a/docshell/base/nsAboutRedirector.cpp +++ b/docshell/base/nsAboutRedirector.cpp @@ -174,7 +174,11 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::HIDE_FROM_ABOUTABOUT | nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::URI_MUST_LOAD_IN_CHILD}, - {"crashgpu", "about:blank", nsIAboutModule::HIDE_FROM_ABOUTABOUT}}; + {"crashgpu", "about:blank", nsIAboutModule::HIDE_FROM_ABOUTABOUT}, + {"tor", "chrome://torbutton/content/aboutTor/aboutTor.xhtml", + nsIAboutModule::URI_MUST_LOAD_IN_CHILD | + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::IS_SECURE_CHROME_UI}}; static const int kRedirTotal = mozilla::ArrayLength(kRedirMap);
NS_IMETHODIMP diff --git a/docshell/build/components.conf b/docshell/build/components.conf index 5f11df641e37..6bc8617c8f0a 100644 --- a/docshell/build/components.conf +++ b/docshell/build/components.conf @@ -29,6 +29,7 @@ about_pages = [ 'srcdoc', 'support', 'telemetry', + 'tor', 'url-classifier', 'webrtc', ] diff --git a/mobile/android/installer/package-manifest.in b/mobile/android/installer/package-manifest.in index d9e8407ade7a..ead4a138d927 100644 --- a/mobile/android/installer/package-manifest.in +++ b/mobile/android/installer/package-manifest.in @@ -137,6 +137,10 @@ ; Base Browser @BINPATH@/components/SecurityLevel.manifest
+; Torbutton +@BINPATH@/chrome/torbutton@JAREXT@ +@BINPATH@/chrome/torbutton.manifest + ; [Default Preferences] ; All the pref files must be part of base to prevent migration bugs #ifndef MOZ_ANDROID_FAT_AAR_ARCHITECTURES diff --git a/toolkit/moz.build b/toolkit/moz.build index d464f7eb8092..cf9f7202ece0 100644 --- a/toolkit/moz.build +++ b/toolkit/moz.build @@ -22,6 +22,7 @@ DIRS += [ "mozapps/preferences", "profile", "themes", + "torbutton", ]
if CONFIG["OS_ARCH"] == "WINNT" and CONFIG["MOZ_DEFAULT_BROWSER_AGENT"]: diff --git a/toolkit/torbutton/.gitignore b/toolkit/torbutton/.gitignore new file mode 100644 index 000000000000..753ac2e10e5a --- /dev/null +++ b/toolkit/torbutton/.gitignore @@ -0,0 +1 @@ +translation diff --git a/toolkit/torbutton/CREDITS b/toolkit/torbutton/CREDITS new file mode 100644 index 000000000000..c2a0be95196a --- /dev/null +++ b/toolkit/torbutton/CREDITS @@ -0,0 +1,5 @@ +TorButton was adapted by Scott Squires from ProxyButton +(proxybutton.mozdev.com), which was written by Oleg Ivanov. + +Security components by Mike Perry with History blocking and cookie jar code +from Collin Jackson. diff --git a/toolkit/torbutton/LICENSE b/toolkit/torbutton/LICENSE new file mode 100644 index 000000000000..783d6a4705a1 --- /dev/null +++ b/toolkit/torbutton/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2020, The Tor Project, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3)The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/toolkit/torbutton/chrome/content/aboutTor/aboutTor-content.js b/toolkit/torbutton/chrome/content/aboutTor/aboutTor-content.js new file mode 100644 index 000000000000..6c53dff832e5 --- /dev/null +++ b/toolkit/torbutton/chrome/content/aboutTor/aboutTor-content.js @@ -0,0 +1,139 @@ +/************************************************************************* + * Copyright (c) 2019, The Tor Project, Inc. + * See LICENSE for licensing information. + * + * vim: set sw=2 sts=2 ts=8 et syntax=javascript: + * + * about:tor content script + *************************************************************************/ + +/* + * The following about:tor IPC messages are exchanged by this code and + * the code in torbutton.js: + * AboutTor:Loaded page loaded content -> chrome + * AboutTor:ChromeData privileged data chrome -> content + */ + +/* globals content, addMessageListener, sendAsyncMessage, + removeMessageListener */ + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +const { bindPrefAndInit, getLocale } = ChromeUtils.import( + "resource://torbutton/modules/utils.js" +); + +var AboutTorListener = { + kAboutTorLoadedMessage: "AboutTor:Loaded", + kAboutTorChromeDataMessage: "AboutTor:ChromeData", + + get isAboutTor() { + return content.document.documentURI.toLowerCase() == "about:tor"; + }, + + init(aChromeGlobal) { + aChromeGlobal.addEventListener("AboutTorLoad", this, false, true); + }, + + handleEvent(aEvent) { + if (!this.isAboutTor) { + return; + } + + switch (aEvent.type) { + case "AboutTorLoad": + this.onPageLoad(); + break; + case "pagehide": + this.onPageHide(); + break; + } + }, + + receiveMessage(aMessage) { + if (!this.isAboutTor) { + return; + } + + switch (aMessage.name) { + case this.kAboutTorChromeDataMessage: + this.onChromeDataUpdate(aMessage.data); + break; + } + }, + + onPageLoad() { + // Arrange to update localized text and links. + bindPrefAndInit("intl.locale.requested", () => { + this.onLocaleChange(); + }); + + // Add message and event listeners. + addMessageListener(this.kAboutTorChromeDataMessage, this); + addEventListener("pagehide", this, false); + addEventListener("resize", this, false); + + sendAsyncMessage(this.kAboutTorLoadedMessage); + }, + + onPageHide() { + removeEventListener("resize", this, false); + removeEventListener("pagehide", this, false); + removeMessageListener(this.kAboutTorChromeDataMessage, this); + }, + + onChromeDataUpdate(aData) { + let body = content.document.body; + + // Update status: tor on/off, Tor Browser manual shown. + if (aData.torOn) { + body.setAttribute("toron", "yes"); + } else { + body.removeAttribute("toron"); + } + + if (aData.updateChannel) { + body.setAttribute("updatechannel", aData.updateChannel); + } else { + body.removeAttribute("updatechannel"); + } + + if (aData.hasBeenUpdated) { + body.setAttribute("hasbeenupdated", "yes"); + content.document + .getElementById("update-infolink") + .setAttribute("href", aData.updateMoreInfoURL); + } + + if (aData.mobile) { + body.setAttribute("mobile", "yes"); + } + + // Setting body.initialized="yes" displays the body. + body.setAttribute("initialized", "yes"); + }, + + onLocaleChange() { + // Set localized "Get Involved" link. + content.document.getElementById("getInvolvedLink").href = + `https://community.torproject.org/$%7BgetLocale()%7D%60; + + // Display the Tor Browser product name and version. + try { + const kBrandBundle = "chrome://branding/locale/brand.properties"; + let brandBundle = Services.strings.createBundle(kBrandBundle); + let productName = brandBundle.GetStringFromName("brandFullName"); + let tbbVersion = Services.prefs.getCharPref("torbrowser.version"); + let elem = content.document.getElementById("torbrowser-version"); + + while (elem.firstChild) { + elem.firstChild.remove(); + } + elem.appendChild( + content.document.createTextNode(productName + " " + tbbVersion) + ); + } catch (e) {} + }, +}; + +AboutTorListener.init(this); diff --git a/toolkit/torbutton/chrome/content/aboutTor/aboutTor.xhtml b/toolkit/torbutton/chrome/content/aboutTor/aboutTor.xhtml new file mode 100644 index 000000000000..e48c22630150 --- /dev/null +++ b/toolkit/torbutton/chrome/content/aboutTor/aboutTor.xhtml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + - Copyright (c) 2020, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!DOCTYPE html [ + <!ENTITY % htmlDTD + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "DTD/xhtml1-strict.dtd"> + %htmlDTD; + <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> + %globalDTD; + <!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd"> + %aboutTorDTD; + <!ENTITY % tbUpdateDTD SYSTEM "chrome://browser/locale/aboutTBUpdate.dtd"> + %tbUpdateDTD; +]> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Security-Policy" content="default-src resource:; object-src 'none'" /> + <meta name="viewport" content="width=device-width, initial-scale=1"/> + <title>&aboutTor.title;</title> + <link rel="stylesheet" href="chrome://browser/skin/onionPattern.css" type="text/css" media="all" /> + <link rel="stylesheet" href="resource://torbutton-assets/aboutTor.css" type="text/css" media="all" /> + <script type="text/javascript" src="resource://torbutton-abouttor/aboutTor.js"></script> +</head> +<body dir="&locale.dir;"> + <div class="torcontent-container"> + <div id="torbrowser-info"> + <div id="torbrowser-version"/> + <div id="torbrowser-changelog-link"><a href="about:tbupdate">&aboutTor.viewChangelog.label;</a></div> + </div> + <img class="torcontent-logo" src="resource://torbutton-assets/torbrowser_mobile_logo.png"/> + <div id="torstatus" class="top"> + <div class="hideIfTorOff hideIfHasBeenUpdated torstatus-container"> +#if MOZ_UPDATE_CHANNEL == alpha + <div class="heading1">&aboutTor.alpha.ready.label;</div> + <br/> + <div class="heading2">&aboutTor.alpha.ready2.label;</div> +#elif MOZ_UPDATE_CHANNEL == nightly + <div class="heading1">&aboutTor.nightly.ready.label;</div> + <br/> + <div class="heading2">&aboutTor.nightly.ready2.label;</div> +#else + <div class="heading1">&aboutTor.ready.label;</div> + <br/> + <div class="heading2">&aboutTor.ready2.label;</div> +#endif + </div> + <div class="showIfHasBeenUpdated torstatus-container"> + <div class="heading1">&aboutTBUpdate.updated;</div> + <br/> + <div class="heading2">&aboutTBUpdate.linkPrefix;<a id="update-infolink">&aboutTBUpdate.linkLabel;</a>&aboutTBUpdate.linkSuffix;</div> + </div> + <div class="hideIfTorOn torstatus-container"> + <div class="heading1">&aboutTor.failure.label;</div> + <br/> + <div class="heading2">&aboutTor.failure2.label;</div> + </div> + </div> + + <div class="searchbox hideIfTorOff"> <!-- begin form based search --> + <form action="&aboutTor.searchDDGPost.link;" method="get"> + <div class="searchwrapper"> + <label class="searchlabel" for="search-text"></label> + <input name="q" id="search-text" placeholder="&aboutTor.search.label;" + autocomplete="off" type="text"/> + <input id="search-button" value="" + title="&aboutTor.search.label;" + alt="&aboutTor.search.label;" type="submit"/> + </div> + </form> + </div> + +#if MOZ_UPDATE_CHANNEL != release + <div id="bannerRoot"> + <img id="bannerImg" src="resource://torbutton-assets/banner-warning.svg" /> + <div id="bannerTextCol"> + <!--<div id="bannerHeader"></div> + <br />--> +#if MOZ_UPDATE_CHANNEL == alpha + <div id="bannerDescription">&aboutTor.alpha.bannerDescription;</div> + <br /> + <a id="bannerLink" target="_blank" href="https://forum.torproject.net/">&aboutTor.alpha.bannerLink;</a> +#else + <div id="bannerDescription">&aboutTor.nightly.bannerDescription;</div> + <br /> + <a id="bannerLink" target="_blank" href="https://forum.torproject.net/">&aboutTor.nightly.bannerLink;</a> +#endif + </div> + </div> +#endif + + <div id="bottom"> + <p id="donate" class="moreInfoLink">&aboutTor.donationBanner.freeToUse; + <a href="https://donate.torproject.org/" target="_blank">&aboutTor.donationBanner.buttonA; »</a> + </p> + <p id="manual" class="showForManual moreInfoLink">&aboutTor.torbrowser_user_manual_questions.label; + <a id="manualLink" href="about:manual" target="_blank">&aboutTor.torbrowser_user_manual_link.label;</a></p> + <p id="newsletter" class="moreInfoLink"><img class="imageStyle" src="chrome://browser/skin/mail.svg"/>&aboutTor.newsletter.tagline;<br/> + <a href="https://newsletter.torproject.org">&aboutTor.newsletter.link_text; »</a> + </p> + <p id="mission">&aboutTor.tor_mission.label; + <a id="getInvolvedLink">&aboutTor.getInvolved.label;</a></p> + </div> + </div> +#include ../../../../../browser/themes/shared/onionPattern.inc.xhtml +</body> +</html> diff --git a/toolkit/torbutton/chrome/content/aboutTor/resources/aboutTor.js b/toolkit/torbutton/chrome/content/aboutTor/resources/aboutTor.js new file mode 100644 index 000000000000..6687390b6aca --- /dev/null +++ b/toolkit/torbutton/chrome/content/aboutTor/resources/aboutTor.js @@ -0,0 +1,11 @@ +/************************************************************************* + * Copyright (c) 2020, The Tor Project, Inc. + * See LICENSE for licensing information. + * + * vim: set sw=2 sts=2 ts=8 et syntax=javascript: + *************************************************************************/ + +window.addEventListener("pageshow", function() { + let evt = new CustomEvent("AboutTorLoad", { bubbles: true }); + document.dispatchEvent(evt); +}); diff --git a/toolkit/torbutton/chrome/content/preferences-mobile.js b/toolkit/torbutton/chrome/content/preferences-mobile.js new file mode 100644 index 000000000000..b696ef17fd32 --- /dev/null +++ b/toolkit/torbutton/chrome/content/preferences-mobile.js @@ -0,0 +1,59 @@ +// # Security Settings User Interface for Mobile + +// Utilities +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { + getBoolPref, + getIntPref, + setBoolPref, + setIntPref, + getCharPref, +} = Services.prefs; + +// Description elements have the follow names. +const descNames = ["", "desc_standard", "desc_safer", "desc_safest"]; +// "Learn-more"-elements have the follow names. +const linkNames = ["", "link_standard", "link_safer", "link_safest"]; +// A single `state` object that reflects the user settings in this UI. + +let state = { slider: 0, custom: false }; + +// Utility functions to convert between the legacy 4-value pref index +// and the 3-valued security slider. +let sliderPositionToPrefSetting = pos => [0, 4, 2, 1][pos]; +let prefSettingToSliderPosition = pref => [0, 3, 2, 2, 1][pref]; + +// Set the desired slider value and update UI. +function torbutton_set_slider(sliderValue) { + state.slider = sliderValue; + let slider = document.getElementById("torbutton_sec_slider"); + slider.value = sliderValue.toString(); + let descs = descNames.map(name => document.getElementById(name)); + descs.forEach((desc, i) => { + if (state.slider !== i) { + desc.style.display = "none"; + } else { + desc.style.display = "block"; + } + }); + torbutton_save_security_settings(); +} + +// Read prefs 'browser.security_level.security_slider' and +// 'browser.security_level.security_custom', and initialize the UI. +function torbutton_init_security_ui() { + torbutton_set_slider( + prefSettingToSliderPosition( + getIntPref("browser.security_level.security_slider") + ) + ); +} + +// Write the two prefs from the current settings. +function torbutton_save_security_settings() { + setIntPref( + "browser.security_level.security_slider", + sliderPositionToPrefSetting(state.slider) + ); + setBoolPref("browser.security_level.security_custom", state.custom); +} diff --git a/toolkit/torbutton/chrome/content/preferences.xhtml b/toolkit/torbutton/chrome/content/preferences.xhtml new file mode 100644 index 000000000000..eafbf01e7d6c --- /dev/null +++ b/toolkit/torbutton/chrome/content/preferences.xhtml @@ -0,0 +1,84 @@ +<!DOCTYPE overlay SYSTEM "chrome://torbutton/locale/torbutton.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <meta charset="UTF-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1"/> + <head> + <title>&torbutton.prefs.security_settings;</title> + <link type="text/css" rel="stylesheet" charset="UTF-8" href="chrome://torbutton/skin/preferences.css"/> + <link type="text/css" rel="stylesheet" charset="UTF-8" href="chrome://torbutton/skin/preferences-mobile.css"/> + <script type="text/javascript" src="preferences-mobile.js"></script> + <style> + </style> + </head> + <body onload="torbutton_init_security_ui()"> + <div class="wrapper outer-wrapper"> + <div class="title"> + &torbutton.prefs.sec_caption; + </div> + <div class="wrapper inner-wrapper"> + <input id="torbutton_sec_slider" type="range" min="1" max="3" list="datalist" onchange="torbutton_set_slider(parseInt(this.value, 10))"/> + <datalist id="datalist"> + <option onclick="torbutton_set_slider(1)"> + &torbutton.prefs.sec_standard_label; + </option> + <option onclick="torbutton_set_slider(2)"> + &torbutton.prefs.sec_safer_label; + </option> + <option onclick="torbutton_set_slider(3)"> + &torbutton.prefs.sec_safest_label; + </option> + </datalist> + <div class="description-wrapper"> + <div id="desc_safest" class="description"> + <p class="slider-text-size slider-text-weight"> + &torbutton.prefs.sec_safest_description; + </p> + <p class="slider-text-size slider-text-weight"> + &torbutton.prefs.sec_safest_list_label; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_js_disabled; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_limit_graphics_and_typography; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_click_to_play_media; + </p> + <a id="link_safest" class="text-link"> + &torbutton.prefs.sec_learn_more_label; + </a> + </div> + <div id="desc_safer" class="description"> + <p class="slider-text-size slider-text-weight"> + &torbutton.prefs.sec_safer_description; + </p> + <p class="slider-text-size slider-text-weight"> + &torbutton.prefs.sec_safer_list_label; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_js_on_https_sites_only; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_limit_typography; + </p> + <p class="slider-text-size"> + &torbutton.prefs.sec_click_to_play_media; + </p> + <a id="link_safer" class="text-link"> + &torbutton.prefs.sec_learn_more_label; + </a> + </div> + <div id="desc_standard" class="description"> + <p class="slider-text-size slider-text-weight"> + &torbutton.prefs.sec_standard_description; + </p> + <a id="link_standard" class="text-link"> + &torbutton.prefs.sec_learn_more_label; + </a> + </div> + </div> + </div> + </div> + </body> +</html> diff --git a/toolkit/torbutton/chrome/content/tor-circuit-display.js b/toolkit/torbutton/chrome/content/tor-circuit-display.js new file mode 100644 index 000000000000..76fb74546ac6 --- /dev/null +++ b/toolkit/torbutton/chrome/content/tor-circuit-display.js @@ -0,0 +1,604 @@ +// A script that automatically displays the Tor Circuit used for the +// current domain for the currently selected tab. +// +// This file is written in call stack order (later functions +// call earlier functions). The file can be processed +// with docco.js to produce pretty documentation. +// +// This script is to be embedded in torbutton.xhtml. It defines a single global +// function, createTorCircuitDisplay(), which activates the automatic Tor +// circuit display for the current tab and any future tabs. +// +// See https://trac.torproject.org/8641 + +/* jshint esnext: true */ +/* global document, gBrowser, Components */ + +// ### Main function +// __createTorCircuitDisplay(enablePrefName)__. +// The single function that prepares tor circuit display. Connects to a tor +// control port using information provided to the control port module via +// a previous call to configureControlPortModule(), and binds to a named +// bool pref whose value determines whether the circuit display is enabled +// or disabled. +let createTorCircuitDisplay = (function() { + "use strict"; + + // Mozilla utilities + const { Services } = ChromeUtils.import( + "resource://gre/modules/Services.jsm" + ); + + // Import the controller code. + const { wait_for_controller } = ChromeUtils.import( + "resource://torbutton/modules/tor-control-port.js" + ); + + // Utility functions + let { + bindPrefAndInit, + observe, + getLocale, + getDomainForBrowser, + torbutton_get_property_string, + } = ChromeUtils.import("resource://torbutton/modules/utils.js"); + + // Make the TorButton logger available. + let logger = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + + // ## Circuit/stream credentials and node monitoring + + // A mutable map that stores the current nodes for each + // SOCKS username/password pair. + let credentialsToNodeDataMap = new Map(), + // A mutable map that reports `true` for IDs of "mature" circuits + // (those that have conveyed a stream). + knownCircuitIDs = new Map(), + // A mutable map that records the SOCKS credentials for the + // latest channels for each browser + domain. + browserToCredentialsMap = new Map(); + + // __trimQuotes(s)__. + // Removes quotation marks around a quoted string. + let trimQuotes = s => (s ? s.match(/^"(.*)"$/)[1] : undefined); + + // __getBridge(id)__. + // Gets the bridge parameters for a given node ID. If the node + // is not currently used as a bridge, returns null. + let getBridge = async function(controller, id) { + let bridges = await controller.getConf("bridge"); + if (bridges) { + for (let bridge of bridges) { + if (bridge.ID && bridge.ID.toUpperCase() === id.toUpperCase()) { + return bridge; + } + } + } + return null; + }; + + // nodeDataForID(controller, id)__. + // Returns the type, IP addresses and country code of a node with given ID. + // Example: `nodeDataForID(controller, "20BC91DC525C3DC9974B29FBEAB51230DE024C44")` + // => `{ type: "default", ipAddrs: ["12.23.34.45", "2001:db8::"], countryCode: "fr" }` + let nodeDataForID = async function(controller, id) { + let result = { ipAddrs: [] }; + const bridge = await getBridge(controller, id); // type, ip, countryCode; + const addrRe = /^[?([^]]+)]?:\d+$/; + if (bridge) { + result.type = "bridge"; + result.bridgeType = bridge.type; + // Attempt to get an IP address from bridge address string. + try { + const ip = bridge.address.match(addrRe)[1]; + if (!ip.startsWith("0.")) { + result.ipAddrs = [ip]; + } + } catch (e) {} + } else { + // either dealing with a relay, or a bridge whose fingerprint is not saved in torrc + try { + const statusMap = await controller.getInfo("ns/id/" + id); + result.type = "default"; + if (!statusMap.IP.startsWith("0.")) { + result.ipAddrs.push(statusMap.IP); + } + try { + result.ipAddrs.push(statusMap.IPv6.match(addrRe)[1]); + } catch (e) {} + } catch (e) { + // getInfo will throw if the given id is not a relay + // this probably means we are dealing with a user-provided bridge with no fingerprint + result.type = "bridge"; + // we don't know the ip/ipv6 or type, so leave blank + result.ipAddrs = []; + result.bridgeType = ""; + } + } + if (result.ipAddrs.length) { + // Get the country code for the node's IP address. + try { + const countryCode = await controller.getInfo( + "ip-to-country/" + result.ipAddrs[0] + ); + result.countryCode = countryCode === "??" ? null : countryCode; + } catch (e) {} + } + return result; + }; + + // __nodeDataForCircuit(controller, circuitEvent)__. + // Gets the information for a circuit. + let nodeDataForCircuit = async function(controller, circuitEvent) { + let rawIDs = circuitEvent.circuit.map(circ => circ[0]), + // Remove the leading '$' if present. + ids = rawIDs.map(id => (id[0] === "$" ? id.substring(1) : id)); + // Get the node data for all IDs in circuit. + return Promise.all(ids.map(id => nodeDataForID(controller, id))); + }; + + // __getCircuitStatusByID(aController, circuitID)__ + // Returns the circuit status for the circuit with the given ID. + let getCircuitStatusByID = async function(aController, circuitID) { + let circuitStatuses = await aController.getInfo("circuit-status"); + if (circuitStatuses) { + for (let circuitStatus of circuitStatuses) { + if (circuitStatus.id === circuitID) { + return circuitStatus; + } + } + } + return null; + }; + + // __collectIsolationData(aController, updateUI)__. + // Watches for STREAM SENTCONNECT events. When a SENTCONNECT event occurs, then + // we assume isolation settings (SOCKS username+password) are now fixed for the + // corresponding circuit. Whenever the first stream on a new circuit is seen, + // looks up u+p and records the node data in the credentialsToNodeDataMap. + // We need to update the circuit display immediately after any new node data + // is received. So the `updateUI` callback will be called at that point. + // See https://trac.torproject.org/projects/tor/ticket/15493 + let collectIsolationData = function(aController, updateUI) { + return aController.watchEvent( + "STREAM", + streamEvent => streamEvent.StreamStatus === "SENTCONNECT", + async streamEvent => { + if (!knownCircuitIDs.get(streamEvent.CircuitID)) { + logger.eclog(3, "streamEvent.CircuitID: " + streamEvent.CircuitID); + knownCircuitIDs.set(streamEvent.CircuitID, true); + let circuitStatus = await getCircuitStatusByID( + aController, + streamEvent.CircuitID + ), + credentials = circuitStatus + ? trimQuotes(circuitStatus.SOCKS_USERNAME) + + "|" + + trimQuotes(circuitStatus.SOCKS_PASSWORD) + : null; + if (credentials) { + let nodeData = await nodeDataForCircuit(aController, circuitStatus); + credentialsToNodeDataMap.set(credentials, nodeData); + updateUI(); + } + } + } + ); + }; + + // __browserForChannel(channel)__. + // Returns the browser that loaded a given channel. + let browserForChannel = function(channel) { + if (!channel) { + return null; + } + let chan = channel.QueryInterface(Ci.nsIChannel); + let callbacks = chan.notificationCallbacks; + if (!callbacks) { + return null; + } + let loadContext; + try { + loadContext = callbacks.getInterface(Ci.nsILoadContext); + } catch (e) { + // Ignore + return null; + } + if (!loadContext) { + return null; + } + return loadContext.topFrameElement; + }; + + // __collectBrowserCredentials()__. + // Starts observing http channels. Each channel's proxyInfo + // username and password is recorded for the channel's browser. + let collectBrowserCredentials = function() { + return observe("http-on-modify-request", chan => { + try { + let proxyInfo = chan.QueryInterface(Ci.nsIProxiedChannel).proxyInfo; + let browser = browserForChannel(chan); + if (browser && proxyInfo) { + if (!browserToCredentialsMap.has(browser)) { + browserToCredentialsMap.set(browser, new Map()); + } + let domainMap = browserToCredentialsMap.get(browser); + domainMap.set(proxyInfo.username, [ + proxyInfo.username, + proxyInfo.password, + ]); + } + } catch (e) { + logger.eclog( + 3, + `Error collecting browser credentials: ${e.message}, ${chan.URI.spec}` + ); + } + }); + }; + + // ## User interface + + // __uiString__. + // Read the localized strings for this UI. + let uiString = function(shortName) { + return torbutton_get_property_string( + "torbutton.circuit_display." + shortName + ); + }; + + // __localizedCountryNameFromCode(countryCode)__. + // Convert a country code to a localized country name. + // Example: `'de'` -> `'Deutschland'` in German locale. + let localizedCountryNameFromCode = function(countryCode) { + if (!countryCode) { + return uiString("unknown_country"); + } + try { + return Services.intl.getRegionDisplayNames(undefined, [countryCode])[0]; + } catch (e) { + return countryCode.toUpperCase(); + } + }; + + // __showCircuitDisplay(show)__. + // If show === true, makes the circuit display visible. + let showCircuitDisplay = function(show) { + document.getElementById("circuit-display-container").hidden = !show; + }; + + // __xmlTree(ns, data)__. + // Takes an xml namespace, ns, and a + // data structure representing xml elements like + // [tag, { attr-key: attr-value }, ...xml-children] + // and returns nested xml element objects. + let xmlTree = function xmlTree(ns, data) { + let [type, attrs, ...children] = data; + let element = type.startsWith("html:") + ? document.createXULElement(type) + : document.createElementNS(ns, type); + for (let [key, val] of Object.entries(attrs)) { + element.setAttribute(key, val); + } + for (let child of children) { + if (child !== null && child !== undefined) { + element.append(typeof child === "string" ? child : xmlTree(ns, child)); + } + } + return element; + }; + + // __htmlTree(data)__. + // Takes a data structure representing html elements like + // [tag, { attr-key: attr-value }, ...html-children] + // and returns nested html element objects. + let htmlTree = data => xmlTree("http://www.w3.org/1999/xhtml", data); + + // __appendHtml(parent, data)__. + // Takes a data structure representing html elements like + // [tag, { attr-key: attr-value }, ...html-children] + // and appends nested html element objects to the parent element. + let appendHtml = (parent, data) => parent.appendChild(htmlTree(data)); + + // __circuitCircuitData()__. + // Obtains the circuit used by the given browser. + let currentCircuitData = function(browser) { + if (browser) { + let firstPartyDomain = getDomainForBrowser(browser); + let domain = firstPartyDomain || "--unknown--"; + let domainMap = browserToCredentialsMap.get(browser); + let credentials = domainMap && domainMap.get(domain); + if (credentials) { + let [SOCKS_username, SOCKS_password] = credentials; + let nodeData = credentialsToNodeDataMap.get( + `${SOCKS_username}|${SOCKS_password}` + ); + let domain = SOCKS_username; + if (browser.documentURI.host.endsWith(".tor.onion")) { + const service = Cc[ + "@torproject.org/onion-alias-service;1" + ].getService(Ci.IOnionAliasService); + domain = service.getOnionAlias(browser.documentURI.host); + } + return { domain, nodeData }; + } + } + return { domain: null, nodeData: null }; + }; + + // __updateCircuitDisplay()__. + // Updates the Tor circuit display, showing the current domain + // and the relay nodes for that domain. + let updateCircuitDisplay = function() { + let { domain, nodeData } = currentCircuitData(gBrowser.selectedBrowser); + if (domain && nodeData) { + // Update the displayed information for the relay nodes. + let nodeHtmlList = document.getElementById("circuit-display-nodes"); + let li = (...data) => appendHtml(nodeHtmlList, ["li", {}, ...data]); + nodeHtmlList.innerHTML = ""; + li(uiString("this_browser")); + for (let i = 0; i < nodeData.length; ++i) { + let relayText; + if (nodeData[i].type === "bridge") { + relayText = uiString("tor_bridge"); + let bridgeType = nodeData[i].bridgeType; + if (bridgeType === "meek_lite") { + relayText += ": meek"; + } else if (bridgeType !== "vanilla" && bridgeType !== "") { + relayText += ": " + bridgeType; + } + } else if (nodeData[i].type == "default") { + relayText = localizedCountryNameFromCode(nodeData[i].countryCode); + } + const ipAddrs = nodeData[i].ipAddrs.join(", "); + li( + relayText, + " ", + ["span", { class: "circuit-ip-address" }, ipAddrs], + " ", + i === 0 && nodeData[0].type !== "bridge" + ? ["span", { class: "circuit-guard-info" }, uiString("guard")] + : null + ); + } + + let domainParts = []; + if (domain.endsWith(".onion")) { + for (let i = 0; i < 3; ++i) { + li(uiString("relay")); + } + if (domain.length > 22) { + domainParts.push(domain.slice(0, 7), "…", domain.slice(-12)); + } else { + domainParts.push(domain); + } + } else { + domainParts.push(domain); + } + + // We use a XUL html:span element so that the tooltiptext is displayed. + li([ + "html:span", + { + class: "circuit-onion", + onclick: ` + this.classList.add("circuit-onion-copied"); + Cc[ + "@mozilla.org/widget/clipboardhelper;1" + ].getService(Ci.nsIClipboardHelper).copyString(this.getAttribute("data-onion")) + `, + "data-onion": domain, + "data-text-clicktocopy": torbutton_get_property_string( + "torbutton.circuit_display.click_to_copy" + ), + "data-text-copied": torbutton_get_property_string( + "torbutton.circuit_display.copied" + ), + tooltiptext: domain, + }, + ...domainParts, + ]); + + // Hide the note about guards if we are using a bridge. + document.getElementById("circuit-guard-note-container").hidden = + nodeData[0].type === "bridge"; + } else { + // Only show the Tor circuit if we have credentials and node data. + logger.eclog(4, "no SOCKS credentials found for current document."); + } + showCircuitDisplay(domain && nodeData); + }; + + // __syncDisplayWithSelectedTab(syncOn)__. + // Whenever the user starts to open the popup menu, make sure the display + // is the correct one for this tab. It's also possible that a new site + // can be loaded while the popup menu is open. + // Update the display if this happens. + let syncDisplayWithSelectedTab = (function() { + let listener = { + onLocationChange(aBrowser) { + if (aBrowser === gBrowser.selectedBrowser) { + updateCircuitDisplay(); + } + }, + }; + return function(syncOn) { + let popupMenu = document.getElementById("identity-popup"); + if (syncOn) { + // Update the circuit display just before the popup menu is shown. + popupMenu.addEventListener("popupshowing", updateCircuitDisplay); + // If the currently selected tab has been sent to a new location, + // update the circuit to reflect that. + gBrowser.addTabsProgressListener(listener); + } else { + // Stop syncing. + gBrowser.removeTabsProgressListener(listener); + popupMenu.removeEventListener("popupshowing", updateCircuitDisplay); + // Hide the display. + showCircuitDisplay(false); + } + }; + })(); + + // __setupGuardNote()__. + // Call once to show the Guard note as intended. + let setupGuardNote = function() { + let guardNote = document.getElementById("circuit-guard-note-container"); + let guardNoteString = uiString("guard_note"); + let learnMoreString = uiString("learn_more"); + let [noteBefore, name, noteAfter] = guardNoteString.split(/[[]]/); + let localeCode = getLocale(); + appendHtml(guardNote, [ + "div", + {}, + noteBefore, + ["span", { class: "circuit-guard-name" }, name], + noteAfter, + " ", + [ + "span", + { + onclick: `gBrowser.selectedTab = gBrowser.addWebTab('https://support.torproject.org/$%7BlocaleCode%7D/tbb/tbb-2/%27);%60, + class: "circuit-link", + }, + learnMoreString, + ], + ]); + }; + + // __ensureCorrectPopupDimensions()__. + // Make sure the identity popup always displays with the correct height. + let ensureCorrectPopupDimensions = function() { + // FIXME: This is hacking with the internals of the panel view, which also + // sets the width and height for transitions (see PanelMultiView.jsm), so + // this fix is fragile. + // Ideally the panel view would start using a non-XUL CSS layout, which + // would work regardless of the content. + let popupMenu = document.getElementById("identity-popup"); + let setDimensions = event => { + if (event.target !== popupMenu) { + return; + } + setTimeout(() => { + let view = document.querySelector( + "#identity-popup-multiView .panel-viewcontainer" + ); + let stack = document.querySelector( + "#identity-popup-multiView .panel-viewstack" + ); + let view2 = document.getElementById("identity-popup-mainView"); + if (view && stack && view2) { + let newWidth = Math.max( + ...[...view2.children].map(el => el.clientWidth) + ); + let newHeight = stack.clientHeight; + stack.setAttribute("width", newWidth); + view2.style.minWidth = view2.style.maxWidth = newWidth + "px"; + view.setAttribute("width", newWidth); + view.setAttribute("height", newHeight); + } + }); + }; + let removeDimensions = event => { + if (event.target !== popupMenu) { + return; + } + let view = document.querySelector( + "#identity-popup-multiView .panel-viewcontainer" + ); + let stack = document.querySelector( + "#identity-popup-multiView .panel-viewstack" + ); + let view2 = document.getElementById("identity-popup-mainView"); + if (view && stack && view2) { + view.removeAttribute("width"); + view.removeAttribute("height"); + stack.removeAttribute("width"); + view2.style.minWidth = view2.style.maxWidth = ""; + } + }; + popupMenu.addEventListener("popupshowing", setDimensions); + popupMenu.addEventListener("popuphiding", removeDimensions); + return () => { + popupMenu.removeEventListener("popupshowing", setDimensions); + popupMenu.removeEventListener("popuphiding", removeDimensions); + }; + }; + + // ## Main function + + // __setupDisplay(enablePrefName)__. + // Once called, the Tor circuit display will be started whenever + // the "enablePref" is set to true, and stopped when it is set to false. + // A reference to this function (called createTorCircuitDisplay) is exported as a global. + let setupDisplay = function(enablePrefName) { + // From 79 on the identity popup is initialized lazily + if (gIdentityHandler._initializePopup) { + gIdentityHandler._initializePopup(); + } + setupGuardNote(); + let myController = null, + stopCollectingIsolationData = null, + stopCollectingBrowserCredentials = null, + stopEnsuringCorrectPopupDimensions = null, + stop = function() { + syncDisplayWithSelectedTab(false); + if (myController) { + if (stopCollectingIsolationData) { + stopCollectingIsolationData(); + } + if (stopCollectingBrowserCredentials) { + stopCollectingBrowserCredentials(); + } + if (stopEnsuringCorrectPopupDimensions) { + stopEnsuringCorrectPopupDimensions(); + } + myController = null; + } + }, + start = async function() { + if (!myController) { + try { + myController = await wait_for_controller(); + syncDisplayWithSelectedTab(true); + stopCollectingIsolationData = collectIsolationData( + myController, + updateCircuitDisplay + ); + stopCollectingBrowserCredentials = collectBrowserCredentials(); + stopEnsuringCorrectPopupDimensions = ensureCorrectPopupDimensions(); + } catch (err) { + logger.eclog(5, err); + logger.eclog( + 5, + "Disabling tor display circuit because of an error." + ); + myController.close(); + stop(); + } + } + }; + try { + let unbindPref = bindPrefAndInit(enablePrefName, on => { + if (on) { + start(); + } else { + stop(); + } + }); + // When this chrome window is unloaded, we need to unbind the pref. + window.addEventListener("unload", function() { + unbindPref(); + stop(); + }); + } catch (e) { + logger.eclog(5, "Error: " + e.message + "\n" + e.stack); + } + }; + + return setupDisplay; + + // Finish createTorCircuitDisplay() +})(); diff --git a/toolkit/torbutton/chrome/content/torbutton.js b/toolkit/torbutton/chrome/content/torbutton.js new file mode 100644 index 000000000000..0959efc4fd31 --- /dev/null +++ b/toolkit/torbutton/chrome/content/torbutton.js @@ -0,0 +1,1044 @@ +// window globals +var torbutton_init; +var torbutton_new_circuit; + +(() => { + // Bug 1506 P1-P5: This is the main Torbutton overlay file. Much needs to be + // preserved here, but in an ideal world, most of this code should perhaps be + // moved into an XPCOM service, and much can also be tossed. See also + // individual 1506 comments for details. + + // TODO: check for leaks: http://www.mozilla.org/scriptable/avoiding-leaks.html + // TODO: Double-check there are no strange exploits to defeat: + // http://kb.mozillazine.org/Links_to_local_pages_don%27t_work + + /* global gBrowser, CustomizableUI, + createTorCircuitDisplay, gFindBarInitialized, + gFindBar, OpenBrowserWindow, PrivateBrowsingUtils, + Services, AppConstants + */ + + let { + unescapeTorString, + bindPrefAndInit, + getDomainForBrowser, + torbutton_log, + torbutton_get_property_string, + } = ChromeUtils.import("resource://torbutton/modules/utils.js"); + let { configureControlPortModule, wait_for_controller } = ChromeUtils.import( + "resource://torbutton/modules/tor-control-port.js" + ); + + const { TorProtocolService } = ChromeUtils.import( + "resource://gre/modules/TorProtocolService.jsm" + ); + + const k_tb_tor_check_failed_topic = "Torbutton:TorCheckFailed"; + + var m_tb_prefs = Services.prefs; + + // status + var m_tb_wasinited = false; + var m_tb_is_main_window = false; + + var m_tb_control_ipc_file = null; // Set if using IPC (UNIX domain socket). + var m_tb_control_port = null; // Set if using TCP. + var m_tb_control_host = null; // Set if using TCP. + var m_tb_control_pass = null; + + // Bug 1506 P2: This object keeps Firefox prefs in sync with Torbutton prefs. + // It probably could stand some simplification (See #3100). It also belongs + // in a component, not the XUL overlay. + var torbutton_unique_pref_observer = { + register() { + this.forced_ua = false; + m_tb_prefs.addObserver("extensions.torbutton", this); + m_tb_prefs.addObserver("browser.privatebrowsing.autostart", this); + m_tb_prefs.addObserver("javascript", this); + m_tb_prefs.addObserver("privacy.resistFingerprinting", this); + m_tb_prefs.addObserver("privacy.resistFingerprinting.letterboxing", this); + }, + + unregister() { + m_tb_prefs.removeObserver("extensions.torbutton", this); + m_tb_prefs.removeObserver("browser.privatebrowsing.autostart", this); + m_tb_prefs.removeObserver("javascript", this); + m_tb_prefs.removeObserver("privacy.resistFingerprinting", this); + m_tb_prefs.removeObserver( + "privacy.resistFingerprinting.letterboxing", + this + ); + }, + + // topic: what event occurred + // subject: what nsIPrefBranch we're observing + // data: which pref has been changed (relative to subject) + observe(subject, topic, data) { + if (topic !== "nsPref:changed") { + return; + } + switch (data) { + case "browser.privatebrowsing.autostart": + torbutton_update_disk_prefs(); + break; + case "extensions.torbutton.use_nontor_proxy": + torbutton_use_nontor_proxy(); + break; + case "privacy.resistFingerprinting": + case "privacy.resistFingerprinting.letterboxing": + torbutton_update_fingerprinting_prefs(); + break; + } + }, + }; + + var torbutton_tor_check_observer = { + register() { + this._obsSvc = Services.obs; + this._obsSvc.addObserver(this, k_tb_tor_check_failed_topic); + }, + + unregister() { + if (this._obsSvc) { + this._obsSvc.removeObserver(this, k_tb_tor_check_failed_topic); + } + }, + + observe(subject, topic, data) { + if (topic === k_tb_tor_check_failed_topic) { + // Update all open about:tor pages. + torbutton_abouttor_message_handler.updateAllOpenPages(); + + // If the user does not have an about:tor tab open in the front most + // window, open one. + var wm = Services.wm; + var win = wm.getMostRecentWindow("navigator:browser"); + if (win == window) { + let foundTab = false; + let tabBrowser = top.gBrowser; + for (let i = 0; !foundTab && i < tabBrowser.browsers.length; ++i) { + let b = tabBrowser.getBrowserAtIndex(i); + foundTab = b.currentURI.spec.toLowerCase() == "about:tor"; + } + + if (!foundTab) { + gBrowser.selectedTab = gBrowser.addTrustedTab("about:tor"); + } + } + } + }, + }; + + var torbutton_new_identity_observers = { + register() { + Services.obs.addObserver(this, "new-identity-requested"); + }, + + observe(aSubject, aTopic, aData) { + if (aTopic !== "new-identity-requested") { + return; + } + + // Clear the domain isolation state. + torbutton_log(3, "Clearing domain isolator"); + const domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + domainIsolator.clearIsolation(); + + torbutton_log(3, "New Identity: Sending NEWNYM"); + // We only support TBB for newnym. + if ( + !m_tb_control_pass || + (!m_tb_control_ipc_file && !m_tb_control_port) + ) { + const warning = torbutton_get_property_string( + "torbutton.popup.no_newnym" + ); + torbutton_log( + 5, + "Torbutton cannot safely newnym. It does not have access to the Tor Control Port." + ); + window.alert(warning); + } else { + const warning = torbutton_get_property_string( + "torbutton.popup.no_newnym" + ); + torbutton_send_ctrl_cmd("SIGNAL NEWNYM") + .then(res => { + if (!res) { + torbutton_log( + 5, + "Torbutton was unable to request a new circuit from Tor" + ); + window.alert(warning); + } + }) + .catch(e => { + torbutton_log( + 5, + "Torbutton was unable to request a new circuit from Tor " + e + ); + window.alert(warning); + }); + } + }, + }; + + function torbutton_is_mobile() { + return Services.appinfo.OS === "Android"; + } + + // Bug 1506 P2-P4: This code sets some version variables that are irrelevant. + // It does read out some important environment variables, though. It is + // called once per browser window.. This might belong in a component. + torbutton_init = function() { + torbutton_log(3, "called init()"); + + if (m_tb_wasinited) { + return; + } + m_tb_wasinited = true; + + // Bug 1506 P4: These vars are very important for New Identity + var environ = Cc["@mozilla.org/process/environment;1"].getService( + Ci.nsIEnvironment + ); + + if (environ.exists("TOR_CONTROL_PASSWD")) { + m_tb_control_pass = environ.get("TOR_CONTROL_PASSWD"); + } else if (environ.exists("TOR_CONTROL_COOKIE_AUTH_FILE")) { + var cookie_path = environ.get("TOR_CONTROL_COOKIE_AUTH_FILE"); + try { + if ("" != cookie_path) { + m_tb_control_pass = torbutton_read_authentication_cookie(cookie_path); + } + } catch (e) { + torbutton_log(4, "unable to read authentication cookie"); + } + } else { + try { + // Try to get password from Tor Launcher. + m_tb_control_pass = TorProtocolService.torGetPassword(false); + } catch (e) {} + } + + // Try to get the control port IPC file (an nsIFile) from Tor Launcher, + // since Tor Launcher knows how to handle its own preferences and how to + // resolve relative paths. + try { + m_tb_control_ipc_file = TorProtocolService.torGetControlIPCFile(); + } catch (e) {} + + if (!m_tb_control_ipc_file) { + if (environ.exists("TOR_CONTROL_PORT")) { + m_tb_control_port = environ.get("TOR_CONTROL_PORT"); + } else { + try { + const kTLControlPortPref = "extensions.torlauncher.control_port"; + m_tb_control_port = m_tb_prefs.getIntPref(kTLControlPortPref); + } catch (e) { + // Since we want to disable some features when Tor Launcher is + // not installed (e.g., New Identity), we do not set a default + // port value here. + } + } + + if (environ.exists("TOR_CONTROL_HOST")) { + m_tb_control_host = environ.get("TOR_CONTROL_HOST"); + } else { + try { + const kTLControlHostPref = "extensions.torlauncher.control_host"; + m_tb_control_host = m_tb_prefs.getCharPref(kTLControlHostPref); + } catch (e) { + m_tb_control_host = "127.0.0.1"; + } + } + } + + configureControlPortModule( + m_tb_control_ipc_file, + m_tb_control_host, + m_tb_control_port, + m_tb_control_pass + ); + + // Add about:tor IPC message listener. + window.messageManager.addMessageListener( + "AboutTor:Loaded", + torbutton_abouttor_message_handler + ); + + setupPreferencesForMobile(); + + torbutton_log(1, "registering Tor check observer"); + torbutton_tor_check_observer.register(); + + // Create the circuit display even though the control port might not be + // ready yet, as the circuit display will wait for the controller to be + // available anyway. + try { + createTorCircuitDisplay("extensions.torbutton.display_circuit"); + circuitDisplayCreated = true; + } catch (e) { + torbutton_log(4, "Error creating the tor circuit display " + e); + } + + // Arrange for our about:tor content script to be loaded in each frame. + window.messageManager.loadFrameScript( + "chrome://torbutton/content/aboutTor/aboutTor-content.js", + true + ); + + torbutton_new_identity_observers.register(); + + torbutton_log(3, "init completed"); + }; + + var torbutton_abouttor_message_handler = { + // Receive IPC messages from the about:tor content script. + async receiveMessage(aMessage) { + switch (aMessage.name) { + case "AboutTor:Loaded": + aMessage.target.messageManager.sendAsyncMessage( + "AboutTor:ChromeData", + await this.getChromeData(true) + ); + break; + } + }, + + // Send privileged data to all of the about:tor content scripts. + async updateAllOpenPages() { + window.messageManager.broadcastAsyncMessage( + "AboutTor:ChromeData", + await this.getChromeData(false) + ); + }, + + // The chrome data contains all of the data needed by the about:tor + // content process that is only available here (in the chrome process). + // It is sent to the content process when an about:tor window is opened + // and in response to events such as the browser noticing that Tor is + // not working. + async getChromeData(aIsRespondingToPageLoad) { + let dataObj = { + mobile: torbutton_is_mobile(), + updateChannel: AppConstants.MOZ_UPDATE_CHANNEL, + torOn: await torbutton_tor_check_ok(), + }; + + if (aIsRespondingToPageLoad) { + const kShouldNotifyPref = "torbrowser.post_update.shouldNotify"; + if (m_tb_prefs.getBoolPref(kShouldNotifyPref, false)) { + m_tb_prefs.clearUserPref(kShouldNotifyPref); + dataObj.hasBeenUpdated = true; + dataObj.updateMoreInfoURL = this.getUpdateMoreInfoURL(); + } + } + + return dataObj; + }, + + getUpdateMoreInfoURL() { + try { + return Services.prefs.getCharPref("torbrowser.post_update.url"); + } catch (e) {} + + // Use the default URL as a fallback. + return Services.urlFormatter.formatURLPref( + "startup.homepage_override_url" + ); + }, + }; + + // Bug 1506 P4: Control port interaction. Needed for New Identity. + function torbutton_read_authentication_cookie(path) { + var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); + file.initWithPath(path); + var fileStream = Cc[ + "@mozilla.org/network/file-input-stream;1" + ].createInstance(Ci.nsIFileInputStream); + fileStream.init(file, 1, 0, false); + var binaryStream = Cc["@mozilla.org/binaryinputstream;1"].createInstance( + Ci.nsIBinaryInputStream + ); + binaryStream.setInputStream(fileStream); + var array = binaryStream.readByteArray(fileStream.available()); + binaryStream.close(); + fileStream.close(); + return torbutton_array_to_hexdigits(array); + } + + // Bug 1506 P4: Control port interaction. Needed for New Identity. + function torbutton_array_to_hexdigits(array) { + return array + .map(function(c) { + return String("0" + c.toString(16)).slice(-2); + }) + .join(""); + } + + // Bug 1506 P4: Control port interaction. Needed for New Identity. + // + // Asynchronously executes a command on the control port. + // returns the response as a string, or null on error + async function torbutton_send_ctrl_cmd(command) { + const getErrorMessage = e => (e && (e.torMessage || e.message)) || ""; + let response = null; + try { + const avoidCache = true; + let torController = await wait_for_controller(avoidCache); + + let bytes = await torController.sendCommand(command); + if (!bytes.startsWith("250")) { + throw new Error( + `Unexpected command response on control port '${bytes}'` + ); + } + response = bytes.slice(4); + + torController.close(); + } catch (err) { + let msg = getErrorMessage(err); + torbutton_log(4, `Error: ${msg}`); + } + return response; + } + + // Bug 1506 P4: Needed for New IP Address + torbutton_new_circuit = function() { + let firstPartyDomain = getDomainForBrowser(gBrowser.selectedBrowser); + + let domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + + domainIsolator.newCircuitForDomain(firstPartyDomain); + + gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE); + }; + + /* Called when we switch the use_nontor_proxy pref in either direction. + * + * Enables/disables domain isolation and then does new identity + */ + function torbutton_use_nontor_proxy() { + let domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + + if (m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy")) { + // Disable domain isolation + domainIsolator.disableIsolation(); + } else { + domainIsolator.enableIsolation(); + } + } + + async function torbutton_do_tor_check() { + let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + if ( + m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy") || + !m_tb_prefs.getBoolPref("extensions.torbutton.test_enabled") + ) { + return; + } // Only do the check once. + + // If we have a tor control port and transparent torification is off, + // perform a check via the control port. + const kEnvSkipControlPortTest = "TOR_SKIP_CONTROLPORTTEST"; + const kEnvUseTransparentProxy = "TOR_TRANSPROXY"; + var env = Cc["@mozilla.org/process/environment;1"].getService( + Ci.nsIEnvironment + ); + if ( + (m_tb_control_ipc_file || m_tb_control_port) && + !env.exists(kEnvUseTransparentProxy) && + !env.exists(kEnvSkipControlPortTest) && + m_tb_prefs.getBoolPref("extensions.torbutton.local_tor_check") + ) { + if (await torbutton_local_tor_check()) { + checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful; + } else { + // The check failed. Update toolbar icon and tooltip. + checkSvc.statusOfTorCheck = checkSvc.kCheckFailed; + } + } else { + // A local check is not possible, so perform a remote check. + torbutton_initiate_remote_tor_check(); + } + } + + async function torbutton_local_tor_check() { + let didLogError = false; + + let proxyType = m_tb_prefs.getIntPref("network.proxy.type"); + if (0 == proxyType) { + return false; + } + + // Ask tor for its SOCKS listener address and port and compare to the + // browser preferences. + const kCmdArg = "net/listeners/socks"; + let resp = await torbutton_send_ctrl_cmd("GETINFO " + kCmdArg); + if (!resp) { + return false; + } + + function logUnexpectedResponse() { + if (!didLogError) { + didLogError = true; + torbutton_log( + 5, + "Local Tor check: unexpected GETINFO response: " + resp + ); + } + } + + function removeBrackets(aStr) { + // Remove enclosing square brackets if present. + if (aStr.startsWith("[") && aStr.endsWith("]")) { + return aStr.substr(1, aStr.length - 2); + } + + return aStr; + } + + // Sample response: net/listeners/socks="127.0.0.1:9149" "127.0.0.1:9150" + // First, check for and remove the command argument prefix. + if (0 != resp.indexOf(kCmdArg + "=")) { + logUnexpectedResponse(); + return false; + } + resp = resp.substr(kCmdArg.length + 1); + + // Retrieve configured proxy settings and check each listener against them. + // When the SOCKS prefs are set to use IPC (e.g., a Unix domain socket), a + // file URL should be present in network.proxy.socks. + // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1211567 + let socksAddr = m_tb_prefs.getCharPref("network.proxy.socks"); + let socksPort = m_tb_prefs.getIntPref("network.proxy.socks_port"); + let socksIPCPath; + if (socksAddr && socksAddr.startsWith("file:")) { + // Convert the file URL to a file path. + try { + let ioService = Services.io; + let fph = ioService + .getProtocolHandler("file") + .QueryInterface(Ci.nsIFileProtocolHandler); + socksIPCPath = fph.getFileFromURLSpec(socksAddr).path; + } catch (e) { + torbutton_log(5, "Local Tor check: IPC file error: " + e); + return false; + } + } else { + socksAddr = removeBrackets(socksAddr); + } + + // Split into quoted strings. This code is adapted from utils.splitAtSpaces() + // within tor-control-port.js; someday this code should use the entire + // tor-control-port.js framework. + let addrArray = []; + resp.replace(/((\S*?"(.*?)")+\S*|\S+)/g, function(a, captured) { + addrArray.push(captured); + }); + + let foundSocksListener = false; + for (let i = 0; !foundSocksListener && i < addrArray.length; ++i) { + let addr; + try { + addr = unescapeTorString(addrArray[i]); + } catch (e) {} + if (!addr) { + continue; + } + + // Remove double quotes if present. + let len = addr.length; + if (len > 2 && '"' == addr.charAt(0) && '"' == addr.charAt(len - 1)) { + addr = addr.substring(1, len - 1); + } + + if (addr.startsWith("unix:")) { + if (!socksIPCPath) { + continue; + } + + // Check against the configured UNIX domain socket proxy. + let path = addr.substring(5); + torbutton_log(2, "Tor socks listener (Unix domain socket): " + path); + foundSocksListener = socksIPCPath === path; + } else if (!socksIPCPath) { + // Check against the configured TCP proxy. We expect addr:port where addr + // may be an IPv6 address; that is, it may contain colon characters. + // Also, we remove enclosing square brackets before comparing addresses + // because tor requires them but Firefox does not. + let idx = addr.lastIndexOf(":"); + if (idx < 0) { + logUnexpectedResponse(); + } else { + let torSocksAddr = removeBrackets(addr.substring(0, idx)); + let torSocksPort = parseInt(addr.substring(idx + 1), 10); + if (torSocksAddr.length < 1 || isNaN(torSocksPort)) { + logUnexpectedResponse(); + } else { + torbutton_log( + 2, + "Tor socks listener: " + torSocksAddr + ":" + torSocksPort + ); + foundSocksListener = + socksAddr === torSocksAddr && socksPort === torSocksPort; + } + } + } + } + + return foundSocksListener; + } // torbutton_local_tor_check + + function torbutton_initiate_remote_tor_check() { + let obsSvc = Services.obs; + try { + let checkSvc = Cc[ + "@torproject.org/torbutton-torCheckService;1" + ].getService(Ci.nsISupports).wrappedJSObject; + let req = checkSvc.createCheckRequest(true); // async + req.onreadystatechange = function(aEvent) { + if (req.readyState === 4) { + let ret = checkSvc.parseCheckResponse(req); + + // If we received an error response from check.torproject.org, + // set the status of the tor check to failure (we don't want + // to indicate failure if we didn't receive a response). + if ( + ret == 2 || + ret == 3 || + ret == 5 || + ret == 6 || + ret == 7 || + ret == 8 + ) { + checkSvc.statusOfTorCheck = checkSvc.kCheckFailed; + obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic); + } else if (ret == 4) { + checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful; + } // Otherwise, redo the check later + + torbutton_log(3, "Tor remote check done. Result: " + ret); + } + }; + + torbutton_log(3, "Sending async Tor remote check"); + req.send(null); + } catch (e) { + if (e.result == 0x80004005) { + // NS_ERROR_FAILURE + torbutton_log(5, "Tor check failed! Is tor running?"); + } else { + torbutton_log(5, "Tor check failed! Tor internal error: " + e); + } + + obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic); + } + } // torbutton_initiate_remote_tor_check() + + async function torbutton_tor_check_ok() { + await torbutton_do_tor_check(); + let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + return checkSvc.kCheckFailed != checkSvc.statusOfTorCheck; + } + + function torbutton_update_disk_prefs() { + var mode = m_tb_prefs.getBoolPref("browser.privatebrowsing.autostart"); + + m_tb_prefs.setBoolPref("browser.cache.disk.enable", !mode); + m_tb_prefs.setBoolPref("places.history.enabled", !mode); + + m_tb_prefs.setBoolPref("security.nocertdb", mode); + + // No way to clear this beast during New Identity. Leave it off. + //m_tb_prefs.setBoolPref("dom.indexedDB.enabled", !mode); + + m_tb_prefs.setBoolPref("permissions.memory_only", mode); + + // Third party abuse. Leave it off for now. + //m_tb_prefs.setBoolPref("browser.cache.offline.enable", !mode); + + // Force prefs to be synced to disk + Services.prefs.savePrefFile(null); + } + + function torbutton_update_fingerprinting_prefs() { + var mode = m_tb_prefs.getBoolPref("privacy.resistFingerprinting"); + var letterboxing = m_tb_prefs.getBoolPref( + "privacy.resistFingerprinting.letterboxing", + false + ); + m_tb_prefs.setBoolPref( + "extensions.torbutton.resize_new_windows", + mode && !letterboxing + ); + + // Force prefs to be synced to disk + Services.prefs.savePrefFile(null); + } + + // Bug 1506 P1: This function just cleans up prefs that got set badly in previous releases + function torbutton_fixup_old_prefs() { + if (m_tb_prefs.getIntPref("extensions.torbutton.pref_fixup_version") < 1) { + // TBB 5.0a3 had bad Firefox code that silently flipped this pref on us + if (m_tb_prefs.prefHasUserValue("browser.newtabpage.enhanced")) { + m_tb_prefs.clearUserPref("browser.newtabpage.enhanced"); + // TBB 5.0a3 users had all the necessary data cached in + // directoryLinks.json. This meant that resetting the pref above + // alone was not sufficient as the tiles features uses the cache + // even if the pref indicates that feature should be disabled. + // We flip the preference below as this forces a refetching which + // effectively results in an empty JSON file due to our spoofed + // URLs. + let matchOS = m_tb_prefs.getBoolPref("intl.locale.matchOS"); + m_tb_prefs.setBoolPref("intl.locale.matchOS", !matchOS); + m_tb_prefs.setBoolPref("intl.locale.matchOS", matchOS); + } + + // For some reason, the Share This Page button also survived the + // TBB 5.0a4 update's attempt to remove it. + if (m_tb_prefs.prefHasUserValue("browser.uiCustomization.state")) { + m_tb_prefs.clearUserPref("browser.uiCustomization.state"); + } + + m_tb_prefs.setIntPref("extensions.torbutton.pref_fixup_version", 1); + } + } + + // ---------------------- Event handlers ----------------- + + // Bug 1506 P1-P3: Most of these observers aren't very important. + // See their comments for details + function torbutton_do_main_window_startup() { + torbutton_log(3, "Torbutton main window startup"); + m_tb_is_main_window = true; + torbutton_unique_pref_observer.register(); + } + + // Bug 1506 P4: Most of this function is now useless, save + // for the very important SOCKS environment vars at the end. + // Those could probably be rolled into a function with the + // control port vars, though. See 1506 comments inside. + function torbutton_do_startup() { + if (m_tb_prefs.getBoolPref("extensions.torbutton.startup")) { + // Bug 1506: Should probably be moved to an XPCOM component + torbutton_do_main_window_startup(); + + // For charsets + torbutton_update_fingerprinting_prefs(); + + // Bug 30565: sync browser.privatebrowsing.autostart with security.nocertdb + torbutton_update_disk_prefs(); + + // For general pref fixups to handle pref damage in older versions + torbutton_fixup_old_prefs(); + + m_tb_prefs.setBoolPref("extensions.torbutton.startup", false); + } + } + + // Bug 1506 P3: Used to decide if we should resize the window. + // + // Returns true if the window wind is neither maximized, full screen, + // ratpoisioned/evilwmed, nor minimized. + function torbutton_is_windowed(wind) { + torbutton_log( + 3, + "Window: (" + + wind.outerWidth + + "," + + wind.outerHeight + + ") ?= (" + + wind.screen.availWidth + + "," + + wind.screen.availHeight + + ")" + ); + if ( + wind.windowState == Ci.nsIDOMChromeWindow.STATE_MINIMIZED || + wind.windowState == Ci.nsIDOMChromeWindow.STATE_MAXIMIZED + ) { + torbutton_log(2, "Window is minimized/maximized"); + return false; + } + if ("fullScreen" in wind && wind.fullScreen) { + torbutton_log(2, "Window is fullScreen"); + return false; + } + if ( + wind.outerHeight == wind.screen.availHeight && + wind.outerWidth == wind.screen.availWidth + ) { + torbutton_log(3, "Window is ratpoisoned/evilwm'ed"); + return false; + } + + torbutton_log(2, "Window is normal"); + return true; + } + + function showSecurityPreferencesPanel(chromeWindow) { + const tabBrowser = chromeWindow.BrowserApp; + let settingsTab = null; + + const SECURITY_PREFERENCES_URI = + "chrome://torbutton/content/preferences.xhtml"; + + tabBrowser.tabs.some(function(tab) { + // If the security prefs tab is opened, send the user to it + if (tab.browser.currentURI.spec === SECURITY_PREFERENCES_URI) { + settingsTab = tab; + return true; + } + return false; + }); + + if (settingsTab === null) { + // Open up the settings panel in a new tab. + tabBrowser.addTab(SECURITY_PREFERENCES_URI, { + selected: true, + parentId: tabBrowser.selectedTab.id, + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); + } else { + // Activate an existing settings panel tab. + tabBrowser.selectTab(settingsTab); + } + } + + function setupPreferencesForMobile() { + if (!torbutton_is_mobile()) { + return; + } + + torbutton_log(4, "Setting up settings preferences for Android."); + + const chromeWindow = Services.wm.getMostRecentWindow("navigator:browser"); + + // Add the extension's chrome menu item to the main browser menu. + chromeWindow.NativeWindow.menu.add({ + name: torbutton_get_property_string( + "torbutton.security_settings.menu.title" + ), + callback: showSecurityPreferencesPanel.bind(this, chromeWindow), + }); + } + + // Bug 1506 P3: This is needed pretty much only for the window resizing. + // See comments for individual functions for details + function torbutton_new_window(event) { + torbutton_log(3, "New window"); + var browser = window.gBrowser; + + if (!browser) { + torbutton_log(5, "No browser for new window."); + return; + } + + if (!m_tb_wasinited) { + torbutton_init(); + } + + torbutton_do_startup(); + + let progress = Cc["@mozilla.org/docloaderservice;1"].getService( + Ci.nsIWebProgress + ); + + if (torbutton_is_windowed(window)) { + progress.addProgressListener( + torbutton_resizelistener, + Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT + ); + } + } + + // Bug 1506 P2: This is only needed because we have observers + // in XUL that should be in an XPCOM component + function torbutton_close_window(event) { + torbutton_tor_check_observer.unregister(); + + window.removeEventListener("sizemodechange", m_tb_resize_handler); + + // TODO: This is a real ghetto hack.. When the original window + // closes, we need to find another window to handle observing + // unique events... The right way to do this is to move the + // majority of torbutton functionality into a XPCOM component.. + // But that is a major overhaul.. + if (m_tb_is_main_window) { + torbutton_log(3, "Original window closed. Searching for another"); + var wm = Services.wm; + var enumerator = wm.getEnumerator("navigator:browser"); + while (enumerator.hasMoreElements()) { + var win = enumerator.getNext(); + // For some reason, when New Identity is called from a pref + // observer (ex: torbutton_use_nontor_proxy) on an ASAN build, + // we sometimes don't have this symbol set in the new window yet. + // However, the new window will run this init later in that case, + // as it does in the OSX case. + if (win != window && "torbutton_do_main_window_startup" in win) { + torbutton_log(3, "Found another window"); + win.torbutton_do_main_window_startup(); + m_tb_is_main_window = false; + break; + } + } + + torbutton_unique_pref_observer.unregister(); + + if (m_tb_is_main_window) { + // main window not reset above + // This happens on Mac OS because they allow firefox + // to still persist without a navigator window + torbutton_log(3, "Last window closed. None remain."); + m_tb_prefs.setBoolPref("extensions.torbutton.startup", true); + m_tb_is_main_window = false; + } + } + } + + window.addEventListener("load", torbutton_new_window); + window.addEventListener("unload", torbutton_close_window); + + var m_tb_resize_handler = null; + var m_tb_resize_date = null; + + // Bug 1506 P1/P3: Setting a fixed window size is important, but + // probably not for android. + var torbutton_resizelistener = { + QueryInterface: ChromeUtils.generateQI([ + "nsIWebProgressListener", + "nsISupportsWeakReference", + ]), + + onLocationChange(aProgress, aRequest, aURI) {}, + onStateChange(aProgress, aRequest, aFlag, aStatus) { + if (aFlag & Ci.nsIWebProgressListener.STATE_STOP) { + m_tb_resize_handler = async function() { + // Wait for end of execution queue to ensure we have correct windowState. + await new Promise(resolve => setTimeout(resolve, 0)); + if ( + window.windowState === window.STATE_MAXIMIZED || + window.windowState === window.STATE_FULLSCREEN + ) { + if ( + m_tb_prefs.getBoolPref( + "extensions.torbutton.resize_new_windows" + ) && + m_tb_prefs.getIntPref( + "extensions.torbutton.maximize_warnings_remaining" + ) > 0 + ) { + // Do not add another notification if one is already showing. + const kNotificationName = "torbutton-maximize-notification"; + let box = gBrowser.getNotificationBox(); + if (box.getNotificationWithValue(kNotificationName)) { + return; + } + + // Rate-limit showing our notification if needed. + if (m_tb_resize_date === null) { + m_tb_resize_date = Date.now(); + } else { + // We wait at least another second before we show a new + // notification. Should be enough to rule out OSes that call our + // handler rapidly due to internal workings. + if (Date.now() - m_tb_resize_date < 1000) { + return; + } + // Resizing but we need to reset |m_tb_resize_date| now. + m_tb_resize_date = Date.now(); + } + + // No need to get "OK" translated again. + let sbSvc = Services.strings; + let bundle = sbSvc.createBundle( + "chrome://global/locale/commonDialogs.properties" + ); + let button_label = bundle.GetStringFromName("OK"); + + let buttons = [ + { + label: button_label, + accessKey: "O", + popup: null, + callback() { + m_tb_prefs.setIntPref( + "extensions.torbutton.maximize_warnings_remaining", + m_tb_prefs.getIntPref( + "extensions.torbutton.maximize_warnings_remaining" + ) - 1 + ); + }, + }, + ]; + + let priority = box.PRIORITY_WARNING_LOW; + let message = torbutton_get_property_string( + "torbutton.maximize_warning" + ); + + box.appendNotification( + message, + kNotificationName, + null, + priority, + buttons + ); + } + } + }; // m_tb_resize_handler + + // We need to handle OSes that auto-maximize windows depending on user + // settings and/or screen resolution in the start-up phase and users that + // try to shoot themselves in the foot by maximizing the window manually. + // We add a listener which is triggerred as soon as the window gets + // maximized (windowState = 1). We are resizing during start-up but not + // later as the user should see only a warning there as a stopgap before + // #14229 lands. + // Alas, the Firefox window code is handling the event not itself: + // "// Note the current implementation of SetSizeMode just stores + // // the new state; it doesn't actually resize. So here we store + // // the state and pass the event on to the OS." + // (See: https://mxr.mozilla.org/mozilla-esr31/source/xpfe/appshell/src/ + // nsWebShellWindow.cpp#348) + // This means we have to cope with race conditions and resizing in the + // sizemodechange listener is likely to fail. Thus, we add a specific + // resize listener that is doing the work for us. It seems (at least on + // Ubuntu) to be the case that maximizing (and then again normalizing) of + // the window triggers more than one resize event the first being not the + // one we need. Thus we can't remove the listener after the first resize + // event got fired. Thus, we have the rather klunky setTimeout() call. + window.addEventListener("sizemodechange", m_tb_resize_handler); + + let progress = Cc["@mozilla.org/docloaderservice;1"].getService( + Ci.nsIWebProgress + ); + progress.removeProgressListener(this); + } + }, // onStateChange + + onProgressChange( + aProgress, + aRequest, + curSelfProgress, + maxSelfProgress, + curTotalProgress, + maxTotalProgress + ) {}, + onStatusChange(aProgress, aRequest, stat, message) {}, + onSecurityChange() {}, + }; +})(); +//vim:set ts=4 diff --git a/toolkit/torbutton/chrome/skin/about-wordmark.png b/toolkit/torbutton/chrome/skin/about-wordmark.png new file mode 100644 index 000000000000..1becd875f9ac Binary files /dev/null and b/toolkit/torbutton/chrome/skin/about-wordmark.png differ diff --git a/toolkit/torbutton/chrome/skin/aboutDialog.css b/toolkit/torbutton/chrome/skin/aboutDialog.css new file mode 100644 index 000000000000..981d68e22698 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/aboutDialog.css @@ -0,0 +1,34 @@ +#leftBox { + background-image: url('chrome://branding/content/icon256.png'); + background-position: right top; + background-size: 180px; +} + +#rightBox { + background-image: url('chrome://torbutton/skin/about-wordmark.png'); + background-position: left top; +} + +#contributeDesc { + display: none; +} + +#communityDesc { + display: none; +} + +#trademark { + display: none; +} + +#trademarkTor { + font-size: xx-small; + text-align: center; + color: #999999; + margin-top: 10px; + margin-bottom: 10px; +} + +#bottomBox > hbox:not(#newBottom) { + display: none; +} diff --git a/toolkit/torbutton/chrome/skin/aboutTor.css b/toolkit/torbutton/chrome/skin/aboutTor.css new file mode 100644 index 000000000000..007c46d390b4 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/aboutTor.css @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2019, The Tor Project, Inc. + * See LICENSE for licensing information. + * + * vim: set sw=2 sts=2 ts=8 et syntax=css: + */ + +:root { + --abouttor-text-color: white; + --abouttor-bg-toron-color: #420C5D; + --abouttor-bg-toroff-color: #A4000F; + --onion-opacity: 0.2; + --onion-color: #fff; + --onion-radius: 75px; +} + +* { + padding: 0px; + margin: 0px; +} + +html { + height: 100%; +} + +body { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + height: 100%; + margin: 0px auto; + padding: 0px 0px; + font-family: Helvetica, Arial, sans-serif; + color: var(--abouttor-text-color); + background-color: var(--abouttor-bg-toroff-color); + background-attachment: fixed; + background-size: 100% 100%; +} + +body[toron] { + background-color: var(--abouttor-bg-toron-color); +} + +/* Hide the entire document by default to avoid showing the incorrect + * Tor on / off status (that info must be retrieved from the chrome + * process, which involves IPC when multiprocess mode is enabled). An + * initialized attribute will be added as soon as the status is known. + */ +body:not([initialized]) { + display: none; +} + +.torcontent-container { + margin: 40px 20px 28px 20px; + display: flex; + flex-direction: column; +} + +@media only screen and (min-width: 900px) { + .torcontent-container { + margin: 40px auto 28px auto; + max-width: 1000px; + } +} + +#torbrowser-info { + position: absolute; + top: 16px; + offset-inline-end: 16px; + inset-inline-end: 16px; + height: 36px; + width: 200px; +} + +#torbrowser-info div { + font-size: 14px; + white-space: pre-wrap; + text-align: end; + margin-bottom: 6px; +} + +/* Hide "View Changelog" link if update channel is not release or alpha. */ +body:not([updatechannel="release"]):not([updatechannel="alpha"]) #torbrowser-changelog-link { + display: none; +} + +a { + color: var(--abouttor-text-color); +} + +#torstatus { + margin-top: 135px; + display: flex; + flex-direction: column; + align-content: center; + justify-content: flex-end; + min-height: 92px; +} + +.top { + white-space: nowrap; +} + +.torstatus-container { + text-align: center; +} + +body[hasbeenupdated] .hideIfHasBeenUpdated, +body[toron] .hideIfTorOn, +body:not([toron]) .hideIfTorOff { + display: none; +} + +body:not([hasbeenupdated]) .showIfHasBeenUpdated { + display: none; +} + +.torstatus-container * { + text-align: center; +} + +.top div.hideIfTorOff .heading1 { + margin-top: 20px; +} + +.top .heading1 { + font-size: 50px; + font-weight: 300; + margin-bottom: 5px; +} + +.top .heading2 { + font-size: 15px; + margin-bottom: 20px; +} + +#bottom { + margin-top: 10vh; + margin-inline: auto; + max-width: 730px; +} + +#bottom p { + font-size: 10px; + text-align: start; + padding-bottom: 20px; +} + +#bottom p:last-child { + padding-bottom: 0px; +} + +#bottom p.moreInfoLink { + font-size: 15px; +} + +#bottom img.imageStyle { + padding-inline-end: 0.5em; + height: 1.5em; + vertical-align: bottom; + -moz-context-properties: fill; + fill: white; +} + +/* Hide the linebreaks on large enough screens (desktops, laptops, and + * tablets). + */ +@media only screen and (min-width: 768px) { + #bottom br { + display: none; + } +} + +.searchbox form { + max-width: 575px; + width: auto; + margin-block: 0; + margin-inline: auto; + text-align: left; +} + +.searchwrapper { + display: flex; + height: 46px; + border: 1px solid black; + border-radius: 8px; + background-color: white; +} + +.searchlabel { + height: auto; + width: 50px; + display: inline-block; + background: url('dax-logo.svg') no-repeat center center; + background-size: 30px 30px; +} + +#search-button { + height: auto; + width: 36px; + border: 0; + background: url('chrome://browser/skin/forward.svg') no-repeat center center; + background-size: 16px 16px; + cursor: pointer; +} + +#search-button:dir(rtl) { + transform: scaleX(-1); +} + +#search-button:hover { + background-color: rgba(12, 12, 13, 0.1); /* same as Firefox's about:home */ +} + +#bannerRoot { + width: 690px; + padding: 20px 25px 25px; + background: rgba(0, 0, 0, 0.3); + border-radius: 6px; + margin: 35px auto 0px; + display: flex; + flex-direction: row; + align-items: flex-start; + position: static; +} + +#bannerTextCol { + padding-top: 8px; + padding-inline-start: 15px; + font-size: 15px; + line-height: normal; + color: #FFFFFF; + width: 633px; +} + +#bannerHeader { + font-weight: bold; +} + +#bannerImg { + width: 32px; + position: static; +} + +a#bannerLink { + text-decoration: underline; +} + +a#bannerLink:hover { + text-decoration: none; +} + +/* #search-text is the search input field */ +#search-text { + flex: 1; + border: none; + padding: 4px 2px 5px 2px; + margin: 0; + font-size: 15px; +} + +#search-text:focus-visible { + outline: none; +} + +#search-button:focus-visible { + outline: 1px dotted black; + outline-offset: -6px; +} + + +/* + * Mobile specific css + */ + +.torcontent-logo { + display: none; +} + +body[mobile] #torbrowser-changelog-link, +body[mobile] .searchbox, +body[mobile] .top .heading2, +body[mobile] #manual, +body[mobile] #mission { + display: none; +} + +body[mobile] .top { + white-space: normal; + margin-top: 0px !important; +} + +body[mobile] .torcontent-logo { + display: block; + margin-top: 20px; + width: 50%; + height: auto; + margin-left: auto; + margin-right: auto; +} + +body[mobile] .top .heading1 { + font-size: 62px; + line-height: 1.1 +} + +body[mobile] .onion-pattern-container { + flex: none; + z-index: -1; /* ensure that circles do not block access to clickable links */ + position: absolute; + bottom: 0px; +} diff --git a/toolkit/torbutton/chrome/skin/banner-warning.svg b/toolkit/torbutton/chrome/skin/banner-warning.svg new file mode 100644 index 000000000000..2f4bf1b887d8 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/banner-warning.svg @@ -0,0 +1 @@ +<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><circle cx="16" cy="16" fill="#ffa436" r="16"/><g fill="#0c0c0d"><path d="m14.2303 23.393c-3.5375-.6033-6.2303-3.6837-6.2303-7.393 0-4.1421 3.3579-7.5 7.5-7.5s7.5 3.3579 7.5 7.5c0 .669-.0876 1.3176-.252 1.9349l-.9277-1.6176c.0052-.1051.0078-.2109.0078-.3173 0-3.4949-2.8332-6.32812-6.3281-6.32812s-6.32812 2.83322-6.32812 6.32812c0 2.9851 2.06682 5.4874 4.84752 6.154-.06.4351.0216.8644.2109 1.239 [...] \ No newline at end of file diff --git a/toolkit/torbutton/chrome/skin/dax-logo.svg b/toolkit/torbutton/chrome/skin/dax-logo.svg new file mode 100644 index 000000000000..94ad7c356329 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/dax-logo.svg @@ -0,0 +1 @@ +<svg width="120" height="120" viewbox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><circle id="a" cx="50.833" cy="50.833" r="50.25"/><linearGradient x1="3.084%" y1="49.368%" x2="100.592%" y2="49.368%" id="c"><stop stop-color="#6176B9" offset=".56%"/><stop stop-color="#394A9F" offset="69.1%"/></linearGradient><linearGradient x1="-.006%" y1="49.006%" x2="98.932%" y2="49.006%" id="d"><stop stop-color="#6176B9" offset=".56%"/><stop stop-co [...] \ No newline at end of file diff --git a/toolkit/torbutton/chrome/skin/icon-newsletter.png b/toolkit/torbutton/chrome/skin/icon-newsletter.png new file mode 100644 index 000000000000..7532ba9c273f Binary files /dev/null and b/toolkit/torbutton/chrome/skin/icon-newsletter.png differ diff --git a/toolkit/torbutton/chrome/skin/preferences-mobile.css b/toolkit/torbutton/chrome/skin/preferences-mobile.css new file mode 100644 index 000000000000..b6d54e8dff63 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/preferences-mobile.css @@ -0,0 +1,47 @@ +.wrapper { + display: flex; +} + +.outer-wrapper { + display: flex; + flex-direction: column; + align-items: center; +} + +.inner-wrapper { + height: 350px; + width: 100%; + max-width: 600px; + flex-direction: column; + align-items: center; +} + +#torbutton_sec_slider { + align-self: stretch; + width: auto; + height: auto; +} + +datalist { + display: flex; + flex-direction: row; + justify-content: space-between; + align-self: stretch; +} + +p { + text-align: justify; +} + +div > p { + margin-top: 0px; +} + +.title { + font-weight: bold; + line-height: 30px; +} + +.wrapper .inner-wrapper * { + margin-top: 10px; +} diff --git a/toolkit/torbutton/chrome/skin/preferences.css b/toolkit/torbutton/chrome/skin/preferences.css new file mode 100644 index 000000000000..013b36771aea --- /dev/null +++ b/toolkit/torbutton/chrome/skin/preferences.css @@ -0,0 +1,7 @@ +.slider-text-weight { + font-weight: bold; +} + +.slider-text-size { + font-size: 95%; +} diff --git a/toolkit/torbutton/chrome/skin/tor-circuit-display.css b/toolkit/torbutton/chrome/skin/tor-circuit-display.css new file mode 100644 index 000000000000..4f03b8824464 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/tor-circuit-display.css @@ -0,0 +1,193 @@ +/* +This CSS file is for styling the tor circuit display, which consists of a title, +a domain, and a bulleted list. + +Each bullet in the circuit node list is supposed to represent a Tor circuit node, +and lines drawn between them to represent Tor network inter-relay connections. +*/ + +#circuit-display-container { + margin-inline: 8px; + margin-top: 0px; + margin-bottom: 4px; + padding: 0px 3px; +} + +#circuit-display-container > toolbarseparator { + margin-block: 0px; + margin-inline: -3px; + width: calc(100% + 6px); +} + +#circuit-display-headline { + margin-inline-start: 8px; +} + +#circuit-display-header { + background-image: url(chrome://torbutton/skin/torbutton.svg); + background-repeat: no-repeat; + background-position: 4px 50%; + background-size: 16px auto; + min-height: 16px; + -moz-context-properties: fill, fill-opacity; + fill: currentColor; + margin-block: 8px; +} + +#circuit-display-header:-moz-locale-dir(rtl) { + background-position-x: right; +} + +#circuit-display-header > hbox { + margin-inline-start: 16px; +} + +#circuit-display-content { + width: 100%; +} + +#circuit-display-content > * { + margin-inline: 0px; + margin-inline-start: 16px; + margin-top: 0px; + margin-bottom: 8px; +} + +#circuit-display-content > hbox:not([hidden]) { + display: flex; +} + +#circuit-reload-button-container { + padding-top: 8px; + justify-content: flex-end; +} + +#circuit-reload-content { + cursor: default; + width: 100%; +} + +/* Format the domain text. */ +#circuit-display-domain { + opacity: 0.8; +} + +#circuit-div { + position: relative; + margin-inline-start: 6px; +} + +/* Format the circuit node list. */ +ul#circuit-display-nodes { + line-height:32px; + padding-inline-start: 8px; +} + +/* Hide default bullets, and draw our own bullets */ +ul#circuit-display-nodes li { + background-image: url(chrome://torbutton/skin/tor-circuit-line.svg); + background-position: left center; + background-repeat: no-repeat; + list-style: none; + /* tor circuit svg are 16px wide */ + padding-inline-start: calc(16px + 0.5em); + white-space: nowrap; + max-height: 32px; + -moz-context-properties: stroke, stroke-opacity; + stroke: currentColor; + stroke-opacity: 100%; +} + +ul#circuit-display-nodes li:dir(rtl) { + background-position: right center; +} + +ul#circuit-display-nodes li:first-child { + background-image: url(chrome://torbutton/skin/tor-circuit-line-first.svg); +} + +ul#circuit-display-nodes li:last-child { + background-image: url(chrome://torbutton/skin/tor-circuit-line-last.svg); +} + +.circuit-ip-address { + font-size: 80%; + opacity: 0.7; + padding-inline-start: 3px; +} + +.circuit-guard-info { + font-size: 80%; + color: var(--button-primary-bgcolor); + font-weight: bold; + padding-inline-start: 3px; +} + +#circuit-reload-button { + background-color: var(--button-primary-bgcolor); + border-radius: 4px; + border-width: 0px; + color: var(--button-primary-color); + font-weight: 600; + padding: 8px 16px; + margin: 0; +} +#circuit-reload-button:hover { + background-color: var(--button-primary-hover-bgcolor); +} + +#circuit-reload-button:active { + background-color: var(--button-primary-active-bgcolor); +} + +#circuit-guard-note-container div { + margin-inline-start: 8px; +} + +.circuit-guard-name { + font-weight: bold; +} + +.circuit-link { + cursor: pointer; + color: var(--urlbar-popup-url-color); +} + +.circuit-link:hover { + text-decoration: underline; +} + +.circuit-onion { + cursor: pointer; +} + +.circuit-onion:hover::after { + opacity: 1; +} + +.circuit-onion::after { + background-color: var(--button-bgcolor);; + border-radius: 4px; + color: var(--button-color); + content: attr(data-text-clicktocopy); + font-size: 80%; + opacity: 0; + padding: 5px 10px; + margin: 10px; + text-align: center; + transition: opacity 0.3s cubic-bezier(0.07, 0.95, 0, 1); +} + +.circuit-onion:hover::after { + background-color: var(--button-hover-bgcolor); +} + +.circuit-onion:active::after { + background-color: var(--button-active-bgcolor); +} + + +.circuit-onion-copied::after { + content: attr(data-text-copied); + opacity: 1; +} diff --git a/toolkit/torbutton/chrome/skin/tor-circuit-line-first.svg b/toolkit/torbutton/chrome/skin/tor-circuit-line-first.svg new file mode 100644 index 000000000000..1981ee875aeb --- /dev/null +++ b/toolkit/torbutton/chrome/skin/tor-circuit-line-first.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="32"> + <g stroke="context-stroke" opacity="context-stroke-opacity" stroke-width="2" fill="transparent"> + <circle cx="50%" cy="50%" r="6"/> + <line x1="50%" y1="22" x2="50%" y2="100%"/> + </g> +</svg> diff --git a/toolkit/torbutton/chrome/skin/tor-circuit-line-last.svg b/toolkit/torbutton/chrome/skin/tor-circuit-line-last.svg new file mode 100644 index 000000000000..19c4adaae2d2 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/tor-circuit-line-last.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="32"> + <g stroke="context-stroke" opacity="context-stroke-opacity" stroke-width="2" fill="transparent"> + <line x1="50%" y1="0%" x2="50%" y2="10"/> + <circle cx="50%" cy="50%" r="6"/> + </g> +</svg> diff --git a/toolkit/torbutton/chrome/skin/tor-circuit-line.svg b/toolkit/torbutton/chrome/skin/tor-circuit-line.svg new file mode 100644 index 000000000000..00717f6c2054 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/tor-circuit-line.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="32"> + <g stroke="context-stroke" opacity="context-stroke-opacity" stroke-width="2" fill="transparent"> + <line x1="50%" y1="0%" x2="50%" y2="10"/> + <circle cx="50%" cy="50%" r="6"/> + <line x1="50%" y1="22" x2="50%" y2="100%"/> + </g> +</svg> diff --git a/toolkit/torbutton/chrome/skin/tor.png b/toolkit/torbutton/chrome/skin/tor.png new file mode 100644 index 000000000000..75b86bfb940a Binary files /dev/null and b/toolkit/torbutton/chrome/skin/tor.png differ diff --git a/toolkit/torbutton/chrome/skin/torbrowser_mobile_logo.png b/toolkit/torbutton/chrome/skin/torbrowser_mobile_logo.png new file mode 100644 index 000000000000..9d8317f02b2c Binary files /dev/null and b/toolkit/torbutton/chrome/skin/torbrowser_mobile_logo.png differ diff --git a/toolkit/torbutton/chrome/skin/torbutton.css b/toolkit/torbutton/chrome/skin/torbutton.css new file mode 100644 index 000000000000..fff1714bcee5 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/torbutton.css @@ -0,0 +1,14 @@ +svg.circuit text { + font-family: Arial; +} + +svg#tor-circuit text.node-text { + dominant-baseline: central; + font-size: 14px; +} + +svg#tor-circuit circle.node-circle { + stroke: #195021; + stroke-width: 2px; + fill: white; +} \ No newline at end of file diff --git a/toolkit/torbutton/chrome/skin/torbutton.svg b/toolkit/torbutton/chrome/skin/torbutton.svg new file mode 100644 index 000000000000..30cd52ba5c51 --- /dev/null +++ b/toolkit/torbutton/chrome/skin/torbutton.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="M12.0246161,21.8174863 L12.0246161,20.3628098 C16.6324777,20.3495038 20.3634751,16.6108555 20.3634751,11.9996673 C20.3634751,7.38881189 16.6324777,3.65016355 12.0246161,3.63685757 L12.0246161,2.18218107 C17.4358264,2.1958197 21.8178189,6.58546322 21.8178189,11.9996673 C21.8178189,17.4142042 17.4358264,21.8041803 12.0246161,21.8174863 L12.0246161,21.8174863 Z M12.0246161,16.7259522 C14.623607,16.7123136 16.7272828,14.60231 [...] +</svg> \ No newline at end of file diff --git a/toolkit/torbutton/components/domain-isolator.js b/toolkit/torbutton/components/domain-isolator.js new file mode 100644 index 000000000000..1c77b5776f0f --- /dev/null +++ b/toolkit/torbutton/components/domain-isolator.js @@ -0,0 +1,228 @@ +// # domain-isolator.js +// A component for TorBrowser that puts requests from different +// first party domains on separate tor circuits. + +// This file is written in call stack order (later functions +// call earlier functions). The code file can be processed +// with docco.js to provide clear documentation. + +// ### Abbreviations + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +// Make the logger available. +let logger = Cc["@torproject.org/torbutton-logger;1"].getService(Ci.nsISupports) + .wrappedJSObject; + +// Import crypto object (FF 37+). +Cu.importGlobalProperties(["crypto"]); + +// ## mozilla namespace. +// Useful functionality for interacting with Mozilla services. +let mozilla = {}; + +// __mozilla.protocolProxyService__. +// Mozilla's protocol proxy service, useful for managing proxy connections made +// by the browser. +mozilla.protocolProxyService = Cc[ + "@mozilla.org/network/protocol-proxy-service;1" +].getService(Ci.nsIProtocolProxyService); + +// __mozilla.registerProxyChannelFilter(filterFunction, positionIndex)__. +// Registers a proxy channel filter with the Mozilla Protocol Proxy Service, +// which will help to decide the proxy to be used for a given channel. +// The filterFunction should expect two arguments, (aChannel, aProxy), +// where aProxy is the proxy or list of proxies that would be used by default +// for the given channel, and should return a new Proxy or list of Proxies. +mozilla.registerProxyChannelFilter = function(filterFunction, positionIndex) { + let proxyFilter = { + applyFilter(aChannel, aProxy, aCallback) { + aCallback.onProxyFilterResult(filterFunction(aChannel, aProxy)); + }, + }; + mozilla.protocolProxyService.registerChannelFilter( + proxyFilter, + positionIndex + ); +}; + +// ## tor functionality. +let tor = {}; + +// __tor.noncesForDomains__. +// A mutable map that records what nonce we are using for each domain. +tor.noncesForDomains = {}; + +// __tor.isolationEabled__. +// A bool that controls if we use SOCKS auth for isolation or not. +tor.isolationEnabled = true; + +// __tor.unknownDirtySince__. +// Specifies when the current catch-all circuit was first used +tor.unknownDirtySince = Date.now(); + +// __tor.socksProxyCredentials(originalProxy, domain)__. +// Takes a proxyInfo object (originalProxy) and returns a new proxyInfo +// object with the same properties, except the username is set to the +// the domain, and the password is a nonce. +tor.socksProxyCredentials = function(originalProxy, domain) { + // Check if we already have a nonce. If not, create + // one for this domain. + if (!tor.noncesForDomains.hasOwnProperty(domain)) { + tor.noncesForDomains[domain] = tor.nonce(); + } + let proxy = originalProxy.QueryInterface(Ci.nsIProxyInfo); + return mozilla.protocolProxyService.newProxyInfoWithAuth( + "socks", + proxy.host, + proxy.port, + domain, // username + tor.noncesForDomains[domain], // password + "", // aProxyAuthorizationHeader + "", // aConnectionIsolationKey + proxy.flags, + proxy.failoverTimeout, + proxy.failoverProxy + ); +}; + +tor.nonce = function() { + // Generate a new 128 bit random tag. Strictly speaking both using a + // cryptographic entropy source and using 128 bits of entropy for the + // tag are likely overkill, as correct behavior only depends on how + // unlikely it is for there to be a collision. + let tag = new Uint8Array(16); + crypto.getRandomValues(tag); + + // Convert the tag to a hex string. + let tagStr = ""; + for (let i = 0; i < tag.length; i++) { + tagStr += (tag[i] >>> 4).toString(16); + tagStr += (tag[i] & 0x0f).toString(16); + } + + return tagStr; +}; + +tor.newCircuitForDomain = function(domain) { + // Re-generate the nonce for the domain. + if (domain === "") { + domain = "--unknown--"; + } + tor.noncesForDomains[domain] = tor.nonce(); + logger.eclog( + 3, + "New domain isolation for " + domain + ": " + tor.noncesForDomains[domain] + ); +}; + +// __tor.clearIsolation()_. +// Clear the isolation state cache, forcing new circuits to be used for all +// subsequent requests. +tor.clearIsolation = function() { + // Per-domain nonces are stored in a map, so simply re-initialize the map. + tor.noncesForDomains = {}; + + // Force a rotation on the next catch-all circuit use by setting the creation + // time to the epoch. + tor.unknownDirtySince = 0; +}; + +// __tor.isolateCircuitsByDomain()__. +// For every HTTPChannel, replaces the default SOCKS proxy with one that authenticates +// to the SOCKS server (the tor client process) with a username (the first party domain) +// and a nonce password. Tor provides a separate circuit for each username+password +// combination. +tor.isolateCircuitsByDomain = function() { + mozilla.registerProxyChannelFilter(function(aChannel, aProxy) { + if (!tor.isolationEnabled) { + return aProxy; + } + try { + let channel = aChannel.QueryInterface(Ci.nsIChannel), + firstPartyDomain = channel.loadInfo.originAttributes.firstPartyDomain; + if (firstPartyDomain === "") { + firstPartyDomain = "--unknown--"; + if (Date.now() - tor.unknownDirtySince > 1000 * 10 * 60) { + logger.eclog( + 3, + "tor catchall circuit has been dirty for over 10 minutes. Rotating." + ); + tor.newCircuitForDomain("--unknown--"); + tor.unknownDirtySince = Date.now(); + } + } + let replacementProxy = tor.socksProxyCredentials( + aProxy, + firstPartyDomain + ); + logger.eclog( + 3, + `tor SOCKS: ${channel.URI.spec} via + ${replacementProxy.username}:${replacementProxy.password}` + ); + return replacementProxy; + } catch (e) { + logger.eclog(4, `tor domain isolator error: ${e.message}`); + return null; + } + }, 0); +}; + +// ## XPCOM component construction. +// Module specific constants +const kMODULE_NAME = "TorBrowser Domain Isolator"; +const kMODULE_CONTRACTID = "@torproject.org/domain-isolator;1"; +const kMODULE_CID = Components.ID("e33fd6d4-270f-475f-a96f-ff3140279f68"); + +// DomainIsolator object. +function DomainIsolator() { + this.wrappedJSObject = this; +} + +// Firefox component requirements +DomainIsolator.prototype = { + QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver]), + classDescription: kMODULE_NAME, + classID: kMODULE_CID, + contractID: kMODULE_CONTRACTID, + observe(subject, topic, data) { + if (topic === "profile-after-change") { + logger.eclog(3, "domain isolator: set up isolating circuits by domain"); + + if (Services.prefs.getBoolPref("extensions.torbutton.use_nontor_proxy")) { + tor.isolationEnabled = false; + } + tor.isolateCircuitsByDomain(); + } + }, + newCircuitForDomain(domain) { + tor.newCircuitForDomain(domain); + }, + + enableIsolation() { + tor.isolationEnabled = true; + }, + + disableIsolation() { + tor.isolationEnabled = false; + }, + + clearIsolation() { + tor.clearIsolation(); + }, + + wrappedJSObject: null, +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([DomainIsolator]) + : ComponentUtils.generateNSGetFactory([DomainIsolator]); diff --git a/toolkit/torbutton/components/dragDropFilter.js b/toolkit/torbutton/components/dragDropFilter.js new file mode 100644 index 000000000000..f763595be5e6 --- /dev/null +++ b/toolkit/torbutton/components/dragDropFilter.js @@ -0,0 +1,134 @@ +/************************************************************************* + * Drag and Drop Handler. + * + * Implements an observer that filters drag events to prevent OS + * access to URLs (a potential proxy bypass vector). + *************************************************************************/ + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +// Module specific constants +const kMODULE_NAME = "Torbutton Drag and Drop Handler"; +const kCONTRACT_ID = "@torproject.org/torbutton-dragDropFilter;1"; +const kMODULE_CID = Components.ID("f605ec27-d867-44b5-ad97-2a29276642c3"); + +const kInterfaces = [Ci.nsIObserver, Ci.nsIClassInfo]; + +const URLISH_TYPES = Object.freeze([ + "text/x-moz-url", + "text/x-moz-url-data", + "text/uri-list", + "application/x-moz-file-promise-url", +]); + +/* + Returns true if the text resembles a URL or even just a hostname + in a way that may prompt the O.S. or other applications to send out a + validation DNS query, if not a full request (e.g. " torproject.org", + even with the leading whitespace). +*/ +function isURLish(text) { + // Ignore leading whitespace. + text = text.trim(); + + // Without any protocol or dot in the first chunk, this is unlikely + // to be considered URLish (exception: localhost, but we don't care). + if (!/^[a-z][a-z0-9+-]*:///i.test(text)) { + // no protocol + if (!/^[^.\s/]+.[^.\s/]/.test(text)) { + // no dot + return false; + } + // Prepare for hostname validation via relative URL building. + text = `//${text}`; + } + // Validate URL or hostname. + try { + new URL(text, "https://localhost"); + return true; + } catch (e) { + // invalid URL, bail out + } + return false; +} + +// Returns true if any chunk of text is URLish +const hasURLish = text => text.split(/[^\p{L}_.-:/%~@$-]+/u).some(isURLish); + +function DragDropFilter() { + this.logger = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + this.logger.log(3, "Component Load 0: New DragDropFilter."); + + try { + Services.obs.addObserver(this, "on-datatransfer-available"); + } catch (e) { + this.logger.log(5, "Failed to register drag observer"); + } +} + +DragDropFilter.prototype = { + QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver]), + + // make this an nsIClassInfo object + flags: Ci.nsIClassInfo.DOM_OBJECT, + classDescription: kMODULE_NAME, + contractID: kCONTRACT_ID, + classID: kMODULE_CID, + + // method of nsIClassInfo + getInterfaces(count) { + count.value = kInterfaces.length; + return kInterfaces; + }, + + // method of nsIClassInfo + getHelperForLanguage(count) { + return null; + }, + + // method of nsIObserver + observe(subject, topic, data) { + if (topic === "on-datatransfer-available") { + this.logger.log(3, "The DataTransfer is available"); + this.filterDataTransferURLs(subject); + } + }, + + filterDataTransferURLs(aDataTransfer) { + for (let i = 0, count = aDataTransfer.mozItemCount; i < count; ++i) { + this.logger.log(3, `Inspecting the data transfer: ${i}.`); + const types = aDataTransfer.mozTypesAt(i); + for (const type of types) { + this.logger.log(3, `Type is: ${type}.`); + if ( + URLISH_TYPES.includes(type) || + ((type === "text/plain" || type === "text/html") && + hasURLish(aDataTransfer.getData(type))) + ) { + this.logger.log( + 3, + `Removing transfer data ${aDataTransfer.getData(type)}` + ); + for (const type of types) { + aDataTransfer.clearData(type); + } + break; + } + } + } + }, +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([DragDropFilter]) + : ComponentUtils.generateNSGetFactory([DragDropFilter]); diff --git a/toolkit/torbutton/components/external-app-blocker.js b/toolkit/torbutton/components/external-app-blocker.js new file mode 100644 index 000000000000..6a53fc01eaf9 --- /dev/null +++ b/toolkit/torbutton/components/external-app-blocker.js @@ -0,0 +1,160 @@ +// Bug 1506 Android P1/TBB P5: This code provides users with notification +// in the event of external app launch. We want it to exist in the desktop +// port, but it is probably useless for Android. + +/************************************************************************* + * External App Handler. + * Handles displaying confirmation dialogs for external apps and protocols + * due to Firefox Bug https://bugzilla.mozilla.org/show_bug.cgi?id=440892 + * + * An instance of this module is created each time the browser starts to + * download a file and when an external application may be invoked to + * handle an URL (e.g., when the user clicks on a mailto: URL). + *************************************************************************/ + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { PromptUtils } = ChromeUtils.import( + "resource://gre/modules/SharedPromptUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +let { torbutton_get_property_string } = ChromeUtils.import( + "resource://torbutton/modules/utils.js" +); + +// Module specific constants +const kMODULE_NAME = "Torbutton External App Handler"; +const kCONTRACT_ID = "@torproject.org/torbutton-extAppBlocker;1"; +const kMODULE_CID = Components.ID("3da0269f-fc29-4e9e-a678-c3b1cafcf13f"); + +const kInterfaces = [Ci.nsIObserver, Ci.nsIClassInfo]; + +function ExternalAppBlocker() { + this.logger = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + this.logger.log(3, "Component Load 0: New ExternalAppBlocker."); +} + +ExternalAppBlocker.prototype = { + _helperAppLauncher: undefined, + + QueryInterface: ChromeUtils.generateQI([ + Ci.nsIObserver, + Ci.nsIHelperAppWarningDialog, + ]), + + // make this an nsIClassInfo object + flags: Ci.nsIClassInfo.DOM_OBJECT, + classDescription: kMODULE_NAME, + contractID: kCONTRACT_ID, + classID: kMODULE_CID, + + // method of nsIClassInfo + getInterfaces(count) { + count.value = kInterfaces.length; + return kInterfaces; + }, + + // method of nsIClassInfo + getHelperForLanguage(count) { + return null; + }, + + // method of nsIHelperAppWarningDialog + maybeShow(aLauncher, aWindowContext) { + // Hold a reference to the object that called this component. This is + // important not just because we need to later invoke the + // continueRequest() or cancelRequest() callback on aLauncher, but also + // so that the launcher object (which is a reference counted object) is + // not released too soon. + this._helperAppLauncher = aLauncher; + + if (!Services.prefs.getBoolPref("extensions.torbutton.launch_warning")) { + this._helperAppLauncher.continueRequest(); + return; + } + + this._showPrompt(aWindowContext); + }, + + /* + * The _showPrompt() implementation uses some XUL and JS that is part of the + * browser's confirmEx() implementation. Specifically, _showPrompt() depends + * on chrome://global/content/commonDialog.xhtml as well as some of the code + * in resource://gre/modules/SharedPromptUtils.jsm. + */ + _showPrompt(aWindowContext) { + let parentWin; + try { + parentWin = aWindowContext.getInterface(Ci.nsIDOMWindow); + } catch (e) { + parentWin = Services.wm.getMostRecentWindow("navigator:browser"); + } + + let title = torbutton_get_property_string("torbutton.popup.external.title"); + let app = torbutton_get_property_string("torbutton.popup.external.app"); + let note = torbutton_get_property_string("torbutton.popup.external.note"); + let suggest = torbutton_get_property_string( + "torbutton.popup.external.suggest" + ); + let launch = torbutton_get_property_string("torbutton.popup.launch"); + let cancel = torbutton_get_property_string("torbutton.popup.cancel"); + let dontask = torbutton_get_property_string("torbutton.popup.dontask"); + + let args = { + promptType: "confirmEx", + title, + text: app + note + suggest + " ", + checkLabel: dontask, + checked: false, + ok: false, + button0Label: launch, + button1Label: cancel, + defaultButtonNum: 1, // Cancel + buttonNumClicked: 1, // Cancel + enableDelay: true, + }; + + let propBag = PromptUtils.objectToPropBag(args); + let uri = "chrome://global/content/commonDialog.xhtml"; + let promptWin = Services.ww.openWindow( + parentWin, + uri, + "_blank", + "centerscreen,chrome,titlebar", + propBag + ); + promptWin.addEventListener("load", aEvent => { + promptWin.addEventListener("unload", aEvent => { + PromptUtils.propBagToObject(propBag, args); + + if (0 == args.buttonNumClicked) { + // Save the checkbox value and tell the browser's external helper app + // module about the user's choice. + if (args.checked) { + Services.prefs.setBoolPref( + "extensions.torbutton.launch_warning", + false + ); + } + + this._helperAppLauncher.continueRequest(); + } else { + this._helperAppLauncher.cancelRequest(Cr.NS_BINDING_ABORTED); + } + }); + }); + }, +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([ExternalAppBlocker]) + : ComponentUtils.generateNSGetFactory([ExternalAppBlocker]); diff --git a/toolkit/torbutton/components/startup-observer.js b/toolkit/torbutton/components/startup-observer.js new file mode 100644 index 000000000000..8f9b8cc24bc3 --- /dev/null +++ b/toolkit/torbutton/components/startup-observer.js @@ -0,0 +1,196 @@ +// Bug 1506 P1-3: This code is mostly hackish remnants of session store +// support. There are a couple of observer events that *might* be worth +// listening to. Search for 1506 in the code. + +/************************************************************************* + * Startup observer (JavaScript XPCOM component) + * + * Cases tested (each during Tor and Non-Tor, FF4 and FF3.6) + * 1. Crash + * 2. Upgrade + * 3. Fresh install + * + *************************************************************************/ + +const { AppConstants } = ChromeUtils.import( + "resource://gre/modules/AppConstants.jsm" +); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +const { TorProtocolService } = ChromeUtils.import( + "resource://gre/modules/TorProtocolService.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +// Module specific constants +const kMODULE_NAME = "Startup"; +const kMODULE_CONTRACTID = "@torproject.org/startup-observer;1"; +const kMODULE_CID = Components.ID("06322def-6fde-4c06-aef6-47ae8e799629"); + +function cleanupCookies() { + const migratedPref = "extensions.torbutton.cookiejar_migrated"; + if (!Services.prefs.getBoolPref(migratedPref, false)) { + // Cleanup stored cookie-jar-selector json files + const profileFolder = Services.dirsvc.get("ProfD", Ci.nsIFile).clone(); + for (const file of profileFolder.directoryEntries) { + if (file.leafName.match(/^(cookies|protected)-.*[.]json$/)) { + try { + file.remove(false); + } catch (e) {} + } + } + Services.prefs.setBoolPref(migratedPref, true); + } +} + +function StartupObserver() { + this.logger = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + this._prefs = Services.prefs; + this.logger.log(3, "Startup Observer created"); + + var env = Cc["@mozilla.org/process/environment;1"].getService( + Ci.nsIEnvironment + ); + var prefName = "browser.startup.homepage"; + if (env.exists("TOR_DEFAULT_HOMEPAGE")) { + // if the user has set this value in a previous installation, don't override it + if (!this._prefs.prefHasUserValue(prefName)) { + this._prefs.setCharPref(prefName, env.get("TOR_DEFAULT_HOMEPAGE")); + } + } + + this.is_tbb = true; + + try { + // XXX: We're in a race with HTTPS-Everywhere to update our proxy settings + // before the initial SSL-Observatory test... If we lose the race, Firefox + // caches the old proxy settings for check.tp.o somehwere, and it never loads :( + this.setProxySettings(); + } catch (e) { + this.logger.log( + 4, + "Early proxy change failed. Will try again at profile load. Error: " + e + ); + } + + cleanupCookies(); +} + +StartupObserver.prototype = { + // Bug 6803: We need to get the env vars early due to + // some weird proxy caching code that showed up in FF15. + // Otherwise, homepage domain loads fail forever. + setProxySettings() { + if (!this.is_tbb) { + return; + } + + // Bug 1506: Still want to get these env vars + let environ = Cc["@mozilla.org/process/environment;1"].getService( + Ci.nsIEnvironment + ); + if (environ.exists("TOR_TRANSPROXY")) { + this.logger.log(3, "Resetting Tor settings to transproxy"); + this._prefs.setBoolPref("network.proxy.socks_remote_dns", false); + this._prefs.setIntPref("network.proxy.type", 0); + this._prefs.setIntPref("network.proxy.socks_port", 0); + this._prefs.setCharPref("network.proxy.socks", ""); + } else { + // Try to retrieve SOCKS proxy settings from Tor Launcher. + let socksPortInfo; + try { + socksPortInfo = TorProtocolService.torGetSOCKSPortInfo(); + } catch (e) { + this.logger.log(3, "tor launcher failed " + e); + } + + // If Tor Launcher is not available, check environment variables. + if (!socksPortInfo) { + socksPortInfo = { ipcFile: undefined, host: undefined, port: 0 }; + + let isWindows = Services.appinfo.OS === "WINNT"; + if (!isWindows && environ.exists("TOR_SOCKS_IPC_PATH")) { + socksPortInfo.ipcFile = new FileUtils.File( + environ.get("TOR_SOCKS_IPC_PATH") + ); + } else { + if (environ.exists("TOR_SOCKS_HOST")) { + socksPortInfo.host = environ.get("TOR_SOCKS_HOST"); + } + if (environ.exists("TOR_SOCKS_PORT")) { + socksPortInfo.port = parseInt(environ.get("TOR_SOCKS_PORT")); + } + } + } + + // Adjust network.proxy prefs. + if (socksPortInfo.ipcFile) { + let fph = Services.io + .getProtocolHandler("file") + .QueryInterface(Ci.nsIFileProtocolHandler); + let fileURI = fph.newFileURI(socksPortInfo.ipcFile); + this.logger.log(3, "Reset socks to " + fileURI.spec); + this._prefs.setCharPref("network.proxy.socks", fileURI.spec); + this._prefs.setIntPref("network.proxy.socks_port", 0); + } else { + if (socksPortInfo.host) { + this._prefs.setCharPref("network.proxy.socks", socksPortInfo.host); + this.logger.log(3, "Reset socks host to " + socksPortInfo.host); + } + if (socksPortInfo.port) { + this._prefs.setIntPref( + "network.proxy.socks_port", + socksPortInfo.port + ); + this.logger.log(3, "Reset socks port to " + socksPortInfo.port); + } + } + + if (socksPortInfo.ipcFile || socksPortInfo.host || socksPortInfo.port) { + this._prefs.setBoolPref("network.proxy.socks_remote_dns", true); + this._prefs.setIntPref("network.proxy.type", 1); + } + } + + // Force prefs to be synced to disk + Services.prefs.savePrefFile(null); + + this.logger.log(3, "Synced network settings to environment."); + }, + + observe(subject, topic, data) { + if (topic == "profile-after-change") { + // Bug 1506 P1: We listen to these prefs as signals for startup, + // but only for hackish reasons. + this._prefs.setBoolPref("extensions.torbutton.startup", true); + + this.setProxySettings(); + } + + // In all cases, force prefs to be synced to disk + Services.prefs.savePrefFile(null); + }, + + QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]), + + // method of nsIClassInfo + classDescription: "Torbutton Startup Observer", + classID: kMODULE_CID, + contractID: kMODULE_CONTRACTID, + + // Hack to get us registered early to observe recovery + _xpcom_categories: [{ category: "profile-after-change" }], +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([StartupObserver]) + : ComponentUtils.generateNSGetFactory([StartupObserver]); diff --git a/toolkit/torbutton/components/torCheckService.js b/toolkit/torbutton/components/torCheckService.js new file mode 100644 index 000000000000..41d716ff935c --- /dev/null +++ b/toolkit/torbutton/components/torCheckService.js @@ -0,0 +1,140 @@ +/************************************************************************* + * Copyright (c) 2013, The Tor Project, Inc. + * See LICENSE for licensing information. + * + * vim: set sw=2 sts=2 ts=8 et syntax=javascript: + * + * Tor check service + *************************************************************************/ + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +// Module specific constants +const kMODULE_NAME = "Torbutton Tor Check Service"; +const kMODULE_CONTRACTID = "@torproject.org/torbutton-torCheckService;1"; +const kMODULE_CID = Components.ID("5d57312b-5d8c-4169-b4af-e80d6a28a72e"); + +function TBTorCheckService() { + this._logger = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports + ).wrappedJSObject; + this._logger.log(3, "Torbutton Tor Check Service initialized"); + + this._statusOfTorCheck = this.kCheckNotInitiated; + this.wrappedJSObject = this; +} + +TBTorCheckService.prototype = { + QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]), + + kCheckNotInitiated: 0, // Possible values for statusOfTorCheck. + kCheckSuccessful: 1, + kCheckFailed: 2, + + wrappedJSObject: null, + _logger: null, + _statusOfTorCheck: 0, // this.kCheckNotInitiated, + + // make this an nsIClassInfo object + flags: Ci.nsIClassInfo.DOM_OBJECT, + + // method of nsIClassInfo + classDescription: kMODULE_NAME, + classID: kMODULE_CID, + contractID: kMODULE_CONTRACTID, + + // method of nsIClassInfo + getInterfaces(count) { + var interfaceList = [Ci.nsIClassInfo]; + count.value = interfaceList.length; + return interfaceList; + }, + + // method of nsIClassInfo + getHelperForLanguage(count) { + return null; + }, + + // Public methods. + get statusOfTorCheck() { + return this._statusOfTorCheck; + }, + + set statusOfTorCheck(aStatus) { + this._statusOfTorCheck = aStatus; + }, + + createCheckRequest(aAsync) { + let req = new XMLHttpRequest(); + let url = Services.prefs.getCharPref("extensions.torbutton.test_url"); + req.open("GET", url, aAsync); + req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE; + req.overrideMimeType("text/xml"); + req.timeout = 120000; // Wait at most two minutes for a response. + return req; + }, + + parseCheckResponse(aReq) { + let ret = 0; + if (aReq.status == 200) { + if (!aReq.responseXML) { + this._logger.log(5, "Check failed! Not text/xml!"); + ret = 1; + } else { + let result = aReq.responseXML.getElementById("TorCheckResult"); + + if (result === null) { + this._logger.log(5, "Test failed! No TorCheckResult element"); + ret = 2; + } else if ( + typeof result.target == "undefined" || + result.target === null + ) { + this._logger.log(5, "Test failed! No target"); + ret = 3; + } else if (result.target === "success") { + this._logger.log(3, "Test Successful"); + ret = 4; + } else if (result.target === "failure") { + this._logger.log(5, "Tor test failed!"); + ret = 5; + } else if (result.target === "unknown") { + this._logger.log(5, "Tor test failed. TorDNSEL Failure?"); + ret = 6; + } else { + this._logger.log(5, "Tor test failed. Strange target."); + ret = 7; + } + } + } else { + if (0 == aReq.status) { + try { + var req = aReq.channel.QueryInterface(Ci.nsIRequest); + if (req.status == Cr.NS_ERROR_PROXY_CONNECTION_REFUSED) { + this._logger.log(5, "Tor test failed. Proxy connection refused"); + ret = 8; + } + } catch (e) {} + } + + if (ret == 0) { + this._logger.log(5, "Tor test failed. HTTP Error: " + aReq.status); + ret = -aReq.status; + } + } + + return ret; + }, +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([TBTorCheckService]) + : ComponentUtils.generateNSGetFactory([TBTorCheckService]); diff --git a/toolkit/torbutton/components/torbutton-logger.js b/toolkit/torbutton/components/torbutton-logger.js new file mode 100644 index 000000000000..2fdcd7e6a753 --- /dev/null +++ b/toolkit/torbutton/components/torbutton-logger.js @@ -0,0 +1,185 @@ +// Bug 1506 P1: This is just a handy logger. If you have a better one, toss +// this in the trash. + +/************************************************************************* + * TBLogger (JavaScript XPCOM component) + * + * Allows loglevel-based logging to different logging mechanisms. + * + *************************************************************************/ + +// Module specific constants +const kMODULE_NAME = "Torbutton Logger"; +const kMODULE_CONTRACTID = "@torproject.org/torbutton-logger;1"; +const kMODULE_CID = Components.ID("f36d72c9-9718-4134-b550-e109638331d7"); + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + ComponentUtils: "resource://gre/modules/ComponentUtils.jsm", +}); + +function TorbuttonLogger() { + // Register observer + Services.prefs.addObserver("extensions.torbutton", this); + + this.loglevel = Services.prefs.getIntPref("extensions.torbutton.loglevel"); + this.logmethod = Services.prefs.getIntPref("extensions.torbutton.logmethod"); + + try { + var logMngr = Cc["@mozmonkey.com/debuglogger/manager;1"].getService( + Ci.nsIDebugLoggerManager + ); + this._debuglog = logMngr.registerLogger("torbutton"); + } catch (exErr) { + this._debuglog = false; + } + this._console = Services.console; + + // This JSObject is exported directly to chrome + this.wrappedJSObject = this; + this.log(3, "Torbutton debug output ready"); +} + +/** + * JS XPCOM component registration goop: + * + * Everything below is boring boilerplate and can probably be ignored. + */ + +const nsIClassInfo = Ci.nsIClassInfo; + +const logString = { 1: "VERB", 2: "DBUG", 3: "INFO", 4: "NOTE", 5: "WARN" }; + +function padInt(i) { + return i < 10 ? "0" + i : i; +} + +TorbuttonLogger.prototype = { + QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]), + + wrappedJSObject: null, // Initialized by constructor + + // make this an nsIClassInfo object + flags: nsIClassInfo.DOM_OBJECT, + + // method of nsIClassInfo + classDescription: "TorbuttonLogger", + classID: kMODULE_CID, + contractID: kMODULE_CONTRACTID, + + // method of nsIClassInfo + getInterfaces(count) { + var interfaceList = [nsIClassInfo]; + count.value = interfaceList.length; + return interfaceList; + }, + + // method of nsIClassInfo + getHelperForLanguage(count) { + return null; + }, + + formatLog(str, level) { + var d = new Date(); + var now = + padInt(d.getUTCMonth() + 1) + + "-" + + padInt(d.getUTCDate()) + + " " + + padInt(d.getUTCHours()) + + ":" + + padInt(d.getUTCMinutes()) + + ":" + + padInt(d.getUTCSeconds()); + return "[" + now + "] Torbutton " + logString[level] + ": " + str; + }, + + // error console log + eclog(level, str) { + switch (this.logmethod) { + case 0: // stderr + if (this.loglevel <= level) { + dump(this.formatLog(str, level) + "\n"); + } + break; + default: + // errorconsole + if (this.loglevel <= level) { + this._console.logStringMessage(this.formatLog(str, level)); + } + break; + } + }, + + safe_log(level, str, scrub) { + if (this.loglevel < 4) { + this.eclog(level, str + scrub); + } else { + this.eclog(level, str + " [scrubbed]"); + } + }, + + log(level, str) { + switch (this.logmethod) { + case 2: // debuglogger + if (this._debuglog) { + this._debuglog.log(6 - level, this.formatLog(str, level)); + break; + } + // fallthrough + case 0: // stderr + if (this.loglevel <= level) { + dump(this.formatLog(str, level) + "\n"); + } + break; + case 1: // errorconsole + if (this.loglevel <= level) { + this._console.logStringMessage(this.formatLog(str, level)); + } + break; + default: + dump("Bad log method: " + this.logmethod); + } + }, + + // Pref observer interface implementation + + // topic: what event occurred + // subject: what nsIPrefBranch we're observing + // data: which pref has been changed (relative to subject) + observe(subject, topic, data) { + if (topic != "nsPref:changed") { + return; + } + switch (data) { + case "extensions.torbutton.logmethod": + this.logmethod = Services.prefs.getIntPref( + "extensions.torbutton.logmethod" + ); + if (this.logmethod === 0) { + Services.prefs.setBoolPref("browser.dom.window.dump.enabled", true); + } else if ( + Services.prefs.getIntPref("extensions.torlauncher.logmethod", 3) !== 0 + ) { + // If Tor Launcher is not available or its log method is not 0 + // then let's reset the dump pref. + Services.prefs.setBoolPref("browser.dom.window.dump.enabled", false); + } + break; + case "extensions.torbutton.loglevel": + this.loglevel = Services.prefs.getIntPref( + "extensions.torbutton.loglevel" + ); + break; + } + }, +}; + +// Assign factory to global object. +const NSGetFactory = XPCOMUtils.generateNSGetFactory + ? XPCOMUtils.generateNSGetFactory([TorbuttonLogger]) + : ComponentUtils.generateNSGetFactory([TorbuttonLogger]); diff --git a/toolkit/torbutton/jar.mn b/toolkit/torbutton/jar.mn new file mode 100644 index 000000000000..5e7a11384cc4 --- /dev/null +++ b/toolkit/torbutton/jar.mn @@ -0,0 +1,46 @@ +#filter substitution + +torbutton.jar: + +% content torbutton %content/ + + content/torbutton.js (chrome/content/torbutton.js) + content/tor-circuit-display.js (chrome/content/tor-circuit-display.js) + content/preferences.xhtml (chrome/content/preferences.xhtml) + content/aboutTor/aboutTor-content.js (chrome/content/aboutTor/aboutTor-content.js) +* content/aboutTor/aboutTor.xhtml (chrome/content/aboutTor/aboutTor.xhtml) + content/aboutTor/resources/aboutTor.js (chrome/content/aboutTor/resources/aboutTor.js) + content/preferences-mobile.js (chrome/content/preferences-mobile.js) + + components/ (components/*) + modules/ (modules/*) + skin/ (chrome/skin/*) + +% resource torbutton % +% resource torbutton-abouttor resource://torbutton/content/aboutTor/resources/ contentaccessible=yes +% resource torbutton-assets resource://torbutton/skin/ contentaccessible=yes + +% skin torbutton classic/1.0 %skin/ + +# Firefox 4-style component registration +% component {f605ec27-d867-44b5-ad97-2a29276642c3} %components/dragDropFilter.js +% contract @torproject.org/torbutton-dragDropFilter;1 {f605ec27-d867-44b5-ad97-2a29276642c3} + +% component {3da0269f-fc29-4e9e-a678-c3b1cafcf13f} %components/external-app-blocker.js +% contract @torproject.org/torbutton-extAppBlocker;1 {3da0269f-fc29-4e9e-a678-c3b1cafcf13f} + +% component {06322def-6fde-4c06-aef6-47ae8e799629} %components/startup-observer.js +% contract @torproject.org/startup-observer;1 {06322def-6fde-4c06-aef6-47ae8e799629} + +% component {5d57312b-5d8c-4169-b4af-e80d6a28a72e} %components/torCheckService.js +% contract @torproject.org/torbutton-torCheckService;1 {5d57312b-5d8c-4169-b4af-e80d6a28a72e} + +% component {f36d72c9-9718-4134-b550-e109638331d7} %components/torbutton-logger.js +% contract @torproject.org/torbutton-logger;1 {f36d72c9-9718-4134-b550-e109638331d7} + +% component {e33fd6d4-270f-475f-a96f-ff3140279f68} %components/domain-isolator.js +% contract @torproject.org/domain-isolator;1 {e33fd6d4-270f-475f-a96f-ff3140279f68} + +% category profile-after-change StartupObserver @torproject.org/startup-observer;1 +% category profile-after-change DomainIsolator @torproject.org/domain-isolator;1 +% category profile-after-change DragDropFilter @torproject.org/torbutton-dragDropFilter;1 diff --git a/toolkit/torbutton/modules/tor-control-port.js b/toolkit/torbutton/modules/tor-control-port.js new file mode 100644 index 000000000000..374ff5fd1bfd --- /dev/null +++ b/toolkit/torbutton/modules/tor-control-port.js @@ -0,0 +1,982 @@ +// A module for TorBrowser that provides an asynchronous controller for +// Tor, through its ControlPort. +// +// This file is written in call stack order (later functions +// call earlier functions). The file can be processed +// with docco.js to produce pretty documentation. +// +// To import the module, use +// +// let { configureControlPortModule, controller, wait_for_controller } = +// Components.utils.import("path/to/tor-control-port.js", {}); +// +// See the third-to-last function defined in this file: +// configureControlPortModule(ipcFile, host, port, password) +// for usage of the configureControlPortModule function. +// +// See the last functions defined in this file: +// controller(avoidCache), wait_for_controller(avoidCache) +// for usage of the controller functions. + +/* jshint esnext: true */ +/* jshint -W097 */ +/* global console */ +"use strict"; + +// ### Import Mozilla Services +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +ChromeUtils.defineModuleGetter( + this, + "TorMonitorService", + "resource://gre/modules/TorMonitorService.jsm" +); + +// tor-launcher observer topics +const TorTopics = Object.freeze({ + ProcessIsReady: "TorProcessIsReady", +}); + +// __log__. +// Logging function +let logger = Cc["@torproject.org/torbutton-logger;1"].getService(Ci.nsISupports) + .wrappedJSObject; +let log = x => logger.eclog(3, x.trimRight().replace(/\r\n/g, "\n")); + +// ### announce this file +log("Loading tor-control-port.js\n"); + +class AsyncSocket { + constructor(ipcFile, host, port) { + let sts = Cc["@mozilla.org/network/socket-transport-service;1"].getService( + Ci.nsISocketTransportService + ); + const OPEN_UNBUFFERED = Ci.nsITransport.OPEN_UNBUFFERED; + + let socketTransport = ipcFile + ? sts.createUnixDomainTransport(ipcFile) + : sts.createTransport([], host, port, null, null); + + this.outputStream = socketTransport + .openOutputStream(OPEN_UNBUFFERED, 1, 1) + .QueryInterface(Ci.nsIAsyncOutputStream); + this.outputQueue = []; + + this.inputStream = socketTransport + .openInputStream(OPEN_UNBUFFERED, 1, 1) + .QueryInterface(Ci.nsIAsyncInputStream); + this.scriptableInputStream = Cc[ + "@mozilla.org/scriptableinputstream;1" + ].createInstance(Ci.nsIScriptableInputStream); + this.scriptableInputStream.init(this.inputStream); + this.inputQueue = []; + } + + // asynchronously write string to underlying socket and return number of bytes written + async write(str) { + return new Promise((resolve, reject) => { + // asyncWait next write request + const tryAsyncWait = () => { + if (this.outputQueue.length) { + this.outputStream.asyncWait( + this.outputQueue.at(0), // next request + 0, + 0, + Services.tm.currentThread + ); + } + }; + + // output stream can only have 1 registered callback at a time, so multiple writes + // need to be queued up (see nsIAsyncOutputStream.idl) + this.outputQueue.push({ + // Implement an nsIOutputStreamCallback: + onOutputStreamReady: () => { + try { + let bytesWritten = this.outputStream.write(str, str.length); + + // remove this callback object from queue as it is now completed + this.outputQueue.shift(); + + // request next wait if there is one + tryAsyncWait(); + + // finally resolve promise + resolve(bytesWritten); + } catch (err) { + // reject promise on error + reject(err); + } + }, + }); + + // length 1 imples that there is no in-flight asyncWait, so we may immediately + // follow through on this write + if (this.outputQueue.length == 1) { + tryAsyncWait(); + } + }); + } + + // asynchronously read string from underlying socket and return it + async read() { + return new Promise((resolve, reject) => { + const tryAsyncWait = () => { + if (this.inputQueue.length) { + this.inputStream.asyncWait( + this.inputQueue.at(0), // next input request + 0, + 0, + Services.tm.currentThread + ); + } + }; + + this.inputQueue.push({ + onInputStreamReady: stream => { + try { + // read our string from input stream + let str = this.scriptableInputStream.read( + this.scriptableInputStream.available() + ); + + // remove this callback object from queue now that we have read + this.inputQueue.shift(); + + // request next wait if there is one + tryAsyncWait(); + + // finally resolve promise + resolve(str); + } catch (err) { + reject(err); + } + }, + }); + + // length 1 imples that there is no in-flight asyncWait, so we may immediately + // follow through on this read + if (this.inputQueue.length == 1) { + tryAsyncWait(); + } + }); + } + + close() { + this.outputStream.close(); + this.inputStream.close(); + } +} + +class ControlSocket { + constructor(asyncSocket) { + this.socket = asyncSocket; + this._isOpen = true; + this.pendingData = ""; + this.pendingLines = []; + + this.mainDispatcher = io.callbackDispatcher(); + this.notificationDispatcher = io.callbackDispatcher(); + // mainDispatcher pushes only async notifications (650) to notificationDispatcher + this.mainDispatcher.addCallback( + /^650/, + this._handleNotification.bind(this) + ); + // callback for handling responses and errors + this.mainDispatcher.addCallback( + /^[245]\d\d/, + this._handleCommandReply.bind(this) + ); + + this.commandQueue = []; + + this._startMessagePump(); + } + + // blocks until an entire line is read and returns it + // immediately returns next line in queue (pendingLines) if present + async _readLine() { + // keep reading from socket until we have a full line to return + while (!this.pendingLines.length) { + // read data from our socket and spit on newline tokens + this.pendingData += await this.socket.read(); + let lines = this.pendingData.split("\r\n"); + + // the last line will either be empty string, or a partial read of a response/event + // so save it off for the next socket read + this.pendingData = lines.pop(); + + // copy remaining full lines to our pendingLines list + this.pendingLines = this.pendingLines.concat(lines); + } + return this.pendingLines.shift(); + } + + // blocks until an entire message is ready and returns it + async _readMessage() { + // whether we are searching for the end of a multi-line values + // See control-spec section 3.9 + let handlingMultlineValue = false; + let endOfMessageFound = false; + const message = []; + + do { + const line = await this._readLine(); + message.push(line); + + if (handlingMultlineValue) { + // look for end of multiline + if (line.match(/^.$/)) { + handlingMultlineValue = false; + } + } else { + // 'Multiline values' are possible. We avoid interrupting one by detecting it + // and waiting for a terminating "." on its own line. + // (See control-spec section 3.9 and https://trac.torproject.org/16990#comment:28 + // Ensure this is the first line of a new message + // eslint-disable-next-line no-lonely-if + if (message.length === 1 && line.match(/^\d\d\d+.+?=$/)) { + handlingMultlineValue = true; + } + // look for end of message (note the space character at end of the regex) + else if (line.match(/^\d\d\d /)) { + if (message.length == 1) { + endOfMessageFound = true; + } else { + let firstReplyCode = message[0].substring(0, 3); + let lastReplyCode = line.substring(0, 3); + if (firstReplyCode == lastReplyCode) { + endOfMessageFound = true; + } + } + } + } + } while (!endOfMessageFound); + + // join our lines back together to form one message + return message.join("\r\n"); + } + + async _startMessagePump() { + try { + while (true) { + let message = await this._readMessage(); + log("controlPort >> " + message); + this.mainDispatcher.pushMessage(message); + } + } catch (err) { + this._isOpen = false; + for (const cmd of this.commandQueue) { + cmd.reject(err); + } + this.commandQueue = []; + } + } + + _writeNextCommand() { + let cmd = this.commandQueue[0]; + log("controlPort << " + cmd.commandString); + this.socket.write(`${cmd.commandString}\r\n`).catch(cmd.reject); + } + + async sendCommand(commandString) { + if (!this.isOpen()) { + throw new Error("ControlSocket not open"); + } + + // this promise is resolved either in _handleCommandReply, or + // in _startMessagePump (on stream error) + return new Promise((resolve, reject) => { + let command = { + commandString, + resolve, + reject, + }; + + this.commandQueue.push(command); + if (this.commandQueue.length == 1) { + this._writeNextCommand(); + } + }); + } + + _handleCommandReply(message) { + let cmd = this.commandQueue.shift(); + if (message.match(/^2/)) { + cmd.resolve(message); + } else if (message.match(/^[45]/)) { + let myErr = new Error(cmd.commandString + " -> " + message); + // Add Tor-specific information to the Error object. + let idx = message.indexOf(" "); + if (idx > 0) { + myErr.torStatusCode = message.substring(0, idx); + myErr.torMessage = message.substring(idx); + } else { + myErr.torStatusCode = message; + } + cmd.reject(myErr); + } else { + cmd.reject( + new Error( + `ControlSocket::_handleCommandReply received unexpected message:\n----\n${message}\n----` + ) + ); + } + + // send next command if one is available + if (this.commandQueue.length) { + this._writeNextCommand(); + } + } + + _handleNotification(message) { + this.notificationDispatcher.pushMessage(message); + } + + close() { + this.socket.close(); + this._isOpen = false; + } + + addNotificationCallback(regex, callback) { + this.notificationDispatcher.addCallback(regex, callback); + } + + isOpen() { + return this._isOpen; + } +} + +// ## io +// I/O utilities namespace + +let io = {}; + +// __io.callbackDispatcher()__. +// Returns dispatcher object with three member functions: +// dispatcher.addCallback(regex, callback), dispatcher.removeCallback(callback), +// and dispatcher.pushMessage(message). +// Pass pushMessage to another function that needs a callback with a single string +// argument. Whenever dispatcher.pushMessage receives a string, the dispatcher will +// check for any regex matches and pass the string on to the corresponding callback(s). +io.callbackDispatcher = function() { + let callbackPairs = [], + removeCallback = function(aCallback) { + callbackPairs = callbackPairs.filter(function([regex, callback]) { + return callback !== aCallback; + }); + }, + addCallback = function(regex, callback) { + if (callback) { + callbackPairs.push([regex, callback]); + } + return function() { + removeCallback(callback); + }; + }, + pushMessage = function(message) { + for (let [regex, callback] of callbackPairs) { + if (message.match(regex)) { + callback(message); + } + } + }; + return { + pushMessage, + removeCallback, + addCallback, + }; +}; + +// __io.controlSocket(ipcFile, host, port, password)__. +// Instantiates and returns a socket to a tor ControlPort at ipcFile or +// host:port, authenticating with the given password. Example: +// +// // Open the socket +// let socket = await io.controlSocket(undefined, "127.0.0.1", 9151, "MyPassw0rd"); +// // Send command and receive "250" response reply or error is thrown +// await socket.sendCommand(commandText); +// // Register or deregister for "650" notifications +// // that match regex +// socket.addNotificationCallback(regex, callback); +// socket.removeNotificationCallback(callback); +// // Close the socket permanently +// socket.close(); +io.controlSocket = async function(ipcFile, host, port, password) { + let socket = new AsyncSocket(ipcFile, host, port); + let controlSocket = new ControlSocket(socket); + + // Log in to control port. + await controlSocket.sendCommand("authenticate " + (password || "")); + // Activate needed events. + await controlSocket.sendCommand("setevents stream"); + + return controlSocket; +}; + +// ## utils +// A namespace for utility functions +let utils = {}; + +// __utils.identity(x)__. +// Returns its argument unchanged. +utils.identity = function(x) { + return x; +}; + +// __utils.isString(x)__. +// Returns true iff x is a string. +utils.isString = function(x) { + return typeof x === "string" || x instanceof String; +}; + +// __utils.capture(string, regex)__. +// Takes a string and returns an array of capture items, where regex must have a single +// capturing group and use the suffix /.../g to specify a global search. +utils.capture = function(string, regex) { + let matches = []; + // Special trick to use string.replace for capturing multiple matches. + string.replace(regex, function(a, captured) { + matches.push(captured); + }); + return matches; +}; + +// __utils.extractor(regex)__. +// Returns a function that takes a string and returns an array of regex matches. The +// regex must use the suffix /.../g to specify a global search. +utils.extractor = function(regex) { + return function(text) { + return utils.capture(text, regex); + }; +}; + +// __utils.splitLines(string)__. +// Splits a string into an array of strings, each corresponding to a line. +utils.splitLines = function(string) { + return string.split(/\r?\n/); +}; + +// __utils.splitAtSpaces(string)__. +// Splits a string into chunks between spaces. Does not split at spaces +// inside pairs of quotation marks. +utils.splitAtSpaces = utils.extractor(/((\S*?"(.*?)")+\S*|\S+)/g); + +// __utils.splitAtFirst(string, regex)__. +// Splits a string at the first instance of regex match. If no match is +// found, returns the whole string. +utils.splitAtFirst = function(string, regex) { + let match = string.match(regex); + return match + ? [ + string.substring(0, match.index), + string.substring(match.index + match[0].length), + ] + : string; +}; + +// __utils.splitAtEquals(string)__. +// Splits a string into chunks between equals. Does not split at equals +// inside pairs of quotation marks. +utils.splitAtEquals = utils.extractor(/(([^=]*?"(.*?)")+[^=]*|[^=]+)/g); + +// __utils.mergeObjects(arrayOfObjects)__. +// Takes an array of objects like [{"a":"b"},{"c":"d"}] and merges to a single object. +// Pure function. +utils.mergeObjects = function(arrayOfObjects) { + let result = {}; + for (let obj of arrayOfObjects) { + for (let key in obj) { + result[key] = obj[key]; + } + } + return result; +}; + +// __utils.listMapData(parameterString, listNames)__. +// Takes a list of parameters separated by spaces, of which the first several are +// unnamed, and the remainder are named, in the form `NAME=VALUE`. Apply listNames +// to the unnamed parameters, and combine them in a map with the named parameters. +// Example: `40 FAILED 0 95.78.59.36:80 REASON=CANT_ATTACH` +// +// utils.listMapData("40 FAILED 0 95.78.59.36:80 REASON=CANT_ATTACH", +// ["streamID", "event", "circuitID", "IP"]) +// // --> {"streamID" : "40", "event" : "FAILED", "circuitID" : "0", +// // "address" : "95.78.59.36:80", "REASON" : "CANT_ATTACH"}" +utils.listMapData = function(parameterString, listNames) { + // Split out the space-delimited parameters. + let parameters = utils.splitAtSpaces(parameterString), + dataMap = {}; + // Assign listNames to the first n = listNames.length parameters. + for (let i = 0; i < listNames.length; ++i) { + dataMap[listNames[i]] = parameters[i]; + } + // Read key-value pairs and copy these to the dataMap. + for (let i = listNames.length; i < parameters.length; ++i) { + let [key, value] = utils.splitAtEquals(parameters[i]); + if (key && value) { + dataMap[key] = value; + } + } + return dataMap; +}; + +// __utils.rejectPromise(errorMessage)__. +// Returns a rejected promise with the given error message. +utils.rejectPromise = errorMessage => Promise.reject(new Error(errorMessage)); + +// ## info +// A namespace for functions related to tor's GETINFO and GETCONF command. +let info = {}; + +// __info.keyValueStringsFromMessage(messageText)__. +// Takes a message (text) response to GETINFO or GETCONF and provides +// a series of key-value strings, which are either multiline (with a `250+` prefix): +// +// 250+config/defaults= +// AccountingMax "0 bytes" +// AllowDotExit "0" +// . +// +// or single-line (with a `250-` or `250 ` prefix): +// +// 250-version=0.2.6.0-alpha-dev (git-b408125288ad6943) +info.keyValueStringsFromMessage = utils.extractor( + /^(250+[\s\S]+?^.|250[- ].+?)$/gim +); + +// __info.applyPerLine(transformFunction)__. +// Returns a function that splits text into lines, +// and applies transformFunction to each line. +info.applyPerLine = function(transformFunction) { + return function(text) { + return utils.splitLines(text.trim()).map(transformFunction); + }; +}; + +// __info.routerStatusParser(valueString)__. +// Parses a router status entry as, described in +// https://gitweb.torproject.org/torspec.git/tree/dir-spec.txt +// (search for "router status entry") +info.routerStatusParser = function(valueString) { + let lines = utils.splitLines(valueString), + objects = []; + for (let line of lines) { + // Drop first character and grab data following it. + let myData = line.substring(2), + // Accumulate more maps with data, depending on the first character in the line. + dataFun = { + r: data => + utils.listMapData(data, [ + "nickname", + "identity", + "digest", + "publicationDate", + "publicationTime", + "IP", + "ORPort", + "DirPort", + ]), + a: data => ({ IPv6: data }), + s: data => ({ statusFlags: utils.splitAtSpaces(data) }), + v: data => ({ version: data }), + w: data => utils.listMapData(data, []), + p: data => ({ portList: data.split(",") }), + }[line.charAt(0)]; + if (dataFun !== undefined) { + objects.push(dataFun(myData)); + } + } + return utils.mergeObjects(objects); +}; + +// __info.circuitStatusParser(line)__. +// Parse the output of a circuit status line. +info.circuitStatusParser = function(line) { + let data = utils.listMapData(line, ["id", "status", "circuit"]), + circuit = data.circuit; + // Parse out the individual circuit IDs and names. + if (circuit) { + data.circuit = circuit.split(",").map(function(x) { + return x.split(/~|=/); + }); + } + return data; +}; + +// __info.streamStatusParser(line)__. +// Parse the output of a stream status line. +info.streamStatusParser = function(text) { + return utils.listMapData(text, [ + "StreamID", + "StreamStatus", + "CircuitID", + "Target", + ]); +}; + +// TODO: fix this parsing logic to handle bridgeLine correctly +// fingerprint/id is an optional parameter +// __info.bridgeParser(bridgeLine)__. +// Takes a single line from a `getconf bridge` result and returns +// a map containing the bridge's type, address, and ID. +info.bridgeParser = function(bridgeLine) { + let result = {}, + tokens = bridgeLine.split(/\s+/); + // First check if we have a "vanilla" bridge: + if (tokens[0].match(/^\d+.\d+.\d+.\d+/)) { + result.type = "vanilla"; + [result.address, result.ID] = tokens; + // Several bridge types have a similar format: + } else { + result.type = tokens[0]; + if ( + [ + "flashproxy", + "fte", + "meek", + "meek_lite", + "obfs3", + "obfs4", + "scramblesuit", + "snowflake", + ].includes(result.type) + ) { + [result.address, result.ID] = tokens.slice(1); + } + } + return result.type ? result : null; +}; + +// __info.parsers__. +// A map of GETINFO and GETCONF keys to parsing function, which convert +// result strings to JavaScript data. +info.parsers = { + "ns/id/": info.routerStatusParser, + "ip-to-country/": utils.identity, + "circuit-status": info.applyPerLine(info.circuitStatusParser), + bridge: info.bridgeParser, + // Currently unused parsers: + // "ns/name/" : info.routerStatusParser, + // "stream-status" : info.applyPerLine(info.streamStatusParser), + // "version" : utils.identity, + // "config-file" : utils.identity, +}; + +// __info.getParser(key)__. +// Takes a key and determines the parser function that should be used to +// convert its corresponding valueString to JavaScript data. +info.getParser = function(key) { + return ( + info.parsers[key] || + info.parsers[key.substring(0, key.lastIndexOf("/") + 1)] + ); +}; + +// __info.stringToValue(string)__. +// Converts a key-value string as from GETINFO or GETCONF to a value. +info.stringToValue = function(string) { + // key should look something like `250+circuit-status=` or `250-circuit-status=...` + // or `250 circuit-status=...` + let matchForKey = string.match(/^250[ +-](.+?)=/), + key = matchForKey ? matchForKey[1] : null; + if (key === null) { + return null; + } + // matchResult finds a single-line result for `250-` or `250 `, + // or a multi-line one for `250+`. + let matchResult = + string.match(/^250[ -].+?=(.*)$/) || + string.match(/^250+.+?=([\s\S]*?)^.$/m), + // Retrieve the captured group (the text of the value in the key-value pair) + valueString = matchResult ? matchResult[1] : null, + // Get the parser function for the key found. + parse = info.getParser(key.toLowerCase()); + if (parse === undefined) { + throw new Error("No parser found for '" + key + "'"); + } + // Return value produced by the parser. + return parse(valueString); +}; + +// __info.getMultipleResponseValues(message)__. +// Process multiple responses to a GETINFO or GETCONF request. +info.getMultipleResponseValues = function(message) { + return info + .keyValueStringsFromMessage(message) + .map(info.stringToValue) + .filter(utils.identity); +}; + +// __info.getInfo(controlSocket, key)__. +// Sends GETINFO for a single key. Returns a promise with the result. +info.getInfo = function(aControlSocket, key) { + if (!utils.isString(key)) { + return utils.rejectPromise("key argument should be a string"); + } + return aControlSocket + .sendCommand("getinfo " + key) + .then(response => info.getMultipleResponseValues(response)[0]); +}; + +// __info.getConf(aControlSocket, key)__. +// Sends GETCONF for a single key. Returns a promise with the result. +info.getConf = function(aControlSocket, key) { + // GETCONF with a single argument returns results with + // one or more lines that look like `250[- ]key=value`. + // Any GETCONF lines that contain a single keyword only are currently dropped. + // So we can use similar parsing to that for getInfo. + if (!utils.isString(key)) { + return utils.rejectPromise("key argument should be a string"); + } + return aControlSocket + .sendCommand("getconf " + key) + .then(info.getMultipleResponseValues); +}; + +// ## onionAuth +// A namespace for functions related to tor's ONION_CLIENT_AUTH_* commands. +let onionAuth = {}; + +onionAuth.keyInfoStringsFromMessage = utils.extractor(/^250-CLIENT\s+(.+)$/gim); + +onionAuth.keyInfoObjectsFromMessage = function(message) { + let keyInfoStrings = onionAuth.keyInfoStringsFromMessage(message); + return keyInfoStrings.map(infoStr => + utils.listMapData(infoStr, ["hsAddress", "typeAndKey"]) + ); +}; + +// __onionAuth.viewKeys()__. +// Sends a ONION_CLIENT_AUTH_VIEW command to retrieve the list of private keys. +// Returns a promise that is fulfilled with an array of key info objects which +// contain the following properties: +// hsAddress +// typeAndKey +// Flags (e.g., "Permanent") +onionAuth.viewKeys = function(aControlSocket) { + let cmd = "onion_client_auth_view"; + return aControlSocket + .sendCommand(cmd) + .then(onionAuth.keyInfoObjectsFromMessage); +}; + +// __onionAuth.add(controlSocket, hsAddress, b64PrivateKey, isPermanent)__. +// Sends a ONION_CLIENT_AUTH_ADD command to add a private key to the +// Tor configuration. +onionAuth.add = function( + aControlSocket, + hsAddress, + b64PrivateKey, + isPermanent +) { + if (!utils.isString(hsAddress)) { + return utils.rejectPromise("hsAddress argument should be a string"); + } + + if (!utils.isString(b64PrivateKey)) { + return utils.rejectPromise("b64PrivateKey argument should be a string"); + } + + const keyType = "x25519"; + let cmd = `onion_client_auth_add ${hsAddress} ${keyType}:${b64PrivateKey}`; + if (isPermanent) { + cmd += " Flags=Permanent"; + } + return aControlSocket.sendCommand(cmd); +}; + +// __onionAuth.remove(controlSocket, hsAddress)__. +// Sends a ONION_CLIENT_AUTH_REMOVE command to remove a private key from the +// Tor configuration. +onionAuth.remove = function(aControlSocket, hsAddress) { + if (!utils.isString(hsAddress)) { + return utils.rejectPromise("hsAddress argument should be a string"); + } + + let cmd = `onion_client_auth_remove ${hsAddress}`; + return aControlSocket.sendCommand(cmd); +}; + +// ## event +// Handlers for events + +let event = {}; + +// __event.parsers__. +// A map of EVENT keys to parsing functions, which convert result strings to JavaScript +// data. +event.parsers = { + stream: info.streamStatusParser, + // Currently unused: + // "circ" : info.circuitStatusParser, +}; + +// __event.messageToData(type, message)__. +// Extract the data from an event. Note, at present +// we only extract streams that look like `"650" SP...` +event.messageToData = function(type, message) { + let dataText = message.match(/^650 \S+?\s(.*)/m)[1]; + return dataText && type.toLowerCase() in event.parsers + ? event.parsers[type.toLowerCase()](dataText) + : null; +}; + +// __event.watchEvent(controlSocket, type, filter, onData)__. +// Watches for a particular type of event. If filter(data) returns true, the event's +// data is passed to the onData callback. Returns a zero arg function that +// stops watching the event. Note: we only observe `"650" SP...` events +// currently (no `650+...` or `650-...` events). +event.watchEvent = function(controlSocket, type, filter, onData, raw = false) { + return controlSocket.addNotificationCallback( + new RegExp("^650 " + type), + function(message) { + let data = event.messageToData(type, message); + if (filter === null || filter(data)) { + if (raw || !data) { + onData(message); + return; + } + onData(data); + } + } + ); +}; + +// ## tor +// Things related to the main controller. +let tor = {}; + +// __tor.controllerCache__. +// A map from "unix:socketpath" or "host:port" to controller objects. Prevents +// redundant instantiation of control sockets. +tor.controllerCache = new Map(); + +// __tor.controller(ipcFile, host, port, password)__. +// Creates a tor controller at the given ipcFile or host and port, with the +// given password. +tor.controller = async function(ipcFile, host, port, password) { + let socket = await io.controlSocket(ipcFile, host, port, password); + return { + getInfo: key => info.getInfo(socket, key), + getConf: key => info.getConf(socket, key), + onionAuthViewKeys: () => onionAuth.viewKeys(socket), + onionAuthAdd: (hsAddress, b64PrivateKey, isPermanent) => + onionAuth.add(socket, hsAddress, b64PrivateKey, isPermanent), + onionAuthRemove: hsAddress => onionAuth.remove(socket, hsAddress), + watchEvent: (type, filter, onData, raw = false) => + event.watchEvent(socket, type, filter, onData, raw), + isOpen: () => socket.isOpen(), + close: () => { + socket.close(); + }, + sendCommand: cmd => socket.sendCommand(cmd), + }; +}; + +// ## Export + +let controlPortInfo = {}; + +// __configureControlPortModule(ipcFile, host, port, password)__. +// Sets Tor control port connection parameters to be used in future calls to +// the controller() function. Example: +// configureControlPortModule(undefined, "127.0.0.1", 9151, "MyPassw0rd"); +var configureControlPortModule = function(ipcFile, host, port, password) { + controlPortInfo.ipcFile = ipcFile; + controlPortInfo.host = host; + controlPortInfo.port = port || 9151; + controlPortInfo.password = password; +}; + +// __controller(avoidCache)__. +// Instantiates and returns a controller object that is connected and +// authenticated to a Tor ControlPort using the connection parameters +// provided in the most recent call to configureControlPortModule(), if +// the controller doesn't yet exist. Otherwise returns the existing +// controller to the given ipcFile or host:port. Throws on error. +// +// Example: +// +// // Get a new controller +// const avoidCache = true; +// let c = controller(avoidCache); +// // Send command and receive `250` reply or error message in a promise: +// let replyPromise = c.getInfo("ip-to-country/16.16.16.16"); +// // Close the controller permanently +// c.close(); +var controller = async function(avoidCache) { + if (!controlPortInfo.ipcFile && !controlPortInfo.host) { + throw new Error("Please call configureControlPortModule first"); + } + + const dest = controlPortInfo.ipcFile + ? `unix:${controlPortInfo.ipcFile.path}` + : `${controlPortInfo.host}:${controlPortInfo.port}`; + + // constructor shorthand + const newTorController = async () => { + return tor.controller( + controlPortInfo.ipcFile, + controlPortInfo.host, + controlPortInfo.port, + controlPortInfo.password + ); + }; + + // avoid cache so always return a new controller + if (avoidCache) { + return newTorController(); + } + + // first check our cache and see if we already have one + let cachedController = tor.controllerCache.get(dest); + if (cachedController && cachedController.isOpen()) { + return cachedController; + } + + // create a new one and store in the map + cachedController = await newTorController(); + // overwrite the close() function to prevent consumers from closing a shared/cached controller + cachedController.close = () => { + throw new Error("May not close cached Tor Controller as it may be in use"); + }; + + tor.controllerCache.set(dest, cachedController); + return cachedController; +}; + +// __wait_for_controller(avoidCache) +// Same as controller() function, but explicitly waits until there is a tor daemon +// to connect to (either launched by tor-launcher, or if we have an existing system +// tor daemon) +var wait_for_controller = function(avoidCache) { + // if tor process is running (either ours or system) immediately return controller + if (!TorMonitorService.ownsTorDaemon || TorMonitorService.isRunning) { + return controller(avoidCache); + } + + // otherwise we must wait for tor to finish launching before resolving + return new Promise((resolve, reject) => { + let observer = { + observe: async (subject, topic, data) => { + if (topic === TorTopics.ProcessIsReady) { + try { + resolve(await controller(avoidCache)); + } catch (err) { + reject(err); + } + Services.obs.removeObserver(observer, TorTopics.ProcessIsReady); + } + }, + }; + Services.obs.addObserver(observer, TorTopics.ProcessIsReady); + }); +}; + +// Export functions for external use. +var EXPORTED_SYMBOLS = [ + "configureControlPortModule", + "controller", + "wait_for_controller", +]; diff --git a/toolkit/torbutton/modules/utils.js b/toolkit/torbutton/modules/utils.js new file mode 100644 index 000000000000..30947a737cb9 --- /dev/null +++ b/toolkit/torbutton/modules/utils.js @@ -0,0 +1,318 @@ +// # Utils.js +// Various helpful utility functions. + +// ### Import Mozilla Services +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +// ## Pref utils + +// __prefs__. A shortcut to Mozilla Services.prefs. +let prefs = Services.prefs; + +// __getPrefValue(prefName)__ +// Returns the current value of a preference, regardless of its type. +var getPrefValue = function(prefName) { + switch (prefs.getPrefType(prefName)) { + case prefs.PREF_BOOL: + return prefs.getBoolPref(prefName); + case prefs.PREF_INT: + return prefs.getIntPref(prefName); + case prefs.PREF_STRING: + return prefs.getCharPref(prefName); + default: + return null; + } +}; + +// __bindPref(prefName, prefHandler, init)__ +// Applies prefHandler whenever the value of the pref changes. +// If init is true, applies prefHandler to the current value. +// Returns a zero-arg function that unbinds the pref. +var bindPref = function(prefName, prefHandler, init = false) { + let update = () => { + prefHandler(getPrefValue(prefName)); + }, + observer = { + observe(subject, topic, data) { + if (data === prefName) { + update(); + } + }, + }; + prefs.addObserver(prefName, observer); + if (init) { + update(); + } + return () => { + prefs.removeObserver(prefName, observer); + }; +}; + +// __bindPrefAndInit(prefName, prefHandler)__ +// Applies prefHandler to the current value of pref specified by prefName. +// Re-applies prefHandler whenever the value of the pref changes. +// Returns a zero-arg function that unbinds the pref. +var bindPrefAndInit = (prefName, prefHandler) => + bindPref(prefName, prefHandler, true); + +// ## Observers + +// __observe(topic, callback)__. +// Observe the given topic. When notification of that topic +// occurs, calls callback(subject, data). Returns a zero-arg +// function that stops observing. +var observe = function(topic, callback) { + let observer = { + observe(aSubject, aTopic, aData) { + if (topic === aTopic) { + callback(aSubject, aData); + } + }, + }; + Services.obs.addObserver(observer, topic); + return () => Services.obs.removeObserver(observer, topic); +}; + +// ## Environment variables + +// __env__. +// Provides access to process environment variables. +let env = Cc["@mozilla.org/process/environment;1"].getService( + Ci.nsIEnvironment +); + +// __getEnv(name)__. +// Reads the environment variable of the given name. +var getEnv = function(name) { + return env.exists(name) ? env.get(name) : undefined; +}; + +// __getLocale +// Returns the app locale to be used in tor-related urls. +var getLocale = function() { + const locale = Services.locale.appLocaleAsBCP47; + if (locale === "ja-JP-macos") { + // We don't want to distinguish the mac locale. + return "ja"; + } + return locale; +}; + +// ## Windows + +// __dialogsByName__. +// Map of window names to dialogs. +let dialogsByName = {}; + +// __showDialog(parent, url, name, features, arg1, arg2, ...)__. +// Like window.openDialog, but if the window is already +// open, just focuses it instead of opening a new one. +var showDialog = function(parent, url, name, features) { + let existingDialog = dialogsByName[name]; + if (existingDialog && !existingDialog.closed) { + existingDialog.focus(); + return existingDialog; + } + let newDialog = parent.openDialog.apply(parent, Array.slice(arguments, 1)); + dialogsByName[name] = newDialog; + return newDialog; +}; + +// ## Tor control protocol utility functions + +let _torControl = { + // Unescape Tor Control string aStr (removing surrounding "" and \ escapes). + // Based on Vidalia's src/common/stringutil.cpp:string_unescape(). + // Returns the unescaped string. Throws upon failure. + // Within Tor Launcher, the file components/tl-protocol.js also contains a + // copy of _strUnescape(). + _strUnescape(aStr) { + if (!aStr) { + return aStr; + } + + var len = aStr.length; + if (len < 2 || '"' != aStr.charAt(0) || '"' != aStr.charAt(len - 1)) { + return aStr; + } + + const kHexRE = /[0-9A-Fa-f]{2}/; + const kOctalRE = /[0-7]{3}/; + var rv = ""; + var i = 1; + var lastCharIndex = len - 2; + while (i <= lastCharIndex) { + var c = aStr.charAt(i); + if ("\" == c) { + if (++i > lastCharIndex) { + throw new Error("missing character after \"); + } + + c = aStr.charAt(i); + if ("n" == c) { + rv += "\n"; + } else if ("r" == c) { + rv += "\r"; + } else if ("t" == c) { + rv += "\t"; + } else if ("x" == c) { + if (i + 2 > lastCharIndex) { + throw new Error("not enough hex characters"); + } + + let s = aStr.substr(i + 1, 2); + if (!kHexRE.test(s)) { + throw new Error("invalid hex characters"); + } + + let val = parseInt(s, 16); + rv += String.fromCharCode(val); + i += 3; + } else if (this._isDigit(c)) { + let s = aStr.substr(i, 3); + if (i + 2 > lastCharIndex) { + throw new Error("not enough octal characters"); + } + + if (!kOctalRE.test(s)) { + throw new Error("invalid octal characters"); + } + + let val = parseInt(s, 8); + rv += String.fromCharCode(val); + i += 3; + } // "\" and others + else { + rv += c; + ++i; + } + } else if ('"' == c) { + throw new Error('unescaped " within string'); + } else { + rv += c; + ++i; + } + } + + // Convert from UTF-8 to Unicode. TODO: is UTF-8 always used in protocol? + return decodeURIComponent(escape(rv)); + }, // _strUnescape() + + // Within Tor Launcher, the file components/tl-protocol.js also contains a + // copy of _isDigit(). + _isDigit(aChar) { + const kRE = /^\d$/; + return aChar && kRE.test(aChar); + }, +}; // _torControl + +// __unescapeTorString(str, resultObj)__. +// Unescape Tor Control string str (removing surrounding "" and \ escapes). +// Returns the unescaped string. Throws upon failure. +var unescapeTorString = function(str) { + return _torControl._strUnescape(str); +}; + +var getFPDFromHost = hostname => { + try { + return Services.eTLD.getBaseDomainFromHost(hostname); + } catch (e) { + if ( + e.result == Cr.NS_ERROR_HOST_IS_IP_ADDRESS || + e.result == Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS + ) { + return hostname; + } + } + return null; +}; + +// Assuming this is called with gBrowser.selectedBrowser +var getDomainForBrowser = browser => { + let fpd = browser.contentPrincipal.originAttributes.firstPartyDomain; + // Bug 31562: For neterror or certerror, get the original URL from + // browser.currentURI and use it to calculate the firstPartyDomain. + let knownErrors = ["about:neterror", "about:certerror"]; + let documentURI = browser.documentURI; + if ( + documentURI && + documentURI.schemeIs("about") && + knownErrors.some(x => documentURI.spec.startsWith(x)) + ) { + let knownSchemes = ["http", "https", "ftp"]; + let currentURI = browser.currentURI; + if (currentURI && knownSchemes.some(x => currentURI.schemeIs(x))) { + fpd = getFPDFromHost(currentURI.host) || fpd; + } + } + return fpd; +}; + +var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"].getService( + Ci.nsISupports +).wrappedJSObject; + +var m_tb_string_bundle = torbutton_get_stringbundle(); + +function torbutton_safelog(nLevel, sMsg, scrub) { + m_tb_torlog.safe_log(nLevel, sMsg, scrub); + return true; +} + +function torbutton_log(nLevel, sMsg) { + m_tb_torlog.log(nLevel, sMsg); + + // So we can use it in boolean expressions to determine where the + // short-circuit is.. + return true; +} + +// load localization strings +function torbutton_get_stringbundle() { + var o_stringbundle = false; + + try { + var oBundle = Services.strings; + o_stringbundle = oBundle.createBundle( + "chrome://torbutton/locale/torbutton.properties" + ); + } catch (err) { + o_stringbundle = false; + } + if (!o_stringbundle) { + torbutton_log(5, "ERROR (init): failed to find torbutton-bundle"); + } + + return o_stringbundle; +} + +function torbutton_get_property_string(propertyname) { + try { + if (!m_tb_string_bundle) { + m_tb_string_bundle = torbutton_get_stringbundle(); + } + + return m_tb_string_bundle.GetStringFromName(propertyname); + } catch (e) { + torbutton_log(4, "Unlocalized string " + propertyname); + } + + return propertyname; +} + +// Export utility functions for external use. +let EXPORTED_SYMBOLS = [ + "bindPref", + "bindPrefAndInit", + "getEnv", + "getLocale", + "getDomainForBrowser", + "getPrefValue", + "observe", + "showDialog", + "show_torbrowser_manual", + "unescapeTorString", + "torbutton_safelog", + "torbutton_log", + "torbutton_get_property_string", +]; diff --git a/toolkit/torbutton/moz.build b/toolkit/torbutton/moz.build new file mode 100644 index 000000000000..376c99765de4 --- /dev/null +++ b/toolkit/torbutton/moz.build @@ -0,0 +1,6 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +JAR_MANIFESTS += ['jar.mn'] diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js index c24943e9dee3..de0091ae8d4d 100644 --- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js +++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js @@ -83,7 +83,11 @@ function getGlobalScriptIncludes(scriptPath) { "browser/components/screenshots/content/" ) .replace("chrome://browser/content/", "browser/base/content/") - .replace("chrome://global/content/", "toolkit/content/"); + .replace("chrome://global/content/", "toolkit/content/") + .replace( + "chrome://torbutton/content/", + "toolkit/torproject/torbutton/chrome/content/" + );
for (let mapping of Object.getOwnPropertyNames(MAPPINGS)) { if (sourceFile.includes(mapping)) {
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 17fffe581aaa80dd024215a6c5144dd303ecada6 Author: Amogh Pradeep amoghbl1@gmail.com AuthorDate: Fri Jun 12 02:07:45 2015 -0400
Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
See Bug 1357997 for partial uplift.
Also: Bug 28051 - Use our Orbot for proxying our connections
Bug 31144 - ESR68 Network Code Review --- .../java/org/mozilla/gecko/util/ProxySelector.java | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java index 2fb4015f4126..5925da91d6da 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java @@ -28,6 +28,10 @@ import java.net.URLConnection; import java.util.List;
public class ProxySelector { + private static final String TOR_PROXY_ADDRESS = "127.0.0.1"; + private static final int TOR_SOCKS_PROXY_PORT = 9150; + private static final int TOR_HTTP_PROXY_PORT = 8218; + public static URLConnection openConnectionWithProxy(final URI uri) throws IOException { final java.net.ProxySelector ps = java.net.ProxySelector.getDefault(); Proxy proxy = Proxy.NO_PROXY; @@ -38,7 +42,26 @@ public class ProxySelector { } }
- return uri.toURL().openConnection(proxy); + /* Ignore the proxy we found from the VM, only use Tor. We can probably + * safely use the logic in this class in the future. */ + return uri.toURL().openConnection(getProxy()); + } + + public static Proxy getProxy() { + // TODO make configurable + return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_SOCKS_PROXY_PORT)); + } + + public static String getProxyHostAddress() { + return TOR_PROXY_ADDRESS; + } + + public static int getSocksProxyPort() { + return TOR_SOCKS_PROXY_PORT; + } + + public static int getHttpProxyPort() { + return TOR_HTTP_PROXY_PORT; }
public ProxySelector() {}
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 643de037c6dbe25bbfd1fabf5f4e2a00685cd2af Author: Alex Catarineu acat@torproject.org AuthorDate: Fri Jul 24 21:15:20 2020 +0200
Add TorStrings module for localization --- browser/modules/TorStrings.jsm | 936 +++++++++++++++++++++ browser/modules/moz.build | 1 + toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ar/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ar/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ar/brand.dtd | 19 + .../torbutton/chrome/locale/ar/brand.properties | 20 + .../torbutton/chrome/locale/ar/branding/brand.ftl | 12 + .../chrome/locale/ar/browserOnboarding.properties | 72 ++ .../chrome/locale/ar/network-settings.dtd | 179 ++++ .../chrome/locale/ar/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ar/torbutton.dtd | 56 ++ .../chrome/locale/ar/torbutton.properties | 187 ++++ .../chrome/locale/ar/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ca/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ca/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ca/brand.dtd | 19 + .../torbutton/chrome/locale/ca/brand.properties | 20 + .../torbutton/chrome/locale/ca/branding/brand.ftl | 12 + .../chrome/locale/ca/browserOnboarding.properties | 72 ++ .../chrome/locale/ca/network-settings.dtd | 180 ++++ .../chrome/locale/ca/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ca/torbutton.dtd | 56 ++ .../chrome/locale/ca/torbutton.properties | 187 ++++ .../chrome/locale/ca/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/cs/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/cs/aboutTor.dtd | 41 + toolkit/torbutton/chrome/locale/cs/brand.dtd | 19 + .../torbutton/chrome/locale/cs/brand.properties | 20 + .../torbutton/chrome/locale/cs/branding/brand.ftl | 12 + .../chrome/locale/cs/browserOnboarding.properties | 72 ++ .../chrome/locale/cs/network-settings.dtd | 179 ++++ .../chrome/locale/cs/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/cs/torbutton.dtd | 56 ++ .../chrome/locale/cs/torbutton.properties | 187 ++++ .../chrome/locale/cs/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/da/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/da/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/da/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/da/brand.dtd | 19 + .../torbutton/chrome/locale/da/brand.properties | 20 + .../torbutton/chrome/locale/da/branding/brand.ftl | 12 + .../chrome/locale/da/browserOnboarding.properties | 72 ++ .../chrome/locale/da/network-settings.dtd | 179 ++++ .../chrome/locale/da/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/da/torbutton.dtd | 56 ++ .../chrome/locale/da/torbutton.properties | 187 ++++ .../chrome/locale/da/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/de/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/de/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/de/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/de/brand.dtd | 19 + .../torbutton/chrome/locale/de/brand.properties | 20 + .../torbutton/chrome/locale/de/branding/brand.ftl | 12 + .../chrome/locale/de/browserOnboarding.properties | 72 ++ .../chrome/locale/de/network-settings.dtd | 179 ++++ .../chrome/locale/de/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/de/torbutton.dtd | 56 ++ .../chrome/locale/de/torbutton.properties | 187 ++++ .../chrome/locale/de/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/el/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/el/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/el/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/el/brand.dtd | 19 + .../torbutton/chrome/locale/el/brand.properties | 20 + .../torbutton/chrome/locale/el/branding/brand.ftl | 12 + .../chrome/locale/el/browserOnboarding.properties | 72 ++ .../chrome/locale/el/network-settings.dtd | 179 ++++ .../chrome/locale/el/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/el/torbutton.dtd | 56 ++ .../chrome/locale/el/torbutton.properties | 187 ++++ .../chrome/locale/el/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/en-US/aboutDialog.dtd | 19 + .../chrome/locale/en-US/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/en-US/brand.dtd | 19 + .../torbutton/chrome/locale/en-US/brand.properties | 20 + .../chrome/locale/en-US/branding/brand.ftl | 12 + .../locale/en-US/browserOnboarding.properties | 72 ++ .../chrome/locale/en-US/network-settings.dtd | 179 ++++ .../chrome/locale/en-US/onboarding.properties | 19 + .../torbutton/chrome/locale/en-US/torbutton.dtd | 56 ++ .../chrome/locale/en-US/torbutton.properties | 187 ++++ .../chrome/locale/en-US/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/es-ES/aboutDialog.dtd | 19 + .../chrome/locale/es-ES/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/es-ES/brand.dtd | 19 + .../torbutton/chrome/locale/es-ES/brand.properties | 20 + .../chrome/locale/es-ES/branding/brand.ftl | 12 + .../locale/es-ES/browserOnboarding.properties | 72 ++ .../chrome/locale/es-ES/network-settings.dtd | 179 ++++ .../chrome/locale/es-ES/onboarding.properties | 19 + .../torbutton/chrome/locale/es-ES/torbutton.dtd | 56 ++ .../chrome/locale/es-ES/torbutton.properties | 187 ++++ .../chrome/locale/es-ES/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/fa/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/fa/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/fa/brand.dtd | 19 + .../torbutton/chrome/locale/fa/brand.properties | 20 + .../torbutton/chrome/locale/fa/branding/brand.ftl | 12 + .../chrome/locale/fa/browserOnboarding.properties | 72 ++ .../chrome/locale/fa/network-settings.dtd | 179 ++++ .../chrome/locale/fa/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/fa/torbutton.dtd | 56 ++ .../chrome/locale/fa/torbutton.properties | 187 ++++ .../chrome/locale/fa/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/fr/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/fr/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/fr/brand.dtd | 19 + .../torbutton/chrome/locale/fr/brand.properties | 20 + .../torbutton/chrome/locale/fr/branding/brand.ftl | 12 + .../chrome/locale/fr/browserOnboarding.properties | 72 ++ .../chrome/locale/fr/network-settings.dtd | 181 ++++ .../chrome/locale/fr/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/fr/torbutton.dtd | 56 ++ .../chrome/locale/fr/torbutton.properties | 187 ++++ .../chrome/locale/fr/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/ga-IE/aboutDialog.dtd | 19 + .../chrome/locale/ga-IE/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ga-IE/brand.dtd | 19 + .../torbutton/chrome/locale/ga-IE/brand.properties | 20 + .../chrome/locale/ga-IE/branding/brand.ftl | 12 + .../locale/ga-IE/browserOnboarding.properties | 72 ++ .../chrome/locale/ga-IE/network-settings.dtd | 179 ++++ .../chrome/locale/ga-IE/onboarding.properties | 19 + .../torbutton/chrome/locale/ga-IE/torbutton.dtd | 56 ++ .../chrome/locale/ga-IE/torbutton.properties | 187 ++++ .../chrome/locale/ga-IE/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/he/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/he/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/he/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/he/brand.dtd | 19 + .../torbutton/chrome/locale/he/brand.properties | 20 + .../torbutton/chrome/locale/he/branding/brand.ftl | 12 + .../chrome/locale/he/browserOnboarding.properties | 72 ++ .../chrome/locale/he/network-settings.dtd | 179 ++++ .../chrome/locale/he/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/he/torbutton.dtd | 56 ++ .../chrome/locale/he/torbutton.properties | 187 ++++ .../chrome/locale/he/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/hu/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/hu/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/hu/brand.dtd | 19 + .../torbutton/chrome/locale/hu/brand.properties | 20 + .../torbutton/chrome/locale/hu/branding/brand.ftl | 12 + .../chrome/locale/hu/browserOnboarding.properties | 72 ++ .../chrome/locale/hu/network-settings.dtd | 179 ++++ .../chrome/locale/hu/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/hu/torbutton.dtd | 56 ++ .../chrome/locale/hu/torbutton.properties | 187 ++++ .../chrome/locale/hu/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/id/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/id/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/id/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/id/brand.dtd | 19 + .../torbutton/chrome/locale/id/brand.properties | 20 + .../torbutton/chrome/locale/id/branding/brand.ftl | 12 + .../chrome/locale/id/browserOnboarding.properties | 72 ++ .../chrome/locale/id/network-settings.dtd | 179 ++++ .../chrome/locale/id/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/id/torbutton.dtd | 56 ++ .../chrome/locale/id/torbutton.properties | 187 ++++ .../chrome/locale/id/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/is/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/is/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/is/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/is/brand.dtd | 19 + .../torbutton/chrome/locale/is/brand.properties | 20 + .../torbutton/chrome/locale/is/branding/brand.ftl | 12 + .../chrome/locale/is/browserOnboarding.properties | 72 ++ .../chrome/locale/is/network-settings.dtd | 179 ++++ .../chrome/locale/is/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/is/torbutton.dtd | 56 ++ .../chrome/locale/is/torbutton.properties | 187 ++++ .../chrome/locale/is/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/it/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/it/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/it/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/it/brand.dtd | 19 + .../torbutton/chrome/locale/it/brand.properties | 20 + .../torbutton/chrome/locale/it/branding/brand.ftl | 12 + .../chrome/locale/it/browserOnboarding.properties | 72 ++ .../chrome/locale/it/network-settings.dtd | 179 ++++ .../chrome/locale/it/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/it/torbutton.dtd | 56 ++ .../chrome/locale/it/torbutton.properties | 187 ++++ .../chrome/locale/it/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ja/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ja/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ja/brand.dtd | 19 + .../torbutton/chrome/locale/ja/brand.properties | 20 + .../torbutton/chrome/locale/ja/branding/brand.ftl | 12 + .../chrome/locale/ja/browserOnboarding.properties | 72 ++ .../chrome/locale/ja/network-settings.dtd | 179 ++++ .../chrome/locale/ja/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ja/torbutton.dtd | 56 ++ .../chrome/locale/ja/torbutton.properties | 187 ++++ .../chrome/locale/ja/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ka/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ka/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ka/brand.dtd | 19 + .../torbutton/chrome/locale/ka/brand.properties | 20 + .../torbutton/chrome/locale/ka/branding/brand.ftl | 12 + .../chrome/locale/ka/browserOnboarding.properties | 72 ++ .../chrome/locale/ka/network-settings.dtd | 179 ++++ .../chrome/locale/ka/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ka/torbutton.dtd | 56 ++ .../chrome/locale/ka/torbutton.properties | 187 ++++ .../chrome/locale/ka/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ko/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ko/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ko/brand.dtd | 19 + .../torbutton/chrome/locale/ko/brand.properties | 20 + .../torbutton/chrome/locale/ko/branding/brand.ftl | 12 + .../chrome/locale/ko/browserOnboarding.properties | 72 ++ .../chrome/locale/ko/network-settings.dtd | 179 ++++ .../chrome/locale/ko/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ko/torbutton.dtd | 56 ++ .../chrome/locale/ko/torbutton.properties | 187 ++++ .../chrome/locale/ko/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/lt/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/lt/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/lt/brand.dtd | 19 + .../torbutton/chrome/locale/lt/brand.properties | 20 + .../torbutton/chrome/locale/lt/branding/brand.ftl | 12 + .../chrome/locale/lt/browserOnboarding.properties | 72 ++ .../chrome/locale/lt/network-settings.dtd | 179 ++++ .../chrome/locale/lt/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/lt/torbutton.dtd | 56 ++ .../chrome/locale/lt/torbutton.properties | 187 ++++ .../chrome/locale/lt/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/mk/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/mk/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/mk/brand.dtd | 19 + .../torbutton/chrome/locale/mk/brand.properties | 20 + .../torbutton/chrome/locale/mk/branding/brand.ftl | 12 + .../chrome/locale/mk/browserOnboarding.properties | 72 ++ .../chrome/locale/mk/network-settings.dtd | 179 ++++ .../chrome/locale/mk/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/mk/torbutton.dtd | 56 ++ .../chrome/locale/mk/torbutton.properties | 187 ++++ .../chrome/locale/mk/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ms/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ms/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ms/brand.dtd | 19 + .../torbutton/chrome/locale/ms/brand.properties | 20 + .../torbutton/chrome/locale/ms/branding/brand.ftl | 12 + .../chrome/locale/ms/browserOnboarding.properties | 72 ++ .../chrome/locale/ms/network-settings.dtd | 179 ++++ .../chrome/locale/ms/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ms/torbutton.dtd | 56 ++ .../chrome/locale/ms/torbutton.properties | 187 ++++ .../chrome/locale/ms/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/my/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/my/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/my/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/my/brand.dtd | 19 + .../torbutton/chrome/locale/my/brand.properties | 20 + .../torbutton/chrome/locale/my/branding/brand.ftl | 12 + .../chrome/locale/my/browserOnboarding.properties | 72 ++ .../chrome/locale/my/network-settings.dtd | 179 ++++ toolkit/torbutton/chrome/locale/my/torbutton.dtd | 56 ++ .../chrome/locale/my/torbutton.properties | 187 ++++ .../chrome/locale/my/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/nb-NO/aboutDialog.dtd | 19 + .../chrome/locale/nb-NO/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/nb-NO/brand.dtd | 19 + .../torbutton/chrome/locale/nb-NO/brand.properties | 20 + .../chrome/locale/nb-NO/branding/brand.ftl | 12 + .../locale/nb-NO/browserOnboarding.properties | 72 ++ .../chrome/locale/nb-NO/network-settings.dtd | 179 ++++ .../chrome/locale/nb-NO/onboarding.properties | 19 + .../torbutton/chrome/locale/nb-NO/torbutton.dtd | 56 ++ .../chrome/locale/nb-NO/torbutton.properties | 187 ++++ .../chrome/locale/nb-NO/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/nl/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/nl/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/nl/brand.dtd | 19 + .../torbutton/chrome/locale/nl/brand.properties | 20 + .../torbutton/chrome/locale/nl/branding/brand.ftl | 12 + .../chrome/locale/nl/browserOnboarding.properties | 72 ++ .../chrome/locale/nl/network-settings.dtd | 179 ++++ .../chrome/locale/nl/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/nl/torbutton.dtd | 56 ++ .../chrome/locale/nl/torbutton.properties | 187 ++++ .../chrome/locale/nl/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/pl/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/pl/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/pl/brand.dtd | 19 + .../torbutton/chrome/locale/pl/brand.properties | 20 + .../torbutton/chrome/locale/pl/branding/brand.ftl | 12 + .../chrome/locale/pl/browserOnboarding.properties | 72 ++ .../chrome/locale/pl/network-settings.dtd | 179 ++++ .../chrome/locale/pl/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/pl/torbutton.dtd | 56 ++ .../chrome/locale/pl/torbutton.properties | 187 ++++ .../chrome/locale/pl/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/pt-BR/aboutDialog.dtd | 19 + .../chrome/locale/pt-BR/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/pt-BR/brand.dtd | 19 + .../torbutton/chrome/locale/pt-BR/brand.properties | 20 + .../chrome/locale/pt-BR/branding/brand.ftl | 12 + .../locale/pt-BR/browserOnboarding.properties | 72 ++ .../chrome/locale/pt-BR/network-settings.dtd | 179 ++++ .../chrome/locale/pt-BR/onboarding.properties | 19 + .../torbutton/chrome/locale/pt-BR/torbutton.dtd | 56 ++ .../chrome/locale/pt-BR/torbutton.properties | 187 ++++ .../chrome/locale/pt-BR/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ro/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ro/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ro/brand.dtd | 19 + .../torbutton/chrome/locale/ro/brand.properties | 20 + .../torbutton/chrome/locale/ro/branding/brand.ftl | 12 + .../chrome/locale/ro/browserOnboarding.properties | 72 ++ .../chrome/locale/ro/network-settings.dtd | 179 ++++ .../chrome/locale/ro/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ro/torbutton.dtd | 57 ++ .../chrome/locale/ro/torbutton.properties | 187 ++++ .../chrome/locale/ro/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/ru/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/ru/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/ru/brand.dtd | 19 + .../torbutton/chrome/locale/ru/brand.properties | 20 + .../torbutton/chrome/locale/ru/branding/brand.ftl | 12 + .../chrome/locale/ru/browserOnboarding.properties | 72 ++ .../chrome/locale/ru/network-settings.dtd | 179 ++++ .../chrome/locale/ru/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/ru/torbutton.dtd | 56 ++ .../chrome/locale/ru/torbutton.properties | 187 ++++ .../chrome/locale/ru/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/sq/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/sq/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/sq/brand.dtd | 19 + .../torbutton/chrome/locale/sq/brand.properties | 20 + .../torbutton/chrome/locale/sq/branding/brand.ftl | 12 + .../chrome/locale/sq/browserOnboarding.properties | 72 ++ .../chrome/locale/sq/network-settings.dtd | 179 ++++ .../chrome/locale/sq/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/sq/torbutton.dtd | 56 ++ .../chrome/locale/sq/torbutton.properties | 187 ++++ .../chrome/locale/sq/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/sv-SE/aboutDialog.dtd | 19 + .../chrome/locale/sv-SE/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/sv-SE/brand.dtd | 19 + .../torbutton/chrome/locale/sv-SE/brand.properties | 20 + .../chrome/locale/sv-SE/branding/brand.ftl | 12 + .../locale/sv-SE/browserOnboarding.properties | 72 ++ .../chrome/locale/sv-SE/network-settings.dtd | 179 ++++ .../chrome/locale/sv-SE/onboarding.properties | 19 + .../torbutton/chrome/locale/sv-SE/torbutton.dtd | 56 ++ .../chrome/locale/sv-SE/torbutton.properties | 187 ++++ .../chrome/locale/sv-SE/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/th/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/th/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/th/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/th/brand.dtd | 19 + .../torbutton/chrome/locale/th/brand.properties | 20 + .../torbutton/chrome/locale/th/branding/brand.ftl | 12 + .../chrome/locale/th/browserOnboarding.properties | 72 ++ .../chrome/locale/th/network-settings.dtd | 179 ++++ .../chrome/locale/th/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/th/torbutton.dtd | 56 ++ .../chrome/locale/th/torbutton.properties | 187 ++++ .../chrome/locale/th/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/tr/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/tr/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/tr/brand.dtd | 19 + .../torbutton/chrome/locale/tr/brand.properties | 20 + .../torbutton/chrome/locale/tr/branding/brand.ftl | 12 + .../chrome/locale/tr/browserOnboarding.properties | 72 ++ .../chrome/locale/tr/network-settings.dtd | 179 ++++ .../chrome/locale/tr/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/tr/torbutton.dtd | 56 ++ .../chrome/locale/tr/torbutton.properties | 187 ++++ .../chrome/locale/tr/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/uk/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/uk/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/uk/brand.dtd | 19 + .../torbutton/chrome/locale/uk/brand.properties | 20 + .../torbutton/chrome/locale/uk/branding/brand.ftl | 12 + .../chrome/locale/uk/browserOnboarding.properties | 72 ++ .../chrome/locale/uk/network-settings.dtd | 179 ++++ .../chrome/locale/uk/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/uk/torbutton.dtd | 56 ++ .../chrome/locale/uk/torbutton.properties | 187 ++++ .../chrome/locale/uk/torlauncher.properties | 97 +++ toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd | 19 + .../torbutton/chrome/locale/vi/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/vi/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/vi/brand.dtd | 19 + .../torbutton/chrome/locale/vi/brand.properties | 20 + .../torbutton/chrome/locale/vi/branding/brand.ftl | 12 + .../chrome/locale/vi/browserOnboarding.properties | 72 ++ .../chrome/locale/vi/network-settings.dtd | 179 ++++ .../chrome/locale/vi/onboarding.properties | 19 + toolkit/torbutton/chrome/locale/vi/torbutton.dtd | 56 ++ .../chrome/locale/vi/torbutton.properties | 187 ++++ .../chrome/locale/vi/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/zh-CN/aboutDialog.dtd | 19 + .../chrome/locale/zh-CN/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/zh-CN/brand.dtd | 19 + .../torbutton/chrome/locale/zh-CN/brand.properties | 20 + .../chrome/locale/zh-CN/branding/brand.ftl | 12 + .../locale/zh-CN/browserOnboarding.properties | 72 ++ .../chrome/locale/zh-CN/network-settings.dtd | 179 ++++ .../chrome/locale/zh-CN/onboarding.properties | 19 + .../torbutton/chrome/locale/zh-CN/torbutton.dtd | 56 ++ .../chrome/locale/zh-CN/torbutton.properties | 187 ++++ .../chrome/locale/zh-CN/torlauncher.properties | 97 +++ .../torbutton/chrome/locale/zh-TW/aboutDialog.dtd | 19 + .../chrome/locale/zh-TW/aboutTBUpdate.dtd | 8 + toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd | 60 ++ toolkit/torbutton/chrome/locale/zh-TW/brand.dtd | 19 + .../torbutton/chrome/locale/zh-TW/brand.properties | 20 + .../chrome/locale/zh-TW/branding/brand.ftl | 12 + .../locale/zh-TW/browserOnboarding.properties | 72 ++ .../chrome/locale/zh-TW/network-settings.dtd | 179 ++++ .../chrome/locale/zh-TW/onboarding.properties | 19 + .../torbutton/chrome/locale/zh-TW/torbutton.dtd | 56 ++ .../chrome/locale/zh-TW/torbutton.properties | 187 ++++ .../chrome/locale/zh-TW/torlauncher.properties | 97 +++ toolkit/torbutton/import-translations.sh | 121 +++ toolkit/torbutton/jar.mn | 83 ++ 447 files changed, 28783 insertions(+)
diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm new file mode 100644 index 000000000000..0b2fc1eea11b --- /dev/null +++ b/browser/modules/TorStrings.jsm @@ -0,0 +1,936 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["TorStrings"]; + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { getLocale } = ChromeUtils.import( + "resource://torbutton/modules/utils.js" +); + +XPCOMUtils.defineLazyGlobalGetters(this, ["DOMParser"]); +XPCOMUtils.defineLazyGetter(this, "domParser", () => { + const parser = new DOMParser(); + parser.forceEnableDTD(); + return parser; +}); + +/* + Tor DTD String Bundle + + DTD strings loaded from torbutton/tor-launcher, but provide a fallback in case they aren't available +*/ +class TorDTDStringBundle { + constructor(aBundleURLs, aPrefix) { + const locations = []; + for (const [index, url] of aBundleURLs.entries()) { + locations.push(`<!ENTITY % dtd_${index} SYSTEM "${url}">%dtd_${index};`); + } + this._locations = locations; + this._prefix = aPrefix; + const idx = aBundleURLs.lastIndexOf("/"); + this._filename = idx === -1 ? aBundleURLs : aBundleURLs.substring(idx); + } + + // copied from testing/marionette/l10n.js + localizeEntity(urls, id) { + // Use the DOM parser to resolve the entity and extract its real value + const header = `<?xml version="1.0"?><!DOCTYPE elem [${this._locations.join( + "" + )}]>`; + const elem = `<elem id="elementID">&${id};</elem>`; + const doc = domParser.parseFromString(header + elem, "text/xml"); + const element = doc.querySelector("elem[id='elementID']"); + + if (element === null) { + throw new Error(`Entity with id='${id}' hasn't been found`); + } + + return element.textContent; + } + + getString(key, fallback) { + if (key) { + try { + return this.localizeEntity(this._bundleURLs, `${this._prefix}${key}`); + } catch (e) { + console.warn(`[TorStrings] Cannot get ${key} on ${this._filename}`, e); + } + } + + // on failure, assign the fallback if it exists + if (fallback) { + return fallback; + } + // otherwise return string key + return `$(${key})`; + } +} + +/* + Tor Property String Bundle + + Property strings loaded from torbutton/tor-launcher, but provide a fallback in case they aren't available +*/ +class TorPropertyStringBundle { + constructor(aBundleURL, aPrefix) { + try { + this._bundle = Services.strings.createBundle(aBundleURL); + } catch (e) {} + + this._prefix = aPrefix; + } + + getString(key, fallback) { + if (key) { + try { + return this._bundle.GetStringFromName(`${this._prefix}${key}`); + } catch (e) {} + } + + // on failure, assign the fallback if it exists + if (fallback) { + return fallback; + } + // otherwise return string key + return `$(${key})`; + } +} + +const Loader = { + /* + Tor about:preferences#connection Strings + */ + settings() { + const tsb = new TorDTDStringBundle( + ["chrome://torbutton/locale/network-settings.dtd"], + "" + ); + const getString = tsb.getString.bind(tsb); + + const retval = { + categoryTitle: getString("torPreferences.categoryTitle", "Connection"), + // Message box + torPreferencesDescription: getString( + "torPreferences.torSettingsDescription", + "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." + ), + // Status + statusInternetLabel: getString( + "torPreferences.statusInternetLabel", + "Internet:" + ), + statusInternetTest: getString( + "torPreferences.statusInternetTest", + "Test" + ), + statusInternetOnline: getString( + "torPreferences.statusInternetOnline", + "Online" + ), + statusInternetOffline: getString( + "torPreferences.statusInternetOffline", + "Offline" + ), + statusTorLabel: getString( + "torPreferences.statusTorLabel", + "Tor Network:" + ), + statusTorConnected: getString( + "torPreferences.statusTorConnected", + "Connected" + ), + statusTorNotConnected: getString( + "torPreferences.statusTorNotConnected", + "Not Connected" + ), + statusTorBlocked: getString( + "torPreferences.statusTorBlocked", + "Potentially Blocked" + ), + learnMore: getString("torPreferences.learnMore", "Learn more"), + // Quickstart + quickstartHeading: getString("torPreferences.quickstart", "Quickstart"), + quickstartDescription: getString( + "torPreferences.quickstartDescriptionLong", + "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings." + ), + quickstartCheckbox: getString( + "torPreferences.quickstartCheckbox", + "Always connect automatically" + ), + // Bridge settings + bridgesHeading: getString("torPreferences.bridges", "Bridges"), + bridgesDescription: getString( + "torPreferences.bridgesDescription", + "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another." + ), + bridgeLocation: getString( + "torPreferences.bridgeLocation", + "Your location" + ), + bridgeLocationAutomatic: getString( + "torPreferences.bridgeLocationAutomatic", + "Automatic" + ), + bridgeLocationFrequent: getString( + "torPreferences.bridgeLocationFrequent", + "Frequently selected locations" + ), + bridgeLocationOther: getString( + "torPreferences.bridgeLocationOther", + "Other locations" + ), + bridgeChooseForMe: getString( + "torPreferences.bridgeChooseForMe", + "Choose a Bridge For Me\u2026" + ), + bridgeCurrent: getString( + "torPreferences.bridgeBadgeCurrent", + "Your Current Bridges" + ), + bridgeCurrentDescription: getString( + "torPreferences.bridgeBadgeCurrentDescription", + "You can keep one or more bridges saved, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed." + ), + bridgeId: getString("torPreferences.bridgeId", "#1 bridge: #2"), + remove: getString("torPreferences.remove", "Remove"), + bridgeDisableBuiltIn: getString( + "torPreferences.bridgeDisableBuiltIn", + "Disable built-in bridges" + ), + bridgeShare: getString( + "torPreferences.bridgeShare", + "Share this bridge using the QR code or by copying its address:" + ), + bridgeCopy: getString("torPreferences.bridgeCopy", "Copy Bridge Address"), + copied: getString("torPreferences.copied", "Copied!"), + bridgeShowAll: getString( + "torPreferences.bridgeShowAll", + "Show All Bridges" + ), + bridgeRemoveAll: getString( + "torPreferences.bridgeRemoveAll", + "Remove All Bridges" + ), + bridgeAdd: getString("torPreferences.bridgeAdd", "Add a New Bridge"), + bridgeSelectBrowserBuiltin: getString( + "torPreferences.bridgeSelectBrowserBuiltin", + "Choose from one of Tor Browser’s built-in bridges" + ), + bridgeSelectBuiltin: getString( + "torPreferences.bridgeSelectBuiltin", + "Select a Built-In Bridge\u2026" + ), + bridgeRequestFromTorProject: getString( + "torsettings.useBridges.bridgeDB", + "Request a bridge from torproject.org" + ), + bridgeRequest: getString( + "torPreferences.bridgeRequest", + "Request a Bridge\u2026" + ), + bridgeEnterKnown: getString( + "torPreferences.bridgeEnterKnown", + "Enter a bridge address you already know" + ), + bridgeAddManually: getString( + "torPreferences.bridgeAddManually", + "Add a Bridge Manually\u2026" + ), + // Advanced settings + advancedHeading: getString("torPreferences.advanced", "Advanced"), + advancedLabel: getString( + "torPreferences.advancedDescription", + "Configure how Tor Browser connects to the internet" + ), + advancedButton: getString( + "torPreferences.advancedButton", + "Settings\u2026" + ), + showTorDaemonLogs: getString( + "torPreferences.viewTorLogs", + "View the Tor logs" + ), + showLogs: getString("torPreferences.viewLogs", "View Logs\u2026"), + // Remove all bridges dialog + removeBridgesQuestion: getString( + "torPreferences.removeBridgesQuestion", + "Remove all the bridges?" + ), + removeBridgesWarning: getString( + "torPreferences.removeBridgesWarning", + "This action cannot be undone." + ), + cancel: getString("torPreferences.cancel", "Cancel"), + // Scan bridge QR dialog + scanQrTitle: getString("torPreferences.scanQrTitle", "Scan the QR code"), + // Builtin bridges dialog + builtinBridgeTitle: getString( + "torPreferences.builtinBridgeTitle", + "Built-In Bridges" + ), + builtinBridgeHeader: getString( + "torsettings.useBridges.default", + "Select a Built-In Bridge" + ), + builtinBridgeDescription: getString( + "torPreferences.builtinBridgeDescription", + "Tor Browser includes some specific types of bridges known as “pluggable transports”." + ), + builtinBridgeObfs4: getString( + "torPreferences.builtinBridgeObfs4", + "obfs4" + ), + builtinBridgeObfs4Description: getString( + "torPreferences.builtinBridgeObfs4Description", + "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges." + ), + builtinBridgeSnowflake: getString( + "torPreferences.builtinBridgeSnowflake", + "Snowflake" + ), + builtinBridgeSnowflakeDescription: getString( + "torPreferences.builtinBridgeSnowflakeDescription", + "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers." + ), + builtinBridgeMeekAzure: getString( + "torPreferences.builtinBridgeMeekAzure", + "meek-azure" + ), + builtinBridgeMeekAzureDescription: getString( + "torPreferences.builtinBridgeMeekAzureDescription", + "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor." + ), + // Request bridges dialog + requestBridgeDialogTitle: getString( + "torPreferences.requestBridgeDialogTitle", + "Request Bridge" + ), + submitCaptcha: getString( + "torsettings.useBridges.captchaSubmit", + "Submit" + ), + contactingBridgeDB: getString( + "torPreferences.requestBridgeDialogWaitPrompt", + "Contacting BridgeDB. Please Wait." + ), + solveTheCaptcha: getString( + "torPreferences.requestBridgeDialogSolvePrompt", + "Solve the CAPTCHA to request a bridge." + ), + captchaTextboxPlaceholder: getString( + "torsettings.useBridges.captchaSolution.placeholder", + "Enter the characters from the image" + ), + incorrectCaptcha: getString( + "torPreferences.requestBridgeErrorBadSolution", + "The solution is not correct. Please try again." + ), + // Provide bridge dialog + provideBridgeTitle: getString( + "torPreferences.provideBridgeTitle", + "Provide Bridge" + ), + provideBridgeHeader: getString( + "torPreferences.provideBridgeHeader", + "Enter bridge information from a trusted source" + ), + provideBridgePlaceholder: getString( + "torsettings.useBridges.placeholder", + "type address:port (one per line)" + ), + // Connection settings dialog + connectionSettingsDialogTitle: getString( + "torPreferences.connectionSettingsDialogTitle", + "Connection Settings" + ), + connectionSettingsDialogHeader: getString( + "torPreferences.connectionSettingsDialogHeader", + "Configure how Tor Browser connects to the Internet" + ), + useLocalProxy: getString( + "torsettings.useProxy.checkbox", + "I use a proxy to connect to the Internet" + ), + proxyType: getString("torsettings.useProxy.type", "Proxy Type"), + proxyTypeSOCKS4: getString("torsettings.useProxy.type.socks4", "SOCKS4"), + proxyTypeSOCKS5: getString("torsettings.useProxy.type.socks5", "SOCKS5"), + proxyTypeHTTP: getString("torsettings.useProxy.type.http", "HTTP/HTTPS"), + proxyAddress: getString("torsettings.useProxy.address", "Address"), + proxyAddressPlaceholder: getString( + "torsettings.useProxy.address.placeholder", + "IP address or hostname" + ), + proxyPort: getString("torsettings.useProxy.port", "Port"), + proxyUsername: getString("torsettings.useProxy.username", "Username"), + proxyPassword: getString("torsettings.useProxy.password", "Password"), + proxyUsernamePasswordPlaceholder: getString( + "torsettings.optional", + "Optional" + ), + useFirewall: getString( + "torsettings.firewall.checkbox", + "This computer goes through a firewall that only allows connections to certain ports" + ), + allowedPorts: getString( + "torsettings.firewall.allowedPorts", + "Allowed Ports" + ), + allowedPortsPlaceholder: getString( + "torPreferences.firewallPortsPlaceholder", + "Comma-seperated values" + ), + // Log dialog + torLogDialogTitle: getString( + "torPreferences.torLogsDialogTitle", + "Tor Logs" + ), + copyLog: getString("torsettings.copyLog", "Copy Tor Log to Clipboard"), + + learnMoreTorBrowserURL: "about:manual#about", + learnMoreBridgesURL: "about:manual#bridges", + learnMoreBridgesCardURL: "about:manual#bridges_bridge-moji", + learnMoreCircumventionURL: "about:manual#circumvention", + }; + + return retval; + } /* Tor Network Settings Strings */, + + torConnect() { + const tsbNetwork = new TorDTDStringBundle( + ["chrome://torbutton/locale/network-settings.dtd"], + "" + ); + const tsbLauncher = new TorPropertyStringBundle( + "chrome://torbutton/locale/torlauncher.properties", + "torlauncher." + ); + const tsbCommon = new TorPropertyStringBundle( + "chrome://global/locale/commonDialogs.properties", + "" + ); + + const getStringNet = tsbNetwork.getString.bind(tsbNetwork); + const getStringLauncher = tsbLauncher.getString.bind(tsbLauncher); + const getStringCommon = tsbCommon.getString.bind(tsbCommon); + + return { + torConnect: getStringNet( + "torsettings.wizard.title.default", + "Connect to Tor" + ), + + torConnecting: getStringNet( + "torsettings.wizard.title.connecting", + "Establishing a Connection" + ), + + torNotConnectedConcise: getStringNet( + "torConnect.notConnectedConcise", + "Not Connected" + ), + + torConnectingConcise: getStringNet( + "torConnect.connectingConcise", + "Connecting…" + ), + + tryingAgain: getStringNet("torConnect.tryingAgain", "Trying again…"), + + noInternet: getStringNet( + "torConnect.noInternet", + "Tor Browser couldn’t reach the Internet" + ), + + noInternetDescription: getStringNet( + "torConnect.noInternetDescription", + "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again." + ), + + torBootstrapFailed: getStringLauncher( + "tor_bootstrap_failed", + "Tor failed to establish a Tor network connection." + ), + + couldNotConnect: getStringNet( + "torConnect.couldNotConnect", + "Tor Browser could not connect to Tor" + ), + + configureConnection: getStringNet( + "torConnect.assistDescriptionConfigure", + "configure your connection" + ), + + assistDescription: getStringNet( + "torConnect.assistDescription", + "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead." + ), + + tryingBridge: getStringNet("torConnect.tryingBridge", "Trying a bridge…"), + + tryingBridgeAgain: getStringNet( + "torConnect.tryingBridgeAgain", + "Trying one more time…" + ), + + errorLocation: getStringNet( + "torConnect.errorLocation", + "Tor Browser couldn’t locate you" + ), + + errorLocationDescription: getStringNet( + "torConnect.errorLocationDescription", + "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead." + ), + + isLocationCorrect: getStringNet( + "torConnect.isLocationCorrect", + "Are these location settings correct?" + ), + + isLocationCorrectDescription: getStringNet( + "torConnect.isLocationCorrectDescription", + "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead." + ), + + finalError: getStringNet( + "torConnect.finalError", + "Tor Browser still cannot connect" + ), + + finalErrorDescription: getStringNet( + "torConnect.finalErrorDescription", + "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead." + ), + + breadcrumbAssist: getStringNet( + "torConnect.breadcrumbAssist", + "Connection assist" + ), + + breadcrumbLocation: getStringNet( + "torConnect.breadcrumbLocation", + "Location settings" + ), + + breadcrumbTryBridge: getStringNet( + "torConnect.breadcrumbTryBridge", + "Try a bridge" + ), + + restartTorBrowser: getStringNet( + "torConnect.restartTorBrowser", + "Restart Tor Browser" + ), + + torConfigure: getStringNet( + "torConnect.configureConnection", + "Configure Connection…" + ), + + viewLog: getStringNet("torConnect.viewLog", "View logs…"), + + torConnectButton: getStringNet("torSettings.connect", "Connect"), + + cancel: getStringCommon("Cancel", "Cancel"), + + torConnected: getStringLauncher( + "torlauncher.bootstrapStatus.done", + "Connected to the Tor network" + ), + + torConnectedConcise: getStringLauncher( + "torConnect.connectedConcise", + "Connected" + ), + + tryAgain: getStringNet("torConnect.tryAgain", "Try Again"), + + // tor connect strings for message box in about:preferences#connection + connectMessage: getStringNet( + "torConnect.connectMessage", + "Changes to Tor Settings will not take effect until you connect" + ), + tryAgainMessage: getStringNet( + "torConnect.tryAgainMessage", + "Tor Browser has failed to establish a connection to the Tor Network" + ), + + yourLocation: getStringNet("torConnect.yourLocation", "Your Location"), + + tryBridge: getStringNet("torConnect.tryBridge", "Try a Bridge"), + + automatic: getStringNet("torConnect.automatic", "Automatic"), + selectCountryRegion: getStringNet( + "torConnect.selectCountryRegion", + "Select Country or Region" + ), + frequentLocations: getStringNet( + "torConnect.frequentLocations", + "Frequently selected locations" + ), + otherLocations: getStringNet( + "torConnect.otherLocations", + "Other locations" + ), + + // TorConnect.jsm error messages + offline: getStringNet("torConnect.offline", "Internet not reachable"), + autoBootstrappingFailed: getStringNet( + "torConnect.autoBootstrappingFailed", + "Automatic configuration failed" + ), + autoBootstrappingAllFailed: getStringNet( + "torConnect.autoBootstrappingFailed", + "None of the configurations we tried worked" + ), + cannotDetermineCountry: getStringNet( + "torConnect.cannotDetermineCountry", + "Unable to determine user country" + ), + noSettingsForCountry: getStringNet( + "torConnect.noSettingsForCountry", + "No settings available for your location" + ), + }; + }, + + /* + Tor Onion Services Strings, e.g., for the authentication prompt. + */ + onionServices() { + const tsb = new TorPropertyStringBundle( + "chrome://torbutton/locale/torbutton.properties", + "onionServices." + ); + const getString = tsb.getString.bind(tsb); + + const kProblemLoadingSiteFallback = "Problem Loading Onionsite"; + const kLongDescFallback = "Details: %S"; + + const retval = { + learnMore: getString("learnMore", "Learn more"), + learnMoreURL: "about:manual#onion-services_onion-service-authentication", + errorPage: { + browser: getString("errorPage.browser", "Browser"), + network: getString("errorPage.network", "Network"), + onionSite: getString("errorPage.onionSite", "Onionsite"), + }, + descNotFound: { + // Tor SOCKS error 0xF0 + pageTitle: getString( + "descNotFound.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString("descNotFound.header", "Onionsite Not Found"), + longDescription: getString( + "descNotFound.longDescription", + kLongDescFallback + ), + }, + descInvalid: { + // Tor SOCKS error 0xF1 + pageTitle: getString( + "descInvalid.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString("descInvalid.header", "Onionsite Cannot Be Reached"), + longDescription: getString( + "descInvalid.longDescription", + kLongDescFallback + ), + }, + introFailed: { + // Tor SOCKS error 0xF2 + pageTitle: getString( + "introFailed.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString("introFailed.header", "Onionsite Has Disconnected"), + longDescription: getString( + "introFailed.longDescription", + kLongDescFallback + ), + }, + rendezvousFailed: { + // Tor SOCKS error 0xF3 + pageTitle: getString( + "rendezvousFailed.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString( + "rendezvousFailed.header", + "Unable to Connect to Onionsite" + ), + longDescription: getString( + "rendezvousFailed.longDescription", + kLongDescFallback + ), + }, + clientAuthMissing: { + // Tor SOCKS error 0xF4 + pageTitle: getString( + "clientAuthMissing.pageTitle", + "Authorization Required" + ), + header: getString( + "clientAuthMissing.header", + "Onionsite Requires Authentication" + ), + longDescription: getString( + "clientAuthMissing.longDescription", + kLongDescFallback + ), + }, + clientAuthIncorrect: { + // Tor SOCKS error 0xF5 + pageTitle: getString( + "clientAuthIncorrect.pageTitle", + "Authorization Failed" + ), + header: getString( + "clientAuthIncorrect.header", + "Onionsite Authentication Failed" + ), + longDescription: getString( + "clientAuthIncorrect.longDescription", + kLongDescFallback + ), + }, + badAddress: { + // Tor SOCKS error 0xF6 + pageTitle: getString( + "badAddress.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString("badAddress.header", "Invalid Onionsite Address"), + longDescription: getString( + "badAddress.longDescription", + kLongDescFallback + ), + }, + introTimedOut: { + // Tor SOCKS error 0xF7 + pageTitle: getString( + "introTimedOut.pageTitle", + kProblemLoadingSiteFallback + ), + header: getString( + "introTimedOut.header", + "Onionsite Circuit Creation Timed Out" + ), + longDescription: getString( + "introTimedOut.longDescription", + kLongDescFallback + ), + }, + authPrompt: { + description: getString( + "authPrompt.description2", + "%S is requesting that you authenticate." + ), + keyPlaceholder: getString( + "authPrompt.keyPlaceholder", + "Enter your key" + ), + done: getString("authPrompt.done", "Done"), + doneAccessKey: getString("authPrompt.doneAccessKey", "d"), + invalidKey: getString("authPrompt.invalidKey", "Invalid key"), + failedToSetKey: getString( + "authPrompt.failedToSetKey", + "Failed to set key" + ), + }, + authPreferences: { + header: getString( + "authPreferences.header", + "Onion Services Authentication" + ), + overview: getString( + "authPreferences.overview", + "Some onion services require that you identify yourself with a key" + ), + savedKeys: getString("authPreferences.savedKeys", "Saved Keys"), + dialogTitle: getString( + "authPreferences.dialogTitle", + "Onion Services Keys" + ), + dialogIntro: getString( + "authPreferences.dialogIntro", + "Keys for the following onionsites are stored on your computer" + ), + onionSite: getString("authPreferences.onionSite", "Onionsite"), + onionKey: getString("authPreferences.onionKey", "Key"), + remove: getString("authPreferences.remove", "Remove"), + removeAll: getString("authPreferences.removeAll", "Remove All"), + failedToGetKeys: getString( + "authPreferences.failedToGetKeys", + "Failed to get keys" + ), + failedToRemoveKey: getString( + "authPreferences.failedToRemoveKey", + "Failed to remove key" + ), + }, + }; + + return retval; + } /* Tor Onion Services Strings */, + + /* + OnionLocation + */ + onionLocation() { + const tsb = new TorPropertyStringBundle( + ["chrome://torbutton/locale/torbutton.properties"], + "onionLocation." + ); + const getString = tsb.getString.bind(tsb); + + const retval = { + alwaysPrioritize: getString( + "alwaysPrioritize", + "Always Prioritize Onionsites" + ), + alwaysPrioritizeAccessKey: getString("alwaysPrioritizeAccessKey", "a"), + notNow: getString("notNow", "Not Now"), + notNowAccessKey: getString("notNowAccessKey", "n"), + description: getString( + "description", + "Website publishers can protect users by adding a security layer. This prevents eavesdroppers from knowing that you are the one visiting that website." + ), + tryThis: getString("tryThis", "Try this: Onionsite"), + onionAvailable: getString("onionAvailable", "Onionsite available"), + learnMore: getString("learnMore", "Learn more"), + learnMoreURL: "about:manual#onion-services", + // XUL popups cannot open about: URLs, but we are online when showing the notification, so just use the online version + learnMoreURLNotification: `https://tb-manual.torproject.org/$%7BgetLocale()%7D/onion-services/%60, + always: getString("always", "Always"), + askEverytime: getString("askEverytime", "Ask you every time"), + prioritizeOnionsDescription: getString( + "prioritizeOnionsDescription", + "Prioritize onionsites when they are available." + ), + onionServicesTitle: getString("onionServicesTitle", "Onion Services"), + }; + + return retval; + } /* OnionLocation */, + + /* + Rulesets + */ + rulesets() { + const tsb = new TorPropertyStringBundle( + ["chrome://torbutton/locale/torbutton.properties"], + "rulesets." + ); + const getString = tsb.getString.bind(tsb); + + const retval = { + // Initial warning + warningTitle: getString("warningTitle", "Proceed with Caution"), + warningDescription: getString( + "warningDescription", + "Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing." + ), + warningEnable: getString( + "warningEnable", + "Warn me when I attempt to access these preferences" + ), + warningButton: getString("warningButton", "Accept the Risk and Continue"), + // Ruleset list + rulesets: getString("rulesets", "Rulesets"), + noRulesets: getString("noRulesets", "No rulesets found"), + noRulesetsDescr: getString( + "noRulesetsDescr", + "When you save a ruleset in Tor Browser, it will show up here." + ), + lastUpdated: getString("lastUpdated", "Last updated %S"), + neverUpdated: getString( + "neverUpdated", + "Never updated, or last update failed" + ), + enabled: getString("enabled", "Enabled"), + disabled: getString("disabled", "Disabled"), + // Ruleset details + edit: getString("edit", "Edit"), + name: getString("name", "Name"), + jwk: getString("jwk", "JWK"), + pathPrefix: getString("pathPrefix", "Path Prefix"), + scope: getString("scope", "Scope"), + enable: getString("enable", "Enable this ruleset"), + checkUpdates: getString("checkUpdates", "Check for Updates"), + // Add ruleset + jwkPlaceholder: getString( + "jwkPlaceholder", + "The key used to sign this ruleset in the JWK (JSON Web Key) format" + ), + jwkInvalid: getString( + "jwkInvalid", + "The JWK could not be parsed, or it is not a valid key" + ), + pathPrefixPlaceholder: getString( + "pathPrefixPlaceholder", + "URL prefix that contains the files needed by the ruleset" + ), + pathPrefixInvalid: getString( + "pathPrefixInvalid", + "The path prefix is not a valid HTTP(S) URL" + ), + scopePlaceholder: getString( + "scopePlaceholder", + "Regular expression for the scope of the rules" + ), + scopeInvalid: getString( + "scopeInvalid", + "The scope could not be parsed as a regular expression" + ), + save: getString("save", "Save"), + cancel: getString("cancel", "Cancel"), + }; + + return retval; + } /* Rulesets */, +}; + +const TorStrings = { + get settings() { + if (!this._settings) { + this._settings = Loader.settings(); + } + return this._settings; + }, + + get torConnect() { + if (!this._torConnect) { + this._torConnect = Loader.torConnect(); + } + return this._torConnect; + }, + + get onionServices() { + if (!this._onionServices) { + this._onionServices = Loader.onionServices(); + } + return this._onionServices; + }, + + get onionLocation() { + if (!this._onionLocation) { + this._onionLocation = Loader.onionLocation(); + } + return this._onionLocation; + }, + + get rulesets() { + if (!this._rulesets) { + this._rulesets = Loader.rulesets(); + } + return this._rulesets; + }, +}; diff --git a/browser/modules/moz.build b/browser/modules/moz.build index c5d6bb08e9e9..b9158588b812 100644 --- a/browser/modules/moz.build +++ b/browser/modules/moz.build @@ -148,6 +148,7 @@ EXTRA_JS_MODULES += [ "TabUnloader.jsm", "TorConnect.jsm", "TorSettings.jsm", + "TorStrings.jsm", "TransientPrefs.jsm", "webrtcUI.jsm", "ZoomUI.jsm", diff --git a/toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd new file mode 100644 index 000000000000..f2b2adfebcce --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start " تطوير: &brandShortName;"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end "، مؤسسة غير هادفة للرّبح تعمل على حماية الخصوصيّة والحرّية على الإنترنت."> + +<!ENTITY help.start "هل ترغب في المساعدة؟"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "تبرّع"> +<!ENTITY help.or "أو"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "شاركوا"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "أية أسئلة؟"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "ساعدوا شبكة تور على النّمو!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "معلومات الترخيص"> +<!ENTITY tor.TrademarkStatement ""تور" و "شعار البصلة" هي علامات تجاريّة مسجّلة باسم مشروع تور المحدودة"> diff --git a/toolkit/torbutton/chrome/locale/ar/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ar/aboutTBUpdate.dtd new file mode 100644 index 000000000000..658ed4113d94 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "سجل تغيرات متصفّح تور"> +<!ENTITY aboutTBUpdate.updated "تم تحديث متصفح تور."> +<!ENTITY aboutTBUpdate.linkPrefix "للحصول على أحدث المعلومات حول هذا الإصدار،"> +<!ENTITY aboutTBUpdate.linkLabel "زُر موقعنا"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "النسخة"> +<!ENTITY aboutTBUpdate.releaseDate "تاريخ النشر"> +<!ENTITY aboutTBUpdate.releaseNotes "ملاحظات الإصدار"> diff --git a/toolkit/torbutton/chrome/locale/ar/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ar/aboutTor.dtd new file mode 100644 index 000000000000..b0fd8e440cf3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "عن تور"> + +<!ENTITY aboutTor.viewChangelog.label "الإطلاع على سجل التغيرات"> + +<!ENTITY aboutTor.ready.label "تصفح بكل خصوصية."> +<!ENTITY aboutTor.ready2.label "أنت جاهز الآن لتجربة التصفح الأكثر خصوصية في العالم."> +<!ENTITY aboutTor.failure.label "حدث خطأ ما!"> +<!ENTITY aboutTor.failure2.label "تور لا يعمل في هذا المتصفح."> + +<!ENTITY aboutTor.search.label "ابحث بواسطة داك داك غو"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "أية أسئلة؟"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "اطّلع على دليل استخدام متصفح تور "> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "س"> +<!ENTITY aboutTor.torbrowser_user_manual.label "دليل استخدام متصفّح تور"> + +<!ENTITY aboutTor.tor_mission.label "مشرع تور منظمة غير ربحية أميريكية خاضعة لقانون 501(c)(3)، تعمل على تقدم حقوق الإنسان وحرياته، عبر إنشاء واستخدام تقنيات حرة ومفتوحة المصدر للمجهولية والخصوصية، وتدعم توفرها واستخدامها دون قيود، وتدعم تقدم الفهم العلمي والشعبي لهذه التقنيات."> +<!ENTITY aboutTor.getInvolved.label "شارك"> + +<!ENTITY aboutTor.newsletter.tagline "احصل على آخر أخبار تور مباشرة على بريدك"> +<!ENTITY aboutTor.newsletter.link_text "اشترك للحصول على أخبار تور."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor متاح مجاناً بفضل تبرعات من أشخاص مثلك"> +<!ENTITY aboutTor.donationBanner.buttonA "تبرع الآن"> + +<!ENTITY aboutTor.alpha.ready.label "اختبار. بدقة."> +<!ENTITY aboutTor.alpha.ready2.label "أنت على استعداد لاختبار تجربة التصفح الأكثر خصوصية في العالم."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha هو إصدار غير مستقر من متصفح Tor يمكنك استخدامه لمعاينة الميزات الجديدة واختبار أدائها وتقديم الملاحظات قبل الإصدار."> +<!ENTITY aboutTor.alpha.bannerLink "أبلغ عن خطأ في منتدى Tor"> + +<!ENTITY aboutTor.nightly.ready.label "اختبار. بدقة."> +<!ENTITY aboutTor.nightly.ready2.label "أنت على استعداد لاختبار تجربة التصفح الأكثر خصوصية في العالم."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly هو إصدار غير مستقر من متصفح Tor يمكنك استخدامه لمعاينة الميزات الجديدة واختبار أدائها وتقديم الملاحظات قبل الإصدار."> +<!ENTITY aboutTor.nightly.bannerLink "أبلغ عن خطأ في منتدى Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "تبرع الآن"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "سيتم مطابقة تبرعك بواسطة Friends of Tor ، حتى 100000 دولار."> diff --git a/toolkit/torbutton/chrome/locale/ar/brand.dtd b/toolkit/torbutton/chrome/locale/ar/brand.dtd new file mode 100644 index 000000000000..03faa395631c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "متصفح تور"> +<!ENTITY brandShortName "متصفح تور"> +<!ENTITY brandFullName "متصفح تور"> +<!ENTITY vendorShortName "مشروع تور"> +<!ENTITY trademarkInfo.part1 ""تور" و "شعار البصلة" علامات تجارية مسجلة باسم شركة مشروع تور المحدودة"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "متصفح Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "اضغط لتحميل الإضافات المثبتة على المتصفح"> +<!ENTITY plugins.installed.enable "تمكين الإضافات"> +<!ENTITY plugins.installed.disable "تعطيل الإضافات "> +<!ENTITY plugins.installed.disable.tip "انقر لمنع تحميل الإضافات المثبتة على المتصفح"> diff --git a/toolkit/torbutton/chrome/locale/ar/brand.properties b/toolkit/torbutton/chrome/locale/ar/brand.properties new file mode 100644 index 000000000000..c0f6d27aef0a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=متصفح تور +brandShortName=متصفح تور +brandFullName=متصفح تور +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=متصفح Tor +vendorShortName=مشروع تور + +homePageSingleStartMain=صفحة بدء فايرفوكس، صفحة رئيسية سريعة مدمج بها خاصية للبحث. +homePageImport=استورد الصفحة الرئيسية من %S + +homePageMigrationPageTitle=اختيار الصفحة الرئيسية +homePageMigrationDescription=لو سمحت، قم باختيار الصفحة الرئيسية التي ترغب في استعمالها: + +syncBrandShortName=مزامنة diff --git a/toolkit/torbutton/chrome/locale/ar/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ar/branding/brand.ftl new file mode 100644 index 000000000000..1bcc7d0a39cb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = متصفح تور +-brand-short-name = متصفح تور +-brand-full-name = متصفح تور +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = متصفح Tor +-vendor-short-name = مشروع تور +trademarkInfo = 'تور' و 'شعار البصلة' علامات تجارية مسجلة باسم شركة مشروع تور المحدودة diff --git a/toolkit/torbutton/chrome/locale/ar/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ar/browserOnboarding.properties new file mode 100644 index 000000000000..a3a10b3fb840 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=مرحباً +onboarding.tour-tor-welcome.title=انت مستعد. +onboarding.tour-tor-welcome.description=متصفح تور (Tor Browser) يوفر اعلى معايير الخصوصيه و اﻷمان اثناء تصفحك للويب. انت اﻷن محمي من التتبع , المراقبه, و الحجب. هذا المؤهل السريع سيعرض لك كيف يتم ذلك. +onboarding.tour-tor-welcome.next-button=الانتقال إلى الخصوصية + +onboarding.tour-tor-privacy=الخصوصية +onboarding.tour-tor-privacy.title=المتلصصون و اكلواسعة اﻹنترنت +onboarding.tour-tor-privacy.description=متصفح تور يعزل ملفات التعريق و يمسح ارشيف اﻹنترنت الخاص بك بعد انتهائك من التصفح. هذه التعديلات تتأكد من امانك و خصوصيتك في المتصفح. اضغط على شبكة تور لتعرف اكثر كيف نحميك على مستوى الشبكه +onboarding.tour-tor-privacy.button=اذهب الى شبكة تور + +onboarding.tour-tor-network=شبكة تور +onboarding.tour-tor-network.title=اﻹنتقال لشبكه لا مركزيه +onboarding.tour-tor-network.description=متصفح تور (Tor Browser) يصلك بشبكه تور التي يتم تشغيلها بواسطة الاف المتطوعين حول العالم. على عكس الشبكات الوهميه الخاصه "VPN" لا يوجد نقطة قصور مركزيه او نقطة واحده يجب ان تثق بها للتمتع بخصوصيتك على اﻹنترنت. +onboarding.tour-tor-network.description-para2=جديد: يمكن الآن العثور في التفضيلات على إعدادات شبكة تور Tor Network متضمنة القدرة على طلب الجسور عندما يكون تور Tor محظوراً. +onboarding.tour-tor-network.action-button=اضبط إعدادات شبكة تور Tor Network +onboarding.tour-tor-network.button=الذهاب الى عرض الدائرة + +onboarding.tour-tor-circuit-display=عرض الدائرة +onboarding.tour-tor-circuit-display.title=شاهد مسارك +onboarding.tour-tor-circuit-display.description=لكل مجال تقوم بزيارته، يتم ترحيل حركة المرور الخاصة بك وتشفيرها في دائرة عبر ثلاثة مرحلات Tor حول العالم. لا يعرف أي موقع على الويب المكان الذي تتصل منه. يمكنك طلب دائرة جديدة بالنقر فوق "دائرة جديدة لهذا الموقع" على شاشة عرض الدوائر لدينا. +onboarding.tour-tor-circuit-display.button=رؤية المسار الخاص بي +onboarding.tour-tor-circuit-display.next-button=الانتقال إلى الأمان + +onboarding.tour-tor-security=الأمان +onboarding.tour-tor-security.title=اختر مدى خبرتك +onboarding.tour-tor-security.description=نوفر لك أيضا إعدادات إضافية لرفع مستوى أمان المتصفح. تسمح لك إعدادات الأمان لدينا بحظر العناصر التي يمكن استخدامها لمهاجمة جهاز الكمبيوتر الخاص بك. انقر أدناه لمعرفة ما تفعله الخيارات المختلفة. +onboarding.tour-tor-security.description-suffix=ملاحظة: NoScript و HTTPS Everywhere ليست متضمنة بشكل افتراضي في شريط الأدوات، لكن بإمكانك تخصيص شريط الأدوات لإضافتهم. +onboarding.tour-tor-security-level.button=تحقق من مستوى الأمن +onboarding.tour-tor-security-level.next-button=إذهب إلى تلميحات التجربة + +onboarding.tour-tor-expect-differences=نصائح التجربة +onboarding.tour-tor-expect-differences.title=توقع بعض التغيرات +onboarding.tour-tor-expect-differences.description=مع جميع ميزات الأمان والخصوصية التي يوفرها Tor، قد تكون تجربتك أثناء تصفح الإنترنت مختلفة بعض الشيء. قد تكون الأشياء أبطأ قليلاً، واعتمادًا على مستوى الأمان، قد لا تعمل بعض العناصر أو يتم تحميلها. قد يُطلب منك أيضًا إثبات أنك إنسان وليس روبوت. +onboarding.tour-tor-expect-differences.button=انظر 'الأسئلة المتكررة' +onboarding.tour-tor-expect-differences.next-button=الانتقال إلى خدمات البصلة + +onboarding.tour-tor-onion-services=خدمات البصلة (Onion) +onboarding.tour-tor-onion-services.title=كن محميا بشكل اضافي +onboarding.tour-tor-onion-services.description=خدمات البصل هي المواقع التي تنتهي بـ ".onion" التي توفر حماية إضافية للناشرين والزوار، بما في ذلك ضمانات إضافية ضد الحجب. تسمح خدمات البصل لأي شخص بتقديم المحتوى والخدمات بشكل مجهول. انقر أدناه لزيارة موقع البصل الخاص ب"DuckDuckGo". +onboarding.tour-tor-onion-services.button=قم بزيارة بصلة +onboarding.tour-tor-onion-services.next-button=انتهاء + +onboarding.overlay-icon-tooltip-updated2=للاطلاع على ما الجديد\nفي %S +onboarding.tour-tor-update.prefix-new=جديد +onboarding.tour-tor-update.prefix-updated=تحديث + +onboarding.tour-tor-toolbar=شريط الأدوات +onboarding.tour-tor-toolbar-update-9.0.title=وداعاً زر Onion +onboarding.tour-tor-toolbar-update-9.0.description=نريد أن تكون تجربتك باستخدام Tor مدمجة بالكامل ضمن متصفح Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=لذلك عوضاً عن استخدام زر onion يمكنك الآن مشاهدة دائرة Tor من خلال [i] في شريط العنوان URL, كما يمكنك طلب هوية جديدة باستخدام زر في شريط الأدوات أو من خلال القائمة [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=كيفية طلب هوية جديدة +onboarding.tour-tor-toolbar-update-9.0.next-button=اذهب الى شبكة تور + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=التالي +onboarding.tor-circuit-display.done=انتهاء +onboarding.tor-circuit-display.one-of-three=1 من 3 +onboarding.tor-circuit-display.two-of-three=2 من 3 +onboarding.tor-circuit-display.three-of-three=3 من 3 + +onboarding.tor-circuit-display.intro.title=كيف تعمل الدوائر؟ +onboarding.tor-circuit-display.intro.msg=تتكون الدوائر من المرحلات الموزعة بشكل عشوائي، وهي أجهزة الكمبيوتر في جميع أنحاء العالم مهيأة لإعادة توجيه حركة Tor. تسمح لك الدوائر بالتصفح الخاص والاتصال بخدمات البصل. + +onboarding.tor-circuit-display.diagram.title=عرض الدائرة +onboarding.tor-circuit-display.diagram.msg=يوضح هذا الرسم البياني المرحلات التي تشكل الدائرة لهذا الموقع. لمنع ربط النشاط عبر مواقع مختلفة، يحصل كل موقع إلكتروني على دائرة مختلفة. + +onboarding.tor-circuit-display.new-circuit.title=هل انت بحاجة الى دائرة جديدة +onboarding.tor-circuit-display.new-circuit.msg=إذا لم تكن قادرًا على الاتصال بموقع الويب الذي تحاول زيارته أو لم يتم تحميله بشكل صحيح، يمكنك استخدام هذا الزر لإعادة تحميل الموقع بدائرة جديدة. diff --git a/toolkit/torbutton/chrome/locale/ar/network-settings.dtd b/toolkit/torbutton/chrome/locale/ar/network-settings.dtd new file mode 100644 index 000000000000..a2ba02dc60ad --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "إعدادات شبكة تور"> +<!ENTITY torsettings.wizard.title.default "اتصل بتور"> +<!ENTITY torsettings.wizard.title.configure "إعدادات شبكة تور"> +<!ENTITY torsettings.wizard.title.connecting "يجري إنشاء اتصال"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "لغة متصفح تور"> +<!ENTITY torlauncher.localePicker.prompt "الرجاء اختيار لغة."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "انقر "اتصل" للاتصال بتور."> +<!ENTITY torSettings.configurePrompt "انقر "اضبط" لضبط إعدادات الشبكة إن كنت في بلد يحجب تور (مثل مصر، والصين، وتركيا) أو إن كنت تتصل من شبكة خاصة تتطلب وسيط."> +<!ENTITY torSettings.configure "تكوين"> +<!ENTITY torSettings.connect "اتصل"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "في انتظار تور حتي يبدء بالعمل..."> +<!ENTITY torsettings.restartTor "أعِد تشغيل تور"> +<!ENTITY torsettings.reconfigTor "أعِد ضبط"> + +<!ENTITY torsettings.discardSettings.prompt "ضبطت جسر تور أو أدخلت إعدادات الوسيط المحلي.  لإنشاء اتصال مباشر بشبكه تور، يجب إزاله هذه الإعدادات."> +<!ENTITY torsettings.discardSettings.proceed "ازل الاعدادات ثم اتصل"> + +<!ENTITY torsettings.optional "اختياري"> + +<!ENTITY torsettings.useProxy.checkbox "أستخدم وسيطا للاتصال بالإنترنت"> +<!ENTITY torsettings.useProxy.type "نوع البروكسي"> +<!ENTITY torsettings.useProxy.type.placeholder "اختر نوع الوسيط"> +<!ENTITY torsettings.useProxy.address "العنوان"> +<!ENTITY torsettings.useProxy.address.placeholder "عنوان الإنترنت IP أو اسم المضيف"> +<!ENTITY torsettings.useProxy.port "منفذ"> +<!ENTITY torsettings.useProxy.username "اسم المستخدم"> +<!ENTITY torsettings.useProxy.password "كلمة السّر"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "اتصال الإنترنت لهذا الكمبيوتر يمر بجدار حماية يسمح بالاتصال فقط من خلال منافذ معينة"> +<!ENTITY torsettings.firewall.allowedPorts "المنافذ المسموح بها"> +<!ENTITY torsettings.useBridges.checkbox "تور محجوب في بلدي"> +<!ENTITY torsettings.useBridges.default "اختر جسرا مُدمَجا في البرنامج"> +<!ENTITY torsettings.useBridges.default.placeholder "اختر جسرا"> +<!ENTITY torsettings.useBridges.bridgeDB "اطلب جسرا من torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "أدخل الرموز الموجودة في الصورة"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "احصل على تحد جديد"> +<!ENTITY torsettings.useBridges.captchaSubmit "أرسل"> +<!ENTITY torsettings.useBridges.custom "أدخل عنوان جسرٍ أعرفه"> +<!ENTITY torsettings.useBridges.label "أدخل معلومات جسر من مصدر موثوق."> +<!ENTITY torsettings.useBridges.placeholder "اكتب العنوان:المنفذ (واحد لكل سطر)"> + +<!ENTITY torsettings.copyLog "نسخ سجل تور إلي الحافظة"> + +<!ENTITY torsettings.proxyHelpTitle "مساعدة الوسيط"> +<!ENTITY torsettings.proxyHelp1 "قد تكون هناك حاجة إلى وسيط (proxy) محلي عند الاتصال من خلال شركة أو مدرسة أو شبكة جامعية. إذا لم تكن متأكدًا مما إذا كان الوسيط مطلوبًا أم لا، فابحث عن إعدادات الإنترنت في متصفح آخر أو تحقق من إعدادات شبكة النظام لديك."> + +<!ENTITY torsettings.bridgeHelpTitle "المساعدة الخاصة بالجسور المُرحلة"> +<!ENTITY torsettings.bridgeHelp1 "الجسور هي تحويلات غير مدرجة تجعل حجب الاتصالات إلى شبكة تور أصعب.  كل نوع من الجسور يستخدم طريقة مختلفة لتجنب الرقابة.  جسور obfs تجعل حركة معلوماتك تبدو كضجيج عشوائي، وجسور meek تجعل حركة معلوماتك تبدوا كأنها تتصل لتلك الخدمة بدلا من تور."> +<!ENTITY torsettings.bridgeHelp2 "بسبب طريقة حظر بعض البلدان لتور، تعمل بعض الجسور في بلدان معينة لكنها لا تعمل ببعضها الآخر. إن لم تكن متأكدا بشأن أي الجسور تعمل في بلدك، فزر torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "الرجاء الانتظار بينما ننشئ اتصالا لشبكة تور.  قد يستغرق هذا عدة دقائق."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "الاتصال"> +<!ENTITY torPreferences.torSettings "إعدادات تور Tor"> +<!ENTITY torPreferences.torSettingsDescription "متصفح Tor Browser يوجه حركة بياناتك عبر شبكة تور Tor Network, التي يشغلها آلاف المتطوعون حول العالم." > +<!ENTITY torPreferences.learnMore "تعرف على المزيد"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "الإنترنت:"> +<!ENTITY torPreferences.statusInternetTest "افحص"> +<!ENTITY torPreferences.statusInternetOnline "متصل"> +<!ENTITY torPreferences.statusInternetOffline "غير متصل"> +<!ENTITY torPreferences.statusTorLabel "شبكة Tor:"> +<!ENTITY torPreferences.statusTorConnected "متصل"> +<!ENTITY torPreferences.statusTorNotConnected "غير متصل"> +<!ENTITY torPreferences.statusTorBlocked "يحتمل أن يكون محجوب"> +<!ENTITY torPreferences.learnMore "تعرف على المزيد"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "بداية سريعة"> +<!ENTITY torPreferences.quickstartDescriptionLong "التشغيل السريع يجعل اتصال متصفح Tor بشبكة Tor يتم تلقائيًا عند التشغيل، اعتمادًا على إعداداتك لآخر عملية اتصال قمت بها."> +<!ENTITY torPreferences.quickstartCheckbox "اتصل تلقائيا بشكل دائم"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "الجسور"> +<!ENTITY torPreferences.bridgesDescription "تساعدك الجسور على دخول شبكة تور Tor Network في الأماكن التي تحظر تور Tor. وبالاعتماد على مكان تواجدك فإن أحد الجسور قد يعمل بشكل أفضل من غيره. "> +<!ENTITY torPreferences.bridgeLocation "موقعك الجغرافي"> +<!ENTITY torPreferences.bridgeLocationAutomatic "تلقائي"> +<!ENTITY torPreferences.bridgeLocationFrequent "المواقع الجغرافية المختارة بشكل متكرر:"> +<!ENTITY torPreferences.bridgeLocationOther "مواقع جغرافية أخرى"> +<!ENTITY torPreferences.bridgeChooseForMe "اختر جسرًا لي..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "جسورك الحالية:"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "يمكنك حفظ معلومات جسر أو أكثر، وسيقوم Tor باختيار أي جسر منهم يتم استخدامه عند الاتصال. Tor سيقوم باستخدام جسر آخر بشكل تلقائي عند الحاجة."> +<!ENTITY torPreferences.bridgeId "#1 جسر: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "إزالة"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "تعطيل الجسور المدمجة"> +<!ENTITY torPreferences.bridgeShare "شارك جسرًا باستخدام رمز استجابة سريعة أو عبر نسخ عنوانه:"> +<!ENTITY torPreferences.bridgeCopy "انسخ عنوان الجسر"> +<!ENTITY torPreferences.copied "تم النسخ!"> +<!ENTITY torPreferences.bridgeShowAll "عرض جميع الجسور"> +<!ENTITY torPreferences.bridgeRemoveAll "إزالة جميع الجسور"> +<!ENTITY torPreferences.bridgeAdd "أضف جسرًا جديدًا"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "اختر جسرًا من الجسور المدمجة في متصفح Tor "> +<!ENTITY torPreferences.bridgeSelectBuiltin "اختر جسرًا مدمجًا..."> +<!ENTITY torPreferences.bridgeRequest "اطلب جسرا…"> +<!ENTITY torPreferences.bridgeEnterKnown "أدخل عنوان الجسر الذي تريد استخدامه"> +<!ENTITY torPreferences.bridgeAddManually "أضف جسرًا بشكل يدوي..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "متقدم"> +<!ENTITY torPreferences.advancedDescription "تهيأة كيف يتصل متصفح Tor بالإنترنت"> +<!ENTITY torPreferences.advancedButton "الإعدادات..."> +<!ENTITY torPreferences.viewTorLogs "عرض سجلات Tor"> +<!ENTITY torPreferences.viewLogs "شاهد السجلات..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "إزالة جميع الجسور؟"> +<!ENTITY torPreferences.removeBridgesWarning "هذا الإجراء لا يمكن التراجع عنه."> +<!ENTITY torPreferences.cancel "إلغاء "> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "افحص رمز الاستجابة السريعة"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "الجسور المدمجة"> +<!ENTITY torPreferences.builtinBridgeDescription "متصفح Tor يحتوي على أنواع معينة من الجسر معروفة باسم "النواقل القابلة للتوصيل"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "هناك نوع من الجسور المدمجة يسمى obfs4 والذي يجعل حركة المرور الخاصّة بشبكة Tor تبدو عشوائية. هذا النوع من الجسور أيضًا أقل عُرضة للحجب مقارنةً بأسلافها، وهي جسور obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "جسر Snowflake المدمج يُعد قاهرًا للرقابة من خلال إعادة توجيه اتصالك عبر خوادم وكيلة، والتي تُدار بواسطة متطوّعين."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "جسر meek-azure المدمج يجعل استخدامك للإنترنت يبدو وكأنك تقوم بتصفح موقع مايكروسوفت بدلًا من استخدام شبكة Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "اطلب جسراً"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "يتصل بقاعدة بيانات الجسور BridgeDB. يرجى الانتظار."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "حل كاباتشا لطلب جسر."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "الحل ليس سليمًا. يُرجى إعادة المحاولة."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "وفر جسرًا"> +<!ENTITY torPreferences.provideBridgeHeader "أدخل معلومات الجسر من مصدر موثوق"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "إعدادات الاتصال"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "هيئ كيفية قيام متصفح Tor بالاتصال بالإنترنت"> +<!ENTITY torPreferences.firewallPortsPlaceholder "قيم مفصولة بالفاصلة"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "سجلات تور Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "غير متصل"> +<!ENTITY torConnect.connectingConcise "جاري الاتصال ..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "تلقائي"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "المواقع الجغرافية المختارة بشكل متكرر:"> +<!ENTITY torConnect.otherLocations "مواقع جغرافية أخرى"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "تكوين الاتصال…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "الرجاء المحاولة مجددًا"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "لن تسري التغييرات على إعدادات Tor حتى تقوم بالاتصال"> +<!ENTITY torConnect.tryAgainMessage "فشل متصفح Tor في إنشاء اتصال بشبكة Tor"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "جرب الجسر"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/ar/onboarding.properties b/toolkit/torbutton/chrome/locale/ar/onboarding.properties new file mode 100644 index 000000000000..33db24931d88 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=جديد على %S؟\n لنبدأ. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S جديد تمامًا.\nتعرف على ما يمكنك فعله. +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=أغلق +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=ارفض +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=انتهى diff --git a/toolkit/torbutton/chrome/locale/ar/torbutton.dtd b/toolkit/torbutton/chrome/locale/ar/torbutton.dtd new file mode 100644 index 000000000000..ec88b23cb9a3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "هوية جديدة"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "هوية جديدة"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "دائرة تور جديدة لهذا الموقع"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "دائرة Tor جديدة لهذا الموقع"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "إعدادات شبكة تور..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "تحقق من تحديثات متصفح تور..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "إعدادات أمان ملفات تعريف الارتباط..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "انقر لبدء زر تور"> +<!ENTITY torbutton.prefs.security_settings "إعدادات أمان متصفح طور"> +<!ENTITY torbutton.cookiedialog.title "إدارة إعدادت الحماية لملفات تعريف الارتباط"> +<!ENTITY torbutton.cookiedialog.lockCol "محمية"> +<!ENTITY torbutton.cookiedialog.domainCol "استضافة"> +<!ENTITY torbutton.cookiedialog.nameCol "اسم"> +<!ENTITY torbutton.cookiedialog.pathCol "المسار"> +<!ENTITY torbutton.cookiedialog.protectCookie "احم ملف تعريف الارتباط (كوكي)"> +<!ENTITY torbutton.cookiedialog.removeCookie "إزالة ملف تعريف الارتباط (كوكي)"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "إلغاء حماية ملف تعريف الارتباط (كوكي)"> +<!ENTITY torbutton.cookiedialog.removeAllBut "أزِل الكل لكن استمر في الحماية"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "احم ملفات تعريف الارتباط الجديدة"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "لا تحم ملفات تعريف الارتباط الجديدة"> +<!ENTITY torbutton.prefs.sec_caption "مستوى الأمان"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "يتيح لك شريط تمرير مستوى الأمان تعطيل بعض من مميزات متصفحك تجعلك أكثر عرضة للاختراق."> +<!ENTITY torbutton.prefs.sec_standard_label "عادي"> +<!ENTITY torbutton.prefs.sec_standard_description "كل خصائص متصفح تور ومواقع الوب مفعلة"> +<!ENTITY torbutton.prefs.sec_safer_label "آمِن"> +<!ENTITY torbutton.prefs.sec_safer_description "يعطل مميزات مواقع الوب التي عادة ما تكون خطيرة. يتسبب في تعطل خصائص بعض المواقع."> +<!ENTITY torbutton.prefs.sec_safer_list_label "في الإعداد الآمن:"> +<!ENTITY torbutton.prefs.sec_safest_label "الأكثر أمنا"> +<!ENTITY torbutton.prefs.sec_safest_description "اسمح فقط بالخصائص المطلوبة للمواقع غير الديناميكية والخدمات الأساسية. تؤثر هذه التغييرات على الصور والوسائط والنصوص البرمجية."> +<!ENTITY torbutton.prefs.sec_safest_list_label "في الإعداد الأكثر أمنا:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "تعرّف على المزيد"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "تعطل جافا سكربت على المواقع التي لا تستخدم HTTPS"> +<!ENTITY torbutton.prefs.sec_js_disabled "تعطل جافا سكربت مبدئيا على جميع المواقع."> +<!ENTITY torbutton.prefs.sec_limit_typography "تعطّل بعض الخطوط والرموز الرياضية."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "تعطّل بعض الخطوط والأيقونات والرموز الرياضية والصور."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "الصوت والفيديو (HTML5 media), و WebGL هي انقر للتشغيل"> +<!ENTITY torbutton.prefs.sec_custom_warning "مخصص"> +<!ENTITY torbutton.prefs.sec_overview "تعطيل مميزات ويب معينة فد يتم استخدامها لمهاجمة أمنك و مجهولية هويتك."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "مستوى الأمان: قياسي"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "مستوى الأمان: آمن"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "مستوى الأمان: الأكثر أمانا"> +<!ENTITY torbutton.prefs.sec_custom_summary "تفضيلاتك الخاصة للمتصفح تسببت في إعدادات أمان غير معتادة. لأمان وخصوصية أفضل ننصح باستخدام أحد مستويات الأمان المبدئية."> +<!ENTITY torbutton.prefs.sec_restore_defaults "استعد الإعادات المبدئية"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "إعدادات الأمن المتقدمة ..."> +<!ENTITY torbutton.prefs.sec_change "تبديل…"> +<!ENTITY torbutton.circuit_display.title "دائرة تور"> +<!ENTITY torbutton.circuit_display.new_circuit "دائرة تور جديدة لهذا الموقع"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "فتح نافذة عميل توثيق لخدمة Onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "تذكر هذا المفتاح"> diff --git a/toolkit/torbutton/chrome/locale/ar/torbutton.properties b/toolkit/torbutton/chrome/locale/ar/torbutton.properties new file mode 100644 index 000000000000..f90e005cf332 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = انترنت +torbutton.circuit_display.ip_unknown = IP غير معروف +torbutton.circuit_display.onion_site = موقع أونيون +torbutton.circuit_display.this_browser = هذا المتصفح +torbutton.circuit_display.relay = تحويلة +torbutton.circuit_display.tor_bridge = جسر +torbutton.circuit_display.unknown_country = بلد غير معروف +torbutton.circuit_display.guard = حارس +torbutton.circuit_display.guard_note = لا يمكن تغيير العقدة الخارسة +torbutton.circuit_display.learn_more = تعرّف على المزيد +torbutton.circuit_display.click_to_copy = انقر للنسخ +torbutton.circuit_display.copied = تم النسخ! +torbutton.content_sizer.margin_tooltip = يضيف متصفح تور هذا الهامش لجعل عرض وارتفاع نافذتك غير مميزين، لتقليل إمكانية اقتفاء أثرك عبر الإنترنت. +extensions.torbutton@torproject.org.description = زر تور يوفر زر لتعديل إعدادات تور وايضاً لمسح بيانات التصفح الخاصة بك بسرعة وبسهولة. +torbutton.popup.external.title = هل تريد تنزيل ملف خارجي؟ +torbutton.popup.external.app = لا يمكن لمتصفّح تور عرض هذه الملف، يجب عليك أن تفتحه باستعمال تطبيق آخر.\n\n +torbutton.popup.external.note = بعض أنواع من الملفات قد تتسبب في اتصال التطبيقات بالإنترنت دون استعمال تور.\n\n +torbutton.popup.external.suggest = لسلامتك, يجب عليك فتح الملفات المنزّلة وأنت غير متصل بالإنترنت، أو استعمل قرص تور حي مثل Tails.\n +torbutton.popup.launch = تحميل الملف +torbutton.popup.cancel = إلغاء +torbutton.popup.dontask = نزّل الملفات تلقائيا من الآن فصاعدًا +torbutton.popup.no_newnym = لا يمكن لزر تور أن يعطيك هوية جديدة بشكل آمن، لأنه لا يستطيع الوصول إلى منفذ تحكم تور.\n\nهل تستخدم حزمة متصفح تور حالياً؟ +torbutton.security_settings.menu.title = إعدادات الأما +torbutton.title.prompt_torbrowser = معلومات هامة عن زر تور +torbutton.popup.prompt_torbrowser = لقد تغيرت طريقة عمل زر تور: لم يعد بإمكانك إيقافه.\n\nأجرينا هذا التغيير لأنه من غير الآمن استخدام زر تور في المتصفح الذي يستخدم في التصفح خارج تور. هناك العديد من العلل التي لا يمكن معالجتها بأي طريقة أخرى.\n\nإذا أردت الاستمرار في استخدام فَيَرفُكس عاديا، فعليك إزالة زر تور وتنزيل حزمة متصفح تور. كما أن خصائص الخصوصية لمتصفح تور تتفوق على تلك التي في متصفح فَيَرفُكس العادي، حتى عند استخدامه مع زر تور.\n\nلإزالة زر تور، اذهب إلي أدوات->إضافات->محلقات [...] +torbutton.popup.short_torbrowser = معلومات هامة عن زر تور.\n\nزر تور مفعّل دائما الآن.\n\nاضغط على زر تور للمزيد من المعلومات. + +torbutton.popup.confirm_plugins = الملحقات مثل فلاش يمكن أن تضر بخصوصيتك وتكشف هويتك.\n\nكما يمكنها أن تتجنب تور و تكشف عن مكانك الحالي و عنوان الإنترنت (IP).\n\nهل أنت متأكد أنك تريد تفعيل الملحقات؟\n\n +torbutton.popup.never_ask_again = لا تسألني مرة أخرى +torbutton.popup.confirm_newnym = سيغلق متصفح تور كل النوافذ والألسنة، كما ستمسح كل جلسات المواقع.\n\nأتريد إعادة تشغيل متصفح تور الآن أم تغيير هويتك؟\n\n + +torbutton.maximize_warning = تكبير متصفح تور قد يسمح لبعض المواقع بالتعرف على حجم شاشتك، واستخدام هذه المعلومات لتقفيك. نوصي بابقاء نافذه متصف تور على حجمها الافتراضي. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=هذا الموقع (٪ S) حاول استخراج بيانات الصورة HTML5، والتي يمكن استخدامها لتحديد مكانك وتحديد الكومبيوتر.\n\nهل تريد أن يسمح متصفح Tor لهذا الموقع لاستخراج بيانات الصورة ؟ +canvas.notNow=في وقت آخر +canvas.notNowAccessKey=ن +canvas.allow=اسمح في المستقبل +canvas.allowAccessKey=س +canvas.never=لا تسمح لهذا الموقع أبدًا (مستحسن) +canvas.neverAccessKey=د + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=مشكلة في ملف إعدادات %S +profileReadOnly=لا يمكنك تشغيل %S من نظام ملفات خاص بالقراءة فقط. يرجى نسخ %S إلى موقع آخر قبل محاولة استخدامه. +profileReadOnlyMac=لا يمكنك تشغيل %S من نظام ملفات خاص بالقراءة فقط. يرجى نسخ %S إلى سطح المكتب أو مجلد التطبيقات قبل محاولة استخدامه. +profileAccessDenied=لا يمتلك %S الصلاحيات المطلوبة لملف إعداداتك. يرجى ضبط صلاحيات نظام الملفات ثم إعادة المحاولة. +profileMigrationFailed=فشل نقل ملف إعدادات %S الموجود إلى الإصدارة الجديدة.\nسيستخدم ملف إعدادات جديد. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=جاري تحميل S% من التحديث + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=الاتصال معمى (خدمة بصلة، %1$S، مفاتيح %2$S بتة، %3$S) +pageInfo_OnionEncryption=الاتصال معمى (خدمة بصلة) +pageInfo_OnionName=موقع أونيون + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=تعرف على المزيد +onionServices.errorPage.browser=المتصفح +onionServices.errorPage.network=الشبكة +onionServices.errorPage.onionSite=موقع Onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.descNotFound.header=لم يتم العثور على موقع Onion +onionServices.descNotFound=على الأغلب أن موقع onion غير متصل.تواصل مع مديرها. +onionServices.descNotFound.longDescription=التفاصيل:٪ S - لا يمكن العثور على واصف خدمة البصل المطلوب في التجزئة وبالتالي لا يمكن للعميل الوصول إلى الخدمة. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.descInvalid.header=ﻻ يمكن الوصول إلى موقع Onion +onionServices.descInvalid=لا يمكن الوصول إلى موقع onion بسبب خطأ داخلي. +onionServices.descInvalid.longDescription=التفاصيل:٪ S - لا يمكن تحليل واصف خدمة onion المطلوب أو فشل التحقق من صحة التوقيع. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.introFailed.header=موقع Onion قطع الاتصال. +onionServices.introFailed=على الأغلب أن موقع onion غير متصل.تواصل مع مديرها . +onionServices.introFailed.longDescription=التفاصيل:٪ S - فشل التقديم ، مما يعني أنه تم العثور على الواصف ولكن الخدمة لم تعد متصلة بنقطة التقديم. من المحتمل أن الخدمة قد غيرت واصفها أو أنها لا تعمل. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.rendezvousFailed.header=ﻻ يمكن الاتصال بموقع Onion +onionServices.rendezvousFailed=موقع onion مشغول أو أن شبكة Tor مكتظة. حاول مرة أخرى في وقت لاحق. +onionServices.rendezvousFailed.longDescription=التفاصيل:٪ S — فشل العميل في التقاء بالخدمة ، مما يعني أن العميل لم يتمكن من إنهاء الاتصال. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=التحقق مطلوب +onionServices.clientAuthMissing.header=يتطلب موقع Onion هذا المصادقة +onionServices.clientAuthMissing=يتطلب الوصول إلى موقع onion مفتاحًا ولكن لم يتم توفير أي شيء. +onionServices.clientAuthMissing.longDescription=التفاصيل:٪ S — قام العميل بتنزيل واصف خدمة onion المطلوب ولكنه لم يتمكن من فك تشفير محتواه لأن معلومات تخويل العميل مفقودة.عميل +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=فشل التحقق +onionServices.clientAuthIncorrect.header=فشل مصادقة موقع Onion +onionServices.clientAuthIncorrect=المفتاح المقدم غير صحيح أو تم إبطاله. اتصل بمسؤول موقع onion. +onionServices.clientAuthIncorrect.longDescription=التفاصيل:٪ S — كان العميل قادرًا على تنزيل واصف خدمة onion المطلوب ولكنه لم يتمكن من فك تشفير محتواه باستخدام معلومات مصادقة العميل المقدمة. قد يعني هذا أنه تم إبطال الوصول. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.badAddress.header=عنوان Onion غير صالح +onionServices.badAddress=عنوان موقع onion المقدم غير صالح. يرجى التحقق من أنك أدخلته بشكل صحيح. +onionServices.badAddress.longDescription=التفاصيل:٪ S — عنوان .onion المقدم غير صالح. تم إرجاع هذا الخطأ لأحد الأسباب التالية: عدم تطابق المجموع الاختباري للعنوان ، أو المفتاح العمومي ed25519 غير صالح ، أو الترميز غير صالح. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=حدثت مشكلة أثناء تحميل موقع Onion +onionServices.introTimedOut.header=انتهت مهلة إنشاء دارات موقع Onion +onionServices.introTimedOut=فشل الاتصال بموقع onion ، ربما بسبب ضعف اتصال الشبكة. +onionServices.introTimedOut.longDescription=التفاصيل:٪ S — انتهت مهلة الاتصال بخدمة onion المطلوبة أثناء محاولة بناء دائرة الالتقاء. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=يطلب٪ S منك المصادقة. +onionServices.authPrompt.keyPlaceholder=يرجى إدخال المفتاح الخاص لخدمة البصلة هذه +onionServices.authPrompt.done=انتهى +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=يرجى إدخال مفتاح صالح (قاعدة٥٢ ب ٣٢ رمز أو قاعدة٤٤ ب ٦٤ رمز) +onionServices.authPrompt.failedToSetKey=لا يمكن إعدادا تور باستخدام مفتاحكم +onionServices.authPreferences.header=مصادقة خدمات البصل +onionServices.authPreferences.overview=تتطلب بعض خدمات onion أن تحدد نفسك بمفتاح (نوع من كلمة المرور) قبل أن تتمكن من الوصول إليها. +onionServices.authPreferences.savedKeys=تم حفظ المفاتيح +onionServices.authPreferences.dialogTitle=مفاتيح خدمة Onion +onionServices.authPreferences.dialogIntro=يتم تخزين مفاتيح مواقع Onion التالية على جهاز الكمبيوتر الخاص بك +onionServices.authPreferences.onionSite=موقع Onion +onionServices.authPreferences.onionKey=مفتاح +onionServices.authPreferences.remove=حذف +onionServices.authPreferences.removeAll=حذف الكل +onionServices.authPreferences.failedToGetKeys=غير قادر على استرداد المفاتيح من tor +onionServices.authPreferences.failedToRemoveKey=لا يمكن حذف المفتاح +onionServices.v2Deprecated.pageTitle=V2 تحذير من إهمال موقع Onion +onionServices.v2Deprecated.header=سيتم إهمال الإصدار 2 من مواقع Onion قريبًا +onionServices.v2Deprecated=لن يمكن الوصول إلى موقع onion هذا قريبًا. يرجى الاتصال بمسؤول الموقع وتشجيعهم على الترقية. +onionServices.v2Deprecated.longDescription=أنهى Tor دعمه لخدمات onion من الإصدار 2 بدءًا من يوليو 2021 ، ولن يمكن الوصول إلى موقع onion هذا على هذا العنوان. إذا كنت مسؤول الموقع ، فقم بالترقية إلى الإصدار 3 من خدمة onion قريبًا. +onionServices.v2Deprecated.tryAgain=فهمت ذلك +onionServices.v2Deprecated.tooltip=لن يمكن الوصول إلى موقع onion هذا قريبًا + +# Onion-Location strings. +onionLocation.alwaysPrioritize=قم دائمًا بإعطاء الأولوية لل Onions +onionLocation.alwaysPrioritizeAccessKey=خ +onionLocation.notNow=في وقت آخر +onionLocation.notNowAccessKey=ا +onionLocation.description=هناك نسخة أكثر خصوصية وأمانًا من هذا الموقع متاحة عبر شبكة Tor عبر خدمات Onion. تساعد خدمات Onion ناشري مواقع الويب وزوارهم في التغلب على المراقبة والرقابة. +onionLocation.tryThis=جرب خدمة Onion +onionLocation.onionAvailable=.onion متوفر +onionLocation.learnMore=إطلع على المزيد... +onionLocation.always=دائماً +onionLocation.askEverytime=إسأل كل مرة +onionLocation.prioritizeOnionsDescription=إعطاء الأولوية لمواقع .onion إذا توفرت +onionLocation.onionServicesTitle=خدمات البصلة + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=تم نسخ عنوان العملة المشفرة (٪ S) من موقع ويب غير آمن. كان من الممكن تعديله. +cryptoSafetyPrompt.whatCanHeading=ماذا يمكنك أن تفعل بهذا الشأن? +cryptoSafetyPrompt.whatCanBody=يمكنك محاولة إعادة الاتصال بدائرة جديدة لإنشاء اتصال آمن، أو قبول المخاطرة واستبعاد هذا التحذير. +cryptoSafetyPrompt.learnMore=تعرف على المزيد +cryptoSafetyPrompt.primaryAction=إعادة تحميل علامة التبويب بدائرة جديدة +cryptoSafetyPrompt.primaryActionAccessKey=ق +cryptoSafetyPrompt.secondaryAction=رفض التحذير +cryptoSafetyPrompt.secondaryActionAccessKey=ب + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=آخر تحديث %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=مُفعّل +rulesets.disabled=معطل +# Ruleset details/edit ruleset +rulesets.edit=عدّل +rulesets.name=الاسم +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=نطاق +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=بحث عن الترقية +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=حفظ +rulesets.cancel=إلغاء diff --git a/toolkit/torbutton/chrome/locale/ar/torlauncher.properties b/toolkit/torbutton/chrome/locale/ar/torlauncher.properties new file mode 100644 index 000000000000..a87b22f425db --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ar/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=مُشغل تور + +torlauncher.tor_exited_during_startup=توقف تور أثناء بدء تشغيله. قد يكون هذا بسبب خطأ في ملف إعدادات تور، أو مشكلة في تور نفسه أو برنامج آخر على نظامك، أو بسبب مشكلة في عتاد جهازك. بدون إصلاح المشكلة الحقيقية وإعادة تشغيل تور لن يعمل متصفح تور. +torlauncher.tor_exited=توقف تور أثناء بدء تشغيله. قد يكون هذا بسبب خطأ في ملف إعدادات تور، أو مشكلة في تور نفسه أو برنامج آخر على نظامك، أو بسبب مشكلة في عتاد جهازك. بدون إصلاح المشكلة الحقيقية وإعادة تشغيل تور لن يعمل متصفح تور. إذا استمرت المشكلة، يرجى إرسال نسخة من سجل تور إلى فريق الدعم. +torlauncher.tor_exited2=إعادة تشغيل تور لا يغلق ألسنة المتصفح. +torlauncher.tor_controlconn_failed=تعذر الاتصال بمنفذ التحكم الخاص بتور. +torlauncher.tor_failed_to_start=تور فشل في بدء التشغيل. +torlauncher.tor_control_failed=تعذر التحكم في تور. +torlauncher.tor_bootstrap_failed=فشل تور في إنشاء اتصال بشبكة تور. +torlauncher.tor_bootstrap_failed_details=%1$S فشل(%2$S). + +torlauncher.unable_to_start_tor=غير قادر علي بدء تشغيل تور.\n\n%S +torlauncher.tor_missing=الملف التنفيذي لتور مفقود. +torlauncher.torrc_missing=ملف torrc غير موجود وتعذّر إنشاؤه. +torlauncher.datadir_missing=دليل بيانات تور غير موجود وتعذّر إنشاؤه. +torlauncher.onionauthdir_missing=دليل مصادقة Tor onion غير موجود ولا يمكن إنشاؤه. +torlauncher.password_hash_missing=فشل في الحصول على كلمة المرور المجزأة. + +torlauncher.failed_to_get_settings=غير قادر علي جلب إعدادات تور.\n\n%S +torlauncher.failed_to_save_settings=غير قادر علي حفظ إعدادات تور.\n\n%S +torlauncher.ensure_tor_is_running=الرجاء التأكد أن تور يعمل. + +torlauncher.error_proxy_addr_missing=من الضروري تحديد كل من عنوان الانترنت IP أو عنوان مستضيف واحد و منفذ وذلك لتهيئة تور لأستخدام بروكسي حتي يستطيع الوصول إلي شبكة الانترنت. +torlauncher.error_proxy_type_missing=من الضروري تحديد نوع البروكسي. +torlauncher.error_bridges_missing=من الضروري تحديد جسر واحد أو أكثر. +torlauncher.error_default_bridges_type_missing=يجب عليك تحديد نوع الجسور المقدمة مع المتصفح. +torlauncher.error_bridgedb_bridges_missing=يُرجى طلب جسر. +torlauncher.error_bridge_bad_default_type=هذا النوع غير متوفر بداخل الجسور المقدمة مع المتصفح. الرجاء تعديل إعداداتك. + +torlauncher.bridge_suffix.meek-amazon=(يعمل في الصين) +torlauncher.bridge_suffix.meek-azure=(يعمل في الصين) + +torlauncher.request_a_bridge=اطلب جسرا… +torlauncher.request_a_new_bridge=اطلب جسرا جديدا… +torlauncher.contacting_bridgedb=يتصل بقاعدة بيانات الجسور BridgeDB. يُرجى الانتظار. +torlauncher.captcha_prompt=حل كاباتشا لطلب جسر. +torlauncher.bad_captcha_solution=الحل ليس سليمًا. يُرجى إعادة المحاولة. +torlauncher.unable_to_get_bridge=تعذّر جلب جسر من قاعدة بيانات الجسور BridgeDB.\n\n%S +torlauncher.no_meek=ليس المتصفح معدّا ليستخدم meek، وهو أساسي للحصول على الجسور. +torlauncher.no_bridges_available=المعذرة. لا تتوفر أية جسور حاليا. + +torlauncher.connect=اتصل +torlauncher.restart_tor=أعِد تشغيل تور +torlauncher.quit=إنهاء +torlauncher.quit_win=خروج +torlauncher.done=تم + +torlauncher.forAssistance=للمساعدة, اتصل بـ %S +torlauncher.forAssistance2=للمُساعدة, قُم بزيارة S% + +torlauncher.copiedNLogMessages=تم النسخ. %S من رسائل سجل تور جاهزة للصقها في محرر نصوص أو رسالة بريد إلكتروني. + +torlauncher.bootstrapStatus.starting=جاري البدأ +torlauncher.bootstrapStatus.conn_pt=يتم الإتصال مع جِسْر +torlauncher.bootstrapStatus.conn_done_pt=يتم الإتصال مع جِسْر +torlauncher.bootstrapStatus.conn_proxy=يتم التواصل مع الوكيل +torlauncher.bootstrapStatus.conn_done_proxy=يتم التواصل مع الوكيل +torlauncher.bootstrapStatus.conn=يتم الإتصال بمرحل تور +torlauncher.bootstrapStatus.conn_done=متصل بمُرحّل تور +torlauncher.bootstrapStatus.handshake=يتم التفاوض مع مرحل تور +torlauncher.bootstrapStatus.handshake_done=تم إنتهاء التفاوض مع مرحل تور +torlauncher.bootstrapStatus.onehop_create=ينشئ اتصالا مشفرا بالدليل +torlauncher.bootstrapStatus.requesting_status=يجلب حالة الشبكة +torlauncher.bootstrapStatus.loading_status=يحمّل حالة الشبكة +torlauncher.bootstrapStatus.loading_keys=يحمل شهادات السلطة +torlauncher.bootstrapStatus.requesting_descriptors=يطلب معلومات التحويلة +torlauncher.bootstrapStatus.loading_descriptors=يحمل معلومات التحويلة +torlauncher.bootstrapStatus.enough_dirinfo=يتم الإنتهاء من تحميل مرحل المعلومات +torlauncher.bootstrapStatus.ap_conn_pt=بناء دارات : يتم الإتصال مع جِسْر +torlauncher.bootstrapStatus.ap_conn_done_pt=بناء دارات : يتم الإتصال مع جِسْر +torlauncher.bootstrapStatus.ap_conn_proxy=بناء دارات : يتم التواصل مع الوكيل +torlauncher.bootstrapStatus.ap_conn_done_proxy=بناء دارات : يتم التواصل مع الوكيل +torlauncher.bootstrapStatus.ap_conn=بناء دارات : يتم الإتصال بمرحل تور +torlauncher.bootstrapStatus.ap_conn_done=بناء الدارات : متصل بمُرحّل تور +torlauncher.bootstrapStatus.ap_handshake= بناء دارات : يتم التفاوض مع مرحل تور +torlauncher.bootstrapStatus.ap_handshake_done= بناء دارات : تم إنتهاء التفاوض مع مرحل تور +torlauncher.bootstrapStatus.circuit_create= بناء دارات : ينشئ دائرة تور +torlauncher.bootstrapStatus.done=تم الاتصال بشبكة تور + +torlauncher.bootstrapWarning.done=تم +torlauncher.bootstrapWarning.connectrefused=رُفض الاتصال +torlauncher.bootstrapWarning.misc=متفرّقات +torlauncher.bootstrapWarning.resourcelimit=الموارد غير كافية +torlauncher.bootstrapWarning.identity=لم تتطابق الهوية +torlauncher.bootstrapWarning.timeout=انتهت مهلة الاتصال +torlauncher.bootstrapWarning.noroute=لا طريق للمضيف +torlauncher.bootstrapWarning.ioerror=خطأ في القراءة/الكتابة +torlauncher.bootstrapWarning.pt_missing=الناقل المضاف مفقود + +torlauncher.nsresult.NS_ERROR_NET_RESET=قُطع الاتصال مع الخادوم. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=فشِل الاتصال بالخادوم. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=فشِل الاتصال بالوسيط. + +torlauncher.copiedNLogMessagesShort=نسخ سجلات٪ S diff --git a/toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd new file mode 100644 index 000000000000..4ab33f91d349 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; és desenvolupat per"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "El &vendorShortName;"> +<!ENTITY project.end ", un treball sense ànim de lucre per defensar la privacitat i llibertat virtual."> + +<!ENTITY help.start "Vols ajudar?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Fes una donació"> +<!ENTITY help.or "o"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "Forma'n part"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Preguntes?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Ajuda la xarxa Tor a créixer!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informació de la llicència"> +<!ENTITY tor.TrademarkStatement "'Tor' i 'Onion Logo' són marques registrades per Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/ca/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ca/aboutTBUpdate.dtd new file mode 100644 index 000000000000..731a74dcf3cc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Registre de canvis del navegador Tor"> +<!ENTITY aboutTBUpdate.updated "El navegador Tor s'ha actualitzat. "> +<!ENTITY aboutTBUpdate.linkPrefix "Per la informació més actualitzada sobre aquesta versió,"> +<!ENTITY aboutTBUpdate.linkLabel "visiteu el lloc web"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versió"> +<!ENTITY aboutTBUpdate.releaseDate "Data de la versió"> +<!ENTITY aboutTBUpdate.releaseNotes "Notes de la versió"> diff --git a/toolkit/torbutton/chrome/locale/ca/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ca/aboutTor.dtd new file mode 100644 index 000000000000..d948b4e4bc31 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Quant al Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Mostra el registre de canvis"> + +<!ENTITY aboutTor.ready.label "Exploreu. Privadament."> +<!ENTITY aboutTor.ready2.label "Esteu preparat per a l'experiència de navegació més privada del món."> +<!ENTITY aboutTor.failure.label "S'ha produït un error."> +<!ENTITY aboutTor.failure2.label "Tor no funciona en aquest navegador."> + +<!ENTITY aboutTor.search.label "Cerca amb DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Cap pregunta?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Consulteu el nostre manual del navegador Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manual del navegador Tor"> + +<!ENTITY aboutTor.tor_mission.label "El projecte Tor és una US 501(c)(3) organització sense ànim de lucre que avança els drets i les llibertats dels drets humans mitjançant la creació i implementació d'anonimat de codi obert i lliure i tecnologies de privadesa, que donen suport a la seva disponibilitat i ús sense restriccions i fomenten la seva comprensió científica i popular."> +<!ENTITY aboutTor.getInvolved.label "Col·laboreu-hi »"> + +<!ENTITY aboutTor.newsletter.tagline "Obteniu les darreres novetats de Tor directament a la safata d'entrada."> +<!ENTITY aboutTor.newsletter.link_text "Inscriviu-vos a les noticies de Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor és d'ús gratuït gràcies als donatius de persones com vós."> +<!ENTITY aboutTor.donationBanner.buttonA "Feu una donació"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "FEU UNA DONACIÓ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "_Friends of Tor_ igualarà la vostra donació fins a 100.000 dòlars."> diff --git a/toolkit/torbutton/chrome/locale/ca/brand.dtd b/toolkit/torbutton/chrome/locale/ca/brand.dtd new file mode 100644 index 000000000000..359b610bbdcb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Navegador Tor"> +<!ENTITY brandShortName "Navegador Tor"> +<!ENTITY brandFullName "Navegador Tor"> +<!ENTITY vendorShortName "Projecte Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' i 'Onion Logo' són marques registrades per Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Navegador Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Feu clic per carregar els connectors del sistema instal·lats"> +<!ENTITY plugins.installed.enable "Activa els connectors"> +<!ENTITY plugins.installed.disable "Desactiva els connectors"> +<!ENTITY plugins.installed.disable.tip "Feu clic per impedir que es carreguin els connectors del sistema"> diff --git a/toolkit/torbutton/chrome/locale/ca/brand.properties b/toolkit/torbutton/chrome/locale/ca/brand.properties new file mode 100644 index 000000000000..762c4bd4de3e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Navegador Tor +brandShortName=Navegador Tor +brandFullName=Navegador Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Navegador Tor +vendorShortName=Projecte Tor + +homePageSingleStartMain=Inici de Firefox, pàgina d'inici amb cerca ràpida +homePageImport=Importa la pàgina d'inici des de %S + +homePageMigrationPageTitle=Selecció de pàgina d'inici +homePageMigrationDescription=Trieu la pàgina d'inici que voleu: + +syncBrandShortName=Sync diff --git a/toolkit/torbutton/chrome/locale/ca/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ca/branding/brand.ftl new file mode 100644 index 000000000000..3796e9129114 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Navegador Tor +-brand-short-name = Navegador Tor +-brand-full-name = Navegador Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Navegador Tor +-vendor-short-name = Projecte Tor +trademarkInfo = 'Tor' i 'Onion Logo' són marques registrades per Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/ca/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ca/browserOnboarding.properties new file mode 100644 index 000000000000..1e72108ea5ea --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Benvingut +onboarding.tour-tor-welcome.title=Ja estàs preparat. +onboarding.tour-tor-welcome.description=El navegador Tor ofereix el màxim nivell de privadesa i seguretat mentre navegueu per la web. Ara està protegit contra el seguiment, la vigilància i la censura. Aquest ràpid embarcament us mostrarà com fer-ho. +onboarding.tour-tor-welcome.next-button=Vés a la privadesa + +onboarding.tour-tor-privacy=Privadesa +onboarding.tour-tor-privacy.title=Seguidors de snub i snoopers. +onboarding.tour-tor-privacy.description=El navegador Tor aïllarà les galetes i elimina l'historial del navegador després de la sessió. Aquestes modificacions garanteixen que la vostra privadesa i seguretat estiguin protegides al navegador. Feu clic a 'Tor Network' per obtenir informació sobre com us protegim al nivell de la xarxa. +onboarding.tour-tor-privacy.button=Aneu a la xarxa Tor + +onboarding.tour-tor-network=Xarxa Tor +onboarding.tour-tor-network.title=Viatja per una xarxa descentralitzada. +onboarding.tour-tor-network.description=El navegador Tor us connecta a la xarxa Tor gestionada per milers de voluntaris de tot el món. A diferència d'una VPN, no hi ha cap punt de fracàs o entitat centralitzada que necessiteu confiar per gaudir d'Internet en privat. +onboarding.tour-tor-network.description-para2=NOVETAT: Ara podeu trobar a les Preferències la Configuració de la xarxa Tor, que inclou la capacitat de sol·licitar línies de pont si el Tor està blocat. +onboarding.tour-tor-network.action-button=Configureu la vostra xarxa Tor +onboarding.tour-tor-network.button=Vés a la pantalla de circuits + +onboarding.tour-tor-circuit-display=Pantalla de circuits +onboarding.tour-tor-circuit-display.title=Vegeu el vostre camí. +onboarding.tour-tor-circuit-display.description=Per cada domini que visiteu, el vostre trànsit es retransmet i es xifra en un circuit a través de tres repetidors Tor al voltant del món. Cap lloc web sap d'on es connecta. Podeu sol·licitar un nou circuit fent clic a 'Circuit nou per a aquest lloc' a la pantalla de circuits. +onboarding.tour-tor-circuit-display.button=Veure el meu camí +onboarding.tour-tor-circuit-display.next-button=Vés a la seguretat + +onboarding.tour-tor-security=Seguretat +onboarding.tour-tor-security.title=Tria la teva experiència. +onboarding.tour-tor-security.description=També li oferim opcions de configuració addicionals per eliminar la seguretat del vostre navegador. La nostra configuració de seguretat us permet bloquejar els elements que es podrien utilitzar per atacar l'ordinador. Feu clic a sota per veure què fan les diferents opcions. +onboarding.tour-tor-security.description-suffix=Nota: de forma predeterminada, NoScript i HTTPS Everywhere no s'inclouen a la barra d'eines, però podeu personalitzar la barra d'eines i afegir-los. +onboarding.tour-tor-security-level.button=Consulteu el vostre nivell de seguretat +onboarding.tour-tor-security-level.next-button=Vés als consells d'experiència + +onboarding.tour-tor-expect-differences=Consells sobre experiències +onboarding.tour-tor-expect-differences.title=Espereu algunes diferències. +onboarding.tour-tor-expect-differences.description=Amb totes les funcions de seguretat i privacitat proporcionades per Tor, la vostra experiència en navegar per Internet pot ser una mica diferent. Les coses poden ser una mica més lentes, i depenent del vostre nivell de seguretat, pot ser que alguns elements no funcionin ni es carreguin. També se us pot demanar que demostreu que sou un ésser humà i no un robot. +onboarding.tour-tor-expect-differences.button=Mirar preguntes freqüents +onboarding.tour-tor-expect-differences.next-button=Vés als serveis Onion + +onboarding.tour-tor-onion-services=Onion Services +onboarding.tour-tor-onion-services.title=Estigueu protegits addicionalment. +onboarding.tour-tor-onion-services.description=Els serveis de onion són llocs que acaben amb un .onion que proporciona proteccions addicionals a editors i visitants, incloses les mesures addicionals de protecció contra la censura. Els serveis de onion permeten que qualsevol persona proporcioni continguts i serveis de forma anònima. Feu clic a continuació per visitar el lloc de onion de DuckDuckGo. +onboarding.tour-tor-onion-services.button=Visita un Onion +onboarding.tour-tor-onion-services.next-button=Fet + +onboarding.overlay-icon-tooltip-updated2=Què hi ha de nou a %S +onboarding.tour-tor-update.prefix-new=Nou +onboarding.tour-tor-update.prefix-updated=Actualitzat + +onboarding.tour-tor-toolbar=Barra d'eines +onboarding.tour-tor-toolbar-update-9.0.title=Adéu botó Onion +onboarding.tour-tor-toolbar-update-9.0.description=Volem que la vostra experiència usant el Tor sigui íntegra, mitjançant el navegador Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=És per aquest motiu que, en comptes de veure el botó de la ceba, ara veieu el logotip del Circuit del Tor a [i] de l'URL i en demanar una identitat mitjançant el botó de la barra d'eines o el menú [≡] . +onboarding.tour-tor-toolbar-update-9.0.button=Com demanar una identitat nova +onboarding.tour-tor-toolbar-update-9.0.next-button=Aneu a la Xarxa Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Següent +onboarding.tor-circuit-display.done=Fet +onboarding.tor-circuit-display.one-of-three=1 de 3 +onboarding.tor-circuit-display.two-of-three=2 de 3 +onboarding.tor-circuit-display.three-of-three=3 de 3 + +onboarding.tor-circuit-display.intro.title=Com funcionen els circuits? +onboarding.tor-circuit-display.intro.msg=Els circuits estan formats per repetidors assignats aleatòriament, que són ordinadors de tot el món configurats per reenviar el trànsit de Tor. Els circuits us permeten navegar de manera privada i connectar-vos amb els serveis de ceba. + +onboarding.tor-circuit-display.diagram.title=Pantalla de circuits +onboarding.tor-circuit-display.diagram.msg=Aquest diagrama mostra els repetidors que conformen el circuit d'aquest lloc web. Per evitar la vinculació de l'activitat en diferents llocs, cada lloc web obté un circuit diferent. + +onboarding.tor-circuit-display.new-circuit.title=Necessites un nou circuit? +onboarding.tor-circuit-display.new-circuit.msg=Si no podeu connectar-vos al lloc web que esteu tractant de visitar o no s'està carregant correctament, podeu utilitzar aquest botó per tornar a carregar el lloc amb un nou circuit. diff --git a/toolkit/torbutton/chrome/locale/ca/network-settings.dtd b/toolkit/torbutton/chrome/locale/ca/network-settings.dtd new file mode 100644 index 000000000000..288e7ca1d750 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/network-settings.dtd @@ -0,0 +1,180 @@ +<!ENTITY torsettings.dialog.title "Configuració de la xarxa Tor"> +<!ENTITY torsettings.wizard.title.default "Connecta a Tor"> +<!ENTITY torsettings.wizard.title.configure "Configuració de la xarxa Tor"> +<!ENTITY torsettings.wizard.title.connecting "S'està establint connexió"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Llengua del navegador Tor"> +<!ENTITY torlauncher.localePicker.prompt "Sel·leccioneu una llengua"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Feu clic a «Connecta» per a connectar a Tor."> +<!ENTITY torSettings.configurePrompt "Feu clic a «Configura» per a ajustar la configuració de la xarxa si esteu en un país que censura Tor (com ara Egipte, Xina, Turquia) o si us esteu connectant des d'una xarxa privada que requereix un servidor intermediari."> +<!ENTITY torSettings.configure "Configura"> +<!ENTITY torSettings.connect "Conecta't"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Esperant a Tor per començar..."> +<!ENTITY torsettings.restartTor "Reinicia Tor"> +<!ENTITY torsettings.reconfigTor "Reconfigura"> + +<!ENTITY torsettings.discardSettings.prompt "Heu configurat ponts Tor o heu introduït una configuració de servidor intermediari local.  Per a connectar-vos directament a la xarxa Tor, cal eliminar aquestes preferències."> +<!ENTITY torsettings.discardSettings.proceed "Elimina les preferències i connecta"> + +<!ENTITY torsettings.optional "Opcional +"> + +<!ENTITY torsettings.useProxy.checkbox "Utilitzo un servidor intermediari per a accedir a Internet"> +<!ENTITY torsettings.useProxy.type "Tipus de servidor intermediari"> +<!ENTITY torsettings.useProxy.type.placeholder "seleccioneu un tipus de servidor intermediari"> +<!ENTITY torsettings.useProxy.address "Adreça"> +<!ENTITY torsettings.useProxy.address.placeholder "Adreça IP o nom del host"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Nom d’usuari"> +<!ENTITY torsettings.useProxy.password "Contrasenya"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Aquest ordinador va a través d'un tallafoc que només permet connexions a certs ports"> +<!ENTITY torsettings.firewall.allowedPorts "Ports permesos"> +<!ENTITY torsettings.useBridges.checkbox "Tor està censurat al meu país"> +<!ENTITY torsettings.useBridges.default "Seleccioneu un pont predefinit"> +<!ENTITY torsettings.useBridges.default.placeholder "seleccioneu un pont"> +<!ENTITY torsettings.useBridges.bridgeDB "Sol·licita un pont a torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Introduïu els caràcters de la imatge"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Obtén un repte nou"> +<!ENTITY torsettings.useBridges.captchaSubmit "Envia"> +<!ENTITY torsettings.useBridges.custom "Proporciona un pont conegut"> +<!ENTITY torsettings.useBridges.label "Introdueix informació d'un pont d'una font fiable."> +<!ENTITY torsettings.useBridges.placeholder "introduïu adreça:port (un per línia)"> + +<!ENTITY torsettings.copyLog "Copia el registre de Tor al porta-retalls"> + +<!ENTITY torsettings.proxyHelpTitle "Ajuda del servidor intermediari"> +<!ENTITY torsettings.proxyHelp1 "Pot ser necessari un servidor intermediari local quan us connecteu a través de la xarxa d'una empresa, escola o universitat. En cas de dubte si us cal o no un servidor intermediari, mireu els paràmetres d'altre navegador o bé comproveu la configuració de xarxa del vostre sistema."> + +<!ENTITY torsettings.bridgeHelpTitle "Ajuda per als repetidors de pont"> +<!ENTITY torsettings.bridgeHelp1 "Els ponts són repetidors no llistats que fan més difícil el bloqueig de connexions a la xarxa Tor.  Cada tipus de pont usa un mètode diferent per a evitar la censura.  Els tipus OBFS fan passar el vostre tràfic com a soroll aleatori, mentre que els MEEK fan que paregui que es connecta a un altre servei diferent a Tor."> +<!ENTITY torsettings.bridgeHelp2 "Depenent del bloqueig aplicat al Tor a cada país, alguns ponts poden funcionar correctament en certs països, però en altres no.  En cas de dubte dels ponts que funcionen al vostre país, visiteu torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "S'està establint una connexió amb la xarxa Tor.  Això pot trigar una mica."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Connexió"> +<!ENTITY torPreferences.torSettings "Configuració del Tor"> +<!ENTITY torPreferences.torSettingsDescription "El navegador Tor encamina el vostre trànsit cap a la xarxa Tor, gestionada per milers de voluntaris de tot el món." > +<!ENTITY torPreferences.learnMore "Més informació"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "En línia"> +<!ENTITY torPreferences.statusInternetOffline "Fora de línia"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Connectat"> +<!ENTITY torPreferences.statusTorNotConnected "No connectat"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Més informació"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Inici ràpid"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Activa sempre la connexió automàtica"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Ponts"> +<!ENTITY torPreferences.bridgesDescription "Els ponts us ajuden a accedir a la xarxa Tor en llocs on Tor està bloquejat. Depenent d'on sigueu, un pont pot funcionar millor que un altre."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automàtic"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Suprimeix"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "S'ha copiat!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Sol·licita un pont..."> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avançat"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Mostra els registres…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Cancel·la"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Sol·licita un pont"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "S'està contactant amb el BridgeDB. Espereu."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solucioneu el CAPTCHA per sol·licitar un pont."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solució no és correcta. Torneu a provar-ho."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Introduïu la informació del pont d'una font confiable"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Registres del Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "No connectat"> +<!ENTITY torConnect.connectingConcise "S'està connectant..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automàtic"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configuració de la connexió…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Torna-ho a provar"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Els canvis a la configuració del Tor no seran aplicats fins que no connecteu"> +<!ENTITY torConnect.tryAgainMessage "Ha fallat en establir una connexió amb la xarxa Tor"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Proveu un pont"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/ca/onboarding.properties b/toolkit/torbutton/chrome/locale/ca/onboarding.properties new file mode 100644 index 000000000000..85f49250b605 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Nou al %S?\nComencem. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=El %S s'ha renovat.\nDescobriu què podeu fer! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Tanca +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Tanca +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Acabat diff --git a/toolkit/torbutton/chrome/locale/ca/torbutton.dtd b/toolkit/torbutton/chrome/locale/ca/torbutton.dtd new file mode 100644 index 000000000000..07b2569b49b1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Identitat nova"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Identitat nova"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Nou circuit Tor per a aquest lloc"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Circuit nou del Tor per a aquest Web"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Configuració de la xarxa Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "X"> +<!ENTITY torbutton.context_menu.downloadUpdate "Cerca una actualització del navegador Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "A"> +<!ENTITY torbutton.context_menu.cookieProtections "Proteccions de les Galetes..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Feu clic per a iniciar Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Paràmetres de seguretat del navegador Tor"> +<!ENTITY torbutton.cookiedialog.title "Gestiona les proteccions de les galetes"> +<!ENTITY torbutton.cookiedialog.lockCol "Protegit"> +<!ENTITY torbutton.cookiedialog.domainCol "Amfitrió"> +<!ENTITY torbutton.cookiedialog.nameCol "Nom"> +<!ENTITY torbutton.cookiedialog.pathCol "Camí"> +<!ENTITY torbutton.cookiedialog.protectCookie "Protegeix la galeta"> +<!ENTITY torbutton.cookiedialog.removeCookie "Elimina la galeta"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "No protegeixis la galeta"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Elimina-les totes menys les protegides"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Protegeix les galetes noves"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "No protegeixis les galetes noves"> +<!ENTITY torbutton.prefs.sec_caption "Nivell de seguretat"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "El control lliscant de seguretat permet desactivar certes funcions del navegador que poden fer que sigui més vulnerable als intents d'atac de furoners."> +<!ENTITY torbutton.prefs.sec_standard_label "Estàndard"> +<!ENTITY torbutton.prefs.sec_standard_description "Totes les funcions del navegador Tor i dels llocs web estan activades."> +<!ENTITY torbutton.prefs.sec_safer_label "Més seguretat"> +<!ENTITY torbutton.prefs.sec_safer_description "Desactiva les funcions dels llocs web que sovint són perilloses, pot fer que alguns llocs perdin funcionalitat."> +<!ENTITY torbutton.prefs.sec_safer_list_label "En la configuració de més seguretat:"> +<!ENTITY torbutton.prefs.sec_safest_label "Màxima seguretat"> +<!ENTITY torbutton.prefs.sec_safest_description "Només es permeten les funcions dels llocs web necessàries per a llocs estàtics i serveis bàsics. Aquests canvis afecten les imatges, el contingut multimèdia i els scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "En la configuració de màxima seguretat:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Més informació"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "El JavaScript està desactivat per defecte en tots els llocs que no són HTTPS"> +<!ENTITY torbutton.prefs.sec_js_disabled "El JavaScript està desactivat per defecte en tots els llocs."> +<!ENTITY torbutton.prefs.sec_limit_typography "Es desactiven alguns tipus de lletra i símbols matemàtics. "> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Es desactiven alguns tipus de lletra, icones, símbols matemàtics i imatges. "> +<!ENTITY torbutton.prefs.sec_click_to_play_media "L'àudio i vídeo (contingut multimèdia HTML5) i WebGL són de tipus «clic per a reproduir». "> +<!ENTITY torbutton.prefs.sec_custom_warning "Personalitzat"> +<!ENTITY torbutton.prefs.sec_overview "Desactiva certes funcions web que es poden fer servir per atacar la vostra seguretat i el vostre anonimat."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Nivell de seguretat: Estàndard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Nivell de seguretat: Més seguretat"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Nivell de seguretat: Màxima seguretat"> +<!ENTITY torbutton.prefs.sec_custom_summary "Les preferències personalitzades del navegador que heu triat fan que la configuració de seguretat sigui poc habitual. Per raons de privadesa i seguretat, recomanem que trieu un nivell de seguretat per defecte."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Restaura els valors per defecte"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Configuració de seguretat avançada…"> +<!ENTITY torbutton.prefs.sec_change "Canvia…"> +<!ENTITY torbutton.circuit_display.title "Circuit de Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Circuit nou per a aquest lloc"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Obre l'indicador d'autenticació del client de servei ceba"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Recorda aquesta clau"> diff --git a/toolkit/torbutton/chrome/locale/ca/torbutton.properties b/toolkit/torbutton/chrome/locale/ca/torbutton.properties new file mode 100644 index 000000000000..cf64c1890acd --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP desconeguda +torbutton.circuit_display.onion_site = Lloc .onion +torbutton.circuit_display.this_browser = Aquest navegador +torbutton.circuit_display.relay = Repetidor +torbutton.circuit_display.tor_bridge = Pont +torbutton.circuit_display.unknown_country = País desconegut +torbutton.circuit_display.guard = Guarda +torbutton.circuit_display.guard_note = El vostre node de [Guarda] pot no canviar. +torbutton.circuit_display.learn_more = Apreneu-ne més +torbutton.circuit_display.click_to_copy = Feu clic per a copiar +torbutton.circuit_display.copied = S'ha copiat! +torbutton.content_sizer.margin_tooltip = El navegador Tor afegeix aquest marge per a minorar la diferència de alçada i amplada de la finestra, això fa reduir la capacitat de rastrejar-te. +extensions.torbutton@torproject.org.description = Torbutton permet accedir a la configuració de Tor i esborrar fàcilment i ràpidament les dades privades de navegació per internet. +torbutton.popup.external.title = Voleu descarregar un tipus de fitxer extern? +torbutton.popup.external.app = Tor Browser no pot visualitzar aquest fitxer. Cal obrir-lo amb una altra aplicació.\n\n +torbutton.popup.external.note = Alguns tipus de fitxers poden fer que les aplicacions es connectin a Internet sense passar per Tor.\n\n +torbutton.popup.external.suggest = Per seguretat, obriu els fitxers descarregats havent desactivat la connexió a Internet, o fer servir un CD de sistema operatiu preconfigurat com Tails.\n +torbutton.popup.launch = Descarrega el fitxer +torbutton.popup.cancel = Cancel·la +torbutton.popup.dontask = A partir d'ara, descarrega els fitxers automàticament +torbutton.popup.no_newnym = El Torbutton no pot adjudicar-vos de forma segura una nova identitat. No disposeu d'accés al Tor Control Port.\n\nEsteu usant el Tor Browser Bundle? +torbutton.security_settings.menu.title = Configuració de seguretat +torbutton.title.prompt_torbrowser = Informació important sobre Torbutton +torbutton.popup.prompt_torbrowser = Torbutton Funciona de forma diferent ara: ja no el pot tancar.\n\nHem fet aquest canvi per que l'ús de Torbutton en un navegador utilitzat també per navegar fora de l'entorn de Tor ja no es segur. Hi havien moltes incidències i no hem trobat cap altre solució per arreglar-les. \n\nSi desitja continuar utilitzant Firefox de forma habitual, ha de desinstalar Torbutton i descarregar Tor Browser Bundle. La seguretat de Tor Browser es millor que la de Firef [...] +torbutton.popup.short_torbrowser = Informació important sobre Torbutton! \n\nTorbutton ara és troba sempre activat.\n\nFaci click sobre Torbutton per més informació. + +torbutton.popup.confirm_plugins = Alguns connectors, com el Flash, poden afectar la vostra privadesa i el vostre anonimat.\n\nTambé poden eludir el Tor i revelar la vostra ubicació i adreça IP actuals.\n\nSegur que voleu activar els connectors? +torbutton.popup.never_ask_again = No torneu a preguntar +torbutton.popup.confirm_newnym = El navegador Tor tancarà totes les finestres i pestanyes. Totes les sessions web es perdran. \n\nVol reiniciar el navegador Tor per reiniciar la seva identitat?\n\n + +torbutton.maximize_warning = Maximitzar Tor Browser por permetre als llocs web determinar les dimensions del teu monitor, que pot utilitzar-se per a rastrejar-li. Li recomanem que deixe la finestra de Tor Browser amb la seva mida per defecte. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Aquest lloc web (%S) ha intentat extreure les dades de la imatge del llenç HTML5, que es poden utilitzar per identificar el seu ordinador.\n\nEl Navegador Tor hauria de permetre que aquest lloc web extregui les dades de la imatge del llenç HTML5? +canvas.notNow=Ara no +canvas.notNowAccessKey=N +canvas.allow=Permet a partir d'ara +canvas.allowAccessKey=A +canvas.never=Mai per a aquest lloc (recomanat) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problema en el perfil %S +profileReadOnly=No pot executar %S des de un sistema de fitxers de només lectura. Si us plau, copie $S a un altra localització avanç de intentar usar-ho. +profileReadOnlyMac=No pot executar %S des de un sistema de fitxers de només lectura. Si us plau, copie $S a la seva carpeta Escriptori o Aplicacions avanç de intentar usar-ho. +profileAccessDenied=%S no té permisos per accedir al perfil. Si us plau, ajuste els permisos del seu sistema de fitxers i intente-ho de nou. +profileMigrationFailed=La migració del vostre perfil %S ha fallat.\nS'utilitzarà una configuració nova. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=S'està baixant l'actualització %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Connexió xifrada (Onion Service, %1$S, claus de %2$S bits, %3$S) +pageInfo_OnionEncryption=Connexió xifrada (Onion Service) +pageInfo_OnionName=Nom .onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Més informació +onionServices.errorPage.browser=Navegador +onionServices.errorPage.network=Xarxa +onionServices.errorPage.onionSite=Lloc onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.descNotFound.header=No s'ha trobat el lloc .onion +onionServices.descNotFound=La causa més probable és que el lloc .onion és fora de línia. Contacte amb l'administrador del lloc .onion. +onionServices.descNotFound.longDescription=Detalls: %S — El descriptor del servei Onion sol·licitat no es pot trobar en l'anell d'etiquetes i per tant el client no pot aconseguir el servei. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.descInvalid.header=El lloc Onion no es pot aconseguir +onionServices.descInvalid=El lloc Onion no es pot aconseguir a causa d'un error intern. +onionServices.descInvalid.longDescription=Detalls: %S — El descriptor del servei Onion sol·licitat no es pot analitzar o la validació de la signatura ha fallat. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.introFailed.header=El lloc .onion ha desconectat +onionServices.introFailed=La causa més probable és que el lloc .onion és fora de línia. Contacte amb l'administrador del lloc .onion. +onionServices.introFailed.longDescription=Detalls: %S — Ha fallat la introducció, el que significa que el descriptor s'ha trobat però el servei ja no es troba connectat al punt d'introducció. Segurament el servei ha canviat de descriptor, o no és iniciat. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.rendezvousFailed.header=No s'ha pogut connectar al lloc .onion +onionServices.rendezvousFailed=El lloc Onion està ocupat o la xarxa Tor està sobrecarregada. Proveu de nou més tard. +onionServices.rendezvousFailed.longDescription=Detalls: %S — El client a fallat en interactuar amb el servei, el que significa que el client no podia finalitzar la connexió. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Es requereix autorització +onionServices.clientAuthMissing.header=El lloc .onion requereix autenticació +onionServices.clientAuthMissing=L'accés al lloc .onion requereix una clau però no se n'ha proporcionat cap. +onionServices.clientAuthMissing.longDescription=Detalls: %S — El client ha baixat el descriptor del servei Onion sol·licitat, però no ha pogut desxifrar el seu contingut perquè falta la informació de l'autorització del client. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Ha fallat l'autorització +onionServices.clientAuthIncorrect.header=Ha fallat l'autenticació del lloc Onion +onionServices.clientAuthIncorrect=La clau proporcionada no és correcta o s'ha revocat. Contacteu amb l'administrador del lloc Onion. +onionServices.clientAuthIncorrect.longDescription=Detalls: %S — El client ha pogut baixar el descriptor del servei Onion sol·licitat, però no ha pogut desxifrar el seu contingut utilitzant la informació d'autorització del client proporcionada. Això podria significar que l'accés s'ha revocat. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.badAddress.header=L'adreça del lloc .onion no és vàlida +onionServices.badAddress=L'adreça del servei Onion proporcionada no és vàlida. Comproveu que l'heu introduïda correctament. +onionServices.badAddress.longDescription=Detalls: %S — L'adreça .onion proporcionada no és vàlida. Aquest error ocorre per una de les raons següents: la suma de comprovació de l'adreça no concorda, la clau pública ed25519 no és válida, o la codificació no és vàlida. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=S'ha produït un problema en carregar el lloc .onion +onionServices.introTimedOut.header=Esgotat el temps de creació del circuit del lloc Onion +onionServices.introTimedOut=Ha fallat la connexió amb el lloc Onion, possiblement a causa d'una connexió a la xarxa pobra. +onionServices.introTimedOut.longDescription=Detalls: %S — La connexió al servei Onion sol·licitat ha esgotat el temps mentre provava de construir el circuit de connexió. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S sol·licita que us autentiqueu. +onionServices.authPrompt.keyPlaceholder=Introduïu la vostra clau privada per a aquest servei ceba +onionServices.authPrompt.done=Fet +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Introduïu una clau vàlida (52 caràcters en base 32, o 44 caràcters en base 64) +onionServices.authPrompt.failedToSetKey=No s'ha pogut configurar Tor amb la vostra clau +onionServices.authPreferences.header=Autenticació de serveis ceba +onionServices.authPreferences.overview=Alguns serveis ceba requereixen que us identifiqueu amb una clau (una mena de contrasenya) abans que hi pugueu accedir. +onionServices.authPreferences.savedKeys=Claus desades... +onionServices.authPreferences.dialogTitle=Claus de serveis ceba +onionServices.authPreferences.dialogIntro=Les claus dels llocs onion següents s'emmagatzemen en el vostre equip +onionServices.authPreferences.onionSite=Lloc onion +onionServices.authPreferences.onionKey=Clau +onionServices.authPreferences.remove=Suprimeix la subscripció +onionServices.authPreferences.removeAll=Suprimeix-ho tot +onionServices.authPreferences.failedToGetKeys=No es poden recuperar les claus de tor +onionServices.authPreferences.failedToRemoveKey=No s'ha pogut suprimir la clau +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Entesos +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Sempre prioritza els Onions +onionLocation.alwaysPrioritizeAccessKey=p +onionLocation.notNow=Ara no +onionLocation.notNowAccessKey=p +onionLocation.description=Hi ha una versió més privada i segura d'aquest lloc web disponible a través de la xarxa Tor, mitjançant serveis Onion. Aquests serveis ajuden els creadors web i els seus visitants a vèncer la vigilància i la censura. +onionLocation.tryThis=Prova els serveis Onion +onionLocation.onionAvailable=.onion disponible +onionLocation.learnMore=Més informació... +onionLocation.always=Sempre +onionLocation.askEverytime=Demana-ho cada vegada +onionLocation.prioritizeOnionsDescription=Prioritza els llocs .onion si se'n coneixen. +onionLocation.onionServicesTitle=Serveis Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Més informació +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Activat +rulesets.disabled=Desactivat +# Ruleset details/edit ruleset +rulesets.edit=Editar +rulesets.name=Nom +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Desa +rulesets.cancel=Cancel·la diff --git a/toolkit/torbutton/chrome/locale/ca/torlauncher.properties b/toolkit/torbutton/chrome/locale/ca/torlauncher.properties new file mode 100644 index 000000000000..29353e24fe4a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ca/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Inicialitzador Tor + +torlauncher.tor_exited_during_startup=El Tor ha sortit mentre s'iniciava. Això pot ser un error en l'arxiu torrc, un error del Tor o d'algun altre programa del sistema o una fallada del maquinari. Fins que no arregleu el problema i reinicieu el Tor, el navegador Tor no s'iniciarà. +torlauncher.tor_exited=Tor ha sortit inesperadament. Pot ser degut a un error de Tor, d'un altre programa del vostre sistema, o d'una fallada del maquinari. Fins que no reinicieu Tor, el Navegador Tor no podrà accedir a cap web. Si el problema persisteix, envieu una còpia del vostre registre de Tor a l'equip d'assistència. +torlauncher.tor_exited2=Reiniciar Tor no tancarà les pestanyes del navegador. +torlauncher.tor_controlconn_failed=No s'ha pogut conectar al port de control Tor +torlauncher.tor_failed_to_start=Tor ha fallat mentre iniciava. +torlauncher.tor_control_failed=No s'ha pogut prendre el control de Tor. +torlauncher.tor_bootstrap_failed=Tor no ha pogut establir una connexió de xarxa Tor. +torlauncher.tor_bootstrap_failed_details=%1$S ha fallat (%2$S). + +torlauncher.unable_to_start_tor=No s'ha pogut iniciar Tor.\n%S +torlauncher.tor_missing=Falta l'executable de Tor. +torlauncher.torrc_missing=El fitxer torrc no existeix i no s'ha pogut crear. +torlauncher.datadir_missing=La carpeta de dades de Tor no existeix i no s'ha pogut crear. +torlauncher.onionauthdir_missing=El directori d'autenticació Tor onion no existeix o no s'ha pogut crear. +torlauncher.password_hash_missing=Ha fallat l'obtenció de la contrasenya hash. + +torlauncher.failed_to_get_settings=No s'ha pogut obtenir la configuració de Tor\n%S +torlauncher.failed_to_save_settings=No s'ha pogut desar la configuració de Tor.\n%S +torlauncher.ensure_tor_is_running=Assegureu-vos que el Tor esta funcionant. + +torlauncher.error_proxy_addr_missing=Heu d'especificar tant una adreça IP o domini com un número de port per a configurar el Tor per tal que pugui utilitzar un servidor intermediari per a accedir a Internet. +torlauncher.error_proxy_type_missing=Heu de seleccionar el tipus de servidor intermediari. +torlauncher.error_bridges_missing=Heu d'especificar un o més ponts. +torlauncher.error_default_bridges_type_missing=Heu de seleccionar un tipus de transport per als ponts subministrats. +torlauncher.error_bridgedb_bridges_missing=Sol·liciteu un pont. +torlauncher.error_bridge_bad_default_type=No hi ha ponts subministrats que tinguin el tipus de transport %S disponible. Si us plau canvieu la configuració. + +torlauncher.bridge_suffix.meek-amazon=(funciona a la Xina) +torlauncher.bridge_suffix.meek-azure=(funciona a la Xina) + +torlauncher.request_a_bridge=Sol·licita un pont... +torlauncher.request_a_new_bridge=Sol·licita un pont nou... +torlauncher.contacting_bridgedb=S'està contactant amb el BridgeDB. Espereu. +torlauncher.captcha_prompt=Solucioneu el CAPTCHA per sol·licitar un pont. +torlauncher.bad_captcha_solution=La solució no és correcta. Torneu a provar-ho. +torlauncher.unable_to_get_bridge=No s'ha pogut obtenir un pont des de BridgeDB. +torlauncher.no_meek=Aquest navegador no està configurat per al MEEK, necessari per a obtenir ponts. +torlauncher.no_bridges_available=No hi ha ponts disponibles ara mateix. + +torlauncher.connect=Connecta +torlauncher.restart_tor=Reinicia Tor +torlauncher.quit=Surt +torlauncher.quit_win=Surt +torlauncher.done=Fet + +torlauncher.forAssistance=Per a rebre assistència, contacteu amb %S +torlauncher.forAssistance2=Per a més ajuda, visiteu %S + +torlauncher.copiedNLogMessages=Còpia completada. Els missatges del registre de %S Tor ja es poden enganxar en un editor de text o un missatge de correu. + +torlauncher.bootstrapStatus.starting=Iniciant +torlauncher.bootstrapStatus.conn_pt=Connectant a pont +torlauncher.bootstrapStatus.conn_done_pt=Connectat a pont +torlauncher.bootstrapStatus.conn_proxy=S'està connectant al servidor intermediari +torlauncher.bootstrapStatus.conn_done_proxy=Connectat al servidor intermediari +torlauncher.bootstrapStatus.conn=S'està connectant a un relé de Tor +torlauncher.bootstrapStatus.conn_done=Connectat a un relé de Tor +torlauncher.bootstrapStatus.handshake=S'està negociant amb un repetidor de Tor +torlauncher.bootstrapStatus.handshake_done=S'ha acabat de negociar amb un repetidor de Tor +torlauncher.bootstrapStatus.onehop_create=S'està establint una connexió xifrada amb un directori +torlauncher.bootstrapStatus.requesting_status=S'està rebent l'estat de la xarxa +torlauncher.bootstrapStatus.loading_status=S'està carregant l'estat de la xarxa +torlauncher.bootstrapStatus.loading_keys=S'estan carregant els certificats d'autoritat +torlauncher.bootstrapStatus.requesting_descriptors=S'està demanant informació del repetidor +torlauncher.bootstrapStatus.loading_descriptors=S'està carregant la informació del repetidor +torlauncher.bootstrapStatus.enough_dirinfo=S'ha acabat de pujar la informació del repetidor +torlauncher.bootstrapStatus.ap_conn_pt=Construint circuits: s'està connectant al pont +torlauncher.bootstrapStatus.ap_conn_done_pt=Construint circuits: s'ha connectat al pont +torlauncher.bootstrapStatus.ap_conn_proxy=Construint circuits: s'està connectant al servidor intermediari +torlauncher.bootstrapStatus.ap_conn_done_proxy=Construint circuits: s'ha connectat al servidor intermediari +torlauncher.bootstrapStatus.ap_conn=Construint circuits: s'està connectant al repetidor de Tor +torlauncher.bootstrapStatus.ap_conn_done=Construint circuits: s'ha connectat al repetidor de Tor +torlauncher.bootstrapStatus.ap_handshake=Construint circuits: s'està negociant amb un repetidor de Tor +torlauncher.bootstrapStatus.ap_handshake_done=Construint circuits: s'ha acabat de negociar amb un repetidor de Tor +torlauncher.bootstrapStatus.circuit_create=Construint circuits: s'està establint un circuit de Tor +torlauncher.bootstrapStatus.done=S'ha connectat a la xarxa Tor! + +torlauncher.bootstrapWarning.done=fet +torlauncher.bootstrapWarning.connectrefused=connexió refusada +torlauncher.bootstrapWarning.misc=miscel·lània +torlauncher.bootstrapWarning.resourcelimit=recursos insuficients +torlauncher.bootstrapWarning.identity=les identitats no coincideixen +torlauncher.bootstrapWarning.timeout=s'ha excedit el temps d'espera de connexió +torlauncher.bootstrapWarning.noroute=no hi ha ruta cap al servidor +torlauncher.bootstrapWarning.ioerror=error de lectura/escriptura +torlauncher.bootstrapWarning.pt_missing=falta de transport afegible + +torlauncher.nsresult.NS_ERROR_NET_RESET=S'ha perdut la connexió amb el servidor. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=No s'ha pogut connectar al servidor. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=No s'ha pogut connectar al servidor intermediari. + +torlauncher.copiedNLogMessagesShort=Copiat %S registres diff --git a/toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd new file mode 100644 index 000000000000..fd2f311031c0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "Aplikace &brandShortName; je vyvíjena"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "společností &vendorShortName;"> +<!ENTITY project.end ", neziskovou organizací chránící vaše soukromí a svobodu na internetu."> + +<!ENTITY help.start "Chcete pomoci?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Přispějte"> +<!ENTITY help.or "nebo"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "se zapojte"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Otázky?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Pomozte síti Tor růst!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informace o licencích"> +<!ENTITY tor.TrademarkStatement ""Tor" a "Onion logo" jsou registrované ochranné známky společnosti Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/cs/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/cs/aboutTBUpdate.dtd new file mode 100644 index 000000000000..e5de79443895 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Změny v prohlížeči Tor"> +<!ENTITY aboutTBUpdate.updated "Prohlížeč Tor byl aktualizován."> +<!ENTITY aboutTBUpdate.linkPrefix "Informace o tomto vydání najdete na "> +<!ENTITY aboutTBUpdate.linkLabel "naši webové stránce"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Verze"> +<!ENTITY aboutTBUpdate.releaseDate "Datum vydání"> +<!ENTITY aboutTBUpdate.releaseNotes "Poznámky k verzi"> diff --git a/toolkit/torbutton/chrome/locale/cs/aboutTor.dtd b/toolkit/torbutton/chrome/locale/cs/aboutTor.dtd new file mode 100644 index 000000000000..b95dcb507778 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/aboutTor.dtd @@ -0,0 +1,41 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "O Toru"> + +<!ENTITY aboutTor.viewChangelog.label "Historie změn"> + +<!ENTITY aboutTor.ready.label "Prohlížejte v soukromí."> +<!ENTITY aboutTor.ready2.label "Vše je připraveno pro maximální soukromí Vašeho prohlížení."> +<!ENTITY aboutTor.failure.label "Něco se pokazilo!"> +<!ENTITY aboutTor.failure2.label "Tor v tomto prohlížeči nefunguje."> + +<!ENTITY aboutTor.search.label "Vyhledejte s DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Otázky?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Podívejte se do naší příručky k prohlížeči Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Příručka prohlížeče Tor"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project je nezisková organizace podle US 501(c)(3), která prosazuje lidská práva a svobodu vytvářením svobodných a otevřených technologií podporující anonymitu a soukromí, bez omezení jejich dostupnosti a používání, včetně podpory jejich vědeckého a všeobecného rozvoje."> +<!ENTITY aboutTor.getInvolved.label "Zapojte se »"> + +<!ENTITY aboutTor.newsletter.tagline "Nechte si posílat nejnovější informace o Toru."> +<!ENTITY aboutTor.newsletter.link_text "Přihlaste se k odběru zpravodaje Toru."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor je zdarma k použití díky darům od lidí jako jste vy."> +<!ENTITY aboutTor.donationBanner.buttonA "Přispějte"> + +<!ENTITY aboutTor.alpha.ready.label "Otestovat. Důkladně."> +<!ENTITY aboutTor.alpha.ready2.label "Jste připraveni otestovat nejsoukromější prohlížení internetu."> +<!ENTITY aboutTor.alpha.bannerDescription "Prohlížeč Tor Alpha je nestabilní verze Prohlížeč Tor, kterou můžete použít pro poznání a otestování výkonu nových funkcí a poskytnutí zpětné vazby vývojářům ještě než funkce vydají pro širokou veřejnost."> +<!ENTITY aboutTor.alpha.bannerLink "Nahlásit chybu na Fóru Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Otestovat. Důkladně."> +<!ENTITY aboutTor.nightly.ready2.label "Jste připraveni otestovat nejsoukromější prohlížení internetu."> +<!ENTITY aboutTor.nightly.bannerDescription "Prohlížeč Tor Nightly je nestabilní verze Prohlížeč Tor, kterou můžete využít k vyzkoušení nových funkcí, otestování jejich výkonu a následně se podělte o své zkušenosti před vydáním stabilní verze."> +<!ENTITY aboutTor.nightly.bannerLink "Nahlásit chybu na Fóru Tor"> \ No newline at end of file diff --git a/toolkit/torbutton/chrome/locale/cs/brand.dtd b/toolkit/torbutton/chrome/locale/cs/brand.dtd new file mode 100644 index 000000000000..0ab36fc3c555 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Prohlížeč Tor"> +<!ENTITY brandShortName "Prohlížeč Tor"> +<!ENTITY brandFullName "Prohlížeč Tor"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "Tor a logo Onion jsou ochrannými známkami společnosti Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Prohlížeč Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klepnutím načtete nainstalované systémové zásuvné moduly"> +<!ENTITY plugins.installed.enable "Povolit zásuvné moduly"> +<!ENTITY plugins.installed.disable "Zakázat zásuvné moduly"> +<!ENTITY plugins.installed.disable.tip "Klepnutím zabráníte načítání systémových zásuvných modulů"> diff --git a/toolkit/torbutton/chrome/locale/cs/brand.properties b/toolkit/torbutton/chrome/locale/cs/brand.properties new file mode 100644 index 000000000000..cda588104981 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Prohlížeč Tor +brandShortName=Prohlížeč Tor +brandFullName=Prohlížeč Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Prohlížeč Tor +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, domovská stránka s vestavěným vyhledávačem +homePageImport=Importovat vaši domovskou stránku z aplikace %S + +homePageMigrationPageTitle=Výběr domovské stránky +homePageMigrationDescription=Vyberte prosím domovskou stránku, kterou si přejete používat: + +syncBrandShortName=Synchronizace diff --git a/toolkit/torbutton/chrome/locale/cs/branding/brand.ftl b/toolkit/torbutton/chrome/locale/cs/branding/brand.ftl new file mode 100644 index 000000000000..604c023d7173 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Prohlížeč Tor +-brand-short-name = Prohlížeč Tor +-brand-full-name = Prohlížeč Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Prohlížeč Tor +-vendor-short-name = Tor Project +trademarkInfo = Tor a logo Onion jsou ochrannými známkami společnosti Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/cs/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/cs/browserOnboarding.properties new file mode 100644 index 000000000000..cbe32c7e1473 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Vítejte +onboarding.tour-tor-welcome.title=Jste připraveni. +onboarding.tour-tor-welcome.description=Prohlížeč Tor nabízí nejvyšší úroveň soukromí a bezpečnosti při prohlížení internetu. Ochrání vás před sledováním i cenzurou. Rychlý průvodce vám ukáže, jak ho používat. +onboarding.tour-tor-welcome.next-button=Přejít na Soukromí + +onboarding.tour-tor-privacy=Soukromí +onboarding.tour-tor-privacy.title=Odežeňte sledovací a šmírující prvky. +onboarding.tour-tor-privacy.description=Prohlížeč Tor izoluje cookies a smaže vaši historii prohlížení hned po ukončení relace. Tyto úpravy vám zajistí maximální míru soukromí a bezpečnosti. Pro informace o ochraně přímo sítí Tor klepněte na „Síť Tor“. +onboarding.tour-tor-privacy.button=Přejít na síť Tor + +onboarding.tour-tor-network=Síť Tor +onboarding.tour-tor-network.title=Používejte decentralizovanou síť. +onboarding.tour-tor-network.description=Prohlížeč Tor se k internetu připojuje skrze síť Tor sestavenou díky tisícům dobrovolníků po celém světě. Na rozdíl od VPN nemá síť Tor žádný centrální prvek, kterému musíte do rukou svěřit své soukromí. +onboarding.tour-tor-network.description-para2=NOVÉ: Nastavení sítě Tor, včetně možnosti vyžádat si most, pokud je Tor blokován, nyní najdete v Předvolbách. +onboarding.tour-tor-network.action-button=Přizpůsobte si nastavení sítě Tor +onboarding.tour-tor-network.button=Zobrazit řetězec + +onboarding.tour-tor-circuit-display=Zobrazení řetězce +onboarding.tour-tor-circuit-display.title=Podívejte se na svou cestu. +onboarding.tour-tor-circuit-display.description=Pro každou doménu, kterou navštívíte, je vytvořeno šifrované spojení přes tři uzly Toru různě po světě. Žádná webová stránka neví, odkud se k ní připojujete. Nové spojení si můžete vyžádat klepnutím na „Nový řetězec sítí Tor k této stránce“ v zobrazení řetězce. +onboarding.tour-tor-circuit-display.button=Moje cesta +onboarding.tour-tor-circuit-display.next-button=Přejít na Zabezpečení + +onboarding.tour-tor-security=Zabezpečení +onboarding.tour-tor-security.title=Určujte svůj prožitek. +onboarding.tour-tor-security.description=K dispozici máte rozšířená nastavení pro další zvýšení zabezpečení, např. blokování všech prvků, které mohou být potenciálně použity k útoku na váš počítač. Pro zobrazení různých možností a jejich fungování klepněte níže. +onboarding.tour-tor-security.description-suffix=Poznámka: Ve výchozím nastavení se NoScript ani HTTPS Everywhere na nástrojové liště nezobrazují, ale můžete si nastavení lišt změnit. +onboarding.tour-tor-security-level.button=Zobrazit nastavenou úroveň zabezpečení +onboarding.tour-tor-security-level.next-button=Přejít na pokročilé tipy + +onboarding.tour-tor-expect-differences=Tipy +onboarding.tour-tor-expect-differences.title=Očekávejte rozdíly. +onboarding.tour-tor-expect-differences.description=Váš prožitek z prohlížení se díky všem bezpečnostním funkcím Toru může lišit. Stránky mohou být pomalejší a v závislosti na úrovni zabezpečení nemusí některé prvky fungovat. Můžete být také dotazováni na důkaz, že jste opravdu lidé a ne roboti. +onboarding.tour-tor-expect-differences.button=Často kladené otázky +onboarding.tour-tor-expect-differences.next-button=Přejít na služby Onion + +onboarding.tour-tor-onion-services=Služby Onion +onboarding.tour-tor-onion-services.title=Extra ochrana +onboarding.tour-tor-onion-services.description=Služby Onion jsou stránky, které končí na .onion a poskytují extra ochranu pro autory i návštěvníky, včetně pojistek proti cenzuře. Umožňují každému poskytovat obsah a služby anonymně. Pro otevření anonymní onion stránky DuckDuckGo klepněte níže. +onboarding.tour-tor-onion-services.button=Navštívit Onion +onboarding.tour-tor-onion-services.next-button=Hotovo + +onboarding.overlay-icon-tooltip-updated2=Podívejte se, co je nového\nv %S +onboarding.tour-tor-update.prefix-new=Nové +onboarding.tour-tor-update.prefix-updated=Aktualizováno + +onboarding.tour-tor-toolbar=Panel nástrojů +onboarding.tour-tor-toolbar-update-9.0.title=Rozlučte se s tlačítkem Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Funkce Toru jsme se snažíme plně integrovat přímo to prohlížeče Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Proto už není potřeba hledat informace o Toru pod vlastním tlačítkem, ale najdete je pod ikonou [i] přímo v adresním řádku. Možnost vyžádat si novou identitu se zase přesunula do hlavního tlačítka [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Jak si vyžádat novou identitu +onboarding.tour-tor-toolbar-update-9.0.next-button=Přejít na síť Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Další +onboarding.tor-circuit-display.done=Hotovo +onboarding.tor-circuit-display.one-of-three=1 ze 3 +onboarding.tor-circuit-display.two-of-three=2 ze 3 +onboarding.tor-circuit-display.three-of-three=3 ze 3 + +onboarding.tor-circuit-display.intro.title=Jak řetězce fungují? +onboarding.tor-circuit-display.intro.msg=Řetězce jsou sestaveny z náhodně vybraných uzlů, počítačů rozmístěných po světě a nastavených pro přeposílání toku v síti Tor. Řetězce vám zajišťují soukromí při prohlížení a spojení s onion službami. + +onboarding.tor-circuit-display.diagram.title=Zobrazení řetězce +onboarding.tor-circuit-display.diagram.msg=Tento diagram ukazuje uzly tvořící řetězec k této stránce. Aby nebylo možné spojit vaše aktivity na různých stránkách, ke každé je vytvořen řetězec nový. + +onboarding.tor-circuit-display.new-circuit.title=Potřebujete nový řetězec? +onboarding.tor-circuit-display.new-circuit.msg=Pokud se vám nedaří k nějaké stránce připojit, nebo se stránka nenačítá správně, můžete použít toto tlačítko k obnovení stránky skrze nový řetězec. diff --git a/toolkit/torbutton/chrome/locale/cs/network-settings.dtd b/toolkit/torbutton/chrome/locale/cs/network-settings.dtd new file mode 100644 index 000000000000..ec109b5be603 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Síťové nastavení Toru"> +<!ENTITY torsettings.wizard.title.default "Připojení k síti Tor"> +<!ENTITY torsettings.wizard.title.configure "Nastavení sítě Tor"> +<!ENTITY torsettings.wizard.title.connecting "Navazování spojení"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Jazyk prohlížeče Tor"> +<!ENTITY torlauncher.localePicker.prompt "Zvolte prosím jazyk."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Pro připojení k síti Tor klepněte na tlačítko „Připojit“."> +<!ENTITY torSettings.configurePrompt "Pokud jste v zemi, která síť Tor omezuje (např. Egypt, Čína, Turecko), nebo pokud se připojujete ze sítě, která vyžaduje použití proxy, klepněte na tlačítko „Nastavení“ pro úpravu nastavení sítě."> +<!ENTITY torSettings.configure "Nastavení"> +<!ENTITY torSettings.connect "Připojit"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Čekání na start Toru"> +<!ENTITY torsettings.restartTor "Restartovat Tor"> +<!ENTITY torsettings.reconfigTor "Přenastavit"> + +<!ENTITY torsettings.discardSettings.prompt "Nastavili jste síťový most nebo lokální proxy.  Pro připojení k síti Tor přímo tato nastavení odstraňte."> +<!ENTITY torsettings.discardSettings.proceed "Odstranit nastavení a připojit se"> + +<!ENTITY torsettings.optional "Volitelné"> + +<!ENTITY torsettings.useProxy.checkbox "Pro připojení k internetu používám proxy"> +<!ENTITY torsettings.useProxy.type "Typ proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "vyberte typ proxy"> +<!ENTITY torsettings.useProxy.address "Adresa"> +<!ENTITY torsettings.useProxy.address.placeholder "IP adresa nebo název serveru"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Uživatelské jméno"> +<!ENTITY torsettings.useProxy.password "Heslo"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Tento počítač používá firewall, který povoluje připojení pouze přes některé porty."> +<!ENTITY torsettings.firewall.allowedPorts "Povolené porty"> +<!ENTITY torsettings.useBridges.checkbox "Tor je v mé zemi cenzurován"> +<!ENTITY torsettings.useBridges.default "Vyberte vestavěný most"> +<!ENTITY torsettings.useBridges.default.placeholder "vyberte most"> +<!ENTITY torsettings.useBridges.bridgeDB "Vyžádat most od torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Zadejte písmena z obrázku"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Nový obrázek"> +<!ENTITY torsettings.useBridges.captchaSubmit "Odeslat"> +<!ENTITY torsettings.useBridges.custom "Zadat známý most"> +<!ENTITY torsettings.useBridges.label "Zadejte informace o mostu z důvěryhodného zdroje."> +<!ENTITY torsettings.useBridges.placeholder "zadávejte ve tvaru adresa:port (jedna položka na řádek)"> + +<!ENTITY torsettings.copyLog "Zkopírovat protokol Toru do schránky"> + +<!ENTITY torsettings.proxyHelpTitle "Nápověda k proxy"> +<!ENTITY torsettings.proxyHelp1 "Pří připojení skrze síť firmy, školy nebo univerzity může být vyžadována lokální proxy. Pokud si nejste jisti, jestli je proxy potřeba, podívejte se do nastavení internetu jiného prohlížeče, nebo do systémového nastavení sítě."> + +<!ENTITY torsettings.bridgeHelpTitle "Nápověda o mostních uzlech"> +<!ENTITY torsettings.bridgeHelp1 "Mosty jsou neveřejné uzly, které znesnadňují blokování sítě Tor.  Každý typ mostu používá odlišný způsob jak zabránit cenzuře.  Obfs mosty dělají z vašich dat náhodný šum a meek mosty vytvářejí dojem, že se připojujete k dané službě a ne k Toru."> +<!ENTITY torsettings.bridgeHelp2 "Protože se některé země snaží zablokovat Tor, některé typy mostů fungují pouze v některých zemích.  Pokud si nejste jisti typy mostů, které fungují ve vaší zemi, navštivte torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Počkejte prosím na vytvoření spojení do sítě Tor.  Může to trvat několik minut."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Připojení"> +<!ENTITY torPreferences.torSettings "Nastavení sítě Tor"> +<!ENTITY torPreferences.torSettingsDescription "Prohlížeč Tor vás připojí k síti Tor, provozované tisíci dobrovolníků po celém světě." > +<!ENTITY torPreferences.learnMore "Zjistit více"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Síť Tor:"> +<!ENTITY torPreferences.statusTorConnected "Připojeno"> +<!ENTITY torPreferences.statusTorNotConnected "Nepřipojeno"> +<!ENTITY torPreferences.statusTorBlocked "Potenciálně Blokováno"> +<!ENTITY torPreferences.learnMore "Zjistit více"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Rychlý start"> +<!ENTITY torPreferences.quickstartDescriptionLong "Rychlý Start připojí Prohlížeč Tor do Sítě Tor automaticky při startu, za použitím naposledy použitého nastavení."> +<!ENTITY torPreferences.quickstartCheckbox "Vždy připojit automaticky"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Mosty"> +<!ENTITY torPreferences.bridgesDescription "Mosty pomáhají v přístupu k sítě Tor na místech, kde je Tor blokován. Podle toho, kde se nacházíte, mohou některé mosty fungovat lépe než jiné."> +<!ENTITY torPreferences.bridgeLocation "Vaše umístění"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automaticky"> +<!ENTITY torPreferences.bridgeLocationFrequent "Často použitá umístění"> +<!ENTITY torPreferences.bridgeLocationOther "Jiná umístění"> +<!ENTITY torPreferences.bridgeChooseForMe "Vyber pro mě Most…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Vaše aktuální Mosty"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Můžete uložit jeden nebo více mostů a Tor vybere, který z nich bude použit při připojování. Tor automaticky přepne na jiný most pokud to bude potřeba."> +<!ENTITY torPreferences.bridgeId "#1 most: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Smazat"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Vypnout vestavěné mosty"> +<!ENTITY torPreferences.bridgeShare "Sdílejte tento most pomocí QR kódu nebo kopírováním jeho adresy:"> +<!ENTITY torPreferences.bridgeCopy "Kopírovat Adresu Mostu"> +<!ENTITY torPreferences.copied "Zkopírováno!"> +<!ENTITY torPreferences.bridgeShowAll "Zobrazit Všechny Mosty"> +<!ENTITY torPreferences.bridgeRemoveAll "Odebrat Všechny Mosty"> +<!ENTITY torPreferences.bridgeAdd "Přidat Nový Most"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Vyberte z vestavěných mostů Prohlížeče Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Vyberte vestavěný Most…"> +<!ENTITY torPreferences.bridgeRequest "Požádat o most…"> +<!ENTITY torPreferences.bridgeEnterKnown "Vložte adresu mostu, kterou již znáte"> +<!ENTITY torPreferences.bridgeAddManually "Přidat Most Manuálně…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Rozšířené"> +<!ENTITY torPreferences.advancedDescription "Nastavte jak se má Prohlížeč Tor připojovat do internetu"> +<!ENTITY torPreferences.advancedButton "Nastavení…"> +<!ENTITY torPreferences.viewTorLogs "Zobrazit logy Tor"> +<!ENTITY torPreferences.viewLogs "Zobrazit protokol…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Odebrat Všechny Mosty?"> +<!ENTITY torPreferences.removeBridgesWarning "Takto akce nepůjde vzít zpět."> +<!ENTITY torPreferences.cancel "Zrušit"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Skenovat QR kód"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Vestavěné Mosty"> +<!ENTITY torPreferences.builtinBridgeDescription "Prohlížeč Tor zahrnuje některé specifické typy mostů známé jako “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 je typ vestavěného mostu který zajišťuje že data vypadají náhodně. Tyto mosty nejsou tak často blokovány jako jejich předchůdci, obfs3 mosty."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake je vestavěný most kterým je obcházena cenzura přesměrováním připojení přes Snowflake proxy, které provozují dobrovolníci."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure je vestavěný most díky kterému se bude zdát, že používáte web Microsoftu místo Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Požádat o most"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kontaktování BridgeDB. Čekejte prosím."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Pro vyžádání mostu prosím opište kód CAPTCHA."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Neopsali jste kód správně. Zkuste to prosím znovu."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Zadejte Most"> +<!ENTITY torPreferences.provideBridgeHeader "Zadejte informace o bridgi z důvěryhodného zdroje"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Nastavení Připojení"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Nastavte jak se bude Prohlížeč Tor připojovat k internetu"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Hodnoty oddělené čárkami"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Protokol sítě Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Nepřipojeno"> +<!ENTITY torConnect.connectingConcise "Spojuji..."> +<!ENTITY torConnect.tryingAgain "Zkouším to znovu..."> +<!ENTITY torConnect.noInternet "Prohlížeč Tor se nemohl připojit k internetu"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Prohlížeč Tor se nemohl připojit k síti Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "nastavte své připojení"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Pokud je Tor blokován tam, kde nyní jste, zkuste použít most. Asistent připojení vám pomůže most vybrat na základě vašeho umístění a nebo to můžete udělat #1 manuálně."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Zkouším most…"> +<!ENTITY torConnect.tryingBridgeAgain "Zkouším to ještě jednou..."> +<!ENTITY torConnect.errorLocation "Prohlížeč Tor vás nedokáže lokalizovat"> +<!ENTITY torConnect.errorLocationDescription "Prohlížeč Tor potřebuje znát vaše umístě k tomu, aby vám vybral nejvhodnější most. Pokud nechcete uvést umístění, můžete zvolit #1 manuální metodu."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Jsou tato nastavení umístění v pořádku?"> +<!ENTITY torConnect.isLocationCorrectDescription "Prohlížeč Tor se stále nemohl připojit k Tor. Prosím zkontrolujte vaše nastavení umístění a zkuste to znovu a nebo #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Asistent připojení"> +<!ENTITY torConnect.breadcrumbLocation "Nastavení umístění"> +<!ENTITY torConnect.breadcrumbTryBridge "Zkusit most"> +<!ENTITY torConnect.automatic "Automaticky"> +<!ENTITY torConnect.selectCountryRegion "Vyberte Zemi nebo Region"> +<!ENTITY torConnect.frequentLocations "Často použitá umístění"> +<!ENTITY torConnect.otherLocations "Jiná umístění"> +<!ENTITY torConnect.restartTorBrowser "Restartovat Prohlížeč Tor"> +<!ENTITY torConnect.configureConnection "Nastavit Připojení…"> +<!ENTITY torConnect.viewLog "Zobrazit logy..."> +<!ENTITY torConnect.tryAgain "Zkusit znovu"> +<!ENTITY torConnect.offline "Internet není dostupný"> +<!ENTITY torConnect.connectMessage "Změny v nastavení Tor se neprojeví, dokud se nepřipojíte"> +<!ENTITY torConnect.tryAgainMessage "Tor prohlížeči se nepodařilo navázat spojení se sítí Tor"> +<!ENTITY torConnect.yourLocation "Vaše umístění"> +<!ENTITY torConnect.tryBridge "Zkusit Most"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatické nastavení selhalo"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatické nastavení selhalo"> +<!ENTITY torConnect.cannotDetermineCountry "Nebylo možné rozpoznat zemi uživatele"> +<!ENTITY torConnect.noSettingsForCountry "Žádná nastavení nejsou k dispozici pro vaše umístění"> diff --git a/toolkit/torbutton/chrome/locale/cs/onboarding.properties b/toolkit/torbutton/chrome/locale/cs/onboarding.properties new file mode 100644 index 000000000000..ed778c53102c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Vidíte %S poprvé?\nZačněte tady. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S je úplně v novém.\nPodívejte se, co všechno teď umí! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Zavřít +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Zavřít +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Dokončeno diff --git a/toolkit/torbutton/chrome/locale/cs/torbutton.dtd b/toolkit/torbutton/chrome/locale/cs/torbutton.dtd new file mode 100644 index 000000000000..dba0a8fd63f1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nová identita"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nová identita"> +<!ENTITY torbutton.context_menu.new_identity_key "i"> +<!ENTITY torbutton.context_menu.new_circuit "Nový řetězec sítí Tor k této stránce"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nový Tor okruh pro tuto stránku"> +<!ENTITY torbutton.context_menu.new_circuit_key "o"> +<!ENTITY torbutton.context_menu.networksettings "Nastavení sítě Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Vyhledat aktualizace prohlížeče Tor…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "a"> +<!ENTITY torbutton.context_menu.cookieProtections "Ochrany cookies…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "c"> +<!ENTITY torbutton.button.tooltip "Klepněte pro inicializaci Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Nastavení zabezpečení prohlížeče Tor"> +<!ENTITY torbutton.cookiedialog.title "Správa ochrany cookies"> +<!ENTITY torbutton.cookiedialog.lockCol "Chráněné"> +<!ENTITY torbutton.cookiedialog.domainCol "Server"> +<!ENTITY torbutton.cookiedialog.nameCol "Název"> +<!ENTITY torbutton.cookiedialog.pathCol "Cesta"> +<!ENTITY torbutton.cookiedialog.protectCookie "Chránit cookies"> +<!ENTITY torbutton.cookiedialog.removeCookie "Odstranit cookies"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Přestat chránit cookies"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Odstranit všechny nechráněné"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Chránit nové cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Přestat chránit nové cookies"> +<!ENTITY torbutton.prefs.sec_caption "Úroveň zabezpečení"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Úrovně zabezpečení vám umožňují vypnout některé funkce, kvůli kterým může být váš prohlížeč více náchylný k hackerským útokům."> +<!ENTITY torbutton.prefs.sec_standard_label "Standardní"> +<!ENTITY torbutton.prefs.sec_standard_description "Všechny funkce prohlížeče Tor jsou zapnuté."> +<!ENTITY torbutton.prefs.sec_safer_label "Bezpečnější"> +<!ENTITY torbutton.prefs.sec_safer_description "Některé méně bezpečné funkce jsou vypnuty, ale některé stránky nemusí fungovat."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Při nastavení bezpečnější úrovně:"> +<!ENTITY torbutton.prefs.sec_safest_label "Nejbezpečnější"> +<!ENTITY torbutton.prefs.sec_safest_description "Povolí jen funkce pro zobrazení statických webových stránek a fungování základních služeb. Ovlivněno bude zobrazení obrázků, médií a fungování skriptů."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Při nastavení nejbezpečnější úrovně:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Zjistit více"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript je na stránkách bez HTTPS vypnut."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript je ve výchozím nastavení vypnut na všech stránkách."> +<!ENTITY torbutton.prefs.sec_limit_typography "Některá písma a matematické symboly jsou zablokovány."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Některá písma, matematické symboly a obrázky jsou zablokovány."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio, video (HTML5 média) a WebGL se přehrávají po kliknutí."> +<!ENTITY torbutton.prefs.sec_custom_warning "Vlastní"> +<!ENTITY torbutton.prefs.sec_overview "Vypnout některé webové funkce, které mohou být zneužity k ohrožení vaší bezpečnosti a anonymity."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Úroveň zabezpečení: Standardní"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Úroveň zabezpečení: bezpečnější"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Úroveň zabezpečení: nejbezpečnější"> +<!ENTITY torbutton.prefs.sec_custom_summary "Vaše nastavení prohlížeče neodpovídá standardnímu nastavení zabezpečení. Z důvodu ochrany soukromí a zvýšení bezpečnosti vám doporučujeme vybrat si jednu z výchozích bezpečnostních úrovní."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Obnovit výchozí"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Rozšířená bezpečnostní nastavení…"> +<!ENTITY torbutton.prefs.sec_change "Změnit..."> +<!ENTITY torbutton.circuit_display.title "Řetězec sítí Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Nový řetězec sítí Tor k této stránce"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Otevřít výzvu k ověření klienta služby onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Zapamatovat si tento klíč"> diff --git a/toolkit/torbutton/chrome/locale/cs/torbutton.properties b/toolkit/torbutton/chrome/locale/cs/torbutton.properties new file mode 100644 index 000000000000..139b8ecf81fc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = Neznámá IP adresa +torbutton.circuit_display.onion_site = Onion stránka +torbutton.circuit_display.this_browser = Tento prohlížeč +torbutton.circuit_display.relay = Uzel +torbutton.circuit_display.tor_bridge = Most +torbutton.circuit_display.unknown_country = Neznámá země +torbutton.circuit_display.guard = Ochrana +torbutton.circuit_display.guard_note = Váš uzel typu Ochrana se nemusí změnit. +torbutton.circuit_display.learn_more = Zjistit více +torbutton.circuit_display.click_to_copy = Kliknutím zkopírujte +torbutton.circuit_display.copied = Zkopírováno! +torbutton.content_sizer.margin_tooltip = Prohlížeč Tor upravuje velikost vašeho okna, aby znesnadnil možnost vašeho vysledování. +extensions.torbutton@torproject.org.description = TorButton je tlačítko pro nastavení Toru a rychlé a jednoduché smazání soukromých údajů o vašem prohlížení. +torbutton.popup.external.title = Stáhnout externí soubor? +torbutton.popup.external.app = Prohlížeč Tor nemůže zobrazit tento soubor. Budete ho muset otevřít v jiné aplikaci.\n\n +torbutton.popup.external.note = Některé typy souborů mohou způsobit, že se aplikace připojí k internetu bez použití Toru.\n\n +torbutton.popup.external.suggest = Chcete-li být v bezpečí, otevírejte stažené soubory pouze v režimu offline, nebo použijte Tor Live CD, např. Tails.\n +torbutton.popup.launch = Stáhnout soubor +torbutton.popup.cancel = Zrušit +torbutton.popup.dontask = Od teď stahovat soubory automaticky +torbutton.popup.no_newnym = Torbutton vám nemůže bezpečně poskytnout novou identitu, protože nemá přístup ke kontrolnímu portu Tor.\n\nMáte spuštěn Tor Browser Bundle? +torbutton.security_settings.menu.title = Nastavení zabezpečení +torbutton.title.prompt_torbrowser = Důležitá zpráva Torbutton +torbutton.popup.prompt_torbrowser = Torbutton nyní pracuje jinak: nemůžete jej nyní vypnout.\n\nPro tuto změnu jsme se rozhodli kvůli bezpečnosti používání Torbutton v prohlížeči. který je zároveň využíván pro prohlížení mimo síť Tor. Docházelo kvůli tomu k příliš mnoha chybám, které jsme nemohli jinak opravit.\n\nPokud chcete dále používat Firefox běžným způsobem, nainstalujte si Tor Browser Bundle. Nastavení soukromí prohlížeče Tor jsou nadřazeny těm ve Firefoxu, dokonce i když Firefox [...] +torbutton.popup.short_torbrowser = Důležitá informace!\n\nTorbutton je nyní stále aktivní.\n\nPro více informací klepněte na Torbutton. + +torbutton.popup.confirm_plugins = Zásuvné moduly, jako je třeba Flash, mohou narušit vaše soukromí a anonymitu.\n\nTaké mohou obejít Tor a vyzradit vaše umístění a IP adresu.\n\nOpravdu chcete zásuvné moduly povolit?\n\n +torbutton.popup.never_ask_again = Znovu se neptat +torbutton.popup.confirm_newnym = Prohlížeč Tor zavře všechna okna a panely. Všechny relace budou ztraceny.\nOpravdu chcete restartovat prohlížeč Tor pro resetování vaší identity?\n + +torbutton.maximize_warning = Maximalizováním prohlížeče Tor dovolí webovým stránkám zjistit velikost a vašeho monitoru a použít tuto informaci k vašemu sledování. Doporučujeme ponechat okno prohlížeče Tor v přednastavené velikosti. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Server %S se pokusil získat obrazová data HTML5 canvasu, která mohou být použita pro unikátní identifikaci vašeho počítače.\n\nChcete serveru povolit získání obrazových dat HTML5 canvasu? +canvas.notNow=Nyní ne +canvas.notNowAccessKey=N +canvas.allow=Povolit v budoucnu +canvas.allowAccessKey=P +canvas.never=Nikdy na tomto serveru (doporučeno) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Profilový problém +profileReadOnly=Aplikaci %S nelze spustit ze souborového systému pouze pro čtení. Zkopírujte ji prosím na jiné místo. +profileReadOnlyMac=Aplikaci %S nelze spustit ze souborového systému pouze pro čtení. Zkopírujte ji prosím na plochu nebo do složky s aplikacemi. +profileAccessDenied=%S nemá oprávnění k přístupu k profilu. Upravte prosím oprávnění vašeho souborového systému a zkuste to znovu. +profileMigrationFailed=Migrace vašeho stávajícího profilu se nezdařila.\nBude použito nové nastavení. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Stahování aktualizace pro %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Šifrované spojení (Onion služba, %1$S, %2$S bitové klíče, %3$S) +pageInfo_OnionEncryption=Šifrované spojení (Onion služba) +pageInfo_OnionName=Onion Název: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Zjistit více +onionServices.errorPage.browser=Prohlížeč +onionServices.errorPage.network=Síť +onionServices.errorPage.onionSite=Onionsíť +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problém při načítání Onionsítě +onionServices.descNotFound.header=Onionsíť nebyla nalezena +onionServices.descNotFound=Nejpravděpodobnější příčina je, že onionsíť je offline. Kontaktuje administrátora onionsítě. +onionServices.descNotFound.longDescription=Detaily: %S - Požadovaný deskriptor onion služby nebyl nalezen v hashringu, proto není tato služba klientovi dostupná. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problém při načítání Onionsítě +onionServices.descInvalid.header=Onionsíť nemůže být dosažena +onionServices.descInvalid=Onionsíť je nedostupná kvůli interní chybě. +onionServices.descInvalid.longDescription=Detaily: %S - Požadovaný deskriptor onion služby se nepodařilo naparsovat nebo selhala validace podpisu. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problém při načítání Onionsítě +onionServices.introFailed.header=Onionsíť byla odpojena +onionServices.introFailed=Nejpravděpodobnější příčina je, že onionsíť je offline. Kontaktuje administrátora onionsítě. +onionServices.introFailed.longDescription=Detaily: %S - Zavedení selhalo, to znamená, že deskriptor byl nalezen, ale služba není nadále připojená k zaváděcímu bodu. Je pravděpodobné, že služba změnila svůj deskriptor nebo neběží. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problém při načítání Onionsítě +onionServices.rendezvousFailed.header=Připojení k Onionsíti není možné +onionServices.rendezvousFailed=Onionsíť je zaneprázdněná, nebo je síť Tor přetížená. Zkuste to později. +onionServices.rendezvousFailed.longDescription=Detaily: %S - Klientovi se nepodařilo dokončit spojení se službou. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Je vyžadováno oprávnění +onionServices.clientAuthMissing.header=Onionsíť vyžaduje autentizaci. +onionServices.clientAuthMissing=Přístup k onionsíti vyžaduje klíč, ale žádný nebyl poskytnut. +onionServices.clientAuthMissing.longDescription=Detaily: %S - Klient stáhnul požadovaný deskriptor onion služby, ale nepodařilo se dešifrovat jeho obsah, protože chybí informace o jeho autorizaci. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorizace selhala. +onionServices.clientAuthIncorrect.header=Autentizace Onion stránky selhala +onionServices.clientAuthIncorrect=Poskytnutý klíč je nesprávný, nebo byl zrušen. Kontaktujte administrátora onionsítě. +onionServices.clientAuthIncorrect.longDescription=Detaily: %S - Klientovi se podařilo stáhnout požadovaný deskriptor onion služby, ale nepodařilo se dešifrovat jeho obsah poskytnutými autorizačními údaji. To může znamenat, že možnost přístupu byla odebrána. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problém při načítání Onionsítě +onionServices.badAddress.header=Neplatná adresa Onionsítě +onionServices.badAddress=Zadaná adresa onion stránky je neplatná. Prosím zkontrolujte, že je zadaná správně. +onionServices.badAddress.longDescription=Detaily: %S - Poskytnutá .onion adresa není validní. Tato chyba se vyskytuje v následujících situacích: kontrolní součet adresy nesedí, ed25519 veřejný klíč není validní, nebo je nevalidní kódování. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problém při načítání Onionsítě +onionServices.introTimedOut.header=Vytvoření okruhu Onion stránky timeoutovalo +onionServices.introTimedOut=Spojení s onion stránkou se nezdařilo, pravděpodobně kvůli slabému připojení k síti. +onionServices.introTimedOut.longDescription=Deetaily: %S - Časový limit spojení s onion službou vypršel při budouvání okruhu. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S vyžaduje vaše ověření. +onionServices.authPrompt.keyPlaceholder=Zadejte svůj soukromý klíč pro tuto službu onion +onionServices.authPrompt.done=Hotovo +onionServices.authPrompt.doneAccessKey=H +onionServices.authPrompt.invalidKey=Zadejte prosím platný klíč (52 znaků base32, nebo 44 znaků base64) +onionServices.authPrompt.failedToSetKey=Tor s vaším klíčem nelze nastavit +onionServices.authPreferences.header=Autentizace Onion služeb +onionServices.authPreferences.overview=Některé onion služby vyžadují, abyste se idenitfikovali klíčem (něco jako heslo), než k nim budete moci přistoupit. +onionServices.authPreferences.savedKeys=Uložené klíče... +onionServices.authPreferences.dialogTitle=Klíče Služby Onion +onionServices.authPreferences.dialogIntro=Klíče pro následující onion stánky jsou uloženy na vašem počítači +onionServices.authPreferences.onionSite=Onionsíť +onionServices.authPreferences.onionKey=Klíč +onionServices.authPreferences.remove=Odstranit +onionServices.authPreferences.removeAll=Odstranit všechny +onionServices.authPreferences.failedToGetKeys=Nelze načíst klíče z Toru +onionServices.authPreferences.failedToRemoveKey=Klíč nelze odstranit +onionServices.v2Deprecated.pageTitle=Varování o zrušení V2 Onion webů +onionServices.v2Deprecated.header=Onion weby ve verzi 2 budou brzy zrušeny +onionServices.v2Deprecated=Tento onion web nebude brzy dostupný. Spojte se prosím s administrátory webu a doporučte jim upgrade. +onionServices.v2Deprecated.longDescription=V červenci 2021 Tor ukončuje podporu onion služeb ve verzi 2 a tento onion web nebude brzy na této adrese dostupný. Pokud jsi administrátor tohoto webu, upgraduj co nejdříve na verzi 3. +onionServices.v2Deprecated.tryAgain=Chápu +onionServices.v2Deprecated.tooltip=Tento onion web brzy nebude dostupný + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Vždy upřednostňovat Onion stránky +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Nyní ne +onionLocation.notNowAccessKey=n +onionLocation.description=Existuje soukromější a bezpečnější verze těchto stránek dostupná přes síť Tor a její onion služby, které pomáhají vlastníkům a uživatelům těchto stránek zabránit sledování a cenzuře. +onionLocation.tryThis=Vyzkoušet Onion Služby +onionLocation.onionAvailable=.onion dostupný +onionLocation.learnMore=Zjistěte více... +onionLocation.always=Vždy +onionLocation.askEverytime=Ptát se vždy +onionLocation.prioritizeOnionsDescription=Upřednostňovat známé .onion stránky. +onionLocation.onionServicesTitle=Služby Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Adresa kryptoměny (%S) byla zkopírována z nezabezpečené webové stránky. Mohla být upravena. +cryptoSafetyPrompt.whatCanHeading=Co s tím můžete dělat? +cryptoSafetyPrompt.whatCanBody=Můžete se zkusit znovu připojit pomocí nového okruhu, abyste navázali bezpečné připojení, nebo přijmout riziko a toto varování odmítnout. +cryptoSafetyPrompt.learnMore=Zjistit více +cryptoSafetyPrompt.primaryAction=Znovu načíst tab s novým okruhem +cryptoSafetyPrompt.primaryActionAccessKey=O +cryptoSafetyPrompt.secondaryAction=Odmítnout varování +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Pokračujte po uvážení +rulesets.warningDescription=Přidávání nebo úprava sad pravidel může umožnit útočníkům zneužít váš prohlížeč. Pokračujte pouze pokud více, co děláte. +rulesets.warningEnable=Varujte mě, když se pokusím o přístup k těmto nastavením. +rulesets.warningButton=Souhlasit s rizikem a pokračovat +# Ruleset list +rulesets.rulesets=Sady pravidel +rulesets.noRulesets=Sady pravidel nenalezeny +rulesets.noRulesetsDescr=Když máte sadu pravidel v Prohlížeči Tor, zobrazí se zde. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Naposledy aktualizováno %S +rulesets.neverUpdated=Nikdy neaktualizováno a nebo poslední aktualizace selhala +rulesets.enabled=Povoleno +rulesets.disabled=Vypnuto +# Ruleset details/edit ruleset +rulesets.edit=Změnit +rulesets.name=Název +rulesets.jwk=JWK +rulesets.pathPrefix=Předpona cesty +rulesets.scope=Rámec +rulesets.enable=Zapnout tuto sadu pravidel +rulesets.checkUpdates=Zkontrolovat aktualizace +rulesets.jwkPlaceholder=Klíč použitý pro podepsání této sady pravidel v JWK (JSON Web Key) formátu +rulesets.jwkInvalid=JWK nemůže být zpracován a nebo nejde o platný klíč +rulesets.pathPrefixPlaceholder=URL předpona, která obsahuje soubory, potřebné pro sadu pravidel +rulesets.pathPrefixInvalid=Předpona cesty není platnou HTTP(S) adresou +rulesets.scopePlaceholder=Regulární výraz pro rámec pravidel +rulesets.scopeInvalid=Rámec nemohl být zpracován jako regulární výraz +rulesets.save=Uložit +rulesets.cancel=Zrušit diff --git a/toolkit/torbutton/chrome/locale/cs/torlauncher.properties b/toolkit/torbutton/chrome/locale/cs/torlauncher.properties new file mode 100644 index 000000000000..0e8890a1fb06 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/cs/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Spouštěč Toru + +torlauncher.tor_exited_during_startup=Tor byl ukončen během spouštění. Příčinou může být chyba ve vašem souboru torrc, v Toru, v jiném programu na vašem systému, nebo vadný hardware. Dokud nebude příčina opravena a Tor restartován, prohlížeč Tor se nespustí. +torlauncher.tor_exited=Tor byl neočekávaně ukončen. Příčinou může být chyba v Toru, v jiném programu na vašem systému, nebo vadný hardware. Dokud nebude Tor restartován, prohlížeč Tor nebude moci načíst žádnou webovou stránku. Pokud problém přetrvává, prosím pošlete týmu podpory kopii protokolu Toru. +torlauncher.tor_exited2=Restartování Tor nebude zavírat záložky prohlížeče. +torlauncher.tor_controlconn_failed=Nemohu se připojit ke kontrolnímu portu Tor. +torlauncher.tor_failed_to_start=Tor nenastartoval. +torlauncher.tor_control_failed=Nepodařilo se převzít kontrolu nad Torem. +torlauncher.tor_bootstrap_failed=Nepodařilo se připojit do sítě Tor. +torlauncher.tor_bootstrap_failed_details=%1$S selhal (%2$S). + +torlauncher.unable_to_start_tor=Tor není možné zapnout\n\n%S +torlauncher.tor_missing=Spustitelný soubor Toru chybí. +torlauncher.torrc_missing=Chybí soubor torrc a nemohl být vytvořen. +torlauncher.datadir_missing=Složka s daty Toru neexistuje a nemohla být vytvořena. +torlauncher.onionauthdir_missing=Onion ověřovací složka Toru neexistuje a nemohla být vytvořena. +torlauncher.password_hash_missing=Nepovedlo se získat hashované heslo. + +torlauncher.failed_to_get_settings=Nelze načíst nastavení Toru.\n\n%S +torlauncher.failed_to_save_settings=Nelze uložit nastavení Toru.\n\n%S +torlauncher.ensure_tor_is_running=Zkontrolujte prosím, že je Tor spuštěn. + +torlauncher.error_proxy_addr_missing=Pro nastavení proxy serveru musíte zadat jak IP adresu (nebo název hostitele) tak číslo portu. +torlauncher.error_proxy_type_missing=Vyberte typ proxy. +torlauncher.error_bridges_missing=Vyberte jeden nebo více mostů. +torlauncher.error_default_bridges_type_missing=Pro vybrané mosty musíte zadat typ transportu. +torlauncher.error_bridgedb_bridges_missing=Požádejte prosím o most. +torlauncher.error_bridge_bad_default_type=Nejsou nastaveny žádné mosty s typem transportu %S. Změňte prosím nastavení. + +torlauncher.bridge_suffix.meek-amazon=(funguje v Číně) +torlauncher.bridge_suffix.meek-azure=(funguje v Číně) + +torlauncher.request_a_bridge=Požádat o most… +torlauncher.request_a_new_bridge=Požádat o nový most… +torlauncher.contacting_bridgedb=Kontaktování BridgeDB. Čekejte prosím. +torlauncher.captcha_prompt=Pro vyžádání mostu prosím opište kód CAPTCHA. +torlauncher.bad_captcha_solution=Neopsali jste kód správně. Zkuste to prosím znovu. +torlauncher.unable_to_get_bridge=Nepodařilo se získat most z BridgeDB.\n\n%S +torlauncher.no_meek=Tento prohlížeč nemá nastaven meek, který je potřebný pro získávání mostů. +torlauncher.no_bridges_available=Je nám líto, ale v tuto chvíli nejsou dostupné žádné mosty. + +torlauncher.connect=Připojit +torlauncher.restart_tor=Restartovat Tor +torlauncher.quit=Ukončit +torlauncher.quit_win=Ukončit +torlauncher.done=Hotovo + +torlauncher.forAssistance=Pro asistenci kontaktujte %S +torlauncher.forAssistance2=Pro asistenci navštivte %S + +torlauncher.copiedNLogMessages=Kopírování dokončeno. %S zprávy protokolu Tor jsou připraveny k vložení do textového editoru nebo e-mailu. + +torlauncher.bootstrapStatus.starting=Spouštění +torlauncher.bootstrapStatus.conn_pt=Připojování k mostu +torlauncher.bootstrapStatus.conn_done_pt=Připojeno k mostu +torlauncher.bootstrapStatus.conn_proxy=Připojování k proxy serveru +torlauncher.bootstrapStatus.conn_done_proxy=Připojeno k proxy serveru +torlauncher.bootstrapStatus.conn=Připojování k uzlu sítě Tor +torlauncher.bootstrapStatus.conn_done=Připojeno k uzlu sítě Tor +torlauncher.bootstrapStatus.handshake=Vyjednávání s uzlem sítě Tor +torlauncher.bootstrapStatus.handshake_done=Vyjednávání s uzlem sítě Tor dokončeno +torlauncher.bootstrapStatus.onehop_create=Spojování s šifrovaným adresářem +torlauncher.bootstrapStatus.requesting_status=Kontrola stavu sítě +torlauncher.bootstrapStatus.loading_status=Načítání stavu sítě +torlauncher.bootstrapStatus.loading_keys=Nahrávání certifikátů autorit +torlauncher.bootstrapStatus.requesting_descriptors=Zjišťování informací o uzlu +torlauncher.bootstrapStatus.loading_descriptors=Nahrávání informací o uzlu +torlauncher.bootstrapStatus.enough_dirinfo=Nahrávání informací o uzlu dokončeno +torlauncher.bootstrapStatus.ap_conn_pt=Vytváření řetězců: připojování k mostu +torlauncher.bootstrapStatus.ap_conn_done_pt=Vytváření řetězců: připojeno k mostu +torlauncher.bootstrapStatus.ap_conn_proxy=Vytváření řetězců: připojování k proxy serveru +torlauncher.bootstrapStatus.ap_conn_done_proxy=Vytváření řetězců: připojeno k proxy serveru +torlauncher.bootstrapStatus.ap_conn=Vytváření řetězců: připojování k uzlu sítě Tor +torlauncher.bootstrapStatus.ap_conn_done=Vytváření řetězců: připojeno k uzlu sítě Tor +torlauncher.bootstrapStatus.ap_handshake=Vytváření řetězců: vyjednávání s uzlem sítě Tor +torlauncher.bootstrapStatus.ap_handshake_done=Vytváření řetězců: vyjednávání s uzlem sítě Tor dokončeno +torlauncher.bootstrapStatus.circuit_create=Vytváření řetězců: vytváření řetězce sítí Tor +torlauncher.bootstrapStatus.done=Připojení k síti Tor dokončeno! + +torlauncher.bootstrapWarning.done=hotovo +torlauncher.bootstrapWarning.connectrefused=připojení odmítnuto +torlauncher.bootstrapWarning.misc=různý +torlauncher.bootstrapWarning.resourcelimit=nedostatečné zdroje +torlauncher.bootstrapWarning.identity=nesouhlasí identita +torlauncher.bootstrapWarning.timeout=čas spojení vypršel +torlauncher.bootstrapWarning.noroute=žádné spojení s hostitelem +torlauncher.bootstrapWarning.ioerror=chyba během čtení nebo zápisu +torlauncher.bootstrapWarning.pt_missing=chybějící zásuvný transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Spojení se serverem bylo ztraceno. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Nelze se připojit k serveru. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Nelze se připojit k proxy. + +torlauncher.copiedNLogMessagesShort=Logy %S zkopírovány diff --git a/toolkit/torbutton/chrome/locale/da/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/da/aboutDialog.dtd new file mode 100644 index 000000000000..d96a1f1b8827 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; er udviklet af"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", en nonprofitorganisation som arbejder for at beskytte dit privatliv og din frihed online."> + +<!ENTITY help.start "Vil du hjælpe? "> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Donér"> +<!ENTITY help.or " eller "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "vær med"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Spørgsmål?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Hjælp Tor-netværket med at vokse!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licensinformation"> +<!ENTITY tor.TrademarkStatement ""Tor" og "løg-logoet" er registrerede varemærker tilhørende Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/da/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/da/aboutTBUpdate.dtd new file mode 100644 index 000000000000..7f580fab7618 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Ændringslog for Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser er blevet opdateret."> +<!ENTITY aboutTBUpdate.linkPrefix "For den seneste information om denne udgivelse, "> +<!ENTITY aboutTBUpdate.linkLabel "besøg vores websted"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Udgivelsesdato"> +<!ENTITY aboutTBUpdate.releaseNotes "Udgivelsesnoter"> diff --git a/toolkit/torbutton/chrome/locale/da/aboutTor.dtd b/toolkit/torbutton/chrome/locale/da/aboutTor.dtd new file mode 100644 index 000000000000..32f399da76a9 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Om Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Vis ændringslog"> + +<!ENTITY aboutTor.ready.label "Udforsk. Privat."> +<!ENTITY aboutTor.ready2.label "Du er klar til verdens mest private browseroplevelse."> +<!ENTITY aboutTor.failure.label "Noget gik galt!"> +<!ENTITY aboutTor.failure2.label "Tor virker ikke i denne browser."> + +<!ENTITY aboutTor.search.label "Søg med DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Spørgsmål?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Tjek vores Tor Browser-manual »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser-manual"> + +<!ENTITY aboutTor.tor_mission.label "Tor-projektet er en US 501(c)(3) nonprofit-organisation som fremmer menneskerettigheder og friheder, ved at skabe og udsende frie og open source anonymitets- og privatlivsteknologier, som støtter deres ubegrænsede tilgængelighed og anvendelse, og fremmer deres videnskabelige og populære forståelse."> +<!ENTITY aboutTor.getInvolved.label "Deltag »"> + +<!ENTITY aboutTor.newsletter.tagline "Få de seneste nyheder fra Tor direkte i din indbakke."> +<!ENTITY aboutTor.newsletter.link_text "Tilmeld Tor-nyheder."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor er gratis at bruge takke være donationer fra personer som dig."> +<!ENTITY aboutTor.donationBanner.buttonA "Donér nu"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONÉR NU"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/da/brand.dtd b/toolkit/torbutton/chrome/locale/da/brand.dtd new file mode 100644 index 000000000000..b7a5cc9e0db5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor-projektet"> +<!ENTITY trademarkInfo.part1 ""Tor" og "løg-logoet" er registrerede varemærker tilhørende Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klik for at indlæse installerede systemplugins"> +<!ENTITY plugins.installed.enable "Aktivér plugins"> +<!ENTITY plugins.installed.disable "Deaktivér plugins"> +<!ENTITY plugins.installed.disable.tip "Klik for at forhindre indlæsning af systemplugins"> diff --git a/toolkit/torbutton/chrome/locale/da/brand.properties b/toolkit/torbutton/chrome/locale/da/brand.properties new file mode 100644 index 000000000000..d975e5e6d924 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor-projekt + +homePageSingleStartMain=Firefox Start, en hurtig startside med indbygget søgning +homePageImport=Importer din startside fra %S + +homePageMigrationPageTitle=Valg af startside +homePageMigrationDescription=Vælg venligst den startside du ønsker at bruge: + +syncBrandShortName=Synkroniser diff --git a/toolkit/torbutton/chrome/locale/da/branding/brand.ftl b/toolkit/torbutton/chrome/locale/da/branding/brand.ftl new file mode 100644 index 000000000000..65c610623476 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor-projekt +trademarkInfo = 'Tor' og 'løg-logoet' er registrerede varemærker tilhørende Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/da/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/da/browserOnboarding.properties new file mode 100644 index 000000000000..373e919adcae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Velkommen +onboarding.tour-tor-welcome.title=Du er klar. +onboarding.tour-tor-welcome.description=Tor Browser tilbyder den højeste standard indenfor privatliv og sikkerhed på webbet. Du er nu beskyttet mod sporing, overvågning og censur. Den hurtige introduktion viser dig hvordan. +onboarding.tour-tor-welcome.next-button=Gå til privatliv + +onboarding.tour-tor-privacy=Privatliv +onboarding.tour-tor-privacy.title=Sæt en stopper for trackere og snoopers. +onboarding.tour-tor-privacy.description=Tor Browser isolerer cookies og sletter din browserhistorik efter din session. Ændringerne sikre dit privatliv, og sikkerheden beskyttes i browseren. Klik på ‘Tor-netværk’ for at lære hvordan vi beskytter dig på netværksniveauet. +onboarding.tour-tor-privacy.button=Gå til Tor-netværk + +onboarding.tour-tor-network=Tor-netværk +onboarding.tour-tor-network.title=Rejs på et decentraliseret netværk. +onboarding.tour-tor-network.description=Tor Browser forbinder dig til Tor-netværket, som køres af tusindvis af frivillige verden over. I modsætning til en VPN, er der ikke ét punkt som kan få det til at fejle, eller centraliseret indgang som du skal have tillid til for at bruge internettet privat. +onboarding.tour-tor-network.description-para2=NYT: Tor-netværksindstillingerne, herunder muligheden for at anmode om broer hvor Tor er blokeret, findes nu i Præferencer. +onboarding.tour-tor-network.action-button=Juster dine Tor-netværksindstillinger +onboarding.tour-tor-network.button=Gå til kredsløb-visning + +onboarding.tour-tor-circuit-display=Kredsløb-visning +onboarding.tour-tor-circuit-display.title=Se din sti. +onboarding.tour-tor-circuit-display.description=Hver gang du besøger et domæne, videresendes og krypteres din trafik i et kredsløb hen over tre Tor-relæer verden over. Webstederne kan ikke se hvor du opretter forbindelse fra. Du kan anmode om et nyt kredsløb ved at klikke på ‘Nyt kredsløb til dette sted’ på vores kredsløb-visning. +onboarding.tour-tor-circuit-display.button=Se min sti +onboarding.tour-tor-circuit-display.next-button=Gå til sikkerhed + +onboarding.tour-tor-security=Sikkerhed +onboarding.tour-tor-security.title=Vælg din oplevelse. +onboarding.tour-tor-security.description=Vi giver dig også yderligere sikkerhedsindstillinger for at øge din browsersikkerhed. Vores sikkerhedsindstillinger giver dig mulighed for at blokere elementer der kan bruges til at angribe din computer. Klik nedenfor for at se hvad de forskellige valgmuligheder gør. +onboarding.tour-tor-security.description-suffix=Bemærk: NoScript og HTTPS Everywhere inkluderes, som standard, ikke på værktøjslinjen, men du kan tilpasse din værktøjslinje for at tilføje dem. +onboarding.tour-tor-security-level.button=Se dit sikkerhedsniveau +onboarding.tour-tor-security-level.next-button=Gå til oplevelesestips + +onboarding.tour-tor-expect-differences=Oplevelesestips +onboarding.tour-tor-expect-differences.title=Forvent nogle forskelle. +onboarding.tour-tor-expect-differences.description=Med alle de sikkerheds- og privatlivsfunktionaliteter som gives af Tor, kan din oplevelse på internettet være lidt anderledes. Ting kan være lidt langsommere, og afhængig af dit sikkerhedsniveau, kan det være at nogle elementer ikke virker eller ikke indlæses. Du bliver måske også spurgt om du er et menneske eller en robot. +onboarding.tour-tor-expect-differences.button=Se FAQ'er +onboarding.tour-tor-expect-differences.next-button=Gå til oniontjenester + +onboarding.tour-tor-onion-services=Oniontjenester +onboarding.tour-tor-onion-services.title=Vær ekstra beskyttet. +onboarding.tour-tor-onion-services.description=Oniontjenester er steder som slutter med .onion som giver yderligere beskyttelse til udgivere og besøgende, inklusiv tilføjelse af sikkhedsforanstaltninger mod censur. Oniontjenester giver alle mulighed for at levere indhold og tjenester anonymt. Klik nedenfor for at besøge DuckDuckGos onionsted. +onboarding.tour-tor-onion-services.button=Besøg et onion +onboarding.tour-tor-onion-services.next-button=Færdig + +onboarding.overlay-icon-tooltip-updated2=Se nyhederne\ni %S +onboarding.tour-tor-update.prefix-new=Ny +onboarding.tour-tor-update.prefix-updated=Opdateret + +onboarding.tour-tor-toolbar=Værktøjslinje +onboarding.tour-tor-toolbar-update-9.0.title=Farvel løg-knap. +onboarding.tour-tor-toolbar-update-9.0.description=Vi ønsker at din oplevelse med Tor skal være fuldt integreret i Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Derfor kan du nu, i stedet for at bruge løg-knappen, se dine Tor-kredsløb via [i] på adresselinjen og anmode om en ny identitet med værktøjslinjeknappen eller [≡]-menuen. +onboarding.tour-tor-toolbar-update-9.0.button=Anmod om en ny identitet +onboarding.tour-tor-toolbar-update-9.0.next-button=Gå til Tor-netværk + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Næste +onboarding.tor-circuit-display.done=Færdig +onboarding.tor-circuit-display.one-of-three=1 af 3 +onboarding.tor-circuit-display.two-of-three=2 af 3 +onboarding.tor-circuit-display.three-of-three=3 af 3 + +onboarding.tor-circuit-display.intro.title=Hvordan virker kredsløb? +onboarding.tor-circuit-display.intro.msg=Kredsløb består af relæer, som er tildelt tilfældigt, hvilket er computere verden over som er konfigureret til at videresende Tor-trafik. Kredsløb giver dig mulighed for at bruge internettet privat og oprette forbindelse til oniontjenester. + +onboarding.tor-circuit-display.diagram.title=Kredsløb-visning +onboarding.tor-circuit-display.diagram.msg=Diagrammet viser de relæer som opgør kredsløbet til webstedet. For at forhindre sammenkædning af aktivitet på tværs af forskellige steder, så får hvert websted et andet kredsløb. + +onboarding.tor-circuit-display.new-circuit.title=Har du brug for et nyt kredsløb? +onboarding.tor-circuit-display.new-circuit.msg=Hvis du ikke er i stand til at oprette forbindelse til det websted du prøver at besøge, eller det ikke indlæser ordentligt, så kan du bruge denne knap til at genindlæse stedet med et nyt kredsløb. diff --git a/toolkit/torbutton/chrome/locale/da/network-settings.dtd b/toolkit/torbutton/chrome/locale/da/network-settings.dtd new file mode 100644 index 000000000000..ab4dca717754 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor-netværksindstillinger"> +<!ENTITY torsettings.wizard.title.default "Opret forbindelse til Tor"> +<!ENTITY torsettings.wizard.title.configure "Tor-netværksindstillinger"> +<!ENTITY torsettings.wizard.title.connecting "Etablerer en forbindelse"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Sprog for Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Vælg venligst et sprog."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klik på “Opret forbindelse” for at oprette forbindelse til Tor."> +<!ENTITY torSettings.configurePrompt "Klik på “Konfigurer” for at justere netværksindstillinger hvis du er i et land som censurerer Tor (såsom Egypten, Kina, Tyrkiet) eller hvis du opretter forbindelse fra et privat netværk som kræver en proxy."> +<!ENTITY torSettings.configure "Konfigurer"> +<!ENTITY torSettings.connect "Opret forbindelse"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Venter på at Tor starter..."> +<!ENTITY torsettings.restartTor "Genstart Tor"> +<!ENTITY torsettings.reconfigTor "Genkonfigurer"> + +<!ENTITY torsettings.discardSettings.prompt "Du har konfigureret Tor-broer eller du har indtastet lokale proxyindstillinger.  For at kunne foretage direkte forbindelse til Tor-netværket, skal indstillingerne fjernes."> +<!ENTITY torsettings.discardSettings.proceed "Fjern indstillinger og opret forbindelse"> + +<!ENTITY torsettings.optional "Valgfri"> + +<!ENTITY torsettings.useProxy.checkbox "Jeg bruger en proxy til at oprette forbindelse til internettet"> +<!ENTITY torsettings.useProxy.type "Proxytype"> +<!ENTITY torsettings.useProxy.type.placeholder "vælg en proxytype"> +<!ENTITY torsettings.useProxy.address "Adresse"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-adresse eller værtsnavn"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Brugernavn"> +<!ENTITY torsettings.useProxy.password "Adgangskode"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP/HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Computeren går gennem en firewall som kun tillader forbindelser til bestemte porte"> +<!ENTITY torsettings.firewall.allowedPorts "Tilladte porte"> +<!ENTITY torsettings.useBridges.checkbox "Tor er censureret i mit land"> +<!ENTITY torsettings.useBridges.default "Vælg en indbygget bro"> +<!ENTITY torsettings.useBridges.default.placeholder "vælg en bro"> +<!ENTITY torsettings.useBridges.bridgeDB "Anmod om en bro fra torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Indtast tegnene fra billedet"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Få en ny udfordring"> +<!ENTITY torsettings.useBridges.captchaSubmit "Indsend"> +<!ENTITY torsettings.useBridges.custom "Formidl en bro jeg kender"> +<!ENTITY torsettings.useBridges.label "Indtast broinformation fra en betroet kilde."> +<!ENTITY torsettings.useBridges.placeholder "skriv adresse:port (én pr. linje)"> + +<!ENTITY torsettings.copyLog "Kopiér Tor-loggen til udklipsholderen"> + +<!ENTITY torsettings.proxyHelpTitle "Hjælp til proxy"> +<!ENTITY torsettings.proxyHelp1 "Der kan være brug for en lokal proxy når der oprettes forbindelse gennem et netværk i virksomhed, skole eller universitet. Hvis du er i tvivl om der er brug for en proxy, så kig i internetindstillingerne i en anden browser eller tjek dit systems netværksindstillinger."> + +<!ENTITY torsettings.bridgeHelpTitle "Hjælp til bro-relæ"> +<!ENTITY torsettings.bridgeHelp1 "Broer er ulistede relæer som gør det sværrer at blokere forbindelser til Tor-netværket.  Hver type bro bruger en anderledes metode for at undgå censur.  Dem med obfs får din netværkstrafik til at ligne tilfældig støj og dem med meek får din netværkstrafik til at se ud som om den er forbundet til tjenesten i stedet for Tor."> +<!ENTITY torsettings.bridgeHelp2 "Pga. den måde bestemte lande prøver at blokere Tor, vil bestemte broer virke i nogle lande men ikke andre.  Besøg torproject.org/about/contact.html#support hvis du er i tvivl om hvilke broer der virker i dit land."> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Vent venligst mens der etableres forbindelse til Tor-netværket.  Det kan tage flere minutter."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Forbindelse"> +<!ENTITY torPreferences.torSettings "Tor-indstillinger"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser sender din trafik over Tor-netværket som køres af tusindvis af frivillige verden over." > +<!ENTITY torPreferences.learnMore "Lær mere"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Forbundet"> +<!ENTITY torPreferences.statusTorNotConnected "Ikke forbundet"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Lær mere"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Hurtig start"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Opret altid forbindelse automatisk"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Broer"> +<!ENTITY torPreferences.bridgesDescription "Broer hjælper dig med at tilgå Tor-netværket steder hvor Tor er blokeret. Afhængig af hvor du er, så kan en bro virke bedre end en anden."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatisk"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Fjern"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Kopieret!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Anmod om en bro…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avanceret"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Vis logge…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Annuller"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Anmod om bro"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kontakter BridgeDB. Vent venligst."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Løs CAPTCHA'en for at anmode om en bro."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Løsningen er ikke korrekt. Prøv venligst igen."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Indtast broinformation fra en betroet kilde"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor-logge"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Ikke forbundet"> +<!ENTITY torConnect.connectingConcise "Forbinder..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatisk"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Try Again"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser kunne ikke etablere en forbindelse til Tor-netværket"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/da/onboarding.properties b/toolkit/torbutton/chrome/locale/da/onboarding.properties new file mode 100644 index 000000000000..4c68de6bad07 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Første gang du bruger %S?\nLad os komme i gang. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S er helt ny.\nSe de nye muligheder! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Luk +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Luk +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Set diff --git a/toolkit/torbutton/chrome/locale/da/torbutton.dtd b/toolkit/torbutton/chrome/locale/da/torbutton.dtd new file mode 100644 index 000000000000..da2448bbd00a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Ny identitet"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Nyt Tor-kredsløb for dette sted"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor-netværksindstillinger..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Søg efter opdateringer til Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "O"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookiebeskyttelser..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klik for at starte Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Sikkerhedsindstillinger for Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Håndtér cookiebeskyttelser"> +<!ENTITY torbutton.cookiedialog.lockCol "Beskyttet"> +<!ENTITY torbutton.cookiedialog.domainCol "Vært"> +<!ENTITY torbutton.cookiedialog.nameCol "Navn"> +<!ENTITY torbutton.cookiedialog.pathCol "Sti"> +<!ENTITY torbutton.cookiedialog.protectCookie "Beskyt cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Fjern cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Fjern beskyttelse af cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Fjern alle, undtagen beskyttede"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Beskyt nye cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Beskyt ikke nye cookies"> +<!ENTITY torbutton.prefs.sec_caption "Sikkerhedsniveau"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Sikkerhedsskyderen giver dig mulighed for at deaktivere bestemte browserfunktionaliteter som kan gøre din browser sårbar overfor forsøg på hacking."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Alle Tor Browser- og webstedsfunktionaliteter er aktiveret."> +<!ENTITY torbutton.prefs.sec_safer_label "Mere sikker"> +<!ENTITY torbutton.prefs.sec_safer_description "Deaktiverer webstedsfunktionaliteter som ofte er farlige, hvilket kan gøre at nogle steder mister deres funktionalitet."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Ved indstillingen mere sikker:"> +<!ENTITY torbutton.prefs.sec_safest_label "Mest sikker"> +<!ENTITY torbutton.prefs.sec_safest_description "Tillader kun webstedsfunktionaliteter som kræves til statiske steder og grundlæggende tjenester. Ændringerne påvirker billeder, medier og scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Ved indstillingen mest sikker:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Lær mere"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript er deaktiveret på steder som ikke bruger HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript er som standard deaktiveret på alle steder."> +<!ENTITY torbutton.prefs.sec_limit_typography "Nogle skrifttyper og matematiksymboler er deaktiverede."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Nogle skrifttyper, ikoner, matematiksymboler og billeder er deaktiveret."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Lyd og video (HTML5-medier) og WebGL er klik-for-at-afspille."> +<!ENTITY torbutton.prefs.sec_custom_warning "Brugerdefineret"> +<!ENTITY torbutton.prefs.sec_overview "Deaktivér bestemte webfunktionaliteter som kan bruges til angribe din sikkerhed og anonymitet."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Sikkerhedsniveau : Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Sikkerhedsniveau : Mere sikker"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Sikkerhedsniveau : Mest sikker"> +<!ENTITY torbutton.prefs.sec_custom_summary "Dine tilpassede browserpræferencer har resulterede i usædvanlige sikkerhedsindstillinger. Pga. sikkerheds- og privatlivsårsagen, anbefaler vi at du vælger en af standardsikkerhedsniveauerne."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Gendan standarder"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Avancerede sikkerhedsindstillinger…"> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Tor-kredsløb"> +<!ENTITY torbutton.circuit_display.new_circuit "Nyt kredsløb til dette sted"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Åbn prompt til klientautentifikation af oniontjeneste"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Husk nøglen"> diff --git a/toolkit/torbutton/chrome/locale/da/torbutton.properties b/toolkit/torbutton/chrome/locale/da/torbutton.properties new file mode 100644 index 000000000000..0d94ac665265 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internettet +torbutton.circuit_display.ip_unknown = Ukendt IP +torbutton.circuit_display.onion_site = Onionsted +torbutton.circuit_display.this_browser = Browseren +torbutton.circuit_display.relay = Relæ +torbutton.circuit_display.tor_bridge = Bro +torbutton.circuit_display.unknown_country = Ukendt land +torbutton.circuit_display.guard = Vagt +torbutton.circuit_display.guard_note = Dit [Vagt]-knudepunkt ændres måske ikke. +torbutton.circuit_display.learn_more = Lær mere +torbutton.circuit_display.click_to_copy = Klik for at kopiere +torbutton.circuit_display.copied = Kopieret! +torbutton.content_sizer.margin_tooltip = Tor Browser tilføjer margenen for at gøre dit vindues højde og bredde mindre genkendeligt, hvilket reducerer muligheden for at andre kan spore dig online. +extensions.torbutton@torproject.org.description = Torbutton giver en knap til at konfigurere Tor-indstillinger og til hurtigt og nemt at fjerne private browsingdata. +torbutton.popup.external.title = Download en ekstern filtype? +torbutton.popup.external.app = Tor Browser kan ikke vis filen. Du skal åbne den med et andet program.\n\n +torbutton.popup.external.note = Nogle filtyper kan få programmer til at oprette forbindelse til internettet uden at bruge Tor.\n\n +torbutton.popup.external.suggest = For at være sikker bør du kun åbne downloade filer mens du er offline, eller bruge en Tor live-CD såsom Tails.\n +torbutton.popup.launch = Download fil +torbutton.popup.cancel = Annuller +torbutton.popup.dontask = Download automatisk filer fremover +torbutton.popup.no_newnym = Torbutton kan ikke med sikkerhed give dig en ny identitet. Den har ikke adgang til Tor-kontrolporten.\n\nKører du Tor Browser-bundet? +torbutton.security_settings.menu.title = Sikkerhedsindstillinger +torbutton.title.prompt_torbrowser = Vigtig information om Torbutton +torbutton.popup.prompt_torbrowser = Torbutton fungerer nu anderledes: du kan ikke længere slå den fra.\n\nVi foretog ændringen, da det ikke er sikkert at bruge Torbutton i en browser, der også anvendes til ikke-Tor-browsing. Der var for mange fejl deri, som vi ikke kunne rette på andre måder.\n\nHvis du vil bruge Firefox på normal vis, så bør du afinstallere Torbutton og downloade Tor Browser-bundet. Egenskaberne for privatliv i Tor Browser overgår også dem der normalt er i Firefox, selv [...] +torbutton.popup.short_torbrowser = Vigtig information om Torbutton!\n\nTorbutton er nu altid aktiveret.\n\nKlik på Torbutton for mere information. + +torbutton.popup.confirm_plugins = Plugins såsom Flash kan skade dit privatliv og din anonymitet.\n\nDe kan også omgå Tor, så din nuværende placering og IP-adresse afsløres.\n\nEr du sikker på, at du vil aktivere plugins?\n\n +torbutton.popup.never_ask_again = Spørg mig aldrig igen +torbutton.popup.confirm_newnym = Tor Browser vil lukke alle vinduer og faneblade. Alle webstedssessioner vil gå tabt.\nGenstart Tor Browser nu for at nulstille din identitet?\n + +torbutton.maximize_warning = Hvis du maksimere Tor Browser kan websteder fastslå din skærmstørrelse, hvilket kan bruges til at spore dig. Vi anbefaler at lade Tor Browser-vinduerne være i deres oprindelige standardstørrelse. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Dette websted (%S) forsøgte at udtrække billeddata fra HTML5-canvas, hvilket kan bruges til identificere din computer unikt.\n\nSkal Tor Browser give webstedet tilladelse til at udtrække billeddata fra HTML5-canvas? +canvas.notNow=Ikke nu +canvas.notNowAccessKey=N +canvas.allow=Tillad i fremtiden +canvas.allowAccessKey=T +canvas.never=Aldrig for dette sted (anbefales) +canvas.neverAccessKey=L + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problem med %S-profil +profileReadOnly=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopiér venligst %S til et andet sted før du prøver at bruge det. +profileReadOnlyMac=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopiér venligst %S til din skrivebordsmappe eller programmappe før du prøver at bruge det. +profileAccessDenied= %S har ikke tilladelse til at få adgang til profilen. Skift venligst tilladelser for dit filsystem og prøv igen. +profileMigrationFailed=Overførsel af din eksisterende %S-profil mislykkedes.\nNye indstillinger vil blive brugt. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Downloader %S opdatering + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Forbindelsen er krypteret (oniontjeneste, %1$S, %2$S-bit nøgler, %3$S) +pageInfo_OnionEncryption=Forbindelsen er krypteret (oniontjeneste) +pageInfo_OnionName=Onionnavn: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Lær mere +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Netværk +onionServices.errorPage.onionSite=Onionsted +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem ved indlæsning af onionsted +onionServices.descNotFound.header=Onionsted ikke fundet +onionServices.descNotFound=Det er højst sandsynligt fordi onionstedet er offline. Kontakt onionstedets administrator. +onionServices.descNotFound.longDescription=Detaljer: %S — Den anmodede oniontjeneste-beskriver blev ikke fundet i hashringen og tjenesten kan derfor ikke nås af klient. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem ved indlæsning af onionsted +onionServices.descInvalid.header=Onionstedet kan ikke nås +onionServices.descInvalid=Onionstedet kan ikke nås pga. en intern fejl. +onionServices.descInvalid.longDescription=Detaljer: %S — Den anmodende oniontjeneste-beskriver kan ikke fortolkes eller validering af underskrift mislykkedes. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem ved indlæsning af onionsted +onionServices.introFailed.header=Onionstedet har afbrudt forbindelsen +onionServices.introFailed=Det er højst sandsynligt fordi onionstedet er offline. Kontakt onionstedets administrator. +onionServices.introFailed.longDescription=Detaljer: %S — Introduktion mislykkedes, hvilket betyder at beskriveren blev fundet men tjenesten er ikke længere forbundet til introduktionspunktet. Tjenesten har sandsynligvis ændret sin beskriver eller den kører ikke. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem ved indlæsning af onionsted +onionServices.rendezvousFailed.header=Kan ikke oprette forbindelse til onionstedet +onionServices.rendezvousFailed=Onionstedet er optaget eller Tor-netværket er overbelastet. Prøv igen senere. +onionServices.rendezvousFailed.longDescription=Detaljer: %S — Klienten kunne ikke rendezvous med tjenesten, hvilket betyder at klienten ikke var i stand til at færdiggøre forbindelsen. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autentifikation kræves +onionServices.clientAuthMissing.header=Onionsted kræver autentifikation +onionServices.clientAuthMissing=Adgang til onionstedet kræver en nøgle, men der blev ikke angivet nogen. +onionServices.clientAuthMissing.longDescription=Detaljer: %S — Klienten downloadede den anmodede oniontjeneste-beskriver men kunne ikke dekryptere dens indhold fordi der mangler information om klientautentifikation. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autentifikation mislykkedes +onionServices.clientAuthIncorrect.header=Autentifkation af onionsted mislykkes +onionServices.clientAuthIncorrect=Den angivne nøgle er forkert eller er blevet tilbagekaldt. Kontakt onionstedets administrator. +onionServices.clientAuthIncorrect.longDescription=Detaljer: %S — Klienten var i stand til at downloade den anmodede oniontjeneste-beskriver men var ikke i stand til at dekryptere dens indhold med den angivne information om klientautentifikation. Det betyder måske at adgangen er blevet tilbagekaldt. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem ved indlæsning af onionsted +onionServices.badAddress.header=Ugyldig onionsted-adresse +onionServices.badAddress=Den angivne onionsted-adresse er ugyldig. Tjek venligst at du har indtastet den korrekt. +onionServices.badAddress.longDescription=Detaljer: %S — Den angivne .onion-adresse er ugyldig. Fejlen returneres pga. en af følgende årsager: adressens checksum matcher ikke, den offentlige ed25519-nøgle er ugyldig eller kodningen er ugyldig. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem ved indlæsning af onionsted +onionServices.introTimedOut.header=Oprettelse af onionsted-kredsløb fik timeout +onionServices.introTimedOut=Kunne ikke oprette forbindelse til onionstedet, muligvis pga. en dårlig netværksforbindelse. +onionServices.introTimedOut.longDescription=Detaljer: %S — Forbindelsen til den anmodede oniontjeneste fik timeout mens rendezvous-kredsløbet blev forsøgt bygget. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S anmoder dig om at autentificere. +onionServices.authPrompt.keyPlaceholder=Indtast din private nøgle til oniontjenesten +onionServices.authPrompt.done=Færdig +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Indtast venligst en gyldig nøgle (52 base32-tegn eller 44 base64-tegn) +onionServices.authPrompt.failedToSetKey=Kan ikke konfigurere Tor med din nøgle +onionServices.authPreferences.header=Autentifikation for oniontjenester +onionServices.authPreferences.overview=Nogle oniontjenester kræver at du identificerer dig med en nøgle (en slags adgangskode) inden du kan tilgå dem. +onionServices.authPreferences.savedKeys=Gemmer nøgler… +onionServices.authPreferences.dialogTitle=Nøgler for oniontjeneste +onionServices.authPreferences.dialogIntro=Der gemmes nøgler til følgende onionsteder på din computer +onionServices.authPreferences.onionSite=Onionsted +onionServices.authPreferences.onionKey=Nøgle +onionServices.authPreferences.remove=Fjern +onionServices.authPreferences.removeAll=Fjern alle +onionServices.authPreferences.failedToGetKeys=Kan ikke hente nøgler fra tor +onionServices.authPreferences.failedToRemoveKey=Kan ikke fjerne nøgle +onionServices.v2Deprecated.pageTitle=Advarsel om V2-onionsteder som udgår +onionServices.v2Deprecated.header=Version 2-onionsteder udgår snart +onionServices.v2Deprecated=Onionstedet vil snart ikke være tilgængeligt. Kontakt venligst stedets administrator og opforder dem at opgradere. +onionServices.v2Deprecated.longDescription=Tor slutter sin understøttelse af version 2-oniontjenester fra Juli 2021 og onionstedet vil ikke længere kunne tilgås fra denne adresse. Hvis du er stedets administator, så opgrader til en version 3-oniontjeneste snart. +onionServices.v2Deprecated.tryAgain=Okay +onionServices.v2Deprecated.tooltip=Onionstedet kan snart ikke tilgås + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Prioriter altid onions +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Ikke nu +onionLocation.notNowAccessKey=p +onionLocation.description=Der findes en mere privat og sikker version af stedet på Tor-netværket over oniontjenester. Oniontjenester hjælper webstedsudgivere og deres besøgende med bekæmpe overvågning og censur. +onionLocation.tryThis=Prøv oniontjenester +onionLocation.onionAvailable=.onion tilgængelig +onionLocation.learnMore=Lær mere… +onionLocation.always=Altid +onionLocation.askEverytime=Spørg hver gang +onionLocation.prioritizeOnionsDescription=Prioriter .onion-steder når de kendes. +onionLocation.onionServicesTitle=Oniontjenester + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=En kryptovalutaadresse (%S) er blevet kopieret fra et usikkert websted. Den kan være blevet ændret. +cryptoSafetyPrompt.whatCanHeading=Hvad kan du gøre ved det? +cryptoSafetyPrompt.whatCanBody=Du kan prøve at oprette forbindelse igen med et nyt kredsløb for at etablere en sikker forbindelse eller acceptere risikoen og se bort fra advarslen. +cryptoSafetyPrompt.learnMore=Lær mere +cryptoSafetyPrompt.primaryAction=Genindlæs faneblad med et nyt kredsløb +cryptoSafetyPrompt.primaryActionAccessKey=B +cryptoSafetyPrompt.secondaryAction=Se bort fra advarsel +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Aktiveret +rulesets.disabled=Deaktiveret +# Ruleset details/edit ruleset +rulesets.edit=Rediger +rulesets.name=NAvn +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Gem +rulesets.cancel=Annuller diff --git a/toolkit/torbutton/chrome/locale/da/torlauncher.properties b/toolkit/torbutton/chrome/locale/da/torlauncher.properties new file mode 100644 index 000000000000..0a07852e46bc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/da/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor-opstarter + +torlauncher.tor_exited_during_startup=Tor afsluttede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller fejl i hardware. Tor Browser starter ikke før du løser det underliggende problem og genstarter Tor. +torlauncher.tor_exited=Tor afsluttede uventet. Det kan skyldes en fejl i selve Tor, et andet program i dit system eller fejl i hardware. Tor Browser vil ikke være i stand til at nå nogen websteder før du genstarter Tor. Send en kopi af din Tor-log til supportteamet hvis problemet fortsætter. +torlauncher.tor_exited2=Hvis du genstarter Tor, så lukkes fanebladene i din browser. +torlauncher.tor_controlconn_failed=Kunne ikke oprette forbindelse til Tor-kontrolport. +torlauncher.tor_failed_to_start=Tor kunne ikke starte. +torlauncher.tor_control_failed=Det lykkedes ikke at tage kontrol over Tor. +torlauncher.tor_bootstrap_failed=Tor kunne ikke etablere en forbindelse til Tor-netværket. +torlauncher.tor_bootstrap_failed_details=%1$S mislykkedes (%2$S). + +torlauncher.unable_to_start_tor=Kan ikke starte Tor.\n\n%S +torlauncher.tor_missing=Tor-kørbaren mangler. +torlauncher.torrc_missing=torrc-filen mangler og kunne ikke oprettes. +torlauncher.datadir_missing=Tor-datamappen findes ikke og kunne ikke oprettes. +torlauncher.onionauthdir_missing=Tor-onionautentifikationsmappen findes ikke og kunne ikke oprettes. +torlauncher.password_hash_missing=Kunne ikke hente hashed adgangskode. + +torlauncher.failed_to_get_settings=Kan ikke hente Tor-indstillingerne..\n\n%S +torlauncher.failed_to_save_settings=Kan ikke gemme Tor-indstillingerne.\n\n%S +torlauncher.ensure_tor_is_running=Sørg venligst for at Tor kører. + +torlauncher.error_proxy_addr_missing=Du skal både angive en IP-adresse, eller værtsnavn og et portnummer, for at konfigurere Tor til at bruge en proxy til at få adgang til internettet. +torlauncher.error_proxy_type_missing=Du skal vælge proxytypen. +torlauncher.error_bridges_missing=Du skal angive en eller flere broer. +torlauncher.error_default_bridges_type_missing=Du skal vælge en transporttype til de tildelte broer. +torlauncher.error_bridgedb_bridges_missing=Anmod venligst om en bro. +torlauncher.error_bridge_bad_default_type=Ingen tildelte broer med transporttypen %S er tilgængelige. Juster venligst dine indstillinger. + +torlauncher.bridge_suffix.meek-amazon=(virker i Kina) +torlauncher.bridge_suffix.meek-azure=(virker i Kina) + +torlauncher.request_a_bridge=Anmod om en bro… +torlauncher.request_a_new_bridge=Anmod om en ny bro… +torlauncher.contacting_bridgedb=Kontakter BridgeDB. Vent venligst. +torlauncher.captcha_prompt=Løs CAPTCHA'en for at anmode om en bro. +torlauncher.bad_captcha_solution=Løsningen er ikke korrekt. Prøv venligst igen. +torlauncher.unable_to_get_bridge=Kan ikke hente en bro fra BridgeDB.\n\n%S +torlauncher.no_meek=Browseren er ikke konfigureret til meek, som behøves for at hente broer. +torlauncher.no_bridges_available=Der er på nuværende tidspunkt ingen broer tilgængelige. Beklager. + +torlauncher.connect=Opret forbindelse +torlauncher.restart_tor=Genstart Tor +torlauncher.quit=Afslut +torlauncher.quit_win=Afslut +torlauncher.done=Færdig + +torlauncher.forAssistance=Få hjælp ved at kontakte %S +torlauncher.forAssistance2=Få hjælp ved at besøge %S + +torlauncher.copiedNLogMessages=Kopieringen gennemført. %S logmeddelelser er klar til at blive indsæt i en tekstredigering eller en e-mailmeddelelse. + +torlauncher.bootstrapStatus.starting=Starter +torlauncher.bootstrapStatus.conn_pt=Opretter forbindelse til bro +torlauncher.bootstrapStatus.conn_done_pt=Forbundet til bro +torlauncher.bootstrapStatus.conn_proxy=Opretter forbindelse til proxy +torlauncher.bootstrapStatus.conn_done_proxy=Forbundet til proxy +torlauncher.bootstrapStatus.conn=Opretter forbindelse til et Tor-relæ +torlauncher.bootstrapStatus.conn_done=Forbundet til et Tor-relæ +torlauncher.bootstrapStatus.handshake=Forhandler med et Tor-relæ +torlauncher.bootstrapStatus.handshake_done=Færdig med at forhandle med et Tor-relæ +torlauncher.bootstrapStatus.onehop_create=Etablerer en forbindelse for krypteret mappe +torlauncher.bootstrapStatus.requesting_status=Henter netværksstatus +torlauncher.bootstrapStatus.loading_status=Indlæser netværksstatus +torlauncher.bootstrapStatus.loading_keys=Indlæser nøglecentercertifikater +torlauncher.bootstrapStatus.requesting_descriptors=Anmoder om relæinformation +torlauncher.bootstrapStatus.loading_descriptors=Indlæser relæinformation +torlauncher.bootstrapStatus.enough_dirinfo=Færdig med at indlæse relæinformation +torlauncher.bootstrapStatus.ap_conn_pt=Bygger kredsløb: Opretter forbindelse til bro +torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kredsløb: Forbundet til bro +torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kredsløb: Opretter forbindelse til proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kredsløb: Forbundet til proxy +torlauncher.bootstrapStatus.ap_conn=Bygger kredsløb: Opretter forbindelse til et Tor-relæ +torlauncher.bootstrapStatus.ap_conn_done=Bygger kredsløb: Forbundet til et Tor-relæ +torlauncher.bootstrapStatus.ap_handshake=Bygger kredsløb: Forhandler med et Tor-relæ +torlauncher.bootstrapStatus.ap_handshake_done=Bygger kredsløb: Færdig med at forhandle med et Tor-relæ +torlauncher.bootstrapStatus.circuit_create=Bygger kredsløb: Etablerer et Tor-kredsløb +torlauncher.bootstrapStatus.done=Forbundet til Tor-netværket! + +torlauncher.bootstrapWarning.done=færdig +torlauncher.bootstrapWarning.connectrefused=forbindelse afvist +torlauncher.bootstrapWarning.misc=diverse +torlauncher.bootstrapWarning.resourcelimit=utilstrækkelige ressourcer +torlauncher.bootstrapWarning.identity=identitet matcher ikke +torlauncher.bootstrapWarning.timeout=forbindelse fik timeout +torlauncher.bootstrapWarning.noroute=ingen rute til vært +torlauncher.bootstrapWarning.ioerror=fejl ved læse/skrive +torlauncher.bootstrapWarning.pt_missing=mangler udskiftelig transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Forbindelsen til serveren blev tabt. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til serveren. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Kunne ikke oprette forbindelse til proxyen. + +torlauncher.copiedNLogMessagesShort=Kopierede %S logge diff --git a/toolkit/torbutton/chrome/locale/de/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/de/aboutDialog.dtd new file mode 100644 index 000000000000..821675835fc5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; wird entwickelt von "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "das &vendorShortName;"> +<!ENTITY project.end ", eine gemeinnützige Organisation, um deine Privatsphäre und Freiheit im Internet zu verteidigen."> + +<!ENTITY help.start "Willst du helfen? "> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Dann kannst du spenden"> +<!ENTITY help.or "oder"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "mitmachen"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Fragen?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Hilf beim Vergrössern des Tor-Netzwerks!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Lizenzinformationen"> +<!ENTITY tor.TrademarkStatement "»Tor« und das »Zwiebel-Logo« sind eingetragene Warenzeichen von Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/de/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/de/aboutTBUpdate.dtd new file mode 100644 index 000000000000..607aac9151a9 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Änderungsprotokoll"> +<!ENTITY aboutTBUpdate.updated "Tor Browser wurde aktualisiert."> +<!ENTITY aboutTBUpdate.linkPrefix "Für die aktuellsten Informationen zu diesem Release, "> +<!ENTITY aboutTBUpdate.linkLabel "besuche unsere Website"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Erscheinungsdatum"> +<!ENTITY aboutTBUpdate.releaseNotes "Versionshinweise"> diff --git a/toolkit/torbutton/chrome/locale/de/aboutTor.dtd b/toolkit/torbutton/chrome/locale/de/aboutTor.dtd new file mode 100644 index 000000000000..6140504b18cb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Über Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Änderungsprotokoll anzeigen"> + +<!ENTITY aboutTor.ready.label "Entdecken. Privat."> +<!ENTITY aboutTor.ready2.label "Du bist bereit für das privateste Browsing-Erlebnis der Welt."> +<!ENTITY aboutTor.failure.label "Irgend etwas lief schief!"> +<!ENTITY aboutTor.failure2.label "Tor funktioniert mit diesem Browser nicht."> + +<!ENTITY aboutTor.search.label "Mit DuckDuckGo suchen"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Hast du noch Fragen dazu?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Schaue in unser Tor Browser Handbuch »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser-Handbuch"> + +<!ENTITY aboutTor.tor_mission.label "Projekt Tor ist eine in den USA als "The Tor Project" US 501(c)(3) registrierte nicht-kommerzielle Organisation für Menschenrechte und Freiheit, die freie und quelloffene Technologien für Anonymität und Privatsphäre entwickelt und bereitstellt und die Forschung und das öffentliche Verständnis auf diesen Gebieten voranbringt."> +<!ENTITY aboutTor.getInvolved.label "Mach mit »"> + +<!ENTITY aboutTor.newsletter.tagline "Erhalte die neuesten Nachrichten von Tor direkt in den Posteingang."> +<!ENTITY aboutTor.newsletter.link_text "Tor-Nachrichten abonnieren."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor ist aufgrund von Spenden von Leuten wie dir frei nutzbar."> +<!ENTITY aboutTor.donationBanner.buttonA "Spende jetzt"> + +<!ENTITY aboutTor.alpha.ready.label "Testen. Gründlich."> +<!ENTITY aboutTor.alpha.ready2.label "Du bist bereit, die privateste Browsing-Erfahrung der Welt zu testen."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha ist eine instabile Version des Tor Browser, die du benutzen kannst, um neue Funktionen zu sehen, ihre Leistung zu testen und Feedback zu geben, bevor sie veröffentlicht wird."> +<!ENTITY aboutTor.alpha.bannerLink "Melde einen Fehler im Tor-Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Testen. Gründlich."> +<!ENTITY aboutTor.nightly.ready2.label "Du bist bereit, die privateste Browsing-Erfahrung der Welt zu testen."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly ist eine instabile Version des Tor Browser, die du benutzen kannst, um neue Funktionen zu sehen, ihre Leistung zu testen und Feedback zu geben, bevor sie veröffentlicht wird."> +<!ENTITY aboutTor.nightly.bannerLink "Melde einen Fehler im Tor-Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "STARK DURCH DATENSCHUTZ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "WIDERSTAND"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "VERÄNDERUNG"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREIHEIT"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "SPENDE JETZT"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Deine Spende wird von Friends of Tor verdoppelt, bis zu 100.000 $."> diff --git a/toolkit/torbutton/chrome/locale/de/brand.dtd b/toolkit/torbutton/chrome/locale/de/brand.dtd new file mode 100644 index 000000000000..fcee1b0f882d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor-Browser"> +<!ENTITY brandShortName "Tor-Browser"> +<!ENTITY brandFullName "Tor-Browser"> +<!ENTITY vendorShortName "Tor-Projekt"> +<!ENTITY trademarkInfo.part1 "»Tor« und das »Zwiebel-Logo« sind eingetragene Warenzeichen von Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor-Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klicke, um System-Erweiterungen zu laden"> +<!ENTITY plugins.installed.enable "Erweiterungen aktivieren"> +<!ENTITY plugins.installed.disable "Erweiterungen deaktivieren"> +<!ENTITY plugins.installed.disable.tip "Klicke, um das Laden von System-Erweiterungen zu verhindern"> diff --git a/toolkit/torbutton/chrome/locale/de/brand.properties b/toolkit/torbutton/chrome/locale/de/brand.properties new file mode 100644 index 000000000000..4959f87545ac --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor-Browser +brandShortName=Tor-Browser +brandFullName=Tor-Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor-Browser +vendorShortName=Tor-Projekt + +homePageSingleStartMain=Firefox-Start, eine schnelle Startseite mit eingebauter Suche +homePageImport=Deine Startseite von %S importieren + +homePageMigrationPageTitle=Startseitenauswahl +homePageMigrationDescription=Bitte wähle die Startseite aus, die du benutzen willst: + +syncBrandShortName=Sync diff --git a/toolkit/torbutton/chrome/locale/de/branding/brand.ftl b/toolkit/torbutton/chrome/locale/de/branding/brand.ftl new file mode 100644 index 000000000000..67da7fad5524 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor-Browser +-brand-short-name = Tor-Browser +-brand-full-name = Tor-Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor-Browser +-vendor-short-name = Tor-Projekt +trademarkInfo = »Tor« und das »Zwiebel-Logo« sind eingetragene Warenzeichen von Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/de/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/de/browserOnboarding.properties new file mode 100644 index 000000000000..5e2d7734e423 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Willkommen +onboarding.tour-tor-welcome.title=Fertig. +onboarding.tour-tor-welcome.description=Tor Browser bietet höchste Privatsphäre und Sicherheit beim Surfen im Internet. Sie sind jetzt auch gegen Tracker, Überwachung und Zensur geschützt. Diese Einführung zeigt, wie. +onboarding.tour-tor-welcome.next-button=Gehe zu Privatsphäre + +onboarding.tour-tor-privacy=Privatsphäre +onboarding.tour-tor-privacy.title=Tracker und Schnüffler abweisen. +onboarding.tour-tor-privacy.description=Tor Browser isoliert Cookies und löscht den Verlauf nach jeder Benutzung. Diese Veränderungen garantieren, dass Privatsphäre und Sicherheit im Browser geschützt sind. Klicken Sie auf "Tor-Netzwerk", um zu erfahren, wie Tor auf Netzwerkebene schützt. +onboarding.tour-tor-privacy.button=Öffne Tor-Netzwerk + +onboarding.tour-tor-network=Tor-Netzwerk +onboarding.tour-tor-network.title=Bereise ein dezentrales Netzwerk. +onboarding.tour-tor-network.description=Der Tor Browser verbindet sich mit dem Tor-Netzwerk, das von tausenden Freiwilligen betrieben wird. Anders als bei einem VPN gibt es keinen zentralen Punkt, dem vertraut werden muss, um das Internet privat zu nutzen. +onboarding.tour-tor-network.description-para2=NEU: Tor-Netzwerkeinstellungen, einschließlich der Möglichkeit, Brücken anzufordern, bei denen Tor blockiert ist, findest du jetzt in den Einstellungen. +onboarding.tour-tor-network.action-button=Anpassen der Tor-Netzwerkeinstellungen +onboarding.tour-tor-network.button=Kanal-Ansicht öffnen + +onboarding.tour-tor-circuit-display=Kanal-Ansicht +onboarding.tour-tor-circuit-display.title=Zeige deinen Pfad +onboarding.tour-tor-circuit-display.description=Für jede Webseite wandern Anfragen und Antworten mehrfach verschlüsselt über drei Server (Relays) um die Welt. Keine Webseite weiß, woher die Verbindung ursprünglich kommt. Um eine Webseite über einen neuen Kanal erneut zu laden, öffne die Kanal-Ansicht und klicke "Neuer Kanal für diese Seite". +onboarding.tour-tor-circuit-display.button=Meinen Pfad sehen +onboarding.tour-tor-circuit-display.next-button=Gehe zu Sicherheit + +onboarding.tour-tor-security=Sicherheit +onboarding.tour-tor-security.title=Wähle deine Erfahrung +onboarding.tour-tor-security.description=Wir bieten zusätzliche Einstellungen, um die Sicherheit zu erhöhen. In den Sicherheitseinstellungen können verschiedene Objekte und Funktionen deaktiviert werden, welche die Sicherheit des Computers gefährden können. Klicken Sie, um zu erfahren, was die verschiedenen Optionen bewirken. +onboarding.tour-tor-security.description-suffix=Hinweis: Standardmäßig sind NoScript und HTTPS Everywhere nicht in der Symbolleiste enthalten, aber du kannst deine Symbolleiste anpassen, um sie hinzuzufügen. +onboarding.tour-tor-security-level.button=Siehe deine Sicherheitsstufe +onboarding.tour-tor-security-level.next-button=Gehe zu Erfahrungstipps + +onboarding.tour-tor-expect-differences=Erfahrungswerte +onboarding.tour-tor-expect-differences.title=Erwarten Sie einige Unterschiede. +onboarding.tour-tor-expect-differences.description=Mit all den Sicherheits- und Datenschutzfunktionen von Tor kann Ihre Erfahrung beim Surfen im Internet etwas anders sein. Die Dinge können etwas langsamer sein, und je nach Sicherheitsstufe funktionieren oder laden einige Elemente möglicherweise nicht. Möglicherweise werden Sie auch gebeten, zu beweisen, dass Sie ein Mensch und kein Roboter sind. +onboarding.tour-tor-expect-differences.button=Siehe FAQs +onboarding.tour-tor-expect-differences.next-button=Gehe zu Onion-Dienste + +onboarding.tour-tor-onion-services=Onion-Dienste +onboarding.tour-tor-onion-services.title=Seien Sie besonders geschützt. +onboarding.tour-tor-onion-services.description=Onion-Dienste sind Websites, die auf .onion enden, die Herausgebern und Besuchern zusätzlichen Schutz bieten, einschließlich zusätzlicher Schutzmaßnahmen gegen Zensur. Onion-Dienste ermöglichen es jedem, Inhalte und Dienste anonym bereitzustellen. Klicken Sie unten, um die DuckDuckGo Onion Website zu besuchen. +onboarding.tour-tor-onion-services.button=Eine Onion-Website besuchen +onboarding.tour-tor-onion-services.next-button=Fertig + +onboarding.overlay-icon-tooltip-updated2=Siehe Neuigkeiten\n\nin %S +onboarding.tour-tor-update.prefix-new=Neu +onboarding.tour-tor-update.prefix-updated=Aktualisiert + +onboarding.tour-tor-toolbar=Symbolleiste +onboarding.tour-tor-toolbar-update-9.0.title=Adieu Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=Wir möchten, dass deine Erfahrungen mit Tor vollständig in den Tor Browser integriert werden. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Deshalb kannst du jetzt, anstatt den Onion-Button zu benutzen, deinen Tor-Kanal über das [i] in der URL-Leiste sehen und eine neue Identität über den Button in der Symbolleiste oder das [≡] Menü anfordern. +onboarding.tour-tor-toolbar-update-9.0.button=Wie man eine neue Identität anfordert +onboarding.tour-tor-toolbar-update-9.0.next-button=Öffne Tor-Netzwerk + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Weiter +onboarding.tor-circuit-display.done=Fertig +onboarding.tor-circuit-display.one-of-three=1 von 3 +onboarding.tor-circuit-display.two-of-three=2 von 3 +onboarding.tor-circuit-display.three-of-three=3 von 3 + +onboarding.tor-circuit-display.intro.title=Wie funktionieren Kanäle? +onboarding.tor-circuit-display.intro.msg=Kanäle bestehen aus zufällig zugeordneten Relays, d.h. Server auf der ganzen Welt, die konfiguriert sind, um Torverkehr weiterzuleiten. Kanäle ermöglichen es Ihnen, privat zu surfen und sich mit Onion-Diensten zu verbinden.\n + +onboarding.tor-circuit-display.diagram.title=Kanal-Ansicht +onboarding.tor-circuit-display.diagram.msg=Dieses Diagramm zeigt die Relais, die den Kanal für diese Webseite bilden. Um zu verhindern, dass Aktivitäten zwischen verschiedenen Seiten verlinkt werden, nutzt Tor Browser für jede Webseite einen eigenen Kanal. + +onboarding.tor-circuit-display.new-circuit.title=Brauchen Sie einen neuen Kanal? +onboarding.tor-circuit-display.new-circuit.msg=Wenn Sie keine Verbindung zu der Website herstellen können, die Sie besuchen möchten, oder wenn sie nicht richtig geladen wird, können Sie diese Schaltfläche verwenden, um die Website über einen neuen Kanal zu laden. diff --git a/toolkit/torbutton/chrome/locale/de/network-settings.dtd b/toolkit/torbutton/chrome/locale/de/network-settings.dtd new file mode 100644 index 000000000000..427b444c9ae6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor-Netzwerkeinstellungen"> +<!ENTITY torsettings.wizard.title.default "Mit Tor verbinden"> +<!ENTITY torsettings.wizard.title.configure "Tor-Netzwerkeinstellungen"> +<!ENTITY torsettings.wizard.title.connecting "Eine Verbindung herstellen"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor-Browser-Sprache"> +<!ENTITY torlauncher.localePicker.prompt "Bitte eine Sprache auswählen."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klicken Sie auf "Verbinden", um eine Verbindung zu Tor herzustellen."> +<!ENTITY torSettings.configurePrompt "Klicken Sie auf "Konfigurieren", um die Netzwerkeinstellungen anzupassen, wenn Sie sich in einem Land befinden, das Tor blockiert (z.B. Ägypten, China, Türkei), oder wenn Sie sich von einem privaten Netzwerk aus verbinden, das einen Proxy benötigt."> +<!ENTITY torSettings.configure "Konfigurieren"> +<!ENTITY torSettings.connect "Verbinden"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Auf den Start von Tor wird gewartet …"> +<!ENTITY torsettings.restartTor "Tor neu starten"> +<!ENTITY torsettings.reconfigTor "Neu einstellen"> + +<!ENTITY torsettings.discardSettings.prompt "Sie haben Tor-Brücken konfiguriert oder lokale Proxyeinstellungen eingetragen.  Um eine direkte Verbindung zum Tor-Netzwerk herzustellen, müssen diese Einstellungen entfernt werden."> +<!ENTITY torsettings.discardSettings.proceed "Einstellungen entfernen und verbinden"> + +<!ENTITY torsettings.optional "Optional"> + +<!ENTITY torsettings.useProxy.checkbox "Ich benutze einen Proxy, um mich mit dem Internet zu verbinden"> +<!ENTITY torsettings.useProxy.type "Proxy-Typ"> +<!ENTITY torsettings.useProxy.type.placeholder "Proxy-Typ auswählen"> +<!ENTITY torsettings.useProxy.address "Adresse"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-Adresse oder Rechnername"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Benutzername"> +<!ENTITY torsettings.useProxy.password "Passwort"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Die Verbindung dieses Rechner geht durch eine Firewall, die nur bestimmte Anschlüsse zulässt"> +<!ENTITY torsettings.firewall.allowedPorts "Erlaubte Ports"> +<!ENTITY torsettings.useBridges.checkbox "Tor wird in meinem Land blockiert."> +<!ENTITY torsettings.useBridges.default "Bereitgestellte Brücke auswählen"> +<!ENTITY torsettings.useBridges.default.placeholder "Brücke auswählen"> +<!ENTITY torsettings.useBridges.bridgeDB "Brücke von torproject.org anfordern"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Geben Sie die Zeichen in dem Bild ein"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Neue Herausforderung bekommen"> +<!ENTITY torsettings.useBridges.captchaSubmit "Übermitteln"> +<!ENTITY torsettings.useBridges.custom "Biete mir eine Brücke an, die ich kenne"> +<!ENTITY torsettings.useBridges.label "Geben Sie Brückeninformationen aus einer vertrauenswürdigen Quelle ein."> +<!ENTITY torsettings.useBridges.placeholder "Tippen Sie Adresse:Port (eines pro Zeile)"> + +<!ENTITY torsettings.copyLog "Tor-Protokoll in die Zwischenablage kopieren"> + +<!ENTITY torsettings.proxyHelpTitle "Proxy-Hilfe"> +<!ENTITY torsettings.proxyHelp1 "Unter Umständen ist ein lokaler Proxy nötig, um sich von einem eingeschränkten Netzwerk eines Unternehmens, einer Schule oder Universität zu verbinden. Im Zweifelsfall kann die Einstellung in einem anderen Browser oder die System-Netzwerkeinstellung .verglichen werden."> + +<!ENTITY torsettings.bridgeHelpTitle "Hilfe zum Brückenrelais"> +<!ENTITY torsettings.bridgeHelp1 "Brücken sind nicht aufgelistete Vermittler, die es schwieriger machen, Verbindungen zum Tor-Netzwerk zu blockieren.  Jede Art von Brücke verwendet eine andere Methode, um Zensur zu vermeiden.  Die vom Typ obfs lassen Ihren Datenverkehr wie Zufallsrauschen aussehen, und die vom Typ meek lassen Ihren Datenverkehr aussehen, als ob Sie eine Verbindung zu diesem jeweiligen Dienst herstellen anstatt zu Tor."> +<!ENTITY torsettings.bridgeHelp2 "Aufgrund der Art, wie bestimmte Länder versuchen, Tor zu blockieren, funktionieren bestimmte Brücken in gewissen Ländern, nicht aber in anderen.  Wenn Sie sich nicht sicher sind, welche Brücken in Ihrem Land funktionieren, besuchen Sie torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Bitte warten Sie, während eine Verbindung zum Tor-Netzwerk hergestellt wird.  Das kann einige Minuten dauern."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Verbindung"> +<!ENTITY torPreferences.torSettings "Tor-Einstellungen"> +<!ENTITY torPreferences.torSettingsDescription "Der Tor Browser leitet deinen Datenverkehr über das Tor-Netzwerk, das von Tausenden von Freiwilligen auf der ganzen Welt betrieben wird." > +<!ENTITY torPreferences.learnMore "Mehr erfahren"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Tor-Netzwerk:"> +<!ENTITY torPreferences.statusTorConnected "Verbunden"> +<!ENTITY torPreferences.statusTorNotConnected "Nicht verbunden"> +<!ENTITY torPreferences.statusTorBlocked "Potenziell blockiert"> +<!ENTITY torPreferences.learnMore "Mehr erfahren"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Schnellstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart verbindet den Tor Browser automatisch mit dem Tor-Netzwerk, wenn er gestartet wird, basierend auf den zuletzt verwendeten Verbindungseinstellungen."> +<!ENTITY torPreferences.quickstartCheckbox "Immer automatisch verbinden"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Brücken"> +<!ENTITY torPreferences.bridgesDescription "Brücken helfen dir beim Zugriff auf das Tor-Netzwerk an Orten, an denen Tor blockiert ist. Je nachdem, wo du dich befindest, kann eine Brücke besser funktionieren als eine andere."> +<!ENTITY torPreferences.bridgeLocation "Dein Standort"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatisch"> +<!ENTITY torPreferences.bridgeLocationFrequent "Häufig ausgewählte Standorte"> +<!ENTITY torPreferences.bridgeLocationOther "Andere Standorte"> +<!ENTITY torPreferences.bridgeChooseForMe "Wähle eine Brücke für mich …"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Deine aktuellen Brücken"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Du kannst eine oder mehrere Brücken speichern und Tor wählt diejenige aus, die verwendet werden soll, wenn du dich verbindest. Tor wechselt bei Bedarf automatisch zu einer anderen Brücke."> +<!ENTITY torPreferences.bridgeId "#1 Brücke: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Entfernen"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Eingebaute Brücken deaktivieren"> +<!ENTITY torPreferences.bridgeShare "Teile diese Brücke, indem du den QR-Code zeigst oder ihre Adresse kopierst."> +<!ENTITY torPreferences.bridgeCopy "Kopiere die Brücken-Adresse"> +<!ENTITY torPreferences.copied "Kopiert!"> +<!ENTITY torPreferences.bridgeShowAll "Zeige alle Brücken"> +<!ENTITY torPreferences.bridgeRemoveAll "Entferne alle Brücken"> +<!ENTITY torPreferences.bridgeAdd "Eine neue Brücke hinzufügen"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Eine der eingebauten Brücken von Tor Browser auswählen "> +<!ENTITY torPreferences.bridgeSelectBuiltin "Eine bereitgestellte Brücke auswählen ..."> +<!ENTITY torPreferences.bridgeRequest "Brücke anfordern..."> +<!ENTITY torPreferences.bridgeEnterKnown "Eine bereits bekannte Brücken-Adresse auswählen"> +<!ENTITY torPreferences.bridgeAddManually "Brücke manuell hinzufügen …"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Fortgeschritten"> +<!ENTITY torPreferences.advancedDescription "Konfigurieren, wie Tor Browser sich mit dem Internet verbindet"> +<!ENTITY torPreferences.advancedButton "Einstellungen ..."> +<!ENTITY torPreferences.viewTorLogs "Tor-Logs ansehen"> +<!ENTITY torPreferences.viewLogs "Logs ansehen …"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Alle Brücken entfernen?"> +<!ENTITY torPreferences.removeBridgesWarning "Dieser Vorgang kann nicht rückgängig gemacht werden."> +<!ENTITY torPreferences.cancel "Abbrechen"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Den QR-Code scannen"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Bereitgestellte Brücken"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser enthält einige spezielle Arten von Brücken, die als "austauschbare Übertragungsarten" bekannt sind."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 ist eine Art von eingebauter Brücke, die deinen Tor-Verkehr zufällig aussehen lässt. Es ist auch weniger wahrscheinlich, dass sie blockiert werden als ihre Vorgänger, die obfs3-Brücken."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake ist eine integrierte Brücke, die die Zensur umgeht, indem sie deine Verbindung über Snowflake-Proxys weiterleitet, die von Freiwilligen betrieben werden."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure ist eine eingebaute Brücke, die es so aussehen lässt, als würdest du eine Microsoft-Webseite benutzen, anstatt Tor zu verwenden."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Brücke anfordern"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kontaktiere BridgeDB. Bitte warten."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Löse das CAPTCHA, um eine Brücke anzufordern."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Die Lösung ist nicht korrekt. Bitte versuchen Sie es erneut."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Brücke bereitstellen"> +<!ENTITY torPreferences.provideBridgeHeader "Brückeninformationen von einer vertrauenswürdigen Quelle eingeben"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Verbindungseinstellungen"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Konfigurieren, wie Tor Browser sich mit dem Internet verbindet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Kommagetrennte Werte"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Nicht verbunden"> +<!ENTITY torConnect.connectingConcise "Verbinde…"> +<!ENTITY torConnect.tryingAgain "Erneuter Versuch ..."> +<!ENTITY torConnect.noInternet "Tor Browser konnte das Internet nicht erreichen"> +<!ENTITY torConnect.noInternetDescription "Dies könnte durch ein Verbindungsproblem kommen statt durch eine mögliche Blockierung von Tor. Überprüfe deine Internetverbindung, Proxy- und Firewall-Einstellungen bevor du es erneut versuchst."> +<!ENTITY torConnect.couldNotConnect "Tor Browser konnte sich nicht mit Tor verbinden"> +<!ENTITY torConnect.assistDescriptionConfigure "Deine Verbindung konfigurieren"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Wenn Tor an deinem Standort blockiert ist, kann es helfen, eine Brücke zu benutzen. Der Verbindungsassistent kann eine für dich anhand deines Standorts auswählen, oder du kannst stattdessen manuell eine wählen."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Eine Brücke versuchen ..."> +<!ENTITY torConnect.tryingBridgeAgain "Noch ein weiterer Versuch ..."> +<!ENTITY torConnect.errorLocation "Tor Browser konnte dich nicht lokalisieren"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser muss deinen Standort kennen, um die richtige Brücke für dich zu wählen. Wenn du deinen Standort nicht teilen möchtest, wähle stattdessen eine manuell."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Sind diese Standorteinstellungen korrekt?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser konnte sich immer noch nicht mit Tor verbinden. Bitte überprüfe, ob deine Standorteinstellungen korrekt sind und versuche es erneut, oder stattdessen #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor-Browser kann sich immer noch nicht verbinden"> +<!ENTITY torConnect.finalErrorDescription "Trotz größtem Einsatz war der Verbindungsassistent nicht in der Lage, zu Tor zu verbinden. Versuche deine Verbindung zu überprüfen und manuell eine Brücke hinzuzufügen."> +<!ENTITY torConnect.breadcrumbAssist "Verbindungsassistent"> +<!ENTITY torConnect.breadcrumbLocation "Standorteinstellungen"> +<!ENTITY torConnect.breadcrumbTryBridge "Eine Brücke versuchen"> +<!ENTITY torConnect.automatic "Automatisch"> +<!ENTITY torConnect.selectCountryRegion "Land oder Region auswählen"> +<!ENTITY torConnect.frequentLocations "Häufig ausgewählte Standorte"> +<!ENTITY torConnect.otherLocations "Andere Standorte"> +<!ENTITY torConnect.restartTorBrowser "Tor Browser neu starten"> +<!ENTITY torConnect.configureConnection "Verbindung konfigurieren ..."> +<!ENTITY torConnect.viewLog "Logs ansehen …"> +<!ENTITY torConnect.tryAgain "Noch einmal versuchen"> +<!ENTITY torConnect.offline "Internet nicht erreichbar"> +<!ENTITY torConnect.connectMessage "Änderungen an den Tor-Einstellungen werden erst wirksam, wenn du dich verbindest"> +<!ENTITY torConnect.tryAgainMessage "Verbindung des Tor Browser mit dem Tor-Netzwerk ist fehlgeschlagen"> +<!ENTITY torConnect.yourLocation "Dein Standort"> +<!ENTITY torConnect.tryBridge "Eine Brücke versuchen"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatische Konfiguration fehlgeschlagen"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatische Konfiguration fehlgeschlagen"> +<!ENTITY torConnect.cannotDetermineCountry "Benutzerland kann nicht ermittelt werden"> +<!ENTITY torConnect.noSettingsForCountry "Keine Einstellungen für deinen Standort verfügbar"> diff --git a/toolkit/torbutton/chrome/locale/de/onboarding.properties b/toolkit/torbutton/chrome/locale/de/onboarding.properties new file mode 100644 index 000000000000..e7c8fc22e30b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Nutzen Sie %S das erste Mal?\nSchauen Sie sich diese kleine Einführung an. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S wurde überarbeitet.\nSchauen Sie sich an, was Sie damit machen können. +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Schließen +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Schließen +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Erledigt diff --git a/toolkit/torbutton/chrome/locale/de/torbutton.dtd b/toolkit/torbutton/chrome/locale/de/torbutton.dtd new file mode 100644 index 000000000000..f63392eb64f4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Neue Identität"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Neue Identität"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Neuer Tor-Kanal für diese Seite"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Neuer Tor-Kanal für diese Seite"> +<!ENTITY torbutton.context_menu.new_circuit_key "K"> +<!ENTITY torbutton.context_menu.networksettings "Tor-Netzwerk-Einstellungen …"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Auf Tor-Browser-Aktualisierungen prüfen …"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "A"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookie-Schutz …"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klicken, um Torbutton zu aktivieren"> +<!ENTITY torbutton.prefs.security_settings "Tor-Browser-Sicherheitseinstellungen"> +<!ENTITY torbutton.cookiedialog.title "Cookie-Schutz verwalten"> +<!ENTITY torbutton.cookiedialog.lockCol "Geschützt"> +<!ENTITY torbutton.cookiedialog.domainCol "Rechner"> +<!ENTITY torbutton.cookiedialog.nameCol "Name"> +<!ENTITY torbutton.cookiedialog.pathCol "Pfad"> +<!ENTITY torbutton.cookiedialog.protectCookie "Cookie schützen"> +<!ENTITY torbutton.cookiedialog.removeCookie "Cookie entfernen"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Cookie nicht schützen"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Alle außer den geschützten Cookies entfernen"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Neue Cookies schützen"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Neue Cookies nicht schützen"> +<!ENTITY torbutton.prefs.sec_caption "Sicherheitsstufe"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Mit dem Sicherheitsschieberegler kannst du bestimmte Browserfunktionen, die deinen Browser für mögliche Attacken anfälliger machen, deaktivieren."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Alle Tor-Browser- und Webseiten-Funktionen sind aktiviert."> +<!ENTITY torbutton.prefs.sec_safer_label "Sicherer"> +<!ENTITY torbutton.prefs.sec_safer_description "Deaktiviert Webseiten-Funktionen, die oft gefährlich sind. Sorgt dafür, dass manche Seiten nicht mehr so gut funktionieren"> +<!ENTITY torbutton.prefs.sec_safer_list_label "In der sicheren Einstellung:"> +<!ENTITY torbutton.prefs.sec_safest_label "Am sichersten"> +<!ENTITY torbutton.prefs.sec_safest_description "Erlaubt nur Webseiten-Funktionen, die für statische Seiten und Basisdienste benötigt werden. Diese Änderungen betreffen Bilder, Medien und Skripte."> +<!ENTITY torbutton.prefs.sec_safest_list_label "In der sichersten Einstellung:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Erfahre mehr"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript ist auf Nicht-HTTTPS-Sites deaktiviert."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript ist standardmäßig auf allen Seiten deaktiviert."> +<!ENTITY torbutton.prefs.sec_limit_typography "Einige Schriftarten und mathematische Symbole sind deaktiviert."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Einige Schriftarten, Symbole, mathematische Symbole und Bilder sind deaktiviert."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Ton und Bild (HTML5-Medien) und WebGL sind Click-to-Play."> +<!ENTITY torbutton.prefs.sec_custom_warning "Benutzerdefiniert"> +<!ENTITY torbutton.prefs.sec_overview "Deaktiviere bestimmte Webfunktionen, welche verwendet werden können, um deine Sicherheit und Anonymität anzugreifen."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Sicherheitsstufe: Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Sicherheitsstufe: Sicherer"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Sicherheitsstufe: Am sichersten"> +<!ENTITY torbutton.prefs.sec_custom_summary "Ihre benutzerdefinierten Browser-Einstellungen haben zu ungewöhnlichen Sicherheitseinstellungen geführt. Aus Gründen der Sicherheit und Privatsphäre empfehlen wir dir eine der vorgegebenen Sicherheitsstufen auszuwählen."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Standardeinstellungen wiederherstellen"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Erweiterte Sicherheitseinstellungen …"> +<!ENTITY torbutton.prefs.sec_change "Ändern..."> +<!ENTITY torbutton.circuit_display.title "Tor-Kanal"> +<!ENTITY torbutton.circuit_display.new_circuit "Neuer Kanal für diese Seite"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Aufforderung zur Onion-Dienst-Klienten-Authentifizierung"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Diesen Schlüssel merken"> diff --git a/toolkit/torbutton/chrome/locale/de/torbutton.properties b/toolkit/torbutton/chrome/locale/de/torbutton.properties new file mode 100644 index 000000000000..e7190172a3a4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP ist unbekannt +torbutton.circuit_display.onion_site = Onion-Seite +torbutton.circuit_display.this_browser = Dieser Browser +torbutton.circuit_display.relay = Verteiler +torbutton.circuit_display.tor_bridge = Brücke +torbutton.circuit_display.unknown_country = Unbekanntes Land +torbutton.circuit_display.guard = Wächter +torbutton.circuit_display.guard_note = Dein [Wächter] Knotenpunkt darf sich nicht ändern. +torbutton.circuit_display.learn_more = Erfahre mehr +torbutton.circuit_display.click_to_copy = Zum Kopieren klicken +torbutton.circuit_display.copied = Kopiert! +torbutton.content_sizer.margin_tooltip = Tor Browser fügt diese Begrenzung hinzu, um die Breite und Höhe deines Fensters weniger einzigartig zu machen. Dadurch wird es anderen erschwert, dich im Internet zu verfolgen. +extensions.torbutton@torproject.org.description = Torbutton gibt dir die Möglichkeit, Einstellungen von Tor zu verändern und schnell und einfach die Internetdaten zu löschen. +torbutton.popup.external.title = Einen externen Dateitypen herunterladen? +torbutton.popup.external.app = Tor-Browser kann diese Datei nicht anzeigen. Du musst es mit einer anderen Anwendung öffnen.\n\n +torbutton.popup.external.note = Einige Dateitypen können Anwendungen dazu führen, dass du dich mit dem Internet ohne Tor verbindest.\n\n +torbutton.popup.external.suggest = Um sicher zu sein, solltest du heruntergeladene Dateien nur öffnen, wenn du nicht mit dem Netz verbunden bist, oder du benutzt eine Live-CD wie z. B. Tails.\n +torbutton.popup.launch = Datei herunterladen +torbutton.popup.cancel = Abbrechen +torbutton.popup.dontask = Von jetzt an Dateien immer automatisch herunterladen +torbutton.popup.no_newnym = Torbutton kann dir keine neue Identität geben, da es keinen Zugriff auf den Tor-Steueranschluss hat.\n\nBenutzt du das Tor-Browser-Paket? +torbutton.security_settings.menu.title = Sicherheitseinstellungen +torbutton.title.prompt_torbrowser = Wichtige Torbutton-Information +torbutton.popup.prompt_torbrowser = Torbutton funktioniert jetzt anders als vorher: es kann nicht mehr abgeschaltet werden.\n\nWir haben diese Änderung vorgenommen, da es nicht sicher ist, Torbutton auch in einem Browser zu benutzen, der auch für den Betrieb ohne Tor gedacht ist. Es gab zu viele Fehler, die wir sonst nicht hätten beheben können.\n\nWenn du Firefox weiterhin normal benutzen möchtest, solltest du Torbutton deinstallieren, und das Tor-Browser-Paket herunterladen. Die Privat [...] +torbutton.popup.short_torbrowser = Wichtige Torbutton-Information!\n\nTorbutton ist jetzt immer aktiviert.\n\nBitte auf den Torbutton klicken, um mehr Informationen zu erhalten. + +torbutton.popup.confirm_plugins = Erweiterungen wie Flash können deine Privatsphäre und Anonymität schädigen.\n\nDu kannst auch das Tor-Netzwerk umgehen, und deinen derzeitigen Aufenthaltsort und deine IP-Adresse verraten.\n\nBist du sicher, dass du Erweiterungen aktivieren willst?\n\n +torbutton.popup.never_ask_again = Nicht mehr nachfragen +torbutton.popup.confirm_newnym = Tor-Browser wird alle Fenster und Reiter schließen. Alle Internetseitensitzungen gehen verloren.\n\nTor-Browser jetzt neu starten, um deine Identität zurückzusetzen?\n\n + +torbutton.maximize_warning = Die Maximierung des Tor-Browsers kann Webseiten die Bestimmung deiner Bildschirmgröße ermöglichen, um damit deine Spur zu verfolgen. Wir empfehlen dir, das Tor-Browser-Fenster in seiner ursprünglichen Standardgröße zu belassen. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Die Internetseite (%S) hat versucht, HTML5-Canvas-Bilddaten zu extrahieren, die verwendet werden können, um deinen Rechner eindeutig zu identifizieren. \n\nSoll Tor-Browser es dieser Internetseite erlauben, HTML5-Canvas-Bilddaten zu extrahieren? +canvas.notNow=Nicht jetzt +canvas.notNowAccessKey=j +canvas.allow=In der Zukunft erlauben +canvas.allowAccessKey=I +canvas.never=Niemals für diese Internetseite (empfohlen) +canvas.neverAccessKey=N + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S-Profilproblem +profileReadOnly=Es ist nicht möglich %S auf einem nur lesbaren Dateisystem zu starten. Bitte kopiere %S an einen anderen Ort bevor du es benutzt. +profileReadOnlyMac=Es ist nicht möglich %S auf einem nur lesbaren Dateisystem zu starten. Bitte %S auf deinen Schreibtisch oder den Anwendungsordner kopieren, bevor du es benutzt. +profileAccessDenied=%S hat keine Berechtigung um dieses Profil abzurufen. Bitte die Berechtigungen deines Dateisystems einstellen und es noch einmal probieren. +profileMigrationFailed=Übernahme des bestehenden %S Profils ist fehlgeschlagen.\nEs werden neue Einstellungen verwendet. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S Aktualisierung wird heruntergeladen + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Verbindung verschlüsselt (Onion-Dienst, %1$S, %2$S bit Schlüssel, %3$S) +pageInfo_OnionEncryption=Verbindung verschlüsselt (Onion-Dienst) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Mehr erfahren +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Netzwerk +onionServices.errorPage.onionSite=Onion-Seite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem beim Laden der Onion-Site. +onionServices.descNotFound.header=Onion-Site nicht gefunden +onionServices.descNotFound=Die wahrscheinlichste Ursache ist, dass die Onion-Site offline ist. Wende dich den Administrator der Onion-Site. +onionServices.descNotFound.longDescription=Details: %S — Der angeforderte Onion-Dienst-Deskriptor kann nicht auf dem Hashring gefunden werden und daher ist der Dienst für das Programm nicht erreichbar. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem beim Laden der Onion-Site. +onionServices.descInvalid.header=Onion-Site kann nicht erreicht werden +onionServices.descInvalid=Die Onion-Site ist aufgrund eines internen Fehlers unerreichbar. +onionServices.descInvalid.longDescription=Details: %S — Der angeforderte Onion-Dienst-Deskriptor kann nicht geparst werden oder die Signaturvalidierung ist fehlgeschlagen. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem beim Laden der Onion-Site. +onionServices.introFailed.header=Die Onion-Site hat die Verbindung unterbrochen +onionServices.introFailed=Die wahrscheinlichste Ursache ist, dass die Onion-Site offline ist. Wende dich den Administrator der Onion-Site. +onionServices.introFailed.longDescription=Der Einstieg ist fehlgeschlagen, d.h. der Deskriptor wurde gefunden, aber der Dienst ist nicht mehr mit dem Einstiegspunkt verbunden. Es ist wahrscheinlich, dass der Dienst seinen Deskriptor geändert hat oder dass er nicht läuft. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem beim Laden der Onion-Site. +onionServices.rendezvousFailed.header=Verbindung zu Onion-Site nicht möglich +onionServices.rendezvousFailed=Die Onion-Site ist beschäftigt oder das Tor-Netzwerk ist überlastet. Versuche es später noch einmal. +onionServices.rendezvousFailed.longDescription=Details: %S — Das Rendezvous des Programms mit dem Dienst ist fehlgeschlagen, was bedeutet, dass das Programm nicht in der Lage war, die Verbindung herzustellen. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Bestätigung erforderlich +onionServices.clientAuthMissing.header=Die Onion-Site erfordert Bestätigung +onionServices.clientAuthMissing=Für den Zugang zur Onion-Site ist ein Schlüssel erforderlich, aber es wurde kein Schlüssel zur Verfügung gestellt. +onionServices.clientAuthMissing.longDescription=Details: %S — Das Programm hat den angeforderten Onion-Dienst-Deskriptor heruntergeladen, konnte seinen Inhalt jedoch nicht entschlüsseln, da die Bestätigungsinformationen des Programms fehlen. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorisierung fehlgeschlagen +onionServices.clientAuthIncorrect.header=Onion-Site-Bestätigung fehlgeschlagen +onionServices.clientAuthIncorrect=Der angegebene Schlüssel ist falsch oder wurde widerrufen. Wende dich an den Administrator der Onionsite. +onionServices.clientAuthIncorrect.longDescription=Details: %S — Der Client konnte den angeforderten Onion-Dienst-Deskriptor herunterladen, aber er konnte seinen Inhalt nicht mit den bereitgestellten Programm-Bestätigungsinformationen entschlüsseln. Dies kann bedeuten, dass der Zugriff widerrufen wurde. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem beim Laden der Onion-Site. +onionServices.badAddress.header=Ungültige Onion-Site-Adresse +onionServices.badAddress=Die angegebene Adresse der Onion-Site ist ungültig. Bitte überprüfe, ob du sie korrekt eingegeben hast. +onionServices.badAddress.longDescription=Details: %S — Die angegebene .onion-Adresse ist ungültig. Dieser Fehler wird aus einem der folgenden Gründe zurückgegeben: Die Adress-Prüfsumme stimmt nicht überein, der öffentliche ed25519-Schlüssel ist ungültig oder die Kodierung ist ungültig. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem beim Laden der Onion-Site. +onionServices.introTimedOut.header=Onion-Site-Kanal-Erzeugung ist abgelaufen +onionServices.introTimedOut=Verbindung zur Onion-Site ist fehlgeschlagen, möglicherweise aufgrund einer schlechten Netzwerkverbindung. +onionServices.introTimedOut.longDescription=Details: %S — Die Verbindung zum angeforderten Onion-Dienst ist beim Versuch, den Rendezvous-Kanal aufzubauen, abgelaufen. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S bittet darum, dass du dich authentifizierst. +onionServices.authPrompt.keyPlaceholder=Gib deinen privaten Schlüssel für diesen Onion-Dienst ein. +onionServices.authPrompt.done=Fertig +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Bitte gib einen gültigen Schlüssel (52 base32-Zeichen oder 44 base64-Zeichen) ein. +onionServices.authPrompt.failedToSetKey=Das Konfigurieren von Tor mit deinem Schlüssel ist nicht möglich. +onionServices.authPreferences.header=Onion Dienste-Bestätigung +onionServices.authPreferences.overview=Einige Onion-Dienste verlangen, dass du dich mit einem Schlüssel (eine Art Passwort) identifizierst, bevor du auf sie zugreifen kannst. +onionServices.authPreferences.savedKeys=Gespeicherte Schlüssel … +onionServices.authPreferences.dialogTitle=Onion-Dienst-Schlüssel +onionServices.authPreferences.dialogIntro=Die Schlüssel für die folgenden Onion-Seiten sind auf deinem Computer gespeichert +onionServices.authPreferences.onionSite=Onion-Seite +onionServices.authPreferences.onionKey=Schlüssel +onionServices.authPreferences.remove=Entfernen +onionServices.authPreferences.removeAll=Alles entfernen +onionServices.authPreferences.failedToGetKeys=Abrufen der Schlüssel von Tor nicht möglich +onionServices.authPreferences.failedToRemoveKey=Schlüssel entfernen nicht möglich +onionServices.v2Deprecated.pageTitle=V2 Onion Site Abschaltwarnung +onionServices.v2Deprecated.header=Version 2 Onion Sites werden bald abgeschaltet +onionServices.v2Deprecated=Diese Onion-Site wird bald nicht mehr erreichbar sein. Bitte kontaktiere den Administrator der Seite und fordere ihn zur Aktualisierung auf. +onionServices.v2Deprecated.longDescription=Tor stellt die Unterstützung für Onion-Dienste der Version 2 ab Juli 2021 ein, und diese Onion-Seite wird nicht mehr unter dieser Adresse erreichbar sein. Wenn du der Administrator der Seite bist, aktualisiere bald auf einen Onion-Dienst der Version 3. +onionServices.v2Deprecated.tryAgain=Verstanden +onionServices.v2Deprecated.tooltip=Diese Onion-Site wird bald nicht mehr erreichbar sein + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Onions immer priorisieren +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Nicht jetzt +onionLocation.notNowAccessKey=n +onionLocation.description=Es gibt eine privatere und sicherere Version dieser Seite, die über das Tor-Netzwerk über Onion-Dienste verfügbar ist. Onion-Dienste helfen Website-Verlegern und ihren Besuchern, Überwachung und Zensur zu überwinden. +onionLocation.tryThis=Onion-Dienste ausprobieren +onionLocation.onionAvailable=.onion verfügbar +onionLocation.learnMore=Erfahre mehr ... +onionLocation.always=Immer +onionLocation.askEverytime=Jedes Mal nachfragen +onionLocation.prioritizeOnionsDescription=Priorisiere .onion-Sites, wenn sie bekannt sind. +onionLocation.onionServicesTitle=Onion-Dienste + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Eine Kryptowährungsadresse (%S) wurde von einer unsicheren Website kopiert. Sie könnte verändert worden sein. +cryptoSafetyPrompt.whatCanHeading=Was kannst du dagegen tun? +cryptoSafetyPrompt.whatCanBody=Du kannst versuchen, eine neue Verbindung mit einem neuen Kanal herzustellen, um eine sichere Verbindung herzustellen, oder das Risiko annehmen und diese Warnung ignorieren. +cryptoSafetyPrompt.learnMore=Mehr erfahren +cryptoSafetyPrompt.primaryAction=Tab mit einem neuen Kanal neu laden +cryptoSafetyPrompt.primaryActionAccessKey=E +cryptoSafetyPrompt.secondaryAction=Warnung ignorieren +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Vorsichtig fortfahren +rulesets.warningDescription=Das Hinzufügen neuer Quellen könnte es Angreifern erlauben, den Browser zu übernehmen. Fahre nur fort, wenn du weisst, was du tust. +rulesets.warningEnable=Warne mich, wenn ich versuche, auf diese Einstellungen zuzugreifen +rulesets.warningButton=Akzeptiere das Risiko und fahre fort +# Ruleset list +rulesets.rulesets=Regelsätze +rulesets.noRulesets=Keine Regelsätze gefunden +rulesets.noRulesetsDescr=Wenn du einen Regelsatz im Tor Browser speicherst, wird er hier angezeigt. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Zuletzt aktualisiert %S +rulesets.neverUpdated=Nie aktualisiert, oder letzte Aktualisierung fehlgeschlagen +rulesets.enabled=Aktiv +rulesets.disabled=Deaktiviert +# Ruleset details/edit ruleset +rulesets.edit=Ändern +rulesets.name=Name +rulesets.jwk=JWK +rulesets.pathPrefix=Pfad-Präfix +rulesets.scope=Umfang +rulesets.enable=Diesen Regelsatz aktivieren +rulesets.checkUpdates=Auf Aktualisierungen prüfen +rulesets.jwkPlaceholder=Der zum Signieren dieses Regelsatzes verwendete Schlüssel im JWK-Format (JSON Web Key) +rulesets.jwkInvalid=Der JWK konnte nicht geparst werden, oder es ist kein gültiger Schlüssel +rulesets.pathPrefixPlaceholder=URL-Präfix, das die für den Regelsatz benötigten Dateien enthält +rulesets.pathPrefixInvalid=Der Pfadpräfix ist keine gültige HTTP(S)-URL +rulesets.scopePlaceholder=Regulärer Ausdruck für den Anwendungsbereich der Regeln +rulesets.scopeInvalid=Der Bereich konnte nicht als regulärer Ausdruck geparst werden +rulesets.save=Speichern +rulesets.cancel=Abbrechen diff --git a/toolkit/torbutton/chrome/locale/de/torlauncher.properties b/toolkit/torbutton/chrome/locale/de/torlauncher.properties new file mode 100644 index 000000000000..46b823788642 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/de/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor-Starter + +torlauncher.tor_exited_during_startup=Tor wurde beim Starten unerwartet unterbrochen. Dies kann die Folge eines Fehlers in ihrer "torrc"-Datei, ein Fehler in Tor, einem anderen Programm in ihrem System oder fehlerhafte Hardware sein. Bis die Ursache beseitigt und Tor neu gestartet wurde, kann der Tor Browser nicht starten. +torlauncher.tor_exited=Tor wurde unerwartet beendet. Das kann an einem Fehler von Tor selbst, an einem anderen Programm auf ihrem System oder fehlerhaften Geräten liegen. Bis Sie Tor neu starten, kann der Tor-Browser keine Internetseiten mehr erreichen. Wenn das Problem bestehen bleibt, bitte eine Kopie des Tor-Protokolls an die Unterstützungsmannschaft senden. +torlauncher.tor_exited2=Das Neustarten von Tor wird die Reiter Ihres Browsers nicht schließen. +torlauncher.tor_controlconn_failed=Zum Tor-Kontrollanschluss konnte keine Verbindung hergestellt werden. +torlauncher.tor_failed_to_start=Der Start von Tor ist fehlgeschlagen. +torlauncher.tor_control_failed=Fehler, die Kontrolle über Tor zu übernehmen. +torlauncher.tor_bootstrap_failed=Tor konnte keine Verbindung zum Tor-Netzwerk herstellen. +torlauncher.tor_bootstrap_failed_details=%1$S gescheitert (%2$S). + +torlauncher.unable_to_start_tor=Tor kann nicht gestartet werden.\n\n%S +torlauncher.tor_missing=Die Tor-Programmdatei ist nicht vorhanden. +torlauncher.torrc_missing=Die torrc Datei fehlt und konnte nicht erstellt werden. +torlauncher.datadir_missing=Das Tor Dateiverzeichnis existiert nicht und konnte nicht erstellt werden. +torlauncher.onionauthdir_missing=Das Tor-Onion-Bestätigungsverzeichnis existiert nicht und konnte nicht erstellt werden. +torlauncher.password_hash_missing=Erhalt des Hash-Passwortes ist fehlgeschlagen. + +torlauncher.failed_to_get_settings=Die Tor-Einstellungen können nicht abgefragt werden.\n\n%S +torlauncher.failed_to_save_settings=Die Tor-Einstellungen können nicht gespeichert werden.\n\n%S +torlauncher.ensure_tor_is_running=Bitte stellen Sie sicher, dass Tor läuft. + +torlauncher.error_proxy_addr_missing=Um einen Proxy zu verwenden, müssen Sie sowohl eine IP-Adresse bzw. einen Hostnamen als auch eine Portnummer angeben. +torlauncher.error_proxy_type_missing=Sie müssen den Proxy-Typ auswählen. +torlauncher.error_bridges_missing=Sie müssen eine oder mehrere Brücken eingeben. +torlauncher.error_default_bridges_type_missing=Sie müssen eine Transporttyp für die bereitgestellten Brücken auswählen. +torlauncher.error_bridgedb_bridges_missing=Bitte eine Brücke anfordern. +torlauncher.error_bridge_bad_default_type=Es sind keine bereitgestellten Brücken verfügbar, die den Transporttyp %S haben. Bitte passen Sie Ihre Einstellungen an. + +torlauncher.bridge_suffix.meek-amazon=(funktioniert in China) +torlauncher.bridge_suffix.meek-azure=(funktioniert in China) + +torlauncher.request_a_bridge=Brücke anfordern... +torlauncher.request_a_new_bridge=Neue Brücke anfordern... +torlauncher.contacting_bridgedb=Kontaktiere BridgeDB. Bitte warten. +torlauncher.captcha_prompt=Löse das CAPTCHA, um eine Brücke anzufordern. +torlauncher.bad_captcha_solution=Die Lösung ist nicht korrekt. Bitte versuchen Sie es erneut. +torlauncher.unable_to_get_bridge=Nicht imstande eine Brücke von der BridgeDB zu erhalten.\n\n%S +torlauncher.no_meek=Der Browser ist nicht für meek eingestellt, was gebraucht wird um Brücken zu bekommen. +torlauncher.no_bridges_available=Zur Zeit sind keine Brücken verfügbar. Es tut uns Leid. + +torlauncher.connect=Verbinden +torlauncher.restart_tor=Tor neu starten +torlauncher.quit=Schließen +torlauncher.quit_win=Beenden +torlauncher.done=Fertig + +torlauncher.forAssistance=Falls Sie Hilfe benötigen, kontaktieren Sie %S +torlauncher.forAssistance2=Falls Sie Hilfe benötigen, kontaktieren Sie %S + +torlauncher.copiedNLogMessages=Kopie vollständig. %S Tor-Protokollnachrichten sind bereit, um in eine Textbearbeitung oder in eine E-Mail-Nachricht eingefügt zu werden. + +torlauncher.bootstrapStatus.starting=Startvorgang +torlauncher.bootstrapStatus.conn_pt=Verbinde mit Brücke +torlauncher.bootstrapStatus.conn_done_pt=Verbunden mit Brücke +torlauncher.bootstrapStatus.conn_proxy=Verbinde mit Proxy +torlauncher.bootstrapStatus.conn_done_proxy=Verbunden mit Proxy +torlauncher.bootstrapStatus.conn=Verbinde mit einem Tor-Relay +torlauncher.bootstrapStatus.conn_done=Verbunden mit einem Tor-Relay +torlauncher.bootstrapStatus.handshake=Verhandeln mit einem Tor-Relais +torlauncher.bootstrapStatus.handshake_done=Abgeschlossene Verhandlungen mit einem Tor-Relais +torlauncher.bootstrapStatus.onehop_create=Es wird eine verschlüsselte Verbindung zu einem Verzeichnis hergestellt +torlauncher.bootstrapStatus.requesting_status=Netzwerkstatus wird abgerufen +torlauncher.bootstrapStatus.loading_status=Netzwerkstatus wird geladen +torlauncher.bootstrapStatus.loading_keys=Autorisierungszertifikate werden geladen +torlauncher.bootstrapStatus.requesting_descriptors=Relay-Informationen werden angefordert +torlauncher.bootstrapStatus.loading_descriptors=Relay-Informationen werden geladen +torlauncher.bootstrapStatus.enough_dirinfo=Laden von Relay-Informationen wurde fertiggestellt +torlauncher.bootstrapStatus.ap_conn_pt=Kanäle herstellen: Verbindung zur Brücke +torlauncher.bootstrapStatus.ap_conn_done_pt=Kanäle herstellen: Verbunden mit der Brücke +torlauncher.bootstrapStatus.ap_conn_proxy=Kanäle herstellen: Verbinden mit Proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Kanäle herstellen: Verbunden mit Proxy +torlauncher.bootstrapStatus.ap_conn=Kanäle herstellen: Verbinden mit Tor-Relais +torlauncher.bootstrapStatus.ap_conn_done=Kanäle herstellen: Verbunden mit Tor-Relais +torlauncher.bootstrapStatus.ap_handshake=Kanäle herstellen: Verhandeln mit einem Tor-Relais +torlauncher.bootstrapStatus.ap_handshake_done=Kanäle herstellen: Abgeschlossene Verhandlungen mit einem Tor-Relais +torlauncher.bootstrapStatus.circuit_create=Kanäle herstellen: Aufbau eines Tor-Kanals +torlauncher.bootstrapStatus.done=Zum Tor-Netzwerk wurde verbunden! + +torlauncher.bootstrapWarning.done=abgeschlossen +torlauncher.bootstrapWarning.connectrefused=Verbindung verweigert +torlauncher.bootstrapWarning.misc=Verschiedenes +torlauncher.bootstrapWarning.resourcelimit=Unzureichende Ressourcen +torlauncher.bootstrapWarning.identity=Nichtübereinstimmung der Identitäten +torlauncher.bootstrapWarning.timeout=Verbindungszeitüberschreitung +torlauncher.bootstrapWarning.noroute=Kein Pfad zum Rechner +torlauncher.bootstrapWarning.ioerror=Lese-/Schreibfehler +torlauncher.bootstrapWarning.pt_missing=Pluggable Transport fehlt + +torlauncher.nsresult.NS_ERROR_NET_RESET=Die Verbindung zum Server ist verloren gegangen. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Konnte nicht mit dem Server verbinden. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Konnte nicht mit dem Proxy verbinden. + +torlauncher.copiedNLogMessagesShort=%S Logs kopiert diff --git a/toolkit/torbutton/chrome/locale/el/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/el/aboutDialog.dtd new file mode 100644 index 000000000000..f3aa6ab247b5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "Ο &brandShortName; αποτελεί έργο"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "του &vendorShortName;"> +<!ENTITY project.end ", μία μη κερδοσκοπική οργάνωση που υπερασπίζεται την ιδιωτικότητα και τις ελευθερίες σας στο διαδίκτυο."> + +<!ENTITY help.start "Θέλετε να μας βοηθήσετε;"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Κάντε δωρεά"> +<!ENTITY help.or "ή"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "λάβετε μέρος"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Έχετε απορίες;"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Βοηθήστε μας να επεκτείνουμε το δίκτυο Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Πληροφορίες Αδειοδότησης"> +<!ENTITY tor.TrademarkStatement "Το 'Tor' και το 'Onion Logo' αποτελούν σήματα κατατεθέντα του The Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/el/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/el/aboutTBUpdate.dtd new file mode 100644 index 000000000000..c0fbc82da1b8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Αρχείο αλλαγών του περιηγητή Tor"> +<!ENTITY aboutTBUpdate.updated "Ο περιηγητής Tor ενημερώθηκε."> +<!ENTITY aboutTBUpdate.linkPrefix "Για να δείτε το τι έχει αλλάξει σε αυτή την έκδοση, "> +<!ENTITY aboutTBUpdate.linkLabel "επισκεφθείτε την ιστοσελίδα μας"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Έκδοση"> +<!ENTITY aboutTBUpdate.releaseDate "Ημερομηνία έκδοσης"> +<!ENTITY aboutTBUpdate.releaseNotes "Σημειώσεις έκδοσης"> diff --git a/toolkit/torbutton/chrome/locale/el/aboutTor.dtd b/toolkit/torbutton/chrome/locale/el/aboutTor.dtd new file mode 100644 index 000000000000..0c6d3ca2fc63 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Σχετικά με το Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Προβολή αρχείου αλλαγών"> + +<!ENTITY aboutTor.ready.label "Εξερευνήστε. Ιδιωτικά."> +<!ENTITY aboutTor.ready2.label "Είστε έτοιμος για την πιο ιδιωτική εμπειρία περιήγησης."> +<!ENTITY aboutTor.failure.label "Κάτι πήγε στραβά!"> +<!ENTITY aboutTor.failure2.label "Το Tor δεν λειτουργεί σε αυτόν τον περιηγητή."> + +<!ENTITY aboutTor.search.label "Αναζήτηση με DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Έχετε ερωτήσεις?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Κοιτάξτε το εγχειρίδιο μας για τον Περιηγητή Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Εγχειρίδιο του Περιηγητή Tor"> + +<!ENTITY aboutTor.tor_mission.label "Το Tor Project είναι ένας μη-κερδοσκοπικός οργανισμός US 501(c)(3), που προωθεί τα ανθρώπινα δικαιώματα και τις ελευθερίες δημιουργώντας και παρέχοντας τεχνολογίες ανωνυμίας και ιδιωτικότητας ελεύθερου και ανοιχτου λογισμικού, υποστηρίζοντας την απροόσκοπτη διαθεσιμότητα και χρήση τους, και προωθώντας την επιστημονική και κοινή κατανόησή τους."> +<!ENTITY aboutTor.getInvolved.label "Βοηθήστε κι εσείς »"> + +<!ENTITY aboutTor.newsletter.tagline "Λάβετε τα τελευταία νέα του Tor κατευθείαν στα εισερχόμενα σας."> +<!ENTITY aboutTor.newsletter.link_text "Εγγραφτείτε για τα νέα του Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Το Tor είναι δωρεάν επειδή στηρίζεται σε δωρεές από άτομα σαν κι εσάς."> +<!ENTITY aboutTor.donationBanner.buttonA "Κάντε μια δωρεά τώρα"> + +<!ENTITY aboutTor.alpha.ready.label "Δοκιμάστε. Προσεκτικά."> +<!ENTITY aboutTor.alpha.ready2.label "Είστε έτοιμος να δοκιμάσετε την πιο ιδιωτική εμπειρία περιήγησης στον κόσμο."> +<!ENTITY aboutTor.alpha.bannerDescription "Ο Περιηγητής Tor Alpha είναι μια ασταθής έκδοση του Περιηγητή Tor που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε νέες δυνατότητες, να ελέγξετε την ποιότητά τους και να μοιραστείτε την άποψή σας πριν τις εντάξουμε στην κύρια έκδοση."> +<!ENTITY aboutTor.alpha.bannerLink "Αναφορά σφάλματος στο Tor Φόρουμ"> + +<!ENTITY aboutTor.nightly.ready.label "Ελέγξτε. Προσεκτικά."> +<!ENTITY aboutTor.nightly.ready2.label "Είστε έτοιμος να δοκιμάσετε την πιο ιδιωτική εμπειρία περιήγησης στον κόσμο."> +<!ENTITY aboutTor.nightly.bannerDescription "Ο Περιηγητής Tor Nightly είναι μία ασταθής έκδοση του Περιηγητή Tor που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε νέες δυνατότητες, να ελέγξετε την ποιότητά τους και να μοιραστείτε την άποψή σας μαζί μας πριν τις εντάξουμε στην κύρια έκδοση."> +<!ENTITY aboutTor.nightly.bannerLink "Αναφορά σφάλματος στο Tor Φόρουμ"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ΚΑΝΕ ΔΩΡΕΑ ΤΩΡΑ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Η Friends of Tor θα δωρίσει το ίδιο ποσό με τη δωρεά σας, μέχρι $100.000."> diff --git a/toolkit/torbutton/chrome/locale/el/brand.dtd b/toolkit/torbutton/chrome/locale/el/brand.dtd new file mode 100644 index 000000000000..76f1fc7b768d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Περιηγητής Tor"> +<!ENTITY brandShortName "Περιηγητής Tor"> +<!ENTITY brandFullName "Περιηγητής Tor"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "Το 'Tor' και το 'Onion Logo' είναι κατατεθέντα σήματα του Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Περιηγητής Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Κάντε κλικ για να φορτώσετε εγκατεστημένα πρόσθετα συστήματος"> +<!ENTITY plugins.installed.enable "Ενεργοποίηση πρόσθετων"> +<!ENTITY plugins.installed.disable "Απενεργοποίηση Πρόσθετων"> +<!ENTITY plugins.installed.disable.tip "Κάντε κλικ για να μην φορτωθούν τα πρόσθετα του συστήματος"> diff --git a/toolkit/torbutton/chrome/locale/el/brand.properties b/toolkit/torbutton/chrome/locale/el/brand.properties new file mode 100644 index 000000000000..3eee49b67a2f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Περιηγητής Tor +brandShortName=Περιηγητής Tor +brandFullName=Περιηγητής Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Περιηγητής Tor +vendorShortName=Περιηγητής Tor + +homePageSingleStartMain=Firefox Start, μια γρήγορη αρχική σελίδα με ενσωματωμένη αναζήτηση +homePageImport=Εισαγωγή της αρχικής σελίδας σας από το %S + +homePageMigrationPageTitle=Επιλογή Αρχική Σελίδας +homePageMigrationDescription=Παρακαλούμε επιλέξτε την αρχική σελίδα που επιθυμείτε να χρησιμοποιήσετε: + +syncBrandShortName=Συγχρονισμός diff --git a/toolkit/torbutton/chrome/locale/el/branding/brand.ftl b/toolkit/torbutton/chrome/locale/el/branding/brand.ftl new file mode 100644 index 000000000000..e9b171e9e829 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Περιηγητής Tor +-brand-short-name = Περιηγητής Tor +-brand-full-name = Περιηγητής Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Περιηγητής Tor +-vendor-short-name = Περιηγητής Tor +trademarkInfo = Το 'Tor' και το 'Onion Logo' είναι κατατεθέντα σήματα του Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/el/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/el/browserOnboarding.properties new file mode 100644 index 000000000000..edec01af75d7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Καλώς ήλθατε +onboarding.tour-tor-welcome.title=Είστε έτοιμος. +onboarding.tour-tor-welcome.description=Ο Περιηγητής Tor σας προσφέρει τις βέλτιστες δυνατές προδιαγραφές στην ιδιωτικότητα και στην ασφάλεια στο διαδίκτυο. Πλέον, σας παρέχεται προστασία απέναντι στην παρακολούθηση της δραστηριότητάς σας στο διαδίκτυο και στη λογοκρισία. Μία γρήγορη δοκιμή θα σας δείξει πώς. +onboarding.tour-tor-welcome.next-button=Ας ξεκινήσουμε με την Ιδιωτικότητα + +onboarding.tour-tor-privacy=Ιδιωτικότητα +onboarding.tour-tor-privacy.title=Ξεγελάστε τους ιχνηλάτες και κάθε αδιάκριτο. +onboarding.tour-tor-privacy.description=Ο Περιηγητής Tor απομονώνει τα cookies και διαγράφει το ιστορικό σας μόλις τον κλείσετε. Αυτές οι ρυθμίσεις που εξασφαλίζουν την ιδιωτικότητά σας και την ασφάλειά σας είναι ενσωματομένες στον περιηγητή. Συνεχίστε στο "Δίκτυο Tor" για να μάθετε πώς σας προστατεύουμε σε επίπεδο δικτύου. +onboarding.tour-tor-privacy.button=Συνέχεια στο Δίκτυο Tor + +onboarding.tour-tor-network=Δίκτυο Tor +onboarding.tour-tor-network.title=Ένα παράλληλο σύμπαν όπου τα πάντα είναι αποκεντρωμένα. +onboarding.tour-tor-network.description=Ο Περιηγητής Tor σας βοηθά να συνδεθείτε στο δίκτυο Tor, το οποίο βασίζεται σε χιλιάδες εθελοντές παγκοσμίως. Σε αντίθεση με τα γνωστά VPN, δεν υπάρχει κάποιο μοναδικό σημείο αποτυχίας ή κεντρική οντότητα που θα πρέπει να εμπιστευτείτε έτσι ώστε να μπορέσετε να απολαύσετε το διαδίκτυο ιδιωτικά. +onboarding.tour-tor-network.description-para2=ΝΕΟ: Ρυθμίσεις δικτύου Tor. Αν η σύνδεσή σας παρουσιάζει περιορισμούς, μπορείτε να ζητήσετε γέφυρες για να τους προσπεράσετε. Μπορείτε να τις βρείτε στις Προτιμήσεις. +onboarding.tour-tor-network.action-button=Προσαρμόστε τις ρυθμίσεις του δικτύου Tor +onboarding.tour-tor-network.button=Συνέχεια στα Κυκλώματα + +onboarding.tour-tor-circuit-display=Κυκλώματα +onboarding.tour-tor-circuit-display.title=Βρείτε τον δρόμο σας. +onboarding.tour-tor-circuit-display.description=Για κάθε ιστοσελίδα που επισκέπτεστε, δημιουργείται ένα νέο κύκλωμα τριών υπολογιστών-κόμβων του δικτύου μας από όλο τον κόσμο, μέσω της οποίας η δραστηριότητά σας κρυπτογραφείται σε ένα κύκλωμα τριών κόμβων του Tor παγκοσμίως. Μπορείτε να αιτηθείτε ένα κύκλωμα πατώντας "Νέο κύκλωμα για αυτήν τη σελίδα" στην Προεπισκόπηση Κυκλώματός. +onboarding.tour-tor-circuit-display.button=Προεπισκόπηση Κυκλώματος +onboarding.tour-tor-circuit-display.next-button=Συνέχεια στην Ασφάλεια + +onboarding.tour-tor-security=Ασφάλεια +onboarding.tour-tor-security.title=Διαλέξτε την εμπειρία σας. +onboarding.tour-tor-security.description=Αν θέλετε να ασφαλίσετε τις περιηγήσεις σας παραπάνω, σας προσφέρουμε επιπλέον ρυθμίσεις που θα σας το επιτρέψουν. Οι Ρυθμίσεις Ασφαλείας σας επιτρέπουν να μπλοκάρετε στοιχεία που θα μπορούσαν να χρησιμοποιηθούν για επιθέσεις στον υπολογιστή σας. Πατήστε το μοβ κουμπί κάτω δεξιά για να δείτε τι κάνουν οι διάφορες ρυθμίσεις αυτές. +onboarding.tour-tor-security.description-suffix=Σημείωση: Τυπικά, το NoScript και το HTTPS Everywhere δεν θα φανούν στη γραμμή εργαλείων, αλλά μπορείτε να τροποποιήσετε τη γραμμή εργαλείων σας για να τα προσθέσετε. +onboarding.tour-tor-security-level.button=Προβολή του επίπεδου ασφαλείας σας +onboarding.tour-tor-security-level.next-button=Συνέχεια στην Εμπειρία + +onboarding.tour-tor-expect-differences=Εμπειρία +onboarding.tour-tor-expect-differences.title=Ίσως να προσέξεις κάποιες αλλαγές. +onboarding.tour-tor-expect-differences.description=Με όλη την ασφάλεια και την ιδιωτικότητα που σας παρέχουμε, ο τρόπος με τον οποίο περιηγείστε στο διαδίκτυο ενδέχεται να αλλάξει λίγο. Κάποια πράγματα θα γίνουν λίγο πιο αργά και, ανάλογα με το επίπεδο ασφάλειας, κάποια στοιχεία μπορεί να μην λειτουργούν σωστά ή να μην φορτώνουν. Επίσης, μπορεί να ερωτηθείτε αν είστε άνθρωπος (και όχι κάποιο ρομπότ) συχνότερα. +onboarding.tour-tor-expect-differences.button=Δείτε τις Συχνές Ερωτήσεις +onboarding.tour-tor-expect-differences.next-button=Συνέχεια στις Υπηρεσίες Onion + +onboarding.tour-tor-onion-services=Υπηρεσίες Onion +onboarding.tour-tor-onion-services.title=Προστατευτείτε ακόμα παραπάνω. +onboarding.tour-tor-onion-services.description=Οι υπηρεσίες Onion ("κρεμμύδι" στα Αγγλικά) είναι ιστοσελίδες που τελειώνουν σε .onion και παρέχουν επιπλέον προστασία στους κατόχους των ιστοσελιδών, καθώς και τους επισκέπτες. Αυτό συμπεριλαμβάνει επιπλέον μέτρα ασφάλειας που έχουν ως σκοπό την προσπέραση της λογοκρισίας. Οι υπηρεσίες Onion επιτρέπουν στον καθένα να προσφέρει ψηφιακό περιεχόμενο και υπηρεσίες ανώνυμα. Επιλέξτε κάτω για να επισκεφτείτε την υπηρεσία Onion του DuckDuckGo. +onboarding.tour-tor-onion-services.button=Επισκεφτείτε ένα Onion +onboarding.tour-tor-onion-services.next-button=Τέλος + +onboarding.overlay-icon-tooltip-updated2=Δείτε τι καινούργιο υπάρχει\nστο %S +onboarding.tour-tor-update.prefix-new=Νέο +onboarding.tour-tor-update.prefix-updated=Αναβαθμίστηκε + +onboarding.tour-tor-toolbar=Γραμμή εργαλείων +onboarding.tour-tor-toolbar-update-9.0.title=Αντίο Κουμπί Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Θέλουμε η εμπειρία σας από τη χρήση του Tor να είναι πλήρως ενσωματωμένη στο πρόγραμμα περιήγησης Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Γι αυτό τώρα, αντί να χρησιμοποιείτε το κουμπί onion, μπορείτε να δείτε το Tor Circuit σας μέσω του [i] στη γραμμή διευθύνσεων URL και να ζητήσετε μια νέα ταυτότητα χρησιμοποιώντας το κουμπί της γραμμής εργαλείων ή το μενού [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Πως να Αιτηθείτε Νέα Ταυτότητα +onboarding.tour-tor-toolbar-update-9.0.next-button=Πηγαίντε στο Δίκτυο Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Επόμενο +onboarding.tor-circuit-display.done=Τέλος +onboarding.tor-circuit-display.one-of-three=1 από 3 +onboarding.tor-circuit-display.two-of-three=2 από 3 +onboarding.tor-circuit-display.three-of-three=3 από 3 + +onboarding.tor-circuit-display.intro.title=Πώς λειτουργεί ένα κύκλωμα; +onboarding.tor-circuit-display.intro.msg=Τα κυκλώματα δημιουργούνται από αναμεταδότες που ορίζονται τυχαία. Αυτοί είναι υπολογιστές σε όλο τον κόσμο ρυθμισμένοι να προωθούν την κίνηση του Tor. Τα κυκλώματα σάς επιτρέπουν να περιηγηθείτε με ιδιωτικότητα και να συνδεθείτε σε υπηρεσίες onion. + +onboarding.tor-circuit-display.diagram.title=Προεπισκόπηση κυκλώματος +onboarding.tor-circuit-display.diagram.msg=Αυτό το διάγραμμα δείχνει τους αναμεταδότες που αποτελούν το κύκλωμα για αυτήν την ιστοσελίδα. Για να αποφευχθεί η σύνδεση της δραστηριότητάς σας από σελίδα σε σελίδα, κάθε ιστοσελίδα παίρνει διαφορετικό κύκλωμα. + +onboarding.tor-circuit-display.new-circuit.title=Χρειάζεστε καινούριο κύκλωμα; +onboarding.tor-circuit-display.new-circuit.msg=Αν δεν μπορείτε να συνδεθείτε στην ιστοσελίδα που προσπαθείτε να ανοίξετε ή αν δεν φορτώνει σωστά, τότε μπορείτε να χρησιμοποιήσετε αυτό το κουμπί για να προσπαθήσετε πάλι με ένα νέο κύκλωμα. diff --git a/toolkit/torbutton/chrome/locale/el/network-settings.dtd b/toolkit/torbutton/chrome/locale/el/network-settings.dtd new file mode 100644 index 000000000000..4e291a859aae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Ρυθμίσεις Δικτύου Tor"> +<!ENTITY torsettings.wizard.title.default "Σύνδεση στο Tor"> +<!ENTITY torsettings.wizard.title.configure "Ρυθμίσεις Δικτύου Tor"> +<!ENTITY torsettings.wizard.title.connecting "Γίνεται σύνδεση"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Γλώσσα Περιηγητή Tor"> +<!ENTITY torlauncher.localePicker.prompt "Παρακαλούμε επιλέξτε μία γλώσσα."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Κάντε κλικ στο κουμπί "Σύνδεση" για να συνδεθείτε στο Tor."> +<!ENTITY torSettings.configurePrompt "Κάντε κλικ στις "Ρυθμίσεις" για να προσαρμόσετε τις ρυθμίσεις δικτύου αν βρίσκεστε σε χώρα που λογοκρίνει το Tor (π.χ. η Αίγυπτος, η Κίνα, η Τουρκία) ή αν συνδέεστε από ένα περιορισμένο δίκτυο που απαιτεί διακομιστή μεσολάβησης."> +<!ENTITY torSettings.configure "Ρυθμίσεις"> +<!ENTITY torSettings.connect "Σύνδεση"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Αναμονή έναρξης του Tor... "> +<!ENTITY torsettings.restartTor "Eπανεκκίνηση Tor"> +<!ENTITY torsettings.reconfigTor "Αναδιαμόρφωση"> + +<!ENTITY torsettings.discardSettings.prompt "Έχετε ρυθμίσει γέφυρες Tor ή/και διακομιστές μεσολάβησης.  Αν θέλετε να συνδεθείτε στο δίκτυο Tor απευθείας, θα πρέπει πρώτα να αφαιρεθούν οι ρυθμίσεις αυτές."> +<!ENTITY torsettings.discardSettings.proceed "Αφαίρεση ρυθμίσεων και σύνδεση"> + +<!ENTITY torsettings.optional "Προαιρετικό"> + +<!ENTITY torsettings.useProxy.checkbox "Χρήση διακομιστή μεσολάβησης για σύνδεση στο διαδίκτυο."> +<!ENTITY torsettings.useProxy.type "Τύπος διακομιστή μεσολάβησης"> +<!ENTITY torsettings.useProxy.type.placeholder "επιλογή είδους διαμεσολαβητή"> +<!ENTITY torsettings.useProxy.address "Διεύθυνση"> +<!ENTITY torsettings.useProxy.address.placeholder "Διεύθυνση ΙΡ η όνομα υπολογιστή "> +<!ENTITY torsettings.useProxy.port "Θύρα"> +<!ENTITY torsettings.useProxy.username "Όνομα χρήστη"> +<!ENTITY torsettings.useProxy.password "Κωδικός πρόσβασης"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Ο υπολογιστής χρησιμοποιεί τείχος προστασίας και επιτρέπει μόνο συγκεκριμένες θύρες για σύνδεση"> +<!ENTITY torsettings.firewall.allowedPorts "Επιτρεπόμενες θύρες"> +<!ENTITY torsettings.useBridges.checkbox "Το Tor είναι αποκλεισμένο στη χώρα μου."> +<!ENTITY torsettings.useBridges.default "Θέλω μια ενσωματωμένη γέφυρα"> +<!ENTITY torsettings.useBridges.default.placeholder "επιλέξτε μία γέφυρα"> +<!ENTITY torsettings.useBridges.bridgeDB "Θέλω μία γέφυρα από το torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Πληκτρολογήστε τους χαρακτήρες της εικόνας"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Πάρτε μία νέα πρόκληση."> +<!ENTITY torsettings.useBridges.captchaSubmit "Υποβολή"> +<!ENTITY torsettings.useBridges.custom "Θέλω να εισάγω την διεύθυνση μίας γέφυρας που γνωρίζω"> +<!ENTITY torsettings.useBridges.label "Εισαγάγετε πληροφορίες γέφυρας από αξιόπιστη πηγή."> +<!ENTITY torsettings.useBridges.placeholder "Πληκτρολογήστε διεύθυνση:θύρα (μια σε κάθε σειρά)"> + +<!ENTITY torsettings.copyLog "Αντιγραφή αρχείου καταγραφής στο πρόχειρο"> + +<!ENTITY torsettings.proxyHelpTitle "Βοήθεια διακομιστή μεσολάβησης"> +<!ENTITY torsettings.proxyHelp1 "Ο τοπικός διακομιστής μεσολάβησης μπορεί να χρειαστεί, όταν συνδέεστε από μία εταιρία, ένα σχολείο ή ένα δίκτυο πανεπιστημίου. Αν δεν είστε σίγουροι αν χρειάζεστε διακομιστή μεσολάβησης, ελέγξτε τις ρυθμίσεις ίντερνετ ενός άλλου περιηγητή ή τις ρυθμίσεις του δικτύου σας. "> + +<!ENTITY torsettings.bridgeHelpTitle "Βοήθεια με Αναμεταδότες Γέφυρες"> +<!ENTITY torsettings.bridgeHelp1 "Οι γέφυρες είναι μη καταχωρημένοι αναμεταδότες που κάνουν πιο δύσκολο τον αποκλεισμό της σύνδεσης στο δίκτυο Tor.  Κάθε τύπος γέφυρας χρησιμοποιεί διαφορετική μέθοδο για να αποφύγει τον αποκλεισμό.  Οι obfs κάνουν τις κινήσεις σας να μοιάζουν με τυχαίο θόρυβο και οι meek κάνουν τις συνδέσεις σας να μοιάζουν πως γίνονται μέσω της αντίστοιχης υπηρεσίας αντί του Tor."> +<!ENTITY torsettings.bridgeHelp2 "Λόγω του τρόπου που προσπαθούν κάποιες χώρες να αποκλείσουν το Tor, κάποιες γέφυρες λειτουργούν σε κάποιες χώρες, ενώ σε άλλες όχι.  Αν δεν είστε σίγουρος για το ποιές γέφυρες λειτουργούν στη χώρα σας, επισκεφτείτε το torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Παρακαλούμε περιμένετε καθώς δημιουργούμε σύνδεση στο δίκτυο Tor.  Μπορεί να διαρκέσει μερικά λεπτά."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Σύνδεση"> +<!ENTITY torPreferences.torSettings "Ρυθμίσεις Tor"> +<!ENTITY torPreferences.torSettingsDescription "Ο Περιηγητής Tor δρομολογεί την κίνηση δικτύου σας μέσα από το δίκτυο Tor, που λειτουργεί χάρη σε χιλιάδες εθελοντές σε όλο τον κόσμο." > +<!ENTITY torPreferences.learnMore "Μάθετε περισσότερα"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Διαδίκτυο:"> +<!ENTITY torPreferences.statusInternetTest "Δοκιμή"> +<!ENTITY torPreferences.statusInternetOnline "Συνδεδεμένο"> +<!ENTITY torPreferences.statusInternetOffline "Εκτός σύνδεσης"> +<!ENTITY torPreferences.statusTorLabel "Δίκτυο Tor:"> +<!ENTITY torPreferences.statusTorConnected "Είστε συνδεδεμένος/η"> +<!ENTITY torPreferences.statusTorNotConnected "Αποσυνδεδεμένο"> +<!ENTITY torPreferences.statusTorBlocked "Ενδεχομένως αποκλεισμένο"> +<!ENTITY torPreferences.learnMore "Μάθετε περισσότερα"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Γρήγορη Έναρξη"> +<!ENTITY torPreferences.quickstartDescriptionLong "Η Γρήγορη Έναρξη συνδέει αυτόματα τον Περιηγητή Tor με το δίκτυο Tor κατά την έναρξη, με τις πιο πρόσφατες ρυθμίσεις σύνδεσης που έχουμε χρησιμοποιήσει."> +<!ENTITY torPreferences.quickstartCheckbox "Να γίνεται πάντα σύνδεση αυτόματα"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Γέφυρες"> +<!ENTITY torPreferences.bridgesDescription "Οι γέφυρες σας βοηθούν να αποκτήσετε πρόσβαση στο δίκτυο Tor σε μέρη όπου αυτό λογοκρίνεται. Ανάλογα με την τοποθεσία σας, κάποιες γέφυρες ενδέχεται να δουλέψουν καλύτερα από άλλες."> +<!ENTITY torPreferences.bridgeLocation "Η τοποθεσία σας"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Αυτόματο"> +<!ENTITY torPreferences.bridgeLocationFrequent "Συχνά επιλεγμένα μέρη"> +<!ENTITY torPreferences.bridgeLocationOther "Άλλα μέρη"> +<!ENTITY torPreferences.bridgeChooseForMe "Διάλεξε μια γέφυρα για μένα..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Οι τρέχουσες γέφυρές σας"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Μπορείτε να αποθηκέυσετε μία ή περισσότερες γέφυρες, και το Tor θα επιλέξει ποιά από αυτές θα χρησιμοποιήσει κατά την σύνδεση στο δίκτυο. Εφόσον χρειαστεί, το Tor θα χρησιμοποιήσει κάποια άλλη από αυτές τις γέφυρες αυτόματα."> +<!ENTITY torPreferences.bridgeId "#1 γέφυρα: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Αφαίρεση"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Απενεργοποίηση ενσωματωμένων γεφυρών"> +<!ENTITY torPreferences.bridgeShare "Μπορείτε να μοιραστείτε την γέφυρα αυτή αντιγράφοντας την διεύθυνσή της ή μέσω του κωδικού QR:"> +<!ENTITY torPreferences.bridgeCopy "Αντιγραφή διεύθυνσης γέφυρας"> +<!ENTITY torPreferences.copied "Αντιγράφηκε!"> +<!ENTITY torPreferences.bridgeShowAll "Εμφάνιση όλων των γεφυρών"> +<!ENTITY torPreferences.bridgeRemoveAll "Αφαίρεση όλων των γεφυρών"> +<!ENTITY torPreferences.bridgeAdd "Προσθήκη νέας γέφυρας"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Επιλέξτε μία από τις ενσωματωμένες γέφυρες"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Επιλογή ενσωματωμένης γέφυρας..."> +<!ENTITY torPreferences.bridgeRequest "Ζητήστε μια γέφυρα..."> +<!ENTITY torPreferences.bridgeEnterKnown "Εισαγάγετε τη διεύθυνση γέφυρας που ήδη γνωρίζετε"> +<!ENTITY torPreferences.bridgeAddManually "Εισαγωγή διεύθυνσης γέφυρας..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Για προχωρημένους"> +<!ENTITY torPreferences.advancedDescription "Ελέγξτε πώς ο Περιηγητής Tor συνδέεται στο διαδίκτυο."> +<!ENTITY torPreferences.advancedButton "Ρυθμίσεις..."> +<!ENTITY torPreferences.viewTorLogs "Προβολή αρχείων καταγραφής του Tor"> +<!ENTITY torPreferences.viewLogs "Προβολή αρχείων καταγραφής..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Αφαίρεση όλων των γεφυρών;"> +<!ENTITY torPreferences.removeBridgesWarning "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."> +<!ENTITY torPreferences.cancel "Ακύρωση"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Σάρωση του κωδικού QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Ενσωματωμένες γέφυρες"> +<!ENTITY torPreferences.builtinBridgeDescription "Το Tor Browser περιλαμβάνει μερικούς ειδικούς τύπους γεφυρών γνωστούς ως “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "Το Obfs4 είναι ένας τύπος ενσωματωμένης γέφυρας που κάνει την κίνηση σας στο Tor φαίνεται τυχαία. Είναι επίσης λιγότερο πιθανό να μπλοκαριστούν από τους προκατόχους τους, γέφυρες obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Το Snowflake είναι μια ενσωματωμένη γέφυρα που νικά τη λογοκρισία δρομολογώντας τη σύνδεσή σας μέσω μεσολαβητών Snowflake, που τους τρέχουν εθελοντές."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "Το meek-azure είναι μια ενσωματωμένη γέφυρα που το κάνει να φαίνεται ότι χρησιμοποιείτε μια ιστοσελίδα της Microsoft αντί να χρησιμοποιείτε το Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Αίτηση γέφυρας"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Επικοινωνία με BridgeDB. Παρακαλούμε περιμένετε."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Λύστε το CAPTCHA για να αιτηθείτε γέφυρα."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Η επίλυση δεν είναι σωστή. Παρακαλούμε προσπαθήστε ξανά."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Παρέχετε μια γέφυρα"> +<!ENTITY torPreferences.provideBridgeHeader "Εισάγετε τις πληροφορίες της γέφυρας σας που έχετε λάβει από μια αξιόπιστη πηγή"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Ρυθμίσεις σύνδεσης"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Ρυθμίστε τον τρόπο σύνδεσης του Tor Browser στο διαδίκτυο"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Τιμές διαχωρισμένες με κόμμα"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Αρχεία καταγραφών Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Αποσυνδεδεμένο"> +<!ENTITY torConnect.connectingConcise "Γίνεται σύνδεση..."> +<!ENTITY torConnect.tryingAgain "Δοκιμή ξανά..."> +<!ENTITY torConnect.noInternet "Ο Περιηγητής Tor δεν έχει πρόσβαση στο διαδίκτυο"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Ο Περιηγητής Tor δεν μπορεί να συνδεθεί στο Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "ρύθμιση της σύνδεσής σας"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Εάν το Tor είναι αποκλεισμένο στην τοποθεσία σας, η δοκιμή μιας γέφυρας ίσως βοηθήσει. Η βοήθεια σύνδεσης μπορεί να επιλέξει για εσάς ή μπορείτε να το κάνετε #1 μόνοι σας."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Δοκιμή μιας γέφυρας..."> +<!ENTITY torConnect.tryingBridgeAgain "Δοκιμή ακόμη μία φορά..."> +<!ENTITY torConnect.errorLocation "Ο Περιηγητής Tor δεν μπόρεσε να σας εντοπίσει"> +<!ENTITY torConnect.errorLocationDescription "Ο Περιηγητής Tor πρέπει να γνωρίζει την τοποθεσία σας έτσι ώστε να μπορέσει να επιλέξει τη σωστή γέφυρα για εσάς. Αν προτιμάτε να μην κοινοποιήσετε την τοποθεσία σας, #1 χειροκίνητα."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Αυτές οι ρυθμίσεις τοποθεσίας είναι σωστές;"> +<!ENTITY torConnect.isLocationCorrectDescription "Ο Περιηγητής Tor συνεχίζει να μην μπορεί να συνδεθεί στο Tor. Ελέγξτε τις ρυθμίσεις τοποθεσίας σας και προσπαθήστε πάλι ή #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Βοήθεια σύνδεσης"> +<!ENTITY torConnect.breadcrumbLocation "Ρυθμίσεις τοποθεσίας"> +<!ENTITY torConnect.breadcrumbTryBridge "Δοκιμή γέφυρας"> +<!ENTITY torConnect.automatic "Αυτόματο"> +<!ENTITY torConnect.selectCountryRegion "Επιλογή χώρας ή εθνικότητας"> +<!ENTITY torConnect.frequentLocations "Συχνά επιλεγμένα μέρη"> +<!ENTITY torConnect.otherLocations "Άλλα μέρη"> +<!ENTITY torConnect.restartTorBrowser "Επανεκκίνηση του Περιηγητή Tor"> +<!ENTITY torConnect.configureConnection "Ρύθμιση σύνδεσης..."> +<!ENTITY torConnect.viewLog "Προβολή αρχείων καταγραφής..."> +<!ENTITY torConnect.tryAgain "Προσπάθησε ξανά"> +<!ENTITY torConnect.offline "Δεν υπάρχει πρόσβαση στο διαδίκτυο"> +<!ENTITY torConnect.connectMessage "Οι αλλαγές των ρυθμίσεων του Tor θα εφαρμοστούν όταν συνδεθείτε με το δίκτυο Tor."> +<!ENTITY torConnect.tryAgainMessage "Η σύνδεση του Tor Browser με το δίκτυο Tor απέτυχε."> +<!ENTITY torConnect.yourLocation "Η τοποθεσία σας"> +<!ENTITY torConnect.tryBridge "Δοκιμάστε μια γέφυρα"> +<!ENTITY torConnect.autoBootstrappingFailed "Η αυτόματη παραμετροποίηση απέτυχε"> +<!ENTITY torConnect.autoBootstrappingFailed "Η αυτόματη παραμετροποίηση απέτυχε"> +<!ENTITY torConnect.cannotDetermineCountry "Δεν είναι δυνατός ο προσδιορισμός της χώρας χρήστη"> +<!ENTITY torConnect.noSettingsForCountry "Δεν υπάρχουν διαθέσιμες ρυθμίσεις για την τοποθεσίας σας"> diff --git a/toolkit/torbutton/chrome/locale/el/onboarding.properties b/toolkit/torbutton/chrome/locale/el/onboarding.properties new file mode 100644 index 000000000000..a5f187c39118 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Νέος χρήστης του %S;\nΑς ξεκινήσουμε. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=Το %S είναι ολοκαίνουριο.\nΔείτε τι μπορείτε να κάνετε! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Κλείσιμο +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Απόρριψη +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Ολοκληρώθηκε diff --git a/toolkit/torbutton/chrome/locale/el/torbutton.dtd b/toolkit/torbutton/chrome/locale/el/torbutton.dtd new file mode 100644 index 000000000000..5685966aece6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Νέα Ταυτότητα"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Νέα ταυτότητα"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Νέο κύκλωμα Tor για αυτό τον ιστότοπο"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Νέο κύκλωμα Tor για αυτό τον ιστότοπο"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Ρυθμίσεις Δικτύου Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Έλεγχος για ενημέρωση του περιηγητή Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Προστασία από Cookies..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Κάντε κλικ για να εκκινήσετε το Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Ρυθμίσεις ασφαλείας του Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Διαχείριση Προστασίας Cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "Προστατευμένα"> +<!ENTITY torbutton.cookiedialog.domainCol "Οικοδεσπότης"> +<!ENTITY torbutton.cookiedialog.nameCol "Όνομα"> +<!ENTITY torbutton.cookiedialog.pathCol "Μονοπάτι"> +<!ENTITY torbutton.cookiedialog.protectCookie "Προστασία cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Αφαίρεση cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Άρση προστασίας cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Αφαίρεση όλων εκτός των προστατευμένων"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Προστασία νέων cookie"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Να Μη γίνεται Προστασία Νέων Cookie"> +<!ENTITY torbutton.prefs.sec_caption "Επίπεδο ασφάλειας"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Το Slider Ασφάλειας σας αφήνει να απενεργοποιήσετε ορισμένα χαρακτηριστικά του περιηγητή που μπορεί να τον κάνουν πιο ευάλωτο σε απόπειρες χακαρίσματος."> +<!ENTITY torbutton.prefs.sec_standard_label "Βασικό"> +<!ENTITY torbutton.prefs.sec_standard_description "Όλες οι λειτουργίες του περιηγητή Tor και των ιστοσελιδών είναι ενεργοποιημένες."> +<!ENTITY torbutton.prefs.sec_safer_label "Ασφαλέστερο"> +<!ENTITY torbutton.prefs.sec_safer_description "Ορισμένες λειτουργίες που είναι ενδεχομένως επικύνδυνες θα απενεργοποιηθούν. Αυτό ενδέχεται να προκαλέσει προβλήματα με μερικές ιστοσελίδες."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Στην ασφαλέστερη σύνδεση:"> +<!ENTITY torbutton.prefs.sec_safest_label "Ασφαλέστατο"> +<!ENTITY torbutton.prefs.sec_safest_description "Μόνο βασικές λειτουργίες θα παραμείνουν ενεργοποιημένες, κυρίως αυτές που απαιτούνται για την προβολή ιστοσελιδών με σταθερό περιεχόμενο και την χρήση βασικών υπηρεσιών. Αυτή η ρύθμιση επηρεάζει εικόνες, πολυμέσα, καθώς και δέσμες ενεργειών ("scripts")."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Στην πιο ασφαλή ρύθμιση:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Μάθετε περισσότερα"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "Η JavaScript είναι απενεργοποιημένη σε ιστότοπους που δεν έχουν HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "Η JavaScript είναι απενεργοποιημένη σε όλους τους ιστότοπους από προεπιλογή."> +<!ENTITY torbutton.prefs.sec_limit_typography "Μερικές γραμματοσειρές και μαθηματικά σύμβολα δεν θα φαίνονται."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Μερικές γραμματοσειρές, εικονίδια, μαθηματικά σύμβολα και εικόνες δεν θα φαίνονται."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Η αναπαραγωγή ήχου και βίντεο (πολυμέσα HTML5) και WebGL απαιτεί ένα κλικ από την μεριά σας."> +<!ENTITY torbutton.prefs.sec_custom_warning "Προσαρμογή "> +<!ENTITY torbutton.prefs.sec_overview "Απενεργοποιήστε ορισμένα χαρακτηριστικά του διαδικτύου που μπορεί να χρησιμοποιηθούν για επιθέσεις εναντίον της ασφάλειας και της ανωνυμίας σας."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Επίπεδο ασφαλείας: Βασικό"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Επίπεδο ασφαλείας: Ασφαλέστερο"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Επίπεδο ασφαλείας: Ασφαλέστατο"> +<!ENTITY torbutton.prefs.sec_custom_summary "Οι προσαρμοσμένες προτιμήσεις του περιηγητή σας έχουν οδηγήσει σε ασυνήθιστες ρυθμίσεις ασφάλειας. Για λόγους ασφαλείας και ιδιωτικότητας, προτείνουμε να επιλέξετε ένα από τα προεπιλεγμένα επίπεδα ασφάλειας."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Επαναφορά προεπιλογών"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Ρυθμίσεις ασφαλείας για προχωρημένους..."> +<!ENTITY torbutton.prefs.sec_change "Αλλαγή..."> +<!ENTITY torbutton.circuit_display.title "Κύκλωμα Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Νέο κύκλωμα για αυτή την ιστοσελίδα"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Εκτέλεση εντολής αυθεντικοποίησης client υπηρεσίας onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Απομνημόνευση κλειδιού"> diff --git a/toolkit/torbutton/chrome/locale/el/torbutton.properties b/toolkit/torbutton/chrome/locale/el/torbutton.properties new file mode 100644 index 000000000000..9bbdfdc3c391 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Διαδίκτυο +torbutton.circuit_display.ip_unknown = Άγνωστη διεύθυνση IP +torbutton.circuit_display.onion_site = Ιστότοπος Onion +torbutton.circuit_display.this_browser = Αυτός ο περιηγητής +torbutton.circuit_display.relay = Αναμεταδότης +torbutton.circuit_display.tor_bridge = Γέφυρα +torbutton.circuit_display.unknown_country = Άγνωστη χώρα +torbutton.circuit_display.guard = Φύλακας +torbutton.circuit_display.guard_note = Ο κόμβος [Φύλακας] σας ίσως να μην αλλάξει. +torbutton.circuit_display.learn_more = Μάθετε περισσότερα +torbutton.circuit_display.click_to_copy = Κλικ για αντιγραφή +torbutton.circuit_display.copied = Αντιγράφηκε! +torbutton.content_sizer.margin_tooltip = Ο Tor Browser προσθέτει αυτό το περιθώριο για να κάνει το πλάτος και το ύψος του παραθύρου σου λιγότερο ξεχωριστό, οπότε μειώνεται η ικανότητα των άλλων να σε παρακολουθούν διαδικτυακά. +extensions.torbutton@torproject.org.description = Το Torbutton προσφέρει ένα κουμπί για τη ρύθμιση των παραμέτρων του Tor και για τη γρήγορη και εύκολη εκκαθάριση των προσωπικών στοιχείων περιήγησης. +torbutton.popup.external.title = Λήψη ένος εξωτερικού τύπου αρχείου; +torbutton.popup.external.app = Ο Περιηγητής Tor δεν μπορεί να εμφανίσει αυτό το αρχείο. Θα χρειαστεί να το ανοίξετε με κάποια άλλη εφαρμογή.\n\n +torbutton.popup.external.note = Ορισμένοι τύποι αρχείων μπορούν να προκαλέσουν εφαρμογές να συνδεθούν στο διαδίκτυο, χωρίς την προστασία του Tor.\n\n +torbutton.popup.external.suggest = Για να είστε ασφαλείς, θα πρέπει να ανοίγετε τα ληφθέντα αρχεία μόνο ενώ βρίσκεστε εκτός σύνδεσης, ή να χρησιμοποιήσετε ένα Tor Live CD, όπως το Tails.\n +torbutton.popup.launch = Λήψη αρχείου +torbutton.popup.cancel = Ακύρωση +torbutton.popup.dontask = Αυτόματη λήψη αρχείων από τώρα και στο εξής +torbutton.popup.no_newnym = Το Torbutton δεν μπορεί να σας δώσει μια ασφαλή νέα ταυτότητα, διότι δεν έχει πρόσβαση στο Tor Control Port:\n\nΧρησιμοποιείτε το Πακέτο του Tor Browser; +torbutton.security_settings.menu.title = Ρυθμίσεις ασφαλείας +torbutton.title.prompt_torbrowser = Σημαντικές πληροφορίες για το Torbutton +torbutton.popup.prompt_torbrowser = Πλέον, Το Torbutton λειτουργεί διαφορετικά: δεν μπορείτε πλέον να το απενεργοποιήσετε\n\nΑυτό το κάναμε επειδή η χρήση του Torbutton σε έναν περιηγητή ο οποίος χρησιμοποιείται και για την περιήγηση στο διαδίκτυο χωρίς το Tor δεν είναι ασφαλής. Παρουσιάστηκαν διάφορα σφάλματα τα οποία δεν μπορούσαμε να διορθώσουμε.\n\nΑν θέλετε να εξακολουθήσετε να χρησιμοποιείτε το Firefox κανονικά, θα πρέπει να εγκαταστήσετε το Torbutton και να εγκαταστήσετε το πακέτο [...] +torbutton.popup.short_torbrowser = Σημαντική Πληροφορία για το Torbutton!\n\nΤο Torbutton είναι τώρα ενεργοποιημένο συνεχώς.\n\nΓια περισσότερες πληροφορίες, κάντε κλικ στο Torbutton. + +torbutton.popup.confirm_plugins = Πρόσθετα όπως το Flash ενδέχεται να βάλουν την ιδιωτικότητα και την ανωνυμία σας σε κίνδυνο. \n\nΜπορούν επίσης να παρακάμψουν το Tor για να αποκαλύψουν την τρέχουσα τοποθεσία και τη διεύθυνση IP σας.\n\nΕίστε σίγουρος πως θέλετε να ενεργοποιηθούν αυτά τα πρόσθετα;\n\n +torbutton.popup.never_ask_again = Να μην ερωτηθώ ξανά +torbutton.popup.confirm_newnym = Ο Περιηγητής Tor θα κλείσει όλα τα παράθυρα και τις καρτέλες. Όλες οι συνεδρίες ιστοσελιδών θα χαθούν.\n\nΕπανεκκίνηση του Tor Browser για επαναφορά της ταυτότητάς σου;\n\n + +torbutton.maximize_warning = Η μεγιστοποίηση του Περιηγητή Tor μπορεί να επιτρέψει σε ιστοσελίδες να ανιχνεύσουν τις διαστάσεις της οθόνης σου, κάτι που μπορεί να χρησιμοποιηθεί για σκοπούς παρακολούθησης. Προτείνουμε να αφήσεις τα παράθυρα του Περιηγητή Tor στο προκαθορισμένο τους μέγεθος. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Η ιστοσελίδα (%S) προσπάθησε να εξάγει πληροφορίες HTML5, οι οποίες μπορούν να χρησιμοποιηθούν ώστε να αναγνωρισθεί η ταυτότητα του ηλεκτρονικού σας υπολογιστή.\n\nΝα επιτραπεί στην ιστοσελίδα η εξαγωγή πληροφοριών HTML5; +canvas.notNow=Όχι τώρα +canvas.notNowAccessKey=Ν +canvas.allow=Να επιτρέπεται στο μέλλον +canvas.allowAccessKey=Α +canvas.never=Ποτέ για αυτόν τον ιστότοπο (συνιστάται) +canvas.neverAccessKey=ε + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Πρόβλημα Προφίλ %S +profileReadOnly=Δεν μπορείτε να εκτελέσετε το %S από ένα σύστημα αρχείων, από το οποίο δεν είναι δυνατή η εγγραφή αρχείων. Παρακαλώ αντιγράψτε το %S σε μία άλλη τοποθεσία, πριν προσπαθήσετε να το χρησιμοποιήσετε. +profileReadOnlyMac=Δεν μπορείτε να εκτελέσετε το %S από ένα σύστημα αρχείων μόνο με ανάγνωση. Παρακαλώ αντιγράψτε το %S στην επιφάνεια εργασίας σας ή στις εφαρμογές πριν προσπαθήσετε να το χρησιμοποιήσετε. +profileAccessDenied=Το %S δεν έχει άδεια να προσπελάσει το προφίλ. Παρακαλώ ρυθμίστε τις άδειες του συστήματος αρχείων σας και προσπαθήστε ξανά. +profileMigrationFailed=Η μεταφορά του υπάρχοντος προφίλ %S απέτυχε.\nΘα χρησιμοποιηθούν νέες ρυθμίσεις. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Λήψη %S ενημερώσεων + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Κρυπτογραφημένη σύνδεση (υπηρεσία Onion, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=Κρυπτογραφημένη σύνδεση (υπηρεσία Onion) +pageInfo_OnionName=Όνομα Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Μάθετε περισσότερα +onionServices.errorPage.browser=Περιηγητής +onionServices.errorPage.network=Δίκτυο +onionServices.errorPage.onionSite=Σελίδα Onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.descNotFound.header=Η σελίδα Onion δεν βρέθηκε +onionServices.descNotFound=Η πιο πιθανή αιτία είναι ότι η σελίδα onion είναι εκτός σύνδεσης. Επικοινωνήστε με τον διαχειριστή της σελίδας. +onionServices.descNotFound.longDescription=Λεπτομέρειες:% S - Ο ζητούμενος περιγραφέας υπηρεσίας onion δεν μπορεί να βρεθεί στον κατακερματισμό και επομένως η υπηρεσία δεν είναι προσβάσιμη από τον πελάτη. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.descInvalid.header=Η σελίδα Onion δεν είναι προσπελάσιμη +onionServices.descInvalid=Η σελίδα Onion δεν είναι προσπελάσιμη λόγω εσωτερικού σφάλματος. +onionServices.descInvalid.longDescription=Λεπτομέρειες:% S - Δεν είναι δυνατή η ανάλυση του ζητούμενου περιγραφέα υπηρεσίας κρεμμυδιού ή η επικύρωση υπογραφής απέτυχε. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.introFailed.header=Η σελίδα Onion αποσυνδέθηκε +onionServices.introFailed=Η πιο πιθανή αιτία είναι ότι η σελίδα Onion βρίσκεται εκτός σύνδεσης. Επικοινωνήστε με τον διαχειριστή της σελίδας. +onionServices.introFailed.longDescription=Λεπτομέρειες: %S - Η εισαγωγή απέτυχε, πράγμα που σημαίνει ότι βρέθηκε ο περιγραφέας, αλλά η υπηρεσία δεν είναι πλέον συνδεδεμένη με το σημείο εισαγωγής. Είναι πιθανό ότι η υπηρεσία έχει αλλάξει την περιγραφή της ή ότι δεν εκτελείται. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.rendezvousFailed.header=Αδυναμία σύνδεσης στη σελίδα Onion +onionServices.rendezvousFailed=Η σελίδα onion είναι απασχολημένη ή το δίκτυο Tor είναι υπερφορτωμένο. Προσπαθήστε ξανά αργότερα. +onionServices.rendezvousFailed.longDescription=Λεπτομέρειες:% S - Ο πελάτης απέτυχε να συναντηθεί με την υπηρεσία, πράγμα που σημαίνει ότι ο πελάτης δεν μπόρεσε να ολοκληρώσει τη σύνδεση. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Απαιτείται εξουσιοδότηση +onionServices.clientAuthMissing.header=Η σελίδα onion απαιτεί εξουσιοδότηση +onionServices.clientAuthMissing=Η πρόσβαση στη σελίδα onion χρειάζεται ένα κλειδί, αλλά δεν δόθηκε κανένα. +onionServices.clientAuthMissing.longDescription=Details: %S - Ο πελάτης έκανε λήψη του ζητούμενου περιγραφέα υπηρεσίας κρεμμυδιού, αλλά δεν μπόρεσε να αποκρυπτογραφήσει το περιεχόμενό του επειδή λείπουν οι πληροφορίες εξουσιοδότησης πελάτη. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Αποτυχία εξουσιοδότησης +onionServices.clientAuthIncorrect.header=Αποτυχία εξουσιοδότησης σελίδας onion +onionServices.clientAuthIncorrect=Το κλειδί που δόθηκε δεν είναι σωστό ή έχει ανακληθεί. Επικοινωνήστε με τον διαχειριστή της σελίδας onion. +onionServices.clientAuthIncorrect.longDescription=Λεπτομέρειες: %S — Ο πελάτης μπόρεσε να κατεβάσει τον ζητούμενο περιγραφέα υπηρεσίας onion , αλλά δεν μπόρεσε να αποκρυπτογραφήσει το περιεχόμενό του χρησιμοποιώντας τις παρεχόμενες πληροφορίες εξουσιοδότησης πελάτη. Αυτό μπορεί να σημαίνει ότι η πρόσβαση έχει ανακληθεί. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.badAddress.header=Άκυρη διεύθυνση σελίδας onion +onionServices.badAddress=Η διεύθυνση της σελίδας onion που καταχωρήθηκε δεν είναι έγκυρη. Παρακαλώ ελέγξτε ότι την έχετε εισάγει σωστά. +onionServices.badAddress.longDescription=Λεπτομέρειες: %S — Η παρεχόμενη διεύθυνση .onion δεν είναι έγκυρη. Αυτό το σφάλμα εμφανίζεται για έναν από τους ακόλουθους λόγους: η διεύθυνση ελέγχου δεν ταιριάζει, το δημόσιο κλειδί ed25519 δεν είναι έγκυρο ή η κωδικοποίηση δεν είναι έγκυρη. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Σφάλμα φόρτωσης σελίδας Onion +onionServices.introTimedOut.header=Εληξε ο χρόνος Onionsite Circuit Creation +onionServices.introTimedOut=Αποτυχία σύνδεσης στη σελίδα onion, πιθανώς εξ' αιτίας κακής σύνδεσης στο δίκτυο. +onionServices.introTimedOut.longDescription=Λεπτομέριες: %S -Η σύνδεση με την ζητούμενη onion service έληξε ενώ προσπαθούσατε να δημιουργήσετε το ραντεβού. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=Αίτημα εξουσιοδότησης από %S. +onionServices.authPrompt.keyPlaceholder=Εισάγετε το ιδιωτικό κλειδί σας για αυτή την υπηρεσία onion +onionServices.authPrompt.done=Τέλος +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Παρακαλώ εισάγετε ένα έγκυρο κλειδί (52 χαρακτήρες base32 ή 44 χαρακτήρες base64) +onionServices.authPrompt.failedToSetKey=Αποτυχία παραμετροποίησης του Tor με το κλειδί σας +onionServices.authPreferences.header=Εξουσιοδότηση υπηρεσιών Onion +onionServices.authPreferences.overview=Κάποιες υπηρεσίες onion απαιτούν να ταυτοποιηθείτε με ένα κλειδί (ένα είδος κωδικού), πριν μπορέσετε να τις επισκεφθείτε. +onionServices.authPreferences.savedKeys=Αποθηκευμένα κλειδιά... +onionServices.authPreferences.dialogTitle=Κλειδιά υπηρεσιών Onion +onionServices.authPreferences.dialogIntro=Τα κλειδιά για τις ακόλουθες σελίδες onion είναι αποθηκευμένα στον υπολογιστή σας +onionServices.authPreferences.onionSite=Σελίδα Onion +onionServices.authPreferences.onionKey=Κλειδί +onionServices.authPreferences.remove=Απομάκρυνση +onionServices.authPreferences.removeAll=Αφαίρεση όλων +onionServices.authPreferences.failedToGetKeys=Αδυναμία λήψης κλειδιών από το tor +onionServices.authPreferences.failedToRemoveKey=Αδυναμία αφαίρεσης κλειδιού +onionServices.v2Deprecated.pageTitle=Προειδοποίηση κατάργησης σελιδών Onion V2 +onionServices.v2Deprecated.header=Οι ιστοσελίδες Onion έκδοσης 2 θα καταργηθούν σύντομα +onionServices.v2Deprecated=Σύντομα, αυτή η σελίδα onion δεν θα είναι προσβάσιμη. Παρακαλούμε επικοινωνήστε με τον διαχειριστή της σελίδας και προτρέψτε τον να την αναβαθμίσει. +onionServices.v2Deprecated.longDescription=Το Tor σταματά την υποστήριξη υπηρεσιών onion έκδοσης 2, ξεκινώντας από τον Ιούλιο 2021 οπότε και αυτή η σελίδα δεν θα είναι διαθέσιμη από αυτή τη διεύθυνση. +onionServices.v2Deprecated.tryAgain=Το κατάλαβα +onionServices.v2Deprecated.tooltip=Αυτή η σελίδα onion δεν θα είναι σύντομα προσβάσιμη + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Πάντα να δίνεται προτεραιότητα στα Onion +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Όχι τώρα +onionLocation.notNowAccessKey=n +onionLocation.description=Υπάρχει μια πιο ιδιωτική και ασφαλής έκδοση αυτής της σελίδας, μέσω του δικτύου Tor και των υπηρεσιών onion. Οι υπηρεσίες onion βοηθούν τους διαχειριστές ιστοσελιδών και τους επισκέπτες τους να παρακάμψουν την παρακολούθηση και τη λογοκρισία. +onionLocation.tryThis=Δοκιμάστε τις υπηρεσίες Onion +onionLocation.onionAvailable=.onion διαθέσιμο +onionLocation.learnMore=Μάθετε περισσότερα... +onionLocation.always=Πάντα +onionLocation.askEverytime=Να ερωτώμαι κάθε φορά +onionLocation.prioritizeOnionsDescription=Να δίνεται προτεραιότητα σε σελίδες .onion όταν είναι γνωστές. +onionLocation.onionServicesTitle=Υπηρεσίες Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Η διεύθυνση κρυπτονομίσματος (%S) αντιγράφηκε από μη ασφαλή ιστοσελίδα. Μπορεί να έχει τροποποιηθεί. +cryptoSafetyPrompt.whatCanHeading=Τι μπορείτε να κάνετε για αυτό; +cryptoSafetyPrompt.whatCanBody=Μπορείτε να δοκιμάσετε να επανασυνδεθείτε με νέο κύκλωμα για να δημιουργήσετε μια ασφαλή σύνδεση, ή να αποδεχτείτε το ρίσκο και να αγνοήσετε αυτήν την προειδοποίηση. +cryptoSafetyPrompt.learnMore=Μάθετε περισσότερα +cryptoSafetyPrompt.primaryAction=Ανανέωση καρτέλας με νέο κύκλωμα +cryptoSafetyPrompt.primaryActionAccessKey=Ρ +cryptoSafetyPrompt.secondaryAction=Αγνόηση προειδοποίησης +cryptoSafetyPrompt.secondaryActionAccessKey=Β + +# about:rulesets strings. +rulesets.warningTitle=Συνεχίστε προσεκτικά +rulesets.warningDescription=Η προσθήκη ή τροποποίηση των συνόλων κανόνων μπορεί να επιτρέψει σε χάκερ να πάρουν έλεγχο του περιηγητή σας. Συνεχίστε μόνο αν γνωρίζετε τι κάνετε. +rulesets.warningEnable=Προειδοποιήσέ με όταν προσπαθώ να κοιτάξω αυτές τις ρυθμίσεις +rulesets.warningButton=Αποδοχή ρίσκου και συνέχεια +# Ruleset list +rulesets.rulesets=Σύνολα κανόνων +rulesets.noRulesets=Δε βρέθηκαν σύνολα κανόνων +rulesets.noRulesetsDescr=Όταν αποθηκεύετε ένα σύνολο κανόνων στο Tor Browser, θα εμφανιστεί εδώ. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Τελευταία ενημέρωση %S +rulesets.neverUpdated=Δεν προέκυψε κάποια ενημέρωση ποτέ ή η πιο πρόσφατη ενημέρωση απέτυχε +rulesets.enabled=Ενεργοποιημένο +rulesets.disabled=Απενεργοποιημένο +# Ruleset details/edit ruleset +rulesets.edit=Επεξεργασία +rulesets.name=Όνομα +rulesets.jwk=JWK +rulesets.pathPrefix=Πρόθεμα Μονοπατιού +rulesets.scope=Εμβέλεια +rulesets.enable=Ενεργοποίηση αυτού του συνόλου κανόνων +rulesets.checkUpdates=Έλεγχος για ενημερώσεις +rulesets.jwkPlaceholder=Το κλειδί που χρησιμοποιήθηκε για την υπογραφή αυτού του συνόλου κανόνων είναι της μοφρής JWK (JSON Web Key) format +rulesets.jwkInvalid=Δεν ήταν δυνατή η ανάλυση του JWK ή το κλειδί δεν είναι έγκυρο +rulesets.pathPrefixPlaceholder=Πρόθεμα URL που περιέχει τα αρχεία που χρειάζονται από αυτό το σύνολο κανόνων +rulesets.pathPrefixInvalid=Το πρόθεμα μονοπατιού δεν αποτελεί μία έγκυρη διεύθυνση HTTP(S) +rulesets.scopePlaceholder=Κανονική έκφραση εμβέλειας κανόνων +rulesets.scopeInvalid=Δεν ήταν η ανάλυση της κανονικής έκφρασης εμβέλειας +rulesets.save=Αποθήκευση +rulesets.cancel=Ακύρωση diff --git a/toolkit/torbutton/chrome/locale/el/torlauncher.properties b/toolkit/torbutton/chrome/locale/el/torlauncher.properties new file mode 100644 index 000000000000..6717f5be85cd --- /dev/null +++ b/toolkit/torbutton/chrome/locale/el/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Εκκινητής Tor + +torlauncher.tor_exited_during_startup=Το Tor έκλεισε κατά την εκκίνηση. Αυτό μπορεί να οφείλεται σε σφάλμα στο αρχείο torrc, σε σφάλμα του Tor, σε κάποιο άλλο πρόγραμμα στο σύστημά σας ή σε ελαττωματικό υλικό. Το Tor Browser δεν θα ξεκινήσει μέχρι να διορθώσετε το σφάλμα και να επανεκκινήσετε το Tor. +torlauncher.tor_exited=Το Tor σταμάτησε απρόσμενα. Αυτό μπορεί να οφείλεται σε κάποιο σφάλμα του ίδιου του Tor, σε κάποιο άλλο πρόγραμμα στο σύστημά σας ή σε ελαττωματικό υλισμικό. Έως ότου επανεκκινήσετε το Tor, δεν θα είναι σε θέση να εμφανίσει οποιανδήποτε ιστοσελίδα. Αν το πρόβλημα παραμείνει, παρακαλούμε στείλτε ένα αντίγραφο του αρχείου καταγραφής του Tor στην ομάδα υποστήριξης. +torlauncher.tor_exited2=Η επανεκκίνηση του Tor δεν θα κλείσει τις καρτέλες του περιηγητή σας. +torlauncher.tor_controlconn_failed=Δεν ήταν δυνατή η σύνδεση με την θύρα ελέγχου του Tor. +torlauncher.tor_failed_to_start=Η εκκίνηση του Tor απέτυχε. +torlauncher.tor_control_failed=Η διαχείριση του Tor απέτυχε. +torlauncher.tor_bootstrap_failed=Το Tor απέτυχε να δημιουργήσει μια σύνδεση δικτύου Tor. +torlauncher.tor_bootstrap_failed_details=%1$S απέτυχε (%2$S). + +torlauncher.unable_to_start_tor=Δεν ήταν δυνατή η εκκίνηση του Tor.\n\n%S +torlauncher.tor_missing=Το εκτελέσιμο αρχείο του Tor απουσιάζει. +torlauncher.torrc_missing=Το αρχείο torrc λείπει και δεν μπορεί να δημιουργηθεί. +torlauncher.datadir_missing=Ο κατάλογος δεδομένων Tor δεν υπάρχει και δεν μπορεί να δημιουργηθεί. +torlauncher.onionauthdir_missing=Ο κατάλογος αυθεντικοποίησης Tor onion δεν υπάρχει και δεν μπορεί να δημιουργηθεί. +torlauncher.password_hash_missing=Αποτυχία απόκτησης διαγραμμισμένου κωδικού πρόσβασης. + +torlauncher.failed_to_get_settings=Αποτυχία διαγραφής των Tor ρυθμισεων.⏎\n⏎\n%S +torlauncher.failed_to_save_settings=Δεν είναι δυνατή η αποθήκευση των Tor ρυθμίσεων.⏎\n⏎ \n%S +torlauncher.ensure_tor_is_running=Βεβαιωθείτε ότι το Tor τρέχει. + +torlauncher.error_proxy_addr_missing=Πρέπει να καθορίσετε μία διεύθυνση IP ή ένα όνομα υπολογιστή και μία θύρα συστήματος για να ρυθμίσετε το Tor να χρησιμοποιεί διακομιστή μεσολάβησης για πρόσβαση στο διαδίκτυο. +torlauncher.error_proxy_type_missing=Πρέπει να επιλέξετε τον τύπο του διακομιστή μεσολάβησης. +torlauncher.error_bridges_missing=Πρέπει να καθορίσετε μια ή περισσότερες γέφυρες. +torlauncher.error_default_bridges_type_missing=Πρέπει να επιλέξετε έναν είδος μεταφοράς για τις γέφυρες που έχετε εισάγει. +torlauncher.error_bridgedb_bridges_missing=Παρακαλούμε ζητήστε μια γέφυρα. +torlauncher.error_bridge_bad_default_type=Δεν υπάρχουν γέφυρες που έχουν το είδος μεταφοράς %S διαθέσιμες. Παρακαλούμε προσαρμόστε τις ρυθμίσεις σας. + +torlauncher.bridge_suffix.meek-amazon=(λειτουργεί στην Κίνα) +torlauncher.bridge_suffix.meek-azure=(λειτουργεί στην Κίνα) + +torlauncher.request_a_bridge=Ζητήστε μια γέφυρα... +torlauncher.request_a_new_bridge=Ζητήστε μια καινούρια γέφυρα... +torlauncher.contacting_bridgedb=Επικοινωνούμε με τη BridgeDB. Παρακαλώ περιμένετε. +torlauncher.captcha_prompt=Λύστε το CAPTCHA για να ζητήσετε γέφυρα. +torlauncher.bad_captcha_solution=Η λύση δεν είναι σωστή. Παρακαλώ προσπαθήστε ξανά. +torlauncher.unable_to_get_bridge=Αποτυχία εύρεσης γέφυρας από τη BridgeDB.\n\n%S +torlauncher.no_meek=Αυτός ο περιηγητής δεν είναι παραμετροποιημένος για meek, το οποίο χρειάζεται για λήψη γεφυρών. +torlauncher.no_bridges_available=Δεν υπάρχουν διαθέσιμες γέφυρες αυτή τη στιγμή. Συγγνώμη. + +torlauncher.connect=Σύνδεση +torlauncher.restart_tor=Eπανεκκίνηση Tor +torlauncher.quit=Έξοδος +torlauncher.quit_win=Έξοδος +torlauncher.done=Τέλος + +torlauncher.forAssistance=Για βοήθεια, επικοινωνήστε με το %S +torlauncher.forAssistance2=Για βοήθεια, επισκεφτείτε %S + +torlauncher.copiedNLogMessages=Η αντιγραφή ολοκληρώθηκε. %S μηνύματα καταγραφής είναι έτοιμα να επικολληθούν σε ένα κειμενογράφο ή ένα μήνυμα ηλεκτρονικού ταχυδρομείου. + +torlauncher.bootstrapStatus.starting=Γίνεται εκκίνηση +torlauncher.bootstrapStatus.conn_pt=Γίνεται σύνδεση με τη γέφυρα +torlauncher.bootstrapStatus.conn_done_pt=Έγινε σύνδεση στη γέφυρα +torlauncher.bootstrapStatus.conn_proxy=Γίνεται σύνδεση στο διακομιστή μεσολάβησης +torlauncher.bootstrapStatus.conn_done_proxy=Έγινε σύνδεση στο διακομιστή μεσολάβησης +torlauncher.bootstrapStatus.conn=Γίνεται σύνδεση με αναμεταδότη Tor +torlauncher.bootstrapStatus.conn_done=Έγινε σύνδεση σε αναμεταδότη Tor +torlauncher.bootstrapStatus.handshake=Γίνεται διαπραγμάτευση με τον αναμεταδότη Tor +torlauncher.bootstrapStatus.handshake_done=Η διαπραγμάτευση με τον αναμεταδότη Tor ολοκληρώθηκε +torlauncher.bootstrapStatus.onehop_create=Πραγματοποιήθηκε σύνδεση σε κρυπτογραφημένο κατάλογο +torlauncher.bootstrapStatus.requesting_status=Ανάκτηση της κατάστασης του δικτύου +torlauncher.bootstrapStatus.loading_status=Φόρτωση της κατάστασης του δικτύου +torlauncher.bootstrapStatus.loading_keys=Φόρτωση των πιστοποιητικών του φορέα +torlauncher.bootstrapStatus.requesting_descriptors=Γίνεται αίτηση για πληροφορίες αναμεταδοτών +torlauncher.bootstrapStatus.loading_descriptors=Φόρτωση πληροφοριών αναμεταδότη +torlauncher.bootstrapStatus.enough_dirinfo=Τελείωσε η φόρτωση πληροφοριών αναμεταδοτών +torlauncher.bootstrapStatus.ap_conn_pt=Κτίσιμο κυκλωμάτων: Γίνεται σύνδεση με τη γέφυρα +torlauncher.bootstrapStatus.ap_conn_done_pt=Κτίσιμο κυκλωμάτων: Έγινε σύνδεση με τη γέφυρα +torlauncher.bootstrapStatus.ap_conn_proxy=Κτίσιμο κυκλωμάτων: Γίνεται σύνδεση με το διακομιστή μεσολάβησης +torlauncher.bootstrapStatus.ap_conn_done_proxy=Κτίσιμο κυκλωμάτων: Έγινε σύνδεση στον διακομιστή μεσολάβησης +torlauncher.bootstrapStatus.ap_conn=Κτίσιμο κυκλωμάτων: Γίνεται σύνδεση με έναν αναμεταδότη Tor +torlauncher.bootstrapStatus.ap_conn_done=Κτίσιμο κυκλωμάτων: Έγινε σύνδεση σε έναν αναμεταδότη Tor +torlauncher.bootstrapStatus.ap_handshake=Δημιουργία κυκλώματος: Γίνεται διαπραγμάτευση με αναμεταδότη Tor +torlauncher.bootstrapStatus.ap_handshake_done=Δημιουργία κυκλώματος: Ολοκληρώθηκε η διαπραγμάτευση με αναμεταδότη Tor +torlauncher.bootstrapStatus.circuit_create=Δημιουργία κυκλωμάτων: Γίνεται δημιουργία ενός κυκλώματος Tor +torlauncher.bootstrapStatus.done=Συνδεθήκατε στο δίκτυο Tor! + +torlauncher.bootstrapWarning.done=έγινε +torlauncher.bootstrapWarning.connectrefused=σύνδεση απορρίφθηκε +torlauncher.bootstrapWarning.misc=διάφορα +torlauncher.bootstrapWarning.resourcelimit=ανεπαρκείς πόροι +torlauncher.bootstrapWarning.identity=η ταυτότητα δεν ταιριάζει +torlauncher.bootstrapWarning.timeout=λήξη χρονικού ορίου σύνδεσης +torlauncher.bootstrapWarning.noroute=δεν βρέθηκε διαδρομή προς σύνδεση +torlauncher.bootstrapWarning.ioerror=σφάλμα ανάγνωσης/εγγραφής +torlauncher.bootstrapWarning.pt_missing=Λείπει το pluggable transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Η σύνδεση στον διακομιστή διακόπηκε. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Η σύνδεση στον διακομιστή δεν ήταν δυνατή. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Δεν ήταν δυνατή η σύνδεση στο διακομιστή μεσολάβησης. + +torlauncher.copiedNLogMessagesShort=Αντιγράφηκαν %S αρχεία καταγραφών diff --git a/toolkit/torbutton/chrome/locale/en-US/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/en-US/aboutDialog.dtd new file mode 100644 index 000000000000..844f4e0707fb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; is developed by "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "the &vendorShortName;"> +<!ENTITY project.end ", a nonprofit working to defend your privacy and freedom online."> + +<!ENTITY help.start "Want to help? "> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Donate"> +<!ENTITY help.or " or "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "get involved"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Questions?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Help the Tor Network Grow!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licensing Information"> +<!ENTITY tor.TrademarkStatement "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd new file mode 100644 index 000000000000..2d1e59b40eaf --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Changelog"> +<!ENTITY aboutTBUpdate.updated "Tor Browser has been updated."> +<!ENTITY aboutTBUpdate.linkPrefix "For the most up-to-date information about this release, "> +<!ENTITY aboutTBUpdate.linkLabel "visit our website"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Release Date"> +<!ENTITY aboutTBUpdate.releaseNotes "Release Notes"> diff --git a/toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd b/toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd new file mode 100644 index 000000000000..ed03fac6bff4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "About Tor"> + +<!ENTITY aboutTor.viewChangelog.label "View Changelog"> + +<!ENTITY aboutTor.ready.label "Explore. Privately."> +<!ENTITY aboutTor.ready2.label "You’re ready for the world’s most private browsing experience."> +<!ENTITY aboutTor.failure.label "Something Went Wrong!"> +<!ENTITY aboutTor.failure2.label "Tor is not working in this browser."> + +<!ENTITY aboutTor.search.label "Search with DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Questions?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Check our Tor Browser Manual »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser Manual"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project is a US 501(c)(3) non-profit organization advancing human rights and freedoms by creating and deploying free and open source anonymity and privacy technologies, supporting their unrestricted availability and use, and furthering their scientific and popular understanding."> +<!ENTITY aboutTor.getInvolved.label "Get Involved »"> + +<!ENTITY aboutTor.newsletter.tagline "Get the latest news from Tor straight to your inbox."> +<!ENTITY aboutTor.newsletter.link_text "Sign up for Tor News."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor is free to use because of donations from people like you."> +<!ENTITY aboutTor.donationBanner.buttonA "Donate Now"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONATE NOW"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/en-US/brand.dtd b/toolkit/torbutton/chrome/locale/en-US/brand.dtd new file mode 100644 index 000000000000..bc60ec225988 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Click to load installed system plugins"> +<!ENTITY plugins.installed.enable "Enable plugins"> +<!ENTITY plugins.installed.disable "Disable plugins"> +<!ENTITY plugins.installed.disable.tip "Click to prevent loading system plugins"> diff --git a/toolkit/torbutton/chrome/locale/en-US/brand.properties b/toolkit/torbutton/chrome/locale/en-US/brand.properties new file mode 100644 index 000000000000..62d61190e40c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, a fast home page with built-in search +homePageImport=Import your home page from %S + +homePageMigrationPageTitle=Home Page Selection +homePageMigrationDescription=Please select the home page you wish to use: + +syncBrandShortName=Sync diff --git a/toolkit/torbutton/chrome/locale/en-US/branding/brand.ftl b/toolkit/torbutton/chrome/locale/en-US/branding/brand.ftl new file mode 100644 index 000000000000..af1fd6482453 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties new file mode 100644 index 000000000000..8068b6c89bc3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Welcome +onboarding.tour-tor-welcome.title=You’re ready. +onboarding.tour-tor-welcome.description=Tor Browser offers the highest standard of privacy and security while browsing the web. You’re now protected against tracking, surveillance, and censorship. This quick onboarding will show you how. +onboarding.tour-tor-welcome.next-button=Go to Privacy + +onboarding.tour-tor-privacy=Privacy +onboarding.tour-tor-privacy.title=Snub trackers and snoopers. +onboarding.tour-tor-privacy.description=Tor Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected in the browser. Click ‘Tor Network’ to learn how we protect you on the network level. +onboarding.tour-tor-privacy.button=Go to Tor Network + +onboarding.tour-tor-network=Tor Network +onboarding.tour-tor-network.title=Travel a decentralized network. +onboarding.tour-tor-network.description=Tor Browser connects you to the Tor network run by thousands of volunteers around the world. Unlike a VPN, there’s no one point of failure or centralized entity you need to trust in order to enjoy the internet privately. +onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences. +onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings +onboarding.tour-tor-network.button=Go to Circuit Display + +onboarding.tour-tor-circuit-display=Circuit Display +onboarding.tour-tor-circuit-display.title=See your path. +onboarding.tour-tor-circuit-display.description=For each domain you visit, your traffic is relayed and encrypted in a circuit across three Tor relays around the world. No website knows where you are connecting from. You can request a new circuit by clicking ‘New Circuit for this Site’ on our Circuit Display. +onboarding.tour-tor-circuit-display.button=See My Path +onboarding.tour-tor-circuit-display.next-button=Go to Security + +onboarding.tour-tor-security=Security +onboarding.tour-tor-security.title=Choose your experience. +onboarding.tour-tor-security.description=We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer. Click below to see what the different options do. +onboarding.tour-tor-security.description-suffix=Note: By default, NoScript and HTTPS Everywhere are not included on the toolbar, but you can customize your toolbar to add them. +onboarding.tour-tor-security-level.button=See Your Security Level +onboarding.tour-tor-security-level.next-button=Go to Experience Tips + +onboarding.tour-tor-expect-differences=Experience Tips +onboarding.tour-tor-expect-differences.title=Expect some differences. +onboarding.tour-tor-expect-differences.description=With all the security and privacy features provided by Tor, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot. +onboarding.tour-tor-expect-differences.button=See FAQs +onboarding.tour-tor-expect-differences.next-button=Go to Onion Services + +onboarding.tour-tor-onion-services=Onion Services +onboarding.tour-tor-onion-services.title=Be extra protected. +onboarding.tour-tor-onion-services.description=Onion services are sites that end with a .onion that provide extra protections to publishers and visitors, including added safeguards against censorship. Onion services allow anyone to provide content and services anonymously. Click below to visit the DuckDuckGo onion site. +onboarding.tour-tor-onion-services.button=Visit an Onion +onboarding.tour-tor-onion-services.next-button=Done + +onboarding.overlay-icon-tooltip-updated2=See what's new\nin %S +onboarding.tour-tor-update.prefix-new=New +onboarding.tour-tor-update.prefix-updated=Updated + +onboarding.tour-tor-toolbar=Toolbar +onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu. +onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity +onboarding.tour-tor-toolbar-update-9.0.next-button=Go to Tor Network + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Next +onboarding.tor-circuit-display.done=Done +onboarding.tor-circuit-display.one-of-three=1 of 3 +onboarding.tor-circuit-display.two-of-three=2 of 3 +onboarding.tor-circuit-display.three-of-three=3 of 3 + +onboarding.tor-circuit-display.intro.title=How do circuits work? +onboarding.tor-circuit-display.intro.msg=Circuits are made up of randomly assigned relays, which are computers around the world configured to forward Tor traffic. Circuits allow you to browse privately and to connect to onion services. + +onboarding.tor-circuit-display.diagram.title=Circuit Display +onboarding.tor-circuit-display.diagram.msg=This diagram shows the relays that make up the circuit for this website. To prevent linking of activity across different sites, each website gets a different circuit. + +onboarding.tor-circuit-display.new-circuit.title=Do you need a new circuit? +onboarding.tor-circuit-display.new-circuit.msg=If you are not able to connect to the website you’re trying to visit or it is not loading properly, then you can use this button to reload the site with a new circuit. diff --git a/toolkit/torbutton/chrome/locale/en-US/network-settings.dtd b/toolkit/torbutton/chrome/locale/en-US/network-settings.dtd new file mode 100644 index 000000000000..62618124d04a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor Network Settings"> +<!ENTITY torsettings.wizard.title.default "Connect to Tor"> +<!ENTITY torsettings.wizard.title.configure "Tor Network Settings"> +<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Browser Language"> +<!ENTITY torlauncher.localePicker.prompt "Please select a language."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor."> +<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy."> +<!ENTITY torSettings.configure "Configure"> +<!ENTITY torSettings.connect "Connect"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Waiting for Tor to start…"> +<!ENTITY torsettings.restartTor "Restart Tor"> +<!ENTITY torsettings.reconfigTor "Reconfigure"> + +<!ENTITY torsettings.discardSettings.prompt "You have configured Tor bridges or you have entered local proxy settings.  To make a direct connection to the Tor network, these settings must be removed."> +<!ENTITY torsettings.discardSettings.proceed "Remove Settings and Connect"> + +<!ENTITY torsettings.optional "Optional"> + +<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet"> +<!ENTITY torsettings.useProxy.type "Proxy Type"> +<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type"> +<!ENTITY torsettings.useProxy.address "Address"> +<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Username"> +<!ENTITY torsettings.useProxy.password "Password"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports"> +<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports"> +<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country"> +<!ENTITY torsettings.useBridges.default "Select a Built-In Bridge"> +<!ENTITY torsettings.useBridges.default.placeholder "select a bridge"> +<!ENTITY torsettings.useBridges.bridgeDB "Request a bridge from torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Enter the characters from the image"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Get a new challenge"> +<!ENTITY torsettings.useBridges.captchaSubmit "Submit"> +<!ENTITY torsettings.useBridges.custom "Provide a bridge I know"> +<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source."> +<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)"> + +<!ENTITY torsettings.copyLog "Copy Tor Log To Clipboard"> + +<!ENTITY torsettings.proxyHelpTitle "Proxy Help"> +<!ENTITY torsettings.proxyHelp1 "A local proxy might be needed when connecting through a company, school, or university network. If you are not sure whether a proxy is needed, look at the Internet settings in another browser or check your system's network settings."> + +<!ENTITY torsettings.bridgeHelpTitle "Bridge Relay Help"> +<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor."> +<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Connection"> +<!ENTITY torPreferences.torSettings "Tor Settings"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." > +<!ENTITY torPreferences.learnMore "Learn more"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Connected"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Learn more"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Bridges"> +<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatic"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Remove"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Copied!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Request a Bridge…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Advanced"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "View Logs…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Cancel"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "Connecting…"> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatic"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Try Again"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "None of the configurations we tried worked"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/en-US/onboarding.properties b/toolkit/torbutton/chrome/locale/en-US/onboarding.properties new file mode 100644 index 000000000000..07c299a2d5d0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=New to %S?\nLet’s get started. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S is all new.\nSee what you can do! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Close +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Dismiss +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Complete diff --git a/toolkit/torbutton/chrome/locale/en-US/torbutton.dtd b/toolkit/torbutton/chrome/locale/en-US/torbutton.dtd new file mode 100644 index 000000000000..4b89fceef44c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "New Identity"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "New Tor Circuit for this Site"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor Network Settings…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Check for Tor Browser Update…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Tor Browser Security Settings"> +<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections"> +<!ENTITY torbutton.cookiedialog.lockCol "Protected"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Name"> +<!ENTITY torbutton.cookiedialog.pathCol "Path"> +<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies"> +<!ENTITY torbutton.prefs.sec_caption "Security Level"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "The Security Slider lets you disable certain browser features that may make your browser more vulnerable to hacking attempts."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "All Tor Browser and website features are enabled."> +<!ENTITY torbutton.prefs.sec_safer_label "Safer"> +<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality."> +<!ENTITY torbutton.prefs.sec_safer_list_label "At the safer setting:"> +<!ENTITY torbutton.prefs.sec_safest_label "Safest"> +<!ENTITY torbutton.prefs.sec_safest_description "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Learn more"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites."> +<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media), and WebGL are click-to-play."> +<!ENTITY torbutton.prefs.sec_custom_warning "Custom"> +<!ENTITY torbutton.prefs.sec_overview "Disable certain web features that can be used to attack your security and anonymity."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Security Level : Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Security Level : Safer"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Security Level : Safest"> +<!ENTITY torbutton.prefs.sec_custom_summary "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Restore Defaults"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Advanced Security Settings…"> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Tor Circuit"> +<!ENTITY torbutton.circuit_display.new_circuit "New Circuit for this Site"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Remember this key"> diff --git a/toolkit/torbutton/chrome/locale/en-US/torbutton.properties b/toolkit/torbutton/chrome/locale/en-US/torbutton.properties new file mode 100644 index 000000000000..5a01d1baa6bb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP unknown +torbutton.circuit_display.onion_site = Onion site +torbutton.circuit_display.this_browser = This browser +torbutton.circuit_display.relay = Relay +torbutton.circuit_display.tor_bridge = Bridge +torbutton.circuit_display.unknown_country = Unknown country +torbutton.circuit_display.guard = Guard +torbutton.circuit_display.guard_note = Your [Guard] node may not change. +torbutton.circuit_display.learn_more = Learn more +torbutton.circuit_display.click_to_copy = Click to Copy +torbutton.circuit_display.copied = Copied! +torbutton.content_sizer.margin_tooltip = Tor Browser adds this margin to make the width and height of your window less distinctive, and thus reduces the ability of people to track you online. +extensions.torbutton@torproject.org.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data. +torbutton.popup.external.title = Download an external file type? +torbutton.popup.external.app = Tor Browser cannot display this file. You will need to open it with another application.\n\n +torbutton.popup.external.note = Some types of files can cause applications to connect to the Internet without using Tor.\n\n +torbutton.popup.external.suggest = To be safe, you should only open downloaded files while offline, or use a Tor Live CD such as Tails.\n +torbutton.popup.launch = Download file +torbutton.popup.cancel = Cancel +torbutton.popup.dontask = Automatically download files from now on +torbutton.popup.no_newnym = Torbutton cannot safely give you a new identity. It does not have access to the Tor Control Port.\n\nAre you running Tor Browser Bundle? +torbutton.security_settings.menu.title = Security Settings +torbutton.title.prompt_torbrowser = Important Torbutton Information +torbutton.popup.prompt_torbrowser = Torbutton works differently now: you can't turn it off any more.\n\nWe made this change because it isn't safe to use Torbutton in a browser that's also used for non-Tor browsing. There were too many bugs there that we couldn't fix any other way.\n\nIf you want to keep using Firefox normally, you should uninstall Torbutton and download Tor Browser Bundle. The privacy properties of Tor Browser are also superior to those of normal Firefox, even when Firef [...] +torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information. + +torbutton.popup.confirm_plugins = Plugins such as Flash can harm your privacy and anonymity.\n\nThey can also bypass Tor to reveal your current location and IP address.\n\nAre you sure you want to enable plugins?\n\n +torbutton.popup.never_ask_again = Never ask me again +torbutton.popup.confirm_newnym = Tor Browser will close all windows and tabs. All website sessions will be lost.\n\nRestart Tor Browser now to reset your identity?\n\n + +torbutton.maximize_warning = Maximizing Tor Browser can allow websites to determine your monitor size, which can be used to track you. We recommend that you leave Tor Browser windows in their original default size. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=This website (%S) attempted to extract HTML5 canvas image data, which may be used to uniquely identify your computer.\n\nShould Tor Browser allow this website to extract HTML5 canvas image data? +canvas.notNow=Not Now +canvas.notNowAccessKey=N +canvas.allow=Allow in the future +canvas.allowAccessKey=A +canvas.never=Never for this site (recommended) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Profile Problem +profileReadOnly=You cannot run %S from a read-only file system. Please copy %S to another location before trying to use it. +profileReadOnlyMac=You cannot run %S from a read-only file system. Please copy %S to your Desktop or Applications folder before trying to use it. +profileAccessDenied=%S does not have permission to access the profile. Please adjust your file system permissions and try again. +profileMigrationFailed=Migration of your existing %S profile failed.\nNew settings will be used. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Downloading %S update + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Connection Encrypted (Onion Service, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=Connection Encrypted (Onion Service) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Learn more +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Network +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem Loading Onionsite +onionServices.descNotFound.header=Onionsite Not Found +onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem Loading Onionsite +onionServices.descInvalid.header=Onionsite Cannot Be Reached +onionServices.descInvalid=The onionsite is unreachable due an internal error. +onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem Loading Onionsite +onionServices.introFailed.header=Onionsite Has Disconnected +onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem Loading Onionsite +onionServices.rendezvousFailed.header=Unable to Connect to Onionsite +onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later. +onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Authorization Required +onionServices.clientAuthMissing.header=Onionsite Requires Authentication +onionServices.clientAuthMissing=Access to the onionsite requires a key but none was provided. +onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Authorization Failed +onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed +onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator. +onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem Loading Onionsite +onionServices.badAddress.header=Invalid Onionsite Address +onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly. +onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem Loading Onionsite +onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out +onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection. +onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S is requesting that you authenticate. +onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service +onionServices.authPrompt.done=Done +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters) +onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key +onionServices.authPreferences.header=Onion Services Authentication +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them. +onionServices.authPreferences.savedKeys=Saved Keys… +onionServices.authPreferences.dialogTitle=Onion Service Keys +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Key +onionServices.authPreferences.remove=Remove +onionServices.authPreferences.removeAll=Remove All +onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor +onionServices.authPreferences.failedToRemoveKey=Unable to remove key +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Got it +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Always Prioritize Onions +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Not Now +onionLocation.notNowAccessKey=n +onionLocation.description=There's a more private and secure version of this site available over the Tor network via onion services. Onion services help website publishers and their visitors defeat surveillance and censorship. +onionLocation.tryThis=Try Onion Services +onionLocation.onionAvailable=.onion available +onionLocation.learnMore=Learn more… +onionLocation.always=Always +onionLocation.askEverytime=Ask every time +onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known. +onionLocation.onionServicesTitle=Onion Services + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Learn more +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Enabled +rulesets.disabled=Disabled +# Ruleset details/edit ruleset +rulesets.edit=Edit +rulesets.name=Name +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Save +rulesets.cancel=Cancel \ No newline at end of file diff --git a/toolkit/torbutton/chrome/locale/en-US/torlauncher.properties b/toolkit/torbutton/chrome/locale/en-US/torlauncher.properties new file mode 100644 index 000000000000..bc9eb5dfd745 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/en-US/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Launcher + +torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start. +torlauncher.tor_exited=Tor unexpectedly exited. This might be due to a bug in Tor itself, another program on your system, or faulty hardware. Until you restart Tor, Tor Browser will not be able to reach any websites. If the problem persists, please send a copy of your Tor Log to the support team. +torlauncher.tor_exited2=Restarting Tor will not close your browser tabs. +torlauncher.tor_controlconn_failed=Could not connect to Tor control port. +torlauncher.tor_failed_to_start=Tor failed to start. +torlauncher.tor_control_failed=Failed to take control of Tor. +torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection. +torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S). + +torlauncher.unable_to_start_tor=Unable to start Tor.\n\n%S +torlauncher.tor_missing=The Tor executable is missing. +torlauncher.torrc_missing=The torrc file is missing and could not be created. +torlauncher.datadir_missing=The Tor data directory does not exist and could not be created. +torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created. +torlauncher.password_hash_missing=Failed to get hashed password. + +torlauncher.failed_to_get_settings=Unable to retrieve Tor settings.\n\n%S +torlauncher.failed_to_save_settings=Unable to save Tor settings.\n\n%S +torlauncher.ensure_tor_is_running=Please ensure that Tor is running. + +torlauncher.error_proxy_addr_missing=You must specify both an IP address or hostname and a port number to configure Tor to use a proxy to access the Internet. +torlauncher.error_proxy_type_missing=You must select the proxy type. +torlauncher.error_bridges_missing=You must specify one or more bridges. +torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges. +torlauncher.error_bridgedb_bridges_missing=Please request a bridge. +torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings. + +torlauncher.bridge_suffix.meek-amazon=(works in China) +torlauncher.bridge_suffix.meek-azure=(works in China) + +torlauncher.request_a_bridge=Request a Bridge… +torlauncher.request_a_new_bridge=Request a New Bridge… +torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. +torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. +torlauncher.bad_captcha_solution=The solution is not correct. Please try again. +torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S +torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges. +torlauncher.no_bridges_available=No bridges are available at this time. Sorry. + +torlauncher.connect=Connect +torlauncher.restart_tor=Restart Tor +torlauncher.quit=Quit +torlauncher.quit_win=Exit +torlauncher.done=Done + +torlauncher.forAssistance=For assistance, contact %S +torlauncher.forAssistance2=For assistance, visit %S + +torlauncher.copiedNLogMessages=Copy complete. %S Tor log messages are ready to be pasted into a text editor or an email message. + +torlauncher.bootstrapStatus.starting=Starting +torlauncher.bootstrapStatus.conn_pt=Connecting to bridge +torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge +torlauncher.bootstrapStatus.conn_proxy=Connecting to proxy +torlauncher.bootstrapStatus.conn_done_proxy=Connected to proxy +torlauncher.bootstrapStatus.conn=Connecting to a Tor relay +torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay +torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay +torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay +torlauncher.bootstrapStatus.onehop_create=Establishing an encrypted directory connection +torlauncher.bootstrapStatus.requesting_status=Retrieving network status +torlauncher.bootstrapStatus.loading_status=Loading network status +torlauncher.bootstrapStatus.loading_keys=Loading authority certificates +torlauncher.bootstrapStatus.requesting_descriptors=Requesting relay information +torlauncher.bootstrapStatus.loading_descriptors=Loading relay information +torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information +torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge +torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge +torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy +torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay +torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay +torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay +torlauncher.bootstrapStatus.ap_handshake_done=Building circuits: Finished negotiating with a Tor relay +torlauncher.bootstrapStatus.circuit_create=Building circuits: Establishing a Tor circuit +torlauncher.bootstrapStatus.done=Connected to the Tor network! + +torlauncher.bootstrapWarning.done=done +torlauncher.bootstrapWarning.connectrefused=connection refused +torlauncher.bootstrapWarning.misc=miscellaneous +torlauncher.bootstrapWarning.resourcelimit=insufficient resources +torlauncher.bootstrapWarning.identity=identity mismatch +torlauncher.bootstrapWarning.timeout=connection timeout +torlauncher.bootstrapWarning.noroute=no route to host +torlauncher.bootstrapWarning.ioerror=read/write error +torlauncher.bootstrapWarning.pt_missing=missing pluggable transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy. + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/es-ES/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/es-ES/aboutDialog.dtd new file mode 100644 index 000000000000..f119fe490e7e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; está desarrollado por"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "el/la &vendorShortName;"> +<!ENTITY project.end ", una organización sin ánimo de lucro que trabaja para defender tu privacidad y libertad en línea."> + +<!ENTITY help.start "¿Quieres ayudar?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Dona"> +<!ENTITY help.or "o"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "implícate"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "¿Preguntas?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "¡Ayuda a la red Tor a crecer!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Información de licencia"> +<!ENTITY tor.TrademarkStatement "'Tor' y el 'Onion Logo' (logo de la cebolla) son marcas registradas de la Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/es-ES/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/es-ES/aboutTBUpdate.dtd new file mode 100644 index 000000000000..259b9496cb3d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Registro de cambios de Tor Browser"> +<!ENTITY aboutTBUpdate.updated "El Tor Browser ha sido actualizado."> +<!ENTITY aboutTBUpdate.linkPrefix "Para ver la información más actualizada de esta versión, "> +<!ENTITY aboutTBUpdate.linkLabel "visite nuestro sitio web"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versión"> +<!ENTITY aboutTBUpdate.releaseDate "Fecha de lanzamiento"> +<!ENTITY aboutTBUpdate.releaseNotes "Notas de la versión"> diff --git a/toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd b/toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd new file mode 100644 index 000000000000..de53d3ab1aa5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Acerca de Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Ver registro de modificaciones."> + +<!ENTITY aboutTor.ready.label "Explora. En privado."> +<!ENTITY aboutTor.ready2.label "Ahora estás listo/a para experimentar la navegación más privada del mundo."> +<!ENTITY aboutTor.failure.label "¡Algo fue mal!"> +<!ENTITY aboutTor.failure2.label "Tor no está funcionando en este navegador."> + +<!ENTITY aboutTor.search.label "Buscar con DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "¿Preguntas?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Comprobar nuestro Manual del Tor Browser"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manual del Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "El proyecto Tor es una organización sin fines de lucro definida legalmente en Estados Unidos como 501(c)(3), avanzando libertades y derechos humanos mediante la creación y despliegue de tecnologías de anonimato y privacidad sin costo y de fuente abierta, apoyando su disponibilidad y uso sin restricciones y ampliando su entendimiento científico y popular."> +<!ENTITY aboutTor.getInvolved.label "Involúcrate »"> + +<!ENTITY aboutTor.newsletter.tagline "Recibe las últimas noticias de Tor directamente en tu bandeja de entrada."> +<!ENTITY aboutTor.newsletter.link_text "Inscríbete en Tor News."> +<!ENTITY aboutTor.donationBanner.freeToUse "Se puede usar Tor libremente por las donaciones de personas como tu."> +<!ENTITY aboutTor.donationBanner.buttonA "Dona ahora."> + +<!ENTITY aboutTor.alpha.ready.label "Prueba. Minuciosamente."> +<!ENTITY aboutTor.alpha.ready2.label "Estás listo para probar la experiencia de navegación más privada del mundo."> +<!ENTITY aboutTor.alpha.bannerDescription "El Navegador Tor Alpha es una versión inestable del Navegador Tor que puedes usar para obtener una visión previa de las nuevas funciones, probar su rendimiento y proporcionar comentarios antes del lanzamiento."> +<!ENTITY aboutTor.alpha.bannerLink "Informar sobre un error en el Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Prueba. Minuciosamente."> +<!ENTITY aboutTor.nightly.ready2.label "Estás listo para probar la experiencia de navegación más privada del mundo."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly es una versión inestable de Tor Browser que puedes usar para obtener una vista previa de nuevas funciones, probar su rendimiento y proporcionar comentarios antes del lanzamiento."> +<!ENTITY aboutTor.nightly.bannerLink "Informar sobre un error en el Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ANIMADO POR LA PRIVACIDAD:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTENCIA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CAMBIO"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "LIBERTAD"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONA AHORA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Tu donación será igualada por Amigos de Tor hasta $100.000."> diff --git a/toolkit/torbutton/chrome/locale/es-ES/brand.dtd b/toolkit/torbutton/chrome/locale/es-ES/brand.dtd new file mode 100644 index 000000000000..51e5ba2bb618 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Proyecto Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' y el 'Onion Logo' (logo de la cebolla) son marcas registradas de la Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Navegador Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Haz clic para cargar los complementos instalados en el sistema"> +<!ENTITY plugins.installed.enable "Habilitar complementos"> +<!ENTITY plugins.installed.disable "Deshabilitar complementos"> +<!ENTITY plugins.installed.disable.tip "Haga clic para evitar que se carguen complementos de sistema"> diff --git a/toolkit/torbutton/chrome/locale/es-ES/brand.properties b/toolkit/torbutton/chrome/locale/es-ES/brand.properties new file mode 100644 index 000000000000..756bcd181a24 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Navegador Tor +vendorShortName=Proyecto Tor + +homePageSingleStartMain=Inicio de Firefox, una página principal rápida con búsqueda integrada +homePageImport=Importa tu página principal desde %S + +homePageMigrationPageTitle=Selección de página principal +homePageMigrationDescription=Por favor selecciona la página principal que te gustaría usar: + +syncBrandShortName=Sincronización diff --git a/toolkit/torbutton/chrome/locale/es-ES/branding/brand.ftl b/toolkit/torbutton/chrome/locale/es-ES/branding/brand.ftl new file mode 100644 index 000000000000..6c35c7869c90 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Navegador Tor +-vendor-short-name = Proyecto Tor +trademarkInfo = 'Tor' y el 'Onion Logo' (logo de la cebolla) son marcas registradas de la Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/es-ES/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/es-ES/browserOnboarding.properties new file mode 100644 index 000000000000..0f29854d4cf2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Bienvenido/a +onboarding.tour-tor-welcome.title=Estás listo/a. +onboarding.tour-tor-welcome.description=Tor Browser ofrece un alto standar de privacidad y seguridad mientras se navega por la red. Está ahora protegido de rastreadores, vigilancia y censura. Esta rápida introducción te enseñará cómo. +onboarding.tour-tor-welcome.next-button=Ir a Privacidad + +onboarding.tour-tor-privacy=Privacidad +onboarding.tour-tor-privacy.title=Rastreadores y espías molestos +onboarding.tour-tor-privacy.description=Tor Browser aísla las cookies y borra el historial de navegación después de la sesión. Estas modificaciones aseguran que tu privacidad y seguridad sean protegidas en el navegador. Haz click en 'Red Tor' para saber cómo te protegemeos a nivel de red. +onboarding.tour-tor-privacy.button=Ir a la red Tor + +onboarding.tour-tor-network=Red Tor +onboarding.tour-tor-network.title=Viaja por la red descentralizada. +onboarding.tour-tor-network.description=Tor Browser te conecta con la Red Tor, mantenida por miles de voluntarios alrededor del mundo.\nA diferencia de una VPN, no hay un punto de falla o entidad centralizada en la que necesites confiar para disfrutar de Internet de forma privada. +onboarding.tour-tor-network.description-para2=NUEVO: la configuración de red de Tor, incluyendo la capacidad de solicitar puentes donde Tor está bloqueado, ahora está en Preferencias. +onboarding.tour-tor-network.action-button=Cambia la configuración de red de Tor +onboarding.tour-tor-network.button=Ir a la visualización del circuito + +onboarding.tour-tor-circuit-display=Visualización del circuito +onboarding.tour-tor-circuit-display.title=Ver tu recorrido +onboarding.tour-tor-circuit-display.description=Por cada dominio que visitas, tus datos de tráfico son transportados y cifrados en un circuito a través de tres repetidores de Tor alrededor del mundo. Ningún sitio web sabe desde dónde te conectas. Puedes pedir un nuevo circuito haciendo clic en 'Nuevo Circuito para este Sitio' en la Visualización del Circuito. +onboarding.tour-tor-circuit-display.button=Ver mi recorrido +onboarding.tour-tor-circuit-display.next-button=Ir a Seguridad + +onboarding.tour-tor-security=Seguridad +onboarding.tour-tor-security.title=Elige tu experiencia. +onboarding.tour-tor-security.description=También te proporcionamos configuraciones adicionales para aumentar la seguridad de tu navegador. Nuestra Configuración de Seguridad te permite bloquear elementos que podrían usarse para atacar tu computadora. Haz clic a continuación para ver lo que hacen las diferentes opciones. +onboarding.tour-tor-security.description-suffix=Nota: De forma predeterminada, NoScript y HTTPS Everywhere no están incluidos en la barra de herramientas, pero puedes agregarlos. +onboarding.tour-tor-security-level.button=Mira tu nivel de seguridad +onboarding.tour-tor-security-level.next-button=Ir a los Consejos para una mejor experiencia + +onboarding.tour-tor-expect-differences=Consejos de expertos +onboarding.tour-tor-expect-differences.title=Espera algunas diferencias. +onboarding.tour-tor-expect-differences.description=Con todas las características de seguridad y privacidad proporcionadas por Tor, tu experiencia mientras navegas por Internet puede ser un poco diferente. Las cosas pueden ser un poco más lentas, y dependiendo de tu nivel de seguridad, algunos elementos pueden no funcionar o no cargarse. También se te puede pedir que demuestres que eres un ser humano y no un robot. +onboarding.tour-tor-expect-differences.button=Preguntas frecuentes (FAQ) +onboarding.tour-tor-expect-differences.next-button=Ir a los Servicios Cebolla + +onboarding.tour-tor-onion-services=Servicios cebolla +onboarding.tour-tor-onion-services.title=Protégete bien. +onboarding.tour-tor-onion-services.description=Los servicios cebolla son sitios que terminan con .onion y proveen protecciones extra a editores y visitantes, incluyendo salvaguardas adicionales contra la censura. Los mismos permiten a cualquiera proveer contenido y servicios anónimamente. Haz clic abajo para visitar el sitio cebolla de DuckDuckGo. +onboarding.tour-tor-onion-services.button=Visita un sitio cebolla +onboarding.tour-tor-onion-services.next-button=Hecho + +onboarding.overlay-icon-tooltip-updated2=Ver qué hay de nuevo\nen %S +onboarding.tour-tor-update.prefix-new=Nuevo +onboarding.tour-tor-update.prefix-updated=Actualizado + +onboarding.tour-tor-toolbar=Barra de herramientas +onboarding.tour-tor-toolbar-update-9.0.title=Adiós botón cebolla +onboarding.tour-tor-toolbar-update-9.0.description=Queremos que tu experiencia con Tor esté totalmente integrada en el navegador Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Es por eso que ahora, en lugar de usar el botón de cebolla, se puede ver el Circuito Tor a través de [i] en la barra de URL y solicitar una Nueva Identidad usando el botón de la barra de herramientas o el menú [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Cómo solicitar una nueva identidad +onboarding.tour-tor-toolbar-update-9.0.next-button=Ir a la red Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Siguiente +onboarding.tor-circuit-display.done=Hecho +onboarding.tor-circuit-display.one-of-three=1 de 3 +onboarding.tor-circuit-display.two-of-three=2 de 3 +onboarding.tor-circuit-display.three-of-three=3 de 3 + +onboarding.tor-circuit-display.intro.title=¿Cómo funcionan los circuitos? +onboarding.tor-circuit-display.intro.msg=Los circuitos están formados por repetidores asignados aleatoriamente, que son computadoras de todo el mundo configuradas para reenviar el tráfico de Tor. Los circuitos te permiten navegar de forma privada y conectarte a los servicios cebolla. + +onboarding.tor-circuit-display.diagram.title=Visualización del circuito +onboarding.tor-circuit-display.diagram.msg=Estos diagramas muestran los repetidores que crean el circuito para esta página web. Para prevenir la vinculación de la actividad a través de diferentes sitios, cada página web tiene un circuito diferente. + +onboarding.tor-circuit-display.new-circuit.title=¿Necesitas un circuito nuevo? +onboarding.tor-circuit-display.new-circuit.msg=Si no consigues conectarte a la página web que estás intentando visitar, o no está cargando correctamente, puedes usar este botón para recargar el sitio con un circuito nuevo. diff --git a/toolkit/torbutton/chrome/locale/es-ES/network-settings.dtd b/toolkit/torbutton/chrome/locale/es-ES/network-settings.dtd new file mode 100644 index 000000000000..0c7676448a7d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Configuración de la red Tor"> +<!ENTITY torsettings.wizard.title.default "Conectar a Tor"> +<!ENTITY torsettings.wizard.title.configure "Configuración de la red Tor"> +<!ENTITY torsettings.wizard.title.connecting "Estableciendo una conexión."> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Idioma del Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Elige un idioma."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Pincha en "Connect" para conectar con Tor"> +<!ENTITY torSettings.configurePrompt "Pulsa "Configurar" para ajustar la configuración de red si estás en un país que censura Tor (como Egipto, China, Turquía) o si estás conectando desde una red privada que requiera un proxy."> +<!ENTITY torSettings.configure "Configurar"> +<!ENTITY torSettings.connect "Conectar"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Esperando a que Tor se inicie..."> +<!ENTITY torsettings.restartTor "Reiniciar Tor"> +<!ENTITY torsettings.reconfigTor "Configurar de nuevo"> + +<!ENTITY torsettings.discardSettings.prompt "Has configurado los puentes de red (bridges) de Tor o has introducido ajustes para proxy local.  Para realizar una conexión directa a la red Tor, estos ajustes se deben borrar."> +<!ENTITY torsettings.discardSettings.proceed "Elimina ajustes y conecta"> + +<!ENTITY torsettings.optional "Opcional"> + +<!ENTITY torsettings.useProxy.checkbox "Utilizo un proxy para conectar a Internet."> +<!ENTITY torsettings.useProxy.type "Tipo de proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "seleccionar un tipo de proxy"> +<!ENTITY torsettings.useProxy.address "Dirección"> +<!ENTITY torsettings.useProxy.address.placeholder "Dirección IP o nombre de máquina (host)"> +<!ENTITY torsettings.useProxy.port "Puerto"> +<!ENTITY torsettings.useProxy.username "Nombre de usuario"> +<!ENTITY torsettings.useProxy.password "Contraseña"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Esta computadora va a través de un cortafuegos(firewall) que sólo permite conexiones a ciertos puertos"> +<!ENTITY torsettings.firewall.allowedPorts "Puertos permitidos"> +<!ENTITY torsettings.useBridges.checkbox "En mi país se censura a Tor"> +<!ENTITY torsettings.useBridges.default "Selecciona un Puente Incorporado"> +<!ENTITY torsettings.useBridges.default.placeholder "seleccionar un puente"> +<!ENTITY torsettings.useBridges.bridgeDB "Solicitar un puente de torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Introducir los caracteres de la imagen"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Obtener un nuevo reto"> +<!ENTITY torsettings.useBridges.captchaSubmit "Enviar"> +<!ENTITY torsettings.useBridges.custom "Proporcionar un puente que conozco"> +<!ENTITY torsettings.useBridges.label "Ingresa la información del puente desde una fuente confiable."> +<!ENTITY torsettings.useBridges.placeholder "escribe dirección:puerto (uno por línea)"> + +<!ENTITY torsettings.copyLog "Copiar el registro de mensajes(log) de Tor al portapapeles"> + +<!ENTITY torsettings.proxyHelpTitle "Ayuda con el Proxy"> +<!ENTITY torsettings.proxyHelp1 "Podrías necesitar un proxy local si te conectas a través de una red de empresa, escuela o universidad. Si no estás seguro de si se necesita o no un proxy, consulta la configuración de Internet en otro navegador o comprueba la configuración de red de tu sistema."> + +<!ENTITY torsettings.bridgeHelpTitle "Ayuda de repetidores puente ('bridge relays')"> +<!ENTITY torsettings.bridgeHelp1 "Los puentes son transmisores no listados que dificultan el bloqueo de las conexiones a la red Tor.  Cada tipo de puente utiliza un método diferente para evitar la censura.  Los obfs hacen que tu tráfico parezca ruido aleatorio, y los modestos hacen que tu tráfico parezca que se está conectando a ese servicio en lugar de a Tor."> +<!ENTITY torsettings.bridgeHelp2 "Debido a la forma en que ciertos países intentan bloquear a Tor, ciertos puentes funcionan en algunos países pero no en otros. Si no estás segura de qué puentes funcionan en tu país, visita torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Espera mientras establecemos una conexión a la red Tor.  Esto puede durar varios minutos."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Conexión"> +<!ENTITY torPreferences.torSettings "Configuración de Tor"> +<!ENTITY torPreferences.torSettingsDescription "El Navegador Tor enruta tu tráfico a través de la Red Tor, mantenida por miles de voluntarios alrededor del mundo." > +<!ENTITY torPreferences.learnMore "Aprende más"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Probar"> +<!ENTITY torPreferences.statusInternetOnline "Conectado"> +<!ENTITY torPreferences.statusInternetOffline "Desconectado"> +<!ENTITY torPreferences.statusTorLabel "Red Tor:"> +<!ENTITY torPreferences.statusTorConnected "Conectado"> +<!ENTITY torPreferences.statusTorNotConnected "No conectado"> +<!ENTITY torPreferences.statusTorBlocked "Posiblemente bloqueado"> +<!ENTITY torPreferences.learnMore "Aprende más"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Inicio rápido"> +<!ENTITY torPreferences.quickstartDescriptionLong "El inicio rápido conecta el Navegador Tor a la Red Tor automáticamente al iniciar, basándose en la última configuración de conexión utilizada."> +<!ENTITY torPreferences.quickstartCheckbox "Siempre conectar automáticamente"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Puentes"> +<!ENTITY torPreferences.bridgesDescription "Los puentes te ayudan a acceder a la Red Tor en lugares donde Tor está bloqueado. Dependiendo de dónde te encuentres, un puente puede funcionar mejor que otro."> +<!ENTITY torPreferences.bridgeLocation "Tu ubicación"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automática"> +<!ENTITY torPreferences.bridgeLocationFrequent "Ubicaciones seleccionadas con frecuencia"> +<!ENTITY torPreferences.bridgeLocationOther "Otras ubicaciones"> +<!ENTITY torPreferences.bridgeChooseForMe "Elige un Puente Para Mí..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Tus puentes actuales"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Puedes guardar uno o más puentes, y Tor elegirá cuál usar cuando te conectes. Cuando sea necesario Tor se cambiará automáticamente a otro puente, si es necesario."> +<!ENTITY torPreferences.bridgeId "Puente #1: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Eliminar"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Desactivar los puentes incorporados"> +<!ENTITY torPreferences.bridgeShare "Comparte este puente usando el código QR o copiando su dirección:"> +<!ENTITY torPreferences.bridgeCopy "Copiar la dirección del puente"> +<!ENTITY torPreferences.copied "¡Copiado!"> +<!ENTITY torPreferences.bridgeShowAll "Mostrar todos los puentes"> +<!ENTITY torPreferences.bridgeRemoveAll "Eliminar todos los puentes"> +<!ENTITY torPreferences.bridgeAdd "Añadir un Puente Nuevo"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Elige uno de los puentes incorporados al Navegador Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Elige un puente incorporado..."> +<!ENTITY torPreferences.bridgeRequest "Solicita un puente..."> +<!ENTITY torPreferences.bridgeEnterKnown "Pon una dirección de puente que ya sepas"> +<!ENTITY torPreferences.bridgeAddManually "Añade un Puente Manualmente..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avanzado"> +<!ENTITY torPreferences.advancedDescription "Configura cómo se conecta el Navegador Tor a Internet"> +<!ENTITY torPreferences.advancedButton "Ajustes..."> +<!ENTITY torPreferences.viewTorLogs "Ver los registros de Tor"> +<!ENTITY torPreferences.viewLogs "Ver registros…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "¿Eliminar todos los puentes?"> +<!ENTITY torPreferences.removeBridgesWarning "Esta acción no se puede deshacer."> +<!ENTITY torPreferences.cancel "Cancelar"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Escanear el código QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Puentes incorporados"> +<!ENTITY torPreferences.builtinBridgeDescription "El Navegador Tor incluye algunos tipos específicos de puentes conocidos como "transportes conectables"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "Los obfs4 son un tipo de puente incorporado que hace que tu tráfico en Tor parezca aleatorio. También es menos probable que se bloquee que sus predecesores, los puentes obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake es un puente incorporado que evita la censura enrutando tu conexión a través de proxies Snowflake, administrados por voluntarios."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure es un puente incorporado que hace que parezca que estás usando un sitio web de Microsoft en lugar de usar Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Solicitar Puente"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contactando con BridgeDB. Espera por favor."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resuelve el CAPTCHA para solicitar un puente."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solución no es correcta. Por favor, inténtalo de nuevo."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Proporcionar el puente"> +<!ENTITY torPreferences.provideBridgeHeader "Introduce la información del puente desde una fuente de confianza"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Configuración de conexión"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configurar cómo el Navegador Tor se conecta a Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Valores separados por coma"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Registros de Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "No conectado"> +<!ENTITY torConnect.connectingConcise "Conectando..."> +<!ENTITY torConnect.tryingAgain "Intentando de nuevo…"> +<!ENTITY torConnect.noInternet "El Navegador Tor no pudo acceder a Internet"> +<!ENTITY torConnect.noInternetDescription "Esto se podría deber a un problema de conexión más que al bloqueo de Tor. Verifica la configuración de la conexión a Internet, proxy y firewall antes de volver a intentarlo."> +<!ENTITY torConnect.couldNotConnect "El Navegador Tor no pudo conectarse a Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configurar la conexión"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Si Tor está bloqueado en tu ubicación, probar un puente puede ayudar. El asistente de conexión puede elegir uno por ti usando tu ubicación, o puedes #1 manualmente en su lugar."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Probando un puente..."> +<!ENTITY torConnect.tryingBridgeAgain "Intentando una vez más…"> +<!ENTITY torConnect.errorLocation "El Navegador Tor no pudo localizarte"> +<!ENTITY torConnect.errorLocationDescription "El Navegador Tor necesita saber tu ubicación para elegirte el puente adecuado. Si prefieres no compartir la ubicación, #1 manualmente en su lugar."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "¿Son correctas estas configuraciones de ubicación?"> +<!ENTITY torConnect.isLocationCorrectDescription "El navegador Tor aún no ha podido conectarse a Tor. Verifica que la configuración de tu ubicación sea correcta e intentalo de nuevo, o #1 en su lugar."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "El navegador Tor aún no se puede conectar"> +<!ENTITY torConnect.finalErrorDescription "A pesar de todos sus intentos, el asistente de conexión no ha podido conectarse a Tor. Intenta solucionar los problemas de tu conexión y añade un puente manualmente."> +<!ENTITY torConnect.breadcrumbAssist "El asistente de conexión"> +<!ENTITY torConnect.breadcrumbLocation "Configuración del lugar"> +<!ENTITY torConnect.breadcrumbTryBridge "Intenta un puente"> +<!ENTITY torConnect.automatic "Automática"> +<!ENTITY torConnect.selectCountryRegion "Seleccionar País o Región"> +<!ENTITY torConnect.frequentLocations "Ubicaciones seleccionadas con frecuencia"> +<!ENTITY torConnect.otherLocations "Otras ubicaciones"> +<!ENTITY torConnect.restartTorBrowser "Reiniciar el Navegador Tor"> +<!ENTITY torConnect.configureConnection "Configurar la conexión..."> +<!ENTITY torConnect.viewLog "Ver registros..."> +<!ENTITY torConnect.tryAgain "Volver a intentar"> +<!ENTITY torConnect.offline "Internet no accesible"> +<!ENTITY torConnect.connectMessage "Los cambios en la configuración de Tor no tendrán efecto hasta que te conectes."> +<!ENTITY torConnect.tryAgainMessage "Fallo del Navegador Tor al establecer conexión con la Red Tor."> +<!ENTITY torConnect.yourLocation "Su ubicación"> +<!ENTITY torConnect.tryBridge "Probar un puente"> +<!ENTITY torConnect.autoBootstrappingFailed "Falló la configuración automática"> +<!ENTITY torConnect.autoBootstrappingFailed "Falló la configuración automática"> +<!ENTITY torConnect.cannotDetermineCountry "Incapaz de determinar el país del usuario"> +<!ENTITY torConnect.noSettingsForCountry "No hay ajustes disponibles para tu ubicación"> diff --git a/toolkit/torbutton/chrome/locale/es-ES/onboarding.properties b/toolkit/torbutton/chrome/locale/es-ES/onboarding.properties new file mode 100644 index 000000000000..879456b9fa08 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=¿Nuevo en %S?\nComencemos. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S es totalmente nuevo.\n¡Vea lo que puede hacer! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Cerrar +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Ocultar +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Completado diff --git a/toolkit/torbutton/chrome/locale/es-ES/torbutton.dtd b/toolkit/torbutton/chrome/locale/es-ES/torbutton.dtd new file mode 100644 index 000000000000..006e1eadc714 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nueva identidad"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nueva identidad"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Nuevo circuito Tor para este sitio"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nuevo circuito Tor para este sitio"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Configuración de red Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "R"> +<!ENTITY torbutton.context_menu.downloadUpdate "Comprobar actualización del Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "a"> +<!ENTITY torbutton.context_menu.cookieProtections "Protecciones de cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "g"> +<!ENTITY torbutton.button.tooltip "Haga clic para inicializar Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Configuración de seguridad del Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Administrar protecciones de cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "Protegidas"> +<!ENTITY torbutton.cookiedialog.domainCol "Servidor (host)"> +<!ENTITY torbutton.cookiedialog.nameCol "Nombre"> +<!ENTITY torbutton.cookiedialog.pathCol "Ruta"> +<!ENTITY torbutton.cookiedialog.protectCookie "Proteger cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Eliminar cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Desproteger cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Eliminar todas excepto las protegidas"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Proteger las nuevas cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "No proteger las nuevas cookies"> +<!ENTITY torbutton.prefs.sec_caption "Nivel de seguridad"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "El control deslizante del nivel de seguridad te permite deshabilitar ciertas características del navegador que pueden hacerlo más vulnerable a tentativas de hackeo."> +<!ENTITY torbutton.prefs.sec_standard_label "Estándar"> +<!ENTITY torbutton.prefs.sec_standard_description "Están habilitadas todas las características de Tor Browser y sitio web."> +<!ENTITY torbutton.prefs.sec_safer_label "Más seguro"> +<!ENTITY torbutton.prefs.sec_safer_description "Deshabilita características del sitio web que a menudo son peligrosas, lo que causa que algunos sitios pierdan funcionalidad."> +<!ENTITY torbutton.prefs.sec_safer_list_label "En la configuración 'más segura':"> +<!ENTITY torbutton.prefs.sec_safest_label "El más seguro de todos"> +<!ENTITY torbutton.prefs.sec_safest_description "Sólo permite las características de sitio web requeridas para sitios estáticos y servicios básicos. Estos cambios afectan a imágenes, medios, y scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "En la configuración de Nivel de seguridad 'El más seguro de todos':"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Conocer más"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript está deshabilitado en sitios no-HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript está deshabilitado por defecto en todos los sitios."> +<!ENTITY torbutton.prefs.sec_limit_typography "Algunas fuentes y símbolos matemáticos están deshabilitados."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Algunas fuentes, iconos, símbolos matemáticos, e imágenes están deshabilitados."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio y vídeo (HTML5 media), y WebGL son click-to-play."> +<!ENTITY torbutton.prefs.sec_custom_warning "Personalizado"> +<!ENTITY torbutton.prefs.sec_overview "Deshabilita ciertas funciones web que se pueden usar para atacar tu seguridad y anonimato."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Nivel de seguridad: Estándar"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Nivel de seguridad: Más seguro"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Nivel de seguridad: El más seguro de todos"> +<!ENTITY torbutton.prefs.sec_custom_summary "Tus preferencias personalizadas para el navegador han resultado en una configuración de seguridad inusual. Por motivos de seguridad y privacidad, te recomendamos uno de los de los niveles de seguridad predeterminados."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Restaurar valores predeterminados"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Configuración de seguridad avanzada ..."> +<!ENTITY torbutton.prefs.sec_change "Cambiar..."> +<!ENTITY torbutton.circuit_display.title "Circuito Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Nuevo Circuito para este Sitio"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Abre el cliente de autentificación de servicios onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Recuerda esta clave"> diff --git a/toolkit/torbutton/chrome/locale/es-ES/torbutton.properties b/toolkit/torbutton/chrome/locale/es-ES/torbutton.properties new file mode 100644 index 000000000000..5180c749243f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP desconocida +torbutton.circuit_display.onion_site = Sitio onion +torbutton.circuit_display.this_browser = Este navegador +torbutton.circuit_display.relay = Repetidor +torbutton.circuit_display.tor_bridge = Repetidor puente (bridge) +torbutton.circuit_display.unknown_country = País desconocido +torbutton.circuit_display.guard = Protección +torbutton.circuit_display.guard_note = Tu nodo [de protección] no puede cambiar. +torbutton.circuit_display.learn_more = Conocer más +torbutton.circuit_display.click_to_copy = Click para copiar +torbutton.circuit_display.copied = ¡Copiado! +torbutton.content_sizer.margin_tooltip = El Tor Browser añade este margen para hacer el ancho y el alto de tu ventana menos especial, y reducir de esta forma la posibilidad de rastrearte en línea. +extensions.torbutton@torproject.org.description = Torbutton proporciona un botón para configurar las preferencias de Tor y limpiar rápida y fácilmente los datos de navegación privada. +torbutton.popup.external.title = ¿Descargar un tipo de archivo externo? +torbutton.popup.external.app = El Tor Browser no puede mostrar este archivo. Tendrás que abrirlo con otra aplicación.\n\n +torbutton.popup.external.note = Algunos tipos de archivos pueden hacer que ciertas aplicaciones se conecten a Internet sin usar Tor.\n\n +torbutton.popup.external.suggest = Para estar seguro, deberías abrir únicamente los archivos descargados cuando no esté conectado, o usar un Live CD (autoarrancable) de Tor como Tails.\n +torbutton.popup.launch = Descargar archivo +torbutton.popup.cancel = Cancelar +torbutton.popup.dontask = Descargar archivos automáticamente a partir de ahora +torbutton.popup.no_newnym = Torbutton no puede darte una nueva identidad (instancia de Tor) de forma segura. No tiene acceso al puerto de control de Tor (ControlPort)\n\n¿Estás ejecutando el Tor Browser Bundle? +torbutton.security_settings.menu.title = Configuración de seguridad +torbutton.title.prompt_torbrowser = Información importante sobre Torbutton +torbutton.popup.prompt_torbrowser = Torbutton ahora funciona de manera diferente: ya no lo podrás apagar. \n \nHicimos este cambio porque no es seguro utilizar Torbutton en un navegador que también se utilice para navegar sin Tor. Hubo tantos fallos con esto que no pudimos arreglarlo de otro modo. \n \nSi quieres seguir usando Firefox normalmente, deberías desinstalar Torbutton y descargar el Tor Browser Bundle (paquete). Las propiedades de privacidad del Tor Browser son superiores a las [...] +torbutton.popup.short_torbrowser = ¡Información importante sobre Torbutton! \n \nTorbutton ahora está siempre encendido. \n \nHaga clic en (el botón de) Torbutton para más información. + +torbutton.popup.confirm_plugins = Complementos (plugins) como Flash pueden dañar tu privacidad y anonimato.\n\nTambién pueden esquivar Tor revelando tu ubicación y dirección IP actuales.\n\n¿Estás seguro de que quieres habilitar los complementos?\n\n +torbutton.popup.never_ask_again = No me vuelvas a preguntar +torbutton.popup.confirm_newnym = El Navegador Tor cerrará todas las ventanas y pestañas. Todas las sesiones de sitios web se perderán.\n\n¿Reiniciar el Navegador Tor para restablecer tu identidad?\n\n + +torbutton.maximize_warning = Maximizar el Tor Browser puede permitir a los sitios web determinar el tamaño de tu monitor, lo que podría usarse para rastrearte. Te recomendamos que dejes las ventanas del Tor Browser en su tamaño predeterminado. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Este sitio web (%s) intentó extraer datos de imagen de un lienzo HTML5, que podrían usarse para identificar de forma única su computadora.\n\n¿Debe permitir el Tor Browser a este sitio web extraer los datos de imagen de lienzos HTML5? +canvas.notNow=Ahora no +canvas.notNowAccessKey=N +canvas.allow=Permitir en el futuro +canvas.allowAccessKey=P +canvas.never=Nunca para este sitio (recomendado) +canvas.neverAccessKey=u + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problema del perfil %S +profileReadOnly=No puede ejecutar %S desde un sistema de archivos de solo-lectura. Copie %S a otra ubicación antes de intentar usarlo. +profileReadOnlyMac=No puede ejecutar %S desde un sistema de archivos de solo-lectura. Copie %S a su escritorio o la carpeta de aplicaciones antes de intentar usarlo. +profileAccessDenied=%S no tiene permiso para acceder al perfil. Ajuste los permisos de su sistema de archivos e inténtelo de nuevo. +profileMigrationFailed=Ha ocurrido un error en la migración de tu perfil %S. \nSe usarán los nuevos ajustes. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Descargando %S de la actualización + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Conexión cifrada (Servicio cebolla, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=Conexión cifrada (Servicio cebolla) +pageInfo_OnionName=Nombre de la cebolla: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Conocer más +onionServices.errorPage.browser=Navegador +onionServices.errorPage.network=Red +onionServices.errorPage.onionSite=Sitio cebolla +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problemas cargando el sitio cebolla +onionServices.descNotFound.header=No se encuentra el sitio cebolla +onionServices.descNotFound=La causa más probable es que el sitio cebolla esté fuera de línea. Contacta con su administrador. +onionServices.descNotFound.longDescription=Detalles: %S - El descriptor del servicio de onion solicitado no se encuentra en el hashring y por lo tanto el servicio no está accesible para el cliente. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problemas al cargar el sitio cebolla +onionServices.descInvalid.header=No se puede acceder al sitio cebolla +onionServices.descInvalid=El sitio cebolla está inaccesible debido a un error interno. +onionServices.descInvalid.longDescription=Detalles: %S — El descriptor de servicio cebolla solicitado no se puede analizar o la validación de la firma falló. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problemas cargando el sitio cebolla +onionServices.introFailed.header=Se ha desconectado el sitio cebolla +onionServices.introFailed=La causa más probable es que el sitio cebolla esté fuera de línea. Contacta con su administrador. +onionServices.introFailed.longDescription=Detalles: %S - La introducción falló, lo que significa que el descriptor fue encontrado pero el servicio ya no está conectado al punto de introducción. Es probable que el servicio haya cambiado su descriptor o que no esté funcionando. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problema cargando el sitio cebolla +onionServices.rendezvousFailed.header=No se pudo conectar al sitio cebolla +onionServices.rendezvousFailed=El sitio cebolla está ocupado o la red Tor está sobrecargada. Inténtalo más tarde. +onionServices.rendezvousFailed.longDescription=Detalles: %S - El cliente no encontró el servicio, lo que significa que el cliente no pudo finalizar la conexión. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Se requiere autorización +onionServices.clientAuthMissing.header=El sitio cebolla requiere autorización +onionServices.clientAuthMissing=El acceso al sitio cebolla necesita una clave, pero no se ha proporcionado ninguna. +onionServices.clientAuthMissing.longDescription=Detalles: %S - El cliente descargó el descriptor de servicio de cebolla solicitado, pero no pudo descifrar su contenido porque falta la información de autorización del cliente. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Falló la autorización +onionServices.clientAuthIncorrect.header=Falló la autenticación del sitio cebolla +onionServices.clientAuthIncorrect=La clave proporcionada es incorrecta o ha sido revocada. Contacta con el administrador del sitio cebolla. +onionServices.clientAuthIncorrect.longDescription=Detalles: %S - El cliente pudo descargar el descriptor de servicio de cebolla solicitado pero no pudo descifrar su contenido usando la información de autorización del cliente proporcionada. Esto puede significar que el acceso ha sido revocado. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problemas al cargar sitio cebolla +onionServices.badAddress.header=Dirección de sitio cebolla inválida +onionServices.badAddress=La dirección del sitio cebolla no es válida. Por favor, comprueba que la has introducido correctamente. +onionServices.badAddress.longDescription=Detalles: %S — La dirección .onion proporcionada es inválida. Este error se da debido a una de las siguientes razones: la suma de comprobación de la dirección no coincide, la clave pública ed25519 es inválida, o la codificación es inválida. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problema cargando el sitio cebolla +onionServices.introTimedOut.header=La creación del circuito al sitio cebolla ha agotado el tiempo preestablecido +onionServices.introTimedOut=Ha fallado la conexión al sitio cebolla, posiblemente debido a una mala conexión de red. +onionServices.introTimedOut.longDescription=Detalles: %S — Se ha agotado la conexión solicitada con el servicio cebolla, mientras se intentaba construir el circuito de encuentro. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S está pidiendo que te acredites. +onionServices.authPrompt.keyPlaceholder=Introduce tu clave privada para este servicio cebolla +onionServices.authPrompt.done=Listo +onionServices.authPrompt.doneAccessKey=r +onionServices.authPrompt.invalidKey=Introduce una clave válida (52 caracteres base32 o 44 caracteres base64) +onionServices.authPrompt.failedToSetKey=Imposible configurar Tor con tu clave +onionServices.authPreferences.header=Autenticación de Servicios Cebolla +onionServices.authPreferences.overview=Algunos servicios cebolla requieren que te identifiques con una clave (un tipo de contraseña) antes de poder acceder a ellos. +onionServices.authPreferences.savedKeys=Claves guardadas... +onionServices.authPreferences.dialogTitle=Claves de Servicio Cebolla +onionServices.authPreferences.dialogIntro=Claves para los siguientes sitios de cebolla se almacenan en tu ordenador. +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Clave +onionServices.authPreferences.remove=Eliminar +onionServices.authPreferences.removeAll=Eliminar todo +onionServices.authPreferences.failedToGetKeys=No se pueden descargar las claves de Tor +onionServices.authPreferences.failedToRemoveKey=No se puede quitar la clave +onionServices.v2Deprecated.pageTitle=Advertencia de obsolescencia del sitio cebolla V2 +onionServices.v2Deprecated.header=Pronto los sitios cebolla Versión 2 quedarán obsoletos +onionServices.v2Deprecated=Pronto no será accesible este sitio cebolla. Por favor, contacta con el administrador del sitio y anímale a actualizar. +onionServices.v2Deprecated.longDescription=Tor terminará su apoyo a los servicios cebolla versión 2 a partir de julio de 2021, y este sitio cebolla ya no será accesible en esta dirección. Si eres el administrador del sitio, actualízalo lo antes posible a la versión 3. +onionServices.v2Deprecated.tryAgain=Entendido +onionServices.v2Deprecated.tooltip=Este sitio onion pronto no será accesible + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Priorizar siempre sitios cebolla +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Ahora no +onionLocation.notNowAccessKey=b +onionLocation.description=Hay una versión más privada y segura de este sitio disponible en la red Tor a través de los servicios cebolla. Los servicios cebolla ayudan a los editores de sitios web y a sus visitantes a derrotar la vigilancia y la censura. +onionLocation.tryThis=Prueba los servicios cebolla +onionLocation.onionAvailable=.onion disponible +onionLocation.learnMore=Saber más +onionLocation.always=Siempre +onionLocation.askEverytime=Preguntar siempre +onionLocation.prioritizeOnionsDescription=Priorizar los sitios .onion cuando se conozcan. +onionLocation.onionServicesTitle=Servicios cebolla + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Se ha copiado de un sitio web inseguro una dirección de criptomoneda (%S). Podría haber sido modificada. +cryptoSafetyPrompt.whatCanHeading=¿Qué puedes hacer? +cryptoSafetyPrompt.whatCanBody=Puedes conectar con un nuevo circuito para establecer una conexión segura, o aceptar el riesgo y descartar esta advertencia. +cryptoSafetyPrompt.learnMore=Aprende más +cryptoSafetyPrompt.primaryAction=Recargar Tab con un nuevo circuito +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Ignorar advertencia +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceda con precaución +rulesets.warningDescription=Agregar o modificar conjuntos de reglas puede hacer que los atacantes secuestren tu navegador. Continúa sólo si sabes lo que estás haciendo. +rulesets.warningEnable=Avisarme cuando intente acceder a estas preferencias +rulesets.warningButton=Aceptar el riesgo y continuar +# Ruleset list +rulesets.rulesets=Conjunto de reglas +rulesets.noRulesets=No se ha encontrado ningún conjunto de reglas +rulesets.noRulesetsDescr=Cuando guardes un conjunto de reglas en el Navegador Tor, aparecerá aquí. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Última actualización %S +rulesets.neverUpdated=Nunca se ha actualizado o ha fallado la última actualización +rulesets.enabled=Activado +rulesets.disabled=Deshabilitado +# Ruleset details/edit ruleset +rulesets.edit=Editar +rulesets.name=Nombre +rulesets.jwk=JWK +rulesets.pathPrefix=Prefijo de Ruta +rulesets.scope=Ámbito +rulesets.enable=Habilitar este conjunto de reglas +rulesets.checkUpdates=Buscar actualizaciones +rulesets.jwkPlaceholder=La clave utilizada para firmar este conjunto de reglas en el formato JWK (JSON Web Key) +rulesets.jwkInvalid=El JWK no se pudo analizar o no es una clave válida +rulesets.pathPrefixPlaceholder=Prefijo URL que contiene los archivos que necesita el conjunto de reglas +rulesets.pathPrefixInvalid=El prefijo de la ruta no es una URL HTTP(S) válida +rulesets.scopePlaceholder=Expresión regular para el alcance de las reglas +rulesets.scopeInvalid=El alcance no se pudo analizar como una expresión regular +rulesets.save=Guardar +rulesets.cancel=Cancelar diff --git a/toolkit/torbutton/chrome/locale/es-ES/torlauncher.properties b/toolkit/torbutton/chrome/locale/es-ES/torlauncher.properties new file mode 100644 index 000000000000..217b3885b1d0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/es-ES/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Arranque de Tor + +torlauncher.tor_exited_during_startup=Tor se cerró durante el arranque. Esto se podría deber a un error en tu archivo torrc, un fallo en Tor o en otro programa de tu sistema, o a hardware defectuoso. Hasta que soluciones el problema subyacente y reinices Tor, el Tor Browser no se iniciará. +torlauncher.tor_exited=Tor se cerró inesperadamente. Esto podría deberse a un fallo con el propio Tor, con otro programa de su sistema, o por hardware defectuoso. Hasta que reinicie Tor, el Tor Browser no podrá abrir ningún sitio web. Si el problema persiste, por favor envíe una copia de su Registro de Tor (log) al equipo de soporte. +torlauncher.tor_exited2=Al reiniciar Tor no se cerrarán las pestañas de tu navegador. +torlauncher.tor_controlconn_failed=No se pudo conectar al puerto de control de Tor +torlauncher.tor_failed_to_start=Tor no pudo iniciarse. +torlauncher.tor_control_failed=Fallo al tomar control de Tor. +torlauncher.tor_bootstrap_failed=Tor no pudo establecer una conexión a la red Tor. +torlauncher.tor_bootstrap_failed_details=%1$S falló (%2$S). + +torlauncher.unable_to_start_tor=Imposible iniciar Tor.\n\n%S +torlauncher.tor_missing=No se encuentra el archivo ejecutable de Tor. +torlauncher.torrc_missing=No existe el archivo torcc y no puede ser creado. +torlauncher.datadir_missing=El directorio de datos de Tor no existe y no puede ser creado +torlauncher.onionauthdir_missing=El directorio de autenticación onion de Tor no existe y no se pudo crear. +torlauncher.password_hash_missing=Fallo al obtener la contraseña cifrada. + +torlauncher.failed_to_get_settings=No se pudo recuperar las preferencias de Tor.\n\n%S +torlauncher.failed_to_save_settings=No fue posible guardar los ajustes de Tor.\n\n%S +torlauncher.ensure_tor_is_running=Por favor, asegúrese de que Tor se está ejecutando. + +torlauncher.error_proxy_addr_missing=Tiene que especificar tanto una dirección IP o nombre de máquina ('hostname') como un número de puerto para configurar Tor para que utilice un 'proxy' para acceder a la Internet. +torlauncher.error_proxy_type_missing=Debe seleccionar el tipo de 'proxy'. +torlauncher.error_bridges_missing=Debe especificar uno o más puentes ('bridges'). +torlauncher.error_default_bridges_type_missing=Debes seleccionar un tipo de transporte para los repetidores puente ('bridges') proporcionados. +torlauncher.error_bridgedb_bridges_missing=Por favor solicita un puente. +torlauncher.error_bridge_bad_default_type=No hay disponible ningún repetidor puente proporcionado que tenga el tipo de transporte %S. Por favor ajuste sus preferencias. + +torlauncher.bridge_suffix.meek-amazon=(funciona en China) +torlauncher.bridge_suffix.meek-azure=(funciona en China) + +torlauncher.request_a_bridge=Solicitar un puente... +torlauncher.request_a_new_bridge=Solicitar un nuevo puente... +torlauncher.contacting_bridgedb=Contactando con BridgeDB. Espera por favor. +torlauncher.captcha_prompt=Resuelve el CAPTCHA para solicitar un puente. +torlauncher.bad_captcha_solution=La solución no es correcta. Por favor, inténtalo de nuevo. +torlauncher.unable_to_get_bridge=No se pudo obtener un puente desde BridgeDB.\n\n%S +torlauncher.no_meek=Este navegador no está configurado para meek, que es necesario para obtener puentes. +torlauncher.no_bridges_available=No hay puentes de red disponibles en este momento. Lo sentimos. + +torlauncher.connect=Conectar +torlauncher.restart_tor=Reiniciar Tor +torlauncher.quit=Salir +torlauncher.quit_win=Salir +torlauncher.done=Listo + +torlauncher.forAssistance=Para obtener ayuda, contacta con %S +torlauncher.forAssistance2=Para asistencia, visita %S + +torlauncher.copiedNLogMessages=Copia completada. %S mensajes de registro ('log') de Tor están listos para ser pegados en un editor de texto o en un mensaje de correo electrónico. + +torlauncher.bootstrapStatus.starting=Comenzando +torlauncher.bootstrapStatus.conn_pt=Conectando al puente +torlauncher.bootstrapStatus.conn_done_pt=Conectado al puente +torlauncher.bootstrapStatus.conn_proxy=Conectando al proxy +torlauncher.bootstrapStatus.conn_done_proxy=Conectado al proxy +torlauncher.bootstrapStatus.conn=Conectando a un repetidor Tor +torlauncher.bootstrapStatus.conn_done=Conectado al repetidor Tor +torlauncher.bootstrapStatus.handshake=Negociando con un repetidor Tor +torlauncher.bootstrapStatus.handshake_done=Terminando la negociación con un repetidor Tor +torlauncher.bootstrapStatus.onehop_create=Estableciendo una conexión cifrada con el repositorio de repetidores +torlauncher.bootstrapStatus.requesting_status=Recopilando el estado de la red +torlauncher.bootstrapStatus.loading_status=Cargando el estado de la red +torlauncher.bootstrapStatus.loading_keys=Cargando los certificados de autoridades +torlauncher.bootstrapStatus.requesting_descriptors=Solicitando información del repetidor +torlauncher.bootstrapStatus.loading_descriptors=Cargando la información del repetidor +torlauncher.bootstrapStatus.enough_dirinfo=Cargada la información de repetidor +torlauncher.bootstrapStatus.ap_conn_pt=Construyendo circuitos. Conectando a un puente. +torlauncher.bootstrapStatus.ap_conn_done_pt=Construyendo circuitos. Conectando a un puente. +torlauncher.bootstrapStatus.ap_conn_proxy=Construyendo circuitos: Conectando a un proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Construyendo circuitos. Conectando a un proxy +torlauncher.bootstrapStatus.ap_conn=Construyendo circuitos. Conectando a un repetidor Tor +torlauncher.bootstrapStatus.ap_conn_done=Construyendo circuitos. Conectado a un repetidor Tor +torlauncher.bootstrapStatus.ap_handshake=Construyendo circuitos. Negociando con un repetidor Tor +torlauncher.bootstrapStatus.ap_handshake_done=Construyendo circuitos. Terminada la negociación con un repetidor de Tor +torlauncher.bootstrapStatus.circuit_create=Construyendo circuitos. Estableciendo un circuito Tor +torlauncher.bootstrapStatus.done=¡Conectado a la red Tor! + +torlauncher.bootstrapWarning.done=terminado +torlauncher.bootstrapWarning.connectrefused=conexión rechazada +torlauncher.bootstrapWarning.misc=miscelánea +torlauncher.bootstrapWarning.resourcelimit=recursos insuficientes +torlauncher.bootstrapWarning.identity=las identidades no coinciden +torlauncher.bootstrapWarning.timeout=tiempo de espera de conexión agotado +torlauncher.bootstrapWarning.noroute=no hay ruta hacia el servidor ('host') +torlauncher.bootstrapWarning.ioerror=error de lectura/escritura +torlauncher.bootstrapWarning.pt_missing=transporte plugable no encontrado + +torlauncher.nsresult.NS_ERROR_NET_RESET=La conexión al servidor se perdió. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=No se pudo conectar al servidor. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=No se pudo conectar al proxy. + +torlauncher.copiedNLogMessagesShort=%S registros copiados diff --git a/toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd new file mode 100644 index 000000000000..315ad50fdb82 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; توسعه یافته توسط"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink " &vendorShortName;"> +<!ENTITY project.end "، کوششی غیر انتفاعی برای دفاع از حریم خصوصی شما و آزادی در اینترنت است."> + +<!ENTITY help.start "آیا میخواهید کمک کنید؟"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "همیاری کنید"> +<!ENTITY help.or "یا"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "دست اندر کار شوید!"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "پرسشی دارید؟"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "به رشد شبکهی تور کمک کنید!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "مجوزها"> +<!ENTITY tor.TrademarkStatement "'Tor' و 'لوگوی Onion' علامت های تجاری ثبت شده از پروژهی تور هستند."> diff --git a/toolkit/torbutton/chrome/locale/fa/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/fa/aboutTBUpdate.dtd new file mode 100644 index 000000000000..55aaed87ecad --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "گزارش تغییرات Tor Browser"> +<!ENTITY aboutTBUpdate.updated "مرورگر Tor بهروز شده است."> +<!ENTITY aboutTBUpdate.linkPrefix "به منظور جدیدترین اطلاعات دربارهی این نسخه،"> +<!ENTITY aboutTBUpdate.linkLabel "از وبسایت ما دیدن کنید"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "نسخه"> +<!ENTITY aboutTBUpdate.releaseDate "تاریخ انتشار"> +<!ENTITY aboutTBUpdate.releaseNotes "توضیحات انتشار"> diff --git a/toolkit/torbutton/chrome/locale/fa/aboutTor.dtd b/toolkit/torbutton/chrome/locale/fa/aboutTor.dtd new file mode 100644 index 000000000000..e9b82d120929 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "دربارهٔ Tor"> + +<!ENTITY aboutTor.viewChangelog.label "دیدن گزارش تغییرات"> + +<!ENTITY aboutTor.ready.label "کاوش کنید. بطور خصوصی."> +<!ENTITY aboutTor.ready2.label "شما برای تجربهٔ خصوصیترین مرور اینترنت در جهان آماده هستید."> +<!ENTITY aboutTor.failure.label "خطایی رخ داد!"> +<!ENTITY aboutTor.failure2.label "Tor با این مرورگر کار نمیکند."> + +<!ENTITY aboutTor.search.label "جستجو با DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "سؤالات؟"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "بررسی راهنمای مرورگر Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "راهنمای مرورگر Tor"> + +<!ENTITY aboutTor.tor_mission.label "پروژهٔ Tor یک سازمان غیرانتفاعی US 501(c)(3) برای پیشبرد حقوق بشر و آزادی با ایجاد و استقرار تکنولوژیهای ناشناسکننده و حریم خصوصی متنباز است که از در دسترس بودن و استفادهٔ نامحدود و گسترش درک علمی و عمومی آنان حمایت میکند."> +<!ENTITY aboutTor.getInvolved.label "مشارکت کنید »"> + +<!ENTITY aboutTor.newsletter.tagline "آخرین اخبار Tor را در صندوق ورودی خود دریافت کنید."> +<!ENTITY aboutTor.newsletter.link_text "ثبتنام برای اخبار Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor برای استفاده رایگان است، این به خاطر حمایت افرادی مانند شماست."> +<!ENTITY aboutTor.donationBanner.buttonA "اکنون حمایت کنید"> + +<!ENTITY aboutTor.alpha.ready.label "آزمایش کنید. به طور دقیق."> +<!ENTITY aboutTor.alpha.ready2.label "شما آماده آزمایش خصوصیترین تجربه مرورگر جهان هستید."> +<!ENTITY aboutTor.alpha.bannerDescription "مرورگر تور آلفا یک نسخه ناپایدار از مرورگر تور است که میتوانید از آن برای پیشنمایش ویژگیهای جدید، آزمایش عملکرد آنها و ارائه بازخورد قبل از انتشار استفاده کنید."> +<!ENTITY aboutTor.alpha.bannerLink "هرگونه اشکال را در تالار گفتگوی تور گزارش کنید"> + +<!ENTITY aboutTor.nightly.ready.label "آزمایش کنید. به طور کامل."> +<!ENTITY aboutTor.nightly.ready2.label "شما آماده آزمایش خصوصیترین تجربه مرورگر جهان هستید."> +<!ENTITY aboutTor.nightly.bannerDescription " مرورگر Tor Nightly یک نسخه ناپایدار از مرورگر Tor است که میتوانید از آن برای پیشنمایش ویژگیهای جدید، آزمایش عملکرد آنها و ارائه بازخورد قبل از انتشار استفاده کنید."> +<!ENTITY aboutTor.nightly.bannerLink "هرگونه اشکال را در تالار گفتگوی تور گزارش کنید"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "قدرت گرفته توسط PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "مقاومت"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "تحول"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "آزادی"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "کمک مالی در همین لحظه"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "کمک مالی شما توسط دوستان تور، تا مبلغ 100,000$ مورد همخوانسازی قرار خواهد گرفت."> diff --git a/toolkit/torbutton/chrome/locale/fa/brand.dtd b/toolkit/torbutton/chrome/locale/fa/brand.dtd new file mode 100644 index 000000000000..24b51e1fd11f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "مرورگر Tor"> +<!ENTITY brandShortName "مرورگر Tor"> +<!ENTITY brandFullName "مرورگر Tor"> +<!ENTITY vendorShortName "پروژهٔ Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' و 'Onion Logo' علامت های تجاری ثبت شده از پروژه Tor هستند"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "مرورگر تور"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "کلیک کنید تا لود شود سیستم نصب پلاگین ها"> +<!ENTITY plugins.installed.enable "فعال کردن پلاگین ها"> +<!ENTITY plugins.installed.disable "غیر فعال کردن پلاگین ها"> +<!ENTITY plugins.installed.disable.tip "کلیک کنید تا جلوگیری شود از لود شدن سیستم نصب پلاگین ها"> diff --git a/toolkit/torbutton/chrome/locale/fa/brand.properties b/toolkit/torbutton/chrome/locale/fa/brand.properties new file mode 100644 index 000000000000..acf0b6babbcf --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=مرورگر Tor +brandShortName=مرورگر Tor +brandFullName=مرورگر Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=مرورگر تور +vendorShortName=پروژه Tor + +homePageSingleStartMain=شروع بکار فایرفاکس، یک صفحه اصلی با قابلیت کادر جستجو ایجاد شد. +homePageImport=درونریزی صفحه خانگی از %S + +homePageMigrationPageTitle=انتخاب صفحه اصلی +homePageMigrationDescription=لطفا صفحه اصلی مورد نظر خود را انتخاب کنید: + +syncBrandShortName=همگام سازی diff --git a/toolkit/torbutton/chrome/locale/fa/branding/brand.ftl b/toolkit/torbutton/chrome/locale/fa/branding/brand.ftl new file mode 100644 index 000000000000..67f426def3a4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = مرورگر Tor +-brand-short-name = مرورگر Tor +-brand-full-name = مرورگر Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = مرورگر تور +-vendor-short-name = پروژه Tor +trademarkInfo = 'Tor' و 'Onion Logo' علامت های تجاری ثبت شده از پروژه Tor هستند diff --git a/toolkit/torbutton/chrome/locale/fa/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/fa/browserOnboarding.properties new file mode 100644 index 000000000000..3afc18b367d6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=خوش آمدید +onboarding.tour-tor-welcome.title=شما آماده هستید. +onboarding.tour-tor-welcome.description=مرورگر Tor در هنگام مرورگری وب بالاترین استاندارد در حریم شخصی و امنیت را به شما ارائه میدهد. شما حالا در برابر ردیابی, زیرنظر داشتن و سانسور محافظت میشوید. چگونگی این امر توسط این پذیرش سازمانی سریع به شما نشان داده خواهد شد. +onboarding.tour-tor-welcome.next-button=برو به حریم خصوصی + +onboarding.tour-tor-privacy=حریم خصوصی +onboarding.tour-tor-privacy.title=بو کشنده ها و جاسوس ها +onboarding.tour-tor-privacy.description=مرورگر Tor بعد از هر نشست کلوچه ها و تاریخچه گشت و گذار شما را پاک میکند. اینگونه اصلاحات امنیت و حریم شخصی شما را تضمین میکند. بر روی «شبکه پیازی» کلیک کنید تا یادبگیرید که ما چطور از شما درون شبکه محافظت میکنیم. +onboarding.tour-tor-privacy.button=برو به شبکه Tor + +onboarding.tour-tor-network=شبکه Tor +onboarding.tour-tor-network.title=در یک شبکه توضیع شده سفر کنید. +onboarding.tour-tor-network.description=مرورگر Tor شما را به شبکه Tor متصل میکند که توسط هزاران داوطلب از گوشه گوشه ی جهان برپا شده است. برخلاف وی پی ان در اینجا هیچ نقطه آسیب پذیر مرکزی که باعث خرابی سیستم بشود یا نیاز باشد که به آن اعتماد کنید تا از وب به طور شخصی لذت ببرید وجود ندارد. +onboarding.tour-tor-network.description-para2=جدید: تنظیمات شبکه Tor، شامل قابلیت درخواست پلها، در مناطقی که Tor مسدود شده است، اکنون در قسمت الویتها قابل دسترسی است. +onboarding.tour-tor-network.action-button=تنظیمات شبکه Tor را، میزان کنید. +onboarding.tour-tor-network.button=به نمایش جریان بروید + +onboarding.tour-tor-circuit-display=نمایش جریان +onboarding.tour-tor-circuit-display.title=مسیر خود را ببینید. +onboarding.tour-tor-circuit-display.description=پس از بازدید از هر دامنه، ترافیک شما در چرخه ای از سه رلهی تور در سراسر جهان رمزگذاری میشود. هیچ وبسایتی نمیداند که شما از کجا ارتباط را برقرار کردهاید. شما میتوانید با کلیک بر 'چرخهی جدید برای این سایت' در بخش نمایش چرخه ها، یک چرخهی جدید درخواست کنید. +onboarding.tour-tor-circuit-display.button=مشاهده مسیر من +onboarding.tour-tor-circuit-display.next-button=برو به امنیت + +onboarding.tour-tor-security=امنیت +onboarding.tour-tor-security.title=انتخاب تجربهی شما +onboarding.tour-tor-security.description=همچنین ما تنظیمات اضافی برای بالا بردن امنیت مرورگر شما فراهم کردهایم. تنظیمات امنیت ما به شما اجازه میدهد تا اجزایی که ممکن است برای حمله به رایانه شما استفاده شوند را مسدود کنید. برای مشاهدهی گزینههای مختلفی که وجود دارد، پایین را کلیک کنید. +onboarding.tour-tor-security.description-suffix=نکته: به طور پیش فرض، NoScript و HTTPS در همه جا در نوار ابزار گنجانده نشده است، اما میتوانید نوار ابزار خود را برای افزودن آنها سفارشی کنید. +onboarding.tour-tor-security-level.button=سطح امنیت خود را مشاهده نمایید +onboarding.tour-tor-security-level.next-button=برو به نکات تجربه + +onboarding.tour-tor-expect-differences=نکات تجربه +onboarding.tour-tor-expect-differences.title=انتظار برخی تفاوتها را داشته باشید. +onboarding.tour-tor-expect-differences.description=با تمام امکانات امنیت و حریم خصوصی که Tor فراهم کرده، تجربه شما در حال استفاده از اینترنت ممکن است کمی متفاوت باشد. همه چیز ممکن است کمی آهستهتر باشد و بسته به سطح امنیت شما بعضی اجزا ممکن است کار نکنند یا بارگیری نشوند. ممکن است گاها از شما درخواست شود که انسان بودن و ربات نبودن خود را اثبات کنید. +onboarding.tour-tor-expect-differences.button=مشاهده پرسشگان +onboarding.tour-tor-expect-differences.next-button=به خدمات پیازی بروید + +onboarding.tour-tor-onion-services=خدمات پیازی +onboarding.tour-tor-onion-services.title=بیشتر محافظت شوید. +onboarding.tour-tor-onion-services.description=خدمات پیازی وبگاه هایی هستند که با پسوند «نقطه پیاز» به پایان میرسند. این وبگاه ها محافظت مضاعفی رو مانند: سپر محافظ در برابر سانسور را برای منتشر کنندگان و بازدیدکنندگان فراهم می کنند.\nخدمات پیازی این اجازه را به هر کسی میدهند که محتوا یا خدمت خودشون رو به صورت ناشناس اریه کنند. بر روی پیوند زیر کلیک کنید تا از سایت DockDockGo پیازی بازدید کنید. +onboarding.tour-tor-onion-services.button=یک پیاز را ملاقات کنید. +onboarding.tour-tor-onion-services.next-button=انجام شد + +onboarding.overlay-icon-tooltip-updated2=ببینید چه چیزی جدید است\nدر %S +onboarding.tour-tor-update.prefix-new=جدید +onboarding.tour-tor-update.prefix-updated=بهروزرسانی شد + +onboarding.tour-tor-toolbar=نوار ابزار +onboarding.tour-tor-toolbar-update-9.0.title=خداحافظ دکمه Onion. +onboarding.tour-tor-toolbar-update-9.0.description=ما میخواهیم تجربه شما در استفاده از Tor به صورت کامل درون مرورگر Tor گنجانده شود. +onboarding.tour-tor-toolbar-update-9.0.description-para2=به همین دلیل است که اکنون، به جای استفاده از دکمه Onion، شما میتوانید چرخه Tor خود را از طریق [i] در نوار آدرس ببینید و یک هویت جدید را از طریق دکمه نوار ابزار یا منو [≡] درخواست دهید. +onboarding.tour-tor-toolbar-update-9.0.button=چگونگی درخواست یک هویت جدید +onboarding.tour-tor-toolbar-update-9.0.next-button=برو به شبکه Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=بعدی +onboarding.tor-circuit-display.done=انجام شد +onboarding.tor-circuit-display.one-of-three=۱ از ۳ +onboarding.tor-circuit-display.two-of-three=۲ از ۳ +onboarding.tor-circuit-display.three-of-three=۳ از ۳ + +onboarding.tor-circuit-display.intro.title=مدار ها چگونه کار میکنند؟ +onboarding.tor-circuit-display.intro.msg=مدار ها از بازپخش کنندگانی که به طور تصادفی انتخاب شده اند ساخته شده اند. آنها کامپیوتر های هستند در گوشه گوشه ی دنیا که برای باز پخش ترافیک طور تنظیم شده اند. مدار ها به شما اجازه میدهند که به طور محرمانه به گشت و گذار بپردازید و به سرویس های پیازی متصل شوید. + +onboarding.tor-circuit-display.diagram.title=نمایش جریان +onboarding.tor-circuit-display.diagram.msg=این نمودار بازپخش کنندگانی که مدار اتصال به این وبگاه را تشکیل میدهند را نمایش می دهد. برای جلو گیری از درز فعالیت ها در جاهای مختلف، هر وبگاه یک مدار متفاوت دریافت میکند. + +onboarding.tor-circuit-display.new-circuit.title=آیا مدار جدیدی را می شناسید؟ +onboarding.tor-circuit-display.new-circuit.msg=اگر شما نمی توانید به وبگاهی که در تلاش برای مشاهده آن هستید متصل شوید یا نمی توانید صفحه را به طور کامل بارگیری کنید، می توانید بر روی این دکمه کلیک کنید تا صفحه را از مسیر جدیدی بارگیری کنید. diff --git a/toolkit/torbutton/chrome/locale/fa/network-settings.dtd b/toolkit/torbutton/chrome/locale/fa/network-settings.dtd new file mode 100644 index 000000000000..e3559af07ef4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "تنظیمات شبکه تور"> +<!ENTITY torsettings.wizard.title.default "اتصال به تور"> +<!ENTITY torsettings.wizard.title.configure "تنظیمات شبکه تور"> +<!ENTITY torsettings.wizard.title.connecting "ارتباط پایدار است"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "زبان مرورگر تور"> +<!ENTITY torlauncher.localePicker.prompt "لطفا یک زبان انتخاب کنید."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "برای اتصال به تور بر روی "اتصال" کلیک کنید."> +<!ENTITY torSettings.configurePrompt "اگر شما در کشورهایی هستید که سعی می کنند Tor را سانسور کنند (مانند مصر، چین، ترکیه)، یا اگر از یک شبکه خصوصی که نیاز به یک پروکسی دارد استفاده کنید؛ برای اعمال تنظیمات شبکه روی "پیکربندی" کلیک کنید."> +<!ENTITY torSettings.configure "پیکربندی"> +<!ENTITY torSettings.connect "اتصال"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "در انتظار برای آغاز به کار تور..."> +<!ENTITY torsettings.restartTor "راه اندازی دوباره تور"> +<!ENTITY torsettings.reconfigTor "پیکربندی مجدد"> + +<!ENTITY torsettings.discardSettings.prompt "شما تنظیمات bridge تٌٌر را انجام داده اید و یا از پروکسی محلی استفاده می کنید.  برای برقراری ارتباط مستقیم با شبکه تٌر، این تنظیمات باید حذف گردند."> +<!ENTITY torsettings.discardSettings.proceed "حذف تنظیمات و اتصال"> + +<!ENTITY torsettings.optional "اختیاری"> + +<!ENTITY torsettings.useProxy.checkbox "من برای دسترسی به اینترنت از پروکسی استفاده میکنم."> +<!ENTITY torsettings.useProxy.type "نوع پروکسی"> +<!ENTITY torsettings.useProxy.type.placeholder "یک نوع پروکسی را انتخاب کنید"> +<!ENTITY torsettings.useProxy.address "آدرس"> +<!ENTITY torsettings.useProxy.address.placeholder "آدرس آیپی یا نام میزبان"> +<!ENTITY torsettings.useProxy.port "پورت"> +<!ENTITY torsettings.useProxy.username "نام کاربری"> +<!ENTITY torsettings.useProxy.password "گذرواژه"> +<!ENTITY torsettings.useProxy.type.socks4 "ساکس ۴"> +<!ENTITY torsettings.useProxy.type.socks5 "ساکس ۵"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "به نظر می رسد شبکه ارتباطی شما به اینترنت، از یک فایروال استفاده می کند. یعنی فقط اجازه اتصال از یک سری درگاه های به خصوص را می دهد."> +<!ENTITY torsettings.firewall.allowedPorts "درگاه های مجاز"> +<!ENTITY torsettings.useBridges.checkbox "Tor در کشور من فیلتر یا سانسور شده است"> +<!ENTITY torsettings.useBridges.default "انتخاب یک پل داخلی"> +<!ENTITY torsettings.useBridges.default.placeholder "یک پل انتخاب کنید"> +<!ENTITY torsettings.useBridges.bridgeDB "درخواست یک پل از torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "حروف موجود در تصویر را وارد کنید"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "یک چالش جدید داشته باشید"> +<!ENTITY torsettings.useBridges.captchaSubmit "درخواست"> +<!ENTITY torsettings.useBridges.custom "استفاده از یک پل که آدرس آن را می دانم"> +<!ENTITY torsettings.useBridges.label "اطلاعات پل را از یک منبع مورد اعتماد وارد کنید."> +<!ENTITY torsettings.useBridges.placeholder "نوع آدرس: درگاه - پورت (هر کدام در یک خط)"> + +<!ENTITY torsettings.copyLog "کپی گزارش وقایع Tor"> + +<!ENTITY torsettings.proxyHelpTitle "کمک پروکسی"> +<!ENTITY torsettings.proxyHelp1 "اگر از طریق شبکهی یک شرکت، مدرسه، یا دانشگاه به اینترنت متصل میشوید، ممکن است احتیاج به یک پروکسی داخلی داشته باشید. اگر از احتیاج به پروکسی داخلی مطمئن نیستید، به تنظیمات شبکه یک مرورگر دیگر یا تنظیمات شبکه سیستم خود نگاه کنید."> + +<!ENTITY torsettings.bridgeHelpTitle "کمک برای پل ارتباطی"> +<!ENTITY torsettings.bridgeHelp1 "پلها رلههایی فهرست نشده هستند که مسدودیت ارتباط به شبکه Tor را سختتر میکنند.  هر نوعی از پل از روش مختلفی برای مقابله با سانسور استفاده میکند.  نوع obfs ترافیک شما را شبیه نویزهای راندوم نشان میدهند و نوع meek ترافیک شما را به جای اتصال به Tor، در حال اتصال به آن خدمات نشان میدهد."> +<!ENTITY torsettings.bridgeHelp2 "به دلیل اینکه بعضی کشورها سعی بر مسدودسازی Tor دارند، بعضی از پلها فقط در این کشورها کار میکنند.  اگر مطمئن نیستید که کدام پلها در کشور شما کار میکنند، اینجا را ببینید torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "لطفا صبر کنید. در حال برقراری ارتباط با شبکه تٌر.&160; این پروسه ممکن است چند دقیقه به طول بینجامد."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "اتصال"> +<!ENTITY torPreferences.torSettings "تنظیمات Tor"> +<!ENTITY torPreferences.torSettingsDescription "مرورگر Tor ترافیک شما را از طریق شبکه Tor هدایت میکند، که به واسطه هزاران داوطلب در سراسر جهان به اجرا درآمده است." > +<!ENTITY torPreferences.learnMore "اطلاعات بیشتر"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "اینترنت:"> +<!ENTITY torPreferences.statusInternetTest "آزمایش"> +<!ENTITY torPreferences.statusInternetOnline "روی خط "> +<!ENTITY torPreferences.statusInternetOffline "آفلاین"> +<!ENTITY torPreferences.statusTorLabel "شبکه تور:"> +<!ENTITY torPreferences.statusTorConnected "متصل"> +<!ENTITY torPreferences.statusTorNotConnected "عدم اتصال"> +<!ENTITY torPreferences.statusTorBlocked "بالقوه مسدود است"> +<!ENTITY torPreferences.learnMore "اطلاعات بیشتر"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "شروع سریع"> +<!ENTITY torPreferences.quickstartDescriptionLong "شروع سریع، بر اساس آخرین تنظیمات اتصال استفادهشده توسط شما، در هنگام راهاندازی مرورگر تور را به طور خودکار به شبکه تور متصل میکند."> +<!ENTITY torPreferences.quickstartCheckbox "اتصال به صورت خودکار در همه وقت"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "پل ها"> +<!ENTITY torPreferences.bridgesDescription "پلها به شما کمک میکنند که در مناطقی که Tor مسدود شده است، به شبکه Tor دسترسی پیدا کنید. وابسته به منطقهای که در آن هستید، ممکن است یک پل بهتر از دیگری عمل کند."> +<!ENTITY torPreferences.bridgeLocation "موقعیت شما"> +<!ENTITY torPreferences.bridgeLocationAutomatic "خودکار"> +<!ENTITY torPreferences.bridgeLocationFrequent "مکانهای متداول"> +<!ENTITY torPreferences.bridgeLocationOther "سایر مکانها"> +<!ENTITY torPreferences.bridgeChooseForMe "یک پل برای من انتخاب کن…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "پلهای فعلی شما"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "شما میتوانید یک یا چند پل را ذخیره کنید و Tor انتخاب خواهد کرد که هنگام اتصال از کدام یک استفاده کند. Tor در صورت نیاز، به طور خودکار از پل دیگر استفاده خواهد کرد."> +<!ENTITY torPreferences.bridgeId "پل #1: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "پاک کردن"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "غیرفعالسازی پلهای داخلی"> +<!ENTITY torPreferences.bridgeShare "این پل را با استفاده از کد QR یا با کپی آدرس آن به اشتراک بگذارید:"> +<!ENTITY torPreferences.bridgeCopy "کپی آدرس پل"> +<!ENTITY torPreferences.copied "کپی شد!"> +<!ENTITY torPreferences.bridgeShowAll "نمایش همه پلها"> +<!ENTITY torPreferences.bridgeRemoveAll "حذف همه پلها"> +<!ENTITY torPreferences.bridgeAdd "افزودن یک پل جدید"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "یکی از پلهای داخلی مرورگر تور را انتخاب کنید"> +<!ENTITY torPreferences.bridgeSelectBuiltin "یک پل داخلی را انتخاب کنید…"> +<!ENTITY torPreferences.bridgeRequest "درخواست یک پل..."> +<!ENTITY torPreferences.bridgeEnterKnown "آدرس پلی که میدانید را وارد کنید"> +<!ENTITY torPreferences.bridgeAddManually "افزودن دستی پل…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "پیشرفته "> +<!ENTITY torPreferences.advancedDescription "روش اتصال مرورگر تور به اینترنت را پیکربندی کنید"> +<!ENTITY torPreferences.advancedButton "تنظیمات…"> +<!ENTITY torPreferences.viewTorLogs "مشاهده وقایع تور"> +<!ENTITY torPreferences.viewLogs "مشاهده وقایع..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "همه پلها حذف شوند؟"> +<!ENTITY torPreferences.removeBridgesWarning "این عمل قابل بازگشت نیست."> +<!ENTITY torPreferences.cancel "لغو"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "اسکن کد QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "پلهای داخلی"> +<!ENTITY torPreferences.builtinBridgeDescription "مرورگر تور انواع خاصی از پلها با نام "حاملهای اتصال" را شامل میشود."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 نوعی پل داخلی است که ترافیک تور شما را تصادفی جلوه میدهد. همچنین احتمال مسدود شدن آن نسبت به پل قبلی خود، یعنی obfs3، کمتر است."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake یک پل داخلی است که با مسیریابی اتصال شما از طریق پراکسیهای Snowflake که توسط داوطلبان اداره میشود، سانسور را شکست میدهد."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure یک پل داخلی است که وانمود میکند شما به جای استفاده از تور از یک وبسایت مایکروسافت بازدید میکنید."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "پل درخواست کن"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "در حال تماس با BridgeDB. لطفا منتظر بمانید."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "برای درخواست یک پل کپچا را حل کنید."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "راه حل درست نیست. لطفا دوباره تلاش کنید."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "ارائه پل"> +<!ENTITY torPreferences.provideBridgeHeader "وارد کردن اطلاعات پل از یک منبع مورد اعتماد"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "تنظیمات اتصال"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "روش اتصال مرورگر تور به اینترنت را پیکربندی کنید"> +<!ENTITY torPreferences.firewallPortsPlaceholder "مقادیر جداشده با ویرگول"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "وقایع Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "عدم اتصال"> +<!ENTITY torConnect.connectingConcise "در حال اتصال..."> +<!ENTITY torConnect.tryingAgain "در حال امتحان دوباره…"> +<!ENTITY torConnect.noInternet "مرورگر Tor به اینترنت دسترسی پیدا نکرد"> +<!ENTITY torConnect.noInternetDescription "این ممکن است به دلیل مشکل اتصال باشد، نه مسدود شدن Tor. قبل از تلاش دوباره، تنظیمات اتصال اینترنت، پروکسی و فایروال خود را بررسی کنید."> +<!ENTITY torConnect.couldNotConnect "مرورگر تور نمیتواند به تور متصل شود"> +<!ENTITY torConnect.assistDescriptionConfigure "اتصال خود را پیکربندی کنید"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "اگر تور در موقعیت مکانی شما مسدود شده است، امتحان کردن یک پل میتواند است کمککننده باشد. کمک اتصال میتواند با استفاده از موقعیت مکانی شما یک پل را برای شما انتخاب کند، و یا به جای آن میتوانید به صورت دستی #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "در حال امتحان یک پل…"> +<!ENTITY torConnect.tryingBridgeAgain "در حال تلاش برای یک بار دیگر…"> +<!ENTITY torConnect.errorLocation "مرورگر تور قادر به مکانیابی شما نیست"> +<!ENTITY torConnect.errorLocationDescription "مرورگر تور باید مکان شما را بداند تا پل مناسب شما را انتخاب کند. اگر ترجیح میدهید موقعیت مکانی خود را به اشتراک نگذارید، به جای آن به صورت دستی #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "آیا این تنظیمات مکانی درست هستند؟"> +<!ENTITY torConnect.isLocationCorrectDescription "مرورگر Tor هنوز نمیتواند به Tor متصل شود. لطفا درستی تنظیمات موقعیت مکانی خود را بررسی کنید و دوباره امتحان کنید، یا به جای آن #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "مرورگر Tor هنوز نمیتواند متصل شود"> +<!ENTITY torConnect.finalErrorDescription "علیرغم همه تلاشها، دستیار اتصال قادر به اتصال به Tor نبود. اتصال خود را عیبیابی کنید و به جای آن یک پل را به صورت دستی اضافه کنید."> +<!ENTITY torConnect.breadcrumbAssist "کمک اتصال"> +<!ENTITY torConnect.breadcrumbLocation "تنظیمات مکانی"> +<!ENTITY torConnect.breadcrumbTryBridge "یک پل انتخاب کنید"> +<!ENTITY torConnect.automatic "خودکار"> +<!ENTITY torConnect.selectCountryRegion "کشور یا منطقه را انتخاب کنید"> +<!ENTITY torConnect.frequentLocations "مکانهای متداول"> +<!ENTITY torConnect.otherLocations "سایر مکانها"> +<!ENTITY torConnect.restartTorBrowser "مرورگر تور را دوباره راهاندازی کنید"> +<!ENTITY torConnect.configureConnection "پیکربندی اتصال..."> +<!ENTITY torConnect.viewLog "مشاهده وقایع…"> +<!ENTITY torConnect.tryAgain "دوباره سعی کنید"> +<!ENTITY torConnect.offline "اینترنت در دسترس نیست"> +<!ENTITY torConnect.connectMessage "تغییرات انجام شده در تنظیمات تور، تا زمان اتصال شما اعمال نخواهند شد"> +<!ENTITY torConnect.tryAgainMessage "مرورگر Tor موفق به برقراری ارتباط با شبکه Tor نشده است"> +<!ENTITY torConnect.yourLocation "موقعیت مکانی شما"> +<!ENTITY torConnect.tryBridge "یک پل را امتحان کنید"> +<!ENTITY torConnect.autoBootstrappingFailed "پیکربندی خودکار انجام نشد"> +<!ENTITY torConnect.autoBootstrappingFailed "پیکربندی خودکار انجام نشد"> +<!ENTITY torConnect.cannotDetermineCountry "تعیین کشور کاربر ممکن نیست"> +<!ENTITY torConnect.noSettingsForCountry "هیچ تنظیماتی برای مکان شما موجود نیست"> diff --git a/toolkit/torbutton/chrome/locale/fa/onboarding.properties b/toolkit/torbutton/chrome/locale/fa/onboarding.properties new file mode 100644 index 000000000000..1e4f6e5a849a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=با %S نا آشنا هستید؟\nبیایید شروع کنیم. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S کاملا جدید است.\n ببینید چه امکاناتی دارد! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=بستن +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=رد کردن +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=کامل شد diff --git a/toolkit/torbutton/chrome/locale/fa/torbutton.dtd b/toolkit/torbutton/chrome/locale/fa/torbutton.dtd new file mode 100644 index 000000000000..71a19e81752d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "هویت جدید"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "هویت جدید"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "شبکه جدید Tor برای این سایت"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "مدار جدید Tor برای این سایت"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "تنظیمات شبکه Tor"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "بررسی بروز رسانی مرورگر Tor"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "حفاظت کوکی ها..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "جهت شروع دكمه تُرکليک کنيد"> +<!ENTITY torbutton.prefs.security_settings "تنظیمات امنیتی مرورگر Tor"> +<!ENTITY torbutton.cookiedialog.title "مديريت حفاظت کلوچکها"> +<!ENTITY torbutton.cookiedialog.lockCol "حفاظت شده"> +<!ENTITY torbutton.cookiedialog.domainCol "ميزبان"> +<!ENTITY torbutton.cookiedialog.nameCol "نام"> +<!ENTITY torbutton.cookiedialog.pathCol "مسير"> +<!ENTITY torbutton.cookiedialog.protectCookie "حفاظت از کلوچک"> +<!ENTITY torbutton.cookiedialog.removeCookie "حذف کلوچک"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "عدم حفاظت از کلوچک"> +<!ENTITY torbutton.cookiedialog.removeAllBut "حذف تمام کلوچکهای حفاظت نشده"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "حفاظت از کلوچکهای جديد"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "عدم حفاظت از کلوچکهای جديد"> +<!ENTITY torbutton.prefs.sec_caption "سطح امنیت"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "نوار لغزنده امنیتی به شما اجازه میدهد که مشخصههای خاص مرورگر را غیرفعال کنید که ممکن است مرورگر شما را در برابر تلاشهای هک آسیبپذیر سازد."> +<!ENTITY torbutton.prefs.sec_standard_label "استاندارد"> +<!ENTITY torbutton.prefs.sec_standard_description "همه مرورگر Tor و ویژگیهای وبسایت به کار انداخته شدهاند."> +<!ENTITY torbutton.prefs.sec_safer_label "ایمن تر "> +<!ENTITY torbutton.prefs.sec_safer_description "از کار انداختن ویژگیهای وبسایت که اغلب خطرناک هستند و باعث از دست رفتن برخی سایتها میشوند."> +<!ENTITY torbutton.prefs.sec_safer_list_label "تنظیم مکانی امنتر:"> +<!ENTITY torbutton.prefs.sec_safest_label "ایمن ترین "> +<!ENTITY torbutton.prefs.sec_safest_description "تنها اجازه میدهد که ویژگیهای وبسایت برای سایتهای ایستا و خدمات پایه مورد نیاز باشد. این تغییرات بر تصاویر، رسانهها و متن تاثیر میگذارند."> +<!ENTITY torbutton.prefs.sec_safest_list_label "تنظیم امنترین مکان"> +<!ENTITY torbutton.prefs.sec_learn_more_label "اطلاعات بیشتر"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "جاوا اسکریپت روی سایتهای غیر HTTPS کار نمیکند."> +<!ENTITY torbutton.prefs.sec_js_disabled "جاوا اسکریپت به طور پیش فرض در تمامی سایت ها غیر فعال است."> +<!ENTITY torbutton.prefs.sec_limit_typography "برخی از فونت ها و نمادهای ریاضی غیرفعال هستند"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "برخی از فونت ها، شمایلها، علایم ریاضی و تصاویر از کار افتاده هستند."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "صدا و تصویر (رسانه HTML5) و WebGL قابل باز شدن با کلیک هستند."> +<!ENTITY torbutton.prefs.sec_custom_warning "تنظیم خاص"> +<!ENTITY torbutton.prefs.sec_overview "بعضی خصیصههای وب را که میتواند جهت تعرض به امنیت و گمنامی شما مورد استفاده قرار گیرد غیر فعال نمایید."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "سطح امنیت: استاندارد"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "سطح امنیت: ایمنتر"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "سطح امنیت: ایمنترین"> +<!ENTITY torbutton.prefs.sec_custom_summary "تنظیمات سفارشی شما در مرورگر منجر به تغییرات غیر معمول در تنظیمات امنیتی شده است.برای امن نگه داشتن حریم خصوصی خود ما پیشنهاد میکنیم یکی از تنظیمات پیشفرض امنیتی را انتخاب کنید. "> +<!ENTITY torbutton.prefs.sec_restore_defaults "بازگردانی تنظیمات اولیه"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "تنظیمات پیشرفته امنیت ..."> +<!ENTITY torbutton.prefs.sec_change "تغییر..."> +<!ENTITY torbutton.circuit_display.title "مدار Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "مدار جدید برای این سایت"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "اعلان احراز هویت مشتری در سرویس Onion را باز کن"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "این کلید را به خاطر بسپار"> diff --git a/toolkit/torbutton/chrome/locale/fa/torbutton.properties b/toolkit/torbutton/chrome/locale/fa/torbutton.properties new file mode 100644 index 000000000000..990c35af4767 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = اینترنت +torbutton.circuit_display.ip_unknown = آیپی ناشناخته +torbutton.circuit_display.onion_site = سایت پیازی +torbutton.circuit_display.this_browser = این مرورگر +torbutton.circuit_display.relay = بازپخش +torbutton.circuit_display.tor_bridge = پل +torbutton.circuit_display.unknown_country = کشور ناشناخته +torbutton.circuit_display.guard = محافظ +torbutton.circuit_display.guard_note = گره [گارد] شما ممکن است تغییر نکند. +torbutton.circuit_display.learn_more = اطلاعات بیشتر +torbutton.circuit_display.click_to_copy = برای کپی کلیک کنید +torbutton.circuit_display.copied = کپی شد! +torbutton.content_sizer.margin_tooltip = مرورگر Tor اضافه می کند این حاشیه را به عرض و ارتفاع پنجره شما که کمتر مشخص شود، و در نتیجه باعث کاهش توانایی به ردیابی آنلاین شما شود. +extensions.torbutton@torproject.org.description = Torbutton دکمه ای را برای شما فراهم مینماید تا تنظیمات "تر" را پیکربندی کرده و بتوانید به راحتی و سرعت، داده های خصوصی مرورگرتان را پاک کنید. +torbutton.popup.external.title = میخواهید یک فایل نوع بیرونی دانلود شود؟ +torbutton.popup.external.app = مرورگر نمیتواند این فایل را نمایش دهد، لازم است تا با برنامه دیگری آن را باز کنید.\n +torbutton.popup.external.note = برخی از انواع فایلها، باعث میشوند که برنامه ها بدون استفاده از "تر" به اینترنت متصل شوند.\n +torbutton.popup.external.suggest = برای ایمن ماندن، باید فقط هنگامی که به اینترنت وصل نیستید، فایل دانلود شده را باز کنید، یا از یک "سی دی لایو تر" مانند Tails استفاده کنید.\n +torbutton.popup.launch = دانلود فایل +torbutton.popup.cancel = لغو +torbutton.popup.dontask = از این پس، فایلها به طور خودکار دانلود شود. +torbutton.popup.no_newnym = Torbutton نمی تواند به شما یک شناسه جدید امن بدهد. دسترسی به پورت کنترل ویدالیا امکان پذیر نیست.\n\n آیا شما در حال اجرا بسته نرم افزاری مرورگر تُر هستید؟ +torbutton.security_settings.menu.title = تنظیمات امنیتی +torbutton.title.prompt_torbrowser = اطلاعات مهم Torbutton +torbutton.popup.prompt_torbrowser = اکنون Torbutton بطور متفاوتی کار میکند - دیگر نمیتوانید آن را خاموش کنید.\n\nاین تغیرات به این دلیل اعمال شده است که استفاده از Torbutton در مرورگری که برای مرورگری بدون تر نیز استفاده میشود، ایمن نیست. نقصهای نرم افزاری آنقدر زیاد بود که به روش دیگری نمیتوانستیم آن را حل کنیم.\n\nاگر میخواهید به طور عادی به استفاده از فایرفاکس ادامه دهید، باید نرم افزار Torbutton را حذف کرده و Tor Browser Bundle (بسته مرورگر تر) را دانلود کنید. ویژگیهای خصوصی بو [...] +torbutton.popup.short_torbrowser = اطلاعلت مهم Torbutton!\n\nTorbutton همیشه فعال باشد!\n\nبرای اطلاعات بیشتر روی Torbutton کلیک نمایید. + +torbutton.popup.confirm_plugins = پلاگینها مانند فلش، میتوانند اختفا و ناشناس بودن شما را به خطر بیاندازند.\n\nآنها همچنین میتوانند "تر" را دور زده تا موقعیت کنونی و آدرس IP شما را برملا کنند.\n\nمطمئنید که میخواهید پلاگینها را فعال کنید؟\n\n +torbutton.popup.never_ask_again = دیگر هیچگاه این را از من نپرس +torbutton.popup.confirm_newnym = مرورگر Tor همه پنجره ها و تب ها را می بندد. همه جلسات وب سایت شود از دست خواهد رفت\n\nآیا می خواهید راه اندازی مجدد مرورگر Tor الان انجام شود تا هویت خود را تنظیم مجدد کنید؟\n + +torbutton.maximize_warning = ماکسیمایز کردن مرورگر تُر به وبسایت ها این امکان را می دهد که از روی سایز صفحه نمایش، شما را ردگیری کنند. پیشنهاد می کنیم که از سایز پیش فرض مرورگر تُر استفاده کنید. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=این وبسایت (%S) سعی دارد اطلاعات بوم تصویر HTML5 را دریافت کند که ممکن است برای شناسایی منحصر به فرد کامپیوتر شما استفاده شود.\n\nآیا مرورگر Tor میبایست اجازه دریافت این اطلاعات را بدهد؟ +canvas.notNow=نه در حال حاضر +canvas.notNowAccessKey=N +canvas.allow=اجازه دهید در آینده +canvas.allowAccessKey=A +canvas.never=هرگز برای این سایت (توصیه شده) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S مشکل پروفایل +profileReadOnly=شما نمی توانید اجرا %S از یک فایل سیستم فقط خواندنی. لطفا کپی کنید %S به محل دیگری قبل از تلاش برای استفاده از آن. +profileReadOnlyMac=شما نمی توانید اجرا %S از یک فایل سیستم فقط خواندنی. لطفا کپی کنید %S به دسکتاپ خودتان یا پوشه برنامه قبل از تلاش برای استفاده از آن. +profileAccessDenied=٪ S اجازه دسترسی به مشخصات ندارد. لطفا مجوزهای سیستم فایل خود را تنظیم و دوباره سعی کنید. +profileMigrationFailed=مهاجرت ناموفق از پروفایل %S.\nتنظیمات جدید استفاده خواهد شد. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=در حال دانلود %S بروز رسانی + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=ارتباط رمزگذاری شده (سرویس Onion, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=ارتباط رمزگذاری شد (سرویس پیازی) +pageInfo_OnionName=نام پیاز: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=اطلاعات بیشتر +onionServices.errorPage.browser=مرورگر +onionServices.errorPage.network=شبکه +onionServices.errorPage.onionSite=سایت های پیازی +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.descNotFound.header=سایت پیازی یافت نشد +onionServices.descNotFound=به احتمال زیاد علت این است که سایت پیازی آفلاین است. با سرپرست سایت پیازی تماس بگیرید. +onionServices.descNotFound.longDescription=جزئیات: S% — توصیفگر سرویس پیازی درخواست شده روی حلقه هش یافت نشد بنابراین سرویس توسط کلاینت قابل دسترسی نیست. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.descInvalid.header=دسترسی به سایت پیازی ممکن نیست. +onionServices.descInvalid=سایت پیازی به دلیل خطا داخلی قابل دسترسی نیست. +onionServices.descInvalid.longDescription=جزئیات: S% — توصیفگر سرویس پیازی درخواست شده نمی تواند تجزیه شود یا تائید امضا ناموفق بود. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.introFailed.header=سایت پیازی قطع شده است +onionServices.introFailed=به احتمال زیاد علت این است که سایت پیازی آفلاین است. با سرپرست سایت پیازی تماس بگیرید. +onionServices.introFailed.longDescription=جزئیات: S% — معرفی ناموفق بود، یعنی توصیفگر یافت شد ولی سرویس دیگر به نقطه معرفی وصل نمی باشد. ممکن است که سرویس توصیفگر خود را تغییر داده یا در حال اجرا نیست. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.rendezvousFailed.header=امکان برقراری ارتباط با سایت پیازی نیست +onionServices.rendezvousFailed=سایت پیازی مشغول یا شبکه Tor شلوغ است. بعدا دوباره تلاش کنید. +onionServices.rendezvousFailed.longDescription=جزئیات: S% — کلاینت موفق به ملاقات با سرویس نشد، یعنی کلاینت قادر نبود تا اتصال را نهایی کند. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=احراز هویت موردنیاز است +onionServices.clientAuthMissing.header=سایت پیازی نیاز به احراز هویت دارد +onionServices.clientAuthMissing=دسترسی به سایت پیازی نیاز به کلید دارد ولی هیچ موردی ارائه نشده است. +onionServices.clientAuthMissing.longDescription=جزئیات: S% — کلاینت توصیفگر سرویس پیازی درخواستی را دریافت کرد ولی قادر به رمزگشایی محتوای آن نبود چون اطلاعات احراز هویت کلاینت ناقص است. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=احراز هویت ناموفق +onionServices.clientAuthIncorrect.header=احراز هویت سایت پیازی ناموفق بود +onionServices.clientAuthIncorrect=کلید ارائهشده نادرست بوده یا باطل شده است. با سرپرست سایت پیازی تماس بگیرید. +onionServices.clientAuthIncorrect.longDescription=جزئیات: S% — کلاینت قادر به دریافت توصیفگر سرویس پیازی درخواستی بود ولی قادر به رمزگشایی محتوای آن از طریق اطلاعات احراز هویت کلاینت ارائه شده نبود. این ممکن است به این معنا باشد که دسترسی فسخ شده است. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.badAddress.header=آدرس سایت پیازی نامعتبر است +onionServices.badAddress=آدرس سایت پیازی ارائهشده نامعتبر است. لطفا بررسی کنید که آن را به درستی وارد کردهاید. +onionServices.badAddress.longDescription=جزئیات: S% — نشانی onion. ارائه شده نامعتبر است. این خطا به یکی از این دلایل نشان داده شده است: چکسام نشانی مطابقت ندارد، کلید عمومی ed25519 نامعتبر می باشد، یا کدبندی نامعتبر است. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=اشکال در بارگیری سایت پیازی +onionServices.introTimedOut.header=زمان ایجاد زنجیره سایت پیازی به اتمام رسید. +onionServices.introTimedOut=اتصال به سایت پیازی، احتمالا به دلیل اتصال شبکه ضعیف، ناموفق بود. +onionServices.introTimedOut.longDescription=جزئیات: S% — وقت اتصال به سرویس پیازی درخواست شده اتمام یافت در حالی که سعی داشت تا چرخه ملاقات را ایجاد کند. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S از شما می خواهد تا احراز هویت کنید. +onionServices.authPrompt.keyPlaceholder=کلید خصوصی خود برای این سرویس Onion را، وارد کنید. +onionServices.authPrompt.done=انجام شد +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=لطفا یک کلید معتبر وارد نمایید( 52 کاراکتر در مبنای 32 یا 44 کاراکتر در مبنای 64) +onionServices.authPrompt.failedToSetKey=امکان پیکربندی Tor با کلید شما وجود ندارد +onionServices.authPreferences.header=اصالت سنجی سرویس پیازی +onionServices.authPreferences.overview=برخی از سرویس های پیازی به این نیاز دارند که شما قبل از دسترسی به آنها، خودتان را با یک کلید (یک نوعی از رمز عبور) بشناسانید. +onionServices.authPreferences.savedKeys=کلیدهای ذخیرهشده... +onionServices.authPreferences.dialogTitle=کلیدهای سرویس پیازی +onionServices.authPreferences.dialogIntro=کلیدهای مربوط به onionsites در رایانه ی شما ذخیره شدند. +onionServices.authPreferences.onionSite=سایت های پیازی +onionServices.authPreferences.onionKey=کلید +onionServices.authPreferences.remove=حذف +onionServices.authPreferences.removeAll=حذف کردن همه +onionServices.authPreferences.failedToGetKeys=قادر به بازیابی کلیدها از تور نیستیم +onionServices.authPreferences.failedToRemoveKey=قادر به حذف کردن کلید نیستیم +onionServices.v2Deprecated.pageTitle=هشدار از کار افتادن سایت پیازی نسخه ۲ +onionServices.v2Deprecated.header=سایتهای پیازی نسخه ۲ به زودی از کار خواهند افتاد +onionServices.v2Deprecated=سایت پیازی به زودی قابل دسترس نخواهد بود. لطفاً با مدیر سایت ارتباط برقرار کرده و آن ها را تشویق به ارتقا نمایید. +onionServices.v2Deprecated.longDescription=از اول ژولای ۲۰۲۱ تور در حال پایان دادن به پشتیبانی از نسخه ۲ سرویسهای پیازی است، و این سایت پیازی دیگر از این نشانی قابل دسترس نمی باشد. اگر مدیر سایت هستید، آن را به سرویس پیازی نسخه ۳ ارتقا دهید. +onionServices.v2Deprecated.tryAgain=متوجه شدم +onionServices.v2Deprecated.tooltip=سایت پیازی به این زودی قابل دسترس نخواهد بود + +# Onion-Location strings. +onionLocation.alwaysPrioritize=همیشه پیازها را در اولویت قرار بده +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=نه در حال حاضر +onionLocation.notNowAccessKey=n +onionLocation.description=یک نسخه امنتر و خصوصیتر از این سایت روی شبکهی تور از طریق سرویس های پیازی در دسترس می باشد. سرویس های پیازی به انتشار دهندگان سایتها و مراجعه کنندگان آنها این اجازه را می دهند تا سانسور و نظارت کلی را شکست دهند. +onionLocation.tryThis=سرویس های پیازی را امتحان کنید +onionLocation.onionAvailable=مورد .onion در دسترس است +onionLocation.learnMore=بیشتر بدانید... +onionLocation.always=همیشه +onionLocation.askEverytime=هر بار بپرس +onionLocation.prioritizeOnionsDescription=سایتهای .onion را در صورت شناخت در اولویت قرار بده. +onionLocation.onionServicesTitle=خدمات پیازی + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=یک نشانی رمزارز (%S) از یک سایت غیرامن کپی شده است. ممکن است تغییر یافته باشد. +cryptoSafetyPrompt.whatCanHeading=چه کاری میتوانید انجام دهید؟ +cryptoSafetyPrompt.whatCanBody=شما میتوانید به یک زنجیره جدید وصل شوید تا یک اتصال امن برقرار کنید، یا این هشدار را رد کرده و خطرات آن را بپذیرید. +cryptoSafetyPrompt.learnMore=اطلاعات بیشتر +cryptoSafetyPrompt.primaryAction=بارگذاری مجدد زبانه با یک زنجیره جدید +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=رد هشدار +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=با احتیاط ادامه بدهید +rulesets.warningDescription=افزودن یا تغییر قوانین میتواند باعث شود که مهاجمان مرورگر شما را هک کنند. فقط در صورتی ادامه دهید که میدانید چه کاری انجام میدهید. +rulesets.warningEnable=هنگام دسترسی به این تنظیمات پیشرفته به من هشدار بده +rulesets.warningButton=ریسک را بپذیرید و ادامه دهید +# Ruleset list +rulesets.rulesets=مجموعه قوانین +rulesets.noRulesets=هیچ مجموعه قانونی پیدا نشد +rulesets.noRulesetsDescr=وقتی یک مجموعه قوانین را در مرورگر Tor ذخیره میکنید، در اینجا نشان داده میشود. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=آخرین بهروزرسانی %S +rulesets.neverUpdated=هرگز بهروزرسانی نشد یا آخرین بهروزرسانی ناموفق بود +rulesets.enabled=فعال +rulesets.disabled=غیرفعال +# Ruleset details/edit ruleset +rulesets.edit=ویرایش +rulesets.name=نام +rulesets.jwk=JWK +rulesets.pathPrefix=پیشوند مسیر +rulesets.scope=محدوده +rulesets.enable=این مجموعه قوانین را فعال کنید +rulesets.checkUpdates=بهروز رسانیها را بررسی کنید +rulesets.jwkPlaceholder=کلید مورد استفاده برای امضای این مجموعه قوانین در قالب JWK (JSON Web Key) +rulesets.jwkInvalid=JWK قابل تجزیه نیست یا کلید معتبری نیست +rulesets.pathPrefixPlaceholder=پیشوند آدرسی که حاوی فایلهای مورد نیاز مجموعه قوانین است +rulesets.pathPrefixInvalid=پیشوند مسیر یک آدرس معتبر HTTP(S) نیست +rulesets.scopePlaceholder=بیان عادی برای محدوده قوانین +rulesets.scopeInvalid=دامنه را نمیتوان به عنوان یک عبارت عادی تجزیه کرد +rulesets.save=ذخیره +rulesets.cancel=لغو diff --git a/toolkit/torbutton/chrome/locale/fa/torlauncher.properties b/toolkit/torbutton/chrome/locale/fa/torlauncher.properties new file mode 100644 index 000000000000..a84f3a20291d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fa/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=اجراکننده Tor + +torlauncher.tor_exited_during_startup=تُر در هنگام شروع بسته شد. ممکن است این بعلت خطایی در فایل torrc شما، خطایی در برنامه تُر تا برنامه دیگری روی کامپیوتر شما، و یا ایراد سخت افزاری باشد. تا زمانی که شما خطای رخ داده را بررسی رفع کنید و تُر را دوباره اجرا کنید، مرورگر تُر شروع نخواهد شد. +torlauncher.tor_exited=Tor به طور غیر منتظره خارج شد که این ممکن است به علت یک اشکال در Tor و یا یک برنامه دیگر بر روی سیستم شما و یا یک سخت افزار معیوب اتفاق افتاده باشد، تا زمانی که دوباره Tor را اجرا نمائید مرورگر Tor قادر نخواهد بود به هیچ سایتی دسترسی داشته باشد. اگر این مشکل ادامه داشت، لطفا یک کپی از Log Tor خود را به تیم پشتیبانی ارسال کنید. +torlauncher.tor_exited2=شروع مجدد، Tor نمی تواند زبانه های مرورگر را ببندد. +torlauncher.tor_controlconn_failed=اتصال به پورت کنترل Tor امکان پذیر نمیباشد. +torlauncher.tor_failed_to_start=خطا در راه اندازی. +torlauncher.tor_control_failed=بهدست گرفتن کنترل Tor ناموفق بود. +torlauncher.tor_bootstrap_failed=Tor در برقراری یک ارتباط با شبکه خود ناموفق بود. +torlauncher.tor_bootstrap_failed_details=%1$S ناموفق بود (%2$S). + +torlauncher.unable_to_start_tor=Tor قادر به اجرا شدن نیست\n\n%S +torlauncher.tor_missing=فایل اجرایی Tor یافت نشد. +torlauncher.torrc_missing=فایل torrc پیدا نشد و ساخت فایل جدید ناموفق بود. +torlauncher.datadir_missing=دایرکتوری اطلاعات تٌر وجود ندارد و ساخت آن نیز ناموفق بود. +torlauncher.onionauthdir_missing=فهرست تأیید هویت Tor onion وجود ندارد و نمی تواند ایجاد شود. +torlauncher.password_hash_missing=کلمهٔ عبور رمزشده دریافت نشد. + +torlauncher.failed_to_get_settings=ناموفق در بازگردانی تنظیمات Tor.\n\n%S +torlauncher.failed_to_save_settings=ناموفق در ذخیره تنظیمات Tor.\n\n%S +torlauncher.ensure_tor_is_running=لطفا از فعال بودن Tor اطمینان حاصل کنید. + +torlauncher.error_proxy_addr_missing=شما میبایست یک آدرس آی پی یا یک نام میزبان و یک شماره درگاه برای پیکربندی تُر مشخص کنید جهت استفاده ار یک پیشکار برای دسترسی به اینترنت. +torlauncher.error_proxy_type_missing=شما باید نوع پراکسی را انتخاب کنید. +torlauncher.error_bridges_missing=شما باید یک یا پل های بیشتری را مشخص کنید. +torlauncher.error_default_bridges_type_missing=نوع انتقال باید برای پلها مشخص گردد. +torlauncher.error_bridgedb_bridges_missing=لطفا یک پل درخواست کنید. +torlauncher.error_bridge_bad_default_type=هیچ پلی از نوع %S موجود نیست. لطفا تنظیمات را اصلاح کنید. + +torlauncher.bridge_suffix.meek-amazon=(در چین کار میکند) +torlauncher.bridge_suffix.meek-azure=(در چین کار میکند) + +torlauncher.request_a_bridge=درخواست یک پل... +torlauncher.request_a_new_bridge=درخواست یک پل جدید... +torlauncher.contacting_bridgedb=تماس با BridgeDB. لطفا صبر کنید. +torlauncher.captcha_prompt=برای درخواست یک پل کپچا را حل کنید. +torlauncher.bad_captcha_solution=راه حل درست نیست. لطفا دوباره تلاش کنید. +torlauncher.unable_to_get_bridge=نمیتوان پل را از BridgeDB دریافت کرد. \n\n%S +torlauncher.no_meek=این مرورگر برای meek پیکربندی نشده است، که برای دستیابی به پلها لازم است. +torlauncher.no_bridges_available=متاسفم. در حال حاضر هیچ کدام از پلها در دسترس نیستند. + +torlauncher.connect=اتصال +torlauncher.restart_tor=Tor را ریستارت کنید. +torlauncher.quit=خروج +torlauncher.quit_win=خروج +torlauncher.done=انجام شد + +torlauncher.forAssistance=برای دریافت کمک٫ با %S تماس بگیرید +torlauncher.forAssistance2=برای کمک، %S را ببینید. + +torlauncher.copiedNLogMessages=کپی کامل شد. %S پیامهای ثبت شده آماده است تا Paste شود در ویرایشگر متن یا یک ایمیل. + +torlauncher.bootstrapStatus.starting=راه اندازی +torlauncher.bootstrapStatus.conn_pt=در حال اتصال به پل +torlauncher.bootstrapStatus.conn_done_pt=اتصال به پل برقرار شد +torlauncher.bootstrapStatus.conn_proxy=در حال اتصال به پراکسی +torlauncher.bootstrapStatus.conn_done_proxy=اتصال به پراکسی برقرار شد +torlauncher.bootstrapStatus.conn=در حال اتصال به یک رله ی Tor +torlauncher.bootstrapStatus.conn_done=به یک رله ی Tor متصل شد +torlauncher.bootstrapStatus.handshake=در حال مذاکره با یک رله ی Tor +torlauncher.bootstrapStatus.handshake_done=مذاکره با یک رله ی Tor به پایان رسید. +torlauncher.bootstrapStatus.onehop_create=برپایی یک اتصال فهرست رمزبندی شده +torlauncher.bootstrapStatus.requesting_status=بازیابی وضیعت شبکه +torlauncher.bootstrapStatus.loading_status=بارگذاری وضیعت شبکه +torlauncher.bootstrapStatus.loading_keys=بارگذاری مجوز ها +torlauncher.bootstrapStatus.requesting_descriptors=درخواست اطلاعات باز پخش +torlauncher.bootstrapStatus.loading_descriptors=بارگذاری اطلاعات بازپخش +torlauncher.bootstrapStatus.enough_dirinfo=بارگذاری اطلاعات رله به پایان رسید. +torlauncher.bootstrapStatus.ap_conn_pt=برقراری مسیریاب: در حال اتصال به یک پل +torlauncher.bootstrapStatus.ap_conn_done_pt=برقراری مسیریاب: به پل متصل شد +torlauncher.bootstrapStatus.ap_conn_proxy=برقراری مسیریاب: در حال اتصال به پراکسی +torlauncher.bootstrapStatus.ap_conn_done_proxy=برقراری مسیریاب: به پراکسی متصل شد +torlauncher.bootstrapStatus.ap_conn=برقراری مسیریاب: در حال اتصال به یک رله Tor +torlauncher.bootstrapStatus.ap_conn_done=برقراری مسیریاب: به یک رله Tor متصل شد +torlauncher.bootstrapStatus.ap_handshake=برقراری مسیریاب: در حال مذاکره با یک رله Tor +torlauncher.bootstrapStatus.ap_handshake_done=برقراری مسیریاب: مذاکره با یک رله Tor انجام شد +torlauncher.bootstrapStatus.circuit_create=برقراری مسیریاب: در حال برقراری مسیریاب Tor +torlauncher.bootstrapStatus.done=به شبکه Tor متصل شد! + +torlauncher.bootstrapWarning.done=انجام شد +torlauncher.bootstrapWarning.connectrefused=اتصال رد شد +torlauncher.bootstrapWarning.misc=گوناگون +torlauncher.bootstrapWarning.resourcelimit=منابع ناکافی +torlauncher.bootstrapWarning.identity=عدم تطبیق هویت +torlauncher.bootstrapWarning.timeout=اتمام وقت اتصال +torlauncher.bootstrapWarning.noroute=نبود مسیر به میزبان +torlauncher.bootstrapWarning.ioerror=خطای خواندن/نوشتن +torlauncher.bootstrapWarning.pt_missing=انتقال جایگزین مفقود است. + +torlauncher.nsresult.NS_ERROR_NET_RESET=ارتباط با سرور از دست رفت. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=اتصال به سرور امکان پذیر نمیباشد. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=اتصال به پروکسی امکان پذیر نمیباشد. + +torlauncher.copiedNLogMessagesShort=S% لاگ کپی شد diff --git a/toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd new file mode 100644 index 000000000000..b77f19d55484 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; est développé par"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "le &vendorShortName;"> +<!ENTITY project.end ", un organisme sans but lucratif qui s’efforce de protéger votre vie privée, vos données personnels et votre liberté en ligne."> + +<!ENTITY help.start "Voulez-vous aider ?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Faites un don"> +<!ENTITY help.or "ou"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "impliquez-vous"> +<!ENTITY help.end " !"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Des questions ?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Aidez à la croissance du réseau Tor"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Renseignements relatifs à la licence"> +<!ENTITY tor.TrademarkStatement "« Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. »"> diff --git a/toolkit/torbutton/chrome/locale/fr/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/fr/aboutTBUpdate.dtd new file mode 100644 index 000000000000..95ce02495cc5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Journal des changements du Navigateur Tor"> +<!ENTITY aboutTBUpdate.updated "Le Navigateur Tor a été mis à jour."> +<!ENTITY aboutTBUpdate.linkPrefix "Pour obtenir les renseignements les plus à jour au sujet de cette version, "> +<!ENTITY aboutTBUpdate.linkLabel "visitez notre site Web"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Date de sortie"> +<!ENTITY aboutTBUpdate.releaseNotes "Notes de mise à jour "> diff --git a/toolkit/torbutton/chrome/locale/fr/aboutTor.dtd b/toolkit/torbutton/chrome/locale/fr/aboutTor.dtd new file mode 100644 index 000000000000..43398c20e84c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "À propos de Tor "> + +<!ENTITY aboutTor.viewChangelog.label "Visualiser le journal des changements"> + +<!ENTITY aboutTor.ready.label "Explorez, en toute confidentialité."> +<!ENTITY aboutTor.ready2.label "Vous êtes prêt pour l’expérience de navigation la plus confidentielle au monde."> +<!ENTITY aboutTor.failure.label "Un problème est survenu"> +<!ENTITY aboutTor.failure2.label "Tor ne fonctionne pas dans ce navigateur."> + +<!ENTITY aboutTor.search.label "Chercher avec DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Des questions ?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Consultez notre guide d’utilisation du Navigateur Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "G"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Guide d’utilisation du Navigateur Tor"> + +<!ENTITY aboutTor.tor_mission.label "Le Projet Tor est un organisme sans but lucratif US 501(c)(3) qui fait progresser les droits de la personne et les libertés en créant et en déployant des technologies gratuites d’anonymat et de protection de la vie privée et des données personnelles, à code source ouvert. Nous soutenons leur disponibilité et leur utilisation sans restriction, et promouvons une meilleure compréhension scientifique et populaire."> +<!ENTITY aboutTor.getInvolved.label "Impliquez-vous »"> + +<!ENTITY aboutTor.newsletter.tagline "Obtenez les dernières nouvelles au sujet de Tor directement dans votre boîte de réception."> +<!ENTITY aboutTor.newsletter.link_text "Inscrivez-vous aux nouvelles de Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor peut être utilisé gratuitement grâce aux dons de personnes telles que vous."> +<!ENTITY aboutTor.donationBanner.buttonA "Faites un don maintenant"> + +<!ENTITY aboutTor.alpha.ready.label "Tester. Rigoureusement."> +<!ENTITY aboutTor.alpha.ready2.label "Vous êtes prêt à tester l’expérience de navigation la plus confidentielle au monde."> +<!ENTITY aboutTor.alpha.bannerDescription "Le Navigateur Tor Alpha est une version instable du Navigateur Tor que vous pouvez utiliser pour découvrir les nouvelles fonctions, tester leurs performances et communiquer une rétroaction avant parution."> +<!ENTITY aboutTor.alpha.bannerLink "Signaler un bogue sur le forum de Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Tester. Rigoureusement."> +<!ENTITY aboutTor.nightly.ready2.label "Vous êtes prêt à tester l’expérience de navigation la plus confidentielle au monde."> +<!ENTITY aboutTor.nightly.bannerDescription "Le Navigateur Tor Nightly est une version instable du Navigateur Tor que vous pouvez utiliser pour découvrir les nouvelles fonctions, tester leurs performances et communiquer une rétroaction avant parution."> +<!ENTITY aboutTor.nightly.bannerLink "Signaler un bogue sur le forum de Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ALIMENTÉ PAR LA VIE PRIVÉE :"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RÉSISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGEMENT"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "LIBERTÉ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "FAITES UN DON MAINTENANT"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Votre don sera égalé par les Amis de Tor à concurrence de 100 000 $."> diff --git a/toolkit/torbutton/chrome/locale/fr/brand.dtd b/toolkit/torbutton/chrome/locale/fr/brand.dtd new file mode 100644 index 000000000000..96443d6a9e98 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Le Navigateur Tor"> +<!ENTITY brandShortName "Le Navigateur Tor"> +<!ENTITY brandFullName "Le Navigateur Tor"> +<!ENTITY vendorShortName "Le Projet Tor"> +<!ENTITY trademarkInfo.part1 "« Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. »"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Navigateur Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Cliquer pour charger les greffons système installés"> +<!ENTITY plugins.installed.enable "Activer les greffons"> +<!ENTITY plugins.installed.disable "Désactiver les greffons"> +<!ENTITY plugins.installed.disable.tip "Cliquer pour empêcher le chargement des greffons système"> diff --git a/toolkit/torbutton/chrome/locale/fr/brand.properties b/toolkit/torbutton/chrome/locale/fr/brand.properties new file mode 100644 index 000000000000..0a8582ae3f78 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Le Navigateur Tor +brandShortName=Le Navigateur Tor +brandFullName=Le Navigateur Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Navigateur Tor +vendorShortName=Le Projet Tor + +homePageSingleStartMain=Firefox Start, une page d’accueil rapide avec recherche intégrée +homePageImport=Importez votre page d’accueil à partir de %S + +homePageMigrationPageTitle=Choix de la page d’accueil +homePageMigrationDescription=Veuillez choisir la page d’accueil que vous souhaitez utiliser : + +syncBrandShortName=Synchro diff --git a/toolkit/torbutton/chrome/locale/fr/branding/brand.ftl b/toolkit/torbutton/chrome/locale/fr/branding/brand.ftl new file mode 100644 index 000000000000..7c7adc8782da --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Le Navigateur Tor +-brand-short-name = Le Navigateur Tor +-brand-full-name = Le Navigateur Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Navigateur Tor +-vendor-short-name = Le Projet Tor +trademarkInfo = « Tor » et le « logo Onion » sont des marques de commerce de « The Projet Tor, Inc. » diff --git a/toolkit/torbutton/chrome/locale/fr/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/fr/browserOnboarding.properties new file mode 100644 index 000000000000..cf0beb22fc81 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Bienvenue +onboarding.tour-tor-welcome.title=Vous êtes prêt. +onboarding.tour-tor-welcome.description=Le Navigateur Tor offre le plus haut niveau de confidentialité et de sécurité quand vous parcourez le Web. Vous êtes maintenant protégé contre le pistage, la surveillance et la censure. Cette présentation rapide vous montrera comment faire. +onboarding.tour-tor-welcome.next-button=Poursuivre vers Confidentialité + +onboarding.tour-tor-privacy=Confidentialité +onboarding.tour-tor-privacy.title=Repoussez les traqueurs et les fouineurs. +onboarding.tour-tor-privacy.description=Le Navigateur Tor isole les témoins et supprime l’historique de votre navigateur en fin de session. Ces modifications garantissent que confidentialité et sécurité sont protégées dans le navigateur. Cliquez sur « Réseau Tor » pour découvrir comment nous vous protégeons au niveau du réseau. +onboarding.tour-tor-privacy.button=Poursuivre vers Réseau Tor + +onboarding.tour-tor-network=Réseau Tor +onboarding.tour-tor-network.title=Naviguez sur un réseau décentralisé. +onboarding.tour-tor-network.description=Le Navigateur Tor vous connecte au réseau Tor exploité par des milliers de bénévoles dans le monde entier. Contrairement à un RPV, il n’y a pas de point de défaillance unique ou d’entité centralisée auxquels vous devez faire confiance pour profiter d’Internet en toute confidentialité. +onboarding.tour-tor-network.description-para2=NOUVEAU : Paramètres du réseau Tor, dont la possibilité de demander des ponts où Tor est bloqué, se trouvent maintenant dans Préférences. +onboarding.tour-tor-network.action-button=Réglez vos paramètres du réseau Tor +onboarding.tour-tor-network.button=Poursuivre vers Affichage des circuits + +onboarding.tour-tor-circuit-display=Affichage des circuits +onboarding.tour-tor-circuit-display.title=Visualisez votre chemin. +onboarding.tour-tor-circuit-display.description=Pour chaque domaine que vous visitez, votre trafic est relayé et chiffré dans un circuit passant par trois relais Tor disséminés de par le monde. Aucun site Web ne sait d’où vous vous connectez. Vous pouvez demander un nouveau circuit en cliquant sur « Nouveau circuit Tor pour ce site » dans notre Affichage des circuits. +onboarding.tour-tor-circuit-display.button=Visualiser mon chemin +onboarding.tour-tor-circuit-display.next-button=Poursuivre vers Sécurité + +onboarding.tour-tor-security=Sécurité +onboarding.tour-tor-security.title=Choisissez votre expérience. +onboarding.tour-tor-security.description=Nous vous offrons aussi des paramètres supplémentaires pour augmenter la sécurité de votre navigateur. Nos paramètres de sécurité vous permettent de bloquer des éléments qui pourraient être utilisés pour attaquer votre ordinateur. Cliquez ci-dessous pour voir ce que les différentes options vous proposent. +onboarding.tour-tor-security.description-suffix=Note : Par défaut, NoScript et HTTPS partout n’apparaissent pas dans la barre d’outils, mais vous pouvez la personnaliser pour les ajouter. +onboarding.tour-tor-security-level.button=Voir votre niveau de sécurité +onboarding.tour-tor-security-level.next-button=Poursuivre vers Conseils sur l’expérience + +onboarding.tour-tor-expect-differences=Conseils sur l’expérience +onboarding.tour-tor-expect-differences.title=Attendez-vous à des différences. +onboarding.tour-tor-expect-differences.description=Avec toutes les fonctions de sécurité et de confidentialité offertes par Tor, votre expérience de navigation sur Internet pourrait être un peu différente. Les choses pourraient être un peu plus lentes et selon votre niveau de sécurité, certains éléments pourraient ne pas fonctionner ou ne pas se charger. On pourrait aussi vous demander de prouver que vous êtes un humain et non un robot. +onboarding.tour-tor-expect-differences.button=Consulter les FAQ +onboarding.tour-tor-expect-differences.next-button=Poursuivre vers Services oignon + +onboarding.tour-tor-onion-services=Services oignon +onboarding.tour-tor-onion-services.title=Soyez plus que protégé. +onboarding.tour-tor-onion-services.description=Les services oignon sont des sites qui se terminent par .onion. Ils offrent des protections accrues aux diffuseurs et aux visiteurs, dont des mesures de protection contre la censure. Les services oignon permettent à tous de proposer anonymement du contenu et des services. Cliquez ci-dessous pour visiter le site oignon de DuckDuckGo. +onboarding.tour-tor-onion-services.button=Visiter un oignon +onboarding.tour-tor-onion-services.next-button=Terminé + +onboarding.overlay-icon-tooltip-updated2=Voyez ce qu’il y a de\nnouveau dans %S +onboarding.tour-tor-update.prefix-new=Nouveau +onboarding.tour-tor-update.prefix-updated=Mis à jour + +onboarding.tour-tor-toolbar=Barre d’outils +onboarding.tour-tor-toolbar-update-9.0.title=Adieu au bouton oignon. +onboarding.tour-tor-toolbar-update-9.0.description=Nous voulons que votre expérience d’utilisation de Tor soit entièrement intégrée au Navigateur Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=C’est pourquoi désormais, au lieu d’utiliser le bouton oignon, vous pouvez voir votre circuit Tor par le [i] de la barre d’URL et demander une nouvelle identité en utilisant le bouton de la barre d’outils ou le menu [≡] . +onboarding.tour-tor-toolbar-update-9.0.button=Comment demander une nouvelle identité +onboarding.tour-tor-toolbar-update-9.0.next-button=Poursuivre vers Réseau Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Suivant +onboarding.tor-circuit-display.done=Terminé +onboarding.tor-circuit-display.one-of-three=1 de 3 +onboarding.tor-circuit-display.two-of-three=2 de 3 +onboarding.tor-circuit-display.three-of-three=3 de 3 + +onboarding.tor-circuit-display.intro.title=Comment les circuits fonctionnent-ils ? +onboarding.tor-circuit-display.intro.msg=Les circuits sont composés de relais attribués au hasard. Ce sont des ordinateurs disséminés dans le monde entier, configurés pour acheminer le trafic de Tor. + +onboarding.tor-circuit-display.diagram.title=Affichage des circuits +onboarding.tor-circuit-display.diagram.msg=Ce diagramme affiche les relais qui composent le circuit de ce site Web. Pour empêcher de relier l’activité d’un site à l’autre, chaque site Web obtient un circuit différent. + +onboarding.tor-circuit-display.new-circuit.title=Avez-vous besoin d’un nouveau circuit ? +onboarding.tor-circuit-display.new-circuit.msg=Si vous n’arrivez pas à vous connecter au site Web que vous essayez de visiter ou s’il ne se charge pas correctement, vous pouvez alors utiliser ce bouton pour recharger le site avec un nouveau circuit. diff --git a/toolkit/torbutton/chrome/locale/fr/network-settings.dtd b/toolkit/torbutton/chrome/locale/fr/network-settings.dtd new file mode 100644 index 000000000000..5dedc497dbcb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/network-settings.dtd @@ -0,0 +1,181 @@ +<!ENTITY torsettings.dialog.title "Paramètres du réseau Tor"> +<!ENTITY torsettings.wizard.title.default "Se connecter à Tor"> +<!ENTITY torsettings.wizard.title.configure "Paramètres du réseau Tor"> +<!ENTITY torsettings.wizard.title.connecting "Établissement d’une connexion"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Langue du Navigateur Tor"> +<!ENTITY torlauncher.localePicker.prompt "Veuillez choisir une langue."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Cliquez sur « Se connecter » pour vous connecter à Tor."> +<!ENTITY torSettings.configurePrompt "Cliquez sur « Configurer » pour régler les paramètres du réseau si vous êtes situé dans un pays qui censure Tor (tel que l’Égypte, la Chine, la Turquie) ou si vous vous connectez à partir d’un réseau privé qui exige un mandataire."> +<!ENTITY torSettings.configure "Configurer"> +<!ENTITY torSettings.connect "Se connecter"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "En attente du démarrage de Tor…"> +<!ENTITY torsettings.restartTor "Redémarrer Tor"> +<!ENTITY torsettings.reconfigTor "Reconfigurer"> + +<!ENTITY torsettings.discardSettings.prompt "Vous avez configuré des ponts Tor ou vous avez saisi des paramètres de mandataire local. Pour établir une connexion directe vers le réseau Tor, ces paramètres doivent être supprimés."> +<!ENTITY torsettings.discardSettings.proceed "Supprimer les paramètres et se connecter"> + +<!ENTITY torsettings.optional "facultatif"> + +<!ENTITY torsettings.useProxy.checkbox "J’utilise un mandataire pour accéder à Internet"> +<!ENTITY torsettings.useProxy.type "Type de mandataire"> +<!ENTITY torsettings.useProxy.type.placeholder "sélectionner un type de mandataire"> +<!ENTITY torsettings.useProxy.address "Adresse"> +<!ENTITY torsettings.useProxy.address.placeholder "adresse IP ou nom d’hôte"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Nom d’utilisateur"> +<!ENTITY torsettings.useProxy.password "Mot de passe"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Cet ordinateur passe par un pare-feu qui n’autorise que les connexions à certains ports"> +<!ENTITY torsettings.firewall.allowedPorts "Ports autorisés"> +<!ENTITY torsettings.useBridges.checkbox "Tor est censuré dans mon pays"> +<!ENTITY torsettings.useBridges.default "Sélectionner un pont intégré"> +<!ENTITY torsettings.useBridges.default.placeholder "Sélectionner un pont"> +<!ENTITY torsettings.useBridges.bridgeDB "Demander un pont à torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Saisissez les caractères de l’image"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Obtenir un nouveau test"> +<!ENTITY torsettings.useBridges.captchaSubmit "Envoyer"> +<!ENTITY torsettings.useBridges.custom "Indiquer un pont que je connais"> +<!ENTITY torsettings.useBridges.label "Saisir des renseignements de pont provenant d’une source fiable."> +<!ENTITY torsettings.useBridges.placeholder "type adresse:port (un par ligne)"> + +<!ENTITY torsettings.copyLog "Copier le journal de Tor dans le presse-papiers"> + +<!ENTITY torsettings.proxyHelpTitle "Aide sur les mandataires"> +<!ENTITY torsettings.proxyHelp1 "Un mandataire local peut être nécessaire lors d’une connexion par un réseau d’entreprise, d’école ou d’université. Si vous n’êtes pas certain si un mandataire est nécessaire, vérifiez les paramètres Internet d’un autre navigateur ou les paramètres réseau de votre système."> + +<!ENTITY torsettings.bridgeHelpTitle "Aide sur les relais-ponts"> +<!ENTITY torsettings.bridgeHelp1 "Les ponts sont des relais non référencés qui rendent les connexions au réseau Tor plus difficiles à bloquer.  Chaque type de pont utilise un moyen différent pour éviter la censure.  Avec les ponts obfs, votre trafic ressemble à du bruit aléatoire, et avec les ponts meek, votre trafic semble se connecter à ce service plutôt qu’à Tor."> +<!ENTITY torsettings.bridgeHelp2 "Dans la mesure où certains pays tentent de bloquer Tor, certains ponts fonctionnent dans certains pays, mais pas dans d’autres. Si vous ne savez pas quels ponts fonctionnent dans votre pays, visitez torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Veuillez patienter pendant que nous établissons une connexion vers le réseau Tor. Cela pourrait prendre plusieurs minutes."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Connexion"> +<!ENTITY torPreferences.torSettings "Paramètres de Tor"> +<!ENTITY torPreferences.torSettingsDescription "Le Navigateur Tor achemine votre trafic par le réseau Tor, exploité par des milliers de bénévoles partout dans le monde. +" > +<!ENTITY torPreferences.learnMore "En apprendre davantage"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet :"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "En ligne"> +<!ENTITY torPreferences.statusInternetOffline "Hors ligne"> +<!ENTITY torPreferences.statusTorLabel "Réseau Tor :"> +<!ENTITY torPreferences.statusTorConnected "Connecté"> +<!ENTITY torPreferences.statusTorNotConnected "Non Connecté"> +<!ENTITY torPreferences.statusTorBlocked "Possiblement bloqué"> +<!ENTITY torPreferences.learnMore "En apprendre davantage"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Démarrage rapide"> +<!ENTITY torPreferences.quickstartDescriptionLong "Lors du lancement, le démarrage rapide connecte automatiquement le Navigateur Tor au réseau Tor d’après les dernières options de connexion que vous avez utilisées."> +<!ENTITY torPreferences.quickstartCheckbox "Toujours se connecter automatiquement"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Ponts"> +<!ENTITY torPreferences.bridgesDescription "Les ponts vous aident à accéder au réseau Tor où il est bloqué. +Selon votre position géographique, un pont pourrait fonctionner mieux qu’un autre."> +<!ENTITY torPreferences.bridgeLocation "Votre position"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatique"> +<!ENTITY torPreferences.bridgeLocationFrequent "Emplacements sélectionnés fréquemment"> +<!ENTITY torPreferences.bridgeLocationOther "Autre emplacements"> +<!ENTITY torPreferences.bridgeChooseForMe "Choisir un pont pour moi…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Vos ponts actuels"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Vous pouvez enregistrer un ou plusieurs ponts et Tor choisira lequel utiliser lors de la connexion. Si besoin est, Tor basculera automatiquement vers un autre pont."> +<!ENTITY torPreferences.bridgeId "Pont #1 : #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Supprimer"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Désactiver les ponts intégrés"> +<!ENTITY torPreferences.bridgeShare "Partagez ce pont grâce au code QR ou en copiant son adresse :"> +<!ENTITY torPreferences.bridgeCopy "Copier l’adresse du pont"> +<!ENTITY torPreferences.copied "A été copié"> +<!ENTITY torPreferences.bridgeShowAll "Afficher tous les ponts"> +<!ENTITY torPreferences.bridgeRemoveAll "Supprimer tous les ponts"> +<!ENTITY torPreferences.bridgeAdd "Ajouter un nouveau pont"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choisir l’un des ponts intégrés du Navigateur Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Sélectionner un pont intégré…"> +<!ENTITY torPreferences.bridgeRequest "Demander un pont…"> +<!ENTITY torPreferences.bridgeEnterKnown "Saisir une adresse de pont que vous connaissez déjà"> +<!ENTITY torPreferences.bridgeAddManually "Ajouter un pont manuellement…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avancé"> +<!ENTITY torPreferences.advancedDescription "Configurer la façon dont le Navigateur Tor se connecte à Internet"> +<!ENTITY torPreferences.advancedButton "Paramètres…"> +<!ENTITY torPreferences.viewTorLogs "Visualiser les journaux de Tor"> +<!ENTITY torPreferences.viewLogs "Visualiser les journaux…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Supprimer tous les ponts ?"> +<!ENTITY torPreferences.removeBridgesWarning "Cette action ne peut pas être annulée."> +<!ENTITY torPreferences.cancel "Annuler"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Balayer le code QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Ponts intégrés"> +<!ENTITY torPreferences.builtinBridgeDescription "Le Navigateur Tor comprend des types particuliers de ponts appelés « transports enfichables »."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 est un type de ponts intégrés qui donne au trafic de Tor une apparence aléatoire. Ils sont aussi moins susceptibles d’être bloqués que leurs prédécesseurs, les ponts obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake est un pont intégré qui déjoue la censure en acheminant votre connexion par des mandataires Snowflake, exploités par des bénévoles."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure est un pont intégré qui donne l’impression que vous utilisez un site Web de Microsoft au lieu de Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Demander un pont"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Connexion à BridgeDB. Veuillez patienter."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Résolvez le captcha pour demander un pont."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solution est erronée. Veuillez réessayer."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Fournir un pont"> +<!ENTITY torPreferences.provideBridgeHeader "Saisir des renseignements de pont provenant d’une source fiable"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Paramètres de connexion"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configurer la façon dont le Navigateur Tor se connecte à Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Valeurs séparées par des virgules"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Journaux de Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Non Connecté"> +<!ENTITY torConnect.connectingConcise "Connexion…"> +<!ENTITY torConnect.tryingAgain "Nouvel essai…"> +<!ENTITY torConnect.noInternet "Le Navigateur Tor n’a pu atteindre Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Le Navigateur Tor n’a pas réussi à se connecter à Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configurer votre connexion"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Si Tor est bloqué où vous vous trouvez, un pont pourrait aider. L’assistance à la connexion peut en choisir un pour vous d’après votre position géographique, ou vous pouvez plutôt en #1 manuellement."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Tentative avec un pont…"> +<!ENTITY torConnect.tryingBridgeAgain "Encore un autre essai…"> +<!ENTITY torConnect.errorLocation "Le Navigateur Tor n’a pas réussi à vous localiser"> +<!ENTITY torConnect.errorLocationDescription "Le Navigateur Tor a besoin de connaître votre position géographique afin de choisir le bon pont pour vous. Si vous préférez ne pas partager votre position, #1 plutôt un manuellement."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Ces paramètres de localisation sont-ils bons ?"> +<!ENTITY torConnect.isLocationCorrectDescription "Le Navigateur Tor n’a toujours pas réussi à se connecter à Tor. Veuillez vérifier que vos paramètres de localisation sont correctes et réessayer, ou #1 à la place"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Assistance à la connexion"> +<!ENTITY torConnect.breadcrumbLocation "Paramètres de localisation"> +<!ENTITY torConnect.breadcrumbTryBridge "Essayer un pont"> +<!ENTITY torConnect.automatic "Automatique"> +<!ENTITY torConnect.selectCountryRegion "Sélectionner le pays ou la région"> +<!ENTITY torConnect.frequentLocations "Emplacements sélectionnés fréquemment"> +<!ENTITY torConnect.otherLocations "Autre emplacements"> +<!ENTITY torConnect.restartTorBrowser "Redémarrer le Navigateur Tor"> +<!ENTITY torConnect.configureConnection "Configurer la connexion…"> +<!ENTITY torConnect.viewLog "Visualiser les journaux…"> +<!ENTITY torConnect.tryAgain "Réessayer"> +<!ENTITY torConnect.offline "Internet est inaccessible"> +<!ENTITY torConnect.connectMessage "Les changements des paramètres de Tor ne seront appliqués qu’après connexion"> +<!ENTITY torConnect.tryAgainMessage "Le Navigateur Tor n’a pas réussi à établir une connexion au réseau Tor"> +<!ENTITY torConnect.yourLocation "Votre position"> +<!ENTITY torConnect.tryBridge "Essayer un pont"> +<!ENTITY torConnect.autoBootstrappingFailed "Échec de configuration automatique"> +<!ENTITY torConnect.autoBootstrappingFailed "Échec de configuration automatique"> +<!ENTITY torConnect.cannotDetermineCountry "Impossible de déterminer le pays de l’utilisateur"> +<!ENTITY torConnect.noSettingsForCountry "Aucun paramètre n’est proposé pour votre position"> diff --git a/toolkit/torbutton/chrome/locale/fr/onboarding.properties b/toolkit/torbutton/chrome/locale/fr/onboarding.properties new file mode 100644 index 000000000000..82c1a693ee93 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Vous découvrez %S ?\nPassons-le en revue. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S a été revu de fond en comble !\nDécouvrez l’étendue des possibilités. +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Fermer +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Ignorer +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Achevé diff --git a/toolkit/torbutton/chrome/locale/fr/torbutton.dtd b/toolkit/torbutton/chrome/locale/fr/torbutton.dtd new file mode 100644 index 000000000000..1ba569b7f74f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nouvelle identité"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nouvelle identité"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Nouveau circuit Tor pour ce site"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nouveau circuit Tor pour ce site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Paramètres du réseau Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "R"> +<!ENTITY torbutton.context_menu.downloadUpdate "Vérifier les mises à jour du Navigateur Tor…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "M"> +<!ENTITY torbutton.context_menu.cookieProtections "Protections des témoins…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "T"> +<!ENTITY torbutton.button.tooltip "Cliquer pour lancer BoutonTor"> +<!ENTITY torbutton.prefs.security_settings "Paramètres de sécurité du Navigateur Tor"> +<!ENTITY torbutton.cookiedialog.title "Gérer les protections des témoins"> +<!ENTITY torbutton.cookiedialog.lockCol "Protégé"> +<!ENTITY torbutton.cookiedialog.domainCol "Hôte"> +<!ENTITY torbutton.cookiedialog.nameCol "Nom"> +<!ENTITY torbutton.cookiedialog.pathCol "Chemin"> +<!ENTITY torbutton.cookiedialog.protectCookie "Protéger le témoin"> +<!ENTITY torbutton.cookiedialog.removeCookie "Enlever le témoin"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Annuler la protection du témoin"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Les enlever tous, sauf les témoins protégés"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Protéger les nouveaux témoins"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Ne pas protéger les nouveaux témoins"> +<!ENTITY torbutton.prefs.sec_caption "Niveau de sécurité"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Le curseur de sécurité vous permet de désactiver certaines fonctions du navigateur qui pourraient le rendre plus vulnérable aux tentatives de piratage."> +<!ENTITY torbutton.prefs.sec_standard_label "Normal"> +<!ENTITY torbutton.prefs.sec_standard_description "Toutes les fonctions du Navigateur Tor et des sites Web sont activées."> +<!ENTITY torbutton.prefs.sec_safer_label "Plus sûr"> +<!ENTITY torbutton.prefs.sec_safer_description "Désactive les fonctions souvent dangereuses des sites Web, ce qui pourrait entraîner une perte de fonctionnalité de certains sites Web."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Au réglage Plus sûr :"> +<!ENTITY torbutton.prefs.sec_safest_label "Le plus sûr"> +<!ENTITY torbutton.prefs.sec_safest_description "Ne permet que les fonctions de sites Web exigées pour les sites statiques et les services de base. Ces changements affectent les images, les médias et les scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Au réglage Le plus sûr :"> +<!ENTITY torbutton.prefs.sec_learn_more_label "En apprendre davantage"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript est désactivé pour les sites non HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript est désactivé par défaut pour tous les sites."> +<!ENTITY torbutton.prefs.sec_limit_typography "Certaines polices et certains symboles mathématiques sont désactivés."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Certaines polices, icônes, images et certains symboles mathématiques sont désactivés."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Le son et la vidéo (médias HTML5) ainsi que WebGL sont « cliquer pour lire »."> +<!ENTITY torbutton.prefs.sec_custom_warning "Personnalisé"> +<!ENTITY torbutton.prefs.sec_overview "Désactives certaines fonctions Web qui peuvent être utilisées pour attaquer votre sécurité et votre anonymat."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Niveau de sécurité : normal"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Niveau de sécurité : plus sûr"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Niveau de sécurité : le plus sûr"> +<!ENTITY torbutton.prefs.sec_custom_summary "Les préférences personnalisées de votre navigateur ont entraîné des paramètres de sécurité inhabituels. Pour des raisons de sécurité et de protection des données personnelles, nous vous recommandons de choisir un des niveaux de sécurité par défaut."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Rétablir les paramètres par défaut"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Paramètres de sécurité avancés…"> +<!ENTITY torbutton.prefs.sec_change "Changer…"> +<!ENTITY torbutton.circuit_display.title "Circuit Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Nouveau circuit pour ce site"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Ouvrir l’invite d’authentification client du service oignon"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Mémoriser cette clé"> diff --git a/toolkit/torbutton/chrome/locale/fr/torbutton.properties b/toolkit/torbutton/chrome/locale/fr/torbutton.properties new file mode 100644 index 000000000000..c7c93de4c11f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP inconnue +torbutton.circuit_display.onion_site = Site oignon +torbutton.circuit_display.this_browser = Ce navigateur +torbutton.circuit_display.relay = Relais +torbutton.circuit_display.tor_bridge = Pont +torbutton.circuit_display.unknown_country = Pays inconnu +torbutton.circuit_display.guard = garde +torbutton.circuit_display.guard_note = Votre nœud de [garde] ne peut pas changer. +torbutton.circuit_display.learn_more = En apprendre davantage +torbutton.circuit_display.click_to_copy = Cliquer pour copier +torbutton.circuit_display.copied = A été copié +torbutton.content_sizer.margin_tooltip = Le Navigateur Tor ajoute cette marge pour rendre la largeur et la hauteur de votre fenêtre moins distinctives, et pour réduire par conséquent la possibilité que l’on vous suive à la trace en ligne. +extensions.torbutton@torproject.org.description = BoutonTor offre un bouton pour configurer les paramètres de Tor et effacer facilement les données de navigation privée. +torbutton.popup.external.title = Télécharger un type de fichier externe ? +torbutton.popup.external.app = Le Navigateur Tor ne peut pas afficher ce fichier. Vous devrez l’ouvrir avec une autre application. +torbutton.popup.external.note = Certains types de fichiers peuvent causer des connexions à l’Internet sans passer par Tor pour certaines applications. +torbutton.popup.external.suggest = Par sécurité, vous ne devriez ouvrir les fichiers téléchargés qu’une fois hors ligne ou en utilisant un CD autonome Tor comme Tails.\n +torbutton.popup.launch = Télécharger le fichier +torbutton.popup.cancel = Annuler +torbutton.popup.dontask = Télécharger automatiquement à partir de maintenant +torbutton.popup.no_newnym = BoutonTor ne peut pas vous attribuer une nouvelle identité de façon sûre. Il n’a pas accès au port de contrôle de Tor.\n\nUtilisez-vous l’offre groupée du Navigateur Tor ? +torbutton.security_settings.menu.title = Paramètres de sécurité +torbutton.title.prompt_torbrowser = Renseignements importants sur BoutonTor +torbutton.popup.prompt_torbrowser = Dorénavant, BoutonTor fonctionne différemment : vous ne pouvez plus le désactiver.\n\nNous avons effectué ce changement, car il n’est pas sécuritaire d’utiliser BoutonTor dans un navigateur qui est aussi utilisé pour une navigation sans Tor. Trop de bogues ne pouvaient être réglés autrement.\n\nSi vous voulez continuer à utiliser Firefox normalement, vous devriez désinstaller BoutonTor et télécharger l’offre groupée du Navigateur Tor. Les propriétés de [...] +torbutton.popup.short_torbrowser = Renseignements importants sur BoutonTor\n\nBoutonTor est dorénavant toujours activé.\n\nCliquer sur BoutonTor pour plus de précisons. + +torbutton.popup.confirm_plugins = Les greffons tels que Flash peuvent nuire à la protection de vos données personnels et à votre anonymat.\n\nIls peuvent aussi contourner Tor afin de divulguer votre position actuelle ainsi que votre adresse IP.\n\nVoulez-vous vraiment activer les greffons ?\n\n +torbutton.popup.never_ask_again = Ne plus me poser la question. +torbutton.popup.confirm_newnym = Le Navigateur Tor fermera tous les fenêtres et onglets. Les sessions des sites Web seront toutes perdues.\n\nRedémarrer le Navigateur Tor maintenant pour réinitialiser votre identité ?\n\n + +torbutton.maximize_warning = Maximiser le Navigateur Tor peut permettre aux sites Web de déterminer la taille de votre moniteur, ce qui peut être utilisé pour vous suivre à la trace. Nous vous recommandons de garder la taille d’origine des fenêtres du Navigateur Tor. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Ce site Web (%S) a essayé d’extraire des données d’image de canevas HTML5, qui pourraient être utilisées pour identifier votre ordinateur de façon unique.\n\nLe Navigateur Tor devrait-il permettre à ce site Web d’extraire des données d’image de canevas HTML5 ? +canvas.notNow=Pas maintenant +canvas.notNowAccessKey=P +canvas.allow=Autoriser à l’avenir +canvas.allowAccessKey=A +canvas.never=Jamais pour ce site (recommandé) +canvas.neverAccessKey=j + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problème de profil %S +profileReadOnly=Vous ne pouvez pas exécuter %S à partir d’un système de fichiers en lecture seul. Veuillez copier %S vers un autre emplacement avant d’essayer de l’utiliser. +profileReadOnlyMac=Vous ne pouvez pas exécuter %S à partir d’un système de fichiers en lecture seul. Veuillez copier %S vers votre dossier Bureau ou Applications avant d’essayer de l’utiliser. +profileAccessDenied=%S n’a pas le droit d’accéder au profil. Veuillez ajuster les droits de votre système de fichiers et réessayer. +profileMigrationFailed=La migration de votre profil existant %S a échoué.\nDe nouveaux paramètres vont être utilisés. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Téléchargement de la mise à jour de %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=La connexion est chiffrée (service oignon, %1$S, clés %2$S bits, %3$S) +pageInfo_OnionEncryption=La connexion est chiffrée (service oignon) +pageInfo_OnionName=Nom de l’oignon : + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=En apprendre davantage +onionServices.errorPage.browser=Navigateur +onionServices.errorPage.network=Réseau +onionServices.errorPage.onionSite=Site oignon +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problème de chargement du site oignon +onionServices.descNotFound.header=Le site oignon est introuvable +onionServices.descNotFound=La cause la plus probable est que le site oignon est hors ligne. Contactez l’administrateur du site oignon. +onionServices.descNotFound.longDescription=Détails : %S – Le descripteur du service oignon demandé est introuvable sur l’anneau de hachage et le service n’est par conséquent pas accessible par le client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problème de chargement du site oignon +onionServices.descInvalid.header=Le site oignon est inaccessible +onionServices.descInvalid=Le site oignon est inaccessible en raison d’une erreur interne. +onionServices.descInvalid.longDescription=Détails : %S – Le descripteur du service oignon demandé ne peut pas être analysé ou la validation de la signature a échoué. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problème de chargement du site oignon +onionServices.introFailed.header=Le site oignon s’est déconnecté +onionServices.introFailed=La cause la plus probable est que le site oignon est hors ligne. Contactez l’administrateur du site oignon. +onionServices.introFailed.longDescription=Détails : %S – Échec de présentation, ce qui signifie que le descripteur a été trouvé, mais que le service n’est plus connecté au point de présentation. Il est probable que le service a changé son descripteur ou qu’il ne fonctionne pas actuellement. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problème de chargement du site oignon +onionServices.rendezvousFailed.header=Impossible de se connecter au site oignon +onionServices.rendezvousFailed=Le site oignon est occupé ou le réseau Tor est surchargé. Veuillez réessayer ultérieurement. +onionServices.rendezvousFailed.longDescription=Détails : %S – Échec de rencontre du client avec le service, ce qui signifie que le client n’a pas réussi à finaliser la connexion. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Une autorisation est exigée +onionServices.clientAuthMissing.header=Le site oignon exige une authentification +onionServices.clientAuthMissing=Le site oignon exige une clé, mais aucune n’a été indiquée. +onionServices.clientAuthMissing.longDescription=Détails : %S – Le client a téléchargé le descripteur du site demandé, mais n’a pas réussi à déchiffrer son contenu, car il manque les renseignements d’autorisation du client. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Échec d’autorisation +onionServices.clientAuthIncorrect.header=Échec d’authentification au site oignon +onionServices.clientAuthIncorrect=La clé indiquée est incorrecte ou a été révoquée. Contactez l’administrateur du site oignon. +onionServices.clientAuthIncorrect.longDescription=Détails : %S – Le client a réussi à télécharger le descripteur du site demandé, mais n’a pas réussi à déchiffrer son contenu en utilisant les renseignements d’autorisation du client indiqués. Cela pourrait signifier que l’accès a été révoqué. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problème de chargement du site oignon +onionServices.badAddress.header=L’adresse du site oignon est invalide +onionServices.badAddress=L’adresse indiquée est invalide. Veuillez vous assurer de l’avoir saisie correctement. +onionServices.badAddress.longDescription=Détails : %S – L’adresse .onion indiquée est invalide. Cette erreur est retournée pour une des raisons qui suivent : la somme de contrôle de l’adresse ne correspond pas, la clé publique ed25519 est invalide ou l’encodage est invalide. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problème de chargement du site oignon +onionServices.introTimedOut.header=La création du circuit du site oignon est arrivée au bout de son délai +onionServices.introTimedOut=Échec de connexion au site oignon, possiblement en raison d’une mauvaise connexion au réseau. +onionServices.introTimedOut.longDescription=Détails : %S – La connexion au service oignon demandé est arrivée au bout de son délai en essayant de construire le circuit de rencontre. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S demande que vous vous authentifiez. +onionServices.authPrompt.keyPlaceholder=Saisissez votre clé privée pour ce service oignon +onionServices.authPrompt.done=Terminé +onionServices.authPrompt.doneAccessKey=t +onionServices.authPrompt.invalidKey=Veuillez saisir une clé valide (52 caractères Base32 ou 44 caractères Base64) +onionServices.authPrompt.failedToSetKey=Impossible de configurer Tor avec votre clé +onionServices.authPreferences.header=Authentification des services oignon +onionServices.authPreferences.overview=Certains services oignon exigent que vous vous authentifiiez avec une clé (une sorte de mot de passe) avant de pouvoir y accéder. +onionServices.authPreferences.savedKeys=Clés enregistrées… +onionServices.authPreferences.dialogTitle=Clés des services oignon +onionServices.authPreferences.dialogIntro=Les clés pour les sites oignon suivants sont enregistrées sur votre ordinateur +onionServices.authPreferences.onionSite=Site oignon +onionServices.authPreferences.onionKey=Clé +onionServices.authPreferences.remove=Supprimer +onionServices.authPreferences.removeAll=Tout supprimer +onionServices.authPreferences.failedToGetKeys=Impossible de récupérer les clés de Tor +onionServices.authPreferences.failedToRemoveKey=Impossible de supprimer la clé +onionServices.v2Deprecated.pageTitle=Avertissement d’obsolescence des sites oignon V2 +onionServices.v2Deprecated.header=Les sites oignon version 2 seront bientôt déconseillés +onionServices.v2Deprecated=Ce site oignon ne sera bientôt plus accessible. Veuillez contacter l’administrateur du site et l’encourager à le mettre à niveau. +onionServices.v2Deprecated.longDescription=À partir de juillet 2021, Tor mettra fin à la prise en charge des services oignon version 2 et ce site oignon ne sera plus accessible à cette adresse. Si vous êtes l’administrateur de ce site, veuillez le mettre à jour vers un service oignon version 3 bientôt. +onionServices.v2Deprecated.tryAgain=D’accord +onionServices.v2Deprecated.tooltip=Ce site oignon ne sera bientôt plus accessible + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Toujours prioriser les oignons +onionLocation.alwaysPrioritizeAccessKey=t +onionLocation.notNow=Pas maintenant +onionLocation.notNowAccessKey=p +onionLocation.description=Une version qui offre une meilleure protection de vos données et plus sécurisée de ce site est accessible sur le réseau Tor par ses services oignon. Les services oignon aident les éditeurs de sites Web et leurs visiteurs à combattre la surveillance et la censure. +onionLocation.tryThis=Essayer les services oignon +onionLocation.onionAvailable=Un .onion est proposé +onionLocation.learnMore=En apprendre davantage… +onionLocation.always=Toujours +onionLocation.askEverytime=Toujours demander +onionLocation.prioritizeOnionsDescription=Prioriser les sites .onion s’ils sont connus +onionLocation.onionServicesTitle=Services oignon + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Une adresse de cryptomonnaie (%S) a été copiée d’un site Web non sécurisé. Elle pourrait avoir été modifiée. +cryptoSafetyPrompt.whatCanHeading=Que pouvez-vous y faire ? +cryptoSafetyPrompt.whatCanBody=Vous pouvez essayer de vous reconnecter avec un nouveau circuit afin d’établir une connexion sécurisée ou accepter le risque et ignorer cet avertissement. +cryptoSafetyPrompt.learnMore=En apprendre davantage +cryptoSafetyPrompt.primaryAction=Recharger l’onglet avec un nouveau circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Ignorer l’avertissement +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Procéder avec prudence +rulesets.warningDescription=L’ajout ou la modification d’ensembles de règles peut permettre à des assaillants de pirater votre navigateur. Ne procédez que si vous savez ce que vous faites. +rulesets.warningEnable=Me prévenir si je tente d’accéder à ces préférences +rulesets.warningButton=Accepter le risque et poursuivre +# Ruleset list +rulesets.rulesets=Ensembles de règles +rulesets.noRulesets=Aucun ensemble de règles n’a été trouvé +rulesets.noRulesetsDescr=Si vous enregistrez un ensemble de règles dans le Navigateur Tor, il apparaîtra ici. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Dernière mise à jour le %S +rulesets.neverUpdated=Jamais mis à jour ou échec de la dernière mise à jour +rulesets.enabled=Activées +rulesets.disabled=Désactivées +# Ruleset details/edit ruleset +rulesets.edit=Modifier +rulesets.name=Nom +rulesets.jwk=JWK +rulesets.pathPrefix=Préfixe du chemin +rulesets.scope=Champ d’application +rulesets.enable=Activer cet ensemble de règles +rulesets.checkUpdates=Vérifier la présence de mises à jour +rulesets.jwkPlaceholder=La clé utilisée pour signer cet ensemble de règles au format JWK (JSON Web Key) +rulesets.jwkInvalid=Impossible d’analyser la JWK ou est la clé n’est pas valide +rulesets.pathPrefixPlaceholder=Préfixe URL qui comprend les fichiers nécessaires à l’ensemble de règles +rulesets.pathPrefixInvalid=Le préfixe du chemin n’est pas une URL HTTP(S) valide +rulesets.scopePlaceholder=Expression rationnelle pour le champ d’action de ces règles +rulesets.scopeInvalid=Le champ d’action n’a pas pu être analysé en tant qu’expression rationnelle +rulesets.save=Enregistrer +rulesets.cancel=Annuler diff --git a/toolkit/torbutton/chrome/locale/fr/torlauncher.properties b/toolkit/torbutton/chrome/locale/fr/torlauncher.properties new file mode 100644 index 000000000000..4951898ca1b3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/fr/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Lanceur Tor + +torlauncher.tor_exited_during_startup=Tor s’est fermé pendant le démarrage. Cela peut être dû à une erreur dans votre fichier torrc, un bogue dans Tor ou dans un autre programme de votre système, ou encore à un matériel défectueux. Jusqu’à ce que vous corrigiez le problème sous-jacent et redémarriez Tor, le Navigateur Tor ne démarrera pas. +torlauncher.tor_exited=Tor s’est fermé de manière imprévue. Cela peut être dû à un bogue dans Tor même, un autre programme dans votre système ou un matériel défectueux. Jusqu’à ce que vous redémarriez Tor, le Navigateur Tor ne pourra atteindre aucun site. Si le problème persiste, veuillez envoyer une copie de votre journal de Tor à l’équipe de soutien. +torlauncher.tor_exited2=Redémarrer Tor ne fermera pas les onglets de votre navigateur. +torlauncher.tor_controlconn_failed=Impossible de se connecter au port de contrôle de Tor. +torlauncher.tor_failed_to_start=Échec de démarrage de Tor. +torlauncher.tor_control_failed=La prise de contrôle de Tor a échoué. +torlauncher.tor_bootstrap_failed=Échec lors de la connexion de Tor au réseau Tor. +torlauncher.tor_bootstrap_failed_details=L’étape %1$S a échoué (%2$S). + +torlauncher.unable_to_start_tor=Impossible de démarrer Tor.\n\n%S +torlauncher.tor_missing=Il manque l’exécutable de Tor. +torlauncher.torrc_missing=Le fichier torrc manque et n’a pas pu être créé. +torlauncher.datadir_missing=Le répertoire de données de Tor n’existe pas et n’a pas pu être créé. +torlauncher.onionauthdir_missing=Le répertoire d’authentification oignon de Tor n’existe pas et n’a pas pu être créé. +torlauncher.password_hash_missing=Échec d’obtention du mot de passe haché. + +torlauncher.failed_to_get_settings=Impossible de récupérer les paramètres de Tor.\n\n%S +torlauncher.failed_to_save_settings=Impossible d’enregistrer les paramètres de Tor.\n\n%S +torlauncher.ensure_tor_is_running=Veuillez vous assurer que Tor fonctionne. + +torlauncher.error_proxy_addr_missing=Vous devez indiquer une adresse IP ou un nom d’hôte et un numéro de port pour que Tor puisse utiliser un mandataire afin d’accéder à Internet. +torlauncher.error_proxy_type_missing=Vous devez choisir le type de mandataire. +torlauncher.error_bridges_missing=Vous devez spécifier un ou plusieurs ponts. +torlauncher.error_default_bridges_type_missing=Vous devez sélectionner un type de transport pour les ponts fournis. +torlauncher.error_bridgedb_bridges_missing=Veuillez demander un pont. +torlauncher.error_bridge_bad_default_type=Aucun des ponts fournis n’est disponible pour le type de transport %S, Veuillez ajuster vos paramètres. + +torlauncher.bridge_suffix.meek-amazon=(fonctionne en Chine) +torlauncher.bridge_suffix.meek-azure=(fonctionne en Chine) + +torlauncher.request_a_bridge=Demander un pont… +torlauncher.request_a_new_bridge=Demander un nouveau pont… +torlauncher.contacting_bridgedb=Connexion à BridgeDB. Veuillez patienter. +torlauncher.captcha_prompt=Résolvez le captcha pour demander un pont. +torlauncher.bad_captcha_solution=La solution est erronée. Veuillez réessayer. +torlauncher.unable_to_get_bridge=Impossible d’obtenir un pont de BridgeDB.\n\n%S +torlauncher.no_meek=Ce navigateur n’est pas configuré pour meek, qui est nécessaire pour obtenir des ponts. +torlauncher.no_bridges_available=Aucun pont n’est proposé pour l’instant. Désolé. + +torlauncher.connect=Se connecter +torlauncher.restart_tor=Redémarrer Tor +torlauncher.quit=Fermer +torlauncher.quit_win=Sortir +torlauncher.done=Terminé + +torlauncher.forAssistance=Pour de l’assistance, contacter %S +torlauncher.forAssistance2=Pour de l’assistance, visiter %S + +torlauncher.copiedNLogMessages=La copie est terminée. %S messages du journal de Tor sont prêts à être collés dans un éditeur de texte ou dans un courriel. + +torlauncher.bootstrapStatus.starting=Démarrage +torlauncher.bootstrapStatus.conn_pt=Connexion au pont +torlauncher.bootstrapStatus.conn_done_pt=Nous sommes connecté au pont +torlauncher.bootstrapStatus.conn_proxy=Connexion au mandataire +torlauncher.bootstrapStatus.conn_done_proxy=Nous sommes connecté au mandataire +torlauncher.bootstrapStatus.conn=Connexion à un relais Tor +torlauncher.bootstrapStatus.conn_done=Nous sommes connecté à un relais Tor +torlauncher.bootstrapStatus.handshake=Négociation avec un relais Tor +torlauncher.bootstrapStatus.handshake_done=La négociation avec un relais Tor est terminée +torlauncher.bootstrapStatus.onehop_create=Mise en place d’une connexion chiffrée à l’annuaire +torlauncher.bootstrapStatus.requesting_status=Récupération de l’état du réseau +torlauncher.bootstrapStatus.loading_status=Chargement de l’état du réseau +torlauncher.bootstrapStatus.loading_keys=Chargement des certificats d’autorité +torlauncher.bootstrapStatus.requesting_descriptors=Demande de renseignements sur le relais +torlauncher.bootstrapStatus.loading_descriptors=Chargement des renseignements sur le relais +torlauncher.bootstrapStatus.enough_dirinfo=Le chargement des renseignements du relais est terminé +torlauncher.bootstrapStatus.ap_conn_pt=Construction des circuits : connexion au pont +torlauncher.bootstrapStatus.ap_conn_done_pt=Construction des circuits : nous sommes connecté au pont +torlauncher.bootstrapStatus.ap_conn_proxy=Construction des circuits : connexion au mandataire +torlauncher.bootstrapStatus.ap_conn_done_proxy=Construction des circuits : nous sommes connecté au mandataire +torlauncher.bootstrapStatus.ap_conn=Construction des circuits : connexion à un relais Tor +torlauncher.bootstrapStatus.ap_conn_done=Construction des circuits : nous sommes connecté à un relais Tor +torlauncher.bootstrapStatus.ap_handshake=Construction des circuits : négociation avec un relais Tor +torlauncher.bootstrapStatus.ap_handshake_done=Construction des circuits : la négociation avec un relais Tor est terminée +torlauncher.bootstrapStatus.circuit_create=Construction des circuits : mise en place d’un circuit Tor +torlauncher.bootstrapStatus.done=Vous êtes connecté au réseau Tor + +torlauncher.bootstrapWarning.done=terminé +torlauncher.bootstrapWarning.connectrefused=connexion refusée +torlauncher.bootstrapWarning.misc=divers +torlauncher.bootstrapWarning.resourcelimit=ressources insuffisantes +torlauncher.bootstrapWarning.identity=mauvaise concordance de l’identité +torlauncher.bootstrapWarning.timeout=expiration du temps de connexion +torlauncher.bootstrapWarning.noroute=pas de route vers l’hôte +torlauncher.bootstrapWarning.ioerror=erreur de lecture/écriture +torlauncher.bootstrapWarning.pt_missing=le transport enfichable manque + +torlauncher.nsresult.NS_ERROR_NET_RESET=La connexion au serveur a été perdue. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Impossible de se connecter au serveur. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Impossible de se connecter au mandataire. + +torlauncher.copiedNLogMessagesShort=Les journaux de %S ont été copiés diff --git a/toolkit/torbutton/chrome/locale/ga-IE/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ga-IE/aboutDialog.dtd new file mode 100644 index 000000000000..6ad9a5ca20de --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "Tá &brandShortName; forbartha ag"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", eagraíocht neamhbhrabhúis a chosnaíonn do phríobháideachas agus do shaoirse ar líne."> + +<!ENTITY help.start "Ar mhaith leat cuidiú linn?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Tabhair síntiús airgid"> +<!ENTITY help.or "nó"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "glac páirt"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Ceisteanna?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Cabhraigh linn borradh a chur faoi Líonra Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Ceadúnas"> +<!ENTITY tor.TrademarkStatement "Is trádmharcanna de chuid Tor Project, Inc. iad 'Tor' agus an 'Onion Logo'"> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ga-IE/aboutTBUpdate.dtd new file mode 100644 index 000000000000..0600abbd3218 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Logchomhad Athruithe Brabhsálaí Tor"> +<!ENTITY aboutTBUpdate.updated "Nuashonraíodh Brabhsálaí Tor"> +<!ENTITY aboutTBUpdate.linkPrefix "Chun teacht ar an eolas is déanaí maidir leis an leagan seo, "> +<!ENTITY aboutTBUpdate.linkLabel "tabhair cuairt ar ár suíomh Gréasáin"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Leagan"> +<!ENTITY aboutTBUpdate.releaseDate "Dáta Foilsithe"> +<!ENTITY aboutTBUpdate.releaseNotes "Nótaí Eisiúna"> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd new file mode 100644 index 000000000000..c33b4bc6eeef --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Maidir le Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Féach ar an Logchomhad Athruithe"> + +<!ENTITY aboutTor.ready.label "Brabhsáil. Príobháideachas."> +<!ENTITY aboutTor.ready2.label "Tá tú réidh don bhrabhsálaí is príobháidí ar domhan."> +<!ENTITY aboutTor.failure.label "Chuaigh rud éigin ar strae!"> +<!ENTITY aboutTor.failure2.label "Níl Tor ag obair sa bhrabhsálaí seo."> + +<!ENTITY aboutTor.search.label "Cuardach DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Ceisteanna?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Féach ar Lámhleabhar Bhrabhsálaí Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Lámhleabhar Bhrabhsálaí Tor"> + +<!ENTITY aboutTor.tor_mission.label "Eagraíocht neamhbhrabúis 501(c)(3) sna Stáit Aontaithe is ea Tionscadal Tor. An phríomhaidhm atá againn ná cearta daonna agus an tsaoirse a chur chun cinn trí theicneolaíochtaí oscailte agus saor in aisce a thacaíonn leis an bpríobháideachas ar líne a fhorbairt, na teicneolaíochtaí seo a scaipeadh gan srian agus a n-úsáid a spreagadh, agus tuiscint níos fearr ar chúrsaí príobháideachais a fhorbairt i measc an phobail."> +<!ENTITY aboutTor.getInvolved.label "Glac Páirt »"> + +<!ENTITY aboutTor.newsletter.tagline "Faigh an nuacht is déanaí maidir le Tor i do bhosca isteach."> +<!ENTITY aboutTor.newsletter.link_text "Cláraigh le Nuachtlitir Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tá Tor saor in aisce a bhuí le bronntanais airgid ó dhaoine cosúil leatsa."> +<!ENTITY aboutTor.donationBanner.buttonA "Tabhair síntiús airgid anois"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "Tá tú réidh don bhrabhsálaí is príobháidí ar domhan."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "Tá tú réidh don bhrabhsálaí is príobháidí ar domhan."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONATE NOW"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/brand.dtd b/toolkit/torbutton/chrome/locale/ga-IE/brand.dtd new file mode 100644 index 000000000000..0c8c771a01fc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Brabhsálaí Tor"> +<!ENTITY brandShortName "Brabhsálaí Tor"> +<!ENTITY brandFullName "Brabhsálaí Tor"> +<!ENTITY vendorShortName "Tionscadal Tor"> +<!ENTITY trademarkInfo.part1 "Is trádmharcanna de chuid Tor Project, Inc. iad 'Tor' agus an 'Onion Logo'"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Brabhsálaí Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Cliceáil chun forlíontáin an chórais a lódáil"> +<!ENTITY plugins.installed.enable "Cumasaigh breiseáin"> +<!ENTITY plugins.installed.disable "Díchumasaigh breiseáin"> +<!ENTITY plugins.installed.disable.tip "Cliceáil chun cosc a chur ar fhorlíontáin an chórais"> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/brand.properties b/toolkit/torbutton/chrome/locale/ga-IE/brand.properties new file mode 100644 index 000000000000..3449484cb270 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Brabhsálaí Tor +brandShortName=Brabhsálaí Tor +brandFullName=Brabhsálaí Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Brabhsálaí Tor +vendorShortName=Tionscadal Tor + +homePageSingleStartMain=Firefox Start, leathanach baile sciobtha, le cuardach ionsuite +homePageImport=Iompórtáil do leathanach baile ó %S + +homePageMigrationPageTitle=Roghnú Leathanaigh Bhaile +homePageMigrationDescription=Roghnaigh do leathanach baile: + +syncBrandShortName=Sioncronú diff --git a/toolkit/torbutton/chrome/locale/ga-IE/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ga-IE/branding/brand.ftl new file mode 100644 index 000000000000..518548c93130 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Brabhsálaí Tor +-brand-short-name = Brabhsálaí Tor +-brand-full-name = Brabhsálaí Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Brabhsálaí Tor +-vendor-short-name = Tionscadal Tor +trademarkInfo = Is trádmharcanna de chuid Tor Project, Inc. iad 'Tor' agus an 'Onion Logo' diff --git a/toolkit/torbutton/chrome/locale/ga-IE/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ga-IE/browserOnboarding.properties new file mode 100644 index 000000000000..fed5395126e6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Fáilte +onboarding.tour-tor-welcome.title=Tá tú réidh. +onboarding.tour-tor-welcome.description=Soláthraíonn Brabhsálaí Tor príobháideachas agus slándáil den chéad scoth ar an nGréasán. Cosnaíonn sé thú ar lorgaireacht, ar fhaire leictreonach, agus ar chinsireacht. Míneoidh an ceacht beag seo an chaoi a n-oibríonn sé. +onboarding.tour-tor-welcome.next-button=Socruithe Príobháideachais + +onboarding.tour-tor-privacy=Príobháideachas +onboarding.tour-tor-privacy.title=Cuir bac ar na lorgairí agus ar na gliúcaigh. +onboarding.tour-tor-privacy.description=Coinníonn Brabhsálaí Tor fianáin scartha agus scriosann sé do stair bhrabhsála tar éis gach seisiúin. Sa chaoi seo, cosnaíonn sé do phríobháideachas agus do shlándáil sa mbrabhsálaí. Cliceáil 'Líonra Tor' le foghlaim conas a chosnaímid thú ar leibhéal an líonra. +onboarding.tour-tor-privacy.button=Téigh go Líonra Tor + +onboarding.tour-tor-network=Líonra Tor +onboarding.tour-tor-network.title=Taisteal ar líonra díláraithe. +onboarding.tour-tor-network.description=Ceanglaíonn Brabhsálaí Tor le líonra Tor thú, líonra faoi stiúir na mílte oibrí deonach timpeall an domhain. I gcodarsnacht le VPN, níl éalang aonair ann agus ní gá duit muinín a chur in eagraíocht láraithe chun taitneamh a bhaint as an Idirlíon go príobháideach. +onboarding.tour-tor-network.description-para2=NUA: Gheobhaidh tú Socruithe Líonra Tor sna Sainroghanna, an comhéadan lenar féidir drochid a iarraidh san áireamh. +onboarding.tour-tor-network.action-button=Athraigh Socruithe Líonra Tor +onboarding.tour-tor-network.button=Téigh go dtí Taispeántas an Chiorcaid + +onboarding.tour-tor-circuit-display=Taispeántas an Chiorcaid +onboarding.tour-tor-circuit-display.title=Do chosán a dhéanamh. +onboarding.tour-tor-circuit-display.description=Ar gach fearann a dtugann tú cuairt air, cuirtear do chuid tráchta ar aghaidh trí chiorcad déanta as trí cinn d'athsheachadáin timpeall an domhain. Is féidir leat ciorcad nua a iarraidh trí ‘Ciorcadh Nua don Suíomh seo’ a chliceáil i dTaispeántas an Chiorcaid. +onboarding.tour-tor-circuit-display.button=Mo Chosán +onboarding.tour-tor-circuit-display.next-button=Socruithe Slándála + +onboarding.tour-tor-security=Slándáil +onboarding.tour-tor-security.title=D'eispéireas féin. +onboarding.tour-tor-security.description=Soláthraímid socruithe breise duit lenar féidir leat leibhéal slándála níos airde a bhaint amach trí, mar shampla, cosc a chur ar eilimintí áirithe a d'fhéadfaí a úsáid chun ionsaí a dhéanamh ar do ríomhaire. Cliceáil thíos chun tuilleadh eolais a fháil faoi na roghanna éagsúla. +onboarding.tour-tor-security.description-suffix=Nóta: De réir réamhshocraithe, ní chuirtear NoScript ná HTTPS Everywhere ar an mbarra uirlisí, ach is féidir leat iad a chur ann sna socruithe. +onboarding.tour-tor-security-level.button=Féach ar do Leibhéal Slándála +onboarding.tour-tor-security-level.next-button=Leideanna Eispéiris + +onboarding.tour-tor-expect-differences=Leideanna +onboarding.tour-tor-expect-differences.title=Bí ag súil le difríochtaí. +onboarding.tour-tor-expect-differences.description=D'fhéadfadh d'eispéireas ar an Idirlíon a bheith pas beag difriúil mar gheall ar na gnéithe príobháideachais agus slándála i mbrabhsálaí Tor. B'fhéidir go mbeadh sé beagán níos moille, agus tá seans ann nach bhfeidhmeoidh nó nach lódálfaidh eilimintí áirithe, ag brath ar an leibhéal slándála. Uaireanta, iarrfar ort cruthúnas a thabhairt nach róbat thú. +onboarding.tour-tor-expect-differences.button=Ceisteanna Coitianta +onboarding.tour-tor-expect-differences.next-button=Seirbhísí Onion + +onboarding.tour-tor-onion-services=Seirbhísí Onion +onboarding.tour-tor-onion-services.title=Cosaint bhreise. +onboarding.tour-tor-onion-services.description=Is éard atá i seirbhís onion ná suíomh speisialta ón fhearann barrleibhéil .onion a sholáthraíonn cosaintí breise d'fhoilsitheoirí agus do chuairteoirí, cosaintí ar an gcinsireacht san áireamh. Is féidir le haon duine seirbhísí onion a úsáid chun ábhar a fhoilsiú agus seirbhísí a sholáthar gan a ainm a nochtadh. Cliceáil thíos le cuairt a thabhairt ar an suíomh onion do DuckDuckGo. +onboarding.tour-tor-onion-services.button=Oscail Oinniún +onboarding.tour-tor-onion-services.next-button=Déanta + +onboarding.overlay-icon-tooltip-updated2=Gach rud nua\nin %S +onboarding.tour-tor-update.prefix-new=Nua +onboarding.tour-tor-update.prefix-updated=Nuashonraithe + +onboarding.tour-tor-toolbar=Barra Uirlisí +onboarding.tour-tor-toolbar-update-9.0.title=Slán agat, a Chnaipe Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Ba mhaith linn d'eispéireas iomlán le Tor a chomhtháthú le Brabhsálaí Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Dá bharr sin, in áit an chnaipe onion, tá tú anois in ann do Chiorcad Tor a fheiceáil tríd an [i] sa bharra suímh, agus Aitheantas Nua a iarraidh ón gcnaipe sa bharra uirlisí nó ón roghchlár [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Conas a iarrtar Aitheantas Nua +onboarding.tour-tor-toolbar-update-9.0.next-button=Téigh go Líonra Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Ar Aghaidh +onboarding.tor-circuit-display.done=Déanta +onboarding.tor-circuit-display.one-of-three=1 as 3 +onboarding.tor-circuit-display.two-of-three=2 as 3 +onboarding.tor-circuit-display.three-of-three=3 as 3 + +onboarding.tor-circuit-display.intro.title=Cén chaoi a n-oibríonn ciorcaid? +onboarding.tor-circuit-display.intro.msg=Déantar ciorcaid as athsheachadáin a roghnaítear go randamach, ríomhairí timpeall an domhain a chuireann trácht Tor ar aghaidh. Ligeann an ciorcad duit an Gréasán a bhrabhsáil go príobháideach agus seirbhísí onion a úsáid. + +onboarding.tor-circuit-display.diagram.title=Taispeántas an Chiorcaid +onboarding.tor-circuit-display.diagram.msg=Léiríonn an léaráid seo na hathsheachadáin sa gciorcad don suíomh seo. Tá ciorcad difriúil ag gach suíomh sa chaoi nach féidir le tríú páirtithe do chuid gníomhaíochta a nascadh ó shuíomh go suíomh. + +onboarding.tor-circuit-display.new-circuit.title=An teastaíonn ciorcad nua uait? +onboarding.tor-circuit-display.new-circuit.msg=Mura bhfuil tú in ann ceangal a bhunú le suíomh Gréasáin, nó mura bhfuil sé ag lódáil mar ba cheart, is féidir leat an cnaipe seo a úsáid chun an suíomh a athlódáil le ciorcad nua. diff --git a/toolkit/torbutton/chrome/locale/ga-IE/network-settings.dtd b/toolkit/torbutton/chrome/locale/ga-IE/network-settings.dtd new file mode 100644 index 000000000000..a7810730c23c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Socruithe Líonra Tor"> +<!ENTITY torsettings.wizard.title.default "Ceangail le Tor"> +<!ENTITY torsettings.wizard.title.configure "Socruithe Líonra Tor"> +<!ENTITY torsettings.wizard.title.connecting "Ceangal á bhunú"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Teanga Bhrabhsálaí Tor"> +<!ENTITY torlauncher.localePicker.prompt "Roghnaigh teanga."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Cliceáil “Ceangail” chun ceangal a bhunú le Tor."> +<!ENTITY torSettings.configurePrompt "Cliceáil “Cumraigh” chun na socruithe líonra a athrú má tá tú i do chónaí i dtír a dhéanann cinsireacht ar Tor (mar shampla san Éigipt, sa tSín, nó sa Tuirc), nó má tá tú ag ceangal ó líonra príobháideach a úsáideann seachfhreastalaí."> +<!ENTITY torSettings.configure "Cumraigh"> +<!ENTITY torSettings.connect "Ceangail"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "An fanacht go dtosóidh Tor..."> +<!ENTITY torsettings.restartTor "Atosaigh Tor"> +<!ENTITY torsettings.reconfigTor "Athchumraigh"> + +<!ENTITY torsettings.discardSettings.prompt "Chumraigh tú droichid Tor nó shocraigh tú seachfhreastalaí áitiúil roimhe seo.&160; Chun ceangal díreach le líonra Tor a bhunú, caithfidh tú na socruithe seo a scriosadh."> +<!ENTITY torsettings.discardSettings.proceed "Scrios na Socruithe agus Ceangail"> + +<!ENTITY torsettings.optional "Roghnach"> + +<!ENTITY torsettings.useProxy.checkbox "Úsáidim seachfhreastalaí chun ceangal leis an Idirlíon"> +<!ENTITY torsettings.useProxy.type "Cineál Seachfhreastalaí"> +<!ENTITY torsettings.useProxy.type.placeholder "roghnaigh cineál an tseachfhreastalaí"> +<!ENTITY torsettings.useProxy.address "Seoladh"> +<!ENTITY torsettings.useProxy.address.placeholder "Seoladh IP nó óstainm"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Ainm Úsáideora"> +<!ENTITY torsettings.useProxy.password "Focal faire"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Téann an ríomhaire seo trí bhalla dóiteáin nach gceadaíonn ceangail ach le poirt áirithe"> +<!ENTITY torsettings.firewall.allowedPorts "Poirt a Cheadaítear"> +<!ENTITY torsettings.useBridges.checkbox "Déantar cinsireacht ar Tor sa tír seo"> +<!ENTITY torsettings.useBridges.default "Roghnaigh droichead ionsuite"> +<!ENTITY torsettings.useBridges.default.placeholder "roghnaigh droichead"> +<!ENTITY torsettings.useBridges.bridgeDB "Iarr droichead ó torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Cuir isteach na carachtair a fheiceann tú sa bpictiúr"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Faigh dúshlán nua"> +<!ENTITY torsettings.useBridges.captchaSubmit "Seol"> +<!ENTITY torsettings.useBridges.custom "Úsáid droichead ar m'eolas"> +<!ENTITY torsettings.useBridges.label "Cuir isteach eolas faoi dhroichead ó fhoinse iontaofa."> +<!ENTITY torsettings.useBridges.placeholder "clóscríobh seoladh:port (ceann amháin ar gach líne)"> + +<!ENTITY torsettings.copyLog "Cóipeáil Logchomhad Tor go dtí an Ghearrthaisce"> + +<!ENTITY torsettings.proxyHelpTitle "Cabhair le Seachfhreastalaithe"> +<!ENTITY torsettings.proxyHelp1 "Uaireanta úsáidtear seachfhreastalaí áitiúil nuair a cheanglaítear ó líonra i gcomhlacht, i scoil, nó in ollscoil. Mura bhfuil tú cinnte an dteastaíonn seachfhreastalaí uait, caith súil ar na socruithe Idirlín i mbrabhsálaí eile, nó ar shocruithe líonra do chórais."> + +<!ENTITY torsettings.bridgeHelpTitle "Cabhair le Droichid"> +<!ENTITY torsettings.bridgeHelp1 "Tá sé níos deacra cosc a chur ar cheangail le Líonra Tor nuair a úsáideann tú droichead, cineál athsheachadán neamhliostaithe. Úsáideann gach droichead modh difriúil leis an gcinsireacht a sheachaint. Mar shampla, cuireann na droichid obfs cuma randamach ar do thrácht líonra, agus leis na cinn meek, dealraíonn sé go bhfuil tú ag ceangal leis an tseirbhís sin seachas le Tor."> +<!ENTITY torsettings.bridgeHelp2 "Mar gheall ar an tslí a gcuireann tíortha áirithe cosc ar Tor, feidhmíonn droichid áirithe i dtíortha áirithe ach ní fheidhmíonn siad i dtíortha eile.&160;Mura bhfuil tú cinnte faoi na droichid a fheidhmeoidh i do thírse, tabhair cuairt ar torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Fan tamall agus ceangal le líonra Tor á bhunú.  Seans go dtógfaidh seo cúpla nóiméad."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Ceangal"> +<!ENTITY torPreferences.torSettings "Socruithe Tor"> +<!ENTITY torPreferences.torSettingsDescription "Seolann Brabhsálaí Tor do chuid tráchta thar líonra Tor, líonra faoi stiúir na mílte oibrí deonach timpeall an domhain." > +<!ENTITY torPreferences.learnMore "Tuilleadh eolais"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "As líne"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Connected"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Tuilleadh eolais"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Droichid"> +<!ENTITY torPreferences.bridgesDescription "Cabhraíonn droichid leat teacht ar líonra Tor ó áiteanna ina bhfuil cosc ar Tor. Seans go bhfeidhmeodh droichead amháin níos fearr ná cinn eile, ag brath ar an áit ina bhfuil tú."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatic"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Bain"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Cóipeáilte!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Iarr Droichead..."> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Ardroghanna"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Féach ar na Logchomhaid..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Cealaigh"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Iarr Droichead"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Ag dul i dteagmháil le BridgeDB. Fan nóiméad."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Réitigh an CAPTCHA le droichead a iarraidh."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Níl an freagra sin ceart. Bain triail eile as."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Logchomhaid Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "Connecting…"> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatic"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Try Again"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/onboarding.properties b/toolkit/torbutton/chrome/locale/ga-IE/onboarding.properties new file mode 100644 index 000000000000..51f90aacf415 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=New to %S?\nLet’s get started. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S is all new.\nSee what you can do! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Dún +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Díbir +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Complete diff --git a/toolkit/torbutton/chrome/locale/ga-IE/torbutton.dtd b/toolkit/torbutton/chrome/locale/ga-IE/torbutton.dtd new file mode 100644 index 000000000000..c5b9a9f71cb4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Aitheantas Nua"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Ciorcad Nua Tor don Suíomh seo"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Socruithe Líonra Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Lorg Nuashonrú ar Bhrabhsálaí Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Caomhnú Fianán..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Cliceáil chun cnaipe Tor a thúsú"> +<!ENTITY torbutton.prefs.security_settings "Socruithe Slándála Bhrabhsálaí Tor"> +<!ENTITY torbutton.cookiedialog.title "Bainistigh Caomhnú Fianán"> +<!ENTITY torbutton.cookiedialog.lockCol "Cosanta"> +<!ENTITY torbutton.cookiedialog.domainCol "Óstríomhaire"> +<!ENTITY torbutton.cookiedialog.nameCol "Ainm"> +<!ENTITY torbutton.cookiedialog.pathCol "Cosán"> +<!ENTITY torbutton.cookiedialog.protectCookie "Caomhnaigh an Fianán"> +<!ENTITY torbutton.cookiedialog.removeCookie "Scrios an Fianán"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Ná caomhnaigh an fianán"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Scrios iad nach bhfuil caomhnaithe"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Caomhnaigh Fianáin Nua"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Ná Caomhnaigh Fianáin Nua"> +<!ENTITY torbutton.prefs.sec_caption "Leibhéal Slándála"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Ligeann an Sleamhnán Slándála duit gnéithe áirithe sa bhrabhsálaí a dhíchumasú nuair is féidir le bradaí iad a úsáid chun ionsaí a dhéanamh ort."> +<!ENTITY torbutton.prefs.sec_standard_label "Gnáthshlándáil"> +<!ENTITY torbutton.prefs.sec_standard_description "Gach gné de bhrabhsálaí Tor agus gach gné de shuímh Ghréasáin ar siúl."> +<!ENTITY torbutton.prefs.sec_safer_label "Níos Sábháilte"> +<!ENTITY torbutton.prefs.sec_safer_description "Díchumasaítear gnéithe de shuímh atá contúirteach go minic; dá bharr seo, ní fheidhmeoidh gach suíomh mar is ceart."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Leis an rogha níos sábháilte:"> +<!ENTITY torbutton.prefs.sec_safest_label "Is Sábháilte"> +<!ENTITY torbutton.prefs.sec_safest_description "Ní cheadaítear ach na gnéithe atá de dhíth ar shuímh statacha agus ar bhunseirbhísí. Téann na hathruithe seo i bhfeidhm ar íomhánna, ar mheáin, agus ar scripteanna."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Leis an rogha is sábháilte:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Tuilleadh eolais"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "Tá JavaScript díchumasaithe ar shuímh nach mbaineann úsáid as HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "Tá JavaScript díchumasaithe ar gach suíomh de réir réamhshocraithe."> +<!ENTITY torbutton.prefs.sec_limit_typography "Tá roinnt clófhoirne agus siombailí matamaiticiúla díchumasaithe."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Tá roinnt clófhoirne, deilbhíní, siombailí matamaiticiúla, agus íomhánna díchumasaithe."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Caithfidh tú fuaimeanna, físeáin (meáin HTML5), agus WebGL a chliceáil lena seinm."> +<!ENTITY torbutton.prefs.sec_custom_warning "Saincheaptha"> +<!ENTITY torbutton.prefs.sec_overview "Díchumasaigh gnéithe áirithe a d'fhéadfaí a úsáid chun ionsaí a dhéanamh ort nó d'aitheantas a nochtadh."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Leibhéal Slándála: Gnáthleibhéal"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Leibhéal Slándála: Níos Sábháilte"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Leibhéal Slándála: Is Sábháilte"> +<!ENTITY torbutton.prefs.sec_custom_summary "Tá socruithe slándála an bhrabhsálaí as an ngnáth faoi láthair, mar thoradh ar do chuid sainroghanna. Ar chúiseanna slándála agus príobháideachais, molaimid duit ceann de na leibhéil slándála réamhshocraithe a roghnú."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Fill ar na Réamhshocruithe"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Ardsocruithe Slándála..."> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Ciorcad Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Ciorcad Nua don Suíomh seo"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Oscail leid fhíordheimhnithe don tseirbhís onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Meabhraigh an eochair seo"> diff --git a/toolkit/torbutton/chrome/locale/ga-IE/torbutton.properties b/toolkit/torbutton/chrome/locale/ga-IE/torbutton.properties new file mode 100644 index 000000000000..dc74ebe477f7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = An tIdirlíon +torbutton.circuit_display.ip_unknown = IP anaithnid +torbutton.circuit_display.onion_site = Suíomh Onion +torbutton.circuit_display.this_browser = An brabhsálaí seo +torbutton.circuit_display.relay = Athsheachadán +torbutton.circuit_display.tor_bridge = Droichead +torbutton.circuit_display.unknown_country = Tír anaithnid +torbutton.circuit_display.guard = Garda +torbutton.circuit_display.guard_note = Seans nach n-athrófar an nód [Guard]. +torbutton.circuit_display.learn_more = Tuilleadh eolais +torbutton.circuit_display.click_to_copy = Cliceáil le Cóipeáil +torbutton.circuit_display.copied = Cóipeáilte! +torbutton.content_sizer.margin_tooltip = Cuireann Brabhsálaí Tor an chiumhais seo leis an bhfuinneog ionas nach mbeidh leithead agus airde na fuinneoige chomh suntasach, sa chaoi go mbíonn sé níos deacra do ghníomhaíocht ar líne a lorg. +extensions.torbutton@torproject.org.description = Is féidir leat an cnaipe Tor a úsáid chun Tor a chumrú agus do chuid sonraí brabhsála príobháideacha a ghlanadh go tapa agus go héasca. +torbutton.popup.external.title = Íoslódáil cineál comhaid seachtrach? +torbutton.popup.external.app = Ní féidir le Brabhsálaí Tor an comhad seo a thaispeáint. Ní mór duit é a oscailt le feidhmchlár eile.\n\n +torbutton.popup.external.note = Déanann feidhmchláir áirithe ceangal díreach leis an Idirlín gan dul trí Tor mar gheall ar chineálacha comhaid áirithe.\n\n +torbutton.popup.external.suggest = Le bheith slán sábháilte, níor chóir duit comhaid íoslódáilte a oscailt go dtí go mbeidh tú as líne, nó CD Beo Tor ar nós Tails a úsáid.\n +torbutton.popup.launch = Íoslódáil an comhad +torbutton.popup.cancel = Cealaigh +torbutton.popup.dontask = Íoslódáil comhaid go huathoibríoch as seo amach +torbutton.popup.no_newnym = Níl an cnaipe Tor in ann aitheantas nua a thabhairt duit go sábháilte. Níl sé in ann teacht ar Phort Rialaithe Tor.\n\nAn bhfuil tú ag úsáid Burla Brabhsálaí Tor? +torbutton.security_settings.menu.title = Socruithe Slándála +torbutton.title.prompt_torbrowser = Eolas Tábhachtach faoi Chnaipe Tor +torbutton.popup.prompt_torbrowser = Feidhmíonn an cnaipe Tor go difriúil anois; ní féidir leat é a mhúchadh a thuilleadh.\n\nD'athraíomar é seo toisc nach bhfuil sé sábháilte an cnaipe Tor a úsáid i mbrabhsálaí a úsáidtear le brabhsáil lasmuigh de Tor. Bhí an iomarca fabhtanna ann nach rabhamar in ann deisiú ar aon bhealach eile.\n\nMás mian leat leanúint ar aghaidh le Firefox mar is gnáth, ba chóir duit an cnaipe Tor a dhíshuiteáil agus Brabhsálaí Tor a íoslódáil. Tá na hairíonna slándá [...] +torbutton.popup.short_torbrowser = Eolas Tábhachtach maidir leis an gCnaipe Tor!\n\nTá an Cnaipe Tor cumasaithe i gcónaí.\n\nCliceáil air chun tuilleadh eolais a fháil. + +torbutton.popup.confirm_plugins = Is féidir le forlíontáin ar nós Flash dochar a dhéanamh do do phríobháideachas agus d'aitheantas a nochtadh ar líne.\n\nTá siad in ann Tor a sheachaint agus an áit ina bhfuil tú agus do sheoladh IP a nochtadh.\n\nAn bhfuil tú cinnte gur mhaith leat forlíontáin a chumasú?\n\n +torbutton.popup.never_ask_again = Ná fiafraigh díom arís +torbutton.popup.confirm_newnym = Dúnfaidh Brabhsálaí Tor gach fuinneog agus gach cluaisín. Caillfidh tú gach seisiún oscailte.\n\nAn bhfuil fonn ort Brabhsálaí Tor a atosú anois agus d'aitheantas a athshocrú?\n\n + +torbutton.maximize_warning = Bíonn suímh Ghréasáin in ann méid do scáileáin a fháil amach nuair a uasmhéadaíonn tú Brabhsálaí Tor, rud a chabhraíonn leo do ghníomhaíocht ar líne a lorg. Molaimid duit fuinneoga an bhrabhsálaí a fhágáil ar a méid réamhshocraithe. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Rinne an suíomh seo (%S) iarracht sonraí íomhá a bhaint ó chanbhás HTML5, sonraí a d'fhéadfaí a úsáid chun do ríomhaire féin a aithint.\n\nAn bhfuil fonn ort cead a thabhairt don suíomh seo sonraí íomhá a bhaint ó chanbhás HTML5? +canvas.notNow=Níl Anois +canvas.notNowAccessKey=N +canvas.allow=Ceadaigh amach anseo +canvas.allowAccessKey=A +canvas.never=Ná ceadaigh don suíomh seo riamh (molta) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Fadhb leis an bPróifíl %S +profileReadOnly=Ní féidir leat %S a rith ó chóras comhad inléite amháin. Cóipeáil %S go dtí suíomh eile agus ansin bain triail eile as. +profileReadOnlyMac=Ní féidir leat %S a rith ó chóras comhad inléite amháin. Cóipeáil %S go dtí do Dheasc nó an fillteán Applications, ansin bain triail eile as. +profileAccessDenied=Níl cead rochtana ag %S ar an bpróifíl. Athraigh na ceadanna ar do chóras comhad agus bain triail eile as. +profileMigrationFailed=Níorbh fhéidir an phróifíl %S atá agat a aistriú.\nÚsáidfear socruithe nua. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Nuashonrú %S á íoslódáil + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Ceangal Criptithe (Seirbhís Onion, %1$S, eochracha %2$S giotán, %3$S) +pageInfo_OnionEncryption=Ceangal Criptithe (Seirbhís Onion) +pageInfo_OnionName=Ainm an Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Tuilleadh eolais +onionServices.errorPage.browser=Brabhsálaí +onionServices.errorPage.network=Líonra +onionServices.errorPage.onionSite=Suíomh Onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.descNotFound.header=Suíomh Onion gan aimsiú +onionServices.descNotFound=Is dócha go bhfuil an suíomh onion as líne. Téigh i dteagmháil le riarthóir an tsuímh. +onionServices.descNotFound.longDescription=Mionsonraí: %S — Níorbh fhéidir an tuairiscín seo ar sheirbhís onion a aimsiú ar an bhfáinne haiseála, agus dá bharr sin ní féidir leis an gcliant ceangal a bhunú leis an tseirbhís. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.descInvalid.header=Ní féidir teagmháil a dhéanamh leis an suíomh Onion +onionServices.descInvalid=Ní féidir teacht ar an suíomh onion mar gheall ar earráid inmheánach. +onionServices.descInvalid.longDescription=Mionsonraí: %S — Ní féidir an tuairiscín seo ar sheirbhís onion a pharsáil, nó theip ar dheimhniú an tsínithe. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.introFailed.header=Bhris an suíomh Onion an ceangal +onionServices.introFailed=Is dócha go bhfuil an suíomh onion as líne. Téigh i dteagmháil le riarthóir an tsuímh. +onionServices.introFailed.longDescription=Mionsonraí: %S — Theip ar an tionscnamh, rud a chiallaíonn gur aimsíodh an tuairiscín, ach níl an tseirbhís ceangailte leis an bpointe tionscnaimh a thuilleadh. Is dócha gur athraigh an tseirbhís a tuairiscín, nó nach bhfuil sí ag rith. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.rendezvousFailed.header=Ní féidir ceangal a bhunú leis an suíomh onion +onionServices.rendezvousFailed=Tá an suíomh onion gnóthach, nó tá barraíocht tráchta ar líonra Tor faoi láthair. Bain triail eile as ar ball. +onionServices.rendezvousFailed.longDescription=Mionsonraí: %S — Theip ar an gcliant rendezvous a dhéanamh leis an tseirbhís, rud a chiallaíonn nach raibh an cliant in ann an ceangal a chur i gcrích. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Údarú de dhíth +onionServices.clientAuthMissing.header=Teastaíonn fíordheimhniú ón suíomh onion +onionServices.clientAuthMissing=Caithfidh tú eochair a sholáthar chun teacht ar an suíomh onion, ach níor sholáthair tú eochair ar bith. +onionServices.clientAuthMissing.longDescription=Mionsonraí: %S — D'íoslódáil an cliant an tuairiscín ar sheirbhís onion, ach ní raibh sé in ann an t-ábhar a dhíchriptiú toisc bhfuil eolas údaraithe cliaint ar iarraidh. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Theip ar údarú +onionServices.clientAuthIncorrect.header=Theip ar fhíordheimhniú leis an suíomh onion +onionServices.clientAuthIncorrect=Tá an eochair seo mícheart, nó aisghaireadh í. Téigh i dteagmháil le riarthóir an tsuímh onion. +onionServices.clientAuthIncorrect.longDescription=Mionsonraí: %S — D'éirigh leis an gcliant an tuairiscín ar sheirbhís onion a íoslódáil, ach ní raibh sé in ann an t-ábhar a dhíchriptiú leis an eolas údaraithe cliaint a soláthraíodh. Seans go gciallaíonn seo gur aisghaireadh rochtain air. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.badAddress.header=Seoladh Neamhbhailí Onion +onionServices.badAddress=Tá an seoladh onion seo neamhbhailí. Deimhnigh gur chuir tú isteach i gceart é. +onionServices.badAddress.longDescription=Mionsonraí: %S — Tá an seoladh .onion seo neamhbhailí. Ceann de na rudaí seo ba chúis leis an earráid: ní mheaitseálann suim sheiceála an tseolaidh, tá an eochair phoiblí ed25519 neamhbhailí, nó tá an t-ionchódú neamhbhailí. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Níorbh fhéidir an suíomh Onion a lódáil +onionServices.introTimedOut.header=Chuaigh cruthú an chiorcaid onion thar am +onionServices.introTimedOut=Níorbh fhéidir ceangal a bhunú leis an suíomh onion, b'fhéidir mar gheall ar dhroch-cheangal líonra. +onionServices.introTimedOut.longDescription=Mionsonraí: %S — Chuaigh an ceangal leis an tseirbhís onion iarrtha thar am agus an ciorcad rendezvous á thógáil. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=Tá %S ag iarraidh ort fíordheimhniú a dhéanamh. +onionServices.authPrompt.keyPlaceholder=Cuir isteach d'eochair phríobháideach le haghaidh na seirbhíse onion seo +onionServices.authPrompt.done=Déanta +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Cuir isteach eochair bhailí (52 carachtar base32, nó 44 carachtar base64) +onionServices.authPrompt.failedToSetKey=Níorbh fhéidir Tor a chumrú le d'eochair +onionServices.authPreferences.header=Fíordheimhniú do Sheirbhísí Onion +onionServices.authPreferences.overview=Éilíonn seirbhísí onion áirithe go ndeimhníonn tú d'aitheantas le heochair (saghas focail faire) sular féidir leat iad a úsáid. +onionServices.authPreferences.savedKeys=Eochracha Sábháilte... +onionServices.authPreferences.dialogTitle=Eochracha Seirbhíse Onion +onionServices.authPreferences.dialogIntro=Tá eochracha a bhaineann leis na suímh onion seo stóráilte ar do ríomhaire +onionServices.authPreferences.onionSite=Suíomh Onion +onionServices.authPreferences.onionKey=Eochair +onionServices.authPreferences.remove=Bain +onionServices.authPreferences.removeAll=Bain Uile +onionServices.authPreferences.failedToGetKeys=Níorbh fhéidir eochracha a fháil ó Tor +onionServices.authPreferences.failedToRemoveKey=Níorbh fhéidir an eochair a bhaint +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Tuigim +onionServices.v2Deprecated.tooltip=Ní bheidh tú in ann teacht ar an suíomh onion seo go luath + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Tabhair tús áite do Shuímh Onion +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Níl Anois +onionLocation.notNowAccessKey=s +onionLocation.description=Tá leagan níos príobháidí níos sláine den suíomh seo ar fáil ar líonra Tor trí sheirbhísí onion. Cabhraíonn seirbhísí onion le foilsitheoirí suíomh Gréasáin agus lena gcuid cuairteoirí an faireachas agus an chinsireacht a sheachaint. +onionLocation.tryThis=Bain Triail as Seirbhísí Onion +onionLocation.onionAvailable=.onion ar fáil +onionLocation.learnMore=Tuilleadh eolais... +onionLocation.always=I gcónaí +onionLocation.askEverytime=Fiafraigh díom i gcónaí +onionLocation.prioritizeOnionsDescription=Tabhair tús áite do shuímh onion nuair is féidir. +onionLocation.onionServicesTitle=Seirbhísí Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=Cad is féidir leat a dhéanamh? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Tuilleadh eolais +cryptoSafetyPrompt.primaryAction=Athlódáil an Cluaisín seo le Ciorcad Nua +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Cumasaithe +rulesets.disabled=Díchumasaithe +# Ruleset details/edit ruleset +rulesets.edit=Eagar +rulesets.name=Ainm +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Sábháil +rulesets.cancel=Cealaigh diff --git a/toolkit/torbutton/chrome/locale/ga-IE/torlauncher.properties b/toolkit/torbutton/chrome/locale/ga-IE/torlauncher.properties new file mode 100644 index 000000000000..8b17d2e96fdd --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ga-IE/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tosaitheoir Tor + +torlauncher.tor_exited_during_startup=Stop Tor le linn tosaithe. Seans gur tharla sé seo mar gheall ar earráid i do chomhad torrc, fabht i Tor nó i bhfeidhmchlár eile ar do chóras, nó crua-earra lochtach. Go dtí go mbeidh tú in ann an bhunfhadhb a réiteach agus Tor a atosú, ní thosóidh Brabhsálaí Tor. +torlauncher.tor_exited=Stop Tor go tobann. Seans gur tharla sé seo mar gheall ar fhabht i Tor féin nó i bhfeidhmchlár eile ar do chóras, nó mar gheall ar chrua-earra lochtach. Go dtí go dtosóidh tú Tor arís, ní bheidh Brabhsálaí Tor in ann aon suíomh Gréasáin a bhaint amach. Má mhaireann an fhadhb, seol cóip de do logchomhad Tor chuig an bhfoireann tacaíochta. +torlauncher.tor_exited2=Má atosaíonn tú Tor, ní dhúnfaidh do chuid cluaisíní brabhsálaí. +torlauncher.tor_controlconn_failed=Níorbh fhéidir ceangal le port rialaithe Tor. +torlauncher.tor_failed_to_start=Níor thosaigh Tor. +torlauncher.tor_control_failed=Níorbh fhéidir seilbh a ghabháil ar Tor. +torlauncher.tor_bootstrap_failed=Ní raibh Tor in ann ceangal le líonra Tor. +torlauncher.tor_bootstrap_failed_details=Theip ar %1$S (%2$S). + +torlauncher.unable_to_start_tor=Níorbh fhéidir Tor a thosú.\n\n%S +torlauncher.tor_missing=Tá an clár inrite Tor ar iarraidh. +torlauncher.torrc_missing=Tá an comhad torrc ar iarraidh agus níorbh fhéidir é a chruthú. +torlauncher.datadir_missing=Níl comhadlann sonraí Tor ann agus níorbh fhéidir é a chruthú. +torlauncher.onionauthdir_missing=Níl comhadlann fíordheimhnithe onion Tor ann, agus níorbh fhéidir í a chruthú +torlauncher.password_hash_missing=Níl aon fháil ar an bhfocal faire haiseáilte. + +torlauncher.failed_to_get_settings=Ní féidir socruithe Tor a fháil.\n\n%S +torlauncher.failed_to_save_settings=Ní féidir socruithe Tor a shábháil.\n\n%S +torlauncher.ensure_tor_is_running=Ba cheart duit deimhniú go bhfuil Tor ar siúl. + +torlauncher.error_proxy_addr_missing=Caithfidh tú seoladh IP nó óstainm agus uimhir phoirt a sholáthar más mian leat seachfhreastalaí a úsáid chun teacht ar an Idirlíon trí Tor. +torlauncher.error_proxy_type_missing=Caithfidh tú cineál an tseachfhreastalaí a roghnú. +torlauncher.error_bridges_missing=Caithfidh tú droichead nó droichid a shonrú. +torlauncher.error_default_bridges_type_missing=Caithfidh tú cineál iompair a roghnú do na droichid ionsuite. +torlauncher.error_bridgedb_bridges_missing=Iarr droichead. +torlauncher.error_bridge_bad_default_type=Níl aon droichead a úsáideann cineál iompair %S ar fáil. Athraigh do chuid socruithe. + +torlauncher.bridge_suffix.meek-amazon=(oibríonn sé sa tSín) +torlauncher.bridge_suffix.meek-azure=(oibríonn sé sa tSín) + +torlauncher.request_a_bridge=Iarr Droichead... +torlauncher.request_a_new_bridge=Iarr Droichead Nua... +torlauncher.contacting_bridgedb=Ag dul i dteagmháil le BridgeDB. Fan nóiméad. +torlauncher.captcha_prompt=Réitigh an CAPTCHA le droichead a iarraidh. +torlauncher.bad_captcha_solution=Níl an freagra sin ceart. Bain triail eile as. +torlauncher.unable_to_get_bridge=Níorbh fhéidir droichead a fháil ó BridgeDB.\n\n%S +torlauncher.no_meek=Níl thacaíonn an brabhsálaí seo le meek, acmhainn a theastaíonn uait chun droichid a fháil. +torlauncher.no_bridges_available=Níl aon droichead ar fáil faoi láthair. Ár leithscéal. + +torlauncher.connect=Ceangail +torlauncher.restart_tor=Atosaigh Tor +torlauncher.quit=Éirigh as +torlauncher.quit_win=Scoir +torlauncher.done=Déanta + +torlauncher.forAssistance=Déan teagmháil le %S le cúnamh a fháil +torlauncher.forAssistance2=Tabhair cuairt ar %S le cúnamh a fháil + +torlauncher.copiedNLogMessages=Cóipeáílte. Tá %S teachtaireacht ón logchomhad Tor réidh le greamú in eagarthóir téacs nó i dteachtaireacht rphoist. + +torlauncher.bootstrapStatus.starting=Á thosú +torlauncher.bootstrapStatus.conn_pt=Ag ceangal leis an droichead +torlauncher.bootstrapStatus.conn_done_pt=Ceangailte leis an droichead +torlauncher.bootstrapStatus.conn_proxy=Ag ceangal leis an seachfhreastalaí +torlauncher.bootstrapStatus.conn_done_proxy=Ceangailte leis an seachfhreastalaí +torlauncher.bootstrapStatus.conn=Ag ceangal le hathsheachadán Tor +torlauncher.bootstrapStatus.conn_done=Ceangailte le hathsheachadán Tor +torlauncher.bootstrapStatus.handshake=I mbun idirbheartaíochta le hathsheachadán Tor +torlauncher.bootstrapStatus.handshake_done=Idirbheartaíocht le hathsheachadán Tor críochnaithe +torlauncher.bootstrapStatus.onehop_create=Ceangal criptithe le heolaire á bhunú +torlauncher.bootstrapStatus.requesting_status=Stádas an líonra á fháil +torlauncher.bootstrapStatus.loading_status=Stádas an líonra á lódáil +torlauncher.bootstrapStatus.loading_keys=Teastais an údaráis á lódáil +torlauncher.bootstrapStatus.requesting_descriptors=Eolas faoin athsheachadán á iarraidh +torlauncher.bootstrapStatus.loading_descriptors=Eolas faoin athsheachadán á lódáil +torlauncher.bootstrapStatus.enough_dirinfo=Sonraí an athsheachadáin lódáilte +torlauncher.bootstrapStatus.ap_conn_pt=Ciorcaid á dtógáil: Ag ceangal leis an droichead +torlauncher.bootstrapStatus.ap_conn_done_pt=Ciorcaid á dtógáil: Ceangailte leis an droichead +torlauncher.bootstrapStatus.ap_conn_proxy=Ciorcaid á dtógáil: Ag ceangal leis an seachfhreastalaí +torlauncher.bootstrapStatus.ap_conn_done_proxy=Ciorcaid á dtógáil: Ceangailte leis an seachfhreastalaí +torlauncher.bootstrapStatus.ap_conn=Ciorcaid á dtógáil: Ag ceangal le hathsheachadán Tor +torlauncher.bootstrapStatus.ap_conn_done=Ciorcaid á dtógáil: Ceangailte le hathsheachadán Tor +torlauncher.bootstrapStatus.ap_handshake=Ciorcaid á dtógáil: I mbun idirbheartaíochta le hathsheachadán Tor +torlauncher.bootstrapStatus.ap_handshake_done=Ciorcaid á dtógáil: Idirbheartaíocht le hathsheachadán Tor críochnaithe +torlauncher.bootstrapStatus.circuit_create=Ciorcaid á dtógáil: Ciorcad Tor á bhunú +torlauncher.bootstrapStatus.done=Tá tú ceangailte le líonra Tor! + +torlauncher.bootstrapWarning.done=críochnaithe +torlauncher.bootstrapWarning.connectrefused=diúltaíodh an ceangal +torlauncher.bootstrapWarning.misc=éagsúil +torlauncher.bootstrapWarning.resourcelimit=easpa acmhainní +torlauncher.bootstrapWarning.identity=aitheantas mícheart +torlauncher.bootstrapWarning.timeout=ceangal thar am +torlauncher.bootstrapWarning.noroute=níl aon bhealach chuig an óstach +torlauncher.bootstrapWarning.ioerror=earráid léite/scríofa +torlauncher.bootstrapWarning.pt_missing=córas iompair ionphlugáilte ar iarraidh + +torlauncher.nsresult.NS_ERROR_NET_RESET=Briseadh an ceangal leis an bhfreastalaí. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Níorbh fhéidir ceangal leis an bhfreastalaí. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Níorbh fhéidir ceangal a bhunú leis an seachfhreastalaí. + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/he/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/he/aboutDialog.dtd new file mode 100644 index 000000000000..18827406f42c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; פותח ע״י"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", ארגון ללא כוונות רווח הפועל להגן על פרטיותך וחירותך ברשת."> + +<!ENTITY help.start "רוצה לעזור?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "תרום"> +<!ENTITY help.or "או"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "הייה מעורב"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "שאלות?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "עזור לרשת Tor לגדול!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "מידע רישוי"> +<!ENTITY tor.TrademarkStatement "'Tor' ו'סמליל הבצל' הם סימנים מסחריים רשומים של Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/he/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/he/aboutTBUpdate.dtd new file mode 100644 index 000000000000..74770a3a2070 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "יומן שינויים של דפדפן Tor"> +<!ENTITY aboutTBUpdate.updated "דפדפן Tor עודכן."> +<!ENTITY aboutTBUpdate.linkPrefix "למידע המעודכן ביותר לגבי שחרור זה, "> +<!ENTITY aboutTBUpdate.linkLabel "בקר באתר שלנו"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "גרסה"> +<!ENTITY aboutTBUpdate.releaseDate "תאריך שחרור"> +<!ENTITY aboutTBUpdate.releaseNotes "הערות שחרור"> diff --git a/toolkit/torbutton/chrome/locale/he/aboutTor.dtd b/toolkit/torbutton/chrome/locale/he/aboutTor.dtd new file mode 100644 index 000000000000..d79cd3283c2c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "אודות Tor"> + +<!ENTITY aboutTor.viewChangelog.label "הצג יומן שינויים"> + +<!ENTITY aboutTor.ready.label "חקור. בפרטיות."> +<!ENTITY aboutTor.ready2.label "אתה מוכן לחוויה של הגלישה הפרטית ביותר של העולם."> +<!ENTITY aboutTor.failure.label "משהו השתבש!"> +<!ENTITY aboutTor.failure2.label "Tor אינו עובד בדפדפן זה."> + +<!ENTITY aboutTor.search.label "חפש עם DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "שאלות?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "בדוק את מדריך של דפדפן Tor שלנו »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "מ"> +<!ENTITY aboutTor.torbrowser_user_manual.label "מדריך של דפדפן Tor"> + +<!ENTITY aboutTor.tor_mission.label "מיזם Tor הוא ארגון US 501(c)(3) ללא רווחים המקדם זכויות אדם וחירויות ע״י יצירה ופריסה של טכנולוגיות של אלמוניות ופרטיות בקוד פתוח וחינמי, תמיכה בזמינות ובשימוש בלתי־מוגבל שלהן, וקידום הבנה מדעית ועממית שלהן."> +<!ENTITY aboutTor.getInvolved.label "הייה מעורב »"> + +<!ENTITY aboutTor.newsletter.tagline "קבל את החדשות האחרונות מאת Tor ישירות לתיבה הנכנסת שלך."> +<!ENTITY aboutTor.newsletter.link_text "הירשם עבור חדשות Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor חינמי לשימוש בגלל תרומות מאנשים כמוך."> +<!ENTITY aboutTor.donationBanner.buttonA "תרום עכשיו"> + +<!ENTITY aboutTor.alpha.ready.label "בחן. ביסודיות."> +<!ENTITY aboutTor.alpha.ready2.label "אתה מוכן לבחון את החוויה של הגלישה הפרטית ביותר של העולם."> +<!ENTITY aboutTor.alpha.bannerDescription "דפדפן Tor אלפא הוא גרסה בלתי יציבה של דפדפן Tor שאתה יכול להשתמש כדי להציג מראש מאפיינים חדשים, לבחון את הביצוע שלהם ולספק משוב לפני שחרור."> +<!ENTITY aboutTor.alpha.bannerLink "דווח על תקל בפורום Tor"> + +<!ENTITY aboutTor.nightly.ready.label "בחן. ביסודיות."> +<!ENTITY aboutTor.nightly.ready2.label "אתה מוכן לבחון את החוויה של הגלישה הפרטית ביותר של העולם."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "דווח על תקל בפורום Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "תרמו עכשיו"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "התרומה שלך תושווה על ידי חברים של Tor, $100,000 לכל היותר."> diff --git a/toolkit/torbutton/chrome/locale/he/brand.dtd b/toolkit/torbutton/chrome/locale/he/brand.dtd new file mode 100644 index 000000000000..cfd241dcba92 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "דפדפן Tor"> +<!ENTITY brandShortName "דפדפן Tor"> +<!ENTITY brandFullName "דפדפן Tor"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' ו'סמליל הבצל' הם סימנים מסחריים רשומים של Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "דפדפן Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "לחץ כדי לטעון מתקעי מערכת מותקנים"> +<!ENTITY plugins.installed.enable "אפשר מתקעים"> +<!ENTITY plugins.installed.disable "השבת מתקעים"> +<!ENTITY plugins.installed.disable.tip "לחץ כדי למנוע טעינת מתקעי מערכת"> diff --git a/toolkit/torbutton/chrome/locale/he/brand.properties b/toolkit/torbutton/chrome/locale/he/brand.properties new file mode 100644 index 000000000000..ede39f5cb3a3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=דפדפן Tor +brandShortName=דפדפן Tor +brandFullName=דפדפן Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=דפדפן Tor +vendorShortName=מיזם Tor + +homePageSingleStartMain=Firefox Start, דף בית מהיר עם חיפוש מובנה +homePageImport=ייבא את דף הבית שלך מן %S + +homePageMigrationPageTitle=בחירת דף בית +homePageMigrationDescription=אנא בחר את דף הבית שאתה רוצה להשתמש בו: + +syncBrandShortName=סנכרן diff --git a/toolkit/torbutton/chrome/locale/he/branding/brand.ftl b/toolkit/torbutton/chrome/locale/he/branding/brand.ftl new file mode 100644 index 000000000000..c51f3a8b2134 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = דפדפן Tor +-brand-short-name = דפדפן Tor +-brand-full-name = דפדפן Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = דפדפן Tor +-vendor-short-name = מיזם Tor +trademarkInfo = 'Tor' ו'סמליל הבצל' הם סימנים מסחריים רשומים של Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/he/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/he/browserOnboarding.properties new file mode 100644 index 000000000000..2f0949d147f3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=ברוך הבא +onboarding.tour-tor-welcome.title=אתה מוכן. +onboarding.tour-tor-welcome.description=דפדפן Tor מציע את התקן הגבוה ביותר של פרטיות ואבטחה בזמן גלישה ברשת. אתה מוגן כעת מפני מעקב, ציתות וצנזורה. ביאור מהיר זה יראה לך איך. +onboarding.tour-tor-welcome.next-button=לך אל פרטיות + +onboarding.tour-tor-privacy=פרטיות +onboarding.tour-tor-privacy.title=בלום עוקבנים וחטטנים. +onboarding.tour-tor-privacy.description=דפדפן Tor מבודד עוגיות ומוחק את היסטורית הדפדפן שלך לאחר השיח שלך. שינויים אלו מבטיחים שהפרטיות והאבטחה שלך מוגנים בדפדפן. לחץ על ’רשת Tor‘ כדי ללמוד כיצד אנחנו מגינים עליך ברמת הרשת. +onboarding.tour-tor-privacy.button=לך אל רשת Tor + +onboarding.tour-tor-network=רשת Tor +onboarding.tour-tor-network.title=טייל ברשת מבוזרת. +onboarding.tour-tor-network.description=דפדפן Tor מחבר אותך אל רשת Tor המופעלת ע״י אלפי מתנדבים ברחבי העולם. בשונה מאשר VPN, אין נקודת כשל בודדת או כניסה ממורכזת שאתה צריך לסמוך עליה על מנת ליהנות מהאינטרנט באופן פרטי. +onboarding.tour-tor-network.description-para2=חדש: הגדרות רשת Tor, כולל היכולת לבקש גשרים במקום שבו Tor חסום, יכולות להימצא בהעדפות. +onboarding.tour-tor-network.action-button=התאם את הגדרות רשת Tor שלך +onboarding.tour-tor-network.button=לך אל תצוגת מעגל + +onboarding.tour-tor-circuit-display=תצוגת מעגל +onboarding.tour-tor-circuit-display.title=ראה את הנתיב שלך. +onboarding.tour-tor-circuit-display.description=עבור כל תחום שאתה מבקר בו, התעבורה שלך עוברת בממסר ומוצפנת במעגל דרך שלושה ממסרי Tor ברחבי העולם. אין אתר שיודע מאיפה אתה מתחבר. אתה יכול לבקש מעגל חדש ע״י לחיצה על ’מעגל חדש עבור אתר זה‘ בתצוגת המעגל שלנו. +onboarding.tour-tor-circuit-display.button=ראה את הנתיב שלי +onboarding.tour-tor-circuit-display.next-button=לך אל אבטחה + +onboarding.tour-tor-security=אבטחה +onboarding.tour-tor-security.title=בחר את חוויתך. +onboarding.tour-tor-security.description=אנחנו מספקים לך גם הגדרות נוספות עבור הגברת אבטחת הדפדפן שלך. הגדרות האבטחה שלנו מתירות לך לחסום יסודות שעלולים לשמש כדי לתקוף את המחשב שלך. לחץ למטה כדי לראות מה האפשרויות השונות עושות. +onboarding.tour-tor-security.description-suffix=הערה: כברירת מחדל, NoScript ו־HTTPS Everywhere אינם כלולים בסרגל הכלים, אבל אתה יכול להתאים אישית את סרגל הכלים שלך כדי להוסיף אותם. +onboarding.tour-tor-security-level.button=ראה את רמת האבטחה שלך +onboarding.tour-tor-security-level.next-button=לך אל עצות חוויה + +onboarding.tour-tor-expect-differences=עצות חוויה +onboarding.tour-tor-expect-differences.title=צפה למספר הבדלים. +onboarding.tour-tor-expect-differences.description=עם כל המאפיינים של האבטחה והפרטיות המסופקים ע״י Tor, חוויתך בזמן גלישה באינטרנט עשויה להיות מעט שונה. דברים עשויים להיות מעט איטיים יותר, ובהסתמכות על רמת האבטחה שלך, יסודות מסוימים עשויים לא לעבוד או להיטען. ייתכן שתתבקש להוכיח שאתה אנושי ולא רובוט. +onboarding.tour-tor-expect-differences.button=ראה שאלות נפוצות +onboarding.tour-tor-expect-differences.next-button=לך אל שירותי בצל + +onboarding.tour-tor-onion-services=שירותי בצל +onboarding.tour-tor-onion-services.title=הייה אקסטרה מוגן. +onboarding.tour-tor-onion-services.description=שירותי בצל הם אתרים המסתיימים עם .onion המספקים הגנות אקסטרה אל מפרסמים ומבקרים, כולל אמצעיי הגנה שהתווספו נגד צנזורה. שירותי בצל מתירים לכל אחד לספק תוכן ושירותים באופן אלמוני. לחץ למטה כדי לבקר באתר הבצל DuckDuckGo. +onboarding.tour-tor-onion-services.button=בקר בבצל +onboarding.tour-tor-onion-services.next-button=בוצע + +onboarding.overlay-icon-tooltip-updated2=ראה מה חדש\nב־%S +onboarding.tour-tor-update.prefix-new=חדש +onboarding.tour-tor-update.prefix-updated=מעודכן + +onboarding.tour-tor-toolbar=סרגל כלים +onboarding.tour-tor-toolbar-update-9.0.title=להתראות כפתור בצל. +onboarding.tour-tor-toolbar-update-9.0.description=אנחנו רוצים את החוויה של שימוש ב־Tor שלך שתהיה משולבת במלואה בתוך דפדפן Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=זאת הסיבה מדוע כעת, ללא שימוש בכפתור הבצל, אתה יכול לראות את מעגל Tor שלך דרך [i] בשורת הכתובת ולבקש זהות חדשה ע״י שימוש בכפתור סרגל הכלים או בתפריט [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=איך לבקש זהות חדשה +onboarding.tour-tor-toolbar-update-9.0.next-button=לך אל רשת Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=הבא +onboarding.tor-circuit-display.done=בוצע +onboarding.tor-circuit-display.one-of-three=1 מתוך 3 +onboarding.tor-circuit-display.two-of-three=2 מתוך 3 +onboarding.tor-circuit-display.three-of-three=3 מתוך 3 + +onboarding.tor-circuit-display.intro.title=איך מעגלים עובדים? +onboarding.tor-circuit-display.intro.msg=מעגלים בנויים ממסרים מוקצים אקראית, שהם מחשבים ברחבי העולם המתוצרים להעביר הלאה תעבורת Tor. מעגלים מתירים לך לגלוש בפרטיות ולהתחבר אל שירותי בצל. + +onboarding.tor-circuit-display.diagram.title=תצוגת מעגל +onboarding.tor-circuit-display.diagram.msg=תרשים זה מראה את הממסרים המרכיבים את המעגל עבור אתר זה. כדי למנוע קישור פעילות על פני אתרים שונים, כל אתר מקבל מעגל שונה. + +onboarding.tor-circuit-display.new-circuit.title=האם אתה צריך מעגל חדש? +onboarding.tor-circuit-display.new-circuit.msg=אם אינך מצליח להתחבר אל האתר שאתה מנסה לבקר בו או שהוא אינו נטען כראוי, אתה יכול להשתמש בכפתור זה כדי לטעון מחדש את האתר עם מעגל חדש. diff --git a/toolkit/torbutton/chrome/locale/he/network-settings.dtd b/toolkit/torbutton/chrome/locale/he/network-settings.dtd new file mode 100644 index 000000000000..ec6e37007c8d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "הגדרות רשת Tor"> +<!ENTITY torsettings.wizard.title.default "התחבר אל Tor"> +<!ENTITY torsettings.wizard.title.configure "הגדרות רשת Tor"> +<!ENTITY torsettings.wizard.title.connecting "מקים חיבור"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "שפת דפדפן Tor"> +<!ENTITY torlauncher.localePicker.prompt "אנא בחר שפה."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "לחץ על “התחבר“ כדי להתחבר אל Tor."> +<!ENTITY torSettings.configurePrompt "לחץ על ”תצר“ כדי להתאים הגדרות רשת אם אתה במדינה שמצנזרת את Tor (למשל מצרים, סין וטורקיה) או אם אתה מתחבר מרשת פרטית הדורשת ייפוי־כוח."> +<!ENTITY torSettings.configure "תצר"> +<!ENTITY torSettings.connect "התחבר"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "ממתין אל Tor שיתחיל…"> +<!ENTITY torsettings.restartTor "הפעל מחדש את Tor"> +<!ENTITY torsettings.reconfigTor "תצר מחדש"> + +<!ENTITY torsettings.discardSettings.prompt "הגדרת גשרי Tor או הכנסת הגדרות ייפוי־כוח מקומי.  כדי לעשות חיבור ישיר לרשת Tor, הגדרות אלו חייבות להיות מוסרות."> +<!ENTITY torsettings.discardSettings.proceed "הסר הגדרות והתחבר"> + +<!ENTITY torsettings.optional "רשותי"> + +<!ENTITY torsettings.useProxy.checkbox "אני משתמש בייפוי־כוח כדי להתחבר לאינטרנט"> +<!ENTITY torsettings.useProxy.type "סוג ייפוי־כוח"> +<!ENTITY torsettings.useProxy.type.placeholder "בחר סוג ייפוי־כוח"> +<!ENTITY torsettings.useProxy.address "כתובת"> +<!ENTITY torsettings.useProxy.address.placeholder "כתובת IP או שם מארח"> +<!ENTITY torsettings.useProxy.port "פתחה"> +<!ENTITY torsettings.useProxy.username "שם משתמש"> +<!ENTITY torsettings.useProxy.password "סיסמה"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "מחשב זה עובר דרך חומת אש המתירה חיבורים רק אל פתחות מסוימות"> +<!ENTITY torsettings.firewall.allowedPorts "פתחות מותרות"> +<!ENTITY torsettings.useBridges.checkbox "Tor מצונזר במדינה שלי"> +<!ENTITY torsettings.useBridges.default "בחר גשר מובנה"> +<!ENTITY torsettings.useBridges.default.placeholder "בחר גשר"> +<!ENTITY torsettings.useBridges.bridgeDB "בקש גשר מן torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "הכנס את התווים מהתמונה"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "קבל אתגר חדש"> +<!ENTITY torsettings.useBridges.captchaSubmit "הגש"> +<!ENTITY torsettings.useBridges.custom "סַפֵּק גשר שאני מכיר"> +<!ENTITY torsettings.useBridges.label "הכנס מידע גשר ממקור מהימן."> +<!ENTITY torsettings.useBridges.placeholder "הכנס כתובת:פתחה (אחד לשורה)"> + +<!ENTITY torsettings.copyLog "העתק את יומן Tor ללוח החיתוך"> + +<!ENTITY torsettings.proxyHelpTitle "עזרת ייפוי־כוח"> +<!ENTITY torsettings.proxyHelp1 "ייפוי־כוח מקומי נדרש בזמן התחברות דרך רשת של חברה, בית ספר או אוניברסיטה. אם אינך בטוח כיצד לענות על שאלה זו, הבט בהגדרות האינטרנט בדפדפן אחר או בדוק בהגדרות הרשת של מערכתך."> + +<!ENTITY torsettings.bridgeHelpTitle "עזרת ממסרי גשר"> +<!ENTITY torsettings.bridgeHelp1 "גשרים הם ממסרים לא ברשימה אשר מקשים לחסום חיבורים אל רשת Tor.  כל סוג של גשר משתמש בשיטה שונה כדי למנוע צינזור  ה-obfs גורם לתעבורה שלך להיראות כרעש אקראי, וה-meek גורם לתעבורה שלך להיראות כאילו היא מתחברת אל שירות זה במקום אל Tor."> +<!ENTITY torsettings.bridgeHelp2 "מפאת כיצד מדינות מסוימות מנסות לחסום את Tor, גשרים מסוימים עובדים במדינות מסוימות אבל לא באחרות.  אם אינך בטוח לגבי אילו גשרים עובדים במדינתך, בקר ב-torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "אנא המתן בזמן שאנחנו מקימים חיבור אל רשת Tor.  זה עשוי לקחת מספר דקות."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "חיבור"> +<!ENTITY torPreferences.torSettings "הגדרות Tor"> +<!ENTITY torPreferences.torSettingsDescription "דפדפן Tor מנתב את התעבורה שלך על רשת Tor, המופעלת ע״י אלפי מתנדבים ברחבי העולם." > +<!ENTITY torPreferences.learnMore "למד עוד"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "אינטרנט:"> +<!ENTITY torPreferences.statusInternetTest "בחן"> +<!ENTITY torPreferences.statusInternetOnline "מחובר"> +<!ENTITY torPreferences.statusInternetOffline "לא מקוון"> +<!ENTITY torPreferences.statusTorLabel "רשת Tor:"> +<!ENTITY torPreferences.statusTorConnected "מחובר"> +<!ENTITY torPreferences.statusTorNotConnected "לא מחובר"> +<!ENTITY torPreferences.statusTorBlocked "חסום פוטנציאלית"> +<!ENTITY torPreferences.learnMore "למד עוד"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "התחלה זריזה"> +<!ENTITY torPreferences.quickstartDescriptionLong "התחלה זריזה מחברת את דפדפן Tor אל רשת Tor באופן אוטומטי כאשר הוא מופעל, על סמך הגדרות החיבור האחרונות שהיו בשימוש."> +<!ENTITY torPreferences.quickstartCheckbox "התחבר תמיד באופן אוטומטי"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "גשרים"> +<!ENTITY torPreferences.bridgesDescription "גשרים עוזרים לך להשיג גישה אל רשת Tor במקומות בהם Tor חסום. על סמך המקום שאתה נמצא בו, גשר אחד עשוי לעבוד בצורה טובה יותר מאחד אחר."> +<!ENTITY torPreferences.bridgeLocation "המיקום שלך"> +<!ENTITY torPreferences.bridgeLocationAutomatic "אוטומטי"> +<!ENTITY torPreferences.bridgeLocationFrequent "מיקומים נבחרים שכיחים"> +<!ENTITY torPreferences.bridgeLocationOther "מיקומים אחרים"> +<!ENTITY torPreferences.bridgeChooseForMe "בחר גשר עבורי…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "הגשרים הנוכחיים שלך"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "גשר #1: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "הסר"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "השבת גשרים מובנים"> +<!ENTITY torPreferences.bridgeShare "שתף את הגשר הזה ע״י שימוש בקוד QR או ע״י העתקת הכתובת שלו:"> +<!ENTITY torPreferences.bridgeCopy "העתק כתובת גשר"> +<!ENTITY torPreferences.copied "הועתק!"> +<!ENTITY torPreferences.bridgeShowAll "הראה את כל הגשרים"> +<!ENTITY torPreferences.bridgeRemoveAll "הסר את כל הגשרים"> +<!ENTITY torPreferences.bridgeAdd "הוסף גשר חדש"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "בחר באחד מהגשרים המובנים של דפדפן Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "בחר גשר מובנה…"> +<!ENTITY torPreferences.bridgeRequest "בקש גשר…"> +<!ENTITY torPreferences.bridgeEnterKnown "הכנס כתובת גשר שאתה כבר מכיר"> +<!ENTITY torPreferences.bridgeAddManually "הוסף גשר באופן ידני…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "מתקדם"> +<!ENTITY torPreferences.advancedDescription "תצר כיצד דפדפן Tor מתחבר אל האינטרנט"> +<!ENTITY torPreferences.advancedButton "הגדרות…"> +<!ENTITY torPreferences.viewTorLogs "הצג את יומני Tor"> +<!ENTITY torPreferences.viewLogs "הצג יומנים…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "להסיר את כל הגשרים?"> +<!ENTITY torPreferences.removeBridgesWarning "פעולה זו אינה ניתנת לביטול."> +<!ENTITY torPreferences.cancel "בטל"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "סרוק קוד QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "גשרים מובנים"> +<!ENTITY torPreferences.builtinBridgeDescription "דפדפן Tor כולל כמה סוגים מסוימים של גשרים שידועים בתור "תחבורות נתיקות"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 הוא סוג של גשה מובנה שגורם אל תעבורת Tor להיראות אקראית. הוא גם פחות סביר להיחסם מאשר קודמיו, גשרי obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake הוא גשר מובנה שמביס צנזורה על ידי ניתוב החיבור שלך דרך ייפויי כוח של Snowflake שמורצים על ידי מתנדבים."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure הוא גשר מובנה שגורם להיראות כאילו אתה משתמש באתר Microsoft במקום ב־Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "בקש גשר"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "יוצר קשר עם BridgeDB. אנא המתן."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "פתור את ה־CAPTCHA כדי לבקש גשר."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "הפתרון אינו נכון. אנא נסה שוב."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "ספק גשר"> +<!ENTITY torPreferences.provideBridgeHeader "הכנס מידע גשר ממקור מהימן"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "הגדרות חיבור"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "תצר כיצד דפדפן Tor מתחבר אל האינטרנט"> +<!ENTITY torPreferences.firewallPortsPlaceholder "ערכים מופרדים בפסיק"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "יומני Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "לא מחובר"> +<!ENTITY torConnect.connectingConcise "מתחבר…"> +<!ENTITY torConnect.tryingAgain "מנסה שוב…"> +<!ENTITY torConnect.noInternet "דפדפן Tor לא היה יכול להשיג את האינטרנט"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "דפדפן Tor לא היה יכול להתחבר אל Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "תצר את החיבור שלך"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "אם Tor חסום במיקום שלך, ניסיון גשר עשוי לעזור. סיוע בחיבור יכול לבחור אחד עבורך ע״י שימוש במיקום שלך, או שאתה יכול #1 באופן ידני במקום."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "מנסה גשר…"> +<!ENTITY torConnect.tryingBridgeAgain "מנסה עוד פעם…"> +<!ENTITY torConnect.errorLocation "דפדפן Tor לא היה יכול לאתר אותך"> +<!ENTITY torConnect.errorLocationDescription "דפדפן Tor צריך לדעת את המיקום שלך על מנת לבחור את הגשר הנכון עבורך. אם אתה מעדיף לא לשתף את המיקום שלך, #1 באופן ידני במקום."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "האם הגדרות המיקום האלו נכונות?"> +<!ENTITY torConnect.isLocationCorrectDescription "דפדפן Tor עדין לא יכול להתחבר אל Tor. אנא בדוק שהגדרות המיקום שלך נכונות ונסה שוב, או #1 במקום."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "סיוע בחיבור"> +<!ENTITY torConnect.breadcrumbLocation "הגדרות מיקום"> +<!ENTITY torConnect.breadcrumbTryBridge "נסה גשר"> +<!ENTITY torConnect.automatic "אוטומטי"> +<!ENTITY torConnect.selectCountryRegion "בחר מדינה או אזור"> +<!ENTITY torConnect.frequentLocations "מיקומים נבחרים שכיחים"> +<!ENTITY torConnect.otherLocations "מיקומים אחרים"> +<!ENTITY torConnect.restartTorBrowser "הפעל מחדש את דפדפן Tor"> +<!ENTITY torConnect.configureConnection "תצר חיבור…"> +<!ENTITY torConnect.viewLog "הצג יומנים…"> +<!ENTITY torConnect.tryAgain "ניסיון חוזר"> +<!ENTITY torConnect.offline "אינטרנט בלתי נגיש"> +<!ENTITY torConnect.connectMessage "שינויים אל הגדרות Tor לא ייכנסו לתוקף עד שתתחבר"> +<!ENTITY torConnect.tryAgainMessage "דפדפן Tor נכשל בהקמת חיבור אל רשת Tor"> +<!ENTITY torConnect.yourLocation "המיקום שלך"> +<!ENTITY torConnect.tryBridge "נסה גשר"> +<!ENTITY torConnect.autoBootstrappingFailed "תצורה אוטומטית נכשלה"> +<!ENTITY torConnect.autoBootstrappingFailed "תצורה אוטומטית נכשלה"> +<!ENTITY torConnect.cannotDetermineCountry "לא היה ניתן לקבוע מדינת משתמש"> +<!ENTITY torConnect.noSettingsForCountry "אין הגדרות זמינות עבור המיקום שלך"> diff --git a/toolkit/torbutton/chrome/locale/he/onboarding.properties b/toolkit/torbutton/chrome/locale/he/onboarding.properties new file mode 100644 index 000000000000..ee960228a44f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=פעם ראשונה ב־%S?\nבואו ונתחיל. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S התחדש לחלוטין.\nבואו לראות מה חדש! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=סגירה +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=סגירה +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=הושלם diff --git a/toolkit/torbutton/chrome/locale/he/torbutton.dtd b/toolkit/torbutton/chrome/locale/he/torbutton.dtd new file mode 100644 index 000000000000..250f5cacfa8d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "זהות חדשה"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "זהות חדשה"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "נתיב Tor חדש לאתר זה"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "מעגל Tor חדש עבור אתר זה"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "הגדרות רשת Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "בדוק אחר עדכון לדפדפן Tor…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "הגנות עוגיות…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "לחץ כדי לאתחל את Torbutton"> +<!ENTITY torbutton.prefs.security_settings "הגדרות אבטחה של דפדפן Tor"> +<!ENTITY torbutton.cookiedialog.title "נהל הגנות עוגיות"> +<!ENTITY torbutton.cookiedialog.lockCol "מוגן"> +<!ENTITY torbutton.cookiedialog.domainCol "מארח"> +<!ENTITY torbutton.cookiedialog.nameCol "שם"> +<!ENTITY torbutton.cookiedialog.pathCol "נתיב"> +<!ENTITY torbutton.cookiedialog.protectCookie "הגן על עוגייה"> +<!ENTITY torbutton.cookiedialog.removeCookie "הסר עוגייה"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "בטל הגנה על עוגייה"> +<!ENTITY torbutton.cookiedialog.removeAllBut "הסר הכל מלבד מוגנים"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "הגן על עוגיות חדשות"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "אל תגן על עוגיות חדשות"> +<!ENTITY torbutton.prefs.sec_caption "רמת אבטחה"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "מחוון האבטחה נותן לך להשבית תכונות דפדפן מסוימות אשר עלולות לעשות את הדפדפן שלך יותר פגיע לנסיונות פיצוח."> +<!ENTITY torbutton.prefs.sec_standard_label "תקנית"> +<!ENTITY torbutton.prefs.sec_standard_description "כל המאפיינים של דפדפן Tor ומאפייני אתר מושבתים."> +<!ENTITY torbutton.prefs.sec_safer_label "בטוחה יותר"> +<!ENTITY torbutton.prefs.sec_safer_description "משבית מאפייני אתר שמסוכנים לעיתים קרובות, מה שגורם למספר אתרים לאבד תפקודיות."> +<!ENTITY torbutton.prefs.sec_safer_list_label "בהגדרה הבטוחה יותר:"> +<!ENTITY torbutton.prefs.sec_safest_label "הכי בטוחה"> +<!ENTITY torbutton.prefs.sec_safest_description "מתיר רק למאפייני אתר הדרושים עבור אתרים נייחים ושירותים יסודיים. שינויים אלו משפיעים על תמונות, מדיה ותסריטים."> +<!ENTITY torbutton.prefs.sec_safest_list_label "בהגדרה הבטוחה ביותר:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "למד עוד"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript מושבת בכל האתרים שאינם HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript מושבת כברירת מחדל בכל האתרים."> +<!ENTITY torbutton.prefs.sec_limit_typography "מספר גופנים וסמלים מתמטיים מושבתים."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "מספר גופנים, צלמיות, סמלים מתמטיים ותמונות מושבתים."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "שמע ווידאו (מדית HTML5) ו־WebGL הם לחץ־כדי־לנגן."> +<!ENTITY torbutton.prefs.sec_custom_warning "מותאמת אישית"> +<!ENTITY torbutton.prefs.sec_overview "השבת מאפייני אתר מסוימים אשר יכולים לשמש כדי לתקוף את אבטחתך ואלמוניותך."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "רמת אבטחה: תקנית"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "רמת אבטחה: בטוחה יותר"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "רמת אבטחה: הכי בטוחה"> +<!ENTITY torbutton.prefs.sec_custom_summary "העדפות הדפדפן המותאמות שלך נבעו מהגדרות אבטחה בלתי שגרתיות. מטעמי אבטחה ופרטיות, אנו ממליצים לך לבחור באחת מרמות האבטחה של ברירת המחדל."> +<!ENTITY torbutton.prefs.sec_restore_defaults "שחזר ברירות מחדל"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "הגדרות אבטחה מתקדמות…"> +<!ENTITY torbutton.prefs.sec_change "שנה…"> +<!ENTITY torbutton.circuit_display.title "מעגל Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "מעגל חדש עבור אתר זה"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "פתח ידוע אימות לקוח של שירות בצל"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "זכור מפתח זה"> diff --git a/toolkit/torbutton/chrome/locale/he/torbutton.properties b/toolkit/torbutton/chrome/locale/he/torbutton.properties new file mode 100644 index 000000000000..475fa7d79ff0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = אינטרנט +torbutton.circuit_display.ip_unknown = IP בלתי ידוע +torbutton.circuit_display.onion_site = אתר בצל +torbutton.circuit_display.this_browser = דפדפן זה +torbutton.circuit_display.relay = ממסר +torbutton.circuit_display.tor_bridge = גשר +torbutton.circuit_display.unknown_country = מדינה לא ידועה +torbutton.circuit_display.guard = מישמר +torbutton.circuit_display.guard_note = צומת [המישמר] שלך עשוי לא להשתנות. +torbutton.circuit_display.learn_more = למד עוד +torbutton.circuit_display.click_to_copy = לחץ כדי להעתיק +torbutton.circuit_display.copied = הועתק! +torbutton.content_sizer.margin_tooltip = דפדפן Tor מוסיף שול זה כדי להפוך את הגובה והרוחב של חלונך ליחודיים פחות, ובכך להפחית את היכולת של אנשים לעקוב אחריך באופן מקוון. +extensions.torbutton@torproject.org.description = Torbutton מספק כפתור כדי לתצר את הגדרות Tor וכדי לנקות במהירות ובקלות נתוני גלישה פרטיים. +torbutton.popup.external.title = להוריד סוג חיצוני של קובץ? +torbutton.popup.external.app = דפדפן Tor אינו יכול להציג קובץ זה. תצטרך לפתוח אותו באמצעות יישום אחר.\n\n +torbutton.popup.external.note = סוגים מסוימים של קבצים עלולים לגרום ליישומים להתחבר אל האינטרנט ללא שימוש ב-Tor.\n +torbutton.popup.external.suggest = ליתר ביטחון, עליך לפתוח קבצים שהורדו רק כשהחיבור מנותק, או להשתמש בתקליטור חי של Tor כמו Tails. \n +torbutton.popup.launch = הורד קובץ +torbutton.popup.cancel = בטל +torbutton.popup.dontask = הורד קבצים באופן אוטומטי מעתה ואילך +torbutton.popup.no_newnym = Torbutton אינו יכול לתת לך בבטחה זהות חדשה. אין לו גישה אל פתחת הבקרה של Tor.\n\nהאם אתה מריץ את מאגדת דפדפן Tor? +torbutton.security_settings.menu.title = הגדרות אבטחה +torbutton.title.prompt_torbrowser = מידע חשוב של Torbutton +torbutton.popup.prompt_torbrowser = Torbutton עובד כיום אחרת: אינך יכול לכבות אותו יותר.\n\nעשינו שינוי זה כי אין זה בטוח להשתמש ב-Torbutton בדפדפן הנמצא בשימוש גם עבור גלישה שאינה Tor. היו יותר מדי תקלים שלא יכולנו לתקן בכל דרך אחרת.\n\nאם אתה רוצה להמשיך להשתמש ב-Firefox כרגיל, עליך להסיר את Torbutton ולהוריד את מאגדת דפדפן Tor. מאפייני הפרטיות של דפדפן Tor גם נעלים יותר מאשר אלו של Firefox רגיל, אפילו כאשר Firefox נמצא בשימוש עם Torbutton.\n\nכדי להסיר את Torbutton, לך אל כלים->תוספות [...] +torbutton.popup.short_torbrowser = מידע חשוב על Torbutton!\nTorbutton תמיד מאופשר עכשיו.\nלחץ על ה-Torbutton לעוד מידע. + +torbutton.popup.confirm_plugins = מתקעים כגון Flash יכולים לפגוע בפרטיותך ובאלמוניותך.\n\nהם יכולים גם לעקוף את Tor כדי לחשוף את מיקומך הנוכחי ואת כתובת ה-IP שלך.\n\nהאם אתה בטוח שאתה רוצה לאפשר מתקעים?\n\n +torbutton.popup.never_ask_again = אף פעם אל תשאל אותי שוב +torbutton.popup.confirm_newnym = דפדפן Tor יסגור את כל החלונות והלשוניות. כל שיחי האתרים יאבדו. \n\nלהפעיל מחדש את דפדפן Tor עכשיו כדי לאפס את זהותך?\n\n + +torbutton.maximize_warning = הפעלת מסך מלא בדפדפן Tor עלולה להתיר לאתרים לקבוע את גודל הצג שלך, מה שעלול לשמש כדי לאתר אותך. אנו ממליצים שתשאיר את חלונות דפדפן Tor בגודל ברירת המחדל המקורי שלהם. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=אתר זה (%S) ניסה לחלץ נתוני תמונות קנבס HTML5, אשר עשויים לשמש כדי לזהות באופן ייחודי את מחשבך.\n\nהאם על דפדפן Tor להתיר לחלץ נתוני תמונות קנבס HTML5? +canvas.notNow=לא עכשיו +canvas.notNowAccessKey=N +canvas.allow=התר בעתיד +canvas.allowAccessKey=A +canvas.never=אף פעם עבור אתר זה (מומלץ) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=בעית פרופיל %S +profileReadOnly=אינך יכול להריץ את %S ממערכת קבצים לקריאה בלבד. אנא העתק את %S למיקום אחר לפני ניסיון להשתמש בו. +profileReadOnlyMac=אינך יכול להריץ את %S ממערכת קבצים לקריאה בלבד. אנא העתק את %S לשולחן העבודה או לתיקיית היישומים שלך לפני ניסיון להשתמש בו. +profileAccessDenied=אל %S אין הרשאה כדי לגשת אל הפרופיל. אנא התאם את הרשאות מערכת הקבצים שלך ונסה שוב. +profileMigrationFailed=מיזוג של הפרופיל הקיים שלך %S נכשל.\nהגדרות חדשות יהיו בשימוש. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=מוריד עדכון %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=חיבור הוצפן (שירות בצל, %1$S, מפתחות %2$S סיביות, %3$S) +pageInfo_OnionEncryption=חיבור הוצפן (שירות בצל) +pageInfo_OnionName=שם בצל: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=למד עוד +onionServices.errorPage.browser=דפדפן +onionServices.errorPage.network=רשת +onionServices.errorPage.onionSite=אתר בצל +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=בעיה בטעינת אתר בצל +onionServices.descNotFound.header=אתר בצל לא נמצא +onionServices.descNotFound=הגורם הסביר הוא שאתר הבצל לא מקוון. צור קשר עם מינהלן אתר הבצל. +onionServices.descNotFound.longDescription=פרטים: %S — המתאר של שירות הבצל המבוקש לא ניתן להימצא על ה־HashRing ולכן השירות בלתי נגיש ע״י הלקוח. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=בעיה בטעינת אתר בצל +onionServices.descInvalid.header=אתר בצל בלתי ניתן להשגה +onionServices.descInvalid=אתר הבצל אינו בר־השגה עקב שגיאה פנימית. +onionServices.descInvalid.longDescription=פרטים: %S — המתאר של שירות הבצל המבוקש אינו יכול להינתח או שוידוא החתימה נכשל. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=בעיה בטעינת אתר בצל +onionServices.introFailed.header=אתר בצל נותק +onionServices.introFailed=הגורם הסביר הוא שאתר הבצל לא מקוון. צור קשר עם מינהלן אתר הבצל. +onionServices.introFailed.longDescription=פרטים: %S — ההיכרות נכשלה, מה שאומר שהמתאר נמצא אבל השירות אינו מחובר יותר אל נקודת ההיכרות. ככל הנראה שהשירות שינה את המתאר שלו או שהשירות אינו רץ. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=בעיה בטעינת אתר בצל +onionServices.rendezvousFailed.header=לא היה ניתן להתחבר אל אתר בצל +onionServices.rendezvousFailed=אתר הבצל עסוק או שרשת Tor עמוסה. נסה שוב מאוחר יותר. +onionServices.rendezvousFailed.longDescription=פרטים: %S — הלקוח נכשל להיפגש עם השירות, מה שאומר שהלקוח לא היה יכול להשלים את החיבור. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=אימות נדרש +onionServices.clientAuthMissing.header=אתר בצל דורש אימות +onionServices.clientAuthMissing=גישה אל אתר הבצל דורשת מפתח אבל אף מפתח לא סופק. +onionServices.clientAuthMissing.longDescription=פרטים: %S — הלקוח הוריד את המתאר של שירות הבצל המבוקש אבל לא הצליח לפענח את תוכנו מאחר שמידע האימות של הלקוח חסר. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=אימות נכשל +onionServices.clientAuthIncorrect.header=אימות אתר בצל נכשל +onionServices.clientAuthIncorrect=המפתח המסופק שגוי או שהוא נשלל. צור קשר עם המינהלן של אתר הבצל. +onionServices.clientAuthIncorrect.longDescription=פרטים: %S — הלקוח היה יכול להוריד את המתאר של שירות הבצל המבוקש אבל לא היה יכול לפענח את תוכנו ע״י שימוש במידע האימות המסופק של הלקוח. זה עשוי להעיד שהגישה נשללה. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=בעיה בטעינת אתר בצל +onionServices.badAddress.header=כתובת אתר בצל בלתי תקפה +onionServices.badAddress=כתובת אתר הבצל המסופקת בלתי תקפה. אנא בדוק שהכנסת אותה כראוי. +onionServices.badAddress.longDescription=פרטים: %S — כתובת .onion המסופקת בלתי תקפה. שגיאה זאת מוחזרת עקב אחת מהסיבות הבאות: סיכום הביקורת של הכתובת אינו תואם, המפתח הציבורי ed25519 בלתי תקף, או שהקידוד בלתי תקף. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=בעיה בטעינת אתר בצל +onionServices.introTimedOut.header=יצירה של מעגל אתר בצל לקחה פסק זמן +onionServices.introTimedOut=חיבור אל אתר הבצל נכשל, כנראה עקב חיבור רשת ירוד. +onionServices.introTimedOut.longDescription=פרטים: %S — החיבור אל שירות הבצל המבוקש לקח פסק זמן בזמן ניסיון לבנות את מעגל המפגש. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S מבקש שתאמת. +onionServices.authPrompt.keyPlaceholder=הכנס את המפתח הפרטי שלך עבור שירות בצל זה +onionServices.authPrompt.done=סיים +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=אנא הכנס מפתח תקף (52 תווים של base32 או 44 תווים של base64) +onionServices.authPrompt.failedToSetKey=לא היה ניתן לתצר את Tor עם המפתח שלך +onionServices.authPreferences.header=אימות שירותי בצל +onionServices.authPreferences.overview=מספר שירותי בצל דורשים שתזהה את עצמך עם מפתח (סוג של סיסמה) לפני שתוכל להשיג אליהם גישה. +onionServices.authPreferences.savedKeys=מפתחות שמורים… +onionServices.authPreferences.dialogTitle=מפתחות שירות בצל +onionServices.authPreferences.dialogIntro=מפתחות עבור אתרי הבצל הבאים מאוחסנים במחשב שלך +onionServices.authPreferences.onionSite=אתר בצל +onionServices.authPreferences.onionKey=מפתח +onionServices.authPreferences.remove=הסר +onionServices.authPreferences.removeAll=הסר הכול +onionServices.authPreferences.failedToGetKeys=לא היה ניתן לאחזר מפתחות מן tor +onionServices.authPreferences.failedToRemoveKey=לא היה ניתן להסיר מפתח +onionServices.v2Deprecated.pageTitle=אזהרת הוצאה משימוש של אתר בצל גרסה 2 +onionServices.v2Deprecated.header=אתרי בצל גרסה 2 יוצאו משימוש בקרוב +onionServices.v2Deprecated=אתר בצל זה לא יהיה נגיש יותר בקרוב. אנא צור קשר עם מנהלן האתר ועודד אותו לשדרג. +onionServices.v2Deprecated.longDescription=Tor מסיים את תמיכתו בגרסה 2 של שירותי בצל החל מיולי 2021, ואתר הבצל הזה לא יהיה נגיש יותר בכתובת זו. אם אתה מנהלן האתר, שדרג בקרוב אל גרסה 3 של שירותי בצל. +onionServices.v2Deprecated.tryAgain=הבנתי +onionServices.v2Deprecated.tooltip=אתר בצל זה לא יהיה נגיש יותר בקרוב + +# Onion-Location strings. +onionLocation.alwaysPrioritize=תעדף תמיד בצלים +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=לא עכשיו +onionLocation.notNowAccessKey=n +onionLocation.description=יש גרסה פרטית יותר ומאובטחת יותר של אתר זה שזמינה על גבי רשת Tor באמצעות שירותי בצל. שירותי בצל עוזרים למפרסמי אתרים ולמבקרים שלהם להביס ציתות וצנזורה. +onionLocation.tryThis=נסה שירותי בצל +onionLocation.onionAvailable=.onion זמין +onionLocation.learnMore=למד עוד… +onionLocation.always=תמיד +onionLocation.askEverytime=שאל כל פעם +onionLocation.prioritizeOnionsDescription=תעדף אתרי .onion כאשר הם ידועים. +onionLocation.onionServicesTitle=שירותי בצל + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=כתובת של מטבע מבוזר (%S) הועתקה מתוך אתר בלתי מאובטח. יכול להיות שהיא שונתה. +cryptoSafetyPrompt.whatCanHeading=מה אתה יכול לעשות לגבי זה? +cryptoSafetyPrompt.whatCanBody=אתה יכול לנסות להתחבר מחדש עם מגעל חדש כדי להקים חיבור מאובטח, או לקחת את הסיכון ולהשמיט את האזהרה הזאת. +cryptoSafetyPrompt.learnMore=למד עוד +cryptoSafetyPrompt.primaryAction=טען מחדש לשונית עם מעגל חדש +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=השמט אזהרה +cryptoSafetyPrompt.secondaryActionAccessKey=ב׳ + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=מאופשר +rulesets.disabled=מושבת +# Ruleset details/edit ruleset +rulesets.edit=ערוך +rulesets.name=שם +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=בדוק אחר עדכונים +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=שמור +rulesets.cancel=בטל diff --git a/toolkit/torbutton/chrome/locale/he/torlauncher.properties b/toolkit/torbutton/chrome/locale/he/torlauncher.properties new file mode 100644 index 000000000000..ef99da99bccb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/he/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=משגר Tor + +torlauncher.tor_exited_during_startup=Tor יצא במהלך ההזנק. ייתכן שזה עקב שגיאה בקובץ torrc שלך, תקל ב-Tor או בתכנית אחרת במערכתך, או חומרה תקולה. עד שלא תתקן את הבעיה המשתמעת ותפעיל מחדש את Tor, דפדפן Tor לא יתחיל. +torlauncher.tor_exited=Tor יצא באופן בלתי צפוי. ייתכן שזה עקב תקל ב-Tor עצמו, תכנית אחרת במערכתך או חומרה תקולה. עד שתפעיל מחדש את Tor, דפדפן Tor לא יהיה מסוגל להגיע לכל אתר שהוא. אם הבעיה נמשכת, אנא שלח עותק של יומן Tor שלך אל צוות התמיכה שלנו. +torlauncher.tor_exited2=הפעלת Tor מחדש לא תסגור את לשוניות הדפדפן שלך. +torlauncher.tor_controlconn_failed=לא היה יכול להתחבר אל פתחת הבקרה של Tor. +torlauncher.tor_failed_to_start=Tor נכשל להתחיל. +torlauncher.tor_control_failed=נכשל בלקיחת שליטה על Tor. +torlauncher.tor_bootstrap_failed=Tor נכשל בהקמת חיבור רשת Tor. +torlauncher.tor_bootstrap_failed_details=%1$S נכשל (%2$S). + +torlauncher.unable_to_start_tor=לא היה ניתן להתחיל את Tor.\n\n%S +torlauncher.tor_missing=קובץ ההפעלה של Tor חסר. +torlauncher.torrc_missing=קובץ ה-torrc חסר ולא היה יכול להיווצר. +torlauncher.datadir_missing=תיקיית הנתונים של Tor אינה קיימת ולא יכלה להיווצר. +torlauncher.onionauthdir_missing=ספריית אימות הבצל של Tor אינה קיימת ולא יכלה להיווצר. +torlauncher.password_hash_missing=נכשל בהשגת סיסמה מעורבלת. + +torlauncher.failed_to_get_settings=לא היה ניתן לאחזר הגדרות Tor.\n\n%S +torlauncher.failed_to_save_settings=לא היה ניתן לשמור הגדרות Tor.\n\n%S +torlauncher.ensure_tor_is_running=אנא וודא כי Tor פועל. + +torlauncher.error_proxy_addr_missing=אתה חייב לציין כתובת IP או שם מארח וגם מספר פתחה כדי לתצר את Tor להשתמש בייפוי־כוח כדי לגשת לאינטרנט. +torlauncher.error_proxy_type_missing=אתה חייב לבחור את סוג ייפוי־הכוח. +torlauncher.error_bridges_missing=אתה חייב לציין גשר אחד או יותר. +torlauncher.error_default_bridges_type_missing=אתה חייב לבחור סוג תחבורה עבור הגשרים המסופקים. +torlauncher.error_bridgedb_bridges_missing=אנא בקש גשר. +torlauncher.error_bridge_bad_default_type=אין גשרים מסופקים זמינים שיש להם את סוג התחבורה %S. אנא התאם את הגדרותיך. + +torlauncher.bridge_suffix.meek-amazon=(עובד בסין) +torlauncher.bridge_suffix.meek-azure=(עובד בסין) + +torlauncher.request_a_bridge=בקש גשר… +torlauncher.request_a_new_bridge=בקש גשר חדש… +torlauncher.contacting_bridgedb=יוצר קשר עם BridgeDB. אנא המתן. +torlauncher.captcha_prompt=פתור את ה־CAPTCHA כדי לבקש גשר. +torlauncher.bad_captcha_solution=הפתרון אינו נכון. אנא נסה שוב. +torlauncher.unable_to_get_bridge=לא היה ניתן להשיג גשר מן BridgeDB.\n\n%S +torlauncher.no_meek=דפדפן זה אינו מתוצר עבור meek, אשר דרוש כדי להשיג גשרים. +torlauncher.no_bridges_available=אין גשרים זמינים הפעם. סליחה. + +torlauncher.connect=התחבר +torlauncher.restart_tor=הפעל מחדש את Tor +torlauncher.quit=צא +torlauncher.quit_win=יציאה +torlauncher.done=בוצע + +torlauncher.forAssistance=לתמיכה, צור קשר עם %S +torlauncher.forAssistance2=לתמיכה, בקר ב-%S + +torlauncher.copiedNLogMessages=ההעתקה הושלמה. %S הודעות יומן אירועים של Tor מוכנות להדבקה לתוך עורך מלל או להודעת דוא״ל. + +torlauncher.bootstrapStatus.starting=מתחיל +torlauncher.bootstrapStatus.conn_pt=מתחבר אל גשר +torlauncher.bootstrapStatus.conn_done_pt=מחובר אל גשר +torlauncher.bootstrapStatus.conn_proxy=מתחבר אל ייפוי כוח +torlauncher.bootstrapStatus.conn_done_proxy=מחובר אל ייפוי כוח +torlauncher.bootstrapStatus.conn=מתחבר אל ממסר Tor +torlauncher.bootstrapStatus.conn_done=מחובר אל ממסר Tor +torlauncher.bootstrapStatus.handshake=מנהל משא ומתן עם ממסר Tor +torlauncher.bootstrapStatus.handshake_done=סיים לנהל משא ומתן עם ממסר Tor +torlauncher.bootstrapStatus.onehop_create=מקים חיבור סיפרייה מוצפן +torlauncher.bootstrapStatus.requesting_status=מאחזר מעמד רשת +torlauncher.bootstrapStatus.loading_status=טוען מעמד רשת +torlauncher.bootstrapStatus.loading_keys=טוען אישורי רָשׁוּת +torlauncher.bootstrapStatus.requesting_descriptors=מבקש מידע ממסר +torlauncher.bootstrapStatus.loading_descriptors=טוען מידע ממסר +torlauncher.bootstrapStatus.enough_dirinfo=סיים לטעון מידע ממסר +torlauncher.bootstrapStatus.ap_conn_pt=בניית מעגלים: מתחבר אל גשר +torlauncher.bootstrapStatus.ap_conn_done_pt=בניית מעגלים: מחובר אל גשר +torlauncher.bootstrapStatus.ap_conn_proxy=בניית מעגלים: מתחבר אל ייפוי כוח +torlauncher.bootstrapStatus.ap_conn_done_proxy=בניית מעגלים: מחובר אל ייפוי כוח +torlauncher.bootstrapStatus.ap_conn=בניית מעגלים: מתחבר אל ממסר Tor +torlauncher.bootstrapStatus.ap_conn_done=בניית מעגלים: מחובר אל ממסר Tor +torlauncher.bootstrapStatus.ap_handshake=בניית מעגלים: מנהל משא ומתן עם ממסר Tor +torlauncher.bootstrapStatus.ap_handshake_done=בניית מעגלים: סיים לנהל משא ומתן עם ממסר Tor +torlauncher.bootstrapStatus.circuit_create=בניית מעגלים: מקים מעגל Tor +torlauncher.bootstrapStatus.done=מחובר לרשת Tor! + +torlauncher.bootstrapWarning.done=בוצע +torlauncher.bootstrapWarning.connectrefused=החיבור סורב +torlauncher.bootstrapWarning.misc=שונות +torlauncher.bootstrapWarning.resourcelimit=משאבים בלתי מספיקים +torlauncher.bootstrapWarning.identity=זהות אינה תואמת +torlauncher.bootstrapWarning.timeout=החיבור פקע +torlauncher.bootstrapWarning.noroute=אין נתיב למארח +torlauncher.bootstrapWarning.ioerror=שגיאה של קריאה/כתיבה +torlauncher.bootstrapWarning.pt_missing=תחבורה נתיקה חסרה + +torlauncher.nsresult.NS_ERROR_NET_RESET=החיבור אל השרת אבד. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=לא היה ניתן להתחבר אל השרת. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=לא היה ניתן להתחבר אל ייפוי הכוח. + +torlauncher.copiedNLogMessagesShort=%S יומנים הועתקו diff --git a/toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd new file mode 100644 index 000000000000..458b3a195ffe --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; fejlesztve általa: "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "a &vendorShortName;"> +<!ENTITY project.end ", egy nonprofit szervezet az online magánélet és szabadság védelmére."> + +<!ENTITY help.start "Segítene?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Támogatás"> +<!ENTITY help.or " vagy "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "részvétel"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Kérdések?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Segítsen a Tor hálózat növekedésében!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licensz információk"> +<!ENTITY tor.TrademarkStatement "A 'Tor' és az 'Onion Logo' a Tor Project, Inc. bejegyzett védjegyei."> diff --git a/toolkit/torbutton/chrome/locale/hu/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/hu/aboutTBUpdate.dtd new file mode 100644 index 000000000000..1d967e901713 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Böngésző Változási napló"> +<!ENTITY aboutTBUpdate.updated "Tor Böngésző frissítve."> +<!ENTITY aboutTBUpdate.linkPrefix "Az erről a kiadásról szóló legfrissebb információkért"> +<!ENTITY aboutTBUpdate.linkLabel "látogassa meg weboldalunkat"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Verzió"> +<!ENTITY aboutTBUpdate.releaseDate "Kiadási dátum"> +<!ENTITY aboutTBUpdate.releaseNotes "Verziókövetési jegyzet"> diff --git a/toolkit/torbutton/chrome/locale/hu/aboutTor.dtd b/toolkit/torbutton/chrome/locale/hu/aboutTor.dtd new file mode 100644 index 000000000000..88adb8d15cab --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "A Tor-ról"> + +<!ENTITY aboutTor.viewChangelog.label "Változás log megtekintése"> + +<!ENTITY aboutTor.ready.label "Fedezzen fel. Privátan."> +<!ENTITY aboutTor.ready2.label "Készen áll a világ legprivátabb böngészési élményére."> +<!ENTITY aboutTor.failure.label "Valami nem jól működik!"> +<!ENTITY aboutTor.failure2.label "A Tor nem működik ebben a böngészőben."> + +<!ENTITY aboutTor.search.label "Keressen a DuckDuckGo-val"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Kérdések?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Tekintse meg a Tor Böngésző Útmutatót »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Böngésző Útmutató"> + +<!ENTITY aboutTor.tor_mission.label "A Tor Project egy a US 501(c)(3) szerinti non-profit szervezet, amely az emberi jogokért és szabadságért harcol, nyílt forráskódú anonimitás és adatvédelmi technológiák fejlesztésével és terjesztésével, támogatva azok korlátlan elérhetőségét és használatát, támogassák a tudományos ás általános megértésüket."> +<!ENTITY aboutTor.getInvolved.label "Vegyen részt"> + +<!ENTITY aboutTor.newsletter.tagline "Kapja meg a legfrissebb Tor híreket közvetlenül email fiókjába."> +<!ENTITY aboutTor.newsletter.link_text "Iratkozzon fel a Tor hírekhez."> +<!ENTITY aboutTor.donationBanner.freeToUse "A Tor ingyenes az Önhöz hasonló személyek támogatásai miatt."> +<!ENTITY aboutTor.donationBanner.buttonA "Támogasson most"> + +<!ENTITY aboutTor.alpha.ready.label "Teszteljen. Alaposan."> +<!ENTITY aboutTor.alpha.ready2.label "Készen áll a világ legprivátabb böngészési élmény tesztelésére."> +<!ENTITY aboutTor.alpha.bannerDescription "A Tor Böngésző Alfa olyan kísérleti változata a Tor Böngészőnek amivel kipróbálhat új funkciókat, tesztelheti a teljesítményüket és visszajelzést küldhet a kiadás előtt."> +<!ENTITY aboutTor.alpha.bannerLink "Hiba jelentése a Tor Fórumon"> + +<!ENTITY aboutTor.nightly.ready.label "Teszteljen. Alaposan."> +<!ENTITY aboutTor.nightly.ready2.label "Készen áll a világ legprivátabb böngészési élmény tesztelésére."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Hiba jelentése a Tor Fórumon"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ADOMÁNYOZZON MOST"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Az adományoddal egyező adományt ad a Friends of Tor, egészen 100 000 dollárig."> diff --git a/toolkit/torbutton/chrome/locale/hu/brand.dtd b/toolkit/torbutton/chrome/locale/hu/brand.dtd new file mode 100644 index 000000000000..9907a1c27967 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Böngésző"> +<!ENTITY brandShortName "Tor Böngésző"> +<!ENTITY brandFullName "Tor Böngésző"> +<!ENTITY vendorShortName "Tor Projekt"> +<!ENTITY trademarkInfo.part1 "A 'Tor' és az 'Onion Logo' a Tor Project, Inc. bejegyzett védjegyei."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Böngésző"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Kattintson telepített beépülők betöltéséhez"> +<!ENTITY plugins.installed.enable "Beépülő modulok engedélyezése"> +<!ENTITY plugins.installed.disable "Beépülő modulok tiltása "> +<!ENTITY plugins.installed.disable.tip "Kattintson a rendszer beépülő modulok betöltésének megakadályozásához."> diff --git a/toolkit/torbutton/chrome/locale/hu/brand.properties b/toolkit/torbutton/chrome/locale/hu/brand.properties new file mode 100644 index 000000000000..f5add4d725d4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Böngésző +brandShortName=Tor Böngésző +brandFullName=Tor Böngésző +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Böngésző +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, egy gyors weboldal beépített keresővel +homePageImport=Kezdőlap importálása a %S termékből + +homePageMigrationPageTitle=Kezdőlap választás +homePageMigrationDescription=Kérjük válassza ki a használandó kezdőlapot: + +syncBrandShortName=Szinkronizálás diff --git a/toolkit/torbutton/chrome/locale/hu/branding/brand.ftl b/toolkit/torbutton/chrome/locale/hu/branding/brand.ftl new file mode 100644 index 000000000000..399c123192d2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Böngésző +-brand-short-name = Tor Böngésző +-brand-full-name = Tor Böngésző +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Böngésző +-vendor-short-name = Tor Project +trademarkInfo = A 'Tor' és az 'Onion Logo' a Tor Project, Inc. bejegyzett védjegyei. diff --git a/toolkit/torbutton/chrome/locale/hu/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/hu/browserOnboarding.properties new file mode 100644 index 000000000000..7bc9f6bb5de8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Üdvözöljük! +onboarding.tour-tor-welcome.title=Készen van. +onboarding.tour-tor-welcome.description=A Tor Böngésző a legmagasabb adatvédelmet és biztonságot adja, miközben böngészik. Most védett a követéstől, megfigyeléstől és cenzúrázástól. Ez a rövid áttekintés megmutatja, hogyan. +onboarding.tour-tor-welcome.next-button=Ugrás az Adatvédelemre + +onboarding.tour-tor-privacy=Adatvédelem +onboarding.tour-tor-privacy.title=snub követők és figyelők. +onboarding.tour-tor-privacy.description=A Tor Böngésző elszigeteli a sütiket és törli az előzményeket az alkalom végén. Ezek a módosítások biztosítják adatvédelmét és biztonságát a böngészőben. Kattintson a 'Tor hálózat' pontra, hogy megismerhesse a védelmet hálózati szinten. +onboarding.tour-tor-privacy.button=Irány a Tor Hálózat + +onboarding.tour-tor-network=Tor Hálózat +onboarding.tour-tor-network.title=Utazzon egy decentralizált hálózaton. +onboarding.tour-tor-network.description=A Tor Böngésző összeköti Önt és a Tor hálózatát önkéntesek ezreivel a világon. A VPN-nel ellentétben nincs egypontos hibalehetőség vagy központosított entitás amiben bíznia kell, ahhoz, hogy az internetet privát használja. +onboarding.tour-tor-network.description-para2=ÚJ: A Tor hálózati beállítások, beleértve a lehetőséget, hogy hidakat kérjünk, ott ahol a Tor blokkolt, most már a Beállításoknál találja, +onboarding.tour-tor-network.action-button=A Tor hálózati beállítások módosítása +onboarding.tour-tor-network.button=Ugrás az Áramkör megjelenítéshez + +onboarding.tour-tor-circuit-display=Áramkör megjelenítő +onboarding.tour-tor-circuit-display.title=Tekintse meg útvonalát. +onboarding.tour-tor-circuit-display.description=Minden meglátogatott domainhez, a forgalma titkosítva továbbításra három a világban található Tor relén. Semmilyen weboldal nem fogja tudni honnan kapcsolódott. Kérhet új áramkört az 'Új áramkör ehhez a site-hoz"-ra kattintva az Áramkör megjelenítőn. +onboarding.tour-tor-circuit-display.button=Megtekintem az útvonalam +onboarding.tour-tor-circuit-display.next-button=Ugrás a Biztonságra + +onboarding.tour-tor-security=Biztonság +onboarding.tour-tor-security.title=Válassza ki élményét +onboarding.tour-tor-security.description=További beállítási lehetőségeket biztosítunk a böngésző biztonság növelése érdekében. A Biztonsági beállításaink lehetővé teszik, hogy blokkoljon olyan elemeket, amelyekkel támadható a számítógépe. Kattintson alább, hogy lássa, mely lehetőségek mit csinálnak. +onboarding.tour-tor-security.description-suffix=Megjegyzés: Alaphelyzetben a NoScript és a HTTPS Everywhere nincs az eszköztáron, e testre szabhatja az eszköztárat hozzá adásukkal. +onboarding.tour-tor-security-level.button=Biztonsági szintjének megtekintése +onboarding.tour-tor-security-level.next-button=Ugrás a Tapasztalati tippekre + +onboarding.tour-tor-expect-differences=Tapasztalati tippek +onboarding.tour-tor-expect-differences.title=Számítson különbségekre. +onboarding.tour-tor-expect-differences.description=Minden biztonsági és adatvédelmi lehetőséggel amit a Tor biztosít, a tapasztalatai az internet böngészésről eltérőek lehetnek. A dolgok egy kicsit lassabbak, a beállított biztonsági szintjétől, néhány elem nem működik vagy tölt be. Elképzelhetően rákérdeznek arra, hogy ember vagy robot. +onboarding.tour-tor-expect-differences.button=Lásd GYIK +onboarding.tour-tor-expect-differences.next-button=Ugrás az Onion Szolgáltatásokra + +onboarding.tour-tor-onion-services=Onion szolgáltatások +onboarding.tour-tor-onion-services.title=Legyen extra védett. +onboarding.tour-tor-onion-services.description=Az Onion szolgáltatások olyan oldalak, amelyek .onion-ra végződnek, és extra védelmet adnak a fenntartójuknak és látogatóiknak, beleértve a cenzúra ellenes funkciókat is. Az Onion szolgáltatások lehetővé teszik bárkinek, hogy tartalmat és szolgáltatásokat nyújtson névtelenül. \nKattintson alább a DuckDuckGo onion oldal meglátogatásához. +onboarding.tour-tor-onion-services.button=Látogasson meg egy Onion-t +onboarding.tour-tor-onion-services.next-button=Kész + +onboarding.overlay-icon-tooltip-updated2=Mi újdonság\na %S -ben. +onboarding.tour-tor-update.prefix-new=Új +onboarding.tour-tor-update.prefix-updated=Frissített + +onboarding.tour-tor-toolbar=Eszköztár +onboarding.tour-tor-toolbar-update-9.0.title=Viszlát Hagyma gomb +onboarding.tour-tor-toolbar-update-9.0.description=Az szeretnénk, hogy a Tor élmény amit tapasztal, teljesen integrált legyen a Tor Böngészővel. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Ezért most a hagyma gomb helyet a Tor áramkörét az [i] gombbal tudja megtekinteni a címsorban, és új identitást kérhet az eszköztár vagy a [≡] menü segítségével.. +onboarding.tour-tor-toolbar-update-9.0.button=Hogyan kérjen új identitást +onboarding.tour-tor-toolbar-update-9.0.next-button=Irány a Tor Hálózat + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Következő +onboarding.tor-circuit-display.done=Kész +onboarding.tor-circuit-display.one-of-three=1 a 3-ból +onboarding.tor-circuit-display.two-of-three=2 a 3-ból +onboarding.tor-circuit-display.three-of-three=3 a 3-ból + +onboarding.tor-circuit-display.intro.title=Hogyan működnek az áramkörök? +onboarding.tor-circuit-display.intro.msg=Az áramkörök véletlenül hozzárendelt relékből állnak, amik olyan számítógépek, amik továbbítják a Tor forgalmat. Az áramkörök teszik lehetővé, hogy privát böngésszen és onion szolgáltatáshoz csatlakozzon. + +onboarding.tor-circuit-display.diagram.title=Áramkör megjelenítő +onboarding.tor-circuit-display.diagram.msg=A diagram azt mutatja milyen relék alkotják az oldal áramkörét. Azért, hogy megakadályozza a keresztoldalas hivatkozást, minden oldal külön áramkört kap. + +onboarding.tor-circuit-display.new-circuit.title=Szüksége van egy áramkörre? +onboarding.tor-circuit-display.new-circuit.msg=Ha nem sikerül meglátogatni egy oldalt vagy nem tölt be megfelelően, akkor használhatja ezt a gombot egy másik áramkörön keresztüli újratöltéshez. diff --git a/toolkit/torbutton/chrome/locale/hu/network-settings.dtd b/toolkit/torbutton/chrome/locale/hu/network-settings.dtd new file mode 100644 index 000000000000..5679c9634d63 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor hálózati beállítások"> +<!ENTITY torsettings.wizard.title.default "Csatlakozás a Tor-hoz"> +<!ENTITY torsettings.wizard.title.configure "Tor hálózati beállítások"> +<!ENTITY torsettings.wizard.title.connecting "Kapcsolat létrehozása"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Böngésző nyelv"> +<!ENTITY torlauncher.localePicker.prompt "Kérjük válasszon egy nyelvet."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Kattintson a "Csatlakozásra" hogy csatlakozzon a Tor-hoz."> +<!ENTITY torSettings.configurePrompt "Kattintson a "Konfigurálásra" hogy változtasson a hálózati beállításokon, amennyiben olyan országban él amelyek cenzúrázzák a Tor-t, (mint például Egyiptom, Kína, Törökország) vagy amennyiben olyan privát hálózatról kíván csatlakozni, amelynek proxy-ra van szüksége."> +<!ENTITY torSettings.configure "Beállít"> +<!ENTITY torSettings.connect "Csatlakozás"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Várakozás a Tor indulására..."> +<!ENTITY torsettings.restartTor "Tor újraindítása"> +<!ENTITY torsettings.reconfigTor "Újrakonfigurál"> + +<!ENTITY torsettings.discardSettings.prompt "Beállított Tor Hidakat, vagy megadott egy helyi proxy-t.  A közvetlen kapcsolódáshoz ezeket a beállításokat el kell távolítania."> +<!ENTITY torsettings.discardSettings.proceed "Beállítások eltávolítása és Csatlakozás"> + +<!ENTITY torsettings.optional "Opcionális"> + +<!ENTITY torsettings.useProxy.checkbox "Proxy-t használok az Internetre való kapcsolódáshoz"> +<!ENTITY torsettings.useProxy.type "Proxy típus"> +<!ENTITY torsettings.useProxy.type.placeholder "válasszon ki egy proxy típust"> +<!ENTITY torsettings.useProxy.address "Cím"> +<!ENTITY torsettings.useProxy.address.placeholder "IP cím vagy gépnév"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Felhasználónév"> +<!ENTITY torsettings.useProxy.password "Jelszó"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "A számítógép egy tűzfalon keresztül kommunikál, ami csak adott portokon keresztül engedélyezi a kapcsolatokat."> +<!ENTITY torsettings.firewall.allowedPorts "Engedélyezett portok"> +<!ENTITY torsettings.useBridges.checkbox "A Tor cenzúrázva van az országomban"> +<!ENTITY torsettings.useBridges.default "Válasszon ki egy beépített hidat"> +<!ENTITY torsettings.useBridges.default.placeholder "Válasszon ki egy hidat"> +<!ENTITY torsettings.useBridges.bridgeDB "Híd kérése a torproject.org-tól"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Írja be a képen látható karaktereket"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Új rejtvény kérése"> +<!ENTITY torsettings.useBridges.captchaSubmit "Elküld"> +<!ENTITY torsettings.useBridges.custom "Általam ismert híd megadása"> +<!ENTITY torsettings.useBridges.label "Adja meg a megbízható helyről származó híd adatokat."> +<!ENTITY torsettings.useBridges.placeholder "írja be cím:port (egyet soronként)"> + +<!ENTITY torsettings.copyLog "A Tor log Vágólapra másolása"> + +<!ENTITY torsettings.proxyHelpTitle "Proxy segítség"> +<!ENTITY torsettings.proxyHelp1 "Egy helyi proxy lehet szükséges amennyiben olyan hálózaton keresztül csatlakozik amely, cégen, iskolán, vagy egyetemi hálózaton megy keresztül.  Ha nem biztos benne, hogy szükséges-e proxyt beállítani, akkor nézze meg egy másik böngésző vagy a rendszer hálózati beállításait."> + +<!ENTITY torsettings.bridgeHelpTitle "Híd csomópont súgó"> +<!ENTITY torsettings.bridgeHelp1 "A hidak olyan nem listázott csomópontok, amik megnehezítik a Tor kapcsolatok blokkolását.  Minden hídtípus más módszert használ a cenzúra elhárítására.  Az obfs fajták a hálózati forgalmat zajnak álcázzák, a meek fajták pedig egy adott szolgáltatáshoz kapcsolódásnak látszanak a Tor szolgáltatás helyett."> +<!ENTITY torsettings.bridgeHelp2 "Annak a módja alapján, hogy egyes országok hogyan blokkolják a Tor-t, bizonyos hidak bizonyos országokban működnek, de másokban nem.  Ha nem biztos abban, hogy mely hidak működnek az Ön országában, látogassa meg a torproject.org/about/contact.html#support oldalt."> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Kérjük várjon, amíg létrehozunk egy kapcsolatot a Tor hálózathoz.  Ez eltarthat néhány percig."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Kapcsolat"> +<!ENTITY torPreferences.torSettings "Tor beállítások"> +<!ENTITY torPreferences.torSettingsDescription "A Tor Böngésző átroutolja forgalmát a Tor hálózaton, amit több ezer önkéntes tart fenn, szerte a világon." > +<!ENTITY torPreferences.learnMore "További információ"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Teszt"> +<!ENTITY torPreferences.statusInternetOnline "Csatlakozva"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Tor Hálózat:"> +<!ENTITY torPreferences.statusTorConnected "Csatlakozva"> +<!ENTITY torPreferences.statusTorNotConnected "Nincs csatlakozva"> +<!ENTITY torPreferences.statusTorBlocked "Feltehetőleg blokkolt"> +<!ENTITY torPreferences.learnMore "További információ"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Gyorsindítás"> +<!ENTITY torPreferences.quickstartDescriptionLong "Gyorsindítás automatikusan csatlakoztatja a Tor Böngészőt a Tor Hálózathoz minden indításkor, a legutóbb használt beállítások szerint."> +<!ENTITY torPreferences.quickstartCheckbox "Mindig csatlakozzon automatikusan"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Hidak"> +<!ENTITY torPreferences.bridgesDescription "A hidak segíthetik a Tor hálózatok elérését olyan helyeken, ahol a Tor blokkolt. Attól függően, hogy hol van egyik híd jobban működhet, mint egy másik."> +<!ENTITY torPreferences.bridgeLocation "Tartózkodási helye"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatikus"> +<!ENTITY torPreferences.bridgeLocationFrequent "Gyakran választott helyszínek"> +<!ENTITY torPreferences.bridgeLocationOther "Más helyszínek"> +<!ENTITY torPreferences.bridgeChooseForMe "Ajánljon Nekem egy Hidat..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Jelenlegi Hídjai"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 híd: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Eltávolítás"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Beépített hidak letiltása"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Híd Címének Másolása"> +<!ENTITY torPreferences.copied "Másolva!"> +<!ENTITY torPreferences.bridgeShowAll "Összes Híd Mutatása"> +<!ENTITY torPreferences.bridgeRemoveAll "Összes Híd Eltávolítása"> +<!ENTITY torPreferences.bridgeAdd "Új Híd Hozzáadása"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Válasszon egyet a Tor Böngésző beépített hídjai közül"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Beépített Híd Kiválasztása..."> +<!ENTITY torPreferences.bridgeRequest "Híd kérése..."> +<!ENTITY torPreferences.bridgeEnterKnown "Írja be a már ismert híd címét"> +<!ENTITY torPreferences.bridgeAddManually "Híd Hozzáadása Kézzel..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Speciális"> +<!ENTITY torPreferences.advancedDescription "Állítsa be a Tor Böngésző hogyan csatlakozzon az internethez."> +<!ENTITY torPreferences.advancedButton "Beállítások..."> +<!ENTITY torPreferences.viewTorLogs "Tor napló megtekintése."> +<!ENTITY torPreferences.viewLogs "Napló megtekintése..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "Ezt a műveletet nem lehet visszavonni."> +<!ENTITY torPreferences.cancel "Mégsem"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR kód beolvasása"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Beépített Hidak"> +<!ENTITY torPreferences.builtinBridgeDescription "A Tor Böngésző tartalmaz néhány speciális hidat amiket "cserélhető átvitelnek" hívnak."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "Az obfs4 híd a beépített hidak egy típusa, amivel a Tor adatforgalom véletlenszerűnek látszik. Ezen kívül kisebb eséllyel van blokkolva az elődjéhez, az obfs3-hoz képest."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "A Snowflake a beépített hidak egy típusa, amely segít megkerülni a cenzúrát úgy, hogy a kapcsolatot átirányítja további önkéntesek által üzemeltetett Snowflake proxy-k csoportján."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "A meek-azure olyan beépített híd amely a Tor kapcsolatot Microsoft weboldalak látogatásának álcázza."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Híd kérése"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kapcsolódás a hídadatbázishoz. Kérjük várjon."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Oldjon meg egy CAPTCHA-t a híd kéréséhez."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "A megoldás nem helyes. Kérjük próbálja újra."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Híd Megadása"> +<!ENTITY torPreferences.provideBridgeHeader "Adja meg a megbízható helyről származó híd adatokat"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Kapcsolat Beállításai"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Állítsa be a Tor Böngésző hogyan csatlakozzon az internethez."> +<!ENTITY torPreferences.firewallPortsPlaceholder "Vesszővel elválasztott értékek"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor Napló"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Nincs csatlakozva"> +<!ENTITY torConnect.connectingConcise "Csatlakozás..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "A Tor Böngésző nem tudott csatlakozni a Tor-hoz"> +<!ENTITY torConnect.assistDescriptionConfigure "állítsa be kapcsolatát"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Ha A Tor blokkolva van az ön tartózkodási helyén, híd próbálása segíthet. A csatlakozási segéd képes választani egyet a tartózkodási helye alapján, vagy #1 kézzel."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Próbálkozás híddal"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "A Tor Böngésző nem tudta meghatározni az Ön tartózkodási helyét"> +<!ENTITY torConnect.errorLocationDescription "A Tor Böngészőnek szüksége van az Ön tartózkodási helyére, hogy annak megfelelő hidat tudjon választani. Ha azt inkább nem adná meg, akkor #1 kézzel."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Csatlakozási segéd"> +<!ENTITY torConnect.breadcrumbLocation "Helyi beállítások"> +<!ENTITY torConnect.breadcrumbTryBridge "Próbálkozás Híddal"> +<!ENTITY torConnect.automatic "Automatikus"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Gyakran választott helyszínek"> +<!ENTITY torConnect.otherLocations "Más helyszínek"> +<!ENTITY torConnect.restartTorBrowser "Tor Böngésző Újraindítása"> +<!ENTITY torConnect.configureConnection "Kapcsolat beállítása..."> +<!ENTITY torConnect.viewLog "Naplók megtekintése..."> +<!ENTITY torConnect.tryAgain "Újrapróbálkozás"> +<!ENTITY torConnect.offline "Nem érhető el az Internet"> +<!ENTITY torConnect.connectMessage "A Tor beállítások módosításai csatlakozás után lépnek életbe."> +<!ENTITY torConnect.tryAgainMessage "A Tor Böngészőnek nem sikerül létrehoznia a kapcsolatot a Tor hálózathoz"> +<!ENTITY torConnect.yourLocation "Tartózkodási helye"> +<!ENTITY torConnect.tryBridge "Próbálkozás híddal"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatikus beállítás sikertelen"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatikus beállítás sikertelen"> +<!ENTITY torConnect.cannotDetermineCountry "Nem sikerült a felhasználó országát meghatározni"> +<!ENTITY torConnect.noSettingsForCountry "Nincs elérhető beállítás az Ön tartózkodási helyéhez"> diff --git a/toolkit/torbutton/chrome/locale/hu/onboarding.properties b/toolkit/torbutton/chrome/locale/hu/onboarding.properties new file mode 100644 index 000000000000..bb97e55d896b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Új Önnek a %S?\nKezdjen neki. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=A %S teljesen megújult. Nézze meg miket tehet! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Bezárás +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Eltüntetés +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Kész diff --git a/toolkit/torbutton/chrome/locale/hu/torbutton.dtd b/toolkit/torbutton/chrome/locale/hu/torbutton.dtd new file mode 100644 index 000000000000..e7a0e3c541a8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Új személyazonosság"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Új személyazonosság"> +<!ENTITY torbutton.context_menu.new_identity_key "S"> +<!ENTITY torbutton.context_menu.new_circuit "Új Tor áramkör ehhez az oldalhoz"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Új Tor áramkör ehhez az oldalhoz"> +<!ENTITY torbutton.context_menu.new_circuit_key "S"> +<!ENTITY torbutton.context_menu.networksettings "Tor hálózati beállítások"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor Böngésző frissítések keresése"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Süti védelmek..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "S"> +<!ENTITY torbutton.button.tooltip "Kattintson a Torbutton inicializálásához"> +<!ENTITY torbutton.prefs.security_settings "Tor Böngésző biztonsági beállítások"> +<!ENTITY torbutton.cookiedialog.title "Süti védelem kezelése"> +<!ENTITY torbutton.cookiedialog.lockCol "Védett"> +<!ENTITY torbutton.cookiedialog.domainCol "Állomás"> +<!ENTITY torbutton.cookiedialog.nameCol "Név"> +<!ENTITY torbutton.cookiedialog.pathCol "Útvonal"> +<!ENTITY torbutton.cookiedialog.protectCookie "Süti védelme"> +<!ENTITY torbutton.cookiedialog.removeCookie "Süti törlés"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Süti védelem eltávolítása"> +<!ENTITY torbutton.cookiedialog.removeAllBut "A védett kivételével az összes törlése"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Védje az új sütiket"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Ne védje az új sütiket"> +<!ENTITY torbutton.prefs.sec_caption "Biztonsági szint"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "A Biztonsági Csúszka lehetővé tesz, hogy letiltson olyan böngésző funkciókat, amik sebezhetővé teszik feltörési kísérletekkel szemben."> +<!ENTITY torbutton.prefs.sec_standard_label "Normál"> +<!ENTITY torbutton.prefs.sec_standard_description "Minden Tor Böngésző és weboldal szolgáltatás engedélyezve."> +<!ENTITY torbutton.prefs.sec_safer_label "Biztonságosabb"> +<!ENTITY torbutton.prefs.sec_safer_description "Azon weboldal szolgáltatások tiltása, amelyek többnyire veszélyesek, ami néhány oldal működésének problémáit okozhatja."> +<!ENTITY torbutton.prefs.sec_safer_list_label "A biztonságosabb beállítás után_"> +<!ENTITY torbutton.prefs.sec_safest_label "Legbiztonságosabb"> +<!ENTITY torbutton.prefs.sec_safest_description "Csak azon weboldal szolgáltatások engedélyezése, amelyek a statikus, vagy alap szolgáltatásokhoz szükségesek. Ezek a beállítások érintik a képeket, médiákat és scripteket."> +<!ENTITY torbutton.prefs.sec_safest_list_label "A biztonságosabb beállítás után:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "További információ"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "A JavaScript tiltott a nem-HTTPS oldalkon."> +<!ENTITY torbutton.prefs.sec_js_disabled "A JavaScript alapértelmezetten tiltott minden oldalon."> +<!ENTITY torbutton.prefs.sec_limit_typography "Néhány betűtípus és matematikai szimbólum tiltásra került."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Néhány betűtípus, ikon és matematikai szimbólum és a képek tiltásra kerültek."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Az audió és videó (HTML5 média) és a WebGL kattintásra indul."> +<!ENTITY torbutton.prefs.sec_custom_warning "Egyéni"> +<!ENTITY torbutton.prefs.sec_overview "Néhány web szolgáltatás kikapcsolása, amit támadhatja biztonságát és anonimitását."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Biztonsági szint: Normál"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Biztonsági szint: Biztonságosabb"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Biztonsági szint: Legbiztonságosabb"> +<!ENTITY torbutton.prefs.sec_custom_summary "Az Ön által eszközölt egyéni böngészői beállítások eredményeképp biztonsági kockázatok merülhetnek fel. Biztonsági és adatvédelmi szempontokból kérjük válasszon az alapértelmezett biztonsági szintek közül."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Alapértelmezések visszaállítása"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Speciális biztonsági beállítások..."> +<!ENTITY torbutton.prefs.sec_change "Módosítás..."> +<!ENTITY torbutton.circuit_display.title "Tor áramkör"> +<!ENTITY torbutton.circuit_display.new_circuit "Új Tor áramkör ehhez az oldalhoz"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Az onion kliens autentikációs prompt megnyitása"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Jegyezze meg ezt a kulcsot"> diff --git a/toolkit/torbutton/chrome/locale/hu/torbutton.properties b/toolkit/torbutton/chrome/locale/hu/torbutton.properties new file mode 100644 index 000000000000..51af153c3cd6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP cím ismeretlen +torbutton.circuit_display.onion_site = Onion oldal +torbutton.circuit_display.this_browser = Ez a böngésző +torbutton.circuit_display.relay = Elosztó +torbutton.circuit_display.tor_bridge = Híd +torbutton.circuit_display.unknown_country = Ismeretlen ország +torbutton.circuit_display.guard = Őr +torbutton.circuit_display.guard_note = Az [Guard] csomópont nem változik. +torbutton.circuit_display.learn_more = További információ +torbutton.circuit_display.click_to_copy = Kattintson a másoláshoz +torbutton.circuit_display.copied = Másolva! +torbutton.content_sizer.margin_tooltip = A Tor Böngésző ezt a margót adja hozzá, hogy az ablak magassága és a szélessége kevésbé eltérő legyen, így csökkenti az online tevékenységének nyomon követhetőségét. +extensions.torbutton@torproject.org.description = A Torbutton egy gombot biztosít a Tor beállítások módosításához és a gyors és könnyű takarításához a privát böngészési adatoknak. +torbutton.popup.external.title = Töltse le a külső fájl típust? +torbutton.popup.external.app = A Tor Böngésző nem tudja megjeleníteni ezt a fájlt. Egy másik alkalmazással kell megnyitnia.\n\n +torbutton.popup.external.note = Néhány fájl képes alkalmazásokat az internethez kapcsódtatni Tor hasznlálata nélkül.\n\n +torbutton.popup.external.suggest = Biztonsága érdekében a letöltött fájlokat csak offline, vagy a Tails-hez hasonló Tor Live CD használatával nyissa meg.\n +torbutton.popup.launch = Fájl letöltése +torbutton.popup.cancel = Mégse +torbutton.popup.dontask = Fájlok automatikus letöltése mostantól +torbutton.popup.no_newnym = A Torbutton nem tud biztonságosan Új személyazonosságot adni. Nincs hozzáférése a Tor vezérlő porthoz.\n\nNem a Tor Böngésző csomagot használja? +torbutton.security_settings.menu.title = Biztonsági beállítások +torbutton.title.prompt_torbrowser = Fontos Torbutton információ +torbutton.popup.prompt_torbrowser = A Torbutton most már másképp működik: nem kapcsolható ki többé.\n\nAzért hoztuk ezt a döntést, mert nem biztonságos egy olyan böngészőből Torbuttont használni, amely Tor használatán kívüli böngészésre is használt. Túl sok hiba történhet, amit másképp nem tudunk javítani.\n\nHa szeretné a Firefox-ot normálisan használni, akkor a Torbutton-t el kell távolítania, és helyette letölteni a Böngésző csomagot. Az adatvédelmi beállításai a Tor Böngészőnek továb [...] +torbutton.popup.short_torbrowser = Fontos Torbutton információ!\n\na Torbutton most már mindig engedélyezett.\n\nKattintson a Torbutton-ra további információkért. + +torbutton.popup.confirm_plugins = A kiegészítők, mint a Flash sérthetik az anonimitást és az adatbiztonságot.\n\nEzek ezenkívül megkerülhetik a Tor-t, hogy felfedjék az aktuális helyét és IP címét.\n\nBiztos, hogy szeretné engedélyezni ezeket a kiegészítőket?\n +torbutton.popup.never_ask_again = Ne kérdezze többé +torbutton.popup.confirm_newnym = A Tor Böngésző becsukja az összes ablakot és fület. Minden weboldalkapcsolat megszakad.\n\nÚjraindítsuk a Tor Böngészőt, hogy alaphelyzetbe állítsuk személyazonosságát?\n\n + +torbutton.maximize_warning = A Tor Böngésző teljes méretűvé állítása engedélyt adhat a weboldalaknak arra, hogy megállapítsák a monitor méretét, amit felhasználhatnak az Ön követéséhez. Azt javasoljuk, hogy tartsa meg a Tor Böngésző alapértelmezett ablakméretét. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Ez az oldal (%S) megpróbál HTML5 képvászon adatokat kicsomagolni, ami a számítógépe egyedi azonosítására lehet alkalmas.\n\nMegengedje a Tor Böngésző a HTML5 vászon kép információk kiemelését? +canvas.notNow=Most nem +canvas.notNowAccessKey=N +canvas.allow=Megengedi a jövőben +canvas.allowAccessKey=J +canvas.never=Soha ehhez az oldalhoz (ajánlott) +canvas.neverAccessKey=S + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Profile probléma +profileReadOnly=Nem tudja futtatni a %S -t csak olvasható fájlrendszerről. Kérjük másolja %S-t egy másik helyre, mielőtt használja. +profileReadOnlyMac=Nem tudja futtatni a %S -t csak olvasható fájlrendszerről. Kérjük másolja %S-t az Asztalra, vagy az Alkalmazások mappába, mielőtt használja. +profileAccessDenied=%S nem rendelkezik jogosultsággal a profil eléréséhez. Kérjük állítsa be a fájl rendsze jogosultságokat, majd próbálja újra. +profileMigrationFailed=%S létező profil migrációja nem sikerült.\nÚj beállításokat fogunk használni. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S frissítés letöltése + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Titkosított kapcsolat (Onion szolgáltatás, %1$S, %2$S bites kulcsok, %3$S) +pageInfo_OnionEncryption=Titkosított kapcsolat (Onion szolgáltatás) +pageInfo_OnionName=Onion név: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=További információ +onionServices.errorPage.browser=Böngésző +onionServices.errorPage.network=Hálózat +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Probléma az Onionsite betöltésekor +onionServices.descNotFound.header=Onionsite nem található +onionServices.descNotFound=A leggyakoribb oka, hogy az onionsite kikapcsolt. Vegye fel a kapcsolatot az onionsite adminisztrátorával. +onionServices.descNotFound.longDescription=Részletek: %S — A kért onion szolgáltatás leíró nem található a hashringen, így nem elérhető a kliens számára. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Probléma az Onionsite betöltésekor +onionServices.descInvalid.header=Az Onionsite nem elérhető +onionServices.descInvalid=Az onionsite nem elérhető belső hiba miatt. +onionServices.descInvalid.longDescription=Részletek: %S — A kért onion szolgáltatás leíró nem értelmezhető, vagy az aláírás ellenőrzés sikertelen. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Probléma az Onionsite betöltésekor +onionServices.introFailed.header=Az Onionsite lecsatlakoztatva +onionServices.introFailed=A leggyakoribb oka, hogy az onionsite kikapcsolt. Vegye fel a kapcsolatot az onionsite adminisztrátorával. +onionServices.introFailed.longDescription=Részletek: %S — Bemutatkozás sikertelen, ami azt jelenti, hogy a leíró megtalálható volt, de a szolgáltatás nem csatlakozik a bemutatkozási pontjához. Valószínű, hogy a szolgáltatás megváltoztatta leíróját, vagy nem fut. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Probléma az Onionsite betöltésekor +onionServices.rendezvousFailed.header=Sikertelen csatlakozás az Onionsite-hoz +onionServices.rendezvousFailed=Az onionsite elfoglalt vagy a Tor hálózat túlterhelt. Kérjük próbálja később. +onionServices.rendezvousFailed.longDescription=Részletek: %S — a kliensnek nem sikerült randevúznia a szolgáltatással, ami azt jelenti, hogy a kliensnek nem sikerült véglegesítenie a kapcsolatot. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Hitelesítés szükséges +onionServices.clientAuthMissing.header=Az Onionsite hitelesítést kér +onionServices.clientAuthMissing=Az onionsite hozzáféréshez kulcs szükséges, de nem került beküldésre egy sem. +onionServices.clientAuthMissing.longDescription=Részletek: %S — A kliens letöltötte a szükséges onion szolgáltatás leírót, de nem sikerült dekódolni,a, mert a kliens hitelesítési információ hiányzik +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Hitelesítés sikertelen +onionServices.clientAuthIncorrect.header=Onionsite hitelesítés sikertelen +onionServices.clientAuthIncorrect=A megadott kulcs helytelen vagy visszavont. Vegye fel a kapcsolatot az onionsite adminisztrátorával. +onionServices.clientAuthIncorrect.longDescription=Részletek: %S — A kliens letöltötte a szükséges onion szolgáltatás leírót, de nem sikerült dekódolni a kliens által biztosított hitelesítési információval. Ez azt jelentheti, hogy a hozzáférés visszavont. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Probléma az Onionsite betöltésekor +onionServices.badAddress.header=Érvénytelen Onionsite cím +onionServices.badAddress=A megadott onionsite cím érvénytelen. Kérjük ellenőrizze megfelelően adta-e meg. +onionServices.badAddress.longDescription=Részletek: %S — A megadott .onion cím érvénytelen. Ez a hiba a következő okokból érkezhetett:\nA cím ellenőrző összege nem egyezik: az ed25519 publikus kulcs érvénytelen vagy a kódolása érvénytelen. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Probléma az Onionsite betöltésekor +onionServices.introTimedOut.header=Onionsite áramkör létrehozás időtúllépés +onionServices.introTimedOut=Sikertelen a csatlakozás az onionsite-hoz, feltehetően a gyenge hálózati kapcsolat miatt. +onionServices.introTimedOut.longDescription=Részletek: %S — A kapcsolat a kért opnion szolgáltatás felé időtúllépésre futott, miközben randevúzni próbált az áramkörrel. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S autentikációra kéri Önt. +onionServices.authPrompt.keyPlaceholder=Adja meg privát kulcsát ehhez az onion szolgáltatáshoz +onionServices.authPrompt.done=Kész +onionServices.authPrompt.doneAccessKey=a +onionServices.authPrompt.invalidKey=Kérjük adjon meg egy érvényes kulcsot (52 db base36 karakter vagy 44 db base64 karakter) +onionServices.authPrompt.failedToSetKey=Nem lehetséges a Tor konfigurálása a kulcsa nélkül +onionServices.authPreferences.header=Onion szolgáltatások autentikáció +onionServices.authPreferences.overview=Néhány onion szolgáltatás igényelheti az azonosítását valamilyen módon (valamilyen jelszóval) mielőtt elérhetné őket. +onionServices.authPreferences.savedKeys=Mentett kulcsok... +onionServices.authPreferences.dialogTitle=Onion szolgáltatás kulcsok +onionServices.authPreferences.dialogIntro=A következő onionsite-okhoz tároltak a kulcsok az Ön számítógépén +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Kulcs +onionServices.authPreferences.remove=Eltávolít +onionServices.authPreferences.removeAll=Mindent eltávolít +onionServices.authPreferences.failedToGetKeys=Sikertelen a kulcsok lekérése a tor-ról +onionServices.authPreferences.failedToRemoveKey=Nem lehetséges a kulcs eltávolítása +onionServices.v2Deprecated.pageTitle=V2 Onion oldal támogatás megszűnési figyelmeztetés +onionServices.v2Deprecated.header=A Verzió 2 Onion oldalak támogatása hamarosan megszűnik +onionServices.v2Deprecated=Ez az onion oldal hamarosan nem lesz elérhető. Kérjük vegye fel a kapcsolatot az oldal adminisztrátorával és vegye rá őket a frissítésre. +onionServices.v2Deprecated.longDescription=A Tor megszünteti a verzió 2 onion szolgáltatásokat 2021 júliustól és ez az onion oldal a továbbiakban nem lesz elérhető ezen a címen. Ha Ön az oldal adminisztrátora, frissítsen verzió 3 onion szolgáltatásra hamarosan. +onionServices.v2Deprecated.tryAgain=Megvan +onionServices.v2Deprecated.tooltip=Ez az onion oldal hamarosan nem lesz elérhető + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Mindig priorizálja az Onionokat +onionLocation.alwaysPrioritizeAccessKey=m +onionLocation.notNow=Most nem +onionLocation.notNowAccessKey=n +onionLocation.description=Egy sokkal privátabb és biztonságosabb verziója érhető el ennek az oldalnak a Tor hálózaton keresztül, onion szolgáltatásként. Az Onion szolgáltatások segítik a weboldal készítőket, hogy látogatóik kikerüljék a megfigyelést és a cenzúrát. +onionLocation.tryThis=Próbálja ki az Onion szolgáltatásokat +onionLocation.onionAvailable=.onion elérhető +onionLocation.learnMore=Tudjon meg többet... +onionLocation.always=Mindig +onionLocation.askEverytime=Kérdezze mindig +onionLocation.prioritizeOnionsDescription=Részesítse előnyben a .onion oldalt, ha ismert. +onionLocation.onionServicesTitle=Onion Szolgáltatások + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A kriptopénz cím (%S) nem biztonságos weboldalról került másolásra. Előfordulhat, hogy módosításra került. +cryptoSafetyPrompt.whatCanHeading=Mit tehet ez ellen? +cryptoSafetyPrompt.whatCanBody=Megpróbálhat újra csatlakozni egy új hálózattal biztonságos kapcsolat létrehozásához vagy elfogadhatja a kockázatot és figyelmen kívül hagyhatja a figyelmeztetést. +cryptoSafetyPrompt.learnMore=További információ +cryptoSafetyPrompt.primaryAction=A Fül újra töltése másik áramkörön keresztül +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Figyelmeztetés kihagyása +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Engedélyezve +rulesets.disabled=Letiltva +# Ruleset details/edit ruleset +rulesets.edit=Szerkesztés +rulesets.name=Név +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Mentés +rulesets.cancel=Mégsem diff --git a/toolkit/torbutton/chrome/locale/hu/torlauncher.properties b/toolkit/torbutton/chrome/locale/hu/torlauncher.properties new file mode 100644 index 000000000000..eca00d443423 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/hu/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Indító + +torlauncher.tor_exited_during_startup=A Tor kilépett indulásnál. Ez lehet egy hiba miatt a torrc fájlodban, a Tor vagy másik program hibája miatt a rendszereden, vagy hibás hardver miatt. Amíg nem javítja ki a mögöttes problémát és indítja újra a Tor-t, addig a Tor Böngésző nem fog elindulni. +torlauncher.tor_exited=A Tor váratlanul kilépett. Ez bekövetkezhet a Tor-ban található hibából, egy a rendszeren található másik programból, vagy hibás hardverből. Amíg nem indítja újra a tor-t addig a Tor Böngésző nem ér el semmilyen oldalt. Ha a hiba folyamatosan fennáll, kérjük küldje le a Tor Log-ot a támogatási csoportnak. +torlauncher.tor_exited2=A Tor újraindítása nem fogja bezárni a böngésző füleket. +torlauncher.tor_controlconn_failed=Nem lehetséges csatlakozni a Tor vezérlő portjára +torlauncher.tor_failed_to_start=Nem sikerült elindulnia a Tor-nak. +torlauncher.tor_control_failed=Nem sikerült átvenni a Tor vezérlését. +torlauncher.tor_bootstrap_failed=A Tor-nak nem sikerült Tor hálózati kapcsolatot létesíteni. +torlauncher.tor_bootstrap_failed_details=%1$S hiba (%2$S). + +torlauncher.unable_to_start_tor=Nem sikerült a Tor-t elindítani.\n\n%S +torlauncher.tor_missing=A Tor futtatható állomány hiányzik. +torlauncher.torrc_missing=A torrc fájl hiányzik és nem lehet létrehozni. +torlauncher.datadir_missing=A Tor data könyvtár nem létezik és nem lehet létrehozni. +torlauncher.onionauthdir_missing=A Tor onion autentikációs könyvtár nem létezik és nem létrehozható. +torlauncher.password_hash_missing=Nem sikerült megszerezni a hash-elt jelszót. + +torlauncher.failed_to_get_settings=Sikertelen a Tor beállítások lekérése.\n\n%S +torlauncher.failed_to_save_settings=Sikertelen a Tor beállítások mentése.\n\n%S +torlauncher.ensure_tor_is_running=Kérjük ellenőrizze, hogy a Tor fut-e. + +torlauncher.error_proxy_addr_missing=Meg kell adnia egy IP címet, vagy egy gépnevet (host) és egy portot , ahhoz, hogy a Tor ezen a proxy-n keresztül kapcsolódjon az Internethez. +torlauncher.error_proxy_type_missing=Ki kell választania a proxy típusát. +torlauncher.error_bridges_missing=Meg kell adnia egy vagy több hidat. +torlauncher.error_default_bridges_type_missing=Ki kell választania egy átviteli típust a felkínált hidakhoz. +torlauncher.error_bridgedb_bridges_missing=Kérjük kérjen egy hidat, +torlauncher.error_bridge_bad_default_type=Nincs egy híd sem aminek az átviteli típusa %S elérhető lenne. Kérlek módosítsd a beállításaidat. + +torlauncher.bridge_suffix.meek-amazon=(működik Kínában) +torlauncher.bridge_suffix.meek-azure=(működik Kínában) + +torlauncher.request_a_bridge=Híd kérése... +torlauncher.request_a_new_bridge=Új híd kérése... +torlauncher.contacting_bridgedb=Kapcsolódás a hídadatbázishoz. Kérjük várjon. +torlauncher.captcha_prompt=Oldjon meg egy CAPTCHA-t a híd kéréséhez. +torlauncher.bad_captcha_solution=A megoldás nem helyes. Kérjük próbálja újra. +torlauncher.unable_to_get_bridge=Sikertelen a híd beszerzése a hídadatbázisból.\n\n%S +torlauncher.no_meek=A böngésző nincs meek-re konfigurálva, ami szükséges a hidak beszerzéséhez. +torlauncher.no_bridges_available=Nincsenek most elérhető hidak. Sajnáljuk. + +torlauncher.connect=Csatlakozás +torlauncher.restart_tor=Tor újraindítása +torlauncher.quit=Kilépés +torlauncher.quit_win=Kilépés +torlauncher.done=Kész + +torlauncher.forAssistance=Segítségér kérjük írjon ide: %S +torlauncher.forAssistance2=Segítségért látogassa meg: %S + +torlauncher.copiedNLogMessages=Másolás kész. %S Tor naplóüzenet áll készen a beillesztésre egy szövegszerkesztőbe vagy egy email üzenetbe. + +torlauncher.bootstrapStatus.starting=Indítás +torlauncher.bootstrapStatus.conn_pt=Kapcsolódás hídhoz +torlauncher.bootstrapStatus.conn_done_pt=Kapcsolódva hídhoz +torlauncher.bootstrapStatus.conn_proxy=Kapcsolódás proxyhoz +torlauncher.bootstrapStatus.conn_done_proxy=Kapcsolódva proxyhoz +torlauncher.bootstrapStatus.conn=Kapcsolódás egy Tor reléhez +torlauncher.bootstrapStatus.conn_done=Kapcsolódva egy Tor reléhez +torlauncher.bootstrapStatus.handshake=Egyeztetés egy Tor relével +torlauncher.bootstrapStatus.handshake_done=Egyeztetés egy Tor relével befejezve +torlauncher.bootstrapStatus.onehop_create=Titkosított címtárkapcsolat létrehozása +torlauncher.bootstrapStatus.requesting_status=Hálózat státuszának lekérdezése +torlauncher.bootstrapStatus.loading_status=Hálózat státuszának betöltése +torlauncher.bootstrapStatus.loading_keys=Tanúsítványkiadó tanúsítványok betöltése +torlauncher.bootstrapStatus.requesting_descriptors=Elosztási adatok lekérdezése +torlauncher.bootstrapStatus.loading_descriptors=Elosztási adatok betöltése +torlauncher.bootstrapStatus.enough_dirinfo=Relé információk betöltése befejezve +torlauncher.bootstrapStatus.ap_conn_pt=Áramkörök felépítése: Kapcsolódás hídhoz +torlauncher.bootstrapStatus.ap_conn_done_pt=Áramkörök felépítése: Kapcsolódva hídhoz +torlauncher.bootstrapStatus.ap_conn_proxy=Áramkörök felépítése: Kapcsolódás proxyhoz +torlauncher.bootstrapStatus.ap_conn_done_proxy=Áramkörök felépítése: Kapcsolódva proxyhoz +torlauncher.bootstrapStatus.ap_conn=Áramkörök felépítése: Kapcsolódás egy Tor reléhez +torlauncher.bootstrapStatus.ap_conn_done=Áramkörök felépítése: Kapcsolódva egy Tor reléhez +torlauncher.bootstrapStatus.ap_handshake=Áramkörök felépítése: Egyeztetés egy Tor relével +torlauncher.bootstrapStatus.ap_handshake_done=Áramkörök felépítése: Egyeztetés egy Tor relével befejezve +torlauncher.bootstrapStatus.circuit_create=Áramkörök felépítése: egy Tor áramkör létesítése +torlauncher.bootstrapStatus.done=Kapcsolódva a Tor hálózathoz! + +torlauncher.bootstrapWarning.done=kész +torlauncher.bootstrapWarning.connectrefused=kapcsolódás visszautasítva +torlauncher.bootstrapWarning.misc=egyebek +torlauncher.bootstrapWarning.resourcelimit=elfogytak az erőforrások +torlauncher.bootstrapWarning.identity=identitás eltérés +torlauncher.bootstrapWarning.timeout=a kapcsolódási idő letelt +torlauncher.bootstrapWarning.noroute=nincs út a kiszolgálóhoz +torlauncher.bootstrapWarning.ioerror=írás/olvasás hiba +torlauncher.bootstrapWarning.pt_missing=hiányzó cseréhető átvitel + +torlauncher.nsresult.NS_ERROR_NET_RESET=A kapcsolat a szerverhez elveszett. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Sikertelen a csatlakozás a szerverhez. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Sikertelen a csatlakozás a proxy-hoz. + +torlauncher.copiedNLogMessagesShort=%S log másolva diff --git a/toolkit/torbutton/chrome/locale/id/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/id/aboutDialog.dtd new file mode 100644 index 000000000000..4d73913c3283 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; dikembangkan oleh"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", sebuah perusahaan nirlaba yang bekerja untuk melindungi privasi dan kebebasan penjelajahan Anda."> + +<!ENTITY help.start "Ingin membantu?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Donasi"> +<!ENTITY help.or "atau"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "ikut terlibat"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Pertanyaan?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Bantu Kembangakan Jaringan Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informasi Lisensi"> +<!ENTITY tor.TrademarkStatement "'Tor' dan 'Logo Onion' adalah merek dagang terdaftar Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/id/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/id/aboutTBUpdate.dtd new file mode 100644 index 000000000000..1bd32dd0e10e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Catatan Perubahan Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser telah diperbarui."> +<!ENTITY aboutTBUpdate.linkPrefix "Untuk informasi paling terbaru mengenai rilisan ini,"> +<!ENTITY aboutTBUpdate.linkLabel "kunjungi situs web kami"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versi"> +<!ENTITY aboutTBUpdate.releaseDate "Tanggal Rilis"> +<!ENTITY aboutTBUpdate.releaseNotes "Catatan Rilis"> diff --git a/toolkit/torbutton/chrome/locale/id/aboutTor.dtd b/toolkit/torbutton/chrome/locale/id/aboutTor.dtd new file mode 100644 index 000000000000..e2732a7f7880 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tentang Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Lihat Catatan Perubahan"> + +<!ENTITY aboutTor.ready.label "Jelajahi. Secara Privat."> +<!ENTITY aboutTor.ready2.label "Anda siap untuk pengalaman menjelajah yang paling privat di dunia."> +<!ENTITY aboutTor.failure.label "Ada Masalah!"> +<!ENTITY aboutTor.failure2.label "Tor tidak dapat digunakan diperamban ini."> + +<!ENTITY aboutTor.search.label "Cari dengan DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Pertanyaan?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Periksa Manual Tor Browser kami »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manual Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project adalah US 501(c)(3) organisasi nirlaba yang bertujuan memajukan hak asasi manusia dan kebebasan dengan membuat dan menyebarkan teknologi anominitas dan privasi yang bebas dan terbuka, mendukung keberadaan dan penggunaannya, dan meningkatkan pemahamannya ilmiah dan populernya."> +<!ENTITY aboutTor.getInvolved.label "Ikut Terlibat »"> + +<!ENTITY aboutTor.newsletter.tagline "Dapatkan berita Tor terbaru langsung dipos-el Anda."> +<!ENTITY aboutTor.newsletter.link_text "Daftar untuk mendapatkan Berita Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor bebas digunakan karena donasi dari orang-orang seperti Anda."> +<!ENTITY aboutTor.donationBanner.buttonA "Donasi Sekarang"> + +<!ENTITY aboutTor.alpha.ready.label "Uji. Secara menyeluruh."> +<!ENTITY aboutTor.alpha.ready2.label "Anda siap untuk menguji pengalaman browsing yang paling privat di dunia."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha adalah versi yang tidak stabil dari Tor Browser yang bisa Anda gunakan untuk meninjau fitur baru, menguji performanya dan memberikan umpan balik sebelum rilis."> +<!ENTITY aboutTor.alpha.bannerLink "Laporkan sebuah bug pada Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Uji. Secara menyeluruh."> +<!ENTITY aboutTor.nightly.ready2.label "Anda siap untuk menguji pengalaman browsing yang paling privat di dunia."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly merupakan versi tidak stabil dari Tor Browser yang Anda bisa gunakan untuk melihat fitur baru, mencoba kemampuannya dan memberi tanggapan sebelum rilis."> +<!ENTITY aboutTor.nightly.bannerLink "Laporkan sebuah bug pada Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONASI SEKARANG"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Donasi Anda akan dicocokkan oleh Friends of Tor hingga $100,000."> diff --git a/toolkit/torbutton/chrome/locale/id/brand.dtd b/toolkit/torbutton/chrome/locale/id/brand.dtd new file mode 100644 index 000000000000..498352f3c68f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Proyek Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' dan 'Logo Onion' adalah merek dagang terdaftar Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Peramban Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klik untuk memuat pengaya sistem yang terpasang"> +<!ENTITY plugins.installed.enable "Fungsikan pengaya"> +<!ENTITY plugins.installed.disable "Nonfungsikan pengaya"> +<!ENTITY plugins.installed.disable.tip "Klik untuk mencegah pemuatan pengaya sistem"> diff --git a/toolkit/torbutton/chrome/locale/id/brand.properties b/toolkit/torbutton/chrome/locale/id/brand.properties new file mode 100644 index 000000000000..8ffbfa66d6f5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Peramban Tor +vendorShortName=Proyek Tor + +homePageSingleStartMain=Firefox Start, halaman muka yang cepat dengan pencarian bawaan +homePageImport=Impor halaman beranda Anda dari %S + +homePageMigrationPageTitle=Pemilihan Halaman Muka +homePageMigrationDescription=Silahkan pilih halaman beranda yang ingin Anda gunakan: + +syncBrandShortName=Sinkronkan diff --git a/toolkit/torbutton/chrome/locale/id/branding/brand.ftl b/toolkit/torbutton/chrome/locale/id/branding/brand.ftl new file mode 100644 index 000000000000..1724e41105d4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Peramban Tor +-vendor-short-name = Proyek Tor +trademarkInfo = 'Tor' dan 'Logo Onion' adalah merek dagang terdaftar Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/id/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/id/browserOnboarding.properties new file mode 100644 index 000000000000..c53a4799cea5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Selamat datang +onboarding.tour-tor-welcome.title=Anda siap. +onboarding.tour-tor-welcome.description=Tor Browser menawarkan standar tertinggi atas privasi dan keamanan saat menjelajahi jaringan. Anda sekarang dilindungi dari pelacakan, pengintaian, dan penyensoran. Pelatihan singkat ini akan menunjukkan Anda bagaimana caranya. +onboarding.tour-tor-welcome.next-button=Pergi ke Privasi + +onboarding.tour-tor-privacy=Privasi +onboarding.tour-tor-privacy.title=Menolak pelacak dan pengintai. +onboarding.tour-tor-privacy.description=Tor Browser mengisolasi cookie dan menghapus riwayat peramban Anda setelah ditutup. Modifikasi ini menjamin privasi dan keamanan telah terproteksi di dalam peramban. Klik 'Jaringan Tor' untuk pempelajari bagaimana kami melindungi Anda pada level jaringan. +onboarding.tour-tor-privacy.button=Pergi ke Jaringan Tor + +onboarding.tour-tor-network=Jaringan Tor +onboarding.tour-tor-network.title=Melintasi jaringan yang terdesentralisasi. +onboarding.tour-tor-network.description=Tor Browser menghubungkan Anda ke jaringan Tor yang dijalankan oleh ribuan relawan di seluruh dunia. Tidak seperti VPN, tidak ada titik tunggal kegagalan atau entitas sentral yang perlu Anda percaya untuk menikmati Internet secara privat. +onboarding.tour-tor-network.description-para2=BARU: Pengaturan Jaringan Tor, termasuk kemampuan untuk meminta bridge dimana Tor diblokir, sekarang dapat ditemukan di Preferensi. +onboarding.tour-tor-network.action-button=Sesuaikan Pengaturan Jaringan Tor Anda +onboarding.tour-tor-network.button=Pergi ke Tampilan Sirkuit + +onboarding.tour-tor-circuit-display=Tampilan Sirkuit +onboarding.tour-tor-circuit-display.title=Lihat jalur Anda. +onboarding.tour-tor-circuit-display.description=Untuk setiap domain yang Anda kunjungi, lalu lintas Anda disampaikan dan terenkripsi dalam sebuah sirkuit melalui tiga relay Tor dari seluruh dunia. Tidak ada situs web mengetahui dari mana Anda terhubung. Anda dapat meminta sebuah sirkuit baru dengan klik 'Sirkuit Baru untuk Situs ini' pada Tampilan Sirkuit kami. +onboarding.tour-tor-circuit-display.button=Lihat Jalur Saya +onboarding.tour-tor-circuit-display.next-button=Pergi ke Keamanan + +onboarding.tour-tor-security=Keamanan +onboarding.tour-tor-security.title=Pilih pengalaman Anda. +onboarding.tour-tor-security.description=Kami juga memberi Anda pengaturan tambahan untuk menggenjot keamanan peramban Anda. Pengaturan Keamanan kami mengizinkan Anda untuk memblokir elemen-elemen yang dapat digunakan untuk menyerang komputer Anda. Klik di bawah untuk mengetahui apa saja yang dilakukan oleh pilihan yang berbeda. +onboarding.tour-tor-security.description-suffix=Catatan: Secara bawaan, NoScript dan HTTPS Everywhere tidak termasuk di dalam bilah alat, namun Anda dapat menyesuaikan bilah alat Anda untuk menambahkannya. +onboarding.tour-tor-security-level.button=Lihat Level Keamanan Anda +onboarding.tour-tor-security-level.next-button=Pergi ke Tips Pengalaman + +onboarding.tour-tor-expect-differences=Tips Pengalaman +onboarding.tour-tor-expect-differences.title=Harapkan beberapa perubahan. +onboarding.tour-tor-expect-differences.description=Dengan semua fitur keamanan dan privasi yang disediakan oleh Tor, pengalaman Anda saat menjelajahi internet mungkin akan sedikit berbeda. Kecepatan internet mungkin akan berkurang, dan berdasarkan level keamanan Anda, beberapa elemen mungkin tidak bisa bekerja atau dimuat. Anda mungkin juga akan mendapatkan pertanyaan untuk membuktikan bahwa Anda adalah manusia dan bukan robot. +onboarding.tour-tor-expect-differences.button=Lihat FAQ +onboarding.tour-tor-expect-differences.next-button=Pergi ke Layanan Onion + +onboarding.tour-tor-onion-services=Layanan Onion +onboarding.tour-tor-onion-services.title=Menjadi lebih terlindung. +onboarding.tour-tor-onion-services.description=Layanan Onion adalah situs yang berakhir dengan .onion yang menyediakan perlindungan lebih kepada penerbit dan pengunjung, termasuk tambahan penjagaan terhadap sensor. Layanan Onion mengizinkan siapa saja untuk menyediakan konten dan layanan secara anonim. Klik di bawah untuk mengunjungi situs onion DuckDuckGo. +onboarding.tour-tor-onion-services.button=Kunjungi sebuah Onion +onboarding.tour-tor-onion-services.next-button=Selesai + +onboarding.overlay-icon-tooltip-updated2=Lihat apa yang baru\ndi %S +onboarding.tour-tor-update.prefix-new=Baru +onboarding.tour-tor-update.prefix-updated=Telah diperbarui + +onboarding.tour-tor-toolbar=Bilah Alat +onboarding.tour-tor-toolbar-update-9.0.title=Selamat tinggal Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=Kami menginginkan pengalaman Anda menggunakan Tor terintegrasi secara penuh dalam Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Itulah sebabnya sekarang, daripada mengunakan tombol onion, kamu dapat melihat sirkuit Tor lewat [i] di bilah URL dan meminta sebuah Identitas Baru menggunakan tombol bilah alat atau menu [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Bagaimana Meminta Identitas Baru +onboarding.tour-tor-toolbar-update-9.0.next-button=Pergi ke Jaringan Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Selanjutnya +onboarding.tor-circuit-display.done=Selesai +onboarding.tor-circuit-display.one-of-three=1 dari 3 +onboarding.tor-circuit-display.two-of-three=2 dari 3 +onboarding.tor-circuit-display.three-of-three=3 dari 3 + +onboarding.tor-circuit-display.intro.title=Bagaimana sirkuit bekerja? +onboarding.tor-circuit-display.intro.msg=Sirkuit terbuat dari relay yang ditentukan secara acak, yang merupakan komputer di seluruh dunia yang terkonfigurasi untuk mengalihkan lalu lintas Tor. Sirkuit mengizinkan anda untuk menjelajah secara privat dan terhubung ke layanan onion. + +onboarding.tor-circuit-display.diagram.title=Tampilan Sirkuit +onboarding.tor-circuit-display.diagram.msg=Diagram ini menunjukkan relay-relay yang membuat sirkuit untuk situs web ini. Untuk mencegah pengkaitan antara aktivitas pada situs berbeda, setiap situs web mendapatkan sirkuit yang berbeda. + +onboarding.tor-circuit-display.new-circuit.title=Apakah Anda menginginkan sirkuit baru? +onboarding.tor-circuit-display.new-circuit.msg=Bila Anda tidak berhasil terhubung ke situs web yang Anda coba kunjungi atau situs web tersebut tidak memuat dengan benar, maka Anda bisa menggunakan tombol ini untuk membuka ulang situs tersebut dengan sirkuit baru. diff --git a/toolkit/torbutton/chrome/locale/id/network-settings.dtd b/toolkit/torbutton/chrome/locale/id/network-settings.dtd new file mode 100644 index 000000000000..ffc182284550 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Pengaturan Jaringan Tor"> +<!ENTITY torsettings.wizard.title.default "Hubungkan ke Tor"> +<!ENTITY torsettings.wizard.title.configure "Pengaturan Jaringan Tor"> +<!ENTITY torsettings.wizard.title.connecting "Membuat sambungan"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Bahasa Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Silahkan pilih bahasa."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klik "Connect" untuk tersambung ke Tor."> +<!ENTITY torSettings.configurePrompt "Klik "Configure" untuk mengubah pengaturan jaringan jika Anda berada di negara yang menyensor Tor (seperti Mesir, Tiongkok, Turki) atau anda ingin terhubung dari jaringan pribadi yang menggunakan proxy."> +<!ENTITY torSettings.configure "Konfigur"> +<!ENTITY torSettings.connect "Sambung"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Menunggu Tor untuk memulai..."> +<!ENTITY torsettings.restartTor "Muat Ulang Tor"> +<!ENTITY torsettings.reconfigTor "Konfigurasi ulang"> + +<!ENTITY torsettings.discardSettings.prompt "Kamu telah mengatur jembatan Tor atau kamu telah memasukkan pengaturan proksi lokal.  Untuk membuat koneksi langsung ke jaringan Tor, pengaturan ini harus dihapus."> +<!ENTITY torsettings.discardSettings.proceed "Buang Pengaturan dan Sambung"> + +<!ENTITY torsettings.optional "Opsional"> + +<!ENTITY torsettings.useProxy.checkbox "Saya menggunakan proxy untuk terhubung ke Internet"> +<!ENTITY torsettings.useProxy.type "Tipe Proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "pilih jenis proxy"> +<!ENTITY torsettings.useProxy.address "Alamat"> +<!ENTITY torsettings.useProxy.address.placeholder "alamat IP atau nama host"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Nama Pengguna"> +<!ENTITY torsettings.useProxy.password "Kata sandi"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Komputer ini pergi melalui firewall yang hanya mengizinkan koneksi untuk beberapa port"> +<!ENTITY torsettings.firewall.allowedPorts "Port yang diizinkan"> +<!ENTITY torsettings.useBridges.checkbox "Tor disensor di negara saya"> +<!ENTITY torsettings.useBridges.default "Pilih satu built-in bridge"> +<!ENTITY torsettings.useBridges.default.placeholder "pilih satu bridge"> +<!ENTITY torsettings.useBridges.bridgeDB "Meminta sebuah bridge ke torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Masukkan karakter-karakter dari gambar tesebut."> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Dapatkan tantangan baru"> +<!ENTITY torsettings.useBridges.captchaSubmit "Kirim"> +<!ENTITY torsettings.useBridges.custom "Sediakan sebuah bridge yang saya tahu"> +<!ENTITY torsettings.useBridges.label "Masukkan informasi bridge dari sumber terpercaya"> +<!ENTITY torsettings.useBridges.placeholder "masukkan alamat:port (satu entri per baris)"> + +<!ENTITY torsettings.copyLog "Salin Log Tor Ke Clipboard"> + +<!ENTITY torsettings.proxyHelpTitle "Bantuan untuk Proxy"> +<!ENTITY torsettings.proxyHelp1 "Proksi lokal mungkin diperlukan saat menyambung melalui jaringan perusahaan, sekolah, atau universitas. Jika Anda tidak yakin apakah proxy diperlukan, lihat setelan Internet di browser lain atau periksa setelan jaringan sistem Anda."> + +<!ENTITY torsettings.bridgeHelpTitle "Bantuan Bridge Relay"> +<!ENTITY torsettings.bridgeHelp1 "Bridges adalah relays yang tidak terdaftar, yang membuat pemblokiran sambungan di Jaringan Tor lebih sulit dilakukan.  Setiap jenis bridge menggunakan metode yang berbeda untuk menghindari sensor.  Jenis obfs membuat sambungan Anda terlihat seperti kegiatan acak dan jenis meek membuat sambungan Anda terlihat tersambung ke layanan tersebut, bukan ke Tor."> +<!ENTITY torsettings.bridgeHelp2 "Karena beberapa negara mencoba untuk memblokir Tor, beberapa jenis bridge berfungsi di beberapa negara tapi tidak di negara lain.  Jika Anda tidak yakin tentang jenis bridge yang berfungsi negara Anda, kunjungi torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Mohon menunggu sambil kami membuat sambungan ke jaringan Tor.  Ini akan memakan waktu beberapa menit"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Koneksi"> +<!ENTITY torPreferences.torSettings "Pengaturan Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser mengalihkan lalulintas kamu melalui Jaringan Tor, di jalankan oleh ribuan sukarelawan di seluruh dunia." > +<!ENTITY torPreferences.learnMore "Pelajari lebih lanjut"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Tes"> +<!ENTITY torPreferences.statusInternetOnline "Daring"> +<!ENTITY torPreferences.statusInternetOffline "Luring"> +<!ENTITY torPreferences.statusTorLabel "Jaringan Tor:"> +<!ENTITY torPreferences.statusTorConnected "Terhubung"> +<!ENTITY torPreferences.statusTorNotConnected "Tidak terhubung"> +<!ENTITY torPreferences.statusTorBlocked "Berpotensi diblokir"> +<!ENTITY torPreferences.learnMore "Pelajari lebih lanjut"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong ""Quickstart" menghubungkan Tor Browser dengan jaringan Tor secara otomatis saat diluncurkan, berdasarkan pengaturan koneksi yang terakhir dipakai."> +<!ENTITY torPreferences.quickstartCheckbox "Selalu terhubung secara otomatis"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Jembatan-jembatan"> +<!ENTITY torPreferences.bridgesDescription "Jembatan membantu Anda mengakses Jaringan Tor dimana Tor diblokir. Tergantung pada dimana Anda tinggal, satu jembatan mungkin dapat bekerja lebih baik daripada yang lainnya."> +<!ENTITY torPreferences.bridgeLocation "Lokasi Anda"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Otomatis"> +<!ENTITY torPreferences.bridgeLocationFrequent "Lokasi yang sering terpilih"> +<!ENTITY torPreferences.bridgeLocationOther "Lokasi lainnya"> +<!ENTITY torPreferences.bridgeChooseForMe "Pilih Jembatan untuk Saya..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Jembatan Anda saat ini"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Anda dapat menyimpan satu atau lebih jembatan, dan Tor akan memilih salah satu untuk digunakan saat Anda terhubung. Tor akan otomatis mengalihkan kepada jembatan lain saat dibutuhkan."> +<!ENTITY torPreferences.bridgeId "#1 jembatan: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Hapus"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Nonaktifkan bridge bawaan"> +<!ENTITY torPreferences.bridgeShare "Bagikan bridge ini menggunakan kode QR atau dengan menyalin alamatnya:"> +<!ENTITY torPreferences.bridgeCopy "Salin Alamat Bridge"> +<!ENTITY torPreferences.copied "Disalin!"> +<!ENTITY torPreferences.bridgeShowAll "Perlihatkan Semua Bridge"> +<!ENTITY torPreferences.bridgeRemoveAll "Hapus Semua Bridge"> +<!ENTITY torPreferences.bridgeAdd "Tambahkan Bridge Baru"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Pilih dari salah satu bridge bawaan Tor Browser"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Pilih Bridge Bawaan..."> +<!ENTITY torPreferences.bridgeRequest "Meminta sebuah bridge..."> +<!ENTITY torPreferences.bridgeEnterKnown "Masukkan alamat bridge yang telah Anda ketahui"> +<!ENTITY torPreferences.bridgeAddManually "Tambahkan bridge secara manual..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Advanced "> +<!ENTITY torPreferences.advancedDescription "Konfigurasi bagaimana Tor Browser terhubung ke internet"> +<!ENTITY torPreferences.advancedButton "Pengaturan..."> +<!ENTITY torPreferences.viewTorLogs "Tampilkan log Tor"> +<!ENTITY torPreferences.viewLogs "Lihat Catatan...."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Hapus semua bridge?"> +<!ENTITY torPreferences.removeBridgesWarning "Aksi ini tidak dapat dibatalkan."> +<!ENTITY torPreferences.cancel "Cancel"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Pindai kode QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Bridge Bawaan"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser menyertakan beberapa tipe bridge spesifik yang dikenal sebagai "pluggable transports"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 adalah tipe bridge bawaan yang membuat lalu lintas Tor Anda terlihat acak. Mereka juga memiliki kemungkinan yang lebih kecil untuk diblokir dibandingkan dengan pendahulunya, bridge obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake adalah bridge bawaan yang mengalahkan sensor dengan merouting koneksi Anda melalui proxy Snowflake, yang dijalankan oleh sukarelawan."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure adalah bridge bawaan yang membuat Anda terlihat sedang menggunakan sebuah situs web Microsoft alih-alih menggunakan Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Minta Jembatan"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Menghubungi BridgeDB. Mohon tunggu."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Selesaikan CAPTCHA untuk meminta sebuah bridge."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Solusinya tidak tepat. Silakan coba lagi."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Sediakan Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Masukkan informasi bridge dari sumber yang terpercaya"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Pengaturan Koneksi"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Konfigurasi bagaimana Tor Browser tersambung ke Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Nilai yang dipisahkan koma"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Catatan Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Tidak terhubung"> +<!ENTITY torConnect.connectingConcise "Menyambung…"> +<!ENTITY torConnect.tryingAgain "Mencoba lagi..."> +<!ENTITY torConnect.noInternet "Tor Browser tidak dapat menjangkau Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser tidak dapat menyambung ke Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "Konfigurasi koneksi Anda"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Jika Tor diblokir di lokasi Anda, mencoba bridge mungkin membantu. Pembantu koneksi bisa memilih satu untuk Anda menggunakan lokasi Anda, atau Anda bisa #1 secara manual sebagai gantinya."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Mencoba sebuah bridge..."> +<!ENTITY torConnect.tryingBridgeAgain "Mencoba sekali lagi..."> +<!ENTITY torConnect.errorLocation "Tor Browser tidak dapat menemukan Anda"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser perlu mengetahui lokasi Anda untuk memilih bridge yang benar untuk Anda. Jika Anda tidak ingin membagi lokasi Anda, #1 secara manual sebagai gantinya"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Apakah pengaturan lokasi ini benar?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser tetap tidak dapat terhubung dengan Tor. Pastikan pengaturan lokasi Anda sudah benar dan coba kembali, atau #1 sebagai gantinya."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Pembantu Koneksi"> +<!ENTITY torConnect.breadcrumbLocation "Pengaturan lokasi"> +<!ENTITY torConnect.breadcrumbTryBridge "Mencoba sebuah bridge"> +<!ENTITY torConnect.automatic "Otomatis"> +<!ENTITY torConnect.selectCountryRegion "Pilih Negara atau Wilayah"> +<!ENTITY torConnect.frequentLocations "Lokasi yang sering terpilih"> +<!ENTITY torConnect.otherLocations "Lokasi lainnya"> +<!ENTITY torConnect.restartTorBrowser "Memulai ulang Tor Browser"> +<!ENTITY torConnect.configureConnection "Konfigurasi Koneksi..."> +<!ENTITY torConnect.viewLog "Tampilkan log..."> +<!ENTITY torConnect.tryAgain "Coba Lagi"> +<!ENTITY torConnect.offline "Internet tidak dapat dijangkau"> +<!ENTITY torConnect.connectMessage "Perubahan pada Pengaturan Tor tidak akan berlaku sampai Anda terhubung"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser telah gagal membuat koneksi ke Jaringan Tor"> +<!ENTITY torConnect.yourLocation "Lokasi Anda"> +<!ENTITY torConnect.tryBridge "Coba Sebuah Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Konfigurasi otomatis gagal"> +<!ENTITY torConnect.autoBootstrappingFailed "Konfigurasi otomatis gagal"> +<!ENTITY torConnect.cannotDetermineCountry "Tidak dapat menentukan negara pengguna"> +<!ENTITY torConnect.noSettingsForCountry "Tidak ada pengaturan yang tersedia untuk lokasi Anda"> diff --git a/toolkit/torbutton/chrome/locale/id/onboarding.properties b/toolkit/torbutton/chrome/locale/id/onboarding.properties new file mode 100644 index 000000000000..9c84ddc04cad --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Baru di %S?\nAyo kita mulai. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=Banyak yang baru di %S.\nLihat apa yang bisa Anda lakukan! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Tutup +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Tutup +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Selesai diff --git a/toolkit/torbutton/chrome/locale/id/torbutton.dtd b/toolkit/torbutton/chrome/locale/id/torbutton.dtd new file mode 100644 index 000000000000..039095e05c95 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Identitas Baru"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Identitas baru"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Sirkuit Tor Baru untuk Situs ini"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Sirkuit Tor baru untuk situs ini"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Pengaturan Jaringan Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Periksa Pembaruan untuk Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Perlindungan Cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klik untuk mengaktifkan TombolTor"> +<!ENTITY torbutton.prefs.security_settings "Pengaturan Keamanan Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Kelola Perlindungan Cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "Terlindung"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Nama"> +<!ENTITY torbutton.cookiedialog.pathCol "Path"> +<!ENTITY torbutton.cookiedialog.protectCookie "Lindungi Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Hapus Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Lindungi Cookie Baru"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Jangan Lindungi Cookie Baru"> +<!ENTITY torbutton.prefs.sec_caption "Tingkat Keamanan"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Penggeser keamanan memungkinkan anda untuk menonaktifkan fitur browser yang dapat membuat browser anda menjadi lebih rentant dari upaya peretasan."> +<!ENTITY torbutton.prefs.sec_standard_label "Standar"> +<!ENTITY torbutton.prefs.sec_standard_description "Semua fitur dari Tor Browser dan situs web diaktifkan."> +<!ENTITY torbutton.prefs.sec_safer_label "Lebih aman"> +<!ENTITY torbutton.prefs.sec_safer_description "Menonaktifkan fitur-fitur situs web yang sering berbahaya, ini akan membuat beberapa situs kehilangan fungsionalitas."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Di pengaturan yang lebih aman:"> +<!ENTITY torbutton.prefs.sec_safest_label "Paling aman"> +<!ENTITY torbutton.prefs.sec_safest_description "Hanya menjalankan fitur-fitur situs yang diperlukan untuk menjalankan situs web statis dan servis dasar. Perubahan ini mempengaruhi gambar, media, dan skrip."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Di pengaturan yang paling aman:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Pelajari lebih lanjut"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript dinonaktifkan di semua situs non-HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript dinonaktifkan secara acak di semua situs."> +<!ENTITY torbutton.prefs.sec_limit_typography "Beberapa font dan simbol matematika dinonaktifkan."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Beberapa font, icon, simbol matematika, dan gambar dinonaktifkan."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio dan video (media HTML5), dan WebGL adalah klik untuk putar.."> +<!ENTITY torbutton.prefs.sec_custom_warning "Kustom "> +<!ENTITY torbutton.prefs.sec_overview "Menonaktifkan fitur web tertentu yang dapat digunakan untuk menyerang keamanan dan anonimitas Anda."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Tingkat Keamanan: Standar"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Tingkat Keamanan: Lebih aman"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Tingkat Keamanan: Paling aman"> +<!ENTITY torbutton.prefs.sec_custom_summary "Preferensi peramban khusus Anda telah membuat pengaturan keamanan yang tidak biasa. Untuk alasan keamanan dan privasi, kami menyarankan Anda untuk memilih satu dari tingkat keamanan bawaan."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Kembalikan ke Standar"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Pengaturan Keamanan Lanjutan..."> +<!ENTITY torbutton.prefs.sec_change "Ubah..."> +<!ENTITY torbutton.circuit_display.title "Sirkuit Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Sirkuit Baru untuk Situs Ini"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Buka permintaan otentikasi klien oninon service"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Ingat kunci ini"> diff --git a/toolkit/torbutton/chrome/locale/id/torbutton.properties b/toolkit/torbutton/chrome/locale/id/torbutton.properties new file mode 100644 index 000000000000..2bc92f5a4d38 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP tidak diketahui +torbutton.circuit_display.onion_site = Situs onion +torbutton.circuit_display.this_browser = Browser ini +torbutton.circuit_display.relay = Relay +torbutton.circuit_display.tor_bridge = Bridge +torbutton.circuit_display.unknown_country = Negara tidak diketahui +torbutton.circuit_display.guard = Guard +torbutton.circuit_display.guard_note = Titik [Guard] Anda tidak dapat berubah +torbutton.circuit_display.learn_more = Pelajari lebih lanjut +torbutton.circuit_display.click_to_copy = Klik untuk Menyalin +torbutton.circuit_display.copied = Disalin! +torbutton.content_sizer.margin_tooltip = Tor Browser menambahkan margin ini untuk membuat lebar dan tinggi window Anda agar tidak terlalu mencolok, dan dengan demikian mengurangi kemampuan orang untuk melacak Anda secara online. +extensions.torbutton@torproject.org.description = Torbutton menyediakan tombol untuk mengonfigurasi pengaturan Tor dan menghapus data penjelajahan pribadi dengan cepat dan mudah. +torbutton.popup.external.title = Unduh sebuah tipe file eksternal? +torbutton.popup.external.app = Browser Tor tidak dapat menampilkan file ini. Anda butuh aplikasi lain untuk membukanya\n +torbutton.popup.external.note = Beberapa tipe file dapat menyebabkan aplikasi terkoneksi ke internet tanpa menggunakan Tor\n\n +torbutton.popup.external.suggest = Agar aman, sebaiknya anda hanya membuka file selagi offline, atau gunakan Live CD Tor seperti Tails.\n +torbutton.popup.launch = Unduh file +torbutton.popup.cancel = Batal +torbutton.popup.dontask = File-file akan diunduh secara otomatis mulai dari sekarang +torbutton.popup.no_newnym = Torbution tidak dapat memberikan Anda identitas baru secara aman. Torbutton tidak memiliki akses terhadap Tor Control Port. Apakah Anda sedang menjalankan paket browser Tor? +torbutton.security_settings.menu.title = Pengaturan Keamanan +torbutton.title.prompt_torbrowser = Informasi penting Torbutton +torbutton.popup.prompt_torbrowser = Torbutton bekerja secara berbeda sekarang: Anda tidak dapat mematikannya lagi.\n\nKami membuat perubahan ini karena tidak aman menggunakan Torbutton di browser yang juga digunakan untuk penjelajahan non-Tor. Ada terlalu banyak bug di sana yang tidak dapat kami perbaiki dengan cara lain.\n\nJika Anda ingin tetap menggunakan Firefox secara normal, Anda harus menghapus Torbutton dan mengunduh Tor Browser Bundle. Properti privasi Tor Browser juga lebih ung [...] +torbutton.popup.short_torbrowser = Informasi Penting Torbutton!\n\nTorbutton sekarang selalu diaktifkan.\n\nKlik pada Torbutton untuk informasi lebih lanjut. + +torbutton.popup.confirm_plugins = Plugin seperti Flash dapat membahayakan privasi dan anonimitas Anda.\n\nMereka juga dapat melewati Tor untuk mengungkapkan lokasi dan alamat IP Anda saat ini.\n\nApakah Anda yakin ingin mengaktifkan plugin? +torbutton.popup.never_ask_again = Jangan pernah ditanyakan kembali +torbutton.popup.confirm_newnym = Browser Tor akan menutup semua jendela dan tab. Semua sesi website akan terhapus.\n\nJalankan ulang Tor Browser untuk\n\n + +torbutton.maximize_warning = Maksimalkan Browser Tor dapat mengizinkan website untuk menentukan ukuran monitor anda, yang dapat digunakan untuk melacak anda. kami menyarankan bahwa anda meninggalkan windows browser Tor dalam ukuran asli default nya + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Situs ini (%S) butuh untuk mengekstrak data gambar HTML5 , yang mungkin akan mengetahui identitas komputer anda.\n\nApakah Tor Browser perlu mengizinkan website ini untuk mengekstrak data gambar HTML5? +canvas.notNow=Tidak Sekarang +canvas.notNowAccessKey=N +canvas.allow=Izinkan kedepannya +canvas.allowAccessKey=A +canvas.never=Jangan pernah untuk situs ini (disarankan) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Profile bermasalah +profileReadOnly=Anda tidak dapat menjalankan %S dari Sistem File Read only. Silakan copy %S ke lokasi lain sebelum mencoba menggunakannya +profileReadOnlyMac=Anda tidak bisa menjalankan %S dari File sistem read-only. Silakan copy %S ke desktop anda atau folder aplikasi sebelum mencoba menggunakannya. +profileAccessDenied=%S tidak memiliki izin untuk mengakses profile .Silakan atur perizinan sistem file anda dan coba lagi . +profileMigrationFailed=Migrasi dari profil %S gagal.\nSetting baru akan digunakan. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Mengunduh %S pembaruan + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Koneksi terenkripsi (Layanan Onion, %1$S, %2$S bit kunci, %3$S) +pageInfo_OnionEncryption=Koneksi terenkripsi (Layanan Onion) +pageInfo_OnionName=Nama Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Pelajari Selengkapnya +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Jaringan +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Masalah Memuat Onionsite +onionServices.descNotFound.header=Onionsite Tidak ditemukan +onionServices.descNotFound=Penyebab yang paling mungkin adalah bahwa situs onion sedang offline. Hubungi administrator situs onion. +onionServices.descNotFound.longDescription=Detail: %S — Deskriptor layanan onion yang diminta tidak dapat ditemukan pada hashring dan oleh karena itu layanan tidak dapat dijangkau oleh klien. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Masalah Memuat Onionsite +onionServices.descInvalid.header=Onionsite Tidak bisa dijangkau +onionServices.descInvalid=Onionsite tidak dapat dijangkau karena ada kesalahan internal. +onionServices.descInvalid.longDescription=Detail: %S — Deskriptor layanan onion yang diminta tidak dapat diuraikan atau validasi tanda tangan gagal. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Masalah Memuat Onionsite +onionServices.introFailed.header=Onionsite Terputus +onionServices.introFailed=Penyebab yang paling mungkin adalah bahwa situs onion sedang offline. Hubungi administrator situs onion. +onionServices.introFailed.longDescription=Detail: %S — perkenalan gagal, yang berarti bahwa deskriptor ditemukan tetapi layanan tidak lagi terhubung ke titik perkenalan. Kemungkinan layanan telah mengubah deskriptornya atau sedang tidak berjalan. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Masalah Memuat Onionsite +onionServices.rendezvousFailed.header=Tidak bisa Terhubung ke Onionsite +onionServices.rendezvousFailed=Onionsite sedang sibuk atau jaringan Tor sedang kelebihan beban. Silahkan coba lagi. +onionServices.rendezvousFailed.longDescription=Detail: %S — Klien gagal terhubung dengan layanan, yang berarti klien tidak dapat menyelesaikan koneksi. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Dibutuhkan otorisasi +onionServices.clientAuthMissing.header=Onionsite Membutuhkan Otorisasi +onionServices.clientAuthMissing=Akses ke situs onion memerlukan key tetapi tidak ditemukan. +onionServices.clientAuthMissing.longDescription=Detail: %S — Klien mengunduh deskriptor layanan onion yang diminta tetapi tidak dapat mendekripsi kontennya karena informasi otorisasi klien hilang. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Otorisasi Gagal +onionServices.clientAuthIncorrect.header=Otorisasi Onionsite Gagal +onionServices.clientAuthIncorrect=Key yang diberikan salah atau telah dihapus. Hubungi administrator situs onion. +onionServices.clientAuthIncorrect.longDescription=Detail: %S — Klien dapat mengunduh deskriptor layanan onion yang diminta tetapi tidak dapat mendekripsi kontennya menggunakan informasi otorisasi klien yang disediakan. Ini mungkin berarti bahwa akses telah dicabut. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Masalah Memuat Onionsite +onionServices.badAddress.header=Alamat Onionsite Salah +onionServices.badAddress=Alamat situs onion yang diberikan tidak valid. Harap periksa apakah Anda sudah memasukkannya dengan benar. +onionServices.badAddress.longDescription=Detail: %S — Alamat .onion yang diberikan tidak valid. Kesalahan ini dikembalikan karena salah satu alasan berikut: alamat checksum tidak cocok, key publik ed25519 tidak valid, atau encoding tidak valid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Masalah Memuat Onionsite +onionServices.introTimedOut.header=Waktu Pembuatan Sirkuit Onionsite Habis +onionServices.introTimedOut=Gagal terhubung ke situs onion, mungkin karena koneksi jaringan yang buruk. +onionServices.introTimedOut.longDescription=Detail: %S — Sambungan ke layanan onion yang dituju waktunya sudah habis disaat mencoba membangun sirkuit pertemuan. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S meminta anda mengautentikasi. +onionServices.authPrompt.keyPlaceholder=Masukkan private key anda untuk layanan onion ini +onionServices.authPrompt.done=Selesai +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Harap masukkan key yang valid (52 karakter base32 atau 44 karakter base64) +onionServices.authPrompt.failedToSetKey=Tidak dapat mengonfigurasi Tor dengan key Anda +onionServices.authPreferences.header=Otentikasi Layanan Onion +onionServices.authPreferences.overview=Beberapa layanan onion mengharuskan anda mengidentifikasi diri anda dengan key (semacam kata sandi) sebelum anda dapat mengaksesnya. +onionServices.authPreferences.savedKeys=Key Tersimpan… +onionServices.authPreferences.dialogTitle=Key Layanan Onion +onionServices.authPreferences.dialogIntro=Kunci untuk situs onion berikut disimpan di komputer Anda +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Key +onionServices.authPreferences.remove=Hapus +onionServices.authPreferences.removeAll=Hapus semua +onionServices.authPreferences.failedToGetKeys=Tidak dapat mengambil key dari tor +onionServices.authPreferences.failedToRemoveKey=Tidak bisa menghapus key +onionServices.v2Deprecated.pageTitle=Peringatan Penghentian Situs Onion V2 +onionServices.v2Deprecated.header=Situs Onion Versi 2 akan segera dihentikan +onionServices.v2Deprecated=Situs onion ini tidak akan dapat dijangkau dalam waktu dekat. Silakan hubungi administrator situs dan minta mereka untuk memperbaharuinya. +onionServices.v2Deprecated.longDescription=Tor mengakhiri dukungannya untuk layanan onion versi 2 mulai Juli 2021, dan situs onion ini tidak lagi dapat dijangkau di alamat ini. Jika Anda adalah administrator situs, segera tingkatkan ke layanan onion versi 3. +onionServices.v2Deprecated.tryAgain=Mengerti +onionServices.v2Deprecated.tooltip=Situs onion ini sudah tidak dapat dijangkau kembali dikemudian hari + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Selalu Utamakan Onion +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Tidak untuk Sekarang +onionLocation.notNowAccessKey=n +onionLocation.description=Ada versi yang lebih pribadi dan aman dari situs ini yang tersedia melalui jaringan Tor melalui layanan onion. Layanan onion membantu penerbit situs web dan pengunjung mereka melewati pengawasan dan penyensoran. +onionLocation.tryThis=Coba Layanan Onion +onionLocation.onionAvailable=.onion tersedia +onionLocation.learnMore=Pelajari Selengkapnya... +onionLocation.always=Selalu +onionLocation.askEverytime=Tanyakan setiap saat +onionLocation.prioritizeOnionsDescription=Prioritaskan situs .onion jika tersedia. +onionLocation.onionServicesTitle=Layanan Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Alamat mata uang kripto (%S) telah disalin dari situs web yang tidak aman. Itu bisa saja dimodifikasi. +cryptoSafetyPrompt.whatCanHeading=Apa yang dapat Anda lakukan? +cryptoSafetyPrompt.whatCanBody=Anda dapat mencoba menghubungkan kembali dengan sirkuit baru untuk membuat koneksi yang aman, atau menerima risiko dan abaikan peringatan ini. +cryptoSafetyPrompt.learnMore=Pelajari Selengkapnya +cryptoSafetyPrompt.primaryAction=Muat Ulang Tab dengan Sirkuit Baru +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Abaikan Peringatan +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Lanjutkan dengan Waspada +rulesets.warningDescription=Menambahkan atau memodifikasi rulesets dapat menyebabkan penyerang untuk mengambil alih kontrol browser Anda. Lanjutkan bila Anda tahu apa yang Anda lakukan. +rulesets.warningEnable=Peringatkan saya ketika saya mencoba mengakses pengaturan ini +rulesets.warningButton=Terima Resiko dan Lanjut +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=Tidak ditemukan rulesets +rulesets.noRulesetsDescr=Ketika Anda menyimpan ruleset di Tor Browser, itu akan tampil di sini. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Terakhir diperbarui %S +rulesets.neverUpdated=Belum pernah diperbarui, atau terakhir pembaruan gagal +rulesets.enabled=Difungsikan +rulesets.disabled=Dinonaktifkan +# Ruleset details/edit ruleset +rulesets.edit=Sunting +rulesets.name=Nama +rulesets.jwk=JWK +rulesets.pathPrefix=Jalur Prefiks +rulesets.scope=Cakupan +rulesets.enable=Aktifkan ruleset ini +rulesets.checkUpdates=Periksa Pembaruan +rulesets.jwkPlaceholder=Kunci digunakan untuk memasukkan ruleset ini ke JWK (JSON Web Key) format +rulesets.jwkInvalid=JWK tidak dapat dipisahkan, atau ini memiliki kunci yang tidak valid +rulesets.pathPrefixPlaceholder=Prefiks URL yang mengandung berkas yang dibutuhkan oleh ruleset +rulesets.pathPrefixInvalid=Jalur prefix memiliki HTTP(S) URL yang tidak valid +rulesets.scopePlaceholder=Ekspresi reguler untuk jangkauan aturan +rulesets.scopeInvalid=Jangkauan tidak dapat diuraikan sebagai ekspresi reguler +rulesets.save=Simpan +rulesets.cancel=Cancel diff --git a/toolkit/torbutton/chrome/locale/id/torlauncher.properties b/toolkit/torbutton/chrome/locale/id/torlauncher.properties new file mode 100644 index 000000000000..9e3432b2f057 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/id/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Peluncur Tor + +torlauncher.tor_exited_during_startup=Tor keluar ketika startup. Hal ini mungkin karena suatu kesalahan pada berkas torrc anda, bug pada Tor atau program lain pada sistem anda, atau kerusakan pada perangkat keras. Hingga anda memperbaiki masalah tersebut dan mulai ulang Tor, Tor Browser tidak akan dijalankan. +torlauncher.tor_exited=Tor keluar mendadak. Ini dapat terjadi karena bug dalam Tor, atau program lain di sistem Anda, atau kerusakan perangkat keras. Sampai anda memuat ulang Tor, Tor Browser tidak dapat mencapai situs web apapun. Jika masalah ini terus bertahan, mohon mengirimkan salinan dari log Tor Anda kepada tim pendukung. +torlauncher.tor_exited2=Memuat ulang Tor tidak akan menutup tab browser Anda. +torlauncher.tor_controlconn_failed=Tidak dapat tersambung pada port kontrol Tor. +torlauncher.tor_failed_to_start=Tor gagal untuk memulai. +torlauncher.tor_control_failed=Gagal untuk mendapatkan kontrol Tor. +torlauncher.tor_bootstrap_failed=Tor gagal menghasilkan koneksi jaringan Tor. +torlauncher.tor_bootstrap_failed_details=%1$S gagal (%2$S). + +torlauncher.unable_to_start_tor=Tidak dapat memulai Tor\n\n%S +torlauncher.tor_missing=Tor executable hilang +torlauncher.torrc_missing=Berkas torrc hilang dan tidak dapat dibuat. +torlauncher.datadir_missing=Direktori data tor tidak ada dan tidak dapat dibuat. +torlauncher.onionauthdir_missing=Direktori otentikasi Tor onion tidak ada dan tidak dapat dibuat. +torlauncher.password_hash_missing=Gagal mendapatkan kata sandi hashed. + +torlauncher.failed_to_get_settings=Gagal mendapatkan pengaturan Tor.\n\n%S +torlauncher.failed_to_save_settings=Tidak dapat menyimpan pengaturan Tor.\n\n%S +torlauncher.ensure_tor_is_running=Mohon pastikan Tor sedang berjalan. + +torlauncher.error_proxy_addr_missing=Anda harus menentukan baik alamat IP atau nama host dan nomor port untuk mengkonfigurasi Tor supaya menggunakan sebuah proxy untuk mengakses Internet. +torlauncher.error_proxy_type_missing=Anda harus memilih jenis proxy. +torlauncher.error_bridges_missing=Anda harus menspesifikan satu bridge atau lebih. +torlauncher.error_default_bridges_type_missing=Anda harus memilih satu tipe transportasi untuk bridges yang tersedia. +torlauncher.error_bridgedb_bridges_missing=Silakan meminta sebuah bridge. +torlauncher.error_bridge_bad_default_type=Tidak ada bridges tersedia yang memiliki tipe transportasi %S tersedia. Mohon sesuaikan pengaturan Anda. + +torlauncher.bridge_suffix.meek-amazon=(berfungsi di Tiongkok) +torlauncher.bridge_suffix.meek-azure=(berfungsi di Tiongkok) + +torlauncher.request_a_bridge=Meminta sebuah bridge... +torlauncher.request_a_new_bridge=Meminta bridge baru... +torlauncher.contacting_bridgedb=Menghubungi BridgeDB. Mohon tunggu. +torlauncher.captcha_prompt=Selesaikan CAPTCHA untuk meminta sebuah bridge. +torlauncher.bad_captcha_solution=Solusinya tidak tepat. Silakan coba lagi. +torlauncher.unable_to_get_bridge=Tidak bisa mendapat sebuah bridge dari BridgeDB.\n\n%S +torlauncher.no_meek=Peramban ini tidak dikonfigurasi untuk menggunakan meek, di mana diperlukan untuk mendapatkan bridge. +torlauncher.no_bridges_available=Tidak ada bridge tersedia saat ini. Maaf. + +torlauncher.connect=Hubungi +torlauncher.restart_tor=Muat ulang Tor +torlauncher.quit=Berhenti +torlauncher.quit_win=Keluar +torlauncher.done=Selesai. + +torlauncher.forAssistance=Untuk bantuan, hubungi $S +torlauncher.forAssistance2=Untuk bantuan, kunjungi %S + +torlauncher.copiedNLogMessages=Penyalinan selesai. %S log pesan Tor telah siap untuk ditempelkan ke dalam editor text atau pesan email. + +torlauncher.bootstrapStatus.starting=Mulai +torlauncher.bootstrapStatus.conn_pt=Menghubungkan ke bridge +torlauncher.bootstrapStatus.conn_done_pt=Terhubung ke bridge +torlauncher.bootstrapStatus.conn_proxy=Menghubungkan ke proksi +torlauncher.bootstrapStatus.conn_done_proxy=Terhubung ke proksi +torlauncher.bootstrapStatus.conn=Menghubungkan ke relay Tor +torlauncher.bootstrapStatus.conn_done=Terhubung ke relay Tor +torlauncher.bootstrapStatus.handshake=Bernegosiasi dengan relay Tor +torlauncher.bootstrapStatus.handshake_done=Selesai bernegosiasi dengan relay Tor +torlauncher.bootstrapStatus.onehop_create=Membuat koneksi direktori terenkripsi +torlauncher.bootstrapStatus.requesting_status=Mengambil status jaringan +torlauncher.bootstrapStatus.loading_status=Memuat status jaringan +torlauncher.bootstrapStatus.loading_keys=Memuat sertifikat otoritas +torlauncher.bootstrapStatus.requesting_descriptors=Meminta informasi relay +torlauncher.bootstrapStatus.loading_descriptors=Memuat informasi relay +torlauncher.bootstrapStatus.enough_dirinfo=Selesai memuat informasi relay +torlauncher.bootstrapStatus.ap_conn_pt=Membangun sirkuit: Menghubungkan ke bridge +torlauncher.bootstrapStatus.ap_conn_done_pt=Membangun sirkuit: Terhubung ke bridge +torlauncher.bootstrapStatus.ap_conn_proxy=Membangun sirkuit: Menghubungkan ke proksi +torlauncher.bootstrapStatus.ap_conn_done_proxy=Membangun sirkuit: Terhubung ke proksi +torlauncher.bootstrapStatus.ap_conn=Membangun sirkuit: Menghubungkan ke relay Tor +torlauncher.bootstrapStatus.ap_conn_done=Membangun sirkuit: Terhubung ke relay Tor +torlauncher.bootstrapStatus.ap_handshake=Membangun sirkuit: Bernegosiasi dengan relay Tor +torlauncher.bootstrapStatus.ap_handshake_done=Membangun sirkuit: Selesai bernegosiasi dengan relay Tor +torlauncher.bootstrapStatus.circuit_create=Membangun sirkuit: Membuat sirkuit Tor +torlauncher.bootstrapStatus.done=Telah terhubung ke jaringan Tor + +torlauncher.bootstrapWarning.done=selesai +torlauncher.bootstrapWarning.connectrefused=koneksi ditolak +torlauncher.bootstrapWarning.misc=aneka +torlauncher.bootstrapWarning.resourcelimit=sumber daya tidak mencukupi +torlauncher.bootstrapWarning.identity=identitas tidak cocok +torlauncher.bootstrapWarning.timeout=waktu koneksi habis +torlauncher.bootstrapWarning.noroute=tidak ada rute ke host +torlauncher.bootstrapWarning.ioerror=error baca/tulis +torlauncher.bootstrapWarning.pt_missing=kehilangan pluggable transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Koneksi ke server terputus. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Tidak bisa terhubung dengan server. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Tidak bisa tersambung ke proxy: + +torlauncher.copiedNLogMessagesShort=%S Log berhasil disalin diff --git a/toolkit/torbutton/chrome/locale/is/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/is/aboutDialog.dtd new file mode 100644 index 000000000000..24b79d099604 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; er þróað af "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", frjálsum félagasamtökum sem vinna að því að verja rétt þinn til einkalífs og frelsi þitt á netinu."> + +<!ENTITY help.start "Viltu hjálpa?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Styrkja"> +<!ENTITY help.or "eða"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "taka þátt"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Spurningar?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Hjálpaðu Tor-netinu að vaxa!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Upplýsingar um notkunarleyfi"> +<!ENTITY tor.TrademarkStatement "'Tor' og 'Laukmerkið' (Onion Logo) eru skráð vörumerki Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/is/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/is/aboutTBUpdate.dtd new file mode 100644 index 000000000000..46157f63d8aa --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Breytingaannáll Tor-vafrans"> +<!ENTITY aboutTBUpdate.updated "Tor-vafrinn var uppfærður."> +<!ENTITY aboutTBUpdate.linkPrefix "Til að sjá allra nýjustu upplýsingar um þessa útgáfu,"> +<!ENTITY aboutTBUpdate.linkLabel "heimsæktu vefsvæðið okkar"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Útgáfa"> +<!ENTITY aboutTBUpdate.releaseDate "Útgáfudagsetning"> +<!ENTITY aboutTBUpdate.releaseNotes "Útgáfuupplýsingar"> diff --git a/toolkit/torbutton/chrome/locale/is/aboutTor.dtd b/toolkit/torbutton/chrome/locale/is/aboutTor.dtd new file mode 100644 index 000000000000..4369b524746d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Um Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Skoða breytingaannál"> + +<!ENTITY aboutTor.ready.label "Vafraðu í friði fyrir hnýsni."> +<!ENTITY aboutTor.ready2.label "Nú er allt klárt fyrir mestu fáanlegu vernd við vafur á netinu."> +<!ENTITY aboutTor.failure.label "Eitthvað fór úrskeiðis!"> +<!ENTITY aboutTor.failure2.label "Tor virkar ekki í þessum vafra."> + +<!ENTITY aboutTor.search.label "Leita með DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Spurningar?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Skoðaðu notendahandbók Tor-vafrans »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Notendahandbók Tor-vafrans"> + +<!ENTITY aboutTor.tor_mission.label "Tor-verkefnið er skráð sem bandarísk US 501(c)(3) sjálfboðaliðasamtök án gróðamarkmiða, samtök sem hafa mannréttindi og frelsi að leiðarljósi og stefna að þeim markmiðum með gerð og útbreiðslu á tækni til verndar persónuupplýsinga. Sú tækni eigi að vera öllum frjáls og heimil til notkunar, vera opin til skoðunar, enda sé eitt markmiðanna að stuðla að bættum almennum og vísindalegum skilningi á þessum málum."> +<!ENTITY aboutTor.getInvolved.label "Taktu þátt »"> + +<!ENTITY aboutTor.newsletter.tagline "Fáðu nýjustu fréttir af Tor beint í pósthólfið þitt."> +<!ENTITY aboutTor.newsletter.link_text "Skráðu þig til að fá Tor-fréttir."> +<!ENTITY aboutTor.donationBanner.freeToUse "Öllum er frjálst að nota Tor vegna styrkja frá fólki eins og þér."> +<!ENTITY aboutTor.donationBanner.buttonA "Styrkja núna"> + +<!ENTITY aboutTor.alpha.ready.label "Prófa. Vandlega."> +<!ENTITY aboutTor.alpha.ready2.label "Þú ert í standi til að prófa heimsins öruggasta netvafur."> +<!ENTITY aboutTor.alpha.bannerDescription "Alfa-útgáfan Tor Browser Alpha er óstöðug útgáfa Tor-vafrans sem þú getur notað til að fá smjörþefinn af nýjum eiginleikum, prófa virkni þeirra og gefa umsögn um þá áður en að útgáfu þeirra kemur."> +<!ENTITY aboutTor.alpha.bannerLink "Tilkynna um villu á spjallsvæði Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Prófa. Vandlega."> +<!ENTITY aboutTor.nightly.ready2.label "Þú ert í standi til að prófa heimsins öruggasta netvafur."> +<!ENTITY aboutTor.nightly.bannerDescription "Sólarhrings-útgáfan Tor Browser Nightly er óstöðug útgáfa Tor-vafrans sem þú getur notað til að fá smjörþefinn af nýjum eiginleikum, prófa virkni þeirra og gefa umsögn um þá áður en að útgáfu þeirra kemur."> +<!ENTITY aboutTor.nightly.bannerLink "Tilkynna um villu á spjallsvæði Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "PERSÓNUVERND Í FYRSTA SÆTI:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "MÓTSPYRNA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "FRAMÞRÓUN"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FRELSI"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "STYRKJA NÚNA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Styrkurinn þinn verður jafnaður upp af Friends of Tor, allt að 100.000 USD."> diff --git a/toolkit/torbutton/chrome/locale/is/brand.dtd b/toolkit/torbutton/chrome/locale/is/brand.dtd new file mode 100644 index 000000000000..2a54afe96154 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor-vafrinn"> +<!ENTITY brandShortName "Tor-vafrinn"> +<!ENTITY brandFullName "Tor-vafrinn"> +<!ENTITY vendorShortName "Tor-verkefnið"> +<!ENTITY trademarkInfo.part1 "'Tor' og 'Laukmerkið' (Onion Logo) eru skráð vörumerki Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor-vafrinn"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Smelltu til að hlaða inn uppsettum kerfisviðbótum"> +<!ENTITY plugins.installed.enable "Virkja viðbætur"> +<!ENTITY plugins.installed.disable "Gera viðbætur óvirkar"> +<!ENTITY plugins.installed.disable.tip "Smelltu til að koma í veg fyrir að kerfisviðbótum sé hlaðið inn"> diff --git a/toolkit/torbutton/chrome/locale/is/brand.properties b/toolkit/torbutton/chrome/locale/is/brand.properties new file mode 100644 index 000000000000..3b5fcc07b165 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor-vafrinn +brandShortName=Tor-vafrinn +brandFullName=Tor-vafrinn +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor-vafrinn +vendorShortName=Tor-verkefnið + +homePageSingleStartMain=Upphafssíða Firefox, hraðvirk og með innbyggðri leit +homePageImport=Flytja inn heimasíðuna þína frá %s + +homePageMigrationPageTitle=Val heimasíðu +homePageMigrationDescription=Veldu heimasíðuna sem þú vilt nota: + +syncBrandShortName=Samræma diff --git a/toolkit/torbutton/chrome/locale/is/branding/brand.ftl b/toolkit/torbutton/chrome/locale/is/branding/brand.ftl new file mode 100644 index 000000000000..73becf05d147 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor-vafrinn +-brand-short-name = Tor-vafrinn +-brand-full-name = Tor-vafrinn +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor-vafrinn +-vendor-short-name = Tor-verkefnið +trademarkInfo = 'Tor' og 'Laukmerkið' (Onion Logo) eru skráð vörumerki Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/is/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/is/browserOnboarding.properties new file mode 100644 index 000000000000..3be04d3b1365 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Velkomin +onboarding.tour-tor-welcome.title=Þú ert tilbúin(n). +onboarding.tour-tor-welcome.description=Tor-vafrinn stenst ítrustu kröfur varðandi öryggi og nafnleynd þegar vafrað er á netinu. Þú ert núna varin(n) fyrir eftirliti, skráningu og ritskoðun. Þessi flýtikynning mun sýna þér hvernig þetta fer fram. +onboarding.tour-tor-welcome.next-button=Fara í Friðhelgi + +onboarding.tour-tor-privacy=Friðhelgi +onboarding.tour-tor-privacy.title=Feldu þig fyrir snuðrurum og eftirliti +onboarding.tour-tor-privacy.description=Tor-vafrinn einangrar vefkökur og hreinsar vafurferil þinn eftir setuna þína. Þessar aðgerðir tryggja verndun gagnaleyndar og almennt öryggi í vafranum. Smelltu á ‘Tor-netið’ til að sjá hvernig við verjum þig einnig gagnvart netkerfinu sjálfu. +onboarding.tour-tor-privacy.button=Fara á Tor-netið + +onboarding.tour-tor-network=Tor-netið +onboarding.tour-tor-network.title=Farðu um ómiðstýrt netkerfi. +onboarding.tour-tor-network.description=Tor-vafrinn tengir þig við Tor-netið sem rekið er af þúsundum sjálfboðaliða um víða veröld. Ólíkt VPN, þá er enginn einn punktur sem getur brugðist eða miðlægt fyrirbæri sem þú þarft að treysta til að geta notað netið án afskipta annarra. +onboarding.tour-tor-network.description-para2=NÝTT: Netkerfisstillingar Tor, þar með talinn möguleikinn á að biðja um brýr þar sem lokað er á Tor, eru núna í kjörstillingunum. +onboarding.tour-tor-network.action-button=Aðlagaðu þínar netkerfisstillingar fyrir Tor +onboarding.tour-tor-network.button=Fara í birtingu rása + +onboarding.tour-tor-circuit-display=Birting rása +onboarding.tour-tor-circuit-display.title=Skoðaðu slóðina þína +onboarding.tour-tor-circuit-display.description=Fyrir hvert lén sem þú heimsækir, er umferðinni þinni endurbeint dulritaðri um brautir (rásir) milli þriggja Tor-endurvarpa víðsvegar um heiminn. Ekkert vefsvæði getur séð hvaðan þú tengist. Þú getur beðið um nýja rás með því að smella á ‘Ný rás fyrir þetta vefsvæði’ í glugganum þar sem rásirnar eru birtar. +onboarding.tour-tor-circuit-display.button=Skoða slóðina mína +onboarding.tour-tor-circuit-display.next-button=Fara í Öryggi + +onboarding.tour-tor-security=Öryggi +onboarding.tour-tor-security.title=Veldu hvernig þú vilt upplifa þetta. +onboarding.tour-tor-security.description=Við höfum einnig útbúið viðbótarstillingar þar sem þú getur breytt öryggisstigi vafrans. Öryggisstillingarnar gera kleift að loka á atriði sem hægt væri að nota til árása á tölvuna þína. Smelltu hér fyrir neðan til að skoða hvernig hinir mismunandi valkostir virka. +onboarding.tour-tor-security.description-suffix=Athugaðu: Sjálfgefið eru NoScript og HTTPS-allsstaðar ekki á verkfærastikunni, en þú getur hinsvegar sérsniðið verkfærastikuna og bætt þeim við. +onboarding.tour-tor-security-level.button=Skoðaðu öryggisstig þitt +onboarding.tour-tor-security-level.next-button=Fara í Ábendingar fyrir upplifunina + +onboarding.tour-tor-expect-differences=Ábendingar fyrir upplifunina +onboarding.tour-tor-expect-differences.title=Gerðu ráð fyrir að eitthvað verði öðruvísi. +onboarding.tour-tor-expect-differences.description=Vegna allra öryggis- og gagnaverndareiginleika Tor, þá gæti upplifun þín af vafri á internetinu orðið eilítið öðruvísi en annars væri. Hlutirnir gerast kannski aðeins hægar og það fer eftir öryggisstillingunum þínum hvort sum atriði virki eða birtist yfirhöfuð. Þú gætir líka lent í því að vera reglulega spurð(ur) hvort þú sért mannvera eða vélmenni. +onboarding.tour-tor-expect-differences.button=Skoða algengar spurningar - FAQ +onboarding.tour-tor-expect-differences.next-button=Fara í Onion-þjónustur + +onboarding.tour-tor-onion-services=Onion-þjónustur +onboarding.tour-tor-onion-services.title=Fáðu viðbótaröryggi. +onboarding.tour-tor-onion-services.description=Onion-þjónustur eru vefsvæði sem enda á .onion viðskeyti, vefsvæði sem gefa útgefendum efnis og þeim sem skoða það aukna vernd gagnvart ritskoðun. Onion-þjónustur gera öllum kleift að birta efni eða eigin þjónustu nafnlaust. Smelltu hér fyrir neðan til að skoða onion-vefsvæði DuckDuckGo. +onboarding.tour-tor-onion-services.button=Heimsækja Onion-vef +onboarding.tour-tor-onion-services.next-button=Lokið + +onboarding.overlay-icon-tooltip-updated2=Sjáðu hvað er nýtt:\n%S batnar stöðugt +onboarding.tour-tor-update.prefix-new=Nýtt +onboarding.tour-tor-update.prefix-updated=Uppfært + +onboarding.tour-tor-toolbar=Verkfærastika +onboarding.tour-tor-toolbar-update-9.0.title=Bless gamli laukhnappur. +onboarding.tour-tor-toolbar-update-9.0.description=Við viljum að upplifun þín með Tor sé að fullu innbyggð í Tor-vafrann. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Þess vegna er orðin sú breyting að þú getur séð Tor-rásina sem þú ert að nota með [i] tákninu í URL-staðsetningastikunni, frekar en að nota laukhnappinn, og nú er hægt að biðja um nýtt auðkenni með hnappnum á verkfærastikunni eða í [≡] valmyndinni. +onboarding.tour-tor-toolbar-update-9.0.button=Hvernig á að biðja um nýtt auðkenni +onboarding.tour-tor-toolbar-update-9.0.next-button=Fara á Tor-netið + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Næsta +onboarding.tor-circuit-display.done=Lokið +onboarding.tor-circuit-display.one-of-three=1 af 3 +onboarding.tor-circuit-display.two-of-three=2 af 3 +onboarding.tor-circuit-display.three-of-three=3 af 3 + +onboarding.tor-circuit-display.intro.title=Hvernig virka rásir? +onboarding.tor-circuit-display.intro.msg=Rásir eru samsettar úr handahófsvöldum endurbeinum, sem eru tölvur úti um víða veröld sem sjá um að áframsenda umferð fyrir Tor. Rásir gera þér kleift að vafra í leyni og að tengjast við onion-þjónustur. + +onboarding.tor-circuit-display.diagram.title=Birting rása +onboarding.tor-circuit-display.diagram.msg=Þessi skýringamynd sýnir endurvarpana sem saman mynda rásina fyrir þetta vefsvæði. Til að koma í veg fyrir að hægt sé að tengja saman virkni á mismunandi vefsvæðum, þá fær hvert vefsvæði sína sérstöku rás. + +onboarding.tor-circuit-display.new-circuit.title=Þarftu nýja rás? +onboarding.tor-circuit-display.new-circuit.msg=Ef þú átt í vandræðum með að tengjast vefsvæði sem þú ætlar að skoða eða að það hleðst ekki rétt inn, þá geturðu notað þennan hnapp til að endurhlaða in vefsíðunni með nýrri rás. diff --git a/toolkit/torbutton/chrome/locale/is/network-settings.dtd b/toolkit/torbutton/chrome/locale/is/network-settings.dtd new file mode 100644 index 000000000000..fc4151c7363e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Netkerfisstillingar Tor"> +<!ENTITY torsettings.wizard.title.default "Tengjast við Tor-netið"> +<!ENTITY torsettings.wizard.title.configure "Netkerfisstillingar Tor"> +<!ENTITY torsettings.wizard.title.connecting "Kem á tengingu"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tungumál Tor-vafra"> +<!ENTITY torlauncher.localePicker.prompt "Veldu tungumál"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Smelltu á "Tengjast" til að tengjast við Tor."> +<!ENTITY torSettings.configurePrompt "Smelltu á “Stilla” til að breyta netstillingum ef þú ert í landi sem ritskoðar umferð um Tor (svo sem Egyptalandi, Kína, Tyrklandi) eða ef þú ert að tengjast af einkaneti sem krefst þess að fara um milliþjón."> +<!ENTITY torSettings.configure "Stilla"> +<!ENTITY torSettings.connect "Tengjast"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Bíð eftir að Tor ræsist..."> +<!ENTITY torsettings.restartTor "Endurræsa Tor"> +<!ENTITY torsettings.reconfigTor "Endurstilla"> + +<!ENTITY torsettings.discardSettings.prompt "Þú hefur sett upp brýr fyrir Tor eða að þú hefur farið inn í stillingar milliþjóns á kerfinu.  Til að útbúa beina tengingu inn á Tor-netið, þá verður að fjarlægja þessar stillingar."> +<!ENTITY torsettings.discardSettings.proceed "Fjarlægja stillingar og tengjast"> + +<!ENTITY torsettings.optional "Valkvætt"> + +<!ENTITY torsettings.useProxy.checkbox "Ég nota milliþjón (proxy) til að tengjast við internetið"> +<!ENTITY torsettings.useProxy.type "Tegund milliþjóns (proxy)"> +<!ENTITY torsettings.useProxy.type.placeholder "veldu tegund milliþjóns"> +<!ENTITY torsettings.useProxy.address "Vistfang"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-vistfang eða vélarheiti"> +<!ENTITY torsettings.useProxy.port "Gátt"> +<!ENTITY torsettings.useProxy.username "Notandanafn"> +<!ENTITY torsettings.useProxy.password "Lykilorð"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Þessi tölva tengist í gegnum eldvegg sem leyfir einungis tengingar í gegnum tilteknar gáttir"> +<!ENTITY torsettings.firewall.allowedPorts "Leyfðar gáttir"> +<!ENTITY torsettings.useBridges.checkbox "Tor er ritskoðað í landinu mínu"> +<!ENTITY torsettings.useBridges.default "Veldu innbyggða brú"> +<!ENTITY torsettings.useBridges.default.placeholder "veldu brú"> +<!ENTITY torsettings.useBridges.bridgeDB "Biðja um brú frá torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Settu inn stafina úr myndinni"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Fá nýja gátu"> +<!ENTITY torsettings.useBridges.captchaSubmit "Senda inn"> +<!ENTITY torsettings.useBridges.custom "Gefa brú sem ég þekki"> +<!ENTITY torsettings.useBridges.label "Settu inn upplýsingar um brú frá aðila sem þú treystir."> +<!ENTITY torsettings.useBridges.placeholder "settu inn vistfang:gátt (eitt á hverja línu)"> + +<!ENTITY torsettings.copyLog "Afrita atvikaskrá Tor á klippispjald"> + +<!ENTITY torsettings.proxyHelpTitle "Hjálp fyrir milliþjóna"> +<!ENTITY torsettings.proxyHelp1 "Hugsanlega þarf að nota staðværan milliþjón (proxy) þegar tengst er í gegnum net fyrirtækis, skóla eða stofnunar. Ef þú ert ekki viss hvort þurfi að nota milliþjón, kíktu þá á netstillingarnar í einhverjum öðrum vafra eða á uppsetningu netsins í stýrikerfinu þínu."> + +<!ENTITY torsettings.bridgeHelpTitle "Hjálp fyrir brúaendurvarpa"> +<!ENTITY torsettings.bridgeHelp1 "Brýr eru faldir endurvarpar sem gera erfiðara að loka á tengingar á Tor netinu.  Hver tegund af brúm notar mismunandi aðferðir til að forðast ritskoðun.  obfs-brýrnar láta netumferðina þína líta út sem handahófskennt suð og meek-brýr láta netumferðina þína líta út fyrir að tengjast þeirri þjónustu í staðinn fyrir Tor."> +<!ENTITY torsettings.bridgeHelp2 "Vegna þess hvernig sum lönd reyna að loka á umferð um Tor, munu sumar brýr virka í sumum löndum en aðrar ekki.  Ef þú ert ekki viss um hvaða brýr virka í landinu þínu, skaltu skoða torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Bíddu aðeins á meðan tengingu er komið á við Tor-netið.  Það getur tekið nokkrar mínútur."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Tenging"> +<!ENTITY torPreferences.torSettings "Stillingar Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor-vafrinn beinir umferðinni þinni um Tor-netið, sem rekið er af þúsundum sjálfboðaliða um víða veröld." > +<!ENTITY torPreferences.learnMore "Fræðast frekar"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Prófun"> +<!ENTITY torPreferences.statusInternetOnline "Nettengt"> +<!ENTITY torPreferences.statusInternetOffline "Ónettengt"> +<!ENTITY torPreferences.statusTorLabel "Tor-netið:"> +<!ENTITY torPreferences.statusTorConnected "Tengt"> +<!ENTITY torPreferences.statusTorNotConnected "Ótengt"> +<!ENTITY torPreferences.statusTorBlocked "Mögulega hindrað"> +<!ENTITY torPreferences.learnMore "Fræðast frekar"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Flýtiræsing"> +<!ENTITY torPreferences.quickstartDescriptionLong "Flýtiræsing tengir Tor-vafrann sjálfvirkt við Tor-netkerfið þegar hann er ræstur, út frá þeim stillingum sem síðast voru notaðar til að tengjast."> +<!ENTITY torPreferences.quickstartCheckbox "Alltaf tengjast sjálfkrafa"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Brýr"> +<!ENTITY torPreferences.bridgesDescription "Brýr hjálpa þér við að fá aðgang að Tor-netkerfinu á stöðum þar sem lokað er á Tor. Það fer eftir því hvar þú ert hvaða brú virkar betur en einhver önnur."> +<!ENTITY torPreferences.bridgeLocation "Staðsetning þín"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Sjálfvirkt"> +<!ENTITY torPreferences.bridgeLocationFrequent "Oft notaðar staðsetningar"> +<!ENTITY torPreferences.bridgeLocationOther "Aðrar staðsetningar"> +<!ENTITY torPreferences.bridgeChooseForMe "Velja brú fyrir mig…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Fyrirliggjandi brýrnar þínar"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Þú getur vistað eina eða fleiri brýr og Tor mun velja hverja þeirra ætti að nota þegar þú tengist. Tor mun skipta sjálfvirkt yfir á aðra brú eftir þörfum."> +<!ENTITY torPreferences.bridgeId "#1 brú: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Fjarlægja"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Gera innbyggðar brýr óvirkar"> +<!ENTITY torPreferences.bridgeShare "Deildu þessari brú með því að nota QR-kóðann eða að líma vistfang hennar:"> +<!ENTITY torPreferences.bridgeCopy "Afrita vistfang brúar"> +<!ENTITY torPreferences.copied "Afritað!"> +<!ENTITY torPreferences.bridgeShowAll "Sýna allar brýr"> +<!ENTITY torPreferences.bridgeRemoveAll "Fjarlægja allar brýr"> +<!ENTITY torPreferences.bridgeAdd "Þæta við nýrri brú"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Veldu eina af innbyggðum brúm Tor-vafrans"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Velja innbyggða brú…"> +<!ENTITY torPreferences.bridgeRequest "Biðja um brú…"> +<!ENTITY torPreferences.bridgeEnterKnown "Settu inn vistfang brúar sem þú þekkir nú þegar"> +<!ENTITY torPreferences.bridgeAddManually "Bæta handvirkt við brú…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Nánar"> +<!ENTITY torPreferences.advancedDescription "Stilltu hvernig Tor-vafrinn tengist við internetið"> +<!ENTITY torPreferences.advancedButton "Stillingar…"> +<!ENTITY torPreferences.viewTorLogs "Skoða atvikaskrár Tor"> +<!ENTITY torPreferences.viewLogs "Skoða atvikaskrár…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Fjarlægja allar brýrnar?"> +<!ENTITY torPreferences.removeBridgesWarning "Þessa aðgerð er ekki hægt að afturkalla."> +<!ENTITY torPreferences.cancel "Hætta við"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Skannaðu QR-kóðann"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Innbyggðar brýr"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor-vafrinn kemur með sérstakar tegundir brúa sem kallast 'Pluggable Transport' tengileiðir”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 er tegund af innbyggðum brúm sem láta umferð um Tor líta út sem tilviljanakennda. Þær eru mun ólíklegri til að verða hindraðar heldur en forverarnir, obfs3-brýr."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake er innbyggð brú sem kemst framhjá ritskoðun með því að beina umferðinni þinni í gegnum Snowflake-milliþjóna, sem reknir eru af sjálfboðaliðum."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "Meek-azure er innbyggð brú sem lætur líta út eins og þú sért að nota Microsoft vefsvæði fremur en Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Biðja um brú"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Tengist BridgeDB. Bíddu aðeins."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Leystu CAPTCHA-þrautina til að biðja um brú."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Þessi lausn er ekki rétt. Reyndu aftur."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Útvega brú"> +<!ENTITY torPreferences.provideBridgeHeader "Settu inn upplýsingar um brúna sem þú fékkst frá áreiðanlegum aðila"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Tengistillingar"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Stjórnaðu hvernig Tor-vafrinn tengist internetinu"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Gildi aðgreind með kommum"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor atvikaskrá (log)"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Ótengt"> +<!ENTITY torConnect.connectingConcise "Tengist…"> +<!ENTITY torConnect.tryingAgain "Prófa aftur…"> +<!ENTITY torConnect.noInternet "Tor-vafrinn náði ekki að tengjast internetinu"> +<!ENTITY torConnect.noInternetDescription "Þetta gæti frekar verið vandamál með tengingu fremur en að lokað sé á Tor. Athugaðu internettenginguna þína og stillingar á milliþjóni og eldvegg áður en þú reynir aftur."> +<!ENTITY torConnect.couldNotConnect "Tor-vafrinn náði ekki að tengjast Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "stillt tenginguna þína"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Ef lokað er á Tor þar sem þú ert, gæti hjálpað að prófa að nota brú. Tengiaðstoðin getur valið eina slíka fyrir þig út frá staðsetningunni þinni, eða að þú getur í staðinn #1 handvirkt."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Prófa brú…"> +<!ENTITY torConnect.tryingBridgeAgain "Prófa einu sinni í viðbót…"> +<!ENTITY torConnect.errorLocation "Tor-vafrinn náði ekki að staðsetja þig"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Eru þessar staðsetningarstillingar réttar?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor-vafrinn náði enn ekki að tengjast við Tor. Athugaðu vandlega stillingar á staðsetningu og reyndu aftur, eða farðu í að #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor-vafrinn náði enn ekki að tengjast"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Tengiaðstoð"> +<!ENTITY torConnect.breadcrumbLocation "Staðsetningarstillingar"> +<!ENTITY torConnect.breadcrumbTryBridge "Prófa brú"> +<!ENTITY torConnect.automatic "Sjálfvirkt"> +<!ENTITY torConnect.selectCountryRegion "Veldu land eða svæði"> +<!ENTITY torConnect.frequentLocations "Oft notaðar staðsetningar"> +<!ENTITY torConnect.otherLocations "Aðrar staðsetningar"> +<!ENTITY torConnect.restartTorBrowser "Endurræsa Tor-vafrann"> +<!ENTITY torConnect.configureConnection "Stilla tengingu…"> +<!ENTITY torConnect.viewLog "Skoða atvikaskrár"> +<!ENTITY torConnect.tryAgain "Reyndu aftur"> +<!ENTITY torConnect.offline "Ekki næst í internetið"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor-vafranum mistókst að koma á tengingu við Tor-netið"> +<!ENTITY torConnect.yourLocation "Staðsetning þín"> +<!ENTITY torConnect.tryBridge "Prófa brú"> +<!ENTITY torConnect.autoBootstrappingFailed "Sjálfvirk stilling mistókst"> +<!ENTITY torConnect.autoBootstrappingFailed "Sjálfvirk stilling mistókst"> +<!ENTITY torConnect.cannotDetermineCountry "Tókst ekki að ákvarða land notandans"> +<!ENTITY torConnect.noSettingsForCountry "Engar stillingar fáanlegar fyrir staðsetninguna þína"> diff --git a/toolkit/torbutton/chrome/locale/is/onboarding.properties b/toolkit/torbutton/chrome/locale/is/onboarding.properties new file mode 100644 index 000000000000..0f53a0354321 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Ertu nýgræðingur í %S?\nKíkjum á þetta. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S er alveg nýr\n Kíktu á hvað hann getur gert! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Loka +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Hafna +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Lokið diff --git a/toolkit/torbutton/chrome/locale/is/torbutton.dtd b/toolkit/torbutton/chrome/locale/is/torbutton.dtd new file mode 100644 index 000000000000..ee5d4585029a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nýtt auðkenni"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Ný Tor-rás fyrir þetta vefsvæði"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Netkerfisstillingar Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Athugaðu með uppfærslur Tor-vafra..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Varnir gegn vefkökum..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Smelltu til að kveikja á Tor-hnapp"> +<!ENTITY torbutton.prefs.security_settings "Öryggisstillingar Tor-vafrans"> +<!ENTITY torbutton.cookiedialog.title "Sýsla með varnir gegn vefkökum"> +<!ENTITY torbutton.cookiedialog.lockCol "Varið"> +<!ENTITY torbutton.cookiedialog.domainCol "Hýsilvél"> +<!ENTITY torbutton.cookiedialog.nameCol "Heiti"> +<!ENTITY torbutton.cookiedialog.pathCol "Slóð"> +<!ENTITY torbutton.cookiedialog.protectCookie "Vernda vefköku"> +<!ENTITY torbutton.cookiedialog.removeCookie "Fjarlægja vefköku"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Afvernda vefköku"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Fjarlægja allar aðrar en verndaðar"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Vernda nýjar vefkökur"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Ekki vernda nýjar vefkökur"> +<!ENTITY torbutton.prefs.sec_caption "Öryggisstig"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Öryggisstillingasleðinn getur gert óvirka ýmsa þá eiginleika vafrans sem gætu gert vafrann viðkvæmari fyrir árásum hakkara."> +<!ENTITY torbutton.prefs.sec_standard_label "Staðlað"> +<!ENTITY torbutton.prefs.sec_standard_description "Allir eiginleikar Tor-vafrans og vefsvæðisins eru virkjaðir."> +<!ENTITY torbutton.prefs.sec_safer_label "Öruggara"> +<!ENTITY torbutton.prefs.sec_safer_description "Gerir óvirka ýmsa eiginleika vefsvæða sem oft eru hættulegir, en veldur því að sum vefsvæði hætta að virka eins og þau eiga að gera."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Með öruggari stillingum:"> +<!ENTITY torbutton.prefs.sec_safest_label "Öruggast"> +<!ENTITY torbutton.prefs.sec_safest_description "Leyfir aðeins þá eiginleika vefsvæða sem krafist er fyrir beinan lestur (static sites) og grunnþjónustur. Þessar breytingar hafa áhrif á myndir, margmiðlunargögn og skriftur."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Með öruggustu stillingum:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Fræðast frekar"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript er óvirkt á öllum ekki-HTTPS vefjum."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript er sjálfgefið óvirkt á öllum vefsvæðum."> +<!ENTITY torbutton.prefs.sec_limit_typography "Sumt letur og stærðfræðitákn eru óvirk."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Sumt letur, táknmyndir, myndir og stærðfræðitákn eru óvirk."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Hljóð og myndskeið (HTML5-gagnamiðla) ásamt WebGL þarf að smella á til að spila."> +<!ENTITY torbutton.prefs.sec_custom_warning "Sérsniðið"> +<!ENTITY torbutton.prefs.sec_overview "Gera ýmsa eiginleika vefsíðna óvirka, sem hægt væri að nota til árása á öryggi þitt og gagnaleynd."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Öryggisstig: Staðlað"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Öryggisstig: Öruggara"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Öryggisstig: Öruggast"> +<!ENTITY torbutton.prefs.sec_custom_summary "Sérsniðnar kjörstillingar vafrans þíns valda mjög óvenjulegum öryggisstillingum. Til að uppfylla sem best öryggi og gagnaleynd, mælum við með því að þú veljir eitt af sjálfgefnum öryggisstigum."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Frumstilla á sjálfgefið"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Ítarlegar öryggisstillingar…"> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Tor-rás"> +<!ENTITY torbutton.circuit_display.new_circuit "Ný rás fyrir þetta vefsvæði"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Opna glugga fyrir auðkenningu biðlaraforrits fyrir onion-þjónustu"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Mundu þennan lykil"> diff --git a/toolkit/torbutton/chrome/locale/is/torbutton.properties b/toolkit/torbutton/chrome/locale/is/torbutton.properties new file mode 100644 index 000000000000..e14bdf06ff0d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = Óþekkt IP-tala +torbutton.circuit_display.onion_site = Onion-vefsvæði +torbutton.circuit_display.this_browser = Þessi vafri +torbutton.circuit_display.relay = Relay +torbutton.circuit_display.tor_bridge = Brú +torbutton.circuit_display.unknown_country = Óþekkt land +torbutton.circuit_display.guard = Vörður (guard) +torbutton.circuit_display.guard_note = Varðarhnúturinn [Guard] breytist ekki endilega. +torbutton.circuit_display.learn_more = Læra meira +torbutton.circuit_display.click_to_copy = Smelltu til að afrita +torbutton.circuit_display.copied = Afritað! +torbutton.content_sizer.margin_tooltip = Tor-vafrinn setur inn þessa spássíu til að gera hæð og breidd gluggans minna einkennandi, og þar með að gera erfiðara að fylgjast með þér á netinu. +extensions.torbutton@torproject.org.description = Torbutton útbýr hnapp til uppsetningar á stillingum Tor svo að einfalt og hraðvirkt sé að hreinsa út öll gögn vegna einkavafurs. +torbutton.popup.external.title = Sækja utanaðkomandi skráartegund? +torbutton.popup.external.app = Tor-vafrinn getur ekki birt þessa skrá. Þú verður að opna hana með öðru forriti.\n\n +torbutton.popup.external.note = Sumar skráartegundir geta látið forrit tengjast netinu án þess að fara í gegnum Tor. +torbutton.popup.external.suggest = Til að vera örugg(ur), ættirðu einungis að opna sóttar skrár þegar netið er aftengt, eða með því að nota Tor Live CD keyrsludisk eins og Tails.\n +torbutton.popup.launch = Ná í skrá +torbutton.popup.cancel = Hætta við +torbutton.popup.dontask = Hlaða sjálfkrafa inn skrám héðan í frá +torbutton.popup.no_newnym = Torbutton getur ekki gefið þér nýtt öruggt auðkenni. Hann er ekki með aðgang að Tor-stýrigáttinni.\n\nErt þú að keyra Tor-vafravöndulinn (browser bundle)? +torbutton.security_settings.menu.title = Öryggisstillingar +torbutton.title.prompt_torbrowser = Mikilvægar upplýsingar um Tor-hnappinn +torbutton.popup.prompt_torbrowser = Torbutton-hnappurinn virkar núna öðruvísi en áður: ekki er lengur hægt að slökkva á honum.\n\nVið gerðum þessa breytingu því það er ekki öruggt að nota Torbutton í vafra sem einnig er notaður fyrir vafur án Tor. Það voru allt of margar veilur sem ekki var hægt að laga á neinn annan hátt.\n\nEf þig langar til að halda áfram að nota Firefox eins og venjulega, þá ættirðu að henda Torbutton út og ná þér frekar í Tor-vafravöndulinn (browser bundle). Gagnave [...] +torbutton.popup.short_torbrowser = Mikilvægar upplýsingar um Tor-hnappinn!\n\nTor-hnappurinn er núna alltaf virkur.\n\nSmelltu á Tor-hnappinn til að sjá nánar. + +torbutton.popup.confirm_plugins = Viðbætur eins og til dæmis Flash geta skaðað friðhelgi þína og gagnaleynd.\n\nÞær geta einnig farið framhjá Tor til að gefa upp staðsetningu þína og IP-vistfang.\n\nErtu viss um að þú viljir virkja viðbætur?\n\n +torbutton.popup.never_ask_again = Ekki spyrja mig aftur +torbutton.popup.confirm_newnym = Tor-vafrinn mun núna loka öllum flipum og gluggum. Allar setur á vefsvæðum munu tapast.\n\nÁ að endurræsa Tor-vafrann til að núllstilla auðkennið þitt?\n\n + +torbutton.maximize_warning = Með því að stækka Tor-vafragluggann gerir þú vefsvæðum mögulega kleift að mæla stærð skjásins þíns, sem aftur gerir kleift að einkenna þig. Við mælum með því að þú hafir glugga Tor-vafrans í upprunalegri sjálfgefinni stærð. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Þetta vefsvæði (%S) reyndi að nálgast gögn um HTML5 myndflötinn, gögn sem hægt er að nota til að auðkenna þig.\n\nÆtti Tor-vafrinn að leyfa þessu vefsvæði að fá gögn um HTML5 myndflöt? +canvas.notNow=Ekki núna +canvas.notNowAccessKey=N +canvas.allow=Leyfa í framtíðinni +canvas.allowAccessKey=A +canvas.never=Aldrei fyrir þetta vefsvæði (mælt með þessu) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Vandamál við %S snið +profileReadOnly=Þú getur ekki keyrt %S af skrifvörðu kerfi. Afritaðu %S á einhvern annan stað áður en þú reynir að nota það. +profileReadOnlyMac=Þú getur ekki keyrt %S af skrifvörðu kerfi. Afritaðu %S á skjáborðið eða í forritamöppu áður en þú reynir að nota það. +profileAccessDenied=%S er ekki með heimildir til að fara inn í sniðið. Lagaðu aðgangsheimildir kerfisins og reyndu svo aftur. +profileMigrationFailed=Yfirfærsla á fyrirliggjandi %S sniðinu þínu mistókst.\nNýjar stillingar verða notaðar. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Downloading %S update + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Dulrituð tenging (Onion-þjónusta, %1$S, %2$S bita dulritunarlyklar, %3$S) +pageInfo_OnionEncryption=Dulrituð tenging (Onion-þjónusta) +pageInfo_OnionName=Heiti onion-svæðis: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Fræðast frekar +onionServices.errorPage.browser=Vafri +onionServices.errorPage.network=Net +onionServices.errorPage.onionSite=Onion-vefsvæði +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.descNotFound.header=Onion-vefsvæði fannst ekki +onionServices.descNotFound=Líklegasta skýringin er að onion-svæðið sé aftengt við netið. Hafðu samband við kerfisstjóra onion-svæðisins. +onionServices.descNotFound.longDescription=Nánar: %S — Umbeðinn lýsistrengur onion-þjónustu fannst ekki í tætigildahringnum og því er þjónustan ekki aðgengileg fyrir biðlaraforritið. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.descInvalid.header=Ekki tókst að tengjast onion-vefsvæði +onionServices.descInvalid=Ekki er hægt að tengjast onion-svæðinu vegna innri villu. +onionServices.descInvalid.longDescription=Nánar: %S — Umbeðinn lýsistreng onion-þjónustu er ekki hægt að túlka eða að sannprófun undirritunar mistókst. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.introFailed.header=Onion-vefsvæði hefur aftengst +onionServices.introFailed=Líklegasta skýringin er að onion-svæðið sé aftengt við netið. Hafðu samband við kerfisstjóra onion-svæðisins. +onionServices.introFailed.longDescription=Nánar: %S — Kynning brást, sem þýðir að lýsistrengurinn fannst en þjónustan er ekki lengur tengd við kynningarpunktinn (introduction point). Það er því líklegt að þjónustan hafi breytt lýsistreng sínum eða að hún sé ekki í gangi. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.rendezvousFailed.header=Tókst ekki að tengjast onion-vef +onionServices.rendezvousFailed=Onion-svæðið er upptekið eða Tor-netið yfirhlaðið. Reyndu aftur síðar. +onionServices.rendezvousFailed.longDescription=Nánar: %S — Biðlaraforritinu mistókst að framkvæma 'rendezvous'-handaband við þjónustuna, sem þýðir að biðlaranum tókst ekki að ljúka við gerð tengingarinnar. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Auðkenning er nauðsynleg +onionServices.clientAuthMissing.header=Onion-vefur krefst auðkenningar +onionServices.clientAuthMissing=Aðgangur að onion-svæðinu krefst lykilorðs en ekkert var gefið upp. +onionServices.clientAuthMissing.longDescription=Nánar: %S — Biðlaraforritið náði í umbeðinn lýsistreng onion-þjónustu en gat ekki afkóðað efni hans þar sem upplýsingar um auðkenningu biðlarans vantar. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Auðkenning mistókst +onionServices.clientAuthIncorrect.header=Auðkenning á onion-vef mistókst +onionServices.clientAuthIncorrect=Lykillinn sem þú gafst upp er rangur eða hefur verið afturkallaður. Hafðu samband við kerfisstjóra onion-svæðisins. +onionServices.clientAuthIncorrect.longDescription=Nánar: %S — Biðlaraforritið gat náð í umbeðinn lýsistreng onion-þjónustu en gat ekki afkóðað efni hans með uppgefnum upplýsingum um auðkenningu biðlarans. Þetta gæti þýtt að aðgangsheimildir hafi verið afturkallaðar. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.badAddress.header=Ógilt vistfang onion-vefsvæðis +onionServices.badAddress=Uppgefið vistfang onion-svæðisins er ógilt. Gakktu úr skugga um að þú hafir sett það rétt inn. +onionServices.badAddress.longDescription=Nánar: %S — Uppgefið .onion vistfang vefsvæðisins er ógilt. Þessi villa kemur upp vegna einnar af eftirfarandi ástæðum: gátsumma vistfangsins samsvarar ekki, dreifilykillinn ed25519 er ógildur eða að dulkóðunin er ógild. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Vandamál við að hlaða inn onion-vef +onionServices.introTimedOut.header=Gerð rásar fyrir onion-svæði féll á tíma +onionServices.introTimedOut=Mistókst að tengjast onion-svæðinu, mögulega vegna lélegrar nettengingar. +onionServices.introTimedOut.longDescription=Nánar: %S — Tengingin við umbeðna onion-þjónustu féll á tímamörkum á meðan reynt var að útbúa rendezvous-rásina. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S krefst þess að þú auðkennir þig. +onionServices.authPrompt.keyPlaceholder=Settu inn einkalykilinn þinn fyrir þessa onion-þjónustu +onionServices.authPrompt.done=Lokið +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Settu inn gildan lykil (52 base32 stafir eða 44 base64 stafir) +onionServices.authPrompt.failedToSetKey=Tekst ekki að setja upp Tor með lyklinum þínum. +onionServices.authPreferences.header=Auðkenning á onion-þjónustur +onionServices.authPreferences.overview=Sumar onion-þjónustur krefjast þess að þú auðkennir þig með lykli (eins konar lykilorð) áður en þú færð aðgang að þeim. +onionServices.authPreferences.savedKeys=Vistaðir lyklar… +onionServices.authPreferences.dialogTitle=Lyklar fyrir onion-þjónustur +onionServices.authPreferences.dialogIntro=Lyklar fyrir eftirfarandi onion-vefsvæði eru geymdir á tölvunni þinni +onionServices.authPreferences.onionSite=Onion-vefsvæði +onionServices.authPreferences.onionKey=Lykill +onionServices.authPreferences.remove=Fjarlægja +onionServices.authPreferences.removeAll=Fjarlægja allt +onionServices.authPreferences.failedToGetKeys=Tókst ekki að ná í lykla frá Tor +onionServices.authPreferences.failedToRemoveKey=Tókst ekki að fjarlægja lykil +onionServices.v2Deprecated.pageTitle=Onion-vefsvæði af útgáfu 2 verða úrelt +onionServices.v2Deprecated.header=Onion-vefsvæði af útgáfu 2 verða úrelt innan skamms +onionServices.v2Deprecated=Þetta onion-vefsvæði verður ekki tiltækt á næstunni. Hafðu samband við kerfisstjóra þess og hvettu þá til að uppfæra. +onionServices.v2Deprecated.longDescription=Tor hætti stuðningi við onion-þjónustur af útgáfu 2 í byrjun júlí 2021, og verður þetta onion-vefsvæði ekki lengur tiltækt á þessu vistfangi. Ef þú ert kerfisstjóri vefsvæðisins, ættirðu sem fyrst að uppfæra onion-þjónustuna í útgáfu 3. +onionServices.v2Deprecated.tryAgain=Náði því +onionServices.v2Deprecated.tooltip=Þetta onion-vefsvæði verður ekki tiltækt á næstunni + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Alltaf gefa onion-vefjum forgang +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Ekki núna +onionLocation.notNowAccessKey=n +onionLocation.description=Þar er til önnur og öruggari útgáfa af þessu vefsvæði sem aðgengileg er á Tor-netinu í gegnum onion-þjónustur. Onion-þjónustur nýtast þeim sem gefa út vefsíður, jafnt sem þeim sem þær skoða, að komast framhjá ritskoðun og eftirliti. +onionLocation.tryThis=Prófaðu onion-þjónustur +onionLocation.onionAvailable=.onion er tiltækt +onionLocation.learnMore=Fræðast frekar… +onionLocation.always=Alltaf +onionLocation.askEverytime=Spyrja í hvert skipti +onionLocation.prioritizeOnionsDescription=Gefa .onion-vefjum forgang þegar þeir eru þekktir. +onionLocation.onionServicesTitle=Onion-þjónustur + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Rafmyntavistfang (%S) hefur verið afritað af óöruggu vefsvæði. Mögulega hefur því verið breytt. +cryptoSafetyPrompt.whatCanHeading=Hvað geturðu gert í því? +cryptoSafetyPrompt.whatCanBody=Þú getur reynt að endurtengjast með nýrri rás tl að koma á öruggu sambandi, eða tekið áhættuna og hunsað þessa aðvörun. +cryptoSafetyPrompt.learnMore=Fræðast frekar +cryptoSafetyPrompt.primaryAction=Endurnýja flipa með nýrri rás +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Hunsa aðvörun +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Halda varlega áfram +rulesets.warningDescription=Ef bætt er við reglum eða þeim breytt, gefast fleiri leiðir fyrir óþokka að ná völdum yfir vafranum þínum. Ekki halda áfram nema að þú vitir hvað þú sért að gera! +rulesets.warningEnable=Aðvara mig þegar ég reyni að eiga við þessar kjörstillingar +rulesets.warningButton=Samþykkja áhættuna og halda áfram +# Ruleset list +rulesets.rulesets=Reglusett +rulesets.noRulesets=Engin reglusett fundust +rulesets.noRulesetsDescr=Þegar þú vistar reglusett í Tor-vafranum, mun það birtast hér. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Síðast uppfært %S +rulesets.neverUpdated=Aldrei uppfært, eða síðasta uppfærsla mistókst +rulesets.enabled=Virkt +rulesets.disabled=Óvirkt +# Ruleset details/edit ruleset +rulesets.edit=Breyta +rulesets.name=Nafn +rulesets.jwk=JWK +rulesets.pathPrefix=Forskeyti slóðar +rulesets.scope=Gildissvið +rulesets.enable=Virkja þetta reglusett +rulesets.checkUpdates=Athuga með uppfærslur +rulesets.jwkPlaceholder=Lykillinn sem notaður er til að undirrita þetta reglusett á JWK (JSON Web Key) sniði +rulesets.jwkInvalid=Ekki var hægt að þátta þetta JWK, eða að þetta er ekki gildur lykill +rulesets.pathPrefixPlaceholder=Forskeyti slóðar sem inniheldur skrárnar sem reglusettið þarfnast +rulesets.pathPrefixInvalid=Forskeyti slóðarinnar er ekki gild HTTP(S) slóð +rulesets.scopePlaceholder=Regluleg segð fyrir gildissvið reglnanna +rulesets.scopeInvalid=Ekki var hægt að þátta gildissviðið sem reglulega segð +rulesets.save=Vista +rulesets.cancel=Hætta við diff --git a/toolkit/torbutton/chrome/locale/is/torlauncher.properties b/toolkit/torbutton/chrome/locale/is/torlauncher.properties new file mode 100644 index 000000000000..657e78447600 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/is/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor-ræsir + +torlauncher.tor_exited_during_startup=Tor hætti óvænt í ræsingu. Þetta gæti verið villa í torrc-skránni, í sjálfum Tor, öðru forriti á kerfinu þínu eða galli í vélbúnaði. Þar til þú endurræsir Tor mun Tor-vafrinn ekki geta tengst neinum vefsvæðum. Ef undirliggjandi vandamál er ekki leyst og Tor endurræst, þá mun Tor-vafrinn ekki fara í gang. +torlauncher.tor_exited=Tor hætti óvænt. Þetta gæti verið villa í sjálfum Tor, öðru forriti á kerfinu þínu eða galli í vélbúnaði. Þar til þú endurræsir Tor mun Tor-vafrinn ekki geta tengst neinum vefsvæðum. Ef vandamálið er viðvarandi, skaltu senda atvikaskrá Tor (log) til aðstoðarteymisins. +torlauncher.tor_exited2=Endurræsing Tor mun ekki loka flipum vafrans. +torlauncher.tor_controlconn_failed=Gat ekki tengst stýrigátt Tor. +torlauncher.tor_failed_to_start=Tor ræstist ekki. +torlauncher.tor_control_failed=Mistókst að ná stjórn yfir Tor. +torlauncher.tor_bootstrap_failed=Tor mistókst að koma á Tor-nettengingu. +torlauncher.tor_bootstrap_failed_details=%1$S mistókst (%2$S). + +torlauncher.unable_to_start_tor=Tókst ekki að ræsa Tor.\n\n%S +torlauncher.tor_missing=Vantar Tor-keyrsluskrána. +torlauncher.torrc_missing=Skrána torrc vantar og var ekki hægt að útbúa hana. +torlauncher.datadir_missing=Tor-gagnamappan er ekki til og var ekki hægt að útbúa hana. +torlauncher.onionauthdir_missing=Tor-auðkenningarmappan er ekki til og var ekki hægt að útbúa hana. +torlauncher.password_hash_missing=Mistókst að fá hakkað lykilorð. + +torlauncher.failed_to_get_settings=Tókst ekki að nálgast stillingar fyrir Tor.\n\n%S +torlauncher.failed_to_save_settings=Tókst ekki að vista stillingar fyrir Tor.\n\n%S +torlauncher.ensure_tor_is_running=Gakktu úr skugga um að Tor sé keyrandi. + +torlauncher.error_proxy_addr_missing=Þú þarft að tilgreina bæði IP-vistfang eða vélarheiti og númer gáttar til að setja Tor í að nota milliþjón (proxy) fyrir aðgang að internetinu. +torlauncher.error_proxy_type_missing=Þú verður að velja tegund milliþjóns. +torlauncher.error_bridges_missing=Þú verður að tilgreina eina eða fleiri brýr. +torlauncher.error_default_bridges_type_missing=Þú verður að tilgreina gerð tengileiðar fyrir þessar brýr. +torlauncher.error_bridgedb_bridges_missing=Biðja um brú. +torlauncher.error_bridge_bad_default_type=Engar meðfylgjandi brýr sem eru með tengileiðina %S eru til taks. Lagaðu stillingarnar þínar. + +torlauncher.bridge_suffix.meek-amazon=(virkar í Kína) +torlauncher.bridge_suffix.meek-azure=(virkar í Kína) + +torlauncher.request_a_bridge=Biðja um brú… +torlauncher.request_a_new_bridge=Biðja um nýja brú… +torlauncher.contacting_bridgedb=Tengist BridgeDB. Bíddu aðeins. +torlauncher.captcha_prompt=Leystu CAPTCHA-þrautina til að biðja um brú. +torlauncher.bad_captcha_solution=Þessi lausn er ekki rétt. Reyndu aftur. +torlauncher.unable_to_get_bridge=Tókst ekki að fá brú frá BridgeDB.\n\n%S +torlauncher.no_meek=Þessi vafri er ekki stilltur til að nota 'meek', sem er nauðsynlegt til að geta beðið um brýr. +torlauncher.no_bridges_available=Engar brýr eru tiltækar í augnablikinu. Því miður. + +torlauncher.connect=Tengjast +torlauncher.restart_tor=Endurræsa Tor +torlauncher.quit=Hætta +torlauncher.quit_win=Fara út +torlauncher.done=Búið + +torlauncher.forAssistance=Til að fá hjálp, hafðu samband við %S +torlauncher.forAssistance2=Til að fá hjálp, heimsæktu %S + +torlauncher.copiedNLogMessages=Afritun lokið. %S færslur úr Tor-atvikaskrá eru tilbúnar til að líma inn í textaritil eða tölvupóst. + +torlauncher.bootstrapStatus.starting=Ræsi +torlauncher.bootstrapStatus.conn_pt=Tengist við brú +torlauncher.bootstrapStatus.conn_done_pt=Tengt við brú +torlauncher.bootstrapStatus.conn_proxy=Tengist við milliþjón +torlauncher.bootstrapStatus.conn_done_proxy=Tengt við milliþjón +torlauncher.bootstrapStatus.conn=Tengist við Tor-endurvarpa +torlauncher.bootstrapStatus.conn_done=Tengt við Tor-endurvarpa +torlauncher.bootstrapStatus.handshake=Að koma á tengingu við Tor-endurvarpa +torlauncher.bootstrapStatus.handshake_done=Lauk því að koma á tengingu við Tor-endurvarpa +torlauncher.bootstrapStatus.onehop_create=Kem á tengingu við dulritaða yfirlitsskrá +torlauncher.bootstrapStatus.requesting_status=Næ í stöðu netkerfis +torlauncher.bootstrapStatus.loading_status=Hleð inn stöðu netkerfis +torlauncher.bootstrapStatus.loading_keys=Hleð inn skilríkjum vottunarstöðvar +torlauncher.bootstrapStatus.requesting_descriptors=Bið um upplýsingar endurvarpa +torlauncher.bootstrapStatus.loading_descriptors=Hleð inn upplýsingum endurvarpa +torlauncher.bootstrapStatus.enough_dirinfo=Lauk við að hlaða inn upplýsingum endurvarpa +torlauncher.bootstrapStatus.ap_conn_pt=Byggi rásir: Tengist við brú +torlauncher.bootstrapStatus.ap_conn_done_pt=Byggi rásir: Tengt við brú +torlauncher.bootstrapStatus.ap_conn_proxy=Byggi rásir: Tengist við milliþjón +torlauncher.bootstrapStatus.ap_conn_done_proxy=Byggi rásir: Tengt við milliþjón +torlauncher.bootstrapStatus.ap_conn=Byggi rásir: Tengist við Tor-endurvarpa +torlauncher.bootstrapStatus.ap_conn_done=Byggi rásir: Tengt við Tor-endurvarpa +torlauncher.bootstrapStatus.ap_handshake=Byggi rásir: Að koma á tengingu við Tor-endurvarpa +torlauncher.bootstrapStatus.ap_handshake_done=Byggi rásir: Lauk því að koma á tengingu við Tor-endurvarpa +torlauncher.bootstrapStatus.circuit_create=Byggi rásir: Kem á Tor-rás +torlauncher.bootstrapStatus.done=Tengdur við Tor-netið! + +torlauncher.bootstrapWarning.done=búið +torlauncher.bootstrapWarning.connectrefused=tengingu hafnað +torlauncher.bootstrapWarning.misc=ýmislegt +torlauncher.bootstrapWarning.resourcelimit=ekki nægileg tilföng +torlauncher.bootstrapWarning.identity=auðkenni samsvara ekki +torlauncher.bootstrapWarning.timeout=tenging féll á tíma +torlauncher.bootstrapWarning.noroute=engin leið til hýsils +torlauncher.bootstrapWarning.ioerror=les/skrifvilla +torlauncher.bootstrapWarning.pt_missing=vantar 'pluggable transport' tengileiðir + +torlauncher.nsresult.NS_ERROR_NET_RESET=Missti tengingu við þjóninn. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Tókst ekki að tengjast þjóninum. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Tókst ekki að tengjast milliþjóninum. + +torlauncher.copiedNLogMessagesShort=Afritaði %S atvikaskrár diff --git a/toolkit/torbutton/chrome/locale/it/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/it/aboutDialog.dtd new file mode 100644 index 000000000000..d7425ce731ee --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; è sviluppato da"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "il &vendorShortName;"> +<!ENTITY project.end ", un lavoro no profit per difendere la tua privacy e la tua libertà online."> + +<!ENTITY help.start "Vuoi aiutare?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Dona"> +<!ENTITY help.or "o"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "partecipa"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Domande?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Aiuta la rete Tor a crescere!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informazioni sulla licenza"> +<!ENTITY tor.TrademarkStatement "'Tor' e 'Onion Logo' sono marchi registrati su Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/it/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/it/aboutTBUpdate.dtd new file mode 100644 index 000000000000..d179811ba064 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Cronologia Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Il Tor Browser è stato aggiornato."> +<!ENTITY aboutTBUpdate.linkPrefix "Per maggiori informazioni su questa versione,"> +<!ENTITY aboutTBUpdate.linkLabel "visita il nostro sito web"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versione"> +<!ENTITY aboutTBUpdate.releaseDate "Data di uscita"> +<!ENTITY aboutTBUpdate.releaseNotes "Note di rilascio"> diff --git a/toolkit/torbutton/chrome/locale/it/aboutTor.dtd b/toolkit/torbutton/chrome/locale/it/aboutTor.dtd new file mode 100644 index 000000000000..ce41abe61fae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Info su Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Vedi il Changelog"> + +<!ENTITY aboutTor.ready.label "Naviga. Privatamente."> +<!ENTITY aboutTor.ready2.label "Sei pronto per l'esperienza di navigazione più privata al mondo."> +<!ENTITY aboutTor.failure.label "Qualcosa è Andato Storto!"> +<!ENTITY aboutTor.failure2.label "Tor non sta funzionando su questo browser."> + +<!ENTITY aboutTor.search.label "Cerca con DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Domande?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Controlla il Manuale del Browser Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manuale Browser Tor"> + +<!ENTITY aboutTor.tor_mission.label "Il Tor Project è una organizzazione non-profit allo scopo di avanzare i diritti e le libertà umane creando e distribuendo software libero con tecnologie per la privacy e l'anonimato, supportando la loro disponibilità e utilizzo senza restrizioni e avanzandone la loro comprensione scientifica e popolare."> +<!ENTITY aboutTor.getInvolved.label "Unisciti a noi »"> + +<!ENTITY aboutTor.newsletter.tagline "Ottieni le ultime info da Tor direttamente nella tua casella di posta elettronica."> +<!ENTITY aboutTor.newsletter.link_text "Registrati alle Tor News."> +<!ENTITY aboutTor.donationBanner.freeToUse "L'utilizzo di Tor è gratuito grazie alle donazioni fatte da persone come te."> +<!ENTITY aboutTor.donationBanner.buttonA "Dona Adesso"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Accuratamente."> +<!ENTITY aboutTor.alpha.ready2.label "Sei pronto per testare l'esperienza di navigazione più privata al mondo."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha è una versione instabile di Tor Browser che puoi usare per provare nuove funzioni, testare le loro prestazioni e fornire feedback prima della pubblicazione."> +<!ENTITY aboutTor.alpha.bannerLink "Segnala un errore nel forum di Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Accuratamente."> +<!ENTITY aboutTor.nightly.ready2.label "Sei pronto per testare l'esperienza di navigazione più privata al mondo."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly è una versione instabile di Tor Browser che puoi usare per provare nuove funzioni, testare le loro prestazioni e fornire feedback prima della pubblicazione."> +<!ENTITY aboutTor.nightly.bannerLink "Segnala un errore nel forum di Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ALIMENTATO DALLA PRIVACY"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTENZA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CAMBIAMENTO"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "LIBERTÀ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONA ORA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "La tua donazione sarà raddoppiata da Friends of Tor, fino a $100.000."> diff --git a/toolkit/torbutton/chrome/locale/it/brand.dtd b/toolkit/torbutton/chrome/locale/it/brand.dtd new file mode 100644 index 000000000000..11aa990b5275 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' e 'Onion Logo' sono marchi registrati di Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Clicca per caricare i plugin di sistema installati"> +<!ENTITY plugins.installed.enable "Abilita i plugin"> +<!ENTITY plugins.installed.disable "Disabilita i plugin"> +<!ENTITY plugins.installed.disable.tip "Clicca per evitare di caricare i plugin di sistema"> diff --git a/toolkit/torbutton/chrome/locale/it/brand.properties b/toolkit/torbutton/chrome/locale/it/brand.properties new file mode 100644 index 000000000000..a58e5e6b8439 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, una home page veloce con ricerca integrata +homePageImport=Importa la tua home page da %S + +homePageMigrationPageTitle=Selezione Home Page +homePageMigrationDescription=Seleziona la home page che desideri usare: + +syncBrandShortName=Sync diff --git a/toolkit/torbutton/chrome/locale/it/branding/brand.ftl b/toolkit/torbutton/chrome/locale/it/branding/brand.ftl new file mode 100644 index 000000000000..8336788f6934 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' e 'Onion Logo' sono marchi registrati di Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/it/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/it/browserOnboarding.properties new file mode 100644 index 000000000000..23b61f195d62 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Benvenuto +onboarding.tour-tor-welcome.title=Sei pronto. +onboarding.tour-tor-welcome.description=Tor Browser offre il più alto standard di privacy e sicurezza nella navigazione del web. Sei ora protetto dal tracciamento, dalla sorveglianza e dalla censura. Questa rapida panoramica ti mostrerà come. +onboarding.tour-tor-welcome.next-button=Vai in Privacy + +onboarding.tour-tor-privacy=Privacy +onboarding.tour-tor-privacy.title=Affronta tracciatori e ficcanaso. +onboarding.tour-tor-privacy.description=Tor Browser isola i cookie ed elimina la cronologia del browser dopo la tua sessione. Queste modifiche assicurano che la tua privacy e sicurezza siano protette nel browser. Clicca ‘Rete Tor’ per sapere come ti proteggiamo a livello di rete. +onboarding.tour-tor-privacy.button=Vai alla rete Tor + +onboarding.tour-tor-network=Rete Tor +onboarding.tour-tor-network.title=Percorri una rete decentralizzata. +onboarding.tour-tor-network.description=Tor Browser ti connette alla rete Tor gestita da migliaia di volontari in tutto il mondo. Diversamente dalle VPN, non c'è nessun punto di fallimento o entità centralizzata di cui ti devi fidare per goderti internet privatamente. +onboarding.tour-tor-network.description-para2=NUOVO: Le impostazioni di rete Tor, inclusa la possibilità di chiedere un bridge nei luoghi dove Tor è bloccato, si trovano ora sotto Preferenze. +onboarding.tour-tor-network.action-button=Modifica le tue Impostazioni di Rete Tor. +onboarding.tour-tor-network.button=Visualizza il circuito + +onboarding.tour-tor-circuit-display=Visualizzazione circuito +onboarding.tour-tor-circuit-display.title=Vedi il tuo percorso. +onboarding.tour-tor-circuit-display.description=Per ogni dominio che visiti, il tuo traffico è inoltrato e criptato in un circuito attraverso tre relay Tor sparsi nel mondo. Nessun sito sa da dove ti stai connettendo. Puoi richiedere un nuovo circuito cliccando ‘Nuovo circuito per questo sito’ nella visualizzazione del circuito. +onboarding.tour-tor-circuit-display.button=Vedi il mio percorso +onboarding.tour-tor-circuit-display.next-button=Vai in Sicurezza + +onboarding.tour-tor-security=Sicurezza +onboarding.tour-tor-security.title=Scegli la tua esperienza. +onboarding.tour-tor-security.description=Ti forniamo anche impostazioni aggiuntive per aumentare la sicurezza del tuo browser. Le nostre impostazioni di sicurezza ti permettono di bloccare elementi che potrebbero essere utilizzati per attaccare il tuo computer. Clicca qui sotto per vedere cosa fanno le diverse opzioni. +onboarding.tour-tor-security.description-suffix=Nota: per impostazione predefinita, NoScript e HTTPS Everywhere non sono inclusi nella barra degli strumenti, ma è possibile personalizzare tale barra per aggiungerli. +onboarding.tour-tor-security-level.button=Vedi il tuo livello di sicurezza +onboarding.tour-tor-security-level.next-button=Vai in Consigli per l'esperienza + +onboarding.tour-tor-expect-differences=Consigli per l'esperienza +onboarding.tour-tor-expect-differences.title=Aspettati delle differenze. +onboarding.tour-tor-expect-differences.description=Con tutte le caratteristiche di sicurezza e privacy fornite da Tor, la tua esperienza di navigazione in internet può essere un po' diversa. Le cose possono essere un po' più lente e, a seconda del tuo livello di sicurezza, alcuni elementi potrebbero non funzionare o caricarsi. Potrebbe anche esserti chiesto di dimostrare di essere umano e non un robot. +onboarding.tour-tor-expect-differences.button=Vedi le FAQ +onboarding.tour-tor-expect-differences.next-button=Vai in Servizi Onion + +onboarding.tour-tor-onion-services=Servizi Onion +onboarding.tour-tor-onion-services.title=Sii super protetto. +onboarding.tour-tor-onion-services.description=I servizi onion sono siti che terminano con .onion che forniscono protezioni extra ad editori e visitatori, incluse ulteriori salvaguardie contro la censura. I servizi onion consentono a chiunque di fornire contenuti e servizi in forma anonima. Clicca qui sotto per visitare il sito onion di DuckDuckGo. +onboarding.tour-tor-onion-services.button=Visita una Cipolla +onboarding.tour-tor-onion-services.next-button=Fatto + +onboarding.overlay-icon-tooltip-updated2=Guarda cosa c'è di nuovo\nin %S +onboarding.tour-tor-update.prefix-new=Nuovo +onboarding.tour-tor-update.prefix-updated=Aggiornato + +onboarding.tour-tor-toolbar=Barra degli strumenti +onboarding.tour-tor-toolbar-update-9.0.title=Arrivederci Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=Vogliamo che la tua esperienza nell'utilizzo di Tor sia perfettamente integrata in Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Ecco perchè ora, invece di usare il bottone cipolla, puoi vedere il tuo circuito Tor attraverso [i] nella barra degli indirizzi e richiedere una nuova identità usando il bottone nella barra degli strumenti o nel menu [≡] . +onboarding.tour-tor-toolbar-update-9.0.button=Come Richiedere una Nuova Identità +onboarding.tour-tor-toolbar-update-9.0.next-button=Vai alla Rete Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Successivo +onboarding.tor-circuit-display.done=Fatto +onboarding.tor-circuit-display.one-of-three=1 di 3 +onboarding.tor-circuit-display.two-of-three=2 di 3 +onboarding.tor-circuit-display.three-of-three=3 di 3 + +onboarding.tor-circuit-display.intro.title=Come funzionano i circuiti? +onboarding.tor-circuit-display.intro.msg=I circuiti sono costituiti da relay assegnati casualmente, che sono computer di tutto il mondo configurati per inoltrare il traffico Tor. I circuiti consentono di navigare privatamente e di connettersi ai servizi onion. + +onboarding.tor-circuit-display.diagram.title=Visualizzazione circuito +onboarding.tor-circuit-display.diagram.msg=Questo diagramma mostra i relay che compongono il circuito di questo sito. Per evitare il collegamento di attività tra siti diversi, ogni sito web riceve un circuito diverso. + +onboarding.tor-circuit-display.new-circuit.title=Ti serve un nuovo circuito? +onboarding.tor-circuit-display.new-circuit.msg=Se non sei in grado di connetterti al sito che stai cercando di visitare o non si sta caricando correttamente, allora puoi usare questo pulsante per ricaricare il sito con un nuovo circuito. diff --git a/toolkit/torbutton/chrome/locale/it/network-settings.dtd b/toolkit/torbutton/chrome/locale/it/network-settings.dtd new file mode 100644 index 000000000000..acdba1cd3ca0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Impostazioni della Rete Tor"> +<!ENTITY torsettings.wizard.title.default "Connetti a Tor"> +<!ENTITY torsettings.wizard.title.configure "Impostazioni della Rete Tor"> +<!ENTITY torsettings.wizard.title.connecting "Connessione in corso"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Lingua per il Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Selezionare una lingua."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Clicca "Connetti" per connetterti a Tor"> +<!ENTITY torSettings.configurePrompt "Clicca "Configura" per regolare le impostazioni di rete se ti trovi in un Paese che censura Tor (come Egitto, Cina, Turchia) o se ti stai connettendo da una rete privata che richiede un proxy."> +<!ENTITY torSettings.configure "Configura"> +<!ENTITY torSettings.connect "Connetti"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "In attesa di avviare Tor..."> +<!ENTITY torsettings.restartTor "Riavvia Tor"> +<!ENTITY torsettings.reconfigTor "Riconfigura"> + +<!ENTITY torsettings.discardSettings.prompt "Tu hai configurato i bridge Tor o hai inserito le impostazioni per il proxy locale.  Per effettuare una connessione diretta alla rete Tor, queste impostazioni devono essere rimosse."> +<!ENTITY torsettings.discardSettings.proceed "Rimuovi Impostazioni e Connetti"> + +<!ENTITY torsettings.optional "Facoltativo"> + +<!ENTITY torsettings.useProxy.checkbox "Uso un proxy per connettermi a internet"> +<!ENTITY torsettings.useProxy.type "Tipo di proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "Seleziona un tipo di proxy"> +<!ENTITY torsettings.useProxy.address "Indirizzo"> +<!ENTITY torsettings.useProxy.address.placeholder "Indirizzo IP oppure hostname"> +<!ENTITY torsettings.useProxy.port "Porta"> +<!ENTITY torsettings.useProxy.username "Username"> +<!ENTITY torsettings.useProxy.password "Password"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Questo computer passa attraverso un firewall che permette le connessioni solo ad alcune porte"> +<!ENTITY torsettings.firewall.allowedPorts "Porte consentite"> +<!ENTITY torsettings.useBridges.checkbox "Tor viene censurato nel mio Paese"> +<!ENTITY torsettings.useBridges.default "Seleziona un bridge integrato"> +<!ENTITY torsettings.useBridges.default.placeholder "seleziona un bridge"> +<!ENTITY torsettings.useBridges.bridgeDB "Richiedi un bridge da torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Inserisci i caratteri dell'immagine"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Carica una nuova verifica"> +<!ENTITY torsettings.useBridges.captchaSubmit "Invia"> +<!ENTITY torsettings.useBridges.custom "Fornisci un bridge che conosco"> +<!ENTITY torsettings.useBridges.label "Inserisci le informazioni del bridge da una fonte fidata."> +<!ENTITY torsettings.useBridges.placeholder "digita indirizzo:porta (uno per riga)"> + +<!ENTITY torsettings.copyLog "Copia il log di Tor negli "appunti" di sistema"> + +<!ENTITY torsettings.proxyHelpTitle "Aiuto proxy"> +<!ENTITY torsettings.proxyHelp1 "Potrebbe essere necessario utilizzare un proxy locale quando ci si connette dalla rete di un'azienda, scuola o università. Se non sei sicuro sulla necessità di utilizzare un proxy, confronta le impostazioni internet in un altro browser o controlla le impostazioni di rete del sistema."> + +<!ENTITY torsettings.bridgeHelpTitle "Aiuto per i ponti relé"> +<!ENTITY torsettings.bridgeHelp1 "I bridge sono relay non elencati che rendono più difficile bloccare le connessioni alla rete Tor.  Ogni tipo di bridge usa un metodo diverso per evitare la censura.  Quelli obfs mascherano il tuo traffico come rumore casuale, quelli meek lo mascherano come se si connettesse a quel servizio al posto di Tor."> +<!ENTITY torsettings.bridgeHelp2 "A causa dei tentativi di blocco di Tor in alcuni Paesi, certi bridge funzionano in certi Paesi, ma non in altri.  Se non sei sicuro di quali bridge funzionino nel tuo Paese, visita torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Attendi mentre stabiliamo una connessione alla rete Tor.  Potrebbe richiedere qualche minuto."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Connessione"> +<!ENTITY torPreferences.torSettings "Impostazioni di Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser indirizza il tuo traffico nella rete Tor, gestita da migliaia di volontari in tutto il mondo." > +<!ENTITY torPreferences.learnMore "Per saperne di più"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Rete Tor:"> +<!ENTITY torPreferences.statusTorConnected "Connesso"> +<!ENTITY torPreferences.statusTorNotConnected "Non Connesso"> +<!ENTITY torPreferences.statusTorBlocked "Potenzialmente bloccato"> +<!ENTITY torPreferences.learnMore "Per saperne di più"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connette automaticamente Tor Browser alla rete Tor quando si avvia, in base alle tue ultime impostazioni di connessione usate."> +<!ENTITY torPreferences.quickstartCheckbox "Connetti sempre automaticamente"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Bridges"> +<!ENTITY torPreferences.bridgesDescription "I bridge ti aiutano ad accedere alla rete Tor in luoghi dove Tor viene bloccato. A seconda di dove ti trovi, un bridge può funzionare meglio di un altro."> +<!ENTITY torPreferences.bridgeLocation "La tua posizione"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatica"> +<!ENTITY torPreferences.bridgeLocationFrequent "Posizioni selezionate di frequente"> +<!ENTITY torPreferences.bridgeLocationOther "Altre posizioni"> +<!ENTITY torPreferences.bridgeChooseForMe "Scegli un bridge per me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "I tuoi bridge attuali"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Puoi salvare uno o più bridge e Tor sceglierà quale usare quando ti connetti.Tor scambierà automaticamente il bridge da usare quando necessario."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Rimuovi"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disattiva bridge integrati"> +<!ENTITY torPreferences.bridgeShare "Condividi questo bridge usando il codice QR o copiando il suo indirizzo:"> +<!ENTITY torPreferences.bridgeCopy "Copia indirizzo bridge"> +<!ENTITY torPreferences.copied "Copiato!"> +<!ENTITY torPreferences.bridgeShowAll "Mostra tutti i bridge"> +<!ENTITY torPreferences.bridgeRemoveAll "Rimuovi tutti i bridge"> +<!ENTITY torPreferences.bridgeAdd "Aggiungi un bridge nuovo"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Scegli da uno dei bridge di Tor Browser integrati"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Seleziona un bridge integrato…"> +<!ENTITY torPreferences.bridgeRequest "Richiedi un bridge..."> +<!ENTITY torPreferences.bridgeEnterKnown "Inserisci un indirizzo di bridge che conosci già"> +<!ENTITY torPreferences.bridgeAddManually "Aggiungi un bridge a mano…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avanzate"> +<!ENTITY torPreferences.advancedDescription "Configura come Tor Browser si connette ad internet"> +<!ENTITY torPreferences.advancedButton "Impostazioni…"> +<!ENTITY torPreferences.viewTorLogs "Vedi i log di Tor"> +<!ENTITY torPreferences.viewLogs "Visualizza Log..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Rimuovere tutti i bridge?"> +<!ENTITY torPreferences.removeBridgesWarning "Questa azione non può essere annullata."> +<!ENTITY torPreferences.cancel "Annulla"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scansiona il codice QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Bridge integrati"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser include alcuni tipi specifici di bridge denominati "pluggable transports"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 è un tipo di bridge integrato che fa sembrare casuale il tuo traffico di Tor. È anche meno probabile che venga bloccato rispetto al predecessore, il bridge obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake è un bridge integrato che elude le censure instradando la tua connessione attraverso i proxy Snowflake, mantenuti da volontari."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure è un bridge integrato che fa sembrare che tu stia usando un sito web di Microsoft invece di Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Richiedi Bridge"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contattando BridgeDB. Attendere, prego."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Risolvi il CAPTCHA per richiedere un bridge."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "La soluzione è sbagliata. Riprova."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Fornisci bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Inserisci le informazioni del bridge da una fonte fidata"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Impostazioni di connessione"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configura come Tor Browser si connette ad internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Valori separati da una virgola"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Log di Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Non Connesso"> +<!ENTITY torConnect.connectingConcise "Connessione in corso..."> +<!ENTITY torConnect.tryingAgain "Sto riprovando…"> +<!ENTITY torConnect.noInternet "Tor Browser non è riuscito a raggiungere internet"> +<!ENTITY torConnect.noInternetDescription "Potrebbe essere causato da un problema di connessione, non da un blocco di Tor. Controlla la connessione internet, le impostazioni proxy e firewall prima di riprovare. "> +<!ENTITY torConnect.couldNotConnect "Tor Browser non è riuscito a connettersi a Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configura la tua connessione"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Se Tor è bloccato nel luogo in cui ti trovi, provare un bridge può aiutare. L'assistente di connessione può sceglierne uno per te usando la tua posizione, oppure puoi #1 a mano."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Sto provando un bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Sto provando un'altra volta…"> +<!ENTITY torConnect.errorLocation "Tor Browser non è riuscito a localizzarti"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser deve conoscere la tua posizione per poter scegliere il giusto bridge per te. Se preferisci non condividere la posizione, allora #1 a mano."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Queste impostazioni di posizione sono giuste?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser non è ancora riuscito a connettersi a Tor. Controlla che le tue impostazioni di posizione siano giuste e riprova, oppure #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser ancora non riesce a connettersi"> +<!ENTITY torConnect.finalErrorDescription "Nonostante gli sforzi, l'assistente di connessione non è riuscito a connettere a Tor. Controlla la tua connessione e prova ad aggiungere un bridge a mano."> +<!ENTITY torConnect.breadcrumbAssist "Assistente di connessione"> +<!ENTITY torConnect.breadcrumbLocation "Impostazioni di posizione"> +<!ENTITY torConnect.breadcrumbTryBridge "Prova un bridge"> +<!ENTITY torConnect.automatic "Automatica"> +<!ENTITY torConnect.selectCountryRegion "Seleziona Stato o Regione"> +<!ENTITY torConnect.frequentLocations "Posizioni selezionate di frequente"> +<!ENTITY torConnect.otherLocations "Altre posizioni"> +<!ENTITY torConnect.restartTorBrowser "Riavvia Tor Browser"> +<!ENTITY torConnect.configureConnection "Configura connessione…"> +<!ENTITY torConnect.viewLog "Vedi i log…"> +<!ENTITY torConnect.tryAgain "Riprova"> +<!ENTITY torConnect.offline "Internet irraggiungibile"> +<!ENTITY torConnect.connectMessage "Le modifiche alle impostazioni di Tor non verranno applicate finché non ti connetti"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser non è riuscito a stabilire una connessione alla rete Tor"> +<!ENTITY torConnect.yourLocation "La tua posizione"> +<!ENTITY torConnect.tryBridge "Prova un bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Configurazione automatica fallita"> +<!ENTITY torConnect.autoBootstrappingFailed "Configurazione automatica fallita"> +<!ENTITY torConnect.cannotDetermineCountry "Impossibile determinare la nazione dell'utente"> +<!ENTITY torConnect.noSettingsForCountry "Nessuna impostazione disponibile per la tua posizione"> diff --git a/toolkit/torbutton/chrome/locale/it/onboarding.properties b/toolkit/torbutton/chrome/locale/it/onboarding.properties new file mode 100644 index 000000000000..c0d75a827b2e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Prima volta in %S?\nCominciamo. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S è completamente nuovo!\nScopri che cosa può fare. +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Chiudi +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Ignora +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Completato diff --git a/toolkit/torbutton/chrome/locale/it/torbutton.dtd b/toolkit/torbutton/chrome/locale/it/torbutton.dtd new file mode 100644 index 000000000000..c6ef7bf4f998 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nuova Identità"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nuova Identità"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Nuovo Circuito Tor per questo Sito"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nuovo circuito Tor per questo sito"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Impostazioni della rete Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Controllo degli aggiornamenti di Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "A"> +<!ENTITY torbutton.context_menu.cookieProtections "Protezioni dei Cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Fai clic per inizializzare Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Impostazioni di Sicurezza Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Gestisci protezione Cookies"> +<!ENTITY torbutton.cookiedialog.lockCol "Protetto"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Nome"> +<!ENTITY torbutton.cookiedialog.pathCol "Percorso"> +<!ENTITY torbutton.cookiedialog.protectCookie "Proteggi Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Rimuovi Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Interrompi protezione cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Rimuovi tutti tranne quelli protetti"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Proteggi i nuovi cookie"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Non proteggere i nuovi cookie"> +<!ENTITY torbutton.prefs.sec_caption "Livello di Sicurezza"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Il Security Slider ti permette di disabilitare determinate funzionalità del browser che potrebbero renderlo più vulnerabile a tentativi di attacco."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Tutte le funzionalità di Tor Browser e dei siti sono attive."> +<!ENTITY torbutton.prefs.sec_safer_label "Sicuro"> +<!ENTITY torbutton.prefs.sec_safer_description "Disattiva le caratteristiche dei siti spesso pericolose, causando la perdita di funzionalità di alcuni siti."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Nell'impostazione sicura:"> +<!ENTITY torbutton.prefs.sec_safest_label "Molto sicuro"> +<!ENTITY torbutton.prefs.sec_safest_description "Permette solo le funzionalità necessarie per siti statici e servizi di base. Queste modifiche influiscono su immagini, media e script."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Nell'impostazione molto sicura:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Per saperne di più"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript è disattivato nei siti non-HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript è disattivato in tutti i siti in modo predefinito."> +<!ENTITY torbutton.prefs.sec_limit_typography "Alcuni caratteri e simboli matematici sono disattivati."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Alcuni caratteri, icone, simboli matematici e immagini sono disattivati."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio, video (media HTML5) e WebGL sono click-to-play."> +<!ENTITY torbutton.prefs.sec_custom_warning "Personalizzato"> +<!ENTITY torbutton.prefs.sec_overview "Disabilita alcune funzionalità web che possono essere utilizzate per attaccare la tua sicurezza e anonimato."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Livello di sicurezza: Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Livello di sicurezza: Più sicuro"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Livello di sicurezza: Il più sicuro"> +<!ENTITY torbutton.prefs.sec_custom_summary "Le tue impostazioni personalizzate del browser sembrano avere preferenze di sicurezza insolite. Per motivi di sicurezza e privacy, ti consigliamo di scegliere uno dei livelli di sicurezza predefiniti."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Ripristina Impostazioni Iniziali"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Impostazioni di Sicurezza Avanzate..."> +<!ENTITY torbutton.prefs.sec_change "Cambia…"> +<!ENTITY torbutton.circuit_display.title "Circuito Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Nuovo circuito per questo sito"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Apri il prompt di autenticazione del servizio client onion."> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Ricorda questa chiave"> diff --git a/toolkit/torbutton/chrome/locale/it/torbutton.properties b/toolkit/torbutton/chrome/locale/it/torbutton.properties new file mode 100644 index 000000000000..05791528e7a7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP sconosciuto +torbutton.circuit_display.onion_site = sito Onion +torbutton.circuit_display.this_browser = Questo browser +torbutton.circuit_display.relay = Ripetitore +torbutton.circuit_display.tor_bridge = Bridge +torbutton.circuit_display.unknown_country = Paese sconosciuto +torbutton.circuit_display.guard = Nodo di guardia +torbutton.circuit_display.guard_note = Il tuo nodo [Guardia] non deve cambiare. +torbutton.circuit_display.learn_more = Per saperne di più +torbutton.circuit_display.click_to_copy = Clicca per copiare +torbutton.circuit_display.copied = Copiato! +torbutton.content_sizer.margin_tooltip = Il browser Tor aggiunge questo margine per rendere l'ampiezza e altezza della tua finestra meno distintiva, così si riduce la possibilità di che tu sia tracciato in linea. +extensions.torbutton@torproject.org.description = Torbutton fornisce un pulsante per configurare le impostazioni di Tor e rimuovere velocemente e facilmente i dati di navigazione privati. +torbutton.popup.external.title = Si desidera scaricare un tipo di file esterno? +torbutton.popup.external.app = Tor Browser non è in grado di aprire questo file. Sarà necessario usare un'altra applicazione per aprirlo.\n\n +torbutton.popup.external.note = Alcuni tipi di file possono far sì che le applicazioni si connettano a Internet senza usare Tor.\n\n +torbutton.popup.external.suggest = Per essere totalmente sicuri, si dovrebbe aprire i file scaricati solo quando si è offline, o usare un Live CD Tor come ad esempio Tails.\n +torbutton.popup.launch = Scaricare il file +torbutton.popup.cancel = Annulla +torbutton.popup.dontask = Scaricare automaticamente i file d'ora in poi +torbutton.popup.no_newnym = Torbutton non può assegnarti una nuova identità in modo sicuro, poiché non ha accesso alla porta di controllo di Tor.\n\nStai usando Tor Browser Bundle? +torbutton.security_settings.menu.title = Impostazioni sicurezza +torbutton.title.prompt_torbrowser = Informazioni importanti su Torbutton +torbutton.popup.prompt_torbrowser = Torbutton ora funziona in modo diverso: non è più possibile disabilitarlo.\n\nQuesto cambiamento è stato apportato poiché risulta poco sicuro utilizzare Torbutton in un browser utilizzato anche senza di esso. Ci sono alcuni problemi critici che non è possibile risolvere in un modo diverso da questo.\n\nSe si desidera utilizzare Firefox normalmente (senza, quindi, Torbutton) è necessario disinstallare manualmente Torbutton ed installare Tor Browser Bund [...] +torbutton.popup.short_torbrowser = Informazioni importanti su Torbutton!\n\nTorbutton ora è sempre abilitato.\n\nFai clic su Torbutton per ulteriori informazioni. + +torbutton.popup.confirm_plugins = Alcuni plugin come Flash possono violare la tua privacy e anonimità.\n\nPossono anche eludere Tor per rivelare la tua posizione attuale e il tuo indirizzo IP.\n\nSei sicuro di volere attivare i plugin?\n +torbutton.popup.never_ask_again = Non chiedermelo più +torbutton.popup.confirm_newnym = Tor Browser chiuderà tutte le schede e finestre. Tutte le sessioni dei siti andranno perse.\n\nRiavviare ora Tor Browser per azzerare la tua identità?\n\n + +torbutton.maximize_warning = Massimizzando Tor Browser, i siti web possono risalire alle dimensioni del tuo schermo, e questo può servire a rintracciarti. Ti raccomandiamo di mantenere invariate le dimensioni iniziali di default delle finestre di Tor Browser. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Questo sito (%S) ha tentato di estrarre i dati di immagine HTML5 canvas, che possono essere utilizzati per identificare in modo univoco il computer.\n\nPermettere a Tor Browser di estrarre l'immagine HTML5 canvas per questo sito? +canvas.notNow=Non ora +canvas.notNowAccessKey=N +canvas.allow=Acconsenti in futuro +canvas.allowAccessKey=A +canvas.never=Mai per questo sito (raccomandato) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problema Profilo %S +profileReadOnly=Non puoi avviare %S da un file system di sola lettura. Per favore copia %S in un'altra posizione prima di usarlo. +profileReadOnlyMac=Non puoi avviare %S da un file system di sola lettura. Per favore copia %S sulla tua scrivania o nella cartella Applicazioni prima di usarlo. +profileAccessDenied=%S non ha i permessi per accedere al profilo. Per favore, modifica i permessi del tuo file system e riprova. +profileMigrationFailed=Migrazione del tuo profilo %S esistente fallita.\nVerranno usate nuove impostazioni. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Scaricamento aggiornamento %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Connessione cifrata (Servizio onion, %1$S, chiavi %2$S bit, %3$S) +pageInfo_OnionEncryption=Connessione cifrata (Servizio onion) +pageInfo_OnionName=Nome Onion + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Per saperne di più +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Rete +onionServices.errorPage.onionSite=Sito onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problema di Caricamento del Sito Onion +onionServices.descNotFound.header=Sito Onion Non Trovato +onionServices.descNotFound=La causa più probabile è che il sito onion sia offline. Contatta l'amministratore del sito onion. +onionServices.descNotFound.longDescription=Dettagli: %S — Il descrittore del servizio onion richiesto non può essere trovato nell'hashring, perciò il servizio non è raggiungibile dal client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problema di Caricamento del Sito Onion +onionServices.descInvalid.header=Sito Onion Non Raggiungibile +onionServices.descInvalid=Il sito onion non è raggiungibile per un errore interno. +onionServices.descInvalid.longDescription=Dettagli: %S — Il descrittore del servizio onion richiesto non può essere letto o la validazione della firma è fallita. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problema di Caricamento del Sito Onion +onionServices.introFailed.header=Il Sito Onion si è Disconnesso +onionServices.introFailed=La causa più probabile è che il sito onion sia offline. Contatta l'amministratore del sito onion. +onionServices.introFailed.longDescription=Dettagli: %S — Introduzione fallita, ciò significa che il descrittore è stato trovato ma il servizio non è più connesso al punto di introduzione. Probabilmente il servizio ha cambiato il suo descrittore o non è in esecuzione. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problema di Caricamento del Sito Onion +onionServices.rendezvousFailed.header=Impossibile Connettersi al Sito Onion +onionServices.rendezvousFailed=Il sito onion è occupato o la rete Tor è sovraccarica. Riprova più tardi. +onionServices.rendezvousFailed.longDescription=Dettagli: %S — Il client non ha trovato riscontro con il servizio, ciò significa che il client non è riuscito a completare la connessione. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autorizzazione Necessaria +onionServices.clientAuthMissing.header=Il Sito Onion Richiede L'autenticazione +onionServices.clientAuthMissing=L'accesso al sito onion richiede una chiave ma non ne è stata fornita nessuna. +onionServices.clientAuthMissing.longDescription=Dettagli: %S — Il client ha scaricato il descrittore del servizio onion richiesto, ma non è riuscito a decifrarne il contenuto perché mancano informazioni di autorizzazione del client. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorizzazione Fallita +onionServices.clientAuthIncorrect.header=Autenticazione al Sito Onion Fallita +onionServices.clientAuthIncorrect=La chiave fornita non è corretta o è stata revocata. Contatta l'amministratore del sito onion. +onionServices.clientAuthIncorrect.longDescription=Dettagli: %S — Il client è riuscito a scaricare il descrittore del servizio onion richiesto ma non è riuscito a decifrarne il contenuto usando le informazioni di autorizzazione fornite dal client. Potrebbe significare che l'accesso è stato revocato. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problema di Caricamento del Sito Onion +onionServices.badAddress.header=Indirizzo Onion Non Valido +onionServices.badAddress=L'indirizzo onion fornito non è valido. Controlla di averlo inserito correttamente. +onionServices.badAddress.longDescription=Dettagli: %S — L'indirizzo .onion fornito non è valido. Questo errore accade per uno dei seguenti motivi: il checksum dell'indirizzo non corrisponde, la chiave pubblica ed25519 non è valida o la codifica non è valida. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problema di Caricamento del Sito Onion +onionServices.introTimedOut.header=Creazione del Circuito Onion Scaduta +onionServices.introTimedOut=Connessione al sito onion fallita, probabilmente per una connessione di rete debole. +onionServices.introTimedOut.longDescription=Dettagli: %S — La connessione al servizio onion richiesto è scaduta mentre si tentava di costruire il circuito di incontro. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S richiede che ti identifichi. +onionServices.authPrompt.keyPlaceholder=Inserisci la tua chiave privata per questo servizio onion +onionServices.authPrompt.done=Fatto +onionServices.authPrompt.doneAccessKey=f +onionServices.authPrompt.invalidKey=Per favore inserisci una chiave valida (52 caratteri base32 o 44 caratteri base64) +onionServices.authPrompt.failedToSetKey=Impossibile configurare Tor con la tua chiave +onionServices.authPreferences.header=Autenticazione Servizi Onion +onionServices.authPreferences.overview=Alcuni servizi onion richiedono che ti identifichi con una chiave (una specie di password) prima di potervi accedere. +onionServices.authPreferences.savedKeys=Chiavi Salvate… +onionServices.authPreferences.dialogTitle=Chiavi Servizio Onion +onionServices.authPreferences.dialogIntro=Le chiavi per il seguente sito onion sono salvate nel tuo computer +onionServices.authPreferences.onionSite=Sito onion +onionServices.authPreferences.onionKey=Chiave +onionServices.authPreferences.remove=Rimuovi +onionServices.authPreferences.removeAll=Rimuovi tutte +onionServices.authPreferences.failedToGetKeys=Impossibile recuperare le chiavi da Tor +onionServices.authPreferences.failedToRemoveKey=Impossibile rimuovere la chiave +onionServices.v2Deprecated.pageTitle=Avviso di obsolescenza siti Onion V2 +onionServices.v2Deprecated.header=I siti Onion versione 2 verranno presto deprecati +onionServices.v2Deprecated=Questo sito onion presto non sarà raggiungibile. Contatta l'amministratore del sito e incoraggialo ad aggiornarlo. +onionServices.v2Deprecated.longDescription=Tor sta terminando il supporto per i servizi onion 2 a partire da luglio 2021, e questo sito onion non sarà più raggiungibile a questo indirizzo. Se sei l'amministratore del sito, aggiornalo ad una versione 3 il prima possibile. +onionServices.v2Deprecated.tryAgain=Ho capito +onionServices.v2Deprecated.tooltip=Questo sito onion presto non sarà raggiungibile + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Dare Sempre Priorità agli Onion +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Non Ora +onionLocation.notNowAccessKey=n +onionLocation.description=C'è una versione più privata e sicura di questo sito disponibile nella rete Tor tramite i servizi onion. I servizi onion aiutano i gestori dei siti ed i loro visitatori a sconfiggere la sorveglianza e la censura. +onionLocation.tryThis=Prova i Servizi Onion +onionLocation.onionAvailable=.onion disponibile +onionLocation.learnMore=Maggiori informazioni... +onionLocation.always=Sempre +onionLocation.askEverytime=Chiedi ogni volta +onionLocation.prioritizeOnionsDescription=Dare priorità ai siti .onion quando conosciuti. +onionLocation.onionServicesTitle=Servizi Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=È stato copiato un indirizzo di criptovaluta (%S) da un sito non sicuro. Potrebbe essere stato modificato. +cryptoSafetyPrompt.whatCanHeading=Cosa puoi fare al riguardo? +cryptoSafetyPrompt.whatCanBody=Puoi provare a riconnetterti con un nuovo circuito per stabilire una connessione sicura, o accettare il rischio e chiudere questo avviso. +cryptoSafetyPrompt.learnMore=Per saperne di più +cryptoSafetyPrompt.primaryAction=Ricarica scheda con un nuovo circuito +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Chiudi avviso +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Procedere con cautela +rulesets.warningDescription=L'aggiunta o modifica di regole può causare il dirottamento del browser da parte di aggressori. Procedi solo se sai cosa stai facendo. +rulesets.warningEnable=Avvisami quando tento di accedere a queste preferenze +rulesets.warningButton=Accetta il rischio e continua +# Ruleset list +rulesets.rulesets=Set di regole +rulesets.noRulesets=Nessun set trovato +rulesets.noRulesetsDescr=Quando salvi un set di regole in Tor Browser, apparirà qui. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Ultimo aggiornamento %S +rulesets.neverUpdated=Mai aggiornato, o ultimo aggiornamento fallito +rulesets.enabled=Attivato +rulesets.disabled=Disattivati +# Ruleset details/edit ruleset +rulesets.edit=Modifica +rulesets.name=Nome +rulesets.jwk=JWK +rulesets.pathPrefix=Prefisso del percorso +rulesets.scope=Scopo +rulesets.enable=Attiva questo set di regole +rulesets.checkUpdates=Cerca aggiornamenti +rulesets.jwkPlaceholder=La chiave usata per firmare questo set nel formato JWK (JSON Web Key) +rulesets.jwkInvalid=Impossibile leggere il JWK, o non è una chiave valida +rulesets.pathPrefixPlaceholder=Prefisso URL che contiene i file necessari al set di regole +rulesets.pathPrefixInvalid=Il prefisso del percorso non è un URL HTTP(S) valido +rulesets.scopePlaceholder=Espressione regolare per l'ambito delle regole +rulesets.scopeInvalid=Impossibile leggere l'ambito come espressione regolare +rulesets.save=Salva +rulesets.cancel=Annulla diff --git a/toolkit/torbutton/chrome/locale/it/torlauncher.properties b/toolkit/torbutton/chrome/locale/it/torlauncher.properties new file mode 100644 index 000000000000..52686cc68307 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/it/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Avviatore di Tor + +torlauncher.tor_exited_during_startup=Tor è uscito durante l'avvio. Potrebbe essere a causa di un errore nel tuo file torrc, un bug di Tor o di un altro programma nel tuo sistema, o hardware difettoso. Finché non risolvi il problema specificato e riavvii Tor, Tor Browser non si avvierà. +torlauncher.tor_exited=Tor si è chiuso inaspettatamente. La causa può essere un bug dello stesso Tor, un altro programma sul tuo sistema o hardware difettoso. Finché non riavvii Tor, il Tor Browser non potrà connettersi. Se il problema persiste, invia una copia del log di Tor al team di supporto. +torlauncher.tor_exited2=Il riavvio di Tor non chiuderà le schede del browser. +torlauncher.tor_controlconn_failed=Impossibile connettersi alla porta di controllo di Tor. +torlauncher.tor_failed_to_start=Si è verificato un errore nell'avvio di Tor. +torlauncher.tor_control_failed=Impossibile ottenere il controllo di Tor. +torlauncher.tor_bootstrap_failed=Tor ha fallito a stabilire una connessione Tor +torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S). + +torlauncher.unable_to_start_tor=Impossibile avviare Tor.⏎\n⏎\n%S +torlauncher.tor_missing=Il file eseguibile di Tor è mancante. +torlauncher.torrc_missing=Il file torrc non è presente e non è stato possibile crearlo. +torlauncher.datadir_missing=La cartella dei dati di Tor non esiste e non è stato possibile crearla. +torlauncher.onionauthdir_missing=La cartella di autenticazione onion di Tor non esiste e non è stato possibile crearla. +torlauncher.password_hash_missing=Tentativo di ottenere la password fallito. + +torlauncher.failed_to_get_settings=Impossibile recuperare le impostazioni di Tor.⏎\n⏎\n%S +torlauncher.failed_to_save_settings=Impossibile salvare le impostazioni di Tor.⏎\n⏎\n%S +torlauncher.ensure_tor_is_running=Per favore assicurati che Tor sia in esecuzione. + +torlauncher.error_proxy_addr_missing=Affinché Tor sia configurato all'utilizzo di un proxy per l'accesso ad Internet, devi specificare sia un indirizzo IP o nome Host, sia un numero di porta. +torlauncher.error_proxy_type_missing=Devi selezionare il tipo di proxy. +torlauncher.error_bridges_missing=Devi specificare uno o più ponti. +torlauncher.error_default_bridges_type_missing=È necessario selezionare un tipo di trasporto per il bridge preconfigurato. +torlauncher.error_bridgedb_bridges_missing=Richiedi un bridge. +torlauncher.error_bridge_bad_default_type=Non è disponibile alcun bridge con il tipo di trasporto %S. Modificare le proprie impostazioni. + +torlauncher.bridge_suffix.meek-amazon=(funziona in Cina) +torlauncher.bridge_suffix.meek-azure=(funziona in Cina) + +torlauncher.request_a_bridge=Richiedi un bridge... +torlauncher.request_a_new_bridge=Richiedi un nuovo bridge... +torlauncher.contacting_bridgedb=Contatto BridgeDB. Attendere, prego. +torlauncher.captcha_prompt=Risolvi il CAPTCHA per richiedere un bridge. +torlauncher.bad_captcha_solution=La soluzione è sbagliata. Riprova. +torlauncher.unable_to_get_bridge=Impossibile ottenere un bridge da BridgeDB.\n\n%S +torlauncher.no_meek=Questo browser non è configurato per meek, necessario per ottenere dei bridge. +torlauncher.no_bridges_available=Nessun bridge disponibile al momento. Spiacenti. + +torlauncher.connect=Connetti +torlauncher.restart_tor=Riavvia Tor +torlauncher.quit=Esci +torlauncher.quit_win=Esci +torlauncher.done=Fatto + +torlauncher.forAssistance=Per richiedere assistenza, contattare %S +torlauncher.forAssistance2=Per assistenza, visita %S + +torlauncher.copiedNLogMessages=Copia completata. %S Messaggi di log Tor sono pronti per essere incollato in un editor di testo o un messaggio e-mail. + +torlauncher.bootstrapStatus.starting=Avvio in corso +torlauncher.bootstrapStatus.conn_pt=Connessione al bridge +torlauncher.bootstrapStatus.conn_done_pt=Connesso al bridge +torlauncher.bootstrapStatus.conn_proxy=Connessione al proxy +torlauncher.bootstrapStatus.conn_done_proxy=Connesso al proxy +torlauncher.bootstrapStatus.conn=Connessione ad un relay Tor +torlauncher.bootstrapStatus.conn_done=Connesso ad un relay Tor +torlauncher.bootstrapStatus.handshake=Negoziazione con un relay Tor +torlauncher.bootstrapStatus.handshake_done=Negoziazione conclusa con un relay Tor +torlauncher.bootstrapStatus.onehop_create=Sto creando una connessione cifrata alla directory +torlauncher.bootstrapStatus.requesting_status=Sto ottenendo informazioni sullo stato della rete +torlauncher.bootstrapStatus.loading_status=Caricamento dello stato della rete +torlauncher.bootstrapStatus.loading_keys=Caricamento dei certificati delle authority +torlauncher.bootstrapStatus.requesting_descriptors=Richiesta di informazioni sui relay +torlauncher.bootstrapStatus.loading_descriptors=Caricamento delle informazioni sui relay +torlauncher.bootstrapStatus.enough_dirinfo=Caricamento informazioni relay terminato +torlauncher.bootstrapStatus.ap_conn_pt=Costruzione circuiti: connessione al bridge +torlauncher.bootstrapStatus.ap_conn_done_pt=Costruzione circuiti: connesso al bridge +torlauncher.bootstrapStatus.ap_conn_proxy=Costruzione circuiti: connessione al proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Costruzione circuiti: connesso al proxy +torlauncher.bootstrapStatus.ap_conn=Costruzione circuiti: connessione ad un relay Tor +torlauncher.bootstrapStatus.ap_conn_done=Costruzione circuiti: connesso ad un relay Tor +torlauncher.bootstrapStatus.ap_handshake=Costruzione circuiti: negoziazione con un relay Tor +torlauncher.bootstrapStatus.ap_handshake_done=Costruzione circuiti: negoziazione conclusa con un relay Tor +torlauncher.bootstrapStatus.circuit_create=Costruzione circuiti: sto creando un circuito Tor +torlauncher.bootstrapStatus.done=Connesso alla rete Tor! + +torlauncher.bootstrapWarning.done=fatto +torlauncher.bootstrapWarning.connectrefused=connessione rifiutata +torlauncher.bootstrapWarning.misc=varie +torlauncher.bootstrapWarning.resourcelimit=risorse insufficienti +torlauncher.bootstrapWarning.identity=discordanza di identità +torlauncher.bootstrapWarning.timeout=timeout della connessione +torlauncher.bootstrapWarning.noroute=nessun rotta per l'host +torlauncher.bootstrapWarning.ioerror=errore di lettura/scrittura +torlauncher.bootstrapWarning.pt_missing=pluggable transport mancante + +torlauncher.nsresult.NS_ERROR_NET_RESET=Connessione al server persa. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Connessione al server fallita. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Connessione al proxy fallita. + +torlauncher.copiedNLogMessagesShort=%S Logs Copiati diff --git a/toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd new file mode 100644 index 000000000000..d8e538a84953 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; は"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName; によって開発されました。"> +<!ENTITY project.end "あなたのオンラインでのプライバシーと自由を守る非営利団体です。"> + +<!ENTITY help.start "支援しますか?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "寄付"> +<!ENTITY help.or "や"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "参加"> +<!ENTITY help.end "で支援してください!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "質問がありますか?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Tor ネットワークを育てましょう!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "ライセンス情報"> +<!ENTITY tor.TrademarkStatement "「Tor」と「Onion Logo」は Tor Project, Inc. の登録商標です。"> diff --git a/toolkit/torbutton/chrome/locale/ja/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ja/aboutTBUpdate.dtd new file mode 100644 index 000000000000..53d7bb643b3e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser 変更履歴"> +<!ENTITY aboutTBUpdate.updated "Tor Browser アップデート完了"> +<!ENTITY aboutTBUpdate.linkPrefix "このリリースについての最新情報を入手するため、"> +<!ENTITY aboutTBUpdate.linkLabel "私たちのウェブサイトを見てください"> +<!ENTITY aboutTBUpdate.linkSuffix "。"> +<!ENTITY aboutTBUpdate.version "バージョン"> +<!ENTITY aboutTBUpdate.releaseDate "リリース日"> +<!ENTITY aboutTBUpdate.releaseNotes "リリースノート"> diff --git a/toolkit/torbutton/chrome/locale/ja/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ja/aboutTor.dtd new file mode 100644 index 000000000000..1bb379c3e816 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tor について"> + +<!ENTITY aboutTor.viewChangelog.label "変更履歴を表示"> + +<!ENTITY aboutTor.ready.label "プライベートなブラウジングを開始"> +<!ENTITY aboutTor.ready2.label "世界で最もプライベートなブラウジングを行う準備が完了しました。"> +<!ENTITY aboutTor.failure.label "何かが間違っています!"> +<!ENTITY aboutTor.failure2.label "Tor は現在、このブラウザーで動作していません。"> + +<!ENTITY aboutTor.search.label "DuckDuckGo で検索"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "質問がありますか?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Tor Browser マニュアルをチェック »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser マニュアル"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project はフリー・オープンソースの匿名性技術・プライバシー技術の開発と展開によって人権と自由を向上し、その制限されない有効性と利用を支援し、また、人々の正確な理解を促進している US 501(c)(3) 非営利団体です。"> +<!ENTITY aboutTor.getInvolved.label "参加しよう »"> + +<!ENTITY aboutTor.newsletter.tagline "Tor からの最新ニュースを受信トレイに。"> +<!ENTITY aboutTor.newsletter.link_text "Tor ニュースに申し込む。"> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor は皆さんからの寄付に支えられています。"> +<!ENTITY aboutTor.donationBanner.buttonA "今すぐ寄付"> + +<!ENTITY aboutTor.alpha.ready.label "徹底的にテストする"> +<!ENTITY aboutTor.alpha.ready2.label "世界で最もプライベートなブラウジングをテストする準備が完了しました。"> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha は Tor Browser の不安定版で、新機能のプレビュー、パフォーマンスのテスト、リリース前のフィードバックなどのために使用できます。"> +<!ENTITY aboutTor.alpha.bannerLink "Tor Forum にバグを報告"> + +<!ENTITY aboutTor.nightly.ready.label "徹底的にテストする"> +<!ENTITY aboutTor.nightly.ready2.label "世界で最もプライベートなブラウジングをテストする準備が完了しました。"> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly は Tor Browser の不安定版で、新機能のプレビュー、パフォーマンスのテスト、リリース前のフィードバックなどのために使用できます。"> +<!ENTITY aboutTor.nightly.bannerLink "Tor Forum にバグを報告"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "今すぐ寄付する"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "あなたが寄付した額と同額を、Torのパートナーも寄付します (最大100,000ドル)"> diff --git a/toolkit/torbutton/chrome/locale/ja/brand.dtd b/toolkit/torbutton/chrome/locale/ja/brand.dtd new file mode 100644 index 000000000000..19c821fddd9e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' と 'Onion Logo' は Tor Project, Inc. の登録商標です。"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "クリックするとインストールされたシステムプラグインを読み込みます。"> +<!ENTITY plugins.installed.enable "プラグインを有効化"> +<!ENTITY plugins.installed.disable "プラグインを無効化"> +<!ENTITY plugins.installed.disable.tip "クリックするとインストールされたプラグインを読み込まなくします。"> diff --git a/toolkit/torbutton/chrome/locale/ja/brand.properties b/toolkit/torbutton/chrome/locale/ja/brand.properties new file mode 100644 index 000000000000..3dbfc3da7550 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox を、ビルトインの検索で高速なホームページではじめる +homePageImport=%S からあなたのホームページをインポートする + +homePageMigrationPageTitle=ホームページ選択 +homePageMigrationDescription=あなたが使用したいホームページを選択してください: + +syncBrandShortName=同期 diff --git a/toolkit/torbutton/chrome/locale/ja/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ja/branding/brand.ftl new file mode 100644 index 000000000000..91a024d327c1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' と 'Onion Logo' は Tor Project, Inc. の登録商標です。 diff --git a/toolkit/torbutton/chrome/locale/ja/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ja/browserOnboarding.properties new file mode 100644 index 000000000000..2a6954b57c2e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=ようこそ +onboarding.tour-tor-welcome.title=準備が完了しました +onboarding.tour-tor-welcome.description=Tor Browser は、ウェブブラウジング中に、最高水準のプライバシーとセキュリティを提供します。あなたは現在、トラッキング、監視、検閲から保護されています。ここでは、Tor Browser について簡単にご紹介します。 +onboarding.tour-tor-welcome.next-button=プライバシーへ + +onboarding.tour-tor-privacy=プライバシー +onboarding.tour-tor-privacy.title=トラッカーとスヌーパーを追い払う +onboarding.tour-tor-privacy.description=Tor Browser は、Cookie を分離し、セッション後にブラウザの履歴を削除します。これらの変更により、あなたのプライバシーとセキュリティがブラウザによって保護されます。ネットワークレベルでの保護方法については、「Tor ネットワーク」をクリックしてください。 +onboarding.tour-tor-privacy.button=Tor ネットワークへ + +onboarding.tour-tor-network=Tor ネットワーク +onboarding.tour-tor-network.title=分散型ネットワークを旅する +onboarding.tour-tor-network.description=Tor Browser は、世界中の何千人ものボランティアによって運営されている Tor ネットワークにあなたを接続します。VPN とは異なり、単一障害点や中央集権的な存在を信頼することなく、プライベートなインターネットを楽しめます。 +onboarding.tour-tor-network.description-para2=NEW: Tor ネットワークの設定は、[設定] メニューの中に移動しました。Tor がブロックされる地域でブリッジを要求することなどができます。 +onboarding.tour-tor-network.action-button=Tor ネットワークの設定を調整 +onboarding.tour-tor-network.button=回線の表示へ + +onboarding.tour-tor-circuit-display=回線の表示 +onboarding.tour-tor-circuit-display.title=回線を確認する +onboarding.tour-tor-circuit-display.description=アクセスするドメインごとに、トラフィックは世界中の3つの Tor リレー間の回線で中継および暗号化されます。あなたがどこから接続しているかをウェブサイトは知りません。「このサイト用の回線を再構築」をクリックすると、新しい回線をリクエストすることができます。 +onboarding.tour-tor-circuit-display.button=回線を確認する +onboarding.tour-tor-circuit-display.next-button=セキュリティへ + +onboarding.tour-tor-security=セキュリティ +onboarding.tour-tor-security.title=エクスペリエンスを選択する +onboarding.tour-tor-security.description=また、ブラウザーのセキュリティを強化するための追加設定も提供しています。私たちのセキュリティ設定では、コンピューターの攻撃に使用される可能性のある要素をブロックすることができます。以下をクリックして、さまざまな設定の機能を確認してください +onboarding.tour-tor-security.description-suffix=お知らせ:デフォルト設定では、NoScriptとHTTPS Everywhereはツールバーに表示されていませんが、カスタマイズによって追加することができます。 +onboarding.tour-tor-security-level.button=セキュリティレベルを表示する +onboarding.tour-tor-security-level.next-button=体験のヒントへ + +onboarding.tour-tor-expect-differences=体験のヒント +onboarding.tour-tor-expect-differences.title=いくつかの違いを理解する +onboarding.tour-tor-expect-differences.description=Tor によって提供されるすべてのセキュリティとプライバシー機能を使用すると、インターネットをブラウジングした時の、あなたの体験は少し変化する場合があります。読み込みは少し遅くなるかもしれないし、あなたのセキュリティレベルによっては、いくつかの要素が動作しないか、読み込まれないかもしれません。また、あなたはロボットではなく、人間であることを証明するように求められることがあるかもしれません。 +onboarding.tour-tor-expect-differences.button=よくある質問を見る +onboarding.tour-tor-expect-differences.next-button=Onion サービスへ + +onboarding.tour-tor-onion-services=Onion サービス +onboarding.tour-tor-onion-services.title=追加の保護 +onboarding.tour-tor-onion-services.description=Onion サービスは、検閲に対する追加のセーフガードを含む、公開者と訪問者への更なる保護を提供する .onion で終わるサイトです。Onion サービスでは、誰でもコンテンツやサービスを匿名で提供できます。下のボタンから DuckDuckGo Onion サイトにアクセスしてみてください。 +onboarding.tour-tor-onion-services.button=Onion サイトを訪問 +onboarding.tour-tor-onion-services.next-button=完了 + +onboarding.overlay-icon-tooltip-updated2=%S の\n変更点をご紹介します +onboarding.tour-tor-update.prefix-new=新機能 +onboarding.tour-tor-update.prefix-updated=更新 + +onboarding.tour-tor-toolbar=ツールバー +onboarding.tour-tor-toolbar-update-9.0.title=さようなら、玉ねぎボタン。 +onboarding.tour-tor-toolbar-update-9.0.description=私たちは Tor の使用感を完全に Tor Browser に調和させたいと思っています。 +onboarding.tour-tor-toolbar-update-9.0.description-para2=そのため、玉ねぎボタンの代わりに、URL バーの [i] ボタンから Tor 回線を確認したり、ツールバーボタンや [≡] メニューから新しい識別子をリクエストしたりできるようにしました。 +onboarding.tour-tor-toolbar-update-9.0.button=新しい識別子をリクエストする方法 +onboarding.tour-tor-toolbar-update-9.0.next-button=Tor ネットワークへ + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=次へ +onboarding.tor-circuit-display.done=完了 +onboarding.tor-circuit-display.one-of-three=1/3 +onboarding.tor-circuit-display.two-of-three=2/3 +onboarding.tor-circuit-display.three-of-three=3/3 + +onboarding.tor-circuit-display.intro.title=回線はどのように機能しますか? +onboarding.tor-circuit-display.intro.msg=回線はランダムに割り当てられたリレーで構成されており、Torトラフィックを転送するように設定された世界中のコンピュータで構成されます。回線を使用すると、プライベートなブラウジングや、Onion サービスとの接続が可能になります。 + +onboarding.tor-circuit-display.diagram.title=回線の表示 +onboarding.tor-circuit-display.diagram.msg=この図形がこのウェブサイトの回線を構成するリレーを表示します。異なるサイトでの活動を相関させれないようにするために、各サイトは別の回線を利用します。 + +onboarding.tor-circuit-display.new-circuit.title=新しい回線が必要ですか? +onboarding.tor-circuit-display.new-circuit.msg=閲覧したいウェブサイトに接続できない、あるいは正しく読み込まれない場合、このボタンにより新しい回線で再読込できます。 diff --git a/toolkit/torbutton/chrome/locale/ja/network-settings.dtd b/toolkit/torbutton/chrome/locale/ja/network-settings.dtd new file mode 100644 index 000000000000..ef7f4e7090bb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor ネットワーク設定"> +<!ENTITY torsettings.wizard.title.default "Tor に接続する"> +<!ENTITY torsettings.wizard.title.configure "Tor ネットワーク設定"> +<!ENTITY torsettings.wizard.title.connecting "接続を確立しています"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Browser 言語"> +<!ENTITY torlauncher.localePicker.prompt "言語を選択してください。"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "“接続” をクリックすると Tor に接続します。"> +<!ENTITY torSettings.configurePrompt "Tor による通信を検閲する国(エジプト、中国、トルコ等)にいる場合やプロキシを要求するプライベートネットワークから接続する場合、「設定」をクリックしてネットワーク設定を調整します。"> +<!ENTITY torSettings.configure "設定"> +<!ENTITY torSettings.connect "接続"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Tor の起動を待機中…"> +<!ENTITY torsettings.restartTor "Tor を再起動"> +<!ENTITY torsettings.reconfigTor "再設定"> + +<!ENTITY torsettings.discardSettings.prompt "Tor ブリッジが設定されるか、ローカルプロキシ設定が入力されるかしました。  Tor ネットワークに直接接続するためには、これらの設定は削除する必要があります。"> +<!ENTITY torsettings.discardSettings.proceed "設定と接続を削除"> + +<!ENTITY torsettings.optional "オプション"> + +<!ENTITY torsettings.useProxy.checkbox "インターネット接続にプロキシを使用する"> +<!ENTITY torsettings.useProxy.type "プロキシの種類"> +<!ENTITY torsettings.useProxy.type.placeholder "プロキシの種類を選択"> +<!ENTITY torsettings.useProxy.address "アドレス"> +<!ENTITY torsettings.useProxy.address.placeholder "IP アドレスまたはホスト名"> +<!ENTITY torsettings.useProxy.port "ポート"> +<!ENTITY torsettings.useProxy.username "ユーザー名"> +<!ENTITY torsettings.useProxy.password "パスワード"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "このコンピューターは特定のポートへの接続のみ許可するファイアーウォールを通します。"> +<!ENTITY torsettings.firewall.allowedPorts "許可されたポート"> +<!ENTITY torsettings.useBridges.checkbox "Tor は私の国では検閲されています"> +<!ENTITY torsettings.useBridges.default "内臓ブリッジを選択"> +<!ENTITY torsettings.useBridges.default.placeholder "ブリッジを選択"> +<!ENTITY torsettings.useBridges.bridgeDB "torproject.org にブリッジをリクエストする"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "画像の文字を入力してください"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "チャレンジを更新する"> +<!ENTITY torsettings.useBridges.captchaSubmit "送信"> +<!ENTITY torsettings.useBridges.custom "あなたが知っているブリッジを入力"> +<!ENTITY torsettings.useBridges.label "信頼できる情報源から入手したブリッジ情報を入力してください。"> +<!ENTITY torsettings.useBridges.placeholder "“アドレス:ポート” の形式で入力 (1 行ずつ)"> + +<!ENTITY torsettings.copyLog "Tor ログをクリップボードにコピー"> + +<!ENTITY torsettings.proxyHelpTitle "プロキシヘルプ"> +<!ENTITY torsettings.proxyHelp1 "会社、学校、大学等のネットワークを通して接続する場合、ローカルプロキシが必要になる場合があります。 プロキシが必要であるかどうかわからない場合は、他のブラウザのインターネット設定を見るか、システムのネットワーク設定を確認してください。"> + +<!ENTITY torsettings.bridgeHelpTitle "ブリッジリレーのヘルプ"> +<!ENTITY torsettings.bridgeHelp1 "ブリッジとは Tor ネットワークへの接続を検閲することを困難するための非公開のリレーです。  各種類のブリッジは検閲を避けるための異なる手法を利用しています。  obfs はあなたのトラフィックをランダムなノイズのように見せかけ,meek はあなたのトラフィックを Tor ではない特定のサービスへの接続であるように見せかけます。"> +<!ENTITY torsettings.bridgeHelp2 "特定の国が Tor を検閲するしようと試みている場合、それがどのような手法で行われているかによって、あるブリッジがある国では機能しても他の国では動かないという場合があります。  もしどのブリッジがあなたの国で機能するかわからない場合は torproject.org/about/contact.html#support にアクセスしてください。"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Tor ネットワークへの接続が確立されるまでお待ちください。  これには数分間かかることがあります。"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "接続"> +<!ENTITY torPreferences.torSettings "Tor の設定"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser は通信トラフィックを Tor ネットワークを経由させて送信します。Tor ネットワークは世界中の何千ものボランティアによって運用されています。" > +<!ENTITY torPreferences.learnMore "詳細情報"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "インターネット:"> +<!ENTITY torPreferences.statusInternetTest "テスト"> +<!ENTITY torPreferences.statusInternetOnline "オンライン"> +<!ENTITY torPreferences.statusInternetOffline "オフライン"> +<!ENTITY torPreferences.statusTorLabel "Tor ネットワーク:"> +<!ENTITY torPreferences.statusTorConnected "接続済み"> +<!ENTITY torPreferences.statusTorNotConnected "接続していません"> +<!ENTITY torPreferences.statusTorBlocked "ブロックされた可能性"> +<!ENTITY torPreferences.learnMore "詳細情報"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "クイックスタート"> +<!ENTITY torPreferences.quickstartDescriptionLong "クイックスタートは、最後に使用した接続設定に基づいて、起動時に Tor Browser を Tor ネットワークに自動的に接続します。"> +<!ENTITY torPreferences.quickstartCheckbox "常に自動的に接続"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "ブリッジ"> +<!ENTITY torPreferences.bridgesDescription "Bridge は Tor がブロックされる地域から Tor ネットワークにアクセスすることを手助けします。地域によって、ある Bridge が他のものよりうまく動作する可能性があります。"> +<!ENTITY torPreferences.bridgeLocation "あなたの現在地"> +<!ENTITY torPreferences.bridgeLocationAutomatic "自動"> +<!ENTITY torPreferences.bridgeLocationFrequent "よく選択される現在地"> +<!ENTITY torPreferences.bridgeLocationOther "その他の現在地"> +<!ENTITY torPreferences.bridgeChooseForMe "最適なブリッジを選択…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "現在のブリッジ"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "ブリッジを複数保存することもでき、その場合 Tor は接続時にどれを使用するか選択します。Tor は必要に応じて自動的に別のブリッジに切り替えます。"> +<!ENTITY torPreferences.bridgeId "#1 ブリッジ: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "削除"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "内蔵ブリッジを無効化"> +<!ENTITY torPreferences.bridgeShare "QR コードやブリッジアドレスでこのブリッジを共有できます:"> +<!ENTITY torPreferences.bridgeCopy "ブリッジアドレスをコピー"> +<!ENTITY torPreferences.copied "コピーされました"> +<!ENTITY torPreferences.bridgeShowAll "すべてのブリッジを表示"> +<!ENTITY torPreferences.bridgeRemoveAll "すべてのブリッジを削除"> +<!ENTITY torPreferences.bridgeAdd "新しいブリッジを追加"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Tor Browser の内蔵ブリッジから選択してください"> +<!ENTITY torPreferences.bridgeSelectBuiltin "内蔵ブリッジを選択…"> +<!ENTITY torPreferences.bridgeRequest "ブリッジをリクエスト…"> +<!ENTITY torPreferences.bridgeEnterKnown "あなたが知っているブリッジアドレスを入力する"> +<!ENTITY torPreferences.bridgeAddManually "手動でブリッジを追加…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "詳細"> +<!ENTITY torPreferences.advancedDescription "Tor Browser がインターネットに接続する方法を設定します"> +<!ENTITY torPreferences.advancedButton "設定…"> +<!ENTITY torPreferences.viewTorLogs "Tor ログを表示"> +<!ENTITY torPreferences.viewLogs "ログを表示…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "すべてのブリッジを削除しますか?"> +<!ENTITY torPreferences.removeBridgesWarning "この操作は元に戻すことはできません。"> +<!ENTITY torPreferences.cancel "キャンセル"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR コードをスキャン"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "内蔵ブリッジ"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser は「pluggable transports」と呼ばれるいくつかの種類のブリッジを内蔵しています。"> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 は内蔵ブリッジの一種で、Tor トラフィックをランダムなものに見せかけます。前身の obfs3 ブリッジよりもブロックされにくくなっています。"> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake は内蔵ブリッジの一種で、ボランティアによって運営されている Snowflake プロキシを経由して接続することで検閲に対抗します。"> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure は内蔵ブリッジの一種で、Tor ではなく Microsoft のウェブサイトを使用しているように見せかけます。"> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "ブリッジをリクエスト"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "BridgeDB に接続しています。しばらくお待ちください。"> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "ブリッジをリクエストするには CAPTCHA を解いて下さい。"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "その解答は正しくありません。再度実行してください。"> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "ブリッジを入力"> +<!ENTITY torPreferences.provideBridgeHeader "信頼できる情報源から入手したブリッジの情報を入力してください。"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "接続設定"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Tor Browser がインターネットに接続する方法を設定します"> +<!ENTITY torPreferences.firewallPortsPlaceholder "カンマ区切り"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor ログ"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "接続していません"> +<!ENTITY torConnect.connectingConcise "接続しています…"> +<!ENTITY torConnect.tryingAgain "再試行…"> +<!ENTITY torConnect.noInternet "Tor Browser はインターネットに接続できませんでした"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser は Tor に接続できませんでした"> +<!ENTITY torConnect.assistDescriptionConfigure "接続を設定"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Tor があなたの現在地でブロックされている場合、ブリッジをお試しください。接続アシストで、現在地に適切なものを選ぶか、手動で#1できます。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "ブリッジを試しています…"> +<!ENTITY torConnect.tryingBridgeAgain "再試行中…"> +<!ENTITY torConnect.errorLocation "Tor Browser はあなたの現在地を見つけられませんでした"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser が最適なブリッジを選択するには、あなたの現在地が必要です。現在地を共有したくない場合は、手動で#1してください。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "この現在地の設定は正しいですか?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser は Tor に接続できませんでした。現在地の設定が正しいことを確認して再試行するか、#1してください。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser はまだ未接続です"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "接続アシスト"> +<!ENTITY torConnect.breadcrumbLocation "現在地の設定"> +<!ENTITY torConnect.breadcrumbTryBridge "ブリッジを試す"> +<!ENTITY torConnect.automatic "自動"> +<!ENTITY torConnect.selectCountryRegion "国や地域を選択"> +<!ENTITY torConnect.frequentLocations "よく選択される現在地"> +<!ENTITY torConnect.otherLocations "その他の現在地"> +<!ENTITY torConnect.restartTorBrowser "Tor Browser を再起動"> +<!ENTITY torConnect.configureConnection "接続を構成…"> +<!ENTITY torConnect.viewLog "ログを表示…"> +<!ENTITY torConnect.tryAgain "もう一度やり直してください"> +<!ENTITY torConnect.offline "インターネットに接続できません"> +<!ENTITY torConnect.connectMessage "Tor 設定の変更は接続するまで反映されません"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser は、Tor ネットワークへの接続を確立できませんでした"> +<!ENTITY torConnect.yourLocation "あなたの現在地"> +<!ENTITY torConnect.tryBridge "ブリッジを試す"> +<!ENTITY torConnect.autoBootstrappingFailed "自動設定に失敗しました"> +<!ENTITY torConnect.autoBootstrappingFailed "自動設定に失敗しました"> +<!ENTITY torConnect.cannotDetermineCountry "ユーザーの国を特定できませんでした"> +<!ENTITY torConnect.noSettingsForCountry "現在地で使用可能な設定がありません"> diff --git a/toolkit/torbutton/chrome/locale/ja/onboarding.properties b/toolkit/torbutton/chrome/locale/ja/onboarding.properties new file mode 100644 index 000000000000..90b33d73d513 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=%S を使うのは初めてですか?\n使い方と機能をご紹介します。 +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S が新しくなりました。\n新しい機能をご紹介します! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=閉じる +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=隠す +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=完了 diff --git a/toolkit/torbutton/chrome/locale/ja/torbutton.dtd b/toolkit/torbutton/chrome/locale/ja/torbutton.dtd new file mode 100644 index 000000000000..677e2d7daf1b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "新しい識別子"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "新しい識別子"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "このサイト用の Tor 回線を再構築"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "このサイト用の Tor 回線を再構築"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor ネットワークの設定…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor Browser の更新を確認..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookie の防御"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Torbutton を初期状態に戻す"> +<!ENTITY torbutton.prefs.security_settings "Tor Browser セキュリティの設定"> +<!ENTITY torbutton.cookiedialog.title "Cookie 保護を管理"> +<!ENTITY torbutton.cookiedialog.lockCol "保護済み"> +<!ENTITY torbutton.cookiedialog.domainCol "ホスト"> +<!ENTITY torbutton.cookiedialog.nameCol "名前"> +<!ENTITY torbutton.cookiedialog.pathCol "パス"> +<!ENTITY torbutton.cookiedialog.protectCookie "Cookie を保護"> +<!ENTITY torbutton.cookiedialog.removeCookie "Cookie を削除"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Cookie の保護を解除"> +<!ENTITY torbutton.cookiedialog.removeAllBut "保護されているもの以外削除"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "新しい Cookie を保護"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "新しい Cookie を保護しない"> +<!ENTITY torbutton.prefs.sec_caption "セキュリティレベル"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "セキュリティ・スライダーを使って、あなたのブラウザーをハッキングの試みに対してより脆弱にする可能性のあるブラウザーの機能を無効にできます。"> +<!ENTITY torbutton.prefs.sec_standard_label "標準"> +<!ENTITY torbutton.prefs.sec_standard_description "Tor Browser とウェブサイトのすべての機能が有効化されます。"> +<!ENTITY torbutton.prefs.sec_safer_label "より安全"> +<!ENTITY torbutton.prefs.sec_safer_description "ウェブサイトのしばしば危険である機能を無効化します。サイトによっては正常に動作しなくなります。"> +<!ENTITY torbutton.prefs.sec_safer_list_label "「より安全」設定では:"> +<!ENTITY torbutton.prefs.sec_safest_label "最も安全"> +<!ENTITY torbutton.prefs.sec_safest_description "静的なサイトと基本的なサービスに必要な機能だけを許可します。この変更は画像、メディア、スクリプトに影響します。"> +<!ENTITY torbutton.prefs.sec_safest_list_label "「最も安全」設定では:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "詳細情報"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "HTTPS 非対応のサイトで JavaScript が無効化されます。"> +<!ENTITY torbutton.prefs.sec_js_disabled "すべてのサイトで JavaScript が無効化されます。"> +<!ENTITY torbutton.prefs.sec_limit_typography "いくつかのフォントと数学記号が無効化されます。"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "いくつかのフォント、アイコン、数学記号および画像が無効化されます。"> +<!ENTITY torbutton.prefs.sec_click_to_play_media "オーディオ、ビデオ (HTML5 メディア)、WebGL はクリックすると再生されます。"> +<!ENTITY torbutton.prefs.sec_custom_warning "カスタム"> +<!ENTITY torbutton.prefs.sec_overview "セキュリティと匿名性を攻撃するために利用される可能性のあるウェブ機能を無効化します。"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "セキュリティレベル:標準"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "セキュリティレベル:より安全"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "セキュリティレベル:最も安全"> +<!ENTITY torbutton.prefs.sec_custom_summary "あなたのブラウザーにおけるカスタム設定はセキュリティ結果に影響を及ぼしません。セキュリティとプライバシーに関してはデフォルトのセキュリティレベルのひとつを選択することをおすすめいたします。"> +<!ENTITY torbutton.prefs.sec_restore_defaults "デフォルトにもどす"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "詳細セキュリティ設定…"> +<!ENTITY torbutton.prefs.sec_change "変更…"> +<!ENTITY torbutton.circuit_display.title "Tor 回線"> +<!ENTITY torbutton.circuit_display.new_circuit "このサイト用の回線を再構築"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "オニオンサービスのクライアント認証プロンプトを開く"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "この鍵を忘れないで、覚えておいてください。"> diff --git a/toolkit/torbutton/chrome/locale/ja/torbutton.properties b/toolkit/torbutton/chrome/locale/ja/torbutton.properties new file mode 100644 index 000000000000..3569249f6a71 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = インターネット +torbutton.circuit_display.ip_unknown = 不明な IP +torbutton.circuit_display.onion_site = Onion サイト +torbutton.circuit_display.this_browser = このブラウザー +torbutton.circuit_display.relay = リレー +torbutton.circuit_display.tor_bridge = ブリッジ +torbutton.circuit_display.unknown_country = 不明な国 +torbutton.circuit_display.guard = ガード +torbutton.circuit_display.guard_note = [ガード] ノードは変更されない場合があります。 +torbutton.circuit_display.learn_more = 詳細情報 +torbutton.circuit_display.click_to_copy = クリックしてコピー +torbutton.circuit_display.copied = コピーされました +torbutton.content_sizer.margin_tooltip = Tor Browser はウィンドウのサイズを平凡にするためにこのマージンを追加します。これにより、あなたのことをオンラインで追跡しにくくします。 +extensions.torbutton@torproject.org.description = Torbutton は Tor の設定を構成し、素早くかつ容易にプライベートな閲覧データをクリアするボタンを提供します。 +torbutton.popup.external.title = 外部ファイル種別をダウンロードしますか? +torbutton.popup.external.app = Tor Browser はこのファイルを表示できません。別のアプリケーションで開く必要があります。\n +torbutton.popup.external.note = ファイルのタイプの中に、アプリケーションが Tor を使用せずインターネットに接続する原因となる可能性があるものがあります。\n +torbutton.popup.external.suggest = 安全であるためには、オフラインの時のみダウンロードしたファイルを開くか、 Tails のような Tor のライブ CD を使用すべきです。\n +torbutton.popup.launch = ファイルをダウンロード +torbutton.popup.cancel = キャンセル +torbutton.popup.dontask = 今からファイルを自動的にダウンロードする +torbutton.popup.no_newnym = Tor コントロールポートにアクセスできませんでした。 Torbutton は新しい接続経路を安全に用意することができません。\n\nTor Browser バンドルを起動していますか? +torbutton.security_settings.menu.title = セキュリティ設定 +torbutton.title.prompt_torbrowser = Torbutton の重要な情報 +torbutton.popup.prompt_torbrowser = Torbutton は現在別様に動作しています。もう止めることはできません。\n\n私たちは、非 Tor ブラウジングのためにも使われているブラウザでの Torbutton の使用が安全ではないため、この変更を行いました。 他の方法で修正することができないバグも多すぎました。\n\n正常に Firefox を使用したい場合は、Torbutton をアンインストールして、Tor Browser バンドルをダウンロードすべきです。Tor Browser のプライバシー特性は Firefox が Torbutton と使われている時でも、通常の Firefox のそれよりも優勢です。\n\nTorbutton を削除するには、ツール->アドオン->エクステンションに行き、それから Torbutton の隣の削除ボタンをクリックしてください。 +torbutton.popup.short_torbrowser = Torbutton の重要な情報\n\nTorbutton は現在常に有効です。\n\n詳細は Torbutton をクリックしてください。 + +torbutton.popup.confirm_plugins = Flash などのプラグインはあなたのプライバシーや匿名性を損なう恐れがあります。 \n\nそれらは Tor を迂回しあなたの現在地や IP アドレスを漏らしてしまう恐れがあります。\n\n本当にプラグインを有効にしますか?\n\n +torbutton.popup.never_ask_again = 次からはたずねない +torbutton.popup.confirm_newnym = Tor Browser はすべてのウィンドウとタブを閉じようとしています。すべてのセッションは失われます。\n\nあなたの情報をリセットするために Tor Browser を再起動しますか?\n\n + +torbutton.maximize_warning = Tor Browser を最大化すると、ウェブサイトはあなたのモニターサイズを利用して追跡できるようになります。Tor Browser のウィンドウのサイズは初期状態のままにしておくことをおすすめします。 + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=このウェブサイト (%S) が HTML5 canvas 画像を使用しようとしています。これはあなたのコンピューターを識別するために使われる可能性があります。\n\nTor Browser に HTML5 Canvas 画像の使用を許可しますか? +canvas.notNow=今は許可しない +canvas.notNowAccessKey=N +canvas.allow=許可する +canvas.allowAccessKey=A +canvas.never=このサイトには許可しない (推奨) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S プロファイル問題 +profileReadOnly=読み込み専用のファイルシステムでは %S を実行できません。 %S を別の場所に移動してからもう一度実行してください。 +profileReadOnlyMac=読み込み専用のファイルシステムでは %S を実行できません。 %S をデスクトップやアプリケーションフォルダーに移動してからもう一度実行してください。 +profileAccessDenied=%S はプロファイルにアクセスする権限がありません。権限を設定してからもう一度試してみてください。 +profileMigrationFailed=存在しているプロファイル %S へのマイグレーションに失敗しました。\n新しい設定が適用されます。 + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S 更新をダウンロードしています + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=接続が暗号化されています (Onion サービス、%1$S、鍵長 %2$S ビット、%3$S) +pageInfo_OnionEncryption=接続が暗号化されています (Onion サービス) +pageInfo_OnionName=Onion 名: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=詳細情報 +onionServices.errorPage.browser=ブラウザ +onionServices.errorPage.network=ネットワーク +onionServices.errorPage.onionSite=Onion サイト +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.descNotFound.header=Onion サイトが見つかりません +onionServices.descNotFound=おそらく、Onion サイトがオフラインになっています。Onion サイトの管理者にお問い合わせください。 +onionServices.descNotFound.longDescription=詳細: %S — 指定したオニオンサービス記述子はハッシュリングに見つかることができないため、クライアントによって連絡可能ではありません。 +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.descInvalid.header=Onion サイトに到達できません +onionServices.descInvalid=内部エラーにより Onion サイトに到達できません。 +onionServices.descInvalid.longDescription=詳細: %S — 指定したオニオンサービス記述子は解析されることができません、それとも署名認証が失敗しました。 +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.introFailed.header=Onion サイトとの接続が切断されました +onionServices.introFailed=おそらく、Onion サイトがオフラインになっています。Onion サイトの管理者にお問い合わせください。 +onionServices.introFailed.longDescription=詳細: %S — 紹介は失敗しました、つまり記述子は見つかりましたがサービスはもはや紹介ポイントと接続されていません。おそらくサービスは記述子を変更しました、それとも動作していません。 +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.rendezvousFailed.header=Onion サイトに接続できません +onionServices.rendezvousFailed=Onion サイトがビジー状態であるか、または Tor ネットワークに大きな負荷がかかっています。時間をおいて再度やり直してください。 +onionServices.rendezvousFailed.longDescription=詳細: %S — クライアントとサービスの合流は失敗しました、つまりクライアントは接続を仕上げれませんでした。 +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=認証が必要です +onionServices.clientAuthMissing.header=Onion サイトは認証を必要としています +onionServices.clientAuthMissing=Onion サイトへのアクセスに鍵が必要ですが、何も入力されませんでした。 +onionServices.clientAuthMissing.longDescription=詳細: %S — クライアントは指定したオニオンサービス記述子をダウンロードしましたが、欠測クライアント承認情報のため復号化できませんでした。 +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=認証に失敗しました +onionServices.clientAuthIncorrect.header=Onion サイトの認証に失敗しました +onionServices.clientAuthIncorrect=入力された鍵が正しくないか、または鍵が取り消されました。Onion サイトの管理者にお問い合わせください。 +onionServices.clientAuthIncorrect.longDescription=詳細: %S — クライアントは指定したオニオンサービス記述子をダウンロードしましたが、提供されたクライアント承認情報で復号化できませんでした。アクセスは取り消された可能性があります。 +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.badAddress.header=無効な Onion サイトアドレスです +onionServices.badAddress=入力された Onion サイトアドレスは有効ではありません。アドレスが正しく入力されているかをご確認ください。 +onionServices.badAddress.longDescription=詳細: %S — 提供された .onion アドレスは無効です。このエラーは次の理由で表示されます: アドレスのチェックサムが正しくない、ed25519 公開鍵が違う、エンコーディングが違う。 +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Onion サイトの読み込み中に問題が発生しました +onionServices.introTimedOut.header=Onion サイトの回線作成がタイムアウトしました +onionServices.introTimedOut=ネットワークの接続状態が不安定だったため、Onion サイトへの接続に失敗しました。 +onionServices.introTimedOut.longDescription=詳細: %S — 合流回線を構築中に、指定したオニオンサービスとの接続はタイムアウトされました。 +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%s はあなたの認証を要求しています。 +onionServices.authPrompt.keyPlaceholder=この Onion サービスのあなたの秘密鍵を入力してください +onionServices.authPrompt.done=完了 +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=有効なキーを入力してください(52 Base32文字または44 Base64文字) +onionServices.authPrompt.failedToSetKey=あなたのキーでTorを構成できませんでした +onionServices.authPreferences.header=Onion サービス認証 +onionServices.authPreferences.overview=一部の Onion サービスでは、アクセスする前に鍵(パスワードの様なもの)で自分自身を識別する必要があります。 +onionServices.authPreferences.savedKeys=保存されている鍵… +onionServices.authPreferences.dialogTitle=Onion サービス鍵 +onionServices.authPreferences.dialogIntro=以下の Onion サイトの鍵が、あなたのコンピュータに保存されています +onionServices.authPreferences.onionSite=Onion サイト +onionServices.authPreferences.onionKey=鍵 +onionServices.authPreferences.remove=解除 +onionServices.authPreferences.removeAll=すべて削除 +onionServices.authPreferences.failedToGetKeys=Tor から鍵を取得できません +onionServices.authPreferences.failedToRemoveKey=鍵を削除できません +onionServices.v2Deprecated.pageTitle=V2 Onion サイトの非推奨についての警告 +onionServices.v2Deprecated.header=もうすぐバージョン 2 Onion サイトは非推奨になります +onionServices.v2Deprecated=この Onion サイトはもうすぐ非推奨になります。サイト管理者に連絡し、アップグレードを依頼してください。 +onionServices.v2Deprecated.longDescription=Tor は、バージョン 2 の Onion サービスのサポートを 2021 年 7 月に終了します。今後、バージョン 2 の Onion サイトには到達できなくなります。あなたがサイト管理者の場合、早急にバージョン 3 の Onion サービスにアップグレードしてください。 +onionServices.v2Deprecated.tryAgain=了解 +onionServices.v2Deprecated.tooltip=この Onion サイトはもうすぐ非推奨になります + +# Onion-Location strings. +onionLocation.alwaysPrioritize=常に Onion を優先する +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=今は許可しない +onionLocation.notNowAccessKey=n +onionLocation.description=このサイトは、現在よりもプライベートで安全なバージョンが利用可能です。これは、Onion サービスを介して Tor ネットワーク上で利用できます。Onion サービスは、監視および検閲を無効化し、ウェブサイトの公開者および閲覧者を保護する上で役立ちます。 +onionLocation.tryThis=Onion サービスを試す +onionLocation.onionAvailable=.onion 利用可能 +onionLocation.learnMore=詳細情報 +onionLocation.always=常に +onionLocation.askEverytime=毎回尋ねる +onionLocation.prioritizeOnionsDescription=存在する場合は .onion サイトを優先的に利用する。 +onionLocation.onionServicesTitle=Onion サービス + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=暗号通貨アドレス (%S) は安全ではない Web サイトからコピーされました。変更された可能性があります。 +cryptoSafetyPrompt.whatCanHeading=何ができますか? +cryptoSafetyPrompt.whatCanBody=新しい回路で安全な接続を確立してから再接続をするか、リスクを許容してこの警告を無視することができます。 +cryptoSafetyPrompt.learnMore=詳細情報 +cryptoSafetyPrompt.primaryAction=新しいサーキットを利用してタブを再読み込み +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=警告を無視 +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=ご注意ください +rulesets.warningDescription=ルールセットを追加または変更すると、攻撃者があなたのブラウザをハイジャックする可能性があります。あなたが行っている操作の意味を理解している場合のみ、操作を行ってください。 +rulesets.warningEnable=これらの設定にアクセスしようとすると、警告が表示されます +rulesets.warningButton=危険を承知で続行 +# Ruleset list +rulesets.rulesets=ルールセット +rulesets.noRulesets=ルールセットが見つかりません +rulesets.noRulesetsDescr=Tor Browser でルールセットを保存すると、ここに表示されます。 +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=最終更新 %S +rulesets.neverUpdated=一度も更新されていないか、最後の更新に失敗しました +rulesets.enabled=常駐する +rulesets.disabled=無効 +# Ruleset details/edit ruleset +rulesets.edit=編集 +rulesets.name=名前 +rulesets.jwk=JWK +rulesets.pathPrefix=パスプレフィックス +rulesets.scope=スコープ +rulesets.enable=このルールセットを有効にする +rulesets.checkUpdates=更新を確認 +rulesets.jwkPlaceholder=このルールセットを JWK (JSON Web Key) 形式で署名するために使用する鍵 +rulesets.jwkInvalid=JWK を解析できないか、または有効な鍵ではありません +rulesets.pathPrefixPlaceholder=ルールセットが必要とするファイルを含む URL プレフィックス +rulesets.pathPrefixInvalid=パスプレフィックスが有効な HTTP(S) URL ではありません +rulesets.scopePlaceholder=ルールのスコープを表す正規表現 +rulesets.scopeInvalid=スコープが正規表現として解析できませんでした +rulesets.save=保存 +rulesets.cancel=キャンセル diff --git a/toolkit/torbutton/chrome/locale/ja/torlauncher.properties b/toolkit/torbutton/chrome/locale/ja/torlauncher.properties new file mode 100644 index 000000000000..a730d168ab39 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ja/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Launcher + +torlauncher.tor_exited_during_startup=Tor が起動中に終了しました。これは、torrc ファイルの誤りや、Tor または他のプログラムのバグ、もしくはハードウェアの故障に起因しているかもしれません。問題を解決して Tor を再起動するまで、Tor Browser は起動されません。 +torlauncher.tor_exited=Tor が突然終了しました。原因はおそらく Tor 自体のバグか、他の常駐プログラムか、あるいはハードウェアが問題です。Tor を再起動するまで、 Tor Browser はウェブサイトに一切接続できません。再起動しても解決されない場合、Tor ログファイルをサポートチームに送信してください。 +torlauncher.tor_exited2=Tor を再起動しても、あなたのブラウザータブはそのまま残ります。 +torlauncher.tor_controlconn_failed=Tor コントロールポートに接続できませんでした。 +torlauncher.tor_failed_to_start=Tor の開始に失敗しました。 +torlauncher.tor_control_failed=Tor の制御に失敗しました。 +torlauncher.tor_bootstrap_failed=Tor は Tor ネットワーク接続の確立に失敗しました。 +torlauncher.tor_bootstrap_failed_details=%1$S 失敗 (%2$S)。 + +torlauncher.unable_to_start_tor=Tor を開始できません。\n\n%S +torlauncher.tor_missing=Tor の実行可能ファイルが見つかりません。 +torlauncher.torrc_missing=torrc ファイルが見つからず、作成もできませんでした。 +torlauncher.datadir_missing=Tor のデータディレクトリが存在せず、作成もできませんでした。 +torlauncher.onionauthdir_missing=Tor Onion 認証ディレクトリが存在せず、また作成することもできませんでした。 +torlauncher.password_hash_missing=ハッシュ化されたパスワードの入手に失敗しました。 + +torlauncher.failed_to_get_settings=Tor の設定を回復できません。\n\n%S +torlauncher.failed_to_save_settings=Tor の設定を保存できません。\n\n%S +torlauncher.ensure_tor_is_running=Tor が起動しているかご確認ください。 + +torlauncher.error_proxy_addr_missing=インターネットのアクセスにプロキシを使用するには Tor の構成へ IP アドレスまたはホスト名とポート番号を両方指定する必要があります。 +torlauncher.error_proxy_type_missing=プロキシの種類を選択する必要があります。 +torlauncher.error_bridges_missing=1 つ以上のブリッジを記述する必要があります。 +torlauncher.error_default_bridges_type_missing=提供されたブリッジ用のトランスポートタイプを選択する必要があります。 +torlauncher.error_bridgedb_bridges_missing=ブリッジをリクエストしてください。 +torlauncher.error_bridge_bad_default_type=トランスポートタイプ %S がある提供されたブリッジに利用できるものがありません。設定を調整してください。 + +torlauncher.bridge_suffix.meek-amazon=(中国で動作) +torlauncher.bridge_suffix.meek-azure=(中国で動作) + +torlauncher.request_a_bridge=ブリッジをリクエスト… +torlauncher.request_a_new_bridge=新たなブリッジをリクエスト… +torlauncher.contacting_bridgedb=BridgeDB に接続中です。しばらくお待ちください。 +torlauncher.captcha_prompt=ブリッジをリクエストするには CAPTCHA を解いてください。 +torlauncher.bad_captcha_solution=その解答は正しくありません。再度実行してください。 +torlauncher.unable_to_get_bridge=BridgeDB からブリッジを入手できません。\n\n%S +torlauncher.no_meek= このブラウザはmeekを使用するように設定されていないため、ブリッジを入手できません。 +torlauncher.no_bridges_available=今回利用可能なブリッジがありません。 + +torlauncher.connect=接続 +torlauncher.restart_tor=Tor を再起動 +torlauncher.quit=終了 +torlauncher.quit_win=終了 +torlauncher.done=完了 + +torlauncher.forAssistance=サポートについては、%S にお問い合わせください +torlauncher.forAssistance2=サポートについては、%Sをご覧ください。 + +torlauncher.copiedNLogMessages=コピーが成功しました。 %S 個の Tor ログファイルがテキストエディターやメールにペーストする準備ができました。 + +torlauncher.bootstrapStatus.starting=起動中 +torlauncher.bootstrapStatus.conn_pt=ブリッジと接続中 +torlauncher.bootstrapStatus.conn_done_pt=ブリッジと接続完了 +torlauncher.bootstrapStatus.conn_proxy=プロキシと接続中 +torlauncher.bootstrapStatus.conn_done_proxy=プロキシと接続完了 +torlauncher.bootstrapStatus.conn=Tor リレーと接続中 +torlauncher.bootstrapStatus.conn_done=Tor リレーと接続完了 +torlauncher.bootstrapStatus.handshake=Tor リレーとネゴシエート中 +torlauncher.bootstrapStatus.handshake_done=Tor リレーとネゴシエート完了 +torlauncher.bootstrapStatus.onehop_create=暗号化されたディレクトリとの接続を確立中 +torlauncher.bootstrapStatus.requesting_status=ネットワークを検索中 +torlauncher.bootstrapStatus.loading_status=ネットワークを読込中 +torlauncher.bootstrapStatus.loading_keys=認証局の署名を読込中 +torlauncher.bootstrapStatus.requesting_descriptors=リレー情報を要求中 +torlauncher.bootstrapStatus.loading_descriptors=リレー情報を読込中 +torlauncher.bootstrapStatus.enough_dirinfo=リレー情報を読込完了 +torlauncher.bootstrapStatus.ap_conn_pt=回線を構築中:ブリッジと接続中 +torlauncher.bootstrapStatus.ap_conn_done_pt=回線を構築中:ブリッジと接続完了 +torlauncher.bootstrapStatus.ap_conn_proxy=回線を構築中:プロキシと接続中 +torlauncher.bootstrapStatus.ap_conn_done_proxy=回線を構築中:プロキシと接続完了 +torlauncher.bootstrapStatus.ap_conn=回線を構築中:Tor リレーと接続中 +torlauncher.bootstrapStatus.ap_conn_done=回線を構築中:Tor リレーと接続完了 +torlauncher.bootstrapStatus.ap_handshake=回線を構築中:Tor リレーとネゴシエート中 +torlauncher.bootstrapStatus.ap_handshake_done=回線を構築中:Tor リレーとネゴシエート完了 +torlauncher.bootstrapStatus.circuit_create=回線を構築中:Tor 回線を構築中 +torlauncher.bootstrapStatus.done=Tor ネットワークに接続しました! + +torlauncher.bootstrapWarning.done=完了 +torlauncher.bootstrapWarning.connectrefused=接続に失敗 +torlauncher.bootstrapWarning.misc=その他 +torlauncher.bootstrapWarning.resourcelimit=リソース不足 +torlauncher.bootstrapWarning.identity=識別子の不一致 +torlauncher.bootstrapWarning.timeout=接続タイムアウト +torlauncher.bootstrapWarning.noroute=ホストへの経路が見つかりません +torlauncher.bootstrapWarning.ioerror=読み書きエラー +torlauncher.bootstrapWarning.pt_missing=プラグ可能な転送が見つかりません + +torlauncher.nsresult.NS_ERROR_NET_RESET=サーバーへの接続が切断されました。\n +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=サーバーに接続できませんでした。\n +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=プロクシーに接続できませんでした。 + +torlauncher.copiedNLogMessagesShort=%S ログをコピーしました diff --git a/toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd new file mode 100644 index 000000000000..c8ef0ce395e6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName;ს შემქმნელია"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", არამომგებიანი დაწესებულება, რომელიც საქმიანობს ინტერნეტში თქვენი პირადულობისა და თავისუფლების უზრუნველსაყოფად."> + +<!ENTITY help.start "დახმარება გსურთ?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "გაიღეთ შემოწირულობა"> +<!ENTITY help.or "ან"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "შემოგვიერთდით"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "კითხვები გაქვთ?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "დაეხმარეთ Tor-ქსელს გაფართოებაში!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "სალიცენზიო მონაცემები"> +<!ENTITY tor.TrademarkStatement "„Tor“ და „Onion Logo“ წარმოადგენს სავაჭრო ნიშნებს, რომელთა მესაკუთრეცაა Tor Project Inc."> diff --git a/toolkit/torbutton/chrome/locale/ka/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ka/aboutTBUpdate.dtd new file mode 100644 index 000000000000..a8f2a496ca0d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor-ბრაუზერის ცვლილებების ისტორია"> +<!ENTITY aboutTBUpdate.updated "Tor-ბრაუზერი განახლებულია."> +<!ENTITY aboutTBUpdate.linkPrefix "ამ გამოშვების შესახებ უახლესი ინფორმაციის მისაღებად"> +<!ENTITY aboutTBUpdate.linkLabel "ეწვიეთ ჩვენს ვებსაიტს"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "ვერსია"> +<!ENTITY aboutTBUpdate.releaseDate "გამოშვების თარიღი"> +<!ENTITY aboutTBUpdate.releaseNotes "გამოშვების შენიშვნები"> diff --git a/toolkit/torbutton/chrome/locale/ka/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ka/aboutTor.dtd new file mode 100644 index 000000000000..e0111be97742 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tor-ის შესახებ"> + +<!ENTITY aboutTor.viewChangelog.label "ცვლილებების ნახვა"> + +<!ENTITY aboutTor.ready.label "მოინახულეთ. უსაფრთხოდ."> +<!ENTITY aboutTor.ready2.label "თქვენ მზად ხართ მსოფლიოში ყველაზე მეტად დაცული და პირადი ბრაუზერის გამოყენებისთვის."> +<!ENTITY aboutTor.failure.label "რაღაც რიგზე ვერაა!"> +<!ENTITY aboutTor.failure2.label "Tor არ მუშაობს ამ ბრაუზერში."> + +<!ENTITY aboutTor.search.label " ძიება DuckDuckGo-თი"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "კითხვები გაქვთ?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "გაეცანით Tor-ბრაუზერის სახელმძღვანელოს »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "ხ"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor-ბრაუზერის სახელმძღვანელო"> + +<!ENTITY aboutTor.tor_mission.label "Tor-პროექტი წარმოადგენს 501(c)(3) არამომგებიან დაწესებულებას, რომელიც ხელს უწყობს ადამიანის უფლებების დაცვისა და თავისუფლების ხარისხის გაუმჯობესებას უფასო და ღია წყაროს მქონე, ვინაობისა და პირადი მონაცემების გამჟღავნებისგან ასარიდებელი საშუალებების შექმნითა და გავრცელებით, მათზე შეუზღუდავი წვდომისა და გამოყენების უზრუნველყოფით, შემდგომ კი მათთან დაკავშირე� ��ით, მეცნიერული გაგებისა და საზოგადოების ცნობიერების დონის ამაღლებით."> +<!ENTITY aboutTor.getInvolved.label "შემოგვიერთდით »"> + +<!ENTITY aboutTor.newsletter.tagline "მიიღეთ სიახლეები Tor-ისგან პირდაპირ თქვენს საფოსტო ყუთში."> +<!ENTITY aboutTor.newsletter.link_text "გამოიწერეთ Tor-ის სიახლეები."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor უფასოა თქვენნაირი ადამიანების შემოწირულობების წყალობით."> +<!ENTITY aboutTor.donationBanner.buttonA "გაიღეთ თანხა"> + +<!ENTITY aboutTor.alpha.ready.label "გამოცადეთ. გულდასმით."> +<!ENTITY aboutTor.alpha.ready2.label "თქვენ მზად ხართ მსოფლიოში ყველაზე მეტად დაცული და პირადი ბრაუზერის გამოსაცდელად."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor-ბრაუზერი Alpha მეტად არამდგრადი ვერსიის Tor-ბრაუზერია და გამოიყენება ახალი შესაძლებლობების წინასწარ მოსასინჯად, წარმადობის შესაფასებლად და მოსაზრებების მოსახსენებლად საბოლოო გამოშვებამდე."> +<!ENTITY aboutTor.alpha.bannerLink "მოგვახსენეთ ხარვეზის შესახებ Tor-ის ფორუმზე"> + +<!ENTITY aboutTor.nightly.ready.label "გამოცადეთ. გულდასმით."> +<!ENTITY aboutTor.nightly.ready2.label "თქვენ მზად ხართ მსოფლიოში ყველაზე მეტად დაცული და პირადი ბრაუზერის გამოსაცდელად."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor-ბრაუზერი Nightly მეტად არამდგრადი ვერსიის Tor-ბრაუზერია და გამოიყენება ახალი შესაძლებლობების წინასწარ მოსასინჯად, წარმადობის შესაფასებლად და მოსაზრებების მოსახსენებლად საბოლოო გამოშვებამდე."> +<!ENTITY aboutTor.nightly.bannerLink "მოგვახსენეთ ხარვეზის შესახებ Tor-ის ფორუმზე"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ᲞᲘᲠᲐᲓᲣᲚᲝᲑᲐ ᲣᲖᲠᲣᲜᲕᲔᲚᲧᲝᲤᲡ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "ᲨᲔᲣᲞᲝᲕᲠᲝᲑᲐᲡ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "ᲓᲐᲣᲓᲔᲒᲠᲝᲑᲐᲡ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "ᲗᲐᲕᲘᲡᲣᲤᲚᲔᲑᲐᲡ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "გაიღეთ თანხა"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "თქვენი შემოწირულობა გაორმაგდება Tor-ის მეგობრების შემწეობით $100.000-ამდე."> diff --git a/toolkit/torbutton/chrome/locale/ka/brand.dtd b/toolkit/torbutton/chrome/locale/ka/brand.dtd new file mode 100644 index 000000000000..e3fd367d27ba --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor-ბრაუზერი"> +<!ENTITY brandShortName "Tor-ბრაუზერი"> +<!ENTITY brandFullName "Tor-ბრაუზერი"> +<!ENTITY vendorShortName "Tor-პროექტი"> +<!ENTITY trademarkInfo.part1 "„Tor“ და „Onion Logo“ წარმოადგენს სავაჭრო ნიშნებს, რომელთა მესაკუთრეცაა Tor Project Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor-ბრაუზერი"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "დააწკაპეთ დაყენებული სისტემური მოდულების ჩასატვირთად"> +<!ENTITY plugins.installed.enable "მოდულების ჩართვა"> +<!ENTITY plugins.installed.disable "მოდულების გამორთვა"> +<!ENTITY plugins.installed.disable.tip "დააწკაპეთ სისტემური მოდულების ჩატვირთვის ასარიდებლად"> diff --git a/toolkit/torbutton/chrome/locale/ka/brand.properties b/toolkit/torbutton/chrome/locale/ka/brand.properties new file mode 100644 index 000000000000..8848da4b077e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor-ბრაუზერი +brandShortName=Tor-ბრაუზერი +brandFullName=Tor-ბრაუზერი +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor-ბრაუზერი +vendorShortName=Tor-პროექტი + +homePageSingleStartMain=Firefox Start, სწრაფი საწყისი გვერდი ჩაშენებული ძიების ველით +homePageImport=გადმოიტანეთ თქვენი საწყისი გვერდი – %S + +homePageMigrationPageTitle=საწყისი გვერდის არჩევა +homePageMigrationDescription=გთხოვთ აირჩიოთ სასურველი საწყისი გვერდი: + +syncBrandShortName=Sync diff --git a/toolkit/torbutton/chrome/locale/ka/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ka/branding/brand.ftl new file mode 100644 index 000000000000..df85c165ddf2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor-ბრაუზერი +-brand-short-name = Tor-ბრაუზერი +-brand-full-name = Tor-ბრაუზერი +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor-ბრაუზერი +-vendor-short-name = Tor-პროექტი +trademarkInfo = „Tor“ და „Onion Logo“ წარმოადგენს სავაჭრო ნიშნებს, რომელთა მესაკუთრეცაა Tor Project Inc. diff --git a/toolkit/torbutton/chrome/locale/ka/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ka/browserOnboarding.properties new file mode 100644 index 000000000000..8192b37f3eb7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=მოგესალმებით +onboarding.tour-tor-welcome.title=ყველაფერი მზადაა. +onboarding.tour-tor-welcome.description=Tor-ბრაუზერი გთავაზობთ უმაღლესი ხარისხის მომსახურებას, პირადი მონაცემების დაცვისა და უსაფრთხოების უზრუნველსაყოფად, გვერდების მონახულებისას. ახლა უკვე დაცული ხართ თვალთვალისგან, მეთვალყურეობისა და ცენზურისგან. მოცემული მეგზური ყველაფერს განგიმარტავთ. +onboarding.tour-tor-welcome.next-button=იხილეთ პირადულობა + +onboarding.tour-tor-privacy=პირადულობა +onboarding.tour-tor-privacy.title=მოიცილეთ მეთვალყურეები და ცნობისმოყვარეები +onboarding.tour-tor-privacy.description=Tor-ბრაუზერი აცალკევებს საიტის ფუნთუშებს და შლის მონახულებული გვერდების ისტორიას დახურვისთანავე. მსგავსი დამატებული ცვლილებები უზრუნველყოფს პირადი მონაცემების დაცვისა და უსაფრთხოების მაღალ ხარისხს ბრაუზერში. დაწკაპეთ „Tor-ქსელი“ და იხილეთ, თუ როგორ ხდება დაცვა ქსელის დონეზე. +onboarding.tour-tor-privacy.button=იხილეთ Tor-ქსელი + +onboarding.tour-tor-network=Tor-ქსელი +onboarding.tour-tor-network.title=ერთპიროვნული მართვისგან დაცული ქსელი. +onboarding.tour-tor-network.description=Tor-ბრაუზერით უკავშირდებით Tor-ქსელს, რომლის მუშაობასაც უზრუნველყოფს ათასობით მოხალისე, მთელი მსოფლიოს მასშტაბით. განსხვავებით VPN-ისგან, აქ არ გიწევთ ვინმე საერთო მმართველის ან დაწესებულების ნდობა, ინტერნეტით ვინაობის გაუმჟღავნებლად სარგებლობისთვის. +onboarding.tour-tor-network.description-para2=სიახლე: Tor-ქსელის გამართვა, აგრეთვე, ხიდების მოთხოვნა, Tor-ის შეზღუდვის პირობებში, ახლა უკვე შეგიძლიათ პარამეტრებიდან. +onboarding.tour-tor-network.action-button=გამართეთ Tor-ქსელის პარამეტრები +onboarding.tour-tor-network.button=იხილეთ წრედის არე + +onboarding.tour-tor-circuit-display=წრედის არე +onboarding.tour-tor-circuit-display.title=იხილეთ თქვენი კავშირის არხი. +onboarding.tour-tor-circuit-display.description=თითოეულ მისამართზე გადასვლისას, მიმოცვლილი მონაცემები სრულად გარდაიქმნება და იშიფრება, მსოფლიოს ნებისმიერ წერტილიდან შემთხვევით შერჩეული სამი Tor-გადამცემით შექმნილ წრედში. ვებსაიტებს არ შეეძლება დადგენა, საიდან უკავშირდებით. ახალი წრედის მოთხოვნისთვის, წრედის არეში დაწკაპეთ „ახალი წრედი ამ საიტისთვის“. +onboarding.tour-tor-circuit-display.button=არხის ნახვა +onboarding.tour-tor-circuit-display.next-button=იხილეთ უსაფრთხოება + +onboarding.tour-tor-security=უსაფრთხოება +onboarding.tour-tor-security.title=მოარგეთ საკუთარ მოთხოვნილებებს +onboarding.tour-tor-security.description=ჩვენ ასევე გთავაზობთ დამატებით პარამეტრებს, ბრაუზერის უსაფრთხოების კიდევ უფრო მეტად ასამაღლებლად. ჩვენი უსაფრთხოების პარამეტრები, საშუალებას გაძლევთ შეზღუდოთ გვერდის ის ნაწილები, რომლებიც თქვენს კომპიუტერზე შეტევისთვის შეიძლება გამოიყენონ. დაწკაპეთ ქვემოთ და იხილეთ ამ პარამეტრების შესახებ ვრცლად. +onboarding.tour-tor-security.description-suffix=გაითვალისწინეთ: ნაგულისხმევად, NoScript და HTTPS Everywhere არაა წარმოდგენილი ხელსაწყოთა ზოლზე, თუმცა სურვილისამებრ, შეგიძლიათ იქვე განათავსოთ. +onboarding.tour-tor-security-level.button=უსაფრთხოების დონის ნახვა +onboarding.tour-tor-security-level.next-button=იხილეთ გამოყენების რჩევები + +onboarding.tour-tor-expect-differences=გამოყენება +onboarding.tour-tor-expect-differences.title=მოსალოდნელი ცვლილებები. +onboarding.tour-tor-expect-differences.description=Tor-ის მიერ შემოთავაზებული უსაფრთხოებისა და პირადი მონაცემების დაცვის საშუალებებმა, შესაძლოა მცირე ცვლილებები გამოიწვიოს გვერდების მონახულებისას. ზოგიერთი რამ ცოტა შენელდება და თქვენ მიერ შერჩეული უსაფრთხოების დონიდან გამომდინარე, გვერდების ცალკეული ნაწილები არ იმუშავებს ან არ ჩაიტვირთება. ამასთანავე, საიტების ნაწილზე შესაძლოა, ხშირად მოგიწიოთ იმ� �ს დადასტურება, რომ ადამიანი ხართ და არა რობოტი. +onboarding.tour-tor-expect-differences.button=იხილეთ ხ.დ.კ. +onboarding.tour-tor-expect-differences.next-button=იხილეთ Onion-მომსახურებები + +onboarding.tour-tor-onion-services=Onion-მომსახურებები +onboarding.tour-tor-onion-services.title=იყავით მეტად-დაცული. +onboarding.tour-tor-onion-services.description=Onion-მომსახურებები წარმოადგენს საიტებს .onion დაბოლოებით, რომელიც განსაკუთრებულად მაღალ უსაფრთხოების დონეს სთავაზობს მასალების განმთავსებლებსაც და მნახველებსაც, მათ შორის ცენზურისგან თავის არიდების დამატებით შესაძლებლობებს. Onion-მომსახურებები საშუალებას აძლევს ნებისმიერს, შიგთავსი და მომსახურებები მომხმარებლებს მიაწოდოს ვინაობის გაუმხელად. დაწკაპეთ ქ� �ემოთ, DuckDuckGo-ს onion-გვერდის მოსანახულებლად. +onboarding.tour-tor-onion-services.button=ეწვიეთ Onion-ს +onboarding.tour-tor-onion-services.next-button=მზადაა + +onboarding.overlay-icon-tooltip-updated2=იხილეთ, როგორ განახლდა\n%S +onboarding.tour-tor-update.prefix-new=ახალი +onboarding.tour-tor-update.prefix-updated=განახლებული + +onboarding.tour-tor-toolbar=ხელსაწყოთა ზოლი +onboarding.tour-tor-toolbar-update-9.0.title=მშვიდობით Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=გვსურს, რომ Tor სრულად იყოს ჩაშენებული Tor-ბრაუზერში. +onboarding.tour-tor-toolbar-update-9.0.description-para2=სწორედ ამიტომ, ამიერიდან Tor-წრედს იხილავთ onion-ღილაკის ნაცვლად, [i] ნიშანზე დაწკაპებისას მისამართების ველში, ხოლო ახალი ვინაობის მოთხოვნა შეგეძლებათ ხელსაწყოთა ზოლიდან ან [≡] მენიუდან. +onboarding.tour-tor-toolbar-update-9.0.button=როგორ ხდება ახალი ვინაობის მოთხოვნა +onboarding.tour-tor-toolbar-update-9.0.next-button=იხილეთ Tor-ქსელი + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=შემდეგი +onboarding.tor-circuit-display.done=მზადაა +onboarding.tor-circuit-display.one-of-three=1 – 3 +onboarding.tor-circuit-display.two-of-three=2 – 3 +onboarding.tor-circuit-display.three-of-three=3 – 3 + +onboarding.tor-circuit-display.intro.title=როგორ მუშაობს წრედები? +onboarding.tor-circuit-display.intro.msg=წრედები იქმნება შემთხვევით შერჩეული გადამცემებით, რომლებსაც წარმოადგენს მთელ მსოფლიოში გაბნეული კომპიუტერები, გამართულნი საგანგებოდ Tor-ქსელის მონაცემების გასატარებლად. წრედები საშუალებას გაძლევთ, მოინახულოთ გვერდები პირადი მონაცემების დაცვით და წვდომა მიიღოთ Onion-მომსახურებებთან. + +onboarding.tor-circuit-display.diagram.title=წრედის არე +onboarding.tor-circuit-display.diagram.msg=სქემაზე მოცემულია გადამცემები, რომლებიც ქმნის წრედს ამ საიტის მოსანახულებლად. სხვადასხვა საიტებზე მოქმედებებს შორის ურთიერთკავშირის დადგენის ასარიდებლად, თითოეულ საიტზე წვდომისთვის განსხვავებული წრედი გამოიყენება. + +onboarding.tor-circuit-display.new-circuit.title=ახალი წრედი გესაჭიროებათ? +onboarding.tor-circuit-display.new-circuit.msg=თუ ვერ ახერხებთ დაკავშირებას საიტთან, რომლის ნახვაც გსურთ ან კიდევ არასათანადოდ ჩაიტვირთა, მაშინ შეგიძლიათ ამ ღილაკის გამოყენებით ხელახლა ჩატვირთოთ საიტი ახალი წრედით. diff --git a/toolkit/torbutton/chrome/locale/ka/network-settings.dtd b/toolkit/torbutton/chrome/locale/ka/network-settings.dtd new file mode 100644 index 000000000000..0207018a1b1e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor-ქსელის პარამეტრები"> +<!ENTITY torsettings.wizard.title.default "Tor-თან დაკავშირება"> +<!ENTITY torsettings.wizard.title.configure "Tor-ის ქსელის პარამეტრები"> +<!ENTITY torsettings.wizard.title.connecting "კავშირის დამყარება"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor-ბრაუზერის ენა"> +<!ENTITY torlauncher.localePicker.prompt "გთხოვთ, აირჩიოთ ენა."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Tor-თან დასაკავშირებლად დააწკაპეთ „დაკავშირებაზე“."> +<!ENTITY torSettings.configurePrompt "დააწკაპეთ „გამართვაზე“ ქსელის სათანადო პარამეტრების შესარჩევად, თუ ისეთ ქვეყანაში იმყოფებით, სადაც შეზღუდულია Tor (ასეთებია ეგვიპტე, ჩინეთი, თურქეთი) ან თუ ისეთი კერძო ქსელიდან ცდილობთ დაკავშირებას, რომელიც საჭიროებს პროქსის."> +<!ENTITY torSettings.configure "გამართვა"> +<!ENTITY torSettings.connect "დაკავშირება"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "ელოდება Tor-ს გასაშვებად..."> +<!ENTITY torsettings.restartTor "Tor-ის ხელახლა გაშვება"> +<!ENTITY torsettings.reconfigTor "ხელახლა გამართვა"> + +<!ENTITY torsettings.discardSettings.prompt "თქვენ უკვე გამართული გაქვთ Tor-ის გადამცემი ხიდები ან მითითებული გაქვთ ადგილობრივი პროქსის პარამეტრები.  Tor-ქსელთან პირდაპირ დასაკავშირებლად, საჭიროა ამ პარამეტრების მოცილება."> +<!ENTITY torsettings.discardSettings.proceed "პარამეტრების მოცილება და დაკავშირება"> + +<!ENTITY torsettings.optional "არასავალდებულო"> + +<!ENTITY torsettings.useProxy.checkbox "ინტერნეტთან დასაკავშირებლად პროქსი გამოიყენება"> +<!ENTITY torsettings.useProxy.type "პროქსის სახეობა"> +<!ENTITY torsettings.useProxy.type.placeholder "მიუთითეთ პროქსის სახეობა"> +<!ENTITY torsettings.useProxy.address "მისამართი"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-მისამართი ან დასახელება"> +<!ENTITY torsettings.useProxy.port "პორტი"> +<!ENTITY torsettings.useProxy.username "მეტსახელი"> +<!ENTITY torsettings.useProxy.password "პაროლი"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "კომპიუტერი ინტერნეტში გადის ქსელის ფარის გავლით, მხოლოდ გარკვეული პორტებით"> +<!ENTITY torsettings.firewall.allowedPorts "დაშვებული პორტები"> +<!ENTITY torsettings.useBridges.checkbox "Tor შეზღუდულია ჩემს ქვეყანაში"> +<!ENTITY torsettings.useBridges.default "ჩაშენებული ხიდის მითითება"> +<!ENTITY torsettings.useBridges.default.placeholder "ხიდის მითითება"> +<!ENTITY torsettings.useBridges.bridgeDB "გადამცემი ხიდის მოთხოვნა საიტიდან torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "შეიყვანეთ სურათიდან სიმბოლოები"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "ახალი კოდის მიღება"> +<!ENTITY torsettings.useBridges.captchaSubmit "გაგზავნა"> +<!ENTITY torsettings.useBridges.custom "ნაცნობი ხიდის მითითება"> +<!ENTITY torsettings.useBridges.label "შეიყვანეთ გადამცემი ხიდის მონაცემები სანდო წყაროდან."> +<!ENTITY torsettings.useBridges.placeholder "აკრიფეთ მისამართი:პორტი (თითო ცალკე ხაზზე)"> + +<!ENTITY torsettings.copyLog "Tor-ის აღრიცხვის ჩანაწერების ასლი"> + +<!ENTITY torsettings.proxyHelpTitle "პროქსის შესახებ"> +<!ENTITY torsettings.proxyHelp1 "ადგილობრივი პროქსი მაშინაა საჭირო, როცა ინტერნეტს უკავშირდებით დაწესებულების, სკოლის ან უმაღლესი სასწავლებლის ქსელის გავლით. თუ დარწმუნებული არ ხართ პროქსის საჭიროებაში, გადახედეთ ინტერნეტის პარამეტრებს სხვა ბრაუზერში ან იხილეთ სისტემის ქსელის პარამეტრები."> + +<!ENTITY torsettings.bridgeHelpTitle "დახმარება გადამცემი ხიდის თაობაზე"> +<!ENTITY torsettings.bridgeHelp1 "ხიდები წარმოადგენს აღუნუსხავ გადამცემებს, რომელთა გამოყენებაც ართულებს Tor-ქსელთან კავშირის შეზღუდვას.  თითოეული სახის ხიდი იყენებს განსხვავებულ საშუალებებს, ცენზურის ასარიდებლად.  obfs-გადამყვანი, გადაცემულ მონაცემებს წარმოადგენს შემთხვევითი ხმაურის სახით, ხოლო meek-გადამყვანი კი თქვენს მონაცემთა მიმოცვლას წარმოაჩენს ისე, თითქოს ცალკეულ მომსახურებას უკავ შირდებით და არა Tor-ს."> +<!ENTITY torsettings.bridgeHelp2 "იმისდა მიხედვით, თუ როგორ ზღუდავს ცალკეული ქვეყანა Tor-ს, გარკვეული სახის გადამცემი ხიდები, მხოლოდ შესაბამის ქვეყნებში იმუშავებს და არა სხვაგან.  თუ დანამდვილებით არ იცით, რომელი გადამცემი მუშაობს თქვენს ქვეყანაში, ეწვიეთ დახმარების გვერდს torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "გთხოვთ, მოითმინოთ სანამ დაუკავშირდება Tor-ქსელს.  რამდენიმე წუთს შეიძლება გასტანოს."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "დაკავშირება"> +<!ENTITY torPreferences.torSettings "Tor-ის პარამეტრები"> +<!ENTITY torPreferences.torSettingsDescription "Tor-ბრაუზერი თქვენს კავშირს ატარებს Tor-ქსელის გავლით, რომლის მუშაობასაც უზრუნველყოფს ათასობით მოხალისე მთელი მსოფლიოდან." > +<!ENTITY torPreferences.learnMore "შეიტყვეთ მეთი"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "ინტერნეტი:"> +<!ENTITY torPreferences.statusInternetTest "შემოწმება"> +<!ENTITY torPreferences.statusInternetOnline "ხაზზეა"> +<!ENTITY torPreferences.statusInternetOffline "ხაზგარეშეა"> +<!ENTITY torPreferences.statusTorLabel "Tor-ქსელი:"> +<!ENTITY torPreferences.statusTorConnected "დაკავშირებულია"> +<!ENTITY torPreferences.statusTorNotConnected "არაა დაკავშირებული"> +<!ENTITY torPreferences.statusTorBlocked "სავარაუდოდ იზღუდება"> +<!ENTITY torPreferences.learnMore "შეიტყვეთ მეთი"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "სწაფგაშვება"> +<!ENTITY torPreferences.quickstartDescriptionLong "სწრაფგაშვებით Tor-ბრაუზერი ჩართვისას თავადვე დაუკავშირდება Tor-ქსელს ბოლოს გამოყენებული პარამეტრებით."> +<!ENTITY torPreferences.quickstartCheckbox "ყოველთვის თვითდაკავშირება"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "გადამცემი ხიდები"> +<!ENTITY torPreferences.bridgesDescription "გადამცემი ხიდების მეშვეობით შეგიძლიათ დაუკავშირდეთ Tor-ქსელს იმ ქვეყნებში, რომლებშიც Tor იზღუდება. იმისდა მიხედვით, თუ სად იმყოფებით, ზოგმა ხიდმა სხვაზე უკეთ შეიძლება იმუშაოს."> +<!ENTITY torPreferences.bridgeLocation "თქვენი მდებარეობა"> +<!ENTITY torPreferences.bridgeLocationAutomatic "თვითშერჩევა"> +<!ENTITY torPreferences.bridgeLocationFrequent "ხშირად მითითებული მდებარეობა"> +<!ENTITY torPreferences.bridgeLocationOther "სხვა მდებარეობა"> +<!ENTITY torPreferences.bridgeChooseForMe "ხიდის შერჩევა..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "თქვენი მიმდინარე ხიდები"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "შეგიძლიათ დაამახსოვროთ რამდენიმე ხიდი და Tor გადაწყვეტს, რომელი გამოიყენოს დაკავშირებისას. Tor თავადვე გადართავს სხვა ხიდზეც საჭიროების შემთხვევაში."> +<!ENTITY torPreferences.bridgeId "#1 ხიდი: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "ამოშლა"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "ჩაშენებული ხიდების გათიშვა"> +<!ENTITY torPreferences.bridgeShare "გააზიარეთ ხიდი QR-კოდით ან მისი მისამართის ასლით."> +<!ENTITY torPreferences.bridgeCopy "ხიდის მისამართის ასლი"> +<!ENTITY torPreferences.copied "ასლი აღებულია!"> +<!ENTITY torPreferences.bridgeShowAll "ყველა ხიდის გამოჩენა"> +<!ENTITY torPreferences.bridgeRemoveAll "ყველა ხიდის მოცილება"> +<!ENTITY torPreferences.bridgeAdd "ახალი ხიდის დამატება"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "ამორჩევა Tor-ბრაუზერის ჩაშენებული ხიდებიდან"> +<!ENTITY torPreferences.bridgeSelectBuiltin "ჩაშენებული ხიდის მითითება..."> +<!ENTITY torPreferences.bridgeRequest "გადამცემი ხიდის მოთხოვნა..."> +<!ENTITY torPreferences.bridgeEnterKnown "ნაცნობი ხიდის შეყვანა"> +<!ENTITY torPreferences.bridgeAddManually "ხიდის ხელით მითითება..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "დამატებით"> +<!ENTITY torPreferences.advancedDescription "მიუთითეთ, თუ როგორ დაუკავშირდეს Tor-ბრაუზერი ინტერნეტს"> +<!ENTITY torPreferences.advancedButton "პარამეტრები..."> +<!ENTITY torPreferences.viewTorLogs "იხილეთ Tor-ის აღრიცხვები"> +<!ENTITY torPreferences.viewLogs "აღრიცხვების ნახვა..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "მოცილდეს ყველა ხიდი?"> +<!ENTITY torPreferences.removeBridgesWarning "ეს ქმედება შეუქცევადია."> +<!ENTITY torPreferences.cancel "გაუქმება"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR-კოდის წაკითხვა"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "ჩაშენებული ხიდები"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor-ბრაუზერი შეიცავს გარკვეული სახის ხიდებს, ე.წ. „მისაერთებელ გადამყვანებს“."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 სახეობის ჩაშენებული ხიდი Tor-ში გადაცემულ მონაცემებს წარმოადგენს შემთხვევითი ხმაურის სახით. უფრო ნაკლებია მისი შეზღუდვის ალბათობა, ვიდრე წინა თაობის obfs3-ხიდებისა."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake ჩაშენებული ხიდია, რომელიც გვერდს უვლის ცენზურას კავშირების გატარებით მოხალისეების მიერ გამართული Snowflake-პროქსის მეშვეობით."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure სახეობის ჩაშენებული ხიდი ისე წარმოაჩენს, თითქოს Microsoft-ის საიტს უკავშირდებოდეთ, ნაცვლად Tor-ისა."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "ხიდის მოთხოვნა"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "უკავშირდება BridgeDB-ს. გთხოვთ, მოითმინოთ."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "გაიარეთ CAPTCHA, გადამცემი ხიდის მოთხოვნისთვის."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "გადაწყვეტა არასწორია. გთხოვთ სცადოთ ხელახლა."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "ხიდის მიწოდება"> +<!ENTITY torPreferences.provideBridgeHeader "შეიყვანეთ ხიდის მონაცემები სანდო წყაროდან"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "კავშირის პარამეტრები"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "მიუთითეთ, თუ როგორ დაუკავშირდეს Tor-ბრაუზერი ინტერნეტს"> +<!ENTITY torPreferences.firewallPortsPlaceholder "მძიმით გამოყოფილი მნიშვნელობები"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor-ის აღრიცხვები"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "არაა დაკავშირებული"> +<!ENTITY torConnect.connectingConcise "უკავშირდება…"> +<!ENTITY torConnect.tryingAgain "ცდილობს ხელახლა..."> +<!ENTITY torConnect.noInternet "Tor-ბრაუზერი ვერ უკავშირდება ქსელს"> +<!ENTITY torConnect.noInternetDescription "ეს ქსელის ხარვეზების ბრალი უფრო უნდა იყოს, ვიდრე Tor-ის შეზღუდვისა. შეამოწმეთ ინტერნეტკავშირის, პროქსისა და ქსელის ფარის პარამეტრები, სანამ კვლავ ცდით."> +<!ENTITY torConnect.couldNotConnect "Tor-ბრაუზერი ვერ უკავშირდება Tor-ს"> +<!ENTITY torConnect.assistDescriptionConfigure "კავშირის გამართვა"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "თუ Tor იზღუდება თქვენს ადგილსამყოფელზე, ხიდი გამოგადგებათ. კავშირის მეგზური აგირჩევთ რომელიმეს მდებარეობის მიხედვით, ანდაც შეგიძლიათ #1 ხელით მიუთითოთ"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "ხიდის მოსინჯვა..."> +<!ENTITY torConnect.tryingBridgeAgain "კიდევ ერთი მცდელობა..."> +<!ENTITY torConnect.errorLocation "Tor-ბრაუზერი ვერ ადგენს მდებარეობას"> +<!ENTITY torConnect.errorLocationDescription "Tor-ბრაუზერი საჭიროებს თქვენ მდებარეობას, რომ შესაფერისი ხიდი შეგირჩიოთ. თუ არ გსურთ გამჟღავნება, #1 მიუთითეთ ხელით."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "მდებარეობის პარამეტრები სწორია?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor-ბრაუზერი კვლავ ვერ უკავშირდება Tor-ქსელს. გთხოვთ, შეამოწმოთ თქვენი მდებარეობის სისწორე და სცადოთ ხელახლა ან #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor-ბრაუზერი კვლავ ვერ უკავშირდება"> +<!ENTITY torConnect.finalErrorDescription "ყველა მცდელობის მიუხედავად, კავშირის მეგზურმა ვერ მოახერხა Tor-თან მიერთება. შეამოწმეთ, გაქვთ თუ არა ქსელთან წვდომა და ხელით სცადეთ ხიდის დამატება."> +<!ENTITY torConnect.breadcrumbAssist "კავშირის მეგზური"> +<!ENTITY torConnect.breadcrumbLocation "მდებარეობის პარამეტრები"> +<!ENTITY torConnect.breadcrumbTryBridge "ხიდის მოსინჯვა"> +<!ENTITY torConnect.automatic "თვითშერჩევა"> +<!ENTITY torConnect.selectCountryRegion "აირჩიეთ ქვეყანა ან მხარე"> +<!ENTITY torConnect.frequentLocations "ხშირად მითითებული მდებარეობა"> +<!ENTITY torConnect.otherLocations "სხვა მდებარეობა"> +<!ENTITY torConnect.restartTorBrowser "Tor-ბრაუზერის ხელახლა გაშვება"> +<!ENTITY torConnect.configureConnection "კავშირის გამართვა..."> +<!ENTITY torConnect.viewLog "აღრიცხვების ნახვა..."> +<!ENTITY torConnect.tryAgain "ხელახლა სცადეთ"> +<!ENTITY torConnect.offline "ქსელი მიუწვდომელია"> +<!ENTITY torConnect.connectMessage "ცვლილებები Tor-ის პარამეტრებში არ აისახება, სანამ არ დაუკავშირდებით"> +<!ENTITY torConnect.tryAgainMessage "Tor-ბრაუზერმა ვერ მოახერხა კავშირის დამყარება Tor-ქსელთან"> +<!ENTITY torConnect.yourLocation "თქვენი მდებარეობა"> +<!ENTITY torConnect.tryBridge "მოსინჯეთ ხიდი"> +<!ENTITY torConnect.autoBootstrappingFailed "თვითგამართვა ვერ მოხერხდა"> +<!ENTITY torConnect.autoBootstrappingFailed "თვითგამართვა ვერ მოხერხდა"> +<!ENTITY torConnect.cannotDetermineCountry "ვერ დგინდება მომხმარებლის ქვეყანა"> +<!ENTITY torConnect.noSettingsForCountry "პარამეტრები არაა თქვენი მდებარეობისთვის"> diff --git a/toolkit/torbutton/chrome/locale/ka/onboarding.properties b/toolkit/torbutton/chrome/locale/ka/onboarding.properties new file mode 100644 index 000000000000..09a403d39730 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=აქამდე არ გამოგიყენებიათ %S?\nმოდი დავიწყოთ. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S-ში ყველაფერი ახალია.\nნახეთ, რისი გაკეთება შეგიძლიათ! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=დახურვა +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=უარყოფა +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=შესრულებულია diff --git a/toolkit/torbutton/chrome/locale/ka/torbutton.dtd b/toolkit/torbutton/chrome/locale/ka/torbutton.dtd new file mode 100644 index 000000000000..ad337d035861 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "ახალი ვინაობა"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "ახალი ვინაობა"> +<!ENTITY torbutton.context_menu.new_identity_key "ვ"> +<!ENTITY torbutton.context_menu.new_circuit "ახალი Tor-წრედი ამ საიტისთვის"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "ახალი Tor-წრედი ამ საიტისთვის"> +<!ENTITY torbutton.context_menu.new_circuit_key "წ"> +<!ENTITY torbutton.context_menu.networksettings "Tor-ქსელის პარამეტრები..."> +<!ENTITY torbutton.context_menu.networksettings.key "ქ"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor-ბრაუზერის განახლებებზე შემოწმება..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "გ"> +<!ENTITY torbutton.context_menu.cookieProtections "ფუნთუშების დაცვა..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "ფ"> +<!ENTITY torbutton.button.tooltip "დააწკაპეთ Torbutton-ის გასაშვებად"> +<!ENTITY torbutton.prefs.security_settings "Tor-ბრაუზერის უსაფრთხოების პარამეტრები"> +<!ENTITY torbutton.cookiedialog.title "ფუნთუშების უსაფრთხოების მართვა"> +<!ENTITY torbutton.cookiedialog.lockCol "დაცულია"> +<!ENTITY torbutton.cookiedialog.domainCol "მისამართი"> +<!ENTITY torbutton.cookiedialog.nameCol "სახელი"> +<!ENTITY torbutton.cookiedialog.pathCol "მდებარეობა"> +<!ENTITY torbutton.cookiedialog.protectCookie "ფუნთუშის დაცვა"> +<!ENTITY torbutton.cookiedialog.removeCookie "ფუნთუშის მოცილება"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "ფუნთუშის დაცვის მოხსნა"> +<!ENTITY torbutton.cookiedialog.removeAllBut "ყველას მოცილება დაცულების გარდა"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "ახალი ფუნთუშების დაცვა"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "ახალი ფუნთუშების დაცვის შეჩერება"> +<!ENTITY torbutton.prefs.sec_caption "უსაფრთხოების დონე"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "უსაფრთხოების ასარჩევი რბია, საშუალებას გაძლევთ გათიშოთ ბრაუზერის შესაძლებლობების ნაწილი, უნებართვო შეღწევის მცდელობებისგან უკეთ თავდასაცავად."> +<!ENTITY torbutton.prefs.sec_standard_label "ჩვეულებრივი"> +<!ENTITY torbutton.prefs.sec_standard_description "Tor-ბრაუზერისა და ვებსაიტის ყველა შესაძლებლობა ჩართულია."> +<!ENTITY torbutton.prefs.sec_safer_label "მეტად დაცული"> +<!ENTITY torbutton.prefs.sec_safer_description "თიშავს ვებსაიტის საფრთხისშემცველ შესაძლებლობებს, საიტების ნაწილი, სავარაუდოდ, ვეღარ იმუშავებს გამართულად."> +<!ENTITY torbutton.prefs.sec_safer_list_label "მეტად დაცული პარამეტრებისას:"> +<!ENTITY torbutton.prefs.sec_safest_label "სრულიად დაცული"> +<!ENTITY torbutton.prefs.sec_safest_description "დაშვებულია მხოლოდ ის შესაძლებლობები, რომლებსაც საჭიროებს უცვლელი შიგთავსის მქონე საიტები და ძირითადი მომსახურებები. ცვლილებები შეეხება სურათებს, ფაილებსა და სკრიპტებს."> +<!ENTITY torbutton.prefs.sec_safest_list_label "სრულიად დაცული პარამეტრებისას:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "იხილეთ ვრცლად"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript გათიშულია HTTPS-ს არმქონე ყველა საიტზე."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript გათიშულია ყველა საიტზე ნაგულისხმევად."> +<!ENTITY torbutton.prefs.sec_limit_typography "შრიფტებისა და მათემატიკური სიმბოლოების ნაწილი გათიშულია."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "შრიფტების, ხატულების, მათემატიკური სიმბოლოებისა და სურათების ნაწილი გათიშულია."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "ხმოვანი და ვიდეოფაილები (HTML5), აგრეთვე WebGL ეშვება მხოლოდ დაწკაპებით."> +<!ENTITY torbutton.prefs.sec_custom_warning "მითითებული"> +<!ENTITY torbutton.prefs.sec_overview "გარკვეული შესაძლებლობების გათიშვა, რომლებიც უსაფრთხოებაზე შეტევებისა და პირადი მონაცემების ხელყოფისთვის შეიძლება გამოიყენონ."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "უსაფრთხოების დონე : ჩვეულებრივი"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "უსაფრთხოების დონე : დაცული"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "უსაფრთხოების დონე : სრულიად დაცული"> +<!ENTITY torbutton.prefs.sec_custom_summary "თქვენ მიერ მითითებული პარამეტრები ბრაუზერში, არაა მისაღები უსაფრთხოებისთვის. პირადი მონაცემების სათანადოდ დაცვის უზრუნველსაყოფად, გირჩევთ შეარჩიოთ უსაფრთხოების ნაგულისხმევი დონეებიდან რომელიმე."> +<!ENTITY torbutton.prefs.sec_restore_defaults "ნაგულისხმევის აღდგენა"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "უსაფრთხოების დამატებითი პარამ."> +<!ENTITY torbutton.prefs.sec_change "შეცვლა..."> +<!ENTITY torbutton.circuit_display.title "Tor-წრედი"> +<!ENTITY torbutton.circuit_display.new_circuit "ახალი წრედი ამ საიტისთვის"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "გახსენით onion-მომსახურების კლიენტის დამოწმების არე"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "ამ გასაღების დამახსოვრება"> diff --git a/toolkit/torbutton/chrome/locale/ka/torbutton.properties b/toolkit/torbutton/chrome/locale/ka/torbutton.properties new file mode 100644 index 000000000000..da368400523f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = ინტერნეტი +torbutton.circuit_display.ip_unknown = უცნობი IP-მისამართი +torbutton.circuit_display.onion_site = Onion-საიტი +torbutton.circuit_display.this_browser = ეს ბრაუზერი +torbutton.circuit_display.relay = გადამცემი +torbutton.circuit_display.tor_bridge = ხიდი +torbutton.circuit_display.unknown_country = უცნობი ქვეყანა +torbutton.circuit_display.guard = მცველი +torbutton.circuit_display.guard_note = თქვენი [მცველი] კვანძი შესაძლოა არ შეიცვალოს. +torbutton.circuit_display.learn_more = იხილეთ ვრცლად +torbutton.circuit_display.click_to_copy = დაწკაპეთ ასლისთვის +torbutton.circuit_display.copied = ასლი აღებულია! +torbutton.content_sizer.margin_tooltip = Tor-ბრაუზერი ამატებს მინდვრებს კიდეებზე, რომ თქვენი ფანჯრის სიგანე და სიმაღლე ნაკლებად გამორჩეული და შესამჩნევი იყოს, რაც შეუმცირებს სხვებს, ინტერნეტში თქვენი დევნის შესაძლებლობებს. +extensions.torbutton@torproject.org.description = Torbutton საშუალებას გაძლევთ ერთი ღილაკით გამართოთ Tor-ის პარამეტრები და სწრაფად გაასუფთავოთ მონახულებული გვერდების მონაცემები. +torbutton.popup.external.title = ჩამოიტვირთოს ცალკეული სახის ფაილი? +torbutton.popup.external.app = Tor-ბრაუზერით ვერ ხერხდება ამ ფაილის გახსნა. სხვა პროგრამაა საჭირო მის გასახსნელად.\n\n +torbutton.popup.external.note = ზოგიერთი სახის ფაილმა, შესაძლოა Tor-ის გვერდის ავლით დააკავშიროს სხვა პროგრამა ინტერნეტთან.\n +torbutton.popup.external.suggest = უსაფრთხოებისთვის, სასურველია ჩამოტვირთული ფაილის გახსნა, კავშირგარეშედ ყოფნისას ან Tor-ის პირდაპირ გასაშვები სისტემის გამოყენება, როგორიცაა Tails.\n +torbutton.popup.launch = ჩამოტვირთვა +torbutton.popup.cancel = გაუქმება +torbutton.popup.dontask = ავტომატურად ჩამოიტვირთოს ფაილები ამიერიდან +torbutton.popup.no_newnym = Torbutton ვერ ახერხებს ახალი ვინაობის უსაფრთხოდ მონიჭებას. წვდომა არ აქვს წვდომა Tor-ის მართვის პორტთან.\n\nAre you running Tor Browser Bundle? +torbutton.security_settings.menu.title = უსაფრთხოების პარამეტრები +torbutton.title.prompt_torbrowser = მნიშვნელოვანი ინფორმაცია Torbutton-ის შესახებ +torbutton.popup.prompt_torbrowser = Torbutton ახლა უკვე სხვანაირად მუშაობს: მისი გამორთვა აღარ შეგიძლიათ.\n\nეს ცვლილება იმიტომ გავაკეთეთ, რომ არაა უსაფრთხო Torbutton-ის იმ ბრაუზერში გამოყენება, რომელიც Tor-ის გარეშეც მუშაობს. ამ ყველაფერს უამრავი ხარვეზი ახლავს თან, რომელთა მოგვარებაც სხვა გზით ვერ მოვახერხებთ.\n\nთუ გსურთ განაგრძოთ Firefox-ის ჩვეულებრივ გამოყენება, უნდა ამოშალოთ Torbutton და ჩამოტვირთოთ Tor-ბრაუზერის კრებ ული. პირადი მონაცემების დაცვის შესაძლებლობები გაცილებით უკეთესია [...] +torbutton.popup.short_torbrowser = მნიშვნელოვანი სიახლე Torbutton-ზე!\n\nTorbutton ახლა უკვე მუდმივად ჩართულია.\n\nდაწკაპეთ Torbutton მეტი ინფორმაციისთვის. + +torbutton.popup.confirm_plugins = მოდულობს, როგორიცაა Flash შეუძლია საფრთხის ქვეშ დააყენოს თქვენი პირადი მონაცემები და ვინაობის გაუმხელობა.\n\nმათი საშუალებით, შესაძლებელია Tor-ის გვერდის ავლით დადგინდეს თქვენი მდებარეობა და IP-მისამართი.\n\nნამდვილად გსურთ მოდულების ჩართვა?\n\n +torbutton.popup.never_ask_again = მომავალში შეკითხვის გარეშე +torbutton.popup.confirm_newnym = Tor-ბრაუზერი დახურავს ყველა ფანჯარასა და ჩანართს. ყველა ვებსაიტის სეანსი შეწყდება.\n\nგაეშვას ხელახლა Tor-ბრაუზერი ახალი ვინაობის მისაღებად?\n\n + +torbutton.maximize_warning = Tor-ბრაუზერის სრულ ეკრანზე გაშლა, საიტებს საშუალებას მისცემს დაადგინოს თქვენი ეკრანის ზომები, რაც შეიძლება გამოიყენონ თქვენს ამოსაცნობად. ჩვენ გირჩევთ დატოვოთ Tor-ბრაუზერის ფანჯარა, არსებულ ზომებში. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=ვებსაიტი (%S) ცდილობს HTML5-ის გრაფიკული გამოსახულების მონაცემების მიღებას, რაც შესაძლოა გამოყენებული იყოს თქვენი კომპიუტერის ამოსაცნობად.\n\nმისცეს Tor-ბრაუზერმა უფლება ამ ვებსაიტს, მიიღოს HTML5-ის გრაფიკული გამოსახულების მონაცემები? +canvas.notNow=ახლა არა +canvas.notNowAccessKey=ა +canvas.allow=დაშვება მომავალში +canvas.allowAccessKey=დ +canvas.never=არასდროს ამ საიტზე (სასურველია) +canvas.neverAccessKey=რ + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S პროფილის ხარვეზი +profileReadOnly=თქვენ ვერ შეძლებთ გაუშვათ %S მხოლოდ წაკითხვის შესაძლებლობის მქონე საფაილო სისტემიდან. გთხოვთ, %S-ის ასლი შექმნათ სხვა ადგილზე, გამოყენებამდე. +profileReadOnlyMac=თქვენ ვერ შეძლებთ გაუშვათ %S მხოლოდ წაკითხვის შესაძლებლობის მქონე საფაილო სისტემიდან. გთხოვთ, %S-ის ასლი შექმნათ თქვენს მთავარ ეკრანის ან პროგრამების საქაღალდეში, მის გამოყენებამდე. +profileAccessDenied=%S-ს არ გააჩნია პროფილთან წვდომის ნებართვა. გთხოვთ, სათანადოდ გამართოთ თქვენი საფაილო სისტემის ნებართვები და სცადოთ ხელახლა. +profileMigrationFailed=თქვენი არსებული %S პროფილის გადატანა ვერ მოხერხდა.\nგამოყენებული იქნება ახალი პარამეტრები. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=ჩამოიტვირთება %Sს განახლება + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=კავშირი დაშიფრულია (Onion-მომსახურება, %1$S, %2$S ბიტიანი გასაღებები, %3$S) +pageInfo_OnionEncryption=კავშირი დაშიფრულია (Onion-მომსახურება) +pageInfo_OnionName=Onion-სახელი: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=იხილეთ ვრცლად +onionServices.errorPage.browser=ბრაუზერი +onionServices.errorPage.network=ქსელი +onionServices.errorPage.onionSite=Onion-საიტი +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.descNotFound.header=Onion-საიტი არ მოიძებნა +onionServices.descNotFound=უმეტესად შედეგია იმისა, რომ Onion-საიტი არაა ხაზზე. დაუკავშირდით Onion-საიტის ხელმძღვანელობას. +onionServices.descNotFound.longDescription=ვრცლად: %S — მოთხოვნილი onion-მომსახურების აღმწერი ვერ მოიძებნა hashring-ზე და ამრიგად, მიუწვდომელია მომხმარებლისთვის. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.descInvalid.header=Onion-საიტთან წვდომა არაა +onionServices.descInvalid=Onion-საიტი მიუწვდომელია შიდა შეცდომის გამო. +onionServices.descInvalid.longDescription=ვრცლად: %S — მოთხოვნილი onion-მომსახურების აღმწერის გარჩევა ან ხელმოწერის დამოწმება ვერ მოხერხდა. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.introFailed.header=Onion-საიტი გათიშულია +onionServices.introFailed=უმეტესად შედეგია იმისა, რომ Onion-საიტი არაა ხაზზე. დაუკავშირდით Onion-საიტის ხელმძღვანელობას. +onionServices.introFailed.longDescription=ვრცლად: %S — წარდგენა ვერ მოხერხდა, რაც ნიშნავს, რომ აღმწერი ნაპოვნია, მაგრამ მომსახურება აღარაა დაკავშირებული წარდგენის წერტილთან. უმეტესად, გამოწვეულია მომსახურების მიერ აღმწერის შეცვლით ან მუშაობის შეჩერებით. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.rendezvousFailed.header=ვერ უკავშირდება Onion-საიტს. +onionServices.rendezvousFailed=Onion-საიტი დაკავებულია ან Tor-ქსელი გადატვირთულია. სცადეთ კვლავ მოგვიანებით. +onionServices.rendezvousFailed.longDescription=ვრცლად: %S — მომხმარებლის მომსახურებასთან შეწყობა ვერ მოხერხდა, რაც ნიშნავს რომ მომხმარებელმა კავშირი ვერ დაასრულა. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=საჭიროებს შესვლის დამოწმებას +onionServices.clientAuthMissing.header=Onion-მომსახურება საჭიროებს შესვლის დამოწმებას +onionServices.clientAuthMissing=Onion-საიტთან წვდომისთვის, საჭიროა გასაღები რომელიც არ მითითებულა. +onionServices.clientAuthMissing.longDescription=ვრცლად: %S — მომხმარებელმა ჩამოტვირთა მოთხოვნილი onion-მომსახურების აღმწერი, მაგრამ ვერ გაშიფრა, ვინაიდან მომხმარებლის დამოწმების მონაცემები არ იძებნება. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=დამოწმება ვერ მოხერხდა +onionServices.clientAuthIncorrect.header=Onion-საიტზე დამოწმება ვერ მოხერხდა +onionServices.clientAuthIncorrect=მითითებული გასაღები არასწორი ან გაუქმებულია. დაუკავშირდით Onion-საიტის ხელმძღვანელობას. +onionServices.clientAuthIncorrect.longDescription=ვრცლად: %S — მომხმარებელს შეუძლია ჩამოტვირთოს მოთხოვნილი onion-მომსახურების აღმწერი, მაგრამ ვერ გაშიფრავს, მომხმარებლის დამოწმების მოწოდებული მონაცემებით. ეს ნიშნავს, რომ შესაძლოა, წვდომა უარყოფილია. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.badAddress.header=Onion-საიტის არამართებული მისამართი +onionServices.badAddress=მოცემული Onion-საიტის მისამართი არასწორია. გთხოვთ, გადაამოწმოთ შეყვანამდე. +onionServices.badAddress.longDescription=ვრცლად: %S — მოცემული .onion-მისამართი არამართებულია. ამ შეცდომის მიზეზი შეიძლება იყოს შემდეგი: მისამართის სადარჯამი არ ემთხვევა, საჯარო გასაღები ed25519 არასწორია ან დაშიფვრაა არამართებული. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=ხარვეზი Onion-საიტის ჩატვირთვისას +onionServices.introTimedOut.header=Onion-საიტის წრედის შექმნის დრო ამოიწურა +onionServices.introTimedOut=ვერ მოხერხდა Onion-საიტთან მიერთება, შესაძლოა სუსტი კავშირის გამო. +onionServices.introTimedOut.longDescription=ვრცლად: %S — მოთხოვნილ onion-მომსახურებასთან კავშირის ვადა ამოიწურა, შეხვედრის წრედის ჩამოყალიბებისას. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S ითხოვს ანგარიშის დამოწმებას. +onionServices.authPrompt.keyPlaceholder=შეიყვანეთ თქვენი საიდუმლო გასაღები ამ onion-მომსახურებისთვის +onionServices.authPrompt.done=მზადაა +onionServices.authPrompt.doneAccessKey=დ +onionServices.authPrompt.invalidKey=გთხოვთ, შეიყვანეთ მართებული გასაღები (52 base32 სიმბოლო ან 44 base64 სიმბოლო) +onionServices.authPrompt.failedToSetKey=ვერ ხერხდება Tor-ის გამართვა თქვენი გასაღებით +onionServices.authPreferences.header=Onion-მომსახურების დამოწმება +onionServices.authPreferences.overview=ზოგიერთი onion-მომსახურება საჭიროებს თქვენი ნამდვილობის დამოწმებას გასაღებით (ერთგვარი პაროლით) მათზე წვდომის მისაღებად. +onionServices.authPreferences.savedKeys=შენახული გასაღებები... +onionServices.authPreferences.dialogTitle=Onion-მომსახურების გასაღებები +onionServices.authPreferences.dialogIntro=გასაღებები მოცემული onion-საიტებისთვის ინახება თქვენს კომპიუტერში +onionServices.authPreferences.onionSite=Onion-საიტი +onionServices.authPreferences.onionKey=გასაღები +onionServices.authPreferences.remove=წაშლა +onionServices.authPreferences.removeAll=ყველას მოცილება +onionServices.authPreferences.failedToGetKeys=ვერ ხერხდება გასაღებების მიღება tor-იდან +onionServices.authPreferences.failedToRemoveKey=ვერ ხერხდება გასაღების მოცილება +onionServices.v2Deprecated.pageTitle=V2 Onion-საიტების გაუქმების გაფრთხილება +onionServices.v2Deprecated.header=მე-2 ვერსიის Onion-საიტები მალე გაუქმდება +onionServices.v2Deprecated=ეს Onion-საიტი მალე აღარ იქნება ხელმისაწვდომი. გთხოვთ, დაუკავშირდეთ საიტის ხელმძღვანელობას და მოუწოდეთ, ახალ ვერსიაზე გადაიყვანონ. +onionServices.v2Deprecated.longDescription=Tor წყვეტს მე-2 ვერსიის Onion-მომსახურებების მხარდაჭერას 2021 წლის ივლისში და ეს Onion-საიტი აღარ იქნება ხელმიასწვდომი ამ მისამართზე. თუ ამ საიტს ხელმძღვანელობთ, მალე გადაიყვანეთ Onion-ის მე-3 ვერსიაზე. +onionServices.v2Deprecated.tryAgain=მიღებულია +onionServices.v2Deprecated.tooltip=ეს Onion-საიტი, მალე აღარ იქნება ხელმისაწვდომი + +# Onion-Location strings. +onionLocation.alwaysPrioritize=ყოველთვის Onion +onionLocation.alwaysPrioritizeAccessKey=ვ +onionLocation.notNow=ახლა არა +onionLocation.notNowAccessKey=ა +onionLocation.description=ამ საიტის მეტად პირადი და დაცული ვერსია ხელმისაწვდომია Tor-ქსელში Onion-მომსახურების სახით. Onion-მომსახურებით საიტის მფლობელებსა და მნახველებს საშუალება ეძლევათ აირიდონ თვალის დევნება და ცენზურა. +onionLocation.tryThis=სცადეთ Onion-მომსახურებები +onionLocation.onionAvailable=.onion ხელმისაწვდომია +onionLocation.learnMore=იხილეთ ვრცლად... +onionLocation.always=ყოველთვის +onionLocation.askEverytime=შეკითხვა ყოველ ჯერზე +onionLocation.prioritizeOnionsDescription=უპირატესობა .onion-საიტებს ამოცნობისას +onionLocation.onionServicesTitle=Onion-მომსახურებები + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=კრიპტოვალუტის მისამართის (%S) ასლი აღებულია დაუცველი საიტიდან. შესაძლოა, გადაკეთებული იყოს. +cryptoSafetyPrompt.whatCanHeading=რა ვიღონო? +cryptoSafetyPrompt.whatCanBody=შეგიძლიათ, ახალი წრედის სცადოთ დაცული კავშირის დამყარება, ან საფრთხის გაცნობიერებით აიცილოთ გაფრთხილება. +cryptoSafetyPrompt.learnMore=იხილეთ ვრცლად +cryptoSafetyPrompt.primaryAction=ჩანართის გადატვირთვა ახალი წრედით +cryptoSafetyPrompt.primaryActionAccessKey=მ +cryptoSafetyPrompt.secondaryAction=გაფრთხილების აცილება +cryptoSafetyPrompt.secondaryActionAccessKey=ბ + +# about:rulesets strings. +rulesets.warningTitle=სიფრთხილით განაგრძეთ +rulesets.warningDescription=მზა წესების დამატებამ ან შეცვლამ შესაძლოა, შემტევებს თქვენი ბრაუზერის ხელყოფის საშუალება მისცეს. მხოლოდ იმ შემთხვევაში გამოიყენეთ, თუ ზუსტად იცით, რასაც აკეთებთ. +rulesets.warningEnable=გაფრთხილება ამ პარამეტრებთან წვდომის ყოველი მცდელობისას +rulesets.warningButton=საფრთხის გაცნობიერება და გაგრძელება +# Ruleset list +rulesets.rulesets=მზა წესები +rulesets.noRulesets=მზა წესები ვერ მოიძებნა +rulesets.noRulesetsDescr=როცა მზა წესებს შეინახავთ Tor-ბრაუზერში, გამოჩნდება აქ. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=ბოლოს განახლებული %S +rulesets.neverUpdated=არასდროს განახლებულა ან ბოლოს განახლება ვერ მოხერხდა +rulesets.enabled=ჩართული +rulesets.disabled=გამორთული +# Ruleset details/edit ruleset +rulesets.edit=რედაქტირება +rulesets.name=სახელი +rulesets.jwk=JWK +rulesets.pathPrefix=მისამართის წინსართი +rulesets.scope=სამიზნე +rulesets.enable=ამ მზა წესების ამოქმედება +rulesets.checkUpdates=შემოწმება განახლებებზე +rulesets.jwkPlaceholder=გასაღები, რომლითაც დამოწმებულია ეს მზა წესები, JWK-სახისაა (JSON Web Key). +rulesets.jwkInvalid=JWK-ს გარჩევა ვერ მოხერხდა ან გაუმართავი სახისაა +rulesets.pathPrefixPlaceholder=მზა წესებისთვის საჭირო ფაილთა შემცველი ბმულის წინსართი +rulesets.pathPrefixInvalid=მისამართის წინსართი გაუმართავი სახის HTTP(S)-ბმულია +rulesets.scopePlaceholder=რეგულარული გამოსახულება ამ წესების სამიზნე არისთვის. +rulesets.scopeInvalid=სამიზნე არე ვერ დამუშავდება რეგულარულ გამოსახულებად +rulesets.save=შენახვა +rulesets.cancel=გაუქმება diff --git a/toolkit/torbutton/chrome/locale/ka/torlauncher.properties b/toolkit/torbutton/chrome/locale/ka/torlauncher.properties new file mode 100644 index 000000000000..5b3047d89b56 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ka/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor-ის გამშვები + +torlauncher.tor_exited_during_startup=Tor მოულოდნელად დაიხურა გაშვებისას. ამის მიზეზი შესაძლოა იყოს შეცდომა torrc-ფაილში, Tor-ის ხარვეზი, სისტემაში არსებული სხვა პროგრამა ან დაზიანებული აპარატურა. სანამ აღნიშნულ გაუმართაობას არ გამოასწორებთ და Tor-ს ხელახლა არ გაუშვებთ, Tor-ბრაუზერი არ ჩაირთვება. +torlauncher.tor_exited=Tor მოულოდნელად დაიხურა. ამის მიზეზი შესაძლოა იყოს თავად Tor-ის ხარვეზი, სისტემაში არსებული სხვა პროგრამა ან დაზიანებული აპარატურა. Tor-ის ხელახლა გაშვების გარეშე, Tor-ბრაუზერი ვერ შეძლებს საიტების გახსნას. თუ გაუმართაობა არ მოგვარდება, გთხოვთ, გადაუგზავნოთ Tor-ის აღრიცხვის ჩანაწერის ასლი მხარდაჭერის გუნდს. +torlauncher.tor_exited2=Tor-ის ხელახლა გაშვებით, თქვენი ბრაუზერის ჩანართები არ დაიხურება. +torlauncher.tor_controlconn_failed=Tor-ის მართვის პორტთან დაკავშირება ვერ ხერხდება. +torlauncher.tor_failed_to_start=Tor-ის გაშვება ვერ მოხერხდა. +torlauncher.tor_control_failed=Tor-ის მართვა ვერ ხერხდება. +torlauncher.tor_bootstrap_failed=Tor ვერ ახერხებს Tor-ქსელთან კავშირის დამყარებას. +torlauncher.tor_bootstrap_failed_details=%1$S ვერ მოხერხდა (%2$S). + +torlauncher.unable_to_start_tor=Tor-ის გაშვება ვერ ხერხდება.\n\n%S +torlauncher.tor_missing=Tor-ის გამშვები ვერ მოიძებნა. +torlauncher.torrc_missing=torrc-ფაილი ვერ მოინახა და ვერ შეიქმნება. +torlauncher.datadir_missing=Tor-ის მონაცემთა საქაღალდე არ არსებობს და ვერ შეიქმნება. +torlauncher.onionauthdir_missing=Tor-onion-ის მონაცემთა დამოწმების საქაღალდე არ არსებობს და ვერ იქმნება. +torlauncher.password_hash_missing=ჰეშირებული პაროლის მიღება ვერ მოხერხდა. + +torlauncher.failed_to_get_settings=Tor-ის პარამეტრების მიღება ვერ ხერხდება.\n\n%S +torlauncher.failed_to_save_settings=Tor-ის პარამეტრების შენახვა ვერ ხერხდება.\n\n%S +torlauncher.ensure_tor_is_running=გთხოვთ დარწმუნდეთ, რომ Tor გაშვებულია. + +torlauncher.error_proxy_addr_missing=თქვენ უნდა მიუთითოთ ორივე, IP-მისამართი ან დასახელება და პორტის ნომერი, რომ Tor დაუკავშირდეს ინტერნეტს პროქსის საშუალებით. +torlauncher.error_proxy_type_missing=უნდა მიუთითოთ პროქსის სახეობა. +torlauncher.error_bridges_missing=უნდა მიუთითოთ ერთი ან რამდენიმე გადამცემი ხიდი. +torlauncher.error_default_bridges_type_missing=უნდა მიუთითოთ გადამყვანის სახეობა, მოცემული გადამცემი ხიდებისთვის. +torlauncher.error_bridgedb_bridges_missing=გთხოვთ, მოითხოვოთ გადამცემი ხიდი. +torlauncher.error_bridge_bad_default_type=არცერთი მოცემული გადამცემ ხიდისთვის, %S სახის გადამყვანი არაა ხელმისაწვდომი. გთხოვთ გამართოთ თქვენი პარამეტრები. + +torlauncher.bridge_suffix.meek-amazon=(მუშაობს ჩინეთში) +torlauncher.bridge_suffix.meek-azure=(მუშაობს ჩინეთში) + +torlauncher.request_a_bridge=გადამცემი ხიდის მოთხოვნა... +torlauncher.request_a_new_bridge=ახალი გადამცემი ხიდის მოთხოვნა... +torlauncher.contacting_bridgedb=დაკავშირება BridgeDB-სთან. გთხოვთ, მოითმინოთ. +torlauncher.captcha_prompt=გაიარეთ CAPTCHA, გადამცემი ხიდის მოთხოვნისთვის. +torlauncher.bad_captcha_solution=გადაწყვეტა არასწორია. გთხოვთ სცადოთ ხელახლა. +torlauncher.unable_to_get_bridge=გადამცემი ხიდების მიღება BridgeDB-იდან ვერ ხერხდება.\n\n%S +torlauncher.no_meek=ბრაუზერი არაა გამართული meek-ისთვის, რომელიც საჭიროა გადამცემი ხიდების მისაღებად. +torlauncher.no_bridges_available=ამჟამად გადამცემი ხიდები არაა ხელმისაწვდომი. ვწუხვართ. + +torlauncher.connect=დაკავშირება +torlauncher.restart_tor=Tor-ის ხელახლა გაშვება +torlauncher.quit=დახურვა +torlauncher.quit_win=გასვლა +torlauncher.done=მზადაა + +torlauncher.forAssistance=დახმარებისთვის დაუკავშირდით %S +torlauncher.forAssistance2=დახმარებისთვის ეწვიეთ %S + +torlauncher.copiedNLogMessages=ასლის აღება დასრულებულია. Tor-ის აღრიცხვის %S ჩანაწერი მზადაა ტექსტურ რედაქტორში ან ელფოსტის წერილში ჩასასმელად. + +torlauncher.bootstrapStatus.starting=გაშვება +torlauncher.bootstrapStatus.conn_pt=ხიდთან დაკავშირება +torlauncher.bootstrapStatus.conn_done_pt=ხიდთან დაკავშირებულია +torlauncher.bootstrapStatus.conn_proxy=პროქსისთან დაკავშირება +torlauncher.bootstrapStatus.conn_done_proxy=პროქსისთან დაკავშირებულია +torlauncher.bootstrapStatus.conn=Tor-გადამცემთან დაკავშირება +torlauncher.bootstrapStatus.conn_done=Tor-გადამცემთან დაკავშირებულია +torlauncher.bootstrapStatus.handshake=Tor-გადამცემთან კავშირის დამოწმება +torlauncher.bootstrapStatus.handshake_done=Tor-გადამცემთან კავშირი დამოწმებულია +torlauncher.bootstrapStatus.onehop_create=დაშიფრული კავშირის დამყარება ცნობართან +torlauncher.bootstrapStatus.requesting_status=ქსელის მდგომარეობის დადგენა +torlauncher.bootstrapStatus.loading_status=ქსელის მდგომარეობის ჩატვირთვა +torlauncher.bootstrapStatus.loading_keys=უფლებამოსილი სერტიფიკატების ჩატვირთვა +torlauncher.bootstrapStatus.requesting_descriptors=გადამცემების მონაცემების მოთხოვნა +torlauncher.bootstrapStatus.loading_descriptors=გადამცემების მონაცემების ჩატვირთვა +torlauncher.bootstrapStatus.enough_dirinfo=გადამცემის მონაცემები ჩაიტვირთა +torlauncher.bootstrapStatus.ap_conn_pt=წრედების შექმნა: ხიდთან დაკავშირება +torlauncher.bootstrapStatus.ap_conn_done_pt=წრედების შექმნა: ხიდთან დაკავშირებულია +torlauncher.bootstrapStatus.ap_conn_proxy=წრედების შექმნა: პროქსისთან დაკავშირება +torlauncher.bootstrapStatus.ap_conn_done_proxy=წრედების შექმნა: პროქსისთან დაკავშირებულია +torlauncher.bootstrapStatus.ap_conn=წრედების შექმნა: Tor-გადამცემთან დაკავშირება +torlauncher.bootstrapStatus.ap_conn_done=წრედების შექმნა: Tor-გადამცემთან დაკავშირებულია +torlauncher.bootstrapStatus.ap_handshake=წრედების შექმნა: Tor-ქსელთან კავშირის დამოწმება +torlauncher.bootstrapStatus.ap_handshake_done=წრედების შექმნა: Tor-ქსელთან კავშირი დამოწმებულია +torlauncher.bootstrapStatus.circuit_create=წრედების შექმნა: Tor-წრედის დამყარება +torlauncher.bootstrapStatus.done=Tor-ქსელთან დაკავშირებულია! + +torlauncher.bootstrapWarning.done=მზადაა +torlauncher.bootstrapWarning.connectrefused=კავშირი უარყოფილია +torlauncher.bootstrapWarning.misc=სხვადასხვა +torlauncher.bootstrapWarning.resourcelimit=არასაკმარისი რესურსები +torlauncher.bootstrapWarning.identity=მოწმობა არ ემთხვევა +torlauncher.bootstrapWarning.timeout=კავშირის დაყოვნება +torlauncher.bootstrapWarning.noroute=მისამართი არაა აღნიშნული +torlauncher.bootstrapWarning.ioerror=წაკითხვა/ჩაწერის შეცდომა +torlauncher.bootstrapWarning.pt_missing=მისაერთებელი გადამყვანი ვერ მოიძებნა + +torlauncher.nsresult.NS_ERROR_NET_RESET=სერვერთან კავშირი დაიკარგა. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=სერვერთან დაკავშირება ვერ ხერხდება. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=პროქსისთან დაკავშირება ვერ ხერხდება. + +torlauncher.copiedNLogMessagesShort=აღებულია %S აღრიცხვების ასლი diff --git a/toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd new file mode 100644 index 000000000000..c6725703f575 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName;의 개발자: "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", 여러분의 개인 정보 보호과 인터넷의 자유를 위해 비영리로 운영되는 서비스"> + +<!ENTITY help.start "도움이 필요하신가요?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "후원하기"> +<!ENTITY help.or "또는"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "서비스 향상에 기여하기"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "질문이 있으신가요?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Tor 네트워크가 성장할 수 있도록 도와주세요!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "라이센스 정보"> +<!ENTITY tor.TrademarkStatement "'Tor'와 'Onion Logo'는 Tor Project의 등록 상표입니다."> diff --git a/toolkit/torbutton/chrome/locale/ko/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ko/aboutTBUpdate.dtd new file mode 100644 index 000000000000..ddddd51d8925 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor 브라우저 변경이력"> +<!ENTITY aboutTBUpdate.updated "Tor 브라우저가 업데이트되었습니다."> +<!ENTITY aboutTBUpdate.linkPrefix "이번 릴리스의 최신 정보를 알아보려면,"> +<!ENTITY aboutTBUpdate.linkLabel "Tor 프로젝트 웹사이트를 방문해주세요"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "버젼"> +<!ENTITY aboutTBUpdate.releaseDate "릴리스 일자"> +<!ENTITY aboutTBUpdate.releaseNotes "릴리tm 노트"> diff --git a/toolkit/torbutton/chrome/locale/ko/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ko/aboutTor.dtd new file mode 100644 index 000000000000..5f87d6b7d11e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tor에 대해"> + +<!ENTITY aboutTor.viewChangelog.label "변경이력 보기"> + +<!ENTITY aboutTor.ready.label "개인정보 보호 탐색."> +<!ENTITY aboutTor.ready2.label "전 세계에서 가장 은밀한 브라우징 경험을 할 준비가 됐습니다."> +<!ENTITY aboutTor.failure.label "뭔가 잘못됐습니다!"> +<!ENTITY aboutTor.failure2.label "Tor는 이 브라우저에서 작동되지 않습니다."> + +<!ENTITY aboutTor.search.label "DuckDuckGo로 검색"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "질문이 있으신가요?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Tor 브라우저 매뉴얼을 살펴보세요 »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor 브라우저 매뉴얼"> + +<!ENTITY aboutTor.tor_mission.label "Tor 프로젝트는 자유와 인권증진에 기여하는 US 501(c)(3) 비영리 단체입니다. 익명성과 사생활 보호 관련 자유 · 오픈소스 기술 개발 및 배포하고 있습니다. 또한 이를 제한 없이 이용하고 모두가 더 잘 이해할 수 있도록 계속 지원하고 있습니다. "> +<!ENTITY aboutTor.getInvolved.label "참여하기 »"> + +<!ENTITY aboutTor.newsletter.tagline "Tor에 대한 최신 소식을 메일로 바로 받아보세요."> +<!ENTITY aboutTor.newsletter.link_text "Tor 뉴스를 구독하기."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor를 자유롭게 사용할 수 있는 건 바로 당신과 같은 사람들의 후원 덕분입니다."> +<!ENTITY aboutTor.donationBanner.buttonA "후원하기"> + +<!ENTITY aboutTor.alpha.ready.label "테스트하세요. 철저하게."> +<!ENTITY aboutTor.alpha.ready2.label "전 세계에서 가장 은밀한 브라우징 경험을 지금부터 테스트해보세요"> +<!ENTITY aboutTor.alpha.bannerDescription "Tor 브라우저 알파는 Tor 브라우저의 불안정 버전입니다. 새로운 기능을 미리 경험해볼 수 있고, 잘 작동하는지 테스트한 후 정식 릴리스 전까지 피드백을 제공할 수 있습니다."> +<!ENTITY aboutTor.alpha.bannerLink "Tor 포럼에 버그를 보고하세요"> + +<!ENTITY aboutTor.nightly.ready.label "테스트하세요. 철저하게."> +<!ENTITY aboutTor.nightly.ready2.label "전 세계에서 가장 은밀한 브라우징 경험을 지금부터 테스트해보세요"> +<!ENTITY aboutTor.nightly.bannerDescription "Tor 브라우저 Nightly는 새로운 기능을 미리 사용해보고, 성능을 테스트하고, 출시 전에 피드백을 제공하는 데 사용할 수 있는 Tor 브라우저 베타 버전입니다."> +<!ENTITY aboutTor.nightly.bannerLink "Tor 포럼에 버그를 보고하세요"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "기부하기"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "당신이 기부한 금액만큼 Tor의 친구들이 또한번 기부를 할 것이다. $100,000 까지"> diff --git a/toolkit/torbutton/chrome/locale/ko/brand.dtd b/toolkit/torbutton/chrome/locale/ko/brand.dtd new file mode 100644 index 000000000000..857165489c4e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor 브라우저"> +<!ENTITY brandShortName "Tor 브라우저"> +<!ENTITY brandFullName "Tor 브라우저"> +<!ENTITY vendorShortName "Tor 프로젝트"> +<!ENTITY trademarkInfo.part1 "'Tor'와 'Onion Logo'는 Tor 프로젝트의 등록 상표입니다."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor 브라우저"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "클릭하여 플러그인 불러오기"> +<!ENTITY plugins.installed.enable "플러그인 활성"> +<!ENTITY plugins.installed.disable "플러그인 비활성"> +<!ENTITY plugins.installed.disable.tip "클릭하여 플러그인 열기 취소"> diff --git a/toolkit/torbutton/chrome/locale/ko/brand.properties b/toolkit/torbutton/chrome/locale/ko/brand.properties new file mode 100644 index 000000000000..24ce146f12e9 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor 브라우저 +brandShortName=Tor 브라우저 +brandFullName=Tor 브라우저 +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor 브라우저 +vendorShortName=Tor 프로젝트 + +homePageSingleStartMain='Firefox 시작'은 내장 검색엔진이 탑재된 빠른 홈페이지입니다. +homePageImport=%S 에서 홈페이지 가져오기 + +homePageMigrationPageTitle=홈페이지 선택 +homePageMigrationDescription=사용하고 싶으신 홈페이지를 선택하세요. + +syncBrandShortName=동기화 diff --git a/toolkit/torbutton/chrome/locale/ko/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ko/branding/brand.ftl new file mode 100644 index 000000000000..c51476e9dc9d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor 브라우저 +-brand-short-name = Tor 브라우저 +-brand-full-name = Tor 브라우저 +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor 브라우저 +-vendor-short-name = Tor 프로젝트 +trademarkInfo = 'Tor'와 'Onion Logo'는 Tor 프로젝트의 등록 상표입니다. diff --git a/toolkit/torbutton/chrome/locale/ko/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ko/browserOnboarding.properties new file mode 100644 index 000000000000..677183909305 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=환영합니다 +onboarding.tour-tor-welcome.title=준비됐습니다. +onboarding.tour-tor-welcome.description=Tor 브라우저는 최고 수준의 개인정보 보호와 최고 수준의 보안을 제공하는 웹 브라우저입니다. 추적과 감시, 그리고 검열으로부터 보호해드립니다. 이 속성 과정을 통해 그 방법을 보여드리겠습니다. +onboarding.tour-tor-welcome.next-button=개인정보 항목으로 가봅니다. + +onboarding.tour-tor-privacy=개인정보 +onboarding.tour-tor-privacy.title=추적기와 정부기관의 감시를 떼어내기 +onboarding.tour-tor-privacy.description=Tor 브라우저는 세션종료 후 쿠키를 격리하고 브라우저 기록을 삭제합니다. 이러한 변화는 브라우저에서의 여러분 개인정보를 보호하고 보안을 확실히 합니다. 네트워크 수준에서 당신을 어떻게 보호하고 있는지를 알수 있도록 'Tor 네트워크' 항목을 클릭하십시오. +onboarding.tour-tor-privacy.button=Tor 네트워크 항목으로 가세요 + +onboarding.tour-tor-network=Tor 네트워크 +onboarding.tour-tor-network.title=탈중앙화된 분산 네트워크로 이동합니다. +onboarding.tour-tor-network.description=Tor 브라우저는 전세계 수천명의 자원 봉사자에 의해 운영되는 Tor 네트워크와 당신을 연결합니다. VPN과 다르게, 인터넷을 개인적으로 즐기는 당신이 신뢰해야하는 단일된 장애 지점과 중앙화된 요소는 없습니다. +onboarding.tour-tor-network.description-para2=새로운 기능: Tor가 차단된 환경에서 브리지를 요청하는 기능과 같은 Tor 네트워크 설정을 설정에서 이용하실 수 있습니다. +onboarding.tour-tor-network.action-button=Tor 네트워크 설정을 조정합니다 +onboarding.tour-tor-network.button=우회로 표시 항목으로 가봅니다. + +onboarding.tour-tor-circuit-display=우회로 표시 +onboarding.tour-tor-circuit-display.title=네트워크 경로를 확인합니다. +onboarding.tour-tor-circuit-display.description=각 도메인에 접근할 때마다 트래픽은 전세계에 퍼져있는 3개의 Tor 중계서버에 걸쳐 하나의 경로로 중계되고 암호화됩니다. 그렇기에 어떤 웹사이트에서도 당신이 어디에서 접속하고 있는지를 알 수 없습니다. '우회로 표시(Circuit Display)' 항목에서 "Tor 우회로 재구성"을 클릭하여 새로운 경로를 요청할 수 있습니다. +onboarding.tour-tor-circuit-display.button=나의 네트워크 경로를 확인합니다. +onboarding.tour-tor-circuit-display.next-button=보안 항목으로 가봅니다. + +onboarding.tour-tor-security= 보안 +onboarding.tour-tor-security.title=당신의 경험을 골라보세요. +onboarding.tour-tor-security.description=브라우저의 보안을 강화하기위한 추가 설정도 또한 제공합니다. 우리의 보안 설정은 당신의 컴퓨터가 공격당하는 데 사용될 수있는 요소를 차단하는 것이 가능하게 해줍니다. 아래를 클릭하여 다양한 옵션 기능을 확인하십시오. +onboarding.tour-tor-security.description-suffix=참고: 기본적으로 NoScript와 HTTPS Everywhere는 툴바에 포함되어 있지는 않지만, 툴바를 커스퍼마이즈하여 추가 할 수 있습니다. +onboarding.tour-tor-security-level.button=보안 레벨을 확인합니다. +onboarding.tour-tor-security-level.next-button=경험한 팁 항목으로 가봅니다. + +onboarding.tour-tor-expect-differences=경험한 팁 +onboarding.tour-tor-expect-differences.title=차이점 기대하기 +onboarding.tour-tor-expect-differences.description=Tor가 제공하는 모든 보안 및 개인정보 보호 기능을 통해 인터넷을 탐색하는 동안 당신의 경험은 조금 다를지도 모릅니다. 어떤 것은 조금 느려질지 수 있고, 보안 수준 설정에 따라 몇 가지 요소는 작동하지 않거나 로드하지 않을지도 모릅니다. 당신 자신이 인간이며 로봇이 아님을 증명하도록 요구받을 수도 있습니다. +onboarding.tour-tor-expect-differences.button=자주 묻는 질문을 확인하기 +onboarding.tour-tor-expect-differences.next-button=Onion 서비스 항목으로 가봅니다. + +onboarding.tour-tor-onion-services=Onion 서비스 +onboarding.tour-tor-onion-services.title=더 각별히 보호되는 서비스를 이용하세요. +onboarding.tour-tor-onion-services.description=Onion 서비스는 검열에 대한 추가 보호 조치를 포함하여 저작자 및 방문자에게 특별한 보호 조치를 제공하는 .onion 확장자로 끝나는 사이트입니다. Onion 서비스는 누구나 익명으로 콘텐츠와 서비스를 제공하는 것을 가능하게 합니다. 아래를 클릭하여 DuckDuckGo Onion 사이트를 방문하십시오. +onboarding.tour-tor-onion-services.button=onion에 방문하기 +onboarding.tour-tor-onion-services.next-button=완료 + +onboarding.overlay-icon-tooltip-updated2=%S 에서의 새로운 요소 살펴보기 +onboarding.tour-tor-update.prefix-new=새로 이음 +onboarding.tour-tor-update.prefix-updated=업데이트됨 + +onboarding.tour-tor-toolbar=툴바 +onboarding.tour-tor-toolbar-update-9.0.title=잘가, onion 버튼. +onboarding.tour-tor-toolbar-update-9.0.description=Tor를 사용한 경험이 Tor Browser에 완벽하게 통합되기를 바랍니다. +onboarding.tour-tor-toolbar-update-9.0.description-para2=그래서 Onion 버튼을 사용하는 대신 주소 표시줄의 [i]를 통해 Tor 우회로를 볼 수 있으며 도구 버튼 또는 [≡] 메뉴를 사용하여 새로운 신원을 요청할 수 있습니다. +onboarding.tour-tor-toolbar-update-9.0.button=새 ID 요청 방법 +onboarding.tour-tor-toolbar-update-9.0.next-button=Tor 네트워크 항목으로 가봅니다. + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=다음 +onboarding.tor-circuit-display.done=완료 +onboarding.tor-circuit-display.one-of-three=3단계 중 1단계 +onboarding.tor-circuit-display.two-of-three=3단계 중 2단계 +onboarding.tor-circuit-display.three-of-three=3단계 중 3단계 + +onboarding.tor-circuit-display.intro.title=우회로는 어떻게 작동하나요? +onboarding.tor-circuit-display.intro.msg=우회로는 임의로 할당된 중계서버 노드들로 구성되어 있습니다. 전 세계 상의 컴퓨터인 중계서버가 Tor 트래픽을 전달합니다. 이러한 우회로를 통해 은밀하게 브라우징하고, onion 서비스에 연결할 수 있습니다. + +onboarding.tor-circuit-display.diagram.title=우회로 표시 +onboarding.tor-circuit-display.diagram.msg=이 도식에서 이 웹사이트 대상의 우회로를 구성하는 중계서버를 확인할 수 있습니다. 여러 사이트에서의 활동이력을 통한 추적을 방지하기 위해, 구성된 우회로는 각 웹사이트마다 상이합니다. + +onboarding.tor-circuit-display.new-circuit.title=새로운 우회로가 필요하신가요? +onboarding.tor-circuit-display.new-circuit.msg=해당 버튼을 방문하려는 웹 사이트가 연결되지 않거나, 제대로 로드되지 않는 경우 사용해보세요. 이 버튼을 누르면 우회로를 재구성한 후, 재구성된 우회로로 사이트에 재접속(reload)합니다. diff --git a/toolkit/torbutton/chrome/locale/ko/network-settings.dtd b/toolkit/torbutton/chrome/locale/ko/network-settings.dtd new file mode 100644 index 000000000000..15fbac8a21ec --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor 네트워크 설정"> +<!ENTITY torsettings.wizard.title.default "Tor에 연결하기"> +<!ENTITY torsettings.wizard.title.configure "Tor 네트워크 설정"> +<!ENTITY torsettings.wizard.title.connecting "연결되는 중"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor 브라우저 언어"> +<!ENTITY torlauncher.localePicker.prompt "언어를 선택해 주십시오."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "To에 연결하기 위해 "연결"을 클릭하세요."> +<!ENTITY torSettings.configurePrompt "Tor를 검열하는 국가(이집트, 중국, 터키 등) 나 프록시가 필요한 사설 네트워크에서 연결하는 경우, "설정"을 클릭하여 네트워크 설정을 조정합니다."> +<!ENTITY torSettings.configure "구성"> +<!ENTITY torSettings.connect "연결"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Tor 시작 대기 중..."> +<!ENTITY torsettings.restartTor "Tor 재시작"> +<!ENTITY torsettings.reconfigTor "재구성"> + +<!ENTITY torsettings.discardSettings.prompt "Tor 브리지를 구성했거나 로컬 프록시 설정을 입력했습니다. Tor 네트워크에 직접 연결하려면 이 설정을 제거해야 합니다."> +<!ENTITY torsettings.discardSettings.proceed "설정 제거 및 연결"> + +<!ENTITY torsettings.optional "옵션"> + +<!ENTITY torsettings.useProxy.checkbox "인터넷에 연결할 때 프록시를 사용합니다"> +<!ENTITY torsettings.useProxy.type "프록시 종류"> +<!ENTITY torsettings.useProxy.type.placeholder "프록시 유형을 선택해 주세요."> +<!ENTITY torsettings.useProxy.address "주소"> +<!ENTITY torsettings.useProxy.address.placeholder "IP 주소 또는 호스트 네임"> +<!ENTITY torsettings.useProxy.port "포트"> +<!ENTITY torsettings.useProxy.username "Username"> +<!ENTITY torsettings.useProxy.password "비밀번호"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "이 컴퓨터는 특정 포트만 허용하는 방화벽을 통해서 연결됩니다."> +<!ENTITY torsettings.firewall.allowedPorts "허용된 포트"> +<!ENTITY torsettings.useBridges.checkbox "우리나라에서는 Tor를 검열합니다."> +<!ENTITY torsettings.useBridges.default "제공된 브릿지를 선택하기"> +<!ENTITY torsettings.useBridges.default.placeholder "브리지를 선택하세요."> +<!ENTITY torsettings.useBridges.bridgeDB "torproject.org에서 브릿지 요청하기"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "이미지에 나온 글자를 입력하세요."> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "새로운 캡차 시도값을 구합니다."> +<!ENTITY torsettings.useBridges.captchaSubmit "제출확인"> +<!ENTITY torsettings.useBridges.custom "내가 아는 브리지를 제공"> +<!ENTITY torsettings.useBridges.label "신뢰 가능한 출처에서 받은 브리지 정보를 입력하세요"> +<!ENTITY torsettings.useBridges.placeholder "주소:포트번호 입력하세요.(한줄에 하나씩)"> + +<!ENTITY torsettings.copyLog "Tor log를 클립보드에 복사하기"> + +<!ENTITY torsettings.proxyHelpTitle "프록시 도움말"> +<!ENTITY torsettings.proxyHelp1 "회사나 학교 혹은 대학 네트워크를 통해 연결하는 경우에 로컬 프록시가 필요할 수 있습니다. 프록시가 필요한지 모르는 경우에는 다른 브라우저에서 인터넷 설정을 확인하거나 시스템의 네트워크 설정을 확인하세요."> + +<!ENTITY torsettings.bridgeHelpTitle "브리지 중계서버 도움말"> +<!ENTITY torsettings.bridgeHelp1 "브리지는 Tor 네트워크에 대한 연결을 차단하는 것을 더 어렵게 해주는 비공개 중계서버입니다.  각 유형의 브리지는 검열을 피하기 위해 각기 다른 방법을 사용합니다.   obfs는 트래픽을 임의의 노이즈처럼 보이게 해줍니다. 그리고 meek은 Tor 대신에 meek 서비스에 연결되어있는 것처럼 보이게 해줍니다."> +<!ENTITY torsettings.bridgeHelp2 "일부 국가에서 어떤 방식으로든 Tor를 차단하려고 하기 때문에, 어떤 브리지는 특정 국가에서는 동작하지만 다른 곳에서는 그렇지 않습니다.  당신의 나라에서 어떤 브리지가 동작하고 있는지 모르는 경우 torproject.org/about/contact.html#support를 방문하세요."> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Tor 네트워크에 연결할 때까지 기다려주십시오.  몇 분 정도 소요될 수 있습니다."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Tor 연결"> +<!ENTITY torPreferences.torSettings "Tor 설정"> +<!ENTITY torPreferences.torSettingsDescription "Tor 브라우저는 전세계 수천명의 자원 봉사자에 의해 운영되는 Tor 네트워크와 당신을 연결합니다." > +<!ENTITY torPreferences.learnMore "더 알아보기"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "인터넷:"> +<!ENTITY torPreferences.statusInternetTest "테스트"> +<!ENTITY torPreferences.statusInternetOnline "온라인"> +<!ENTITY torPreferences.statusInternetOffline "오프라인"> +<!ENTITY torPreferences.statusTorLabel "Tor 네트워크:"> +<!ENTITY torPreferences.statusTorConnected "접속됨"> +<!ENTITY torPreferences.statusTorNotConnected "연결되지 않음"> +<!ENTITY torPreferences.statusTorBlocked "차단됐을 가능성이 있습니다"> +<!ENTITY torPreferences.learnMore "더 알아보기"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "빠른 시작"> +<!ENTITY torPreferences.quickstartDescriptionLong "'빠른시작'을 선택하면 Tor 브라우저가 실행될 때 Tor 네트워크에 자동으로 접속됩니다. 이때 설정 방식은 직전의 연결 설정을 따릅니다."> +<!ENTITY torPreferences.quickstartCheckbox "항상 자동으로 연결"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "브리지"> +<!ENTITY torPreferences.bridgesDescription "'브리지'는 Tor가 차단된 환경에서 Tor 네트워크에 접속하려 할 때 유용합니다. 주어진 환경에 따라 브리지를 사용하는 게 다른 중계서버를 사용하는 것 보다 원할할 수 있습니다."> +<!ENTITY torPreferences.bridgeLocation "귀하의 위치"> +<!ENTITY torPreferences.bridgeLocationAutomatic "자동"> +<!ENTITY torPreferences.bridgeLocationFrequent "자주 선택하는 위치"> +<!ENTITY torPreferences.bridgeLocationOther "다른 위치"> +<!ENTITY torPreferences.bridgeChooseForMe "Tor 브라우저에서 귀하에게 맞는 브리지를 자동으로 선택하도록 설정…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "귀하의 현재 브리지"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "추가한 브리지를 저장해두면, 귀하가 연결할 때 사용할 브리지 중 하나로 Tor가 고르게 될 겁니다. 필요한 때에 맞춰 Tor에서 자동으로 브리지를 바꾸는 작업을 진행합니다."> +<!ENTITY torPreferences.bridgeId "#1 브리지: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "제거하기"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "내장 브리지를 비활성화"> +<!ENTITY torPreferences.bridgeShare "QR 코드를 활용하거나, 다음 주소를 복사해 이 브리지를 공유할 수 있습니다:"> +<!ENTITY torPreferences.bridgeCopy "브리지 주소 복사"> +<!ENTITY torPreferences.copied "복사됨!"> +<!ENTITY torPreferences.bridgeShowAll "모든 브리지 조회"> +<!ENTITY torPreferences.bridgeRemoveAll "모든 브리지 삭제"> +<!ENTITY torPreferences.bridgeAdd "새로운 브리지 추가"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Tor 브라우저 기본 내장 브리지 중에서 선택하기"> +<!ENTITY torPreferences.bridgeSelectBuiltin "내장 브리지를 선택하기"> +<!ENTITY torPreferences.bridgeRequest "브리지 요청하기"> +<!ENTITY torPreferences.bridgeEnterKnown "기존에 알고 있던 브리지 주소를 입력하기"> +<!ENTITY torPreferences.bridgeAddManually "브리지를 수동으로 추가하기…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "고급설정"> +<!ENTITY torPreferences.advancedDescription "Tor 브라우저에서 인터넷에 연결하는 방식을 설정하세요"> +<!ENTITY torPreferences.advancedButton "설정…"> +<!ENTITY torPreferences.viewTorLogs "Tor 로그 조회"> +<!ENTITY torPreferences.viewLogs "로그 조회"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "모든 브리지를 삭제할까요?"> +<!ENTITY torPreferences.removeBridgesWarning "이 작업이 이루어진 후 되돌릴 수 없습니다."> +<!ENTITY torPreferences.cancel "취소"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR 코드 스캔"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "내장 브리지"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor 브라우저엔 '장착형 전송수단'이라는 특수 유형의 브리지가 있습니다."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4는 내장 브리지의 일종입니다. Tor 트래픽이 랜덤하게 보이도록 만드는 역할을 담당합니다. obfs4는 obfs3 브리지와 같은 기존의 내장 브리지와 달리 차단 가능성도 적습니다."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake는 검열을 타파할 수 있는 내장 브리지입니다. 자원 봉사자 분들이 운영하는 Snowflake 프록시에 귀하의 연결이 거쳐 전송되도록 설정함으로써 이를 실현합니다. "> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure는 Tor를 사용하는 걸 감추고, Microsoft 웹 사이트를 이용중인 것처럼 만들어주는 내장 브리지입니다."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "브리지 요청하기"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "브리지DB에 연결하고 있으니, 잠시 기다려주세요."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "브리지를 요청하기 위해 CAPCHA를 풀어주세요."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "제출한 답이 맞지 않습니다. 다시 시도해주세요."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "브리지 제공"> +<!ENTITY torPreferences.provideBridgeHeader "신뢰 가능한 출처에서 받은 브리지 정보를 입력하세요"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "연결 설정"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Tor 브라우저에서 인터넷에 연결하는 방식을 설정하세요"> +<!ENTITY torPreferences.firewallPortsPlaceholder "쉼표로 구분 된 값"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor 로그"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "연결되지 않음"> +<!ENTITY torConnect.connectingConcise "접속중..."> +<!ENTITY torConnect.tryingAgain "다시 시도하는 중입니다…"> +<!ENTITY torConnect.noInternet "Tor 브라우저에서 인터넷에 연결할 수 없습니다"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor 브라우저에서 Tor에 연결할 수 없습니다"> +<!ENTITY torConnect.assistDescriptionConfigure "연결 세부 설정"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "귀하의 지역에서 Tor가 차단됐다면, 브리지를 사용하는 게 도움이 될 수 있습니다. '연결 도우미'로 귀하의 위치에 기반한 적합한 브리지를 제공받을 수 있습니다. 아니면 #1 수동으로 브리지를 선택할 수도 있습니다."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "브리지 사용…"> +<!ENTITY torConnect.tryingBridgeAgain "한 번 더 해보고 있습니다…"> +<!ENTITY torConnect.errorLocation "Tor 브라우저에서 귀하의 위치를 파악할 수 없습니다."> +<!ENTITY torConnect.errorLocationDescription "Tor 브라우저에서 귀하의 환경에 맞는 브리지를 선택할 수 있도록, 귀하의 위치 정보가 필요합니다. 귀하의 위치를 공유하는 게 꺼려진다면, 자동으로 하지 마시고 #1 수동으로 설정하세요."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "위치가 제대로 설정된 게 맞나요?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor 브라우저에서 Tor에 여전히 연결할 수 없는 상태입니다. 귀하의 '위치 설정'이 올바르게 돼있는지 점검해본 후 다시 시도해주세요. 혹은 #1의 방식을 대신 써보세요."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "연결 도우미"> +<!ENTITY torConnect.breadcrumbLocation "위치 설정"> +<!ENTITY torConnect.breadcrumbTryBridge "브리지 사용하기"> +<!ENTITY torConnect.automatic "자동"> +<!ENTITY torConnect.selectCountryRegion "국가 혹은 지역을 선택하세요"> +<!ENTITY torConnect.frequentLocations "자주 선택하는 위치"> +<!ENTITY torConnect.otherLocations "다른 위치"> +<!ENTITY torConnect.restartTorBrowser "Tor 브라우저 재시작"> +<!ENTITY torConnect.configureConnection "연결 구성중..."> +<!ENTITY torConnect.viewLog "로그 조회…"> +<!ENTITY torConnect.tryAgain "다시 시도하기"> +<!ENTITY torConnect.offline "인터넷에 연결할 수 없습니다"> +<!ENTITY torConnect.connectMessage "Tor 설정의 변경사항은 Tor에 연결하기 전까지 적용되지 않습니다"> +<!ENTITY torConnect.tryAgainMessage "Tor 브라우저에서 Tor 네트워크에 연결하는 데 실패했습니다"> +<!ENTITY torConnect.yourLocation "귀하의 위치"> +<!ENTITY torConnect.tryBridge "브리지 사용하기"> +<!ENTITY torConnect.autoBootstrappingFailed "자동 구성 실패"> +<!ENTITY torConnect.autoBootstrappingFailed "자동 구성 실패"> +<!ENTITY torConnect.cannotDetermineCountry "사용자의 국가를 파악할 수 없습니다"> +<!ENTITY torConnect.noSettingsForCountry "귀하의 위치에서 이용할 수 있는 설정이 없습니다"> diff --git a/toolkit/torbutton/chrome/locale/ko/onboarding.properties b/toolkit/torbutton/chrome/locale/ko/onboarding.properties new file mode 100644 index 000000000000..1188fbeeb643 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=%S가 처음이신가요?\n 같이 살펴보겠습니다. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S가 완전 새로와 졌습니다.\n 무엇을 할 수 있나 살펴봅시다! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=닫기 +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=완료 +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=완료 diff --git a/toolkit/torbutton/chrome/locale/ko/torbutton.dtd b/toolkit/torbutton/chrome/locale/ko/torbutton.dtd new file mode 100644 index 000000000000..f8313243299f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "신원 재설정"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "신원 재설정"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Tor 우회로 재구성"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Tor 우회로 재구성"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor 네트워크 설정..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor 브라우저 업데이트 확인하기.."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "쿠키 보호..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "클릭하여 Torbutton 설정 초기하기"> +<!ENTITY torbutton.prefs.security_settings "Tor 브라우저 보안 설정"> +<!ENTITY torbutton.cookiedialog.title "쿠키 보호 관리"> +<!ENTITY torbutton.cookiedialog.lockCol "보호됨"> +<!ENTITY torbutton.cookiedialog.domainCol "호스트"> +<!ENTITY torbutton.cookiedialog.nameCol "이름"> +<!ENTITY torbutton.cookiedialog.pathCol "경로"> +<!ENTITY torbutton.cookiedialog.protectCookie "쿠키 보호"> +<!ENTITY torbutton.cookiedialog.removeCookie "쿠키 삭제"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "쿠키 보호하지 않음"> +<!ENTITY torbutton.cookiedialog.removeAllBut "보호된 것 빼고 모두 지우기"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "새로운 쿠키 보호"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "새로운 쿠키를 보호하지 않음"> +<!ENTITY torbutton.prefs.sec_caption "보안 등급"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "보안 슬라이더를 사용하면 특정 브라우저 기능이 비활성화되어 브라우저가 해킹 시도에 취약해질 수 있습니다."> +<!ENTITY torbutton.prefs.sec_standard_label "표준"> +<!ENTITY torbutton.prefs.sec_standard_description "모든 Tor 브라우저와 웹사이트의 기능들이 활성화 됩니다."> +<!ENTITY torbutton.prefs.sec_safer_label "매우 안전함"> +<!ENTITY torbutton.prefs.sec_safer_description "웹사이트 내 위험하다고 판단되는 기능을 비활성화합니다. 몇몇 사이트의 기능을 사용할 수 없게 됩니다."> +<!ENTITY torbutton.prefs.sec_safer_list_label "더 안전한 설정을 사용 중입니다."> +<!ENTITY torbutton.prefs.sec_safest_label "가장 안전함"> +<!ENTITY torbutton.prefs.sec_safest_description "정적 사이트와 기본 서비스에 필요한 기능에만 허용됩니다. 이 변경사항들은 이미지, 미디어, 스크립트에 영향을 줍니다."> +<!ENTITY torbutton.prefs.sec_safest_list_label "가장 안전한 설정을 사용 중입니다."> +<!ENTITY torbutton.prefs.sec_learn_more_label "더 알아보기"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript가 HTTPS을 적용되지 않은 사이트에서 비활성화 됩니다."> +<!ENTITY torbutton.prefs.sec_js_disabled "자바스크립트가 기본적으로 비활성화 됩니다."> +<!ENTITY torbutton.prefs.sec_limit_typography "일부 글꼴, 수학기호가 비활성화 됩니다."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "일부 글꼴, 상징, 수학 기호, 사진이 비활성화 됩니다."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "오디오와 비디오(HTML5로 표현된), 그리고 WebGL 은 클릭하여 재생합니다."> +<!ENTITY torbutton.prefs.sec_custom_warning "사용자 맞춤"> +<!ENTITY torbutton.prefs.sec_overview "보안과 익명성을 공격하는 데 사용될 수 있는 특정한 웹의 기능을 해제합니다."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "보안 등급 : 표준"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "보안 등급 : 매우 안전함"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "보안 등급 : 가장 안전함"> +<!ENTITY torbutton.prefs.sec_custom_summary "사용자 지정 브라우저 설정으로 인해 비정상적인 보안 설정이 발생했습니다. 보안 및 개인정보 보호를 위하여 보안 수준의 기본값 중 하나를 선택하는 것이 좋습니다."> +<!ENTITY torbutton.prefs.sec_restore_defaults "기본값으로 복구"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "고급 보안 설정"> +<!ENTITY torbutton.prefs.sec_change "변경..."> +<!ENTITY torbutton.circuit_display.title "Tor 우회로"> +<!ENTITY torbutton.circuit_display.new_circuit "Tor 우회로 재구성"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Onion 서비스 클라이언트 인증 프롬프트 열기"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "이 키를 기억하기"> diff --git a/toolkit/torbutton/chrome/locale/ko/torbutton.properties b/toolkit/torbutton/chrome/locale/ko/torbutton.properties new file mode 100644 index 000000000000..f7abaf4d7851 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = 인터넷 +torbutton.circuit_display.ip_unknown = 미확인 IP +torbutton.circuit_display.onion_site = Onion 사이트 +torbutton.circuit_display.this_browser = 이 브라우저 +torbutton.circuit_display.relay = 중계서버 +torbutton.circuit_display.tor_bridge = 브리지 +torbutton.circuit_display.unknown_country = 미확인 국가 +torbutton.circuit_display.guard = 가드 +torbutton.circuit_display.guard_note = [가드] 노드가 변경되지 않을 수 있습니다. +torbutton.circuit_display.learn_more = 더 알아보기 +torbutton.circuit_display.click_to_copy = 클릭하여 복사하기 +torbutton.circuit_display.copied = 복사됨! +torbutton.content_sizer.margin_tooltip = Tor 브라우저는 이 여백을 추가하여 창의 너비와 높이를 일반화 시켜 온라인에서 사용자를 추적하는 기능을 약화 시킵니다. +extensions.torbutton@torproject.org.description = Torbutton은 Tor 설정을 해 주는 버튼을 제공하고, 빠르고 쉽게 개인 브라우징 데이터를 지워 줍니다. +torbutton.popup.external.title = 외부 파일 유형을 다운로드 하시겠습니까? +torbutton.popup.external.app = Tor 브라우저는이 파일을 볼 수 없습니다. 다른 응용 프로그램에서 열어야합니다.\n\n +torbutton.popup.external.note = 파일 유형에 응용 프로그램이 Tor를 사용하지 않고 인터넷에 연결하는 원인이 될 수있는 것이 있습니다.\n\n +torbutton.popup.external.suggest = 안전하기 위하여 오프라인 일 때만 다운로드 한 파일을 열거 나 Tails 같은 Tor 라이브 CD를 사용해야합니다.\n +torbutton.popup.launch = 파일을 다운로드 하기 +torbutton.popup.cancel = 취소 +torbutton.popup.dontask = 지금부터 파일을 자동으로 다운로드 +torbutton.popup.no_newnym = Torbutton은 안전하게 새로운 신원을 줄 수 없습니다. 이것은 Tor 컨트롤 포트에 접근할 수 없습니다.\n\nTor 브라우저 Bundle을 사용하고 계십니까? +torbutton.security_settings.menu.title = 보안 설정 +torbutton.title.prompt_torbrowser = 중요한 Torbutton 정보 +torbutton.popup.prompt_torbrowser = Torbutton은 지금 다르게 작동합니다. 귀하는 더이상 끌 수 없습니다.\n\n비Tor 브라우징에 사용될 수 있는 브라우저에서 사용하는 것은 위험하기 때문에 이 변화를 만들었습니다.\n\n우리가 어떤 다른 방법으로 고칠 수 없는 수많은 버그도 있습니다. 만약 Firefox를 일반적으로 사용하기를 원하신다면 Torbutton을 언인스톨 하시고 Tor Browser Bundle을 다운로드 하십시오. Tor 브라우저의 프라이버시 설정은, 심지어 Firefox가 Torbutton과 쓰였더라도, 보통의 Firefox의 설정에 우선합니다.\n\nTorbutton을 지우시려면, 도구 - 부가 기능 - 확장에 들어가셔셔 Torbutton 옆의 제거 버튼을 누르십시오. +torbutton.popup.short_torbrowser = 중요한 Torbutton 정보!\n\nTorbutton은 이제 항상 활성화됩니다.\n\nTorbutton을 클릭해 더 자세히 알아보세요. + +torbutton.popup.confirm_plugins = 플래시와 같은 플러그인들은 당신의 프라이버시와 익명성을 해칠 수 있습니다.\n\n또한 Tor을 우회하여 당신의 현재 위치와 IP주소를 노출시킬 수도 있습니다.\n\n정말로 플러그인을 허용하시겠습니까?\n\n +torbutton.popup.never_ask_again = 다시 묻지 않기 +torbutton.popup.confirm_newnym = Tor 브라우저의 모든 창과 탭을 닫습니다. 모든 웹 사이트의 세션이 손실됩니다.\n\n신원을 재설정 하기 위해 지금 Tor 브라우저를 다시 시작할까요?\n\n + +torbutton.maximize_warning = Tor 브라우저를 최대화하면 웹 사이트에서 모니터 크기를 결정하여 사용자를 추적 할 수 있습니다. Tor 브라우저 창은 원래 기본 크기로 두는 것이 좋습니다. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=이 웹 사이트 (%S)는 컴퓨터를 고유하게 식별하는 데 사용될 수 있는 HTML5 캔버스 이미지 데이터를 추출하려고 시도했습니다.\n\nTor 브라우저가 이 웹 사이트에서 HTML5 캔버스 이미지 데이터를 추출하는것을 허가 할까요? +canvas.notNow=지금은 하지 않겠습니다 +canvas.notNowAccessKey=N +canvas.allow=다음에 허용함 +canvas.allowAccessKey=A +canvas.never=이 사이트에서는 하지 않기 (권장) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S 프로필 문제 +profileReadOnly=%S 에서 읽기전용 파일시스템으로 실행하실 수 없습니다. 사용하시기 전에 %S를 복사하여 다른 곳에서 테스트 해보세요. +profileReadOnlyMac=읽기 전용 파일 시스템에서는 %S를 실행할 수 없습니다. %S를 사용하기 전에 %S를 바탕 화면이나 응용 프로그램 폴더로 복사하십시오. +profileAccessDenied=%S에 프로필 액세스 권한이 없습니다. 파일 시스템 권한을 조정하고 다시 시도하십시오. +profileMigrationFailed=기존 %S 프로필을 이전하지 못했습니다. 새로운 설정이 사용됩니다. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=업데이트 %S 다운로드 중 + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=연결은 암호화했습니다 (Onion 서비스, %1$S, %2$S 비트 키들, %3$S) +pageInfo_OnionEncryption=연결이 암호화했습니다 (Onion 서비스) +pageInfo_OnionName=Onion 이름: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=더 알아보기 +onionServices.errorPage.browser=브라우저 +onionServices.errorPage.network=네트워크 +onionServices.errorPage.onionSite=Onion 사이트 +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Onion 사이트 로딩 문제 +onionServices.descNotFound.header=Onion 사이트를 찾을 수 없음 +onionServices.descNotFound=가장 큰 원인은 Onion 사이트가 오프라인 상태라는 것입니다. Onion 사이트 관리자에게 문의하십시오. +onionServices.descNotFound.longDescription=세부 정보: %S — 요청한 Onion 서비스 설명자를 해시링에서 찾을 수 없으므로 클라이언트가 서비스에 연결할 수 없음. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Onion 사이트 로딩 문제 +onionServices.descInvalid.header=Onion 사이트에 접근할 수 없음 +onionServices.descInvalid=내부 오류로 인해 Onion 사이트에 연결할 수 없습니다. +onionServices.descInvalid.longDescription=세부 정보: %S — 요청한 Onion 서비스 설명자를 구문 분석할 수 없거나 서명 유효성 검사에 실패했습니다. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Onion 사이트 로딩 문제 +onionServices.introFailed.header=Onion 사이트가 끊김. +onionServices.introFailed=가장 큰 원인은 Onion 사이트가 오프라인 상태라는 것입니다. Onion 사이트 관리자에게 문의하십시오. +onionServices.introFailed.longDescription=세부 정보: %S — 소개가 실패했습니다. 즉, 설명자를 찾았지만 서비스가 더 이상 소개 지점에 연결되지 않습니다. 서비스의 설명자가 변경되었거나 서비스가 실행되고 있지 않을 수 있습니다. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Onion 사이트 로딩 문제 +onionServices.rendezvousFailed.header=Onion 사이트에 연결할 수 없음 +onionServices.rendezvousFailed=Onion 사이트가 사용 중이거나 Tor 네트워크가 과부하된 경우. 나중에 다시 시도하십시오. +onionServices.rendezvousFailed.longDescription=세부 정보: %S — 클라이언트가 서비스에 접속하지 못했습니다. 즉, 클라이언트가 연결을 완료할 수 없습니다. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=인증 필요 +onionServices.clientAuthMissing.header=인증이 필요한 Onion 사이트 +onionServices.clientAuthMissing=Onion 사이트에 접속하려면 열쇠가 필요하지만, 아무것도 제공되지 않았습니다. +onionServices.clientAuthMissing.longDescription=세부 정보: %S — 클라이언트가 요청된 Onion 서비스 설명자를 다운로드했지만 클라이언트 권한 부여 정보가 없어 내용을 해독할 수 없습니다. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=인증 실패 +onionServices.clientAuthIncorrect.header=Onion 사이트 인증 실패 +onionServices.clientAuthIncorrect=제공된 키가 잘못되었거나 취소되었습니다. Onion 사이트 관리자에게 문의해주세요. +onionServices.clientAuthIncorrect.longDescription=세부 정보: %S — 클라이언트가 요청된 Onion 서비스 설명자를 다운로드할 수 있었지만 제공된 클라이언트 권한 부여 정보를 사용하여 내용을 해독할 수 없습니다. 이는 액세스가 취소되었음을 의미할 수 있습니다. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Onion 사이트 로딩 문제 +onionServices.badAddress.header=잘못된 Onion 사이트 주소 +onionServices.badAddress=제공된 Onion 사이트 주소가 잘못되었습니다. 정확하게 입력했는지 확인하십시오. +onionServices.badAddress.longDescription=세부 정보: %S — 제공된 .onion 주소가 잘못되었습니다. 이 오류는 주소 체크섬이 일치하지 않거나, eD25519 공용 키가 잘못되었거나, 인코딩이 잘못되었기 때문에 반환됩니다. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Onion 사이트 로딩 문제 +onionServices.introTimedOut.header=Onion 사이트 우회로 생성 시간 초과 +onionServices.introTimedOut=네트워크 연결 불량으로 인해 Onion 사이트에 연결하지 못했습니다. +onionServices.introTimedOut.longDescription=세부 정보: %S — 랑데뷰 우회로를 구성하는 동안 요청된 Onion 서비스에 대한 연결 시간이 초과되었습니다. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S에서 인증을 요청하는 중입니다. +onionServices.authPrompt.keyPlaceholder=이 Onion 서비스를 사용하기 위해 개인키를 입력하세요. +onionServices.authPrompt.done=완성 +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=유효한 키를 입력해주세요. (base32 의 52개 문자나 base64의 44개 문자) +onionServices.authPrompt.failedToSetKey=이 키로는 Tor 설정을 할 수 없습니다. +onionServices.authPreferences.header=Onion 서비스 인증 +onionServices.authPreferences.overview=일부 Onion 서비스에서는 키(암호)로 자신을 식별해야 액세스할 수 있습니다. +onionServices.authPreferences.savedKeys=저장된 키… +onionServices.authPreferences.dialogTitle=Onion 서비스 키 +onionServices.authPreferences.dialogIntro=다음 Onion 사이트의 키가 컴퓨터에 저장되어 있는 경우 +onionServices.authPreferences.onionSite=Onion 사이트 +onionServices.authPreferences.onionKey=키 +onionServices.authPreferences.remove=제거하기 +onionServices.authPreferences.removeAll=모두 제거하기 +onionServices.authPreferences.failedToGetKeys=Tor에서 키를 검색할 수 없음 +onionServices.authPreferences.failedToRemoveKey=키를 제거할 수 없음 +onionServices.v2Deprecated.pageTitle=V2 Onion 사이트 더 이상 사용되지 않음 +onionServices.v2Deprecated.header=버전 2 Onion 사이트는 곧 더 이상 사용되지 않습니다. +onionServices.v2Deprecated=이 Onion 사이트에 곧 연결할 수 없습니다. 사이트 관리자에게 문의하여 업그레이드를 권장하십시오. +onionServices.v2Deprecated.longDescription=Tor는 2021년 7월부터 버전 2 Onion 서비스에 대한 지원을 종료할 예정이며, 이 주소로 더 이상 Onion 사이트에 접속할 수 없습니다. 사이트 관리자일 경우 곧 버전 3 Onion 서비스로 업그레이드하십시오. +onionServices.v2Deprecated.tryAgain=알겠습니다 +onionServices.v2Deprecated.tooltip=이 Onion 사이트에 곧 연결할 수 없습니다. + +# Onion-Location strings. +onionLocation.alwaysPrioritize=항상 Onion 우선 순위 지정 +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=지금은 하지 않겠습니다 +onionLocation.notNowAccessKey=n +onionLocation.description=이 사이트는 Onion 서비스를 통해 Tor 네트워크를 통해 보다 개인적이고 안전한 버전을 이용할 수 있습니다. Onion 서비스는 웹사이트 출판사와 방문자들이 감시와 검열을 물리치도록 도와줍니다. +onionLocation.tryThis=Onion 서비스 시도하기 +onionLocation.onionAvailable=.onion 사용 가능 +onionLocation.learnMore=자세한 내용... +onionLocation.always=항상 +onionLocation.askEverytime=항상 묻기 +onionLocation.prioritizeOnionsDescription=알려진 경우 .onion 사이트의 우선 순위를 지정합니다. +onionLocation.onionServicesTitle=Onion 서비스 + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=안전하지 않은 웹사이트에서 암호화폐 주소 (%S)가 복사되었습니다. 수정했을 수도 있습니다. +cryptoSafetyPrompt.whatCanHeading=그것에 대해 무엇을 할 수 있습니까? +cryptoSafetyPrompt.whatCanBody=새 우회로에 다시 연결하여 보안 연결을 설정하거나 위험을 감수하고 이 경고를 해제할 수 있습니다. +cryptoSafetyPrompt.learnMore=더 알아보기 +cryptoSafetyPrompt.primaryAction=재구성된 우회로로 탭 새로고침 +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=경고 해제 +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=신중하게 살펴본 후 진행하세요 +rulesets.warningDescription=규칙모음을 수정하거나, 규칙을 추가하는 행위로 인해 공격자가 브라우저의 제어권한을 탈취할 수 있습니다. 귀하가 하려는 행위의 위험성을 숙지한 경우에만 진행하세요 +rulesets.warningEnable=이러한 설정에 접근하려고 할 경우 경고해주세요 +rulesets.warningButton=위험성을 숙지했으며 진행합니다 +# Ruleset list +rulesets.rulesets=규칙모음 +rulesets.noRulesets=발견된 규칙모음이 없습니다 +rulesets.noRulesetsDescr=Tor 브라우저에 규칙모음을 저장한다면, 이 창에서 확인할 수 있게됩니다 +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=최종 업데이트:%S +rulesets.neverUpdated=한번도 업데이트 되지 않았거나, 마지막 업데이트가 성공적으로 이루어지지 않았습니다 +rulesets.enabled=활성화됨 +rulesets.disabled=중단됨 +# Ruleset details/edit ruleset +rulesets.edit=편집 +rulesets.name=Name +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=범위 +rulesets.enable=이 규칙모음을 활성화합니다 +rulesets.checkUpdates=업데이트 확인 +rulesets.jwkPlaceholder=이 규칙모음을 서명할 때 필요한 JWK(JSON Web Key) 포맷의 키 +rulesets.jwkInvalid=JWK의 파싱에 실패했거나, 유효한 키가 아닙니다 +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=저장 +rulesets.cancel=취소 diff --git a/toolkit/torbutton/chrome/locale/ko/torlauncher.properties b/toolkit/torbutton/chrome/locale/ko/torlauncher.properties new file mode 100644 index 000000000000..105ebfd87239 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ko/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor 런처 + +torlauncher.tor_exited_during_startup=시작하는 동안 Tor가 종료되었습니다. 이것은 torrc 파일의 오류, Tor 나 PC의 다른 프로그램의 버그, 혹은 하드웨어 결함으로 인한 것일 수 있습니다. 기본 문제를 해결하고 Tor를 다시 시작할 때까지 Tor 브라우저는 시작되지 않습니다. +torlauncher.tor_exited=Tor가 예기치 않게 종료되었습니다. 이것은 Tor 자체의 오류, 사용자 시스템의 타 프로그램 또는 하드웨어의 오류 때문일 수 있습니다. 사용자가 Tor를 재시작 하기 전까진, Tor 브라우저는 어떠한 웹사이트에 접속하지 않습니다. 문제가 계속된다면, 지원팀에게 당신의 Tor 로그를 보내주세요. +torlauncher.tor_exited2=Tor를 재시작해도 브라우저 탭은 닫히지 않습니다. +torlauncher.tor_controlconn_failed=Tor 제어 포트에 연결할 수 없습니다. +torlauncher.tor_failed_to_start=Tor 시작에 실패했습니다. +torlauncher.tor_control_failed=Tor 제어에 실패했습니다. +torlauncher.tor_bootstrap_failed=Tor 네트워크 연결에 실패했습니다. +torlauncher.tor_bootstrap_failed_details=%1$S 실패 (%2$S) + +torlauncher.unable_to_start_tor=Tor를 시작할 수 없습니다.\n\n%S +torlauncher.tor_missing=Tor 실행 파일이 없습니다. +torlauncher.torrc_missing=torrc 파일이 사라졌으며 생성 할 수 없습니다. +torlauncher.datadir_missing=Tor 데이터 디렉토리가 존재하지 않으며 생성할 수 없습니다. +torlauncher.onionauthdir_missing=Tor onion 인증 디렉토리가 존재하지 않으며 생성 할 수 없습니다. +torlauncher.password_hash_missing=해싱된 패스워드을 가져오지 못했습니다 + +torlauncher.failed_to_get_settings=Tor 설정을 찾을 수 없습니다.\n\n%S +torlauncher.failed_to_save_settings=Tor 설정을 저장할 수 없습니다.\n\n%S +torlauncher.ensure_tor_is_running=Tor가 실행 중인지 확인해주세요. + +torlauncher.error_proxy_addr_missing=인터넷에 접속하기 위해 프록시를 사용한다면, IP주소나 호스트 이름, 그리고 포트 번호를 입력해야 합니다. +torlauncher.error_proxy_type_missing=프록시 유형을 선택해 주세요. +torlauncher.error_bridges_missing=하나 이상의 브리지를 지정해야 합니다. +torlauncher.error_default_bridges_type_missing=제공된 브리지의 전송수단 유형을 선택해야 합니다. +torlauncher.error_bridgedb_bridges_missing=브리지를 요청해주세요. +torlauncher.error_bridge_bad_default_type=전송수단 유형 %S가 제공한 브리지는 유효하지 않습니다. 설정을 조정하세요. + +torlauncher.bridge_suffix.meek-amazon=(중국에서 작동합니다.) +torlauncher.bridge_suffix.meek-azure=(중국에서 작동합니다.) + +torlauncher.request_a_bridge=브리지 요청하기 +torlauncher.request_a_new_bridge=새로운 브리지 요청하기 +torlauncher.contacting_bridgedb=브리지DB에 연결 중입니다. 잠시 기다려주세요. +torlauncher.captcha_prompt=브리지 요청을 위해 CAPTCHA를 풀어주세요. +torlauncher.bad_captcha_solution=제출한 답이 맞지 않습니다. 다시 시도해주세요. +torlauncher.unable_to_get_bridge=브리지DB에서 브리지를 얻을 수 없습니다.\n\n%S +torlauncher.no_meek=이 브라우저는 브리지 확보를 위해 필요한 meek에 맞게 설정되지 않았습니다. +torlauncher.no_bridges_available=지금은 사용할 수 있는 브리지가 없습니다. 죄송합니다. + +torlauncher.connect=연결 +torlauncher.restart_tor=Tor 재시작 +torlauncher.quit=끝내기 +torlauncher.quit_win=종료 +torlauncher.done=완료 + +torlauncher.forAssistance=도움이 필요하면, %S에 연락하세요. +torlauncher.forAssistance2=도움이 필요하면 %S를 방문하십시오. + +torlauncher.copiedNLogMessages=복사 완료. %S Tor 로그 메시지는 텍스트 편집기나 이메일 메시지에 붙여넣을 수 있는 상태가 됩니다. + +torlauncher.bootstrapStatus.starting=시작중 +torlauncher.bootstrapStatus.conn_pt=브리지에 연결하고 있습니다. +torlauncher.bootstrapStatus.conn_done_pt=브리지에 연결되었습니다. +torlauncher.bootstrapStatus.conn_proxy=프록시에 연결하고 있습니다. +torlauncher.bootstrapStatus.conn_done_proxy=프록시에 연결되었습니다. +torlauncher.bootstrapStatus.conn=Tor 중계서버에 연결 중입니다 +torlauncher.bootstrapStatus.conn_done=Tor 중계서버에 연결되었습니다. +torlauncher.bootstrapStatus.handshake=Tor 중계서버와 교섭 중입니다 +torlauncher.bootstrapStatus.handshake_done=Tor 중계서버와의 교섭이 완료됐습니다 +torlauncher.bootstrapStatus.onehop_create=경로와의 연결을 암호화해서 만들고 있어요 +torlauncher.bootstrapStatus.requesting_status=네트워크의 상태를 가져오고 있습니다. +torlauncher.bootstrapStatus.loading_status=네트워크의 상태를 불러오고 있습니다. +torlauncher.bootstrapStatus.loading_keys=인증서를 로딩하고 있습니다. +torlauncher.bootstrapStatus.requesting_descriptors=중계서버 정보를 요청하고 있습니다. +torlauncher.bootstrapStatus.loading_descriptors=중계서버 정보를 불러오고 있습니다. +torlauncher.bootstrapStatus.enough_dirinfo=중계서버 정보 불러오기에 완료하였습니다. +torlauncher.bootstrapStatus.ap_conn_pt=우회로 구성: 브리지에 연결 중입니다 +torlauncher.bootstrapStatus.ap_conn_done_pt=우회로 구성: 브리지에 연결되었습니다. +torlauncher.bootstrapStatus.ap_conn_proxy=우회로 구성: 프록시에 연결 중입니다 +torlauncher.bootstrapStatus.ap_conn_done_proxy=우회로 구성: 프록시에 연결되었습니다. +torlauncher.bootstrapStatus.ap_conn=우회로 구성: Tor 중계서버에 연결 중입니다 +torlauncher.bootstrapStatus.ap_conn_done=우회로 구성: Tor 중계서버에 연결되었습니다. +torlauncher.bootstrapStatus.ap_handshake=우회로 구성: Tor 중계서버와 교섭 중입니다 +torlauncher.bootstrapStatus.ap_handshake_done=우회로 구성: Tor 중계서버와의 교섭이 완료됐습니다 +torlauncher.bootstrapStatus.circuit_create=우회로 구성 : Tor 우회로 설정 중입니다 +torlauncher.bootstrapStatus.done=Tor 네트워크에 연결되었습니다. + +torlauncher.bootstrapWarning.done=완료 +torlauncher.bootstrapWarning.connectrefused=연결이 거부되었습니다. +torlauncher.bootstrapWarning.misc=기타 +torlauncher.bootstrapWarning.resourcelimit=리소스 부족 +torlauncher.bootstrapWarning.identity=계정 불일치 +torlauncher.bootstrapWarning.timeout=연결 타임아웃 +torlauncher.bootstrapWarning.noroute=호스트로의 연결 경로가 없음 +torlauncher.bootstrapWarning.ioerror=읽기 / 쓰기 오류 +torlauncher.bootstrapWarning.pt_missing=장착형 전송수단이 없습니다. + +torlauncher.nsresult.NS_ERROR_NET_RESET=서버와의 연결이 끊어졌습니다. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=서버와 연결할 수 없습니다. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=프록시와 연결할 수 없습니다. + +torlauncher.copiedNLogMessagesShort=%S 로그 복사됨 diff --git a/toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd new file mode 100644 index 000000000000..8086ac53d7b0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; plėtoja "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", ne pelno siekianti organizacija, dirbanti tam, kad apsaugotų jūsų privatumą ir laisvę internete."> + +<!ENTITY help.start "Norite padėti?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Paaukokite"> +<!ENTITY help.or " arba "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "įsitraukite"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Klausimai?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Padėkite Tor tinklui augti!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licencijavimo informacija"> +<!ENTITY tor.TrademarkStatement ""Tor" ir "Onion logotipas" yra registruoti Tor Project, Inc. prekių ženklai."> diff --git a/toolkit/torbutton/chrome/locale/lt/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/lt/aboutTBUpdate.dtd new file mode 100644 index 000000000000..a515d2673010 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Naršyklės keitinių žurnalas"> +<!ENTITY aboutTBUpdate.updated "Tor Naršyklė atnaujinta."> +<!ENTITY aboutTBUpdate.linkPrefix "Norėdami sužinoti naujausią informaciją apie šią laida, "> +<!ENTITY aboutTBUpdate.linkLabel "apsilankykite mūsų internetinėje svetainėje"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versija"> +<!ENTITY aboutTBUpdate.releaseDate "Laidos data"> +<!ENTITY aboutTBUpdate.releaseNotes "Laidos informacija"> diff --git a/toolkit/torbutton/chrome/locale/lt/aboutTor.dtd b/toolkit/torbutton/chrome/locale/lt/aboutTor.dtd new file mode 100644 index 000000000000..e2490981ef24 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Apie Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Rodyti keitinių žurnalą"> + +<!ENTITY aboutTor.ready.label "Naršykite. Privačiai."> +<!ENTITY aboutTor.ready2.label "Jūs esate pasiruošę privačiausiam pasaulyje naršymo potyriui."> +<!ENTITY aboutTor.failure.label "Kažkas nutiko!"> +<!ENTITY aboutTor.failure2.label "Šioje naršyklėje Tor neveikia."> + +<!ENTITY aboutTor.search.label "Ieškoti naudojant DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Turite klausimų?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Peržiūrėkite mūsų Tor Naršyklės naudotojo vadovą »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "V"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Naršyklės naudotojo vadovas"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project yra JAV 501(c)(3) ne pelno organizacija remianti žmogaus teises ir laisves, kurianti ir diegianti laisvas ir atvirojo kodo anonimiškumo bei privatumo technologijas, palaikanti jų neribotą prieinamumą ir naudojimą bei mokslinį ir visuotinį supratimą."> +<!ENTITY aboutTor.getInvolved.label "Įsitraukite »"> + +<!ENTITY aboutTor.newsletter.tagline "Gaukite naujienas iš Tor tiesiai į savo pašto dėžutę."> +<!ENTITY aboutTor.newsletter.link_text "Užsisakykite Tor naujienas."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor yra nemokamas naudoti dėl paaukojimų iš tokių žmonių kaip jūs."> +<!ENTITY aboutTor.donationBanner.buttonA "Paaukokite dabar"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "PAAUKOKITE DABAR"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "„Friends of Tor“ paaukos tiek pat, kiek ir jūs, iki $100000."> diff --git a/toolkit/torbutton/chrome/locale/lt/brand.dtd b/toolkit/torbutton/chrome/locale/lt/brand.dtd new file mode 100644 index 000000000000..5ec26bbb83fe --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Naršyklė"> +<!ENTITY brandShortName "Tor Naršyklė"> +<!ENTITY brandFullName "Tor Naršyklė"> +<!ENTITY vendorShortName "Tor projektas"> +<!ENTITY trademarkInfo.part1 ""Tor" ir "Onion logotipas" yra registruoti Tor Project, Inc. prekių ženklai."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Naršyklė"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Spustelėkite, kad įkeltumėte įdiegtus sistemos papildinius"> +<!ENTITY plugins.installed.enable "Įjungti papildinius"> +<!ENTITY plugins.installed.disable "Išjungti papildinius"> +<!ENTITY plugins.installed.disable.tip "Spustelėkite, kad neleistumėte įkėlinėti sistemos papildinių"> diff --git a/toolkit/torbutton/chrome/locale/lt/brand.properties b/toolkit/torbutton/chrome/locale/lt/brand.properties new file mode 100644 index 000000000000..f79ac72e0bdf --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Naršyklė +brandShortName=Tor Naršyklė +brandFullName=Tor Naršyklė +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Naršyklė +vendorShortName=Tor projektas + +homePageSingleStartMain=Firefox Start, greitas pradžios tinklalapis su integruota paieška +homePageImport=Importuoti pradžios tinklalapį iš %S + +homePageMigrationPageTitle=Pradžios tinklalapio pasirinkimas +homePageMigrationDescription=Prašome pasirinkti pradžios tinklalapį, kurį naudosite: + +syncBrandShortName=Sinchronizavimas diff --git a/toolkit/torbutton/chrome/locale/lt/branding/brand.ftl b/toolkit/torbutton/chrome/locale/lt/branding/brand.ftl new file mode 100644 index 000000000000..aeebaec427fa --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Naršyklė +-brand-short-name = Tor Naršyklė +-brand-full-name = Tor Naršyklė +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Naršyklė +-vendor-short-name = Tor projektas +trademarkInfo = 'Tor' ir 'Onion logotipas' yra registruoti Tor Project, Inc. prekių ženklai. diff --git a/toolkit/torbutton/chrome/locale/lt/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/lt/browserOnboarding.properties new file mode 100644 index 000000000000..53f4d4cf4c28 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Sveiki +onboarding.tour-tor-welcome.title=Esate pasiruošę. +onboarding.tour-tor-welcome.description=Tor Naršyklė leidžia naršyti po saityną ir tuo pačiu siūlo aukščiausius privatumo bei saugumo standartus. Dabar, esate apsaugoti nuo sekimo, stebėjimo ir cenzūros. Šiame trumpame įvade jums parodysime kaip tai daroma. +onboarding.tour-tor-welcome.next-button=Pereiti į privatumą + +onboarding.tour-tor-privacy=Privatumas +onboarding.tour-tor-privacy.title=Nepaisykite sekiklių ir šniukštinėtojų. +onboarding.tour-tor-privacy.description=Tor Naršyklė izoliuoja slapukus ir po kiekvieno naršymo seanso ištrina naršymo istoriją. Šie pakeitimai užtikrina, kad jūsų privatumas ir saugumas naršyklėje yra apsaugoti. Spustelėkite "Tor tinklas", norėdami sužinoti, kaip mes apsaugome jus tinklo lygmenyje. +onboarding.tour-tor-privacy.button=Pereiti prie Tor tinklo + +onboarding.tour-tor-network=Tor tinklas +onboarding.tour-tor-network.title=Keliaukite po decentralizuotą tinklą. +onboarding.tour-tor-network.description=Tor Naršyklė prijungia jus prie Tor tinklo, veikiančio tūkstančių, po visą pasaulį išsidėsčiusių, savanorių dėka. Skirtingai nei VPN, čia, norint mėgautis privačiu naršymu saityne, nėra vieno žlugimo taško, ar centralizuoto objekto, kuriuo turėtumėte pasitikėti. +onboarding.tour-tor-network.description-para2=NAUJA: Dabar, Tor tinklo nustatymus (įskaitant galimybę užklausti tinklų tiltus ten, kur Tor yra blokuojamas) rasite Nuostatose. +onboarding.tour-tor-network.action-button=Derinti savo Tor tinklo nustatymus +onboarding.tour-tor-network.button=Pereiti į grandinės rodinį + +onboarding.tour-tor-circuit-display=Grandinės rodinys +onboarding.tour-tor-circuit-display.title=Matykite savo kelią. +onboarding.tour-tor-circuit-display.description=Kiekvienoje jūsų aplankomų sričių, jūsų srautas yra retransliuojamas ir šifruojamas grandinėje, sudarytoje iš trijų Tor retransliavimų, išsidėsčiusių po visą pasaulį. Jokia internetinė svetainė nežino iš kurios vietos jungiatės. Galite užklausti naują grandinę, mūsų grandinės rodinyje spusteldami ant "Nauja grandinė šiai svetainei". +onboarding.tour-tor-circuit-display.button=Rodyti mano kelią +onboarding.tour-tor-circuit-display.next-button=Pereiti į saugumą + +onboarding.tour-tor-security=Saugumas +onboarding.tour-tor-security.title=Pasirinkite savo patyrimą. +onboarding.tour-tor-security.description=Mes taip pat siūlome papildomus nustatymus, kurių pagalba galima būtų dar pagerinti jūsų naršyklės saugumą. Mūsų saugumo nustatymai leidžia jums blokuoti reikiamus elementus, kurie galėtų būti panaudoti siekiant užpulti jūsų kompiuterį. Spustelėkite žemiau, norėdami pamatyti ką skirtingi parametrai atlieka. +onboarding.tour-tor-security.description-suffix=Pastaba: Pagal numatymą, NoScript ir HTTPS Everywhere nėra įtraukti į įrankių juostą, tačiau norėdami juos pridėti, galite tinkinti savo įrankių juostą. +onboarding.tour-tor-security-level.button=Žiūrėti savo saugumo lygmenį +onboarding.tour-tor-security-level.next-button=Pereiti į patyrimo patarimus + +onboarding.tour-tor-expect-differences=Patyrimo patarimai +onboarding.tour-tor-expect-differences.title=Tikėkitės kai kurių skirtumų. +onboarding.tour-tor-expect-differences.description=Su visomis Tor suteikiamomis saugumo ir privatumo ypatybėmis, jūsų patyrimas naršant saityną gali būti šiek tiek kitoks. Priklausomai nuo jūsų saugumo lygmens, viskas gali veikti šiek tiek lėčiau, o kai kurie elementai - neveikti arba būti neįkeliami. Taip pat jūsų gali būti prašoma įrodyti, kad esate žmogus, o ne robotas. +onboarding.tour-tor-expect-differences.button=Rodyti DUK +onboarding.tour-tor-expect-differences.next-button=Pereiti į Onion paslaugas + +onboarding.tour-tor-onion-services=Onion paslaugos +onboarding.tour-tor-onion-services.title=Būkite papildomai apsaugoti. +onboarding.tour-tor-onion-services.description=Onion paslaugos yra svetainės, kurių adresai baigiasi .onion. Turinio leidėjams bei lankytojams jos suteikia papildomą apsaugą, įskaitant apsaugos priemones nuo cenzūros. Onion paslaugos leidžia visiems skelbti turinį bei teikti paslaugas anonimiškai. Spustelėkite žemiau, norėdami apsilankyti DuckDuckGo onion svetainėje. +onboarding.tour-tor-onion-services.button=Apsilankyti Onion +onboarding.tour-tor-onion-services.next-button=Atlikta + +onboarding.overlay-icon-tooltip-updated2=Žiūrėkite kas yra\nnaujo %S +onboarding.tour-tor-update.prefix-new=Nauja +onboarding.tour-tor-update.prefix-updated=Atnaujinta + +onboarding.tour-tor-toolbar=Įrankių juosta +onboarding.tour-tor-toolbar-update-9.0.title=Viso gero, svogūno mygtuke. +onboarding.tour-tor-toolbar-update-9.0.description=Norime kad jūsų patirtis naudojantis Tor būtų pilnai integruota Tor Naršyklėje. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Dėl to, dabar, vietoj to, kad naudotumėte svogūno mygtuką, galite matyti savo Tor grandinę per [i] URL adresų juostoje ir užklausti naują tapatybę naudodamiesi įrankių juostoje esančių mygtuku arba [≡] meniu. +onboarding.tour-tor-toolbar-update-9.0.button=Kaip duoti užklausą naujai tapatybei +onboarding.tour-tor-toolbar-update-9.0.next-button=Pereiti prie Tor tinklo + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Kitas +onboarding.tor-circuit-display.done=Atlikta +onboarding.tor-circuit-display.one-of-three=1 iš 3 +onboarding.tor-circuit-display.two-of-three=2 iš 3 +onboarding.tor-circuit-display.three-of-three=3 iš 3 + +onboarding.tor-circuit-display.intro.title=Kaip veikia grandinės? +onboarding.tor-circuit-display.intro.msg=Grandinės yra sudarytos iš atsitiktinai priskirtų retransliavimų, kurie savo ruožtu yra kompiuteriai visame pasaulyje sukonfigūruoti persiųsti Tor duomenų srautą. Grandinės jums leidžia naršyti privačiai ir prisijungti prie onion paslaugų. + +onboarding.tor-circuit-display.diagram.title=Grandinės rodinys +onboarding.tor-circuit-display.diagram.msg=Ši diagrama rodo retransliavimus, kurie sudaro šios internetinės svetainės grandinę. Norint neleisti susieti veiklos tarp įvairių svetainių, kiekviena svetainė gauna skirtingą grandinę. + +onboarding.tor-circuit-display.new-circuit.title=Ar jums reikia naujos grandinės? +onboarding.tor-circuit-display.new-circuit.msg=Jeigu negalite prisijungti prie norimos aplankyti internetinės svetainės arba ji nėra tinkamai įkeliama, tuomet galite pasinaudoti šiuo mygtuku, kad iš naujo įkeltumėte svetainę, naudojant naują grandinę. diff --git a/toolkit/torbutton/chrome/locale/lt/network-settings.dtd b/toolkit/torbutton/chrome/locale/lt/network-settings.dtd new file mode 100644 index 000000000000..a06b568ed67f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor tinklo nustatymai"> +<!ENTITY torsettings.wizard.title.default "Prisijungti prie Tor"> +<!ENTITY torsettings.wizard.title.configure "Tor tinklo nustatymai"> +<!ENTITY torsettings.wizard.title.connecting "Užmezgiamas ryšys"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Naršyklės kalba"> +<!ENTITY torlauncher.localePicker.prompt "Pasirinkite kalbą."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Norėdami prisijungti prie Tor, spustelėkite "Prisijungti"."> +<!ENTITY torSettings.configurePrompt "Spustelėkite "Konfigūruoti", norėdami reguliuoti tinklo nustatymus, jeigu esate šalyje, kuri cenzūruoja Tor (tokioje kaip Egiptas, Kinija, Turkija) arba jeigu jungiatės iš privačiojo tinklo, kuris reikalauja įgaliotojo serverio."> +<!ENTITY torSettings.configure "Konfigūruoti"> +<!ENTITY torSettings.connect "Prisijungti"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Laukiama, kol bus paleistas Tor…"> +<!ENTITY torsettings.restartTor "Paleisti Tor iš naujo"> +<!ENTITY torsettings.reconfigTor "Konfigūruoti iš naujo"> + +<!ENTITY torsettings.discardSettings.prompt "Jūs esate sukofigūravę Tor tinklų tiltus arba esate įrašę vietinio įgaliotojo serverio nustatymus.  Tam, kad galėtumėte tiesiogiai prisijungti prie Tor tinklo, šie nustatymai privalo būti pašalinti."> +<!ENTITY torsettings.discardSettings.proceed "Šalinti nustatymus ir prisijungti"> + +<!ENTITY torsettings.optional "Nebūtina"> + +<!ENTITY torsettings.useProxy.checkbox "Prisijungimui prie interneto aš naudoju įgaliotąjį serverį"> +<!ENTITY torsettings.useProxy.type "Įgaliotojo serverio tipas"> +<!ENTITY torsettings.useProxy.type.placeholder "pasirinkite įgaliotojo serverio tipą"> +<!ENTITY torsettings.useProxy.address "Adresas"> +<!ENTITY torsettings.useProxy.address.placeholder "IP adresas arba serverio vardas"> +<!ENTITY torsettings.useProxy.port "Prievadas"> +<!ENTITY torsettings.useProxy.username "Naudotojo vardas"> +<!ENTITY torsettings.useProxy.password "Slaptažodis"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Šis kompiuteris jungiasi per užkardą, kuri leidžia jungtis tik prie tam tikrų prievadų"> +<!ENTITY torsettings.firewall.allowedPorts "Leidžiami prievadai"> +<!ENTITY torsettings.useBridges.checkbox "Mano šalyje Tor yra cenzūruojamas"> +<!ENTITY torsettings.useBridges.default "Select a Built-In Bridge"> +<!ENTITY torsettings.useBridges.default.placeholder "pasirinkite tinklų tiltą"> +<!ENTITY torsettings.useBridges.bridgeDB "Prašyti tinklų tilto iš torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Įveskite ženklus iš paveikslėlio"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Gaukite naują iššūkį"> +<!ENTITY torsettings.useBridges.captchaSubmit "Pateikti"> +<!ENTITY torsettings.useBridges.custom "Pateikti man žinomą tinklų tiltą"> +<!ENTITY torsettings.useBridges.label "Įveskite tinklų tilto informaciją iš patikimo šaltinio."> +<!ENTITY torsettings.useBridges.placeholder "tipas adresas:prievadas (kiekvienoje eilutėje po vieną)"> + +<!ENTITY torsettings.copyLog "Kopijuoti Tor žurnalą į iškarpinę"> + +<!ENTITY torsettings.proxyHelpTitle "Įgaliotojo serverio žinynas"> +<!ENTITY torsettings.proxyHelp1 "Vietinis įgaliotasis serveris gali būti reikalingas, jungiantis per kompanijos, mokyklos ar universiteto tinklą. Jeigu nesate tikri ar įgaliotasis serveris yra reikalingas, žiūrėkite interneto nustatymus kitoje naršyklėje arba patikrinkite savo sistemos tinklo nustatymus."> + +<!ENTITY torsettings.bridgeHelpTitle "Tiltų tinklo retransliavimo žinynas"> +<!ENTITY torsettings.bridgeHelp1 "Tinklų tiltai yra neregistruoti retransliavimai, kurie apsunkina ryšių prie Tor tinklo blokavimą.  Kiekvienas tinklų tilto tipas naudoja kitokį būdą išvengti cenzūros.  Obfs tinklų tiltai paverčia jūsų srautą panašų į atsitiktinį triukšmą, o meek tinklų tiltai paverčia jūsų srautą, kad jis atrodytų taip, lyg jungtumėtės prie tos paslaugos, o ne prie Tor."> +<!ENTITY torsettings.bridgeHelp2 "Dėl to, kaip tam tikros šalys bando blokuoti Tor, tam tikri tinklų tiltai vienose šalyse veikia, o kitose neveikia.  Jeigu nesate tikri, kurie tinklų tiltai jūsų šalyje veikia, apsilankykite torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Palaukite, kol mes užmegsime ryšį su Tor tinklu.  Tai gali užtrukti kelias minutes."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Ryšys"> +<!ENTITY torPreferences.torSettings "Tor nustatymai"> +<!ENTITY torPreferences.torSettingsDescription "Tor Naršyklė nukreipia jūsų srautą per Tor tinklą, veikiantį po visą pasaulį išsidėsčiusių tūkstančių savanorių dėka." > +<!ENTITY torPreferences.learnMore "Sužinoti daugiau"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internetas:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Pasiekiama(-s)"> +<!ENTITY torPreferences.statusInternetOffline "Nepasiekiama"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Prisijungta"> +<!ENTITY torPreferences.statusTorNotConnected "Neprisijungta"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Sužinoti daugiau"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Greita pradžia"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Visuomet jungtis automatiškai"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Tinklų tiltai"> +<!ENTITY torPreferences.bridgesDescription "Tinklo tiltai padeda jums pasiekti Tor tinklą, vietose kur Tor užblokuotas. Priklausomai nuo to kur esate, vienas tiltas gali veikti geriau nei kitas."> +<!ENTITY torPreferences.bridgeLocation "Jūsų vieta"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatiškai"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Šalinti"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Nukopijuota!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Užklausti tinklų tiltą…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Išplėstiniai"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Nustatymai…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Rodyti žurnalus…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "Šis veiksmas negalės būti atšauktas."> +<!ENTITY torPreferences.cancel "Atsisakyti"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Užklausti tinklų tiltą…"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Susisiekiama su BridgeDB. Palaukite."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Norėdami užklausti tinklų tiltą, išspręskite saugos kodą."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Sprendimas neteisingas. Bandykite dar kartą."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Įveskite tinklų tilto informaciją iš patikimo šaltinio"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor žurnalai"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Neprisijungta"> +<!ENTITY torConnect.connectingConcise "Jungiamasi…"> +<!ENTITY torConnect.tryingAgain "Bandoma dar kartą…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Bandoma dar vieną kartą…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatiškai"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Bandyti dar kartą"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Naršyklei nepavyko užmegzti ryšio su Tor tinklu"> +<!ENTITY torConnect.yourLocation "Jūsų vieta"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Nepavyko nustatyti naudotojo šalies"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/lt/onboarding.properties b/toolkit/torbutton/chrome/locale/lt/onboarding.properties new file mode 100644 index 000000000000..436021fd57c5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Pirmas kartas su „%S“?\nPradėkime. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=„%S“ atsinaujino.\nSusipažinkite su naujovėmis! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Užverti +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Paslėpti +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Užbaigta diff --git a/toolkit/torbutton/chrome/locale/lt/torbutton.dtd b/toolkit/torbutton/chrome/locale/lt/torbutton.dtd new file mode 100644 index 000000000000..37326068c743 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nauja tapatybė"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nauja tapatybė"> +<!ENTITY torbutton.context_menu.new_identity_key "T"> +<!ENTITY torbutton.context_menu.new_circuit "Nauja Tor grandinė šiai svetainei"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nauja Tor grandinė šiai svetainei"> +<!ENTITY torbutton.context_menu.new_circuit_key "G"> +<!ENTITY torbutton.context_menu.networksettings "Tor tinklo nustatymai…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tikrinti, ar yra Tor Naršyklės atnaujinimų…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Slapukų apsaugos…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "P"> +<!ENTITY torbutton.button.tooltip "Spustelėkite, kad aktyvuotumėte Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Tor Naršyklės saugumo nustatymai"> +<!ENTITY torbutton.cookiedialog.title "Tvarkyti slapukų apsaugas"> +<!ENTITY torbutton.cookiedialog.lockCol "Apsaugotas"> +<!ENTITY torbutton.cookiedialog.domainCol "Serveris"> +<!ENTITY torbutton.cookiedialog.nameCol "Pavadinimas"> +<!ENTITY torbutton.cookiedialog.pathCol "Kelias"> +<!ENTITY torbutton.cookiedialog.protectCookie "Apsaugoti slapuką"> +<!ENTITY torbutton.cookiedialog.removeCookie "Šalinti slapuką"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Neapsaugoti slapuko"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Šalinti visus, išskyrus apsaugotus"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Apsaugoti naujus slapukus"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Neapsaugoti naujų slapukų"> +<!ENTITY torbutton.prefs.sec_caption "Saugumo lygmuo"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Saugumo slankiklis leidžia jums išjungti tam tikras naršyklės ypatybes, kurios gali padaryti jūsų naršyklę labiau pažeidžiamą bandymams įsibrauti."> +<!ENTITY torbutton.prefs.sec_standard_label "Standartinis"> +<!ENTITY torbutton.prefs.sec_standard_description "Visos Tor Naršyklės ir internetinių svetainių ypatybės yra įjungtos."> +<!ENTITY torbutton.prefs.sec_safer_label "Saugesnis"> +<!ENTITY torbutton.prefs.sec_safer_description "Išjungia tas internetinių svetainių ypatybes, kurios, dažnai, būna pavojingos, dėl to kai kurios svetainės gali prarasti funkcionalumą."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Saugesniame nustatyme:"> +<!ENTITY torbutton.prefs.sec_safest_label "Saugiausias"> +<!ENTITY torbutton.prefs.sec_safest_description "Leidžia tik tas internetinių svetainių ypatybes, kurios yra reikalingos statinėms svetainėms bei pagrindinėms paslaugoms. Šie pakeitimai paveikia paveikslus, mediją ir scenarijus."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Saugiausiame nustatyme:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Sužinoti daugiau"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript yra išjungtas ne HTTPS svetainėse."> +<!ENTITY torbutton.prefs.sec_js_disabled "Pagal numatymą, Javascript yra išjungtas visose svetainėse."> +<!ENTITY torbutton.prefs.sec_limit_typography "Kai kurie šriftai ir matematiniai simboliai yra išjungti."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Kai kurie šriftai, piktogramos, matematiniai simboliai ir paveikslai yra išjungti."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Garsas ir vaizdas (HTML5 medija), bei WebGL yra atkuriami tik spustelėjus."> +<!ENTITY torbutton.prefs.sec_custom_warning "Tinkintas"> +<!ENTITY torbutton.prefs.sec_overview "Išjungia tam tikras saityno ypatybes, kurios gali būti panaudotos užpulti jūsų saugumą ar anonimiškumą."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Saugumo lygmuo : Standartinis"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Saugumo lygmuo : Saugesnis"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Saugumo lygmuo : Saugiausias"> +<!ENTITY torbutton.prefs.sec_custom_summary "Jūsų pasirinktinės naršyklės nuostatos sąlygojo neįprastus saugumo nustatymus. Dėl saugumo ir privatumo priežasčių, rekomenduojame jums pasirinkti vieną iš numatytųjų saugumo lygių."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Atkurti numatytuosius"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Išplėstiniai saugumo nustatymai…"> +<!ENTITY torbutton.prefs.sec_change "Pakeisti..."> +<!ENTITY torbutton.circuit_display.title "Tor grandinė"> +<!ENTITY torbutton.circuit_display.new_circuit "Nauja grandinė šiai svetainei"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Atverkite onion paslaugos kliento tapatybės nustatymo užklausą"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Prisiminti šį raktą"> diff --git a/toolkit/torbutton/chrome/locale/lt/torbutton.properties b/toolkit/torbutton/chrome/locale/lt/torbutton.properties new file mode 100644 index 000000000000..58f90477c200 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internetas +torbutton.circuit_display.ip_unknown = IP nežinomas +torbutton.circuit_display.onion_site = Onion svetainė +torbutton.circuit_display.this_browser = Ši naršyklė +torbutton.circuit_display.relay = Retransliavimas +torbutton.circuit_display.tor_bridge = Tinklų tiltas +torbutton.circuit_display.unknown_country = Nežinoma šalis +torbutton.circuit_display.guard = Sargybinis +torbutton.circuit_display.guard_note = Jūsų [Sargybinis] mazgas negali pasikeisti. +torbutton.circuit_display.learn_more = Sužinoti daugiau +torbutton.circuit_display.click_to_copy = Spustelėkite norėdami nukopijuoti +torbutton.circuit_display.copied = Nukopijuota! +torbutton.content_sizer.margin_tooltip = Tor Naršyklė prideda šią paraštę, kad jūsų lango plotis ir aukštis būtų mažiau atskiriami ir, tokiu būdu, žmonėms būtų sumažinta galimybė sekti jus internete. +extensions.torbutton@torproject.org.description = Torbutton pateikia mygtuką, skirtą konfigūruoti Tor nustatymus ir greitai bei lengvai išvalyti privačius naršymo duomenis. +torbutton.popup.external.title = Atsisiųsti išorinį failo tipą? +torbutton.popup.external.app = Tor Naršyklė negali atvaizduoti šio failo. Jums teks jį atverti, naudojant kitą programą.\n\n +torbutton.popup.external.note = Kai kurie failų tipai, gali priversti programas prisijungti prie interneto ne per Tor.\n\n +torbutton.popup.external.suggest = Saugumo sumetimais, parsisiųstus failus derėtų atverti, atsijungus nuo interneto arba naudojant Tor Live CD tokį kaip Tails.\n +torbutton.popup.launch = Atsisiųsti failą +torbutton.popup.cancel = Atsisakyti +torbutton.popup.dontask = Nuo šiol, atsisiųsti failus automatiškai +torbutton.popup.no_newnym = Torbutton negali jums saugiai suteikti naujos tapatybės. Programa neturi prieigos prie Tor valdymo prievado.\n\nAr jūs esate paleidę Tor Naršyklės rinkinį? +torbutton.security_settings.menu.title = Saugumo nustatymai +torbutton.title.prompt_torbrowser = Svarbi Torbutton informacija +torbutton.popup.prompt_torbrowser = Dabar, Torbutton veikia kitaip: daugiau nebegalite jo išjungti.\n\nMes atlikome šį pakeitimą, nes nėra saugu naudoti Torbutton naršyklėje, kuri taip pat yra naudojama naršymui ne Tor tinkle. Ten buvo pernelyg daug klaidų, kurių jokiu kitu būdu negalėjome pataisyti.\n\nJeigu ir toliau norite įprastai naudotis Firefox, turėtumėte pašalinti Torbutton ir atsisiųsti Tor Naršyklės rinkinį. Tor Naršyklės privatumo savybės yra stipresnės už įprastos Firefox sa [...] +torbutton.popup.short_torbrowser = Svarbi Torbutton informacija!\n\nDabar, Torbutton visada yra įjungta.\n\nIšsamesnei informacijai, spustelėkite ant Torbutton. + +torbutton.popup.confirm_plugins = Tokie papildiniai kaip Flash gali pažeisti jūsų privatumą ir anonimiškumą.\n\nJie taip pat gali apeiti Tor tam, kad atskleistų jūsų dabartinę buvimo vietą ir IP adresą.\n\nAr tikrai norite įjungti papildinius?\n\n +torbutton.popup.never_ask_again = Daugiau nebeklausti +torbutton.popup.confirm_newnym = Tor Naršyklė užvers visus langus ir korteles. Visi svetainių seansai bus prarasti.\n\nPaleisti Tor Naršyklę iš naujo dabar, kad būtų atstatyta jūsų tapatybė?\n\n + +torbutton.maximize_warning = Tor Naršyklės išskleidimas gali leisti svetainėms nustatyti jūsų monitoriaus dydį, o tai gali būti naudojama jūsų sekimui. Rekomenduojame palikti Tor Naršyklės langus jų pradiniame numatytajame dydyje. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Ši svetainė (%S) bandė išskleisti HTML5 drobės paveikslo duomenis, kas gali būti panaudota, kad jūsų kompiuteris būtų unikaliai atpažįstamas.\n\nAr Tor Naršyklė turėtų leisti šiai svetainei išskleisti HTML5 drobės paveikslo duomenis? +canvas.notNow=Ne dabar +canvas.notNowAccessKey=N +canvas.allow=Leisti ateityje +canvas.allowAccessKey=A +canvas.never=Niekada šiai svetainei (rekomenduojama) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S profilio problema +profileReadOnly=Negalite paleisti %S iš tik skaitymui skirtos failų sistemos. Prieš norėdami ja naudotis, nukopijuokite %S į kitą vietą. +profileReadOnlyMac=Negalite paleisti %S iš tik skaitymui skirtos failų sistemos. Prieš bandydami ją naudoti, nukopijuokite %S į savo Darbalaukio ar Programų aplanką. +profileAccessDenied=%S neturi leidimo prieigai prie profilio. Prašome suderinti savo failų sistemos leidimus ir bandyti dar kartą. +profileMigrationFailed=Jūsų esamo %S profilio perkėlimas nepavyko.\nBus naudojami nauji nustatymai. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Atsisiunčiamas %S atnaujinimas + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Šifruotas ryšys (Onion paslauga, %1$S, %2$S bitų raktai, %3$S) +pageInfo_OnionEncryption=Šifruotas ryšys (Onion paslauga) +pageInfo_OnionName=Onion pavadinimas: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Sužinoti daugiau +onionServices.errorPage.browser=Naršyklė +onionServices.errorPage.network=Tinklas +onionServices.errorPage.onionSite=Onion svetainės +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problema įkeliant onion svetainę +onionServices.descNotFound.header=Onion svetainė nerasta +onionServices.descNotFound=Labiausiai tikėtina priežastis ta, kad onion svetainė yra nepasiekiama. Susisiekite su onion svetainės administratoriumi. +onionServices.descNotFound.longDescription=Išsami informacija: %S – maišos sistemoje nerastas prašomo onion serviso deskriptoriaus, todėl klientui servisas nepasiekiamas. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problema įkeliant onion svetainę +onionServices.descInvalid.header=Onion svetainė nepasiekiama +onionServices.descInvalid=Onion svetainė nepasiekiama dėl vidinės klaidos. +onionServices.descInvalid.longDescription=Išsami informacija: %S – prašomo obion serviso deskriptoriaus negalima išanalizuoti arba nepavyko patvirtinti parašo. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problema įkeliant onion svetainę +onionServices.introFailed.header=Onion svetainė atsijungė +onionServices.introFailed=Labiausiai tikėtina priežastis ta, kad onion svetainė yra nepasiekiama. Susisiekite su onion svetainės administratoriumi. +onionServices.introFailed.longDescription=Išsami informacija: %S – Įvadas nepavyko, o tai reiškia, kad deskriptorius buvo rastas, bet servisas nebėra prijungta prie įvado taško. Tikėtina, kad servisas pakeitė savo aprašą arba ji neveikia. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problema įkeliant onion svetainę +onionServices.rendezvousFailed.header=Nepavyko prisijungti prie onion svetainės +onionServices.rendezvousFailed=Onion svetainė užimta arba Tor tinklas perkrautas. Pabandykite dar kartą vėliau. +onionServices.rendezvousFailed.longDescription=Išsami informacija: %S – klientui nepavyko susisiekti su servisu, o tai reiškia, kad klientas negalėjo užbaigti ryšio. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Reikalingas įgaliojimas +onionServices.clientAuthMissing.header=Onion svetainėje reikalaujamas atpažinimas +onionServices.clientAuthMissing=Norint pasiekti onion svetainę reikalingas raktas, tačiau jis nebuvo suteiktas. +onionServices.clientAuthMissing.longDescription=Išsami informacija: %S – klientas atsisiuntė prašomą onion serviso deskriptorių, bet negalėjo iššifruoti jo turinio, nes trūksta kliento prieigos teisės informacijos. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Įgaliojimas nepavyko +onionServices.clientAuthIncorrect.header=Onion svetainės atpažinimas nepavyko +onionServices.clientAuthIncorrect=Pateiktas raktas neteisingas arba buvo panaikintas. Susisiekite su onion svetainės administratoriumi. +onionServices.clientAuthIncorrect.longDescription=Išsami informacija: %S – klientas galėjo atsisiųsti prašomą onion serviso deskriptorių, bet negalėjo iššifruoti jo turinio naudodamas pateiktą kliento prieigos teisės informaciją. Tai gali reikšti, kad prieiga buvo atšaukta. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problema įkeliant onion svetainę +onionServices.badAddress.header=Neteisingas onion svetainės adresas +onionServices.badAddress=Pateiktas onion svetainės adresas neteisingas. Įsitikinkite, kad jį įvedėte teisingai. +onionServices.badAddress.longDescription=Išsami informacija: %S – pateiktas .onion adresas neteisingas. Ši klaida grąžinama dėl vienos iš šių priežasčių: adreso kontrolinė suma nesutampa, ed25519 viešasis raktas neteisingas arba kodavimas neteisingas. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problema įkeliant onion svetainę +onionServices.introTimedOut.header=Baigėsi onion grandinės kūrimui skirtas laikas +onionServices.introTimedOut=Nepavyko prisijungti prie onion svetainės, galbūt dėl silpno tinklo ryšio. +onionServices.introTimedOut.longDescription=Išsami informacija: %S – Bandant sukurti susitikimo grandinę baigėsi ryšio su prašomu onion servisu skirtasis laikas. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S prašo, kad nustatytumėte savo tapatybę. +onionServices.authPrompt.keyPlaceholder=Įveskite savo privatųjį, šiai onion paslaugai skirtą, raktą +onionServices.authPrompt.done=Atlikta +onionServices.authPrompt.doneAccessKey=u +onionServices.authPrompt.invalidKey=Įveskite galiojantį raktą (52 base32 arba 44 base64 simbolius) +onionServices.authPrompt.failedToSetKey=Nepavyko konfigūruoti Tor naudojant jūsų raktą +onionServices.authPreferences.header=Onion paslaugų tapatybės nustatymas +onionServices.authPreferences.overview=Norėdami pasiekti kai kurias onion paslaugas turite nustatyti savo tapatybę su raktu (tam tikru slaptažodžiu). +onionServices.authPreferences.savedKeys=Įrašyti raktai… +onionServices.authPreferences.dialogTitle=Onion paslaugos raktai +onionServices.authPreferences.dialogIntro=Šių onion svetainių raktai saugomi jūsų kompiuteryje +onionServices.authPreferences.onionSite=Onion svetainė +onionServices.authPreferences.onionKey=Raktas +onionServices.authPreferences.remove=Šalinti +onionServices.authPreferences.removeAll=Šalinti visus +onionServices.authPreferences.failedToGetKeys=Nepavyko gauti raktų iš Tor +onionServices.authPreferences.failedToRemoveKey=Nepavyko pašalinti raktą +onionServices.v2Deprecated.pageTitle=V2 Onion svetainės naudojimo nutraukimo įspėjimas +onionServices.v2Deprecated.header=2 versijos onion svetainės netrukus bus nebenaudojamos +onionServices.v2Deprecated=Ši onion svetainė greitai nebus pasiekiama. Susisiekite su svetainės administratoriumi ir paraginkite jį atsinaujinti. +onionServices.v2Deprecated.longDescription=Nuo 2021 m. liepos mėn. Tor nutraukia 2 versijos „onion“ servisų palaikymą ir ši onion svetainė šiuo adresu nebebus pasiekiama. Jei esate svetainės administratorius, naujovinkite į 3 versijos onion servisą. +onionServices.v2Deprecated.tryAgain=Supratau +onionServices.v2Deprecated.tooltip=Ši onion svetainė greitai nebus pasiekiama + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Visada teikti pirmenybę Onions +onionLocation.alwaysPrioritizeAccessKey=p +onionLocation.notNow=Ne dabar +onionLocation.notNowAccessKey=g +onionLocation.description=Prieinama privatesnė ir saugesnė šios svetainės versija per Tor tinklo onion paslaugas. Naudodami onion paslaugas svetainių leidėjai ir jų lankytojai nugali stebėjimą ir cenzūrą. +onionLocation.tryThis=Išbandyti onion paslaugas +onionLocation.onionAvailable=.onion prieinama +onionLocation.learnMore=Sužinoti daugiau... +onionLocation.always=Visada +onionLocation.askEverytime=Klausti kiekvieną kartą +onionLocation.prioritizeOnionsDescription=Teikti pirmenybę .onion svetainėms, kai žinoma. +onionLocation.onionServicesTitle=Onion paslaugos + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Kriptovaliutos adresas (%S) buvo nukopijuotas iš nesaugios svetainės. Jis galėjo būti modifikuotas. +cryptoSafetyPrompt.whatCanHeading=Ką galite dėl to padaryti? +cryptoSafetyPrompt.whatCanBody=Galite pabandyti iš naujo prisijungti naudodami naują grandinę, kad užmegztumėte saugų ryšį, arba prisiimti riziką ir atmesti šį įspėjimą. +cryptoSafetyPrompt.learnMore=Sužinoti daugiau +cryptoSafetyPrompt.primaryAction=Iš naujo įkelkite skirtuką naudodami naują grandinę +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Atmesti įspėjimą +cryptoSafetyPrompt.secondaryActionAccessKey=Naudotojas B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Įjungta +rulesets.disabled=Išjungta +# Ruleset details/edit ruleset +rulesets.edit=Taisyti +rulesets.name=Vardas +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Įrašyti +rulesets.cancel=Atsisakyti diff --git a/toolkit/torbutton/chrome/locale/lt/torlauncher.properties b/toolkit/torbutton/chrome/locale/lt/torlauncher.properties new file mode 100644 index 000000000000..59aab79b6388 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/lt/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor paleidyklė + +torlauncher.tor_exited_during_startup=Tor nustojo veikti paleisties metu. Taip galėjo nutikti dėl klaidos jūsų torrc faile, klaidos Tor ar kitoje jūsų sistemos programoje, arba dėl aparatinės įrangos kaltės. Tor Naršyklė nepasileis tol, kol neištaisysite slypinčios problemos ir iš naujo nepaleisite Tor. +torlauncher.tor_exited=Tor netikėtai nustojo veikti. Taip galėjo atsitikti arba dėl klaidos Tor, arba dėl klaidos kitoje jūsų sistemos programoje, arba dėl sugedusios aparatinės įrangos. Kol iš naujo nepaleisite Tor, Tor Naršyklė negalės prisijungti prie jokių interneto tinklalapių. Jei problema išlieka, prašome išsiųsti Tor įvykių žurnalo kopiją Tor palaikymo komandai. +torlauncher.tor_exited2=Paleidus Tor iš naujo, jūsų naršyklės kortelės nebus užvertos. +torlauncher.tor_controlconn_failed=Nepavyko prisijungti prie Tor valdymo prievado. +torlauncher.tor_failed_to_start=Tor nepavyko pasileisti. +torlauncher.tor_control_failed=Nepavyko perimti Tor valdymo. +torlauncher.tor_bootstrap_failed=Tor nepavyko užmegzti ryšio su Tor tinklu. +torlauncher.tor_bootstrap_failed_details=%1$S patyrė nesėkmę (%2$S). + +torlauncher.unable_to_start_tor=Nepavyksta paleisti Tor.\n\n%S +torlauncher.tor_missing=Trūksta Tor vykdomojo failo. +torlauncher.torrc_missing=Trūksta torrc failo ir jo nepavyko sukurti. +torlauncher.datadir_missing=Nėra Tor duomenų katalogo ir nepavyko jo sukurti. +torlauncher.onionauthdir_missing=Tor onion tapatybės nustatymo katalogo nėra ir nepavyko jo sukurti. +torlauncher.password_hash_missing=Nepavyko gauti maišyto slaptažodžio. + +torlauncher.failed_to_get_settings=Nepavyko gauti Tor nustatymų.\n\n%S +torlauncher.failed_to_save_settings=Nepavyko įrašyti Tor nustatymų.\n\n%S +torlauncher.ensure_tor_is_running=Įsitikinkite, kad Tor veikia. + +torlauncher.error_proxy_addr_missing=Jei norite, kad Tor prie interneto jungtųsi per įgaliotąjį serverį, turite nurodyti ir prievado numerį, ir serverio IP adresą arba serverio vardą. +torlauncher.error_proxy_type_missing=Privalote pasirinkti įgaliotojo serverio tipą. +torlauncher.error_bridges_missing=Privalote nurodyti bent vieną tinklų tiltą. +torlauncher.error_default_bridges_type_missing=Privalote nurodytiems tinklų tiltams pasirinkti perdavimo tipą. +torlauncher.error_bridgedb_bridges_missing=Užklauskite tinklų tiltą. +torlauncher.error_bridge_bad_default_type=Neprieinamas nei vienas tinklų tiltas, kurio perdavimo tipas būtų %S. Prašome sureguliuoti savo nustatymus. + +torlauncher.bridge_suffix.meek-amazon=(veikia Kinijoje) +torlauncher.bridge_suffix.meek-azure=(veikia Kinijoje) + +torlauncher.request_a_bridge=Užklausti tinklų tiltą… +torlauncher.request_a_new_bridge=Užklausti naują tinklų tiltą… +torlauncher.contacting_bridgedb=Susisiekiama su BridgeDB. Palaukite. +torlauncher.captcha_prompt=Norėdami užklausti tinklų tiltą, išspręskite saugos kodą. +torlauncher.bad_captcha_solution=Sprendimas neteisingas. Bandykite dar kartą. +torlauncher.unable_to_get_bridge=Nepavyko gauti tinklų tilto iš BridgeDB.\n\n%S +torlauncher.no_meek=Ši naršyklė nėra sukonfigūruota naudoti meek, kurio reikia, norint gauti tinklų tiltus. +torlauncher.no_bridges_available=Šiuo metu nėra prieinamų tinklų tiltų. Apgailestaujame. + +torlauncher.connect=Prisijungti +torlauncher.restart_tor=Paleisti Tor iš naujo +torlauncher.quit=Baigti +torlauncher.quit_win=Išeiti +torlauncher.done=Atlikta + +torlauncher.forAssistance=Jeigu jums reikia pagalbos, susisiekite su %S +torlauncher.forAssistance2=Norėdami gauti pagalbos, apsilankykite %S + +torlauncher.copiedNLogMessages=Kopijavimas atliktas. %S Tor įvykių žurnalas paruoštas įklijuoti į teksto redagavimo programą ar elektroninio pašto pranešimą. + +torlauncher.bootstrapStatus.starting=Paleidžiama +torlauncher.bootstrapStatus.conn_pt=Jungiamasi prie tinklų tilto +torlauncher.bootstrapStatus.conn_done_pt=Prisijungta prie tinklų tilto +torlauncher.bootstrapStatus.conn_proxy=Jungiamasi prie įgaliotojo serverio +torlauncher.bootstrapStatus.conn_done_proxy=Prisijungta prie įgaliotojo serverio +torlauncher.bootstrapStatus.conn=Jungiamasi prie Tor retransliavimo +torlauncher.bootstrapStatus.conn_done=Prisijungta prie Tor retransliavimo +torlauncher.bootstrapStatus.handshake=Derimasi su Tor retransliavimu +torlauncher.bootstrapStatus.handshake_done=Užbaigtas derėjimasis su Tor retransliavimu +torlauncher.bootstrapStatus.onehop_create=Užmezgiamas šifruoto katalogo ryšys +torlauncher.bootstrapStatus.requesting_status=Gaunama tinklo būsena +torlauncher.bootstrapStatus.loading_status=Įkeliama tinklo būsena +torlauncher.bootstrapStatus.loading_keys=Įkeliami liudijimų įstaigos liudijimai +torlauncher.bootstrapStatus.requesting_descriptors=Užklausiama retransliavimo informacija +torlauncher.bootstrapStatus.loading_descriptors=Įkeliama retransliavimo informacija +torlauncher.bootstrapStatus.enough_dirinfo=Užbaigtas retransliavimo informacijos įkėlimas +torlauncher.bootstrapStatus.ap_conn_pt=Sukuriamos grandinės: Jungiamasi prie tinklų tilto +torlauncher.bootstrapStatus.ap_conn_done_pt=Sukuriamos grandinės: Prisijungta prie tinklų tilto +torlauncher.bootstrapStatus.ap_conn_proxy=Sukuriamos grandinės: Jungiamasi prie įgaliotojo serverio +torlauncher.bootstrapStatus.ap_conn_done_proxy=Sukuriamos grandinės: Prisijungta prie įgaliotojo serverio +torlauncher.bootstrapStatus.ap_conn=Sukuriamos grandinės: Jungiamasi prie Tor retransliavimo +torlauncher.bootstrapStatus.ap_conn_done=Sukuriamos grandinės: Prisijungta prie Tor retransliavimo +torlauncher.bootstrapStatus.ap_handshake=Sukuriamos grandinės: Derimasi su Tor retransliavimu +torlauncher.bootstrapStatus.ap_handshake_done=Sukuriamos grandinės: Užbaigtas derėjimasis su Tor retransliavimu +torlauncher.bootstrapStatus.circuit_create=Sukuriamos grandinės: Užmezgiama Tor grandinė +torlauncher.bootstrapStatus.done=Prisijungta prie Tor tinklo! + +torlauncher.bootstrapWarning.done=atlikta +torlauncher.bootstrapWarning.connectrefused=atsisakyta sujungti +torlauncher.bootstrapWarning.misc=įvairūs +torlauncher.bootstrapWarning.resourcelimit=nepakanka išteklių +torlauncher.bootstrapWarning.identity=tapatybės neatitiktis +torlauncher.bootstrapWarning.timeout=pasibaigė ryšiui skirtas laikas +torlauncher.bootstrapWarning.noroute=nėra maršruto iki pagrindinio kompiuterio +torlauncher.bootstrapWarning.ioerror=skaitymo/rašymo klaida +torlauncher.bootstrapWarning.pt_missing=trūksta keičiamojo perdavimo + +torlauncher.nsresult.NS_ERROR_NET_RESET=Ryšys su serveriu nutrūko. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Nepavyko prisijungti prie serverio. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Nepavyko prisijungti prie įgaliotojo serverio. + +torlauncher.copiedNLogMessagesShort=Nukopijuota %S žurnalų diff --git a/toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd new file mode 100644 index 000000000000..6fb30ffe55a7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; е создаден од"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "the &vendorShortName;"> +<!ENTITY project.end ", кој е непрофитен и кој работи за вашата онлајн приватност и слобода."> + +<!ENTITY help.start "Сакате да помогнете?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Донирај"> +<!ENTITY help.or "или"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "приклучи се"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Прашања?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Помогнете Тор мрежата да расте!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Лиценца"> +<!ENTITY tor.TrademarkStatement "'Tor' и 'Onion Logo' се регистрирани трговски марки на Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/mk/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/mk/aboutTBUpdate.dtd new file mode 100644 index 000000000000..1649a138023a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Листа на промени"> +<!ENTITY aboutTBUpdate.updated "Tor Browser е ажуриран."> +<!ENTITY aboutTBUpdate.linkPrefix "За најнови информации за оваа верзија, "> +<!ENTITY aboutTBUpdate.linkLabel "посетете ја нашата веб страна"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Верзија"> +<!ENTITY aboutTBUpdate.releaseDate "Датум на издавање"> +<!ENTITY aboutTBUpdate.releaseNotes "Забелешки за изданието"> diff --git a/toolkit/torbutton/chrome/locale/mk/aboutTor.dtd b/toolkit/torbutton/chrome/locale/mk/aboutTor.dtd new file mode 100644 index 000000000000..e0c51502c75f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "За Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Види Листа на промени"> + +<!ENTITY aboutTor.ready.label "Истражувај. Приватно."> +<!ENTITY aboutTor.ready2.label "Подготвени сте за најприватното прелистувачко искуство во светот."> +<!ENTITY aboutTor.failure.label "Настана грешка!"> +<!ENTITY aboutTor.failure2.label "Tor не работи во овој прелистувач."> + +<!ENTITY aboutTor.search.label "Пребарај со DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Прашања?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Провери го Tor Browser Упатството »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "М"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser Упатство"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project е US 501(c)(3) не-профитна организација која ги унапредува човековите права и слободи со креирање и имплементирање на слободни и отворен-код технологии за анонимност и приватност, поддржувајќи ги нивната неограничена достапност и употреба, како и нивното понатамошно научно и популарно разбирање."> +<!ENTITY aboutTor.getInvolved.label "Приклучете се »"> + +<!ENTITY aboutTor.newsletter.tagline "Добијте ги најновите вести од Tor директно во вашето сандаче."> +<!ENTITY aboutTor.newsletter.link_text "Пријавете се за Tor Вести."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor е бесплатен за користење благодарение на донациите од луѓе како вас."> +<!ENTITY aboutTor.donationBanner.buttonA "Донирај сега"> + +<!ENTITY aboutTor.alpha.ready.label "Тест. Темелен."> +<!ENTITY aboutTor.alpha.ready2.label "Подготвени сте да го тестирате најприватното прелистувачко искуство."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha е нестабилна верзија на Tor Browser која може да ја користите за однапред да ги увидите новите можности, да ги тестирате нивните перформанси и да пружите повратни информации пред новата стабилна верзија."> +<!ENTITY aboutTor.alpha.bannerLink "Пријавете грешка на Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Тест. Темелен."> +<!ENTITY aboutTor.nightly.ready2.label "Подготвени сте да го тестирате најприватното прелистувачко искуство."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly е нестабилна верзија на Tor Browser која може да ја користите за преглед на новите можности, да ги тестирате нивните перформанси и да пружите повратни информации пред новата стабилна верзија."> +<!ENTITY aboutTor.nightly.bannerLink "Пријавете грешка на Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "СОЗДАДЕНО ОД ПРИВАТНОСТ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "ОТПОР"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "ПРОМЕНА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "СЛОБОДА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ДОНИРАЈТЕ СЕГА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Вашата донација ќе се поклопи со Friends of Tor, до $100.000."> diff --git a/toolkit/torbutton/chrome/locale/mk/brand.dtd b/toolkit/torbutton/chrome/locale/mk/brand.dtd new file mode 100644 index 000000000000..7ecdafa4c52c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Browser"> +<!ENTITY trademarkInfo.part1 "'Tor' и 'Onion Logo' се регистрирани трговски марки на Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Кликни за вчитување на инсталираните системски приклучоци"> +<!ENTITY plugins.installed.enable "Овозможи приклучоци"> +<!ENTITY plugins.installed.disable "Оневозможи приклучоци"> +<!ENTITY plugins.installed.disable.tip "Кликни за запирање на вчитувањето на системските приклучоци"> diff --git a/toolkit/torbutton/chrome/locale/mk/brand.properties b/toolkit/torbutton/chrome/locale/mk/brand.properties new file mode 100644 index 000000000000..ccb79c2c639a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Browser + +homePageSingleStartMain=Firefox Старт, брза домашна страница со вграден пребарувач +homePageImport=Внесете ваша домаша страница од %S + +homePageMigrationPageTitle=Избор на Домашна странција +homePageMigrationDescription=Одберете домашна страница која сакате да ја користите: + +syncBrandShortName=Синхронизирај diff --git a/toolkit/torbutton/chrome/locale/mk/branding/brand.ftl b/toolkit/torbutton/chrome/locale/mk/branding/brand.ftl new file mode 100644 index 000000000000..48b59840f84f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Browser +trademarkInfo = 'Tor' и 'Onion Logo' се регистрирани трговски марки на Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/mk/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/mk/browserOnboarding.properties new file mode 100644 index 000000000000..f9f9d9f43b96 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Добредојдовте +onboarding.tour-tor-welcome.title=Вие сте подготвени. +onboarding.tour-tor-welcome.description=Tor Browser ви нуди највисок стандард на приватност и безбедност додека прелистувате на Интернет. Сега сте заштитени од следење, надзор и цензура. Ова брзо ќе ви покаже како. +onboarding.tour-tor-welcome.next-button=Оди во Приватност + +onboarding.tour-tor-privacy=Приватност +onboarding.tour-tor-privacy.title=Прескокнете ги следачите и водачите. +onboarding.tour-tor-privacy.description=Tor Browser ги изолира колачињата и ја брише историјата на вашиот прелистувач после вашата сесија. Овие промени кои ја осигуруваат вашата приватност и безбедност се заштитени во прелистувачот. Кликнете на 'Tor Мрежа' за да научите како да се заштитите на мрежно ниво. +onboarding.tour-tor-privacy.button=Оди на Tor Мрежа + +onboarding.tour-tor-network=Tor Мрежа +onboarding.tour-tor-network.title=Патувајте низ децентрализираната мрежа. +onboarding.tour-tor-network.description=Tor Browser ве поврзува на Tor мрежата одржувана од илјадници волонтери низ целиот свет. За разлика од VPN, овде нема место за неуспех или централизиран ентитет на кого треба да му верувате со цел да уживате приватност на Интернет. +onboarding.tour-tor-network.description-para2=НОВО: Tor Мрежните поставувања, вклучуваат можност да побараат мостови таму каде Tor е блокиран, сега можат да бидат пронајдени во Преферирања. +onboarding.tour-tor-network.action-button=Прилагоди ги твоите Мрежни поставки +onboarding.tour-tor-network.button=Оди на Круг екранот + +onboarding.tour-tor-circuit-display=Круг екран +onboarding.tour-tor-circuit-display.title=Видете ја вашата патека. +onboarding.tour-tor-circuit-display.description=За секој домеин кој го посетувате, вашиот сообраќај е пренесуван и енкриптиран во круг преку три Tor релеа низ светот. Ниту една веб страна не знае од каде сте поврзани. Можете да побарате нов круг со кликање на 'Нов круг за оваа веб страна' на Круг екранот. +onboarding.tour-tor-circuit-display.button=Види ја мојата патека +onboarding.tour-tor-circuit-display.next-button=Оди во Безбедност + +onboarding.tour-tor-security=Безбедност +onboarding.tour-tor-security.title=Изберете го вашето искуство. +onboarding.tour-tor-security.description=Исто така ви овозможуваме дополнителни поставки за зголемување на безбедноста на вашиот прелистувач. Tor безбедносните поставки ви овозможуваат да блокирате елементи кои можат да бидат користени да го нападнат вашиот компјутер. Кликнете подолу за да ги видите намените на различните опции. +onboarding.tour-tor-security.description-suffix=Забелешка: Стандардно, NoScript и HTTPS Насекаде не се вклучени во лентата со алатки, но можете да ја прилагодувате вашата лента со алатки за истите да ги додадете. +onboarding.tour-tor-security-level.button=Погледнете го вашето ниво на безбедност +onboarding.tour-tor-security-level.next-button=Оди во Препораки од искуство + +onboarding.tour-tor-expect-differences=Препораки од искуство +onboarding.tour-tor-expect-differences.title=Очекувајте некои разлики. +onboarding.tour-tor-expect-differences.description=Со сите карактеристики за безбедност и приватност кои ви ги овозможува Tor, вашето искуство додека прелистувате на Интернет може да биде малку различно. Некои нешта можат да бидат побавни, и во зависност од вашето поставено ниво на безбедност, некои елементи можат да не работат или да не бидат вчитани воопшто. Исто така можете да бидете прашани да докажете дека сте човек, а не машина. +onboarding.tour-tor-expect-differences.button=Види ЧПП +onboarding.tour-tor-expect-differences.next-button=Оди во Onion услуги + +onboarding.tour-tor-onion-services=Onion Услуги +onboarding.tour-tor-onion-services.title=Бидете екстра заштитени. +onboarding.tour-tor-onion-services.description=Onion услугите се веб страни кои завршуваат со домеин .onion кој овозможува екстра заштити на издавачите и посетителите, вклучувајќи и додадени заштити против цензурата. Onion услугите му овозможуваат на секого да овозможи содржина и услуги анонимно. Кликнете подолу за да ја посетите onion веб страната DuckDuckGo. +onboarding.tour-tor-onion-services.button=Посетете Onion +onboarding.tour-tor-onion-services.next-button=Завршено + +onboarding.overlay-icon-tooltip-updated2=Видете што има ново\nво %S +onboarding.tour-tor-update.prefix-new=Ново +onboarding.tour-tor-update.prefix-updated=Ажурирано + +onboarding.tour-tor-toolbar=Лента со алатки +onboarding.tour-tor-toolbar-update-9.0.title=Збогум Онион копче. +onboarding.tour-tor-toolbar-update-9.0.description=Сакаме вашето искуство користејќи го Tor да биде целосно вградено во Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Затоа сега, наместо да го користите онион копчето, можете да го видите вашиот Tor Круг преку [i] во URL лентата и да побарате Нов Идентитет користејќи го копчето во алатникот или [≡] менито. +onboarding.tour-tor-toolbar-update-9.0.button=Како да побарате Нов Идентитет +onboarding.tour-tor-toolbar-update-9.0.next-button=Оди на Tor Мрежа + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Следно +onboarding.tor-circuit-display.done=Завршено +onboarding.tor-circuit-display.one-of-three=1 од 3 +onboarding.tor-circuit-display.two-of-three=2 од 3 +onboarding.tor-circuit-display.three-of-three=3 од 3 + +onboarding.tor-circuit-display.intro.title=Како работат заобиколувањата? +onboarding.tor-circuit-display.intro.msg=Заобиколувањата се направени од релеа задолжени по случаен избор, кои се всушност компјутери низ целиот свет кои се конфигурирани да го препраќаат Tor сообраќајот. Заобиколувањата ви овозможуваат да прелистувате приватно и да се поврзувате на onion услуги. + +onboarding.tor-circuit-display.diagram.title=Круг екран +onboarding.tor-circuit-display.diagram.msg=Овој дијаграм покажува релеа кои прават круг за оваа веб страна. За да превенирате поврзување на активност низ различни веб страни, секоја веб страна добива различен круг. + +onboarding.tor-circuit-display.new-circuit.title=Дали ви треба нов круг? +onboarding.tor-circuit-display.new-circuit.msg=Ако не можете да се поврзете на веб страната која се обидувате да ја посетите или истата не се вчитува правилно, тогаш можете да го користите ова копче да ја вчитате отпочеток преку нов круг. diff --git a/toolkit/torbutton/chrome/locale/mk/network-settings.dtd b/toolkit/torbutton/chrome/locale/mk/network-settings.dtd new file mode 100644 index 000000000000..6ad40ff0812a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor мрежни поставки"> +<!ENTITY torsettings.wizard.title.default "Поврзи се на Tor"> +<!ENTITY torsettings.wizard.title.configure "Tor мрежни поставки"> +<!ENTITY torsettings.wizard.title.connecting "Воспоставување на врска"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Browser јазик"> +<!ENTITY torlauncher.localePicker.prompt "Одберете јазик."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Кликнете на "Поврзи" да се поврзете на Tor."> +<!ENTITY torSettings.configurePrompt "Кликнете на "Конфигурирај" за да ги конфигурирате мрежните поставки ако сте во земја која го цензурира Tor (како Египет, Кина, Турција) или ако се поврзувате од приватна мрежа која бара прокси."> +<!ENTITY torSettings.configure "Конфигурирај"> +<!ENTITY torSettings.connect "Поврзи"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Почекај за стартување на Tor..."> +<!ENTITY torsettings.restartTor "Рестартирај го Tor"> +<!ENTITY torsettings.reconfigTor "Пре-конфигурирај"> + +<!ENTITY torsettings.discardSettings.prompt "Имате конфигурирано Tor мостови или имате внесено локални прокси поставки.  За директно да се поврзете на Tor мрежата, овие поставки мораат да бидат избришани."> +<!ENTITY torsettings.discardSettings.proceed "Избриши ги поставките и поврзи се"> + +<!ENTITY torsettings.optional "Опционално"> + +<!ENTITY torsettings.useProxy.checkbox "Користам прокси за поврзување на Интернет"> +<!ENTITY torsettings.useProxy.type "Тип на Прокси"> +<!ENTITY torsettings.useProxy.type.placeholder "одбери тип на прокси"> +<!ENTITY torsettings.useProxy.address "Адреса"> +<!ENTITY torsettings.useProxy.address.placeholder "IP адреси или име на хост"> +<!ENTITY torsettings.useProxy.port "Порта"> +<!ENTITY torsettings.useProxy.username "Корисничко име"> +<!ENTITY torsettings.useProxy.password "Лозинка"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Овој компјутер оди преку заштитен ѕид кој дозволува поврзувања до одредени порти"> +<!ENTITY torsettings.firewall.allowedPorts "Дозволени порти"> +<!ENTITY torsettings.useBridges.checkbox "Tor е цензуриран во мојата држава"> +<!ENTITY torsettings.useBridges.default "Селектирајте вграден Мост"> +<!ENTITY torsettings.useBridges.default.placeholder "одбери мост"> +<!ENTITY torsettings.useBridges.bridgeDB "Барање за мост од torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Внесете ги карактерите од сликата"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Пробајте нов предизвик"> +<!ENTITY torsettings.useBridges.captchaSubmit "Испрати"> +<!ENTITY torsettings.useBridges.custom "Обезбеди мост кој го знам"> +<!ENTITY torsettings.useBridges.label "Внесете информации за мост од доверлив извор."> +<!ENTITY torsettings.useBridges.placeholder "внеси адреса:порта (по една во секој ред)"> + +<!ENTITY torsettings.copyLog "Копирај го Tor логот за залепување"> + +<!ENTITY torsettings.proxyHelpTitle "Прокси помош"> +<!ENTITY torsettings.proxyHelp1 "Може да ви биде потребно локално прокси кога се поврзувате преку мрежа на компанија, училиште, или универзитет. Ако не сте сигурни дали е потребно прокси, погледнете во Интернет поставки во друг прелистувач или проверете ги мрежните поставки на системот."> + +<!ENTITY torsettings.bridgeHelpTitle "Помош за мост реле"> +<!ENTITY torsettings.bridgeHelp1 "Мостовите се неизлистани релеа кои го прават потешко блокирањето на поврзувањата кон Tor мрежата.  Секој тип на мост користи различен метод за избегнување на цензурирањето.  obfs мостот го прави протокот на информации да изгледа нормален, а meek прави како да е од некој стандарден прелистувач наместо од Tor."> +<!ENTITY torsettings.bridgeHelp2 "Поради тоа колку конкретно државите се обидуваат да го блокираат Tor, конкретни мостови работат во едни конкретни држави но не и во други.  Ако не сте сигурни кои мостови работат во вашата држава, посетете ја torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Ве молиме почекајте додека се воспостави поврзувањето со Тор мрежата.  Ова може да потрае неколку минути."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Поврзување"> +<!ENTITY torPreferences.torSettings "Tor Поставки"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser го рутира вашиот сообраќај преку Tor мрежата, водена од илјадници волонтери ширум светот." > +<!ENTITY torPreferences.learnMore "Научете повеќе"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Интернет:"> +<!ENTITY torPreferences.statusInternetTest "Тест"> +<!ENTITY torPreferences.statusInternetOnline "Вклучен"> +<!ENTITY torPreferences.statusInternetOffline "Исклучен"> +<!ENTITY torPreferences.statusTorLabel "Tor Мрежа:"> +<!ENTITY torPreferences.statusTorConnected "Поврзано"> +<!ENTITY torPreferences.statusTorNotConnected "Неповрзано"> +<!ENTITY torPreferences.statusTorBlocked "Потенцијално блокирано"> +<!ENTITY torPreferences.learnMore "Научете повеќе"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Брз почеток"> +<!ENTITY torPreferences.quickstartDescriptionLong "Брз почеток го поврзува Tor Browser на Tor Мрежата автоматски при стартување, врз основа на вашите последни користени мрежни поставки."> +<!ENTITY torPreferences.quickstartCheckbox "Секогаш поврзи автоматски"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Мостови"> +<!ENTITY torPreferences.bridgesDescription "Мостовите ви помагаат да пристапите на Tor мрежата на места каде Tor е блокиран. Зависно од тоа каде сте, еден мост може да работи подобро од друг."> +<!ENTITY torPreferences.bridgeLocation "Ваша локација"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Автоматски"> +<!ENTITY torPreferences.bridgeLocationFrequent "Често избрани локации"> +<!ENTITY torPreferences.bridgeLocationOther "Останати локации"> +<!ENTITY torPreferences.bridgeChooseForMe "Одбери Мост за мене..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Ваши моментални мостови"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Можете да зачувате еден или повеќе мостови, и Tor ќе избере кој да го користи при поврзување. Tor автоматски ќе го замени мостот со друг кога ќе биде потребно."> +<!ENTITY torPreferences.bridgeId "#1 мост: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Избриши"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Оневозможи вградени мостови"> +<!ENTITY torPreferences.bridgeShare "Споделете го овој мост користејќи го QR кодот или со копирање на оваа адреса:"> +<!ENTITY torPreferences.bridgeCopy "Копирај ја Мост адресата"> +<!ENTITY torPreferences.copied "Копирано!"> +<!ENTITY torPreferences.bridgeShowAll "Покажи ги сите мостови"> +<!ENTITY torPreferences.bridgeRemoveAll "Избриши ги сите мостови"> +<!ENTITY torPreferences.bridgeAdd "Додади нов Мост"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Одберете еден од вградените мостови во Tor Browser"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Селектирајте вграден Мост..."> +<!ENTITY torPreferences.bridgeRequest "Барање за мост..."> +<!ENTITY torPreferences.bridgeEnterKnown "Внесете адреса на мост која веќе ја знаете"> +<!ENTITY torPreferences.bridgeAddManually "Додадете Мост рачно..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Напредно"> +<!ENTITY torPreferences.advancedDescription "Конфигурирајте како Tor Browser да се поврзува на Интернет"> +<!ENTITY torPreferences.advancedButton "Поставки..."> +<!ENTITY torPreferences.viewTorLogs "Види ги Tor логовите"> +<!ENTITY torPreferences.viewLogs "Види логови..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Избриши ги сите мостови?"> +<!ENTITY torPreferences.removeBridgesWarning "Оваа акција е неповратна."> +<!ENTITY torPreferences.cancel "Откажи"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Скенирајте го QR кодот"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Вградени Мостови"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser вклучува некои специфични типови на мостови познати како “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 е тип на вграден мост кој прави вашиот Tor сообраќај да изгледа случајно. Исто така тие се помалку веројатни да бидат блокирани отколку нивните претходници, obfs3 мостовите."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake е вграден мост кој ја победува цензурата преку рутирање на вашето поврзување преку Snowflake проксија, управувани од волонтери."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure е вграден мост кој прави да изгледа дека користите веб страна на Microsoft наместо дека го користите Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Побарај Мост"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Контактирај BridgeDB. Ве молиме почекајте."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решете ја ЗАДАЧАТА за да побарате мост."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Решението е погрешно. Ве молиме обидете се повторно."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Обезбеди Мост"> +<!ENTITY torPreferences.provideBridgeHeader "Внесете информации за мост од доверлив извор"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Поставки на поврзување"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Конфигурирајте како Tor Browser да се поврзува на Интернет"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Разделени-со-запирка вредности"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor Логови"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Неповрзано"> +<!ENTITY torConnect.connectingConcise "Се поврзува..."> +<!ENTITY torConnect.tryingAgain "Обидете се повторно..."> +<!ENTITY torConnect.noInternet "Tor Browser не може да се поврзе на Интернет"> +<!ENTITY torConnect.noInternetDescription "Ова може да биде за време грешка при поврзување повеќе отколку кога Tor е блокиран. Проверете го вашето Интернет поврзување, прокси и поставките на заштитниот ѕид пред да се обидете повторно."> +<!ENTITY torConnect.couldNotConnect "Tor Browser не може да се поврзе на Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "Прилагодете го вашето поврзување"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Ако Tor е блокиран на вашата локација, пробувањето мост може да помогне. Поврзувањето може да ви помогне да одберете еден мост за користење на вашата локација, или наместо тоа можете #1 рачно."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Пробај мост..."> +<!ENTITY torConnect.tryingBridgeAgain "Обидетете се уште еднаш..."> +<!ENTITY torConnect.errorLocation "Tor Browser не може да ве лоцира"> +<!ENTITY torConnect.errorLocationDescription "На Tor Browser му треба да ја знае вашата локација за да може да одбере правилен мост за вас. Доколку преферирате да не ја споделите вашата локација, наместо тоа можете рачно #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Дали овие поставки за локација се точни?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser сеуште не може да се поврзе на Tor. Ве молиме проверете дали вашите поставки на локација се точни и обидете се повторно, или #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser сеуште не може да се поврзе"> +<!ENTITY torConnect.finalErrorDescription "И покрај најголемите напори, Помошта при Поврзување не беше во можност да се поврзе на Tor. Обидетете да се справите со проблемот при поврзувањето со помош на рачно додавање на мост."> +<!ENTITY torConnect.breadcrumbAssist "Помош за поврзување"> +<!ENTITY torConnect.breadcrumbLocation "Поставки за локација"> +<!ENTITY torConnect.breadcrumbTryBridge "Пробај мост"> +<!ENTITY torConnect.automatic "Автоматски"> +<!ENTITY torConnect.selectCountryRegion "Одберете Држава или Регион"> +<!ENTITY torConnect.frequentLocations "Често избрани локации"> +<!ENTITY torConnect.otherLocations "Останати локации"> +<!ENTITY torConnect.restartTorBrowser "Рестартирај го Tor Browser"> +<!ENTITY torConnect.configureConnection "Прилагодување на Поврзувањето..."> +<!ENTITY torConnect.viewLog "Види логови..."> +<!ENTITY torConnect.tryAgain "Обиди се повторно"> +<!ENTITY torConnect.offline "Интернетот не е достапен."> +<!ENTITY torConnect.connectMessage "Промените во Tor Поставки нема да имаат ефект се додека не се поврзете"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser не успеа да воспостави поврзување со Tor мрежата."> +<!ENTITY torConnect.yourLocation "Ваша локација"> +<!ENTITY torConnect.tryBridge "Пробај мост"> +<!ENTITY torConnect.autoBootstrappingFailed "Автоматското прилагодување не успеа"> +<!ENTITY torConnect.autoBootstrappingFailed "Автоматското прилагодување не успеа"> +<!ENTITY torConnect.cannotDetermineCountry "Не беше возможно утврдување на државата на корисникот"> +<!ENTITY torConnect.noSettingsForCountry "Нема достапни поставки за вашата локација"> diff --git a/toolkit/torbutton/chrome/locale/mk/onboarding.properties b/toolkit/torbutton/chrome/locale/mk/onboarding.properties new file mode 100644 index 000000000000..bc679118dfe1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Нови во %S?\nАјде да почнеме. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S e комплетно нов.\nВидете што можете да направите! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Затвори +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Напушти +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Завршено diff --git a/toolkit/torbutton/chrome/locale/mk/torbutton.dtd b/toolkit/torbutton/chrome/locale/mk/torbutton.dtd new file mode 100644 index 000000000000..2280f942723d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Нов идентитет"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Нов идентитет"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Нов Tor круг за оваа страна"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Нов Tor круг за оваа веб страна"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Тор мрежни поставки..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Провери за нова верзија на Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Заштита за колаче..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Кликнете за иницијализирање на Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Tor Browser безбедносни поставки"> +<!ENTITY torbutton.cookiedialog.title "Уреди ги заштитите за колаче"> +<!ENTITY torbutton.cookiedialog.lockCol "Заштитено"> +<!ENTITY torbutton.cookiedialog.domainCol "Хост"> +<!ENTITY torbutton.cookiedialog.nameCol "Име"> +<!ENTITY torbutton.cookiedialog.pathCol "Патека"> +<!ENTITY torbutton.cookiedialog.protectCookie "Заштити колаче"> +<!ENTITY torbutton.cookiedialog.removeCookie "Избриши колаче"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Отстрани заштита на колаче"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Избриши ги сите освен заштитените"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Заштити ги новите колачиња"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Не ги штити новите колачиња"> +<!ENTITY torbutton.prefs.sec_caption "Безбедносно ниво"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Безбедносниот лизгач ви овозможува да исклучите дадени прелистувачки можности кои можат да го направат вашиот прелистувач поранлив на хакерски напади."> +<!ENTITY torbutton.prefs.sec_standard_label "Стандардно"> +<!ENTITY torbutton.prefs.sec_standard_description "Сите можности на Tor Browser и веб страните се овозможени."> +<!ENTITY torbutton.prefs.sec_safer_label "Побезбедно"> +<!ENTITY torbutton.prefs.sec_safer_description "Оневозможува можности на веб страните кои често се опасни, предизвикувајќи некои страни да ја изгубат функционалноста."> +<!ENTITY torbutton.prefs.sec_safer_list_label "На побезбедна поставка:"> +<!ENTITY torbutton.prefs.sec_safest_label "Најбезбедно"> +<!ENTITY torbutton.prefs.sec_safest_description "Дозволува само можности на веб страните потребни за статичните страни и основните услужни сервиси. Овие измени влијаат на сликите, разни мултимедијални датотеки, и на скрптите."> +<!ENTITY torbutton.prefs.sec_safest_list_label "На најбезбедна поставка:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Научи повеќе"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript е оневозможен на не-HTTPS веб страните."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript е стандардно оневозможен на сите веб страни."> +<!ENTITY torbutton.prefs.sec_limit_typography "Некои фонтови и математички симболи се оневозможени."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Некои фонтови, икони, математички симболи, и слики се оневозможени."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Аудио и видео (HTML5 медиа), и WebGL се кликни-да-пуштиш."> +<!ENTITY torbutton.prefs.sec_custom_warning "Прилагодено"> +<!ENTITY torbutton.prefs.sec_overview "Оневозможи одредени веб можности кои можат да бидат користени за напад врз вашата безбедност и анонимност."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Безбедносно ниво: Стандардно"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Безбедносно ниво: Побезбедно"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Безбедносно ниво: Најбезбедно"> +<!ENTITY torbutton.prefs.sec_custom_summary "Вашите прилагодени преферирања на прелистувачот резултираа со невообичаени безбедносни поставки. Од причини поврзани со безбедноста и приватноста, ви препорачуваме да ги изберете почетните безбедносни нивоа."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Врати на стандардно"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Напредни Безбедносни Поставки..."> +<!ENTITY torbutton.prefs.sec_change "Промени..."> +<!ENTITY torbutton.circuit_display.title "Tor круг"> +<!ENTITY torbutton.circuit_display.new_circuit "Нов круг за оваа веб страна"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Отвори конзола за автентикација на onion клиентска услуга"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Зачувај го овој клуч"> diff --git a/toolkit/torbutton/chrome/locale/mk/torbutton.properties b/toolkit/torbutton/chrome/locale/mk/torbutton.properties new file mode 100644 index 000000000000..835ef16b9b19 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Интернет +torbutton.circuit_display.ip_unknown = IP непозната +torbutton.circuit_display.onion_site = Onion веб страна +torbutton.circuit_display.this_browser = Овој прелистувач +torbutton.circuit_display.relay = Реле +torbutton.circuit_display.tor_bridge = Мост +torbutton.circuit_display.unknown_country = Непозната држава +torbutton.circuit_display.guard = Чувар +torbutton.circuit_display.guard_note = Твојот [Чувар] јазол може да не се промени. +torbutton.circuit_display.learn_more = Научи повеќе +torbutton.circuit_display.click_to_copy = Кликни за Копирање +torbutton.circuit_display.copied = Копирано! +torbutton.content_sizer.margin_tooltip = Tor Browser ја додава ова маргина за ширината и висината на вашиот прозорец да биде постандарден, со што се намалува можноста луѓето да ве следат онлајн. +extensions.torbutton@torproject.org.description = Torbutton пружа копче за конфигурирање на Tor поставките и брзо и олеснето чисто приватно прелистување на податоци. +torbutton.popup.external.title = Преземање на надворешна датотека? +torbutton.popup.external.app = Tor прелистувачот не може да ја прикаже оваа датотека. Треба да ја отворите со друга апликација.\n\n +torbutton.popup.external.note = Некои типови на датотеки можат да направат апликациите / програмите да се поврзат на Интернет без да користат Тор.\n\n +torbutton.popup.external.suggest = Да би биле безбедни, единствено треба преземените датотеки да ги отворате додека сте исклучени од Интернет, или користејќи Tor бутирачкото ЦД како Tails.\n +torbutton.popup.launch = Преземи датотека +torbutton.popup.cancel = Откажи +torbutton.popup.dontask = Автоматски преземај датотеки од сега па натаму +torbutton.popup.no_newnym = Torbutton не може безбедно да ви даде нов идентитет. Нема пристап до Тor контролната порта.\n\nДали го користите Tor Browser Bundle? +torbutton.security_settings.menu.title = Безбедносни подесувања +torbutton.title.prompt_torbrowser = Важна Torbutton информација +torbutton.popup.prompt_torbrowser = Torbutton работи поинаку сега: не може повеќе да биде исклучен.\n\nЈа направивме оваа промена, заота што не е безбедно да се користи Torbutton во прелистувач кој исто така се користи за не-Tor прелистување. Имаше премногу грешки и проблеми кои не можеа да бидат поправени на поинаков начин.\n\nАко сакате да продолжите да го користите Firefox стандардно, треба да го деинсталирате Torbutton и да го преземете Tor Browser пакетот. Приватните поставки на Tor [...] +torbutton.popup.short_torbrowser = Важна Torbutton информација!\n\nTorbutton сега е секогаш вклучен.\n\nКликни на Torbutton за повеќе информации. + +torbutton.popup.confirm_plugins = Приклучоците како Flash можат да ја повредат вашата приватност и анонимност.\n\nТие можат исто така да го заобиколат Tor и да ја откријат важата локација и IP адресата.\n\nДали сте сигурни дека сакате да ги овозможите приклучоците?\n\n +torbutton.popup.never_ask_again = Не ме прашувај никогаш повеќе +torbutton.popup.confirm_newnym = Tor Browser ќе ги затвори сите прозорци и табови. Сите веб сесии ќе бидат изгубени.\n\nРестартирајте го Tor Browser сега за да го промените вашиот идентитет.\n\n + +torbutton.maximize_warning = Максимизирањето на Tor Browser дозволува на веб страните да ја утврдат големината на вашиот монитор, што пак може да се користи за ваше следење. Ви препорачуваме да ги оставите прозорците на Tor Browser во нивната оригинална големина. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Оваа веб страна (%S) пробува да извлече HTML5 податоци, преку кои може уникатно да се идентифукува вашиот компјутер.\n\nТреба ли Tor Browser да и дозволи на оваа веб страна да ги извлече HTML5 податоците? +canvas.notNow=Не сега +canvas.notNowAccessKey=N +canvas.allow=Дозволи во иднина +canvas.allowAccessKey=A +canvas.never=Никогаш за оваа веб страна (препорачано) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Профил проблем +profileReadOnly=Не можете да го стартувате %S од систем без запишувачки привилегии. Копирајте %S на друга локација пред обид за користење. +profileReadOnlyMac=Не можете да го стартувате %S од систем без запишувачки привилегии. Копирајте го %S на Работната површина или во Апликативната папка / Program Files. +profileAccessDenied=%S нема дозвола да пристапи на профилот. Прилагодете ги системските привилегии на датотеката и обидете се повторно. +profileMigrationFailed=Миграцијата на вашиот постоечки %S профил не успеа.\nНови поставки ќе бидат користени. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Преземање %S ажурирање + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Енкриптирано поврзување (Onion Услуга, %1$S, %2$S битни клучеви, %3$S) +pageInfo_OnionEncryption=Енкриптирано поврзување (Onion Услуга) +pageInfo_OnionName=Onion Име: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Научете повеќе +onionServices.errorPage.browser=Прелистувач +onionServices.errorPage.network=Мрежа +onionServices.errorPage.onionSite=Onion веб страна +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Проблем при вчитување на Onion веб страна +onionServices.descNotFound.header=Onion веб страната не е најдена +onionServices.descNotFound=Најверојатна причина затоа е дека Onion веб страната е офлајн. Контактријате го администраторот на Onion веб страната. +onionServices.descNotFound.longDescription=Детали: %S — Бараниот објаснувач на onion услугата не може да биде пронајден на хашпрстенот и поради тоа услугата не е достапна за клиентот. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Проблем при вчитување на Onion веб страна +onionServices.descInvalid.header=Onion веб страната не е достапна +onionServices.descInvalid=Onion веб страната не е достапна поради интерна грешка. +onionServices.descInvalid.longDescription=Детали: %S — Бараниот објаснувач на onion услугата не може да биде анализиран или валидацијата на потписот не е успешна. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Проблем при вчитување на Onion веб страна +onionServices.introFailed.header=Onion веб страната се исклучи +onionServices.introFailed=Најверојатна причина затоа е дека onion веб страната е офлајн. Контактријате го администраторот на onion веб страната. +onionServices.introFailed.longDescription=Детали: %S — Воведот беше неуспешен, што значи дека објаснувачот беше пронајден но услугата не е повеќе поврзани на воведната точка. Веројатно е дека услугата го променија нејзиниот објаснувач или не е во функцијата. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Проблем при вчитување на onion веб страна +onionServices.rendezvousFailed.header=Не може да се поврзе на onion веб страна +onionServices.rendezvousFailed=Onion веб страната е зафатена или Tor мрежата е преоптоварена. Обидете се повторно подоцна. +onionServices.rendezvousFailed.longDescription=Детали: %S — Клиентот не успеа да се состане со услугата, што значи дека клиентот не беше во можност да го заврши поврзувањето. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Потребна е авторизација +onionServices.clientAuthMissing.header=Onion веб страната бара автентикација +onionServices.clientAuthMissing=Пристапот до onion веб страна бара клуч но ниту еден не беше овозможен. +onionServices.clientAuthMissing.longDescription=Детали: %S — Клиентот го презема бараниот објаснувач за Onion услугата но не можеше да ја декриптира неговата содржина бидејќи информација за авторизација на клиентот недостасува. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Авторизацијата е неуспешна +onionServices.clientAuthIncorrect.header=Автентикацијата на onion веб страна беше неуспешна +onionServices.clientAuthIncorrect=Овозможениот клуч е неточен или бил повлечен. Контактирајте го администраторот на onion веб страната. +onionServices.clientAuthIncorrect.longDescription=Детали: %S — Клиентот беше во можност да го преземе бараниот објаснувач за onion услугата но не можеше да ја декриптира неговата содржина користејќи ја овозможената информација за авторизација на клиентот. Ова можеби значи дека пристапот бил повлечен. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Проблем при вчитување на onion веб страна +onionServices.badAddress.header=Невалидна адреса на Onion веб страна +onionServices.badAddress=Овозможената адреса на onion веб страна е невалидна. Ве молиме проверете дека сте ја внеле точно. +onionServices.badAddress.longDescription=Детали: %S — Овозможената .onion адреса е невалидна. Оваа грешка се појавува поради една од следниве причини: контролната сума на адресата не се совпаѓа, јавниот клуч ed25519 е невалиден, или кодирањето е невалидно. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Проблем при вчитување на onion веб страна +onionServices.introTimedOut.header=Времето за создавање на круг за onion веб страна истече +onionServices.introTimedOut=Неуспешно поврзување на onion веб страна, можно поради слабо мрежно поврзување. +onionServices.introTimedOut.longDescription=Детали: %S — Времето за поврзување со бараната onion услуга истече додека се градеше кругот. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S бара да автентифицирате. +onionServices.authPrompt.keyPlaceholder=Внесете го вашиот приватен клуч за оваа onion услуга +onionServices.authPrompt.done=Завршено +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Ве молиме внесете валиден клуч (52 база32карактери или 44 база64 карактери) +onionServices.authPrompt.failedToSetKey=Не може да се кофигурира Tor со вашиот клуч +onionServices.authPreferences.header=Onion Услуги Автентикација +onionServices.authPreferences.overview=Некои onion услуги бараат да се идентификувате со клуч (некој вид на лозинка) пред да можете да им пристапите. +onionServices.authPreferences.savedKeys=Зачувани Клучеви... +onionServices.authPreferences.dialogTitle=Клучеви за Onion Услуги +onionServices.authPreferences.dialogIntro=Клучеви за следниве onion веб страни се складирани на вашиот компјутер +onionServices.authPreferences.onionSite=Onion веб страна +onionServices.authPreferences.onionKey=Клуч +onionServices.authPreferences.remove=Отстрани +onionServices.authPreferences.removeAll=Избриши се +onionServices.authPreferences.failedToGetKeys=Не може да се повратат клучевите од Tor +onionServices.authPreferences.failedToRemoveKey=Не може да се избрише клуч +onionServices.v2Deprecated.pageTitle=Предупредување за Амортизација на В2 Onion Веб страни +onionServices.v2Deprecated.header=Верзијата 2 на Onion веб страните наскоро ќе биде амортизирана +onionServices.v2Deprecated=Оваа onion веб страна наскоро нема да биде достапна. Ве молиме контактирајте го администраторот на веб страната и охрабрете го да ја надгради. +onionServices.v2Deprecated.longDescription=Tor ја завршува поддршката за верзија 2 на onion сервисите/услугите почнувајќи од јули 2021 година, и оаа onion веб страна повеќе нема да биде достапна на оваа адреса. Ако вие сте администраторот, надградете ја во верзија 3 onion сервис/услуга поскоро. +onionServices.v2Deprecated.tryAgain=Разбирам +onionServices.v2Deprecated.tooltip=Оваа onion веб страна наскоро нема биде достапна + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Секогаш приоритизирај Onion-и +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Не сега +onionLocation.notNowAccessKey=n +onionLocation.description=Има поприватна и побезбедна верзија достапна за оваа веб страна преку Tor мрежата преку onion услугите. Onion услугите им помагаат на објавувачите на веб страните и на нивните посетители да ги победат надзорот и цензурата. +onionLocation.tryThis=Пробај onion услуги +onionLocation.onionAvailable=.onion достапно +onionLocation.learnMore=Научи повеќе... +onionLocation.always=Секогаш +onionLocation.askEverytime=Прашувај секој пат +onionLocation.prioritizeOnionsDescription=Приоритизирај .onion веб страни кога се познати. +onionLocation.onionServicesTitle=Onion Услуги + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Адресата на криптовалутата (%S) беше копирана од небезбедна веб страна. Можно е истата да била променета. +cryptoSafetyPrompt.whatCanHeading=Што можете да направите? +cryptoSafetyPrompt.whatCanBody=Можете да се обидете повторно да се поврзете со Нов Круг за да воспоставите безбедно поврзување, или да го прифатите ризикот и да го отфрлите предупредувањето. +cryptoSafetyPrompt.learnMore=Научете повеќе +cryptoSafetyPrompt.primaryAction=Освежи Таб со Нов Круг +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Отфрли предупредување +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Продолжете внимателно +rulesets.warningDescription=Додавањето или изменувањето на сетовите на правила може да предизвика напаѓачите да го преземат вашиот прелистувач. Продолжете само ако знаете што правите. +rulesets.warningEnable=Предупреди ме кога ќе се обидам да им пристапам на овие преферирања +rulesets.warningButton=Прифати го Ризикот и Продолжи +# Ruleset list +rulesets.rulesets=Сетови на правила +rulesets.noRulesets=Не се пронајдени сетови на правила +rulesets.noRulesetsDescr=Кога ќе ги зачувате сетовите на правила во Tor Browser, ќе се појават овде. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Последен пат ажуриран %S +rulesets.neverUpdated=Никогаш не е ажуриран, или последното ажурирање било неуспешно +rulesets.enabled=Овозможено +rulesets.disabled=Оневозможено +# Ruleset details/edit ruleset +rulesets.edit=Уреди +rulesets.name=Име +rulesets.jwk=JWK +rulesets.pathPrefix=Префикс на патека +rulesets.scope=Опсег +rulesets.enable=Овозможи сетови на правила +rulesets.checkUpdates=Провери за Ажурирања +rulesets.jwkPlaceholder=Клучот користен за потпишување на овие сетови на правила во JWK (JSON Web Key) формат +rulesets.jwkInvalid=JWK не може да биде анализиран, или клучот не е валиден +rulesets.pathPrefixPlaceholder=ULR префикс кој ги содржи датотеките потребни за сетот на правила +rulesets.pathPrefixInvalid=Патеката на префиксот не е валидна HTTP(S) URL +rulesets.scopePlaceholder=Регуларно изразување за опсегот на сетот на правила +rulesets.scopeInvalid=Опсегот не може да биде анализаран како регуларно изразување +rulesets.save=Зачувај +rulesets.cancel=Откажи diff --git a/toolkit/torbutton/chrome/locale/mk/torlauncher.properties b/toolkit/torbutton/chrome/locale/mk/torlauncher.properties new file mode 100644 index 000000000000..a8b1b7751b74 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/mk/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor стартувач + +torlauncher.tor_exited_during_startup=Tor се исклучи за време на вклучувањето. Ова може да е поради грашка во вашата torrc датотека, грешка во Tor или друга програма во вашиот систем, или проблем со хардеверот. Додека не го поправите проблемот кој го предизвикува ова, и не го рестартирате Tor, Tor Browser нема да се стартува. +torlauncher.tor_exited=Tor неочекувано се исклучи. Ова може да е до грешка во самиот Tor, друга програма во системот, или проблем со хардверот. Додека не го рестартирате Tor, Tor Browser нема да може да ја отвори било која веб страна. Ако проблемот остане, ве молиме испратете копија од вашиот Tor лог на тимот за поддршка. +torlauncher.tor_exited2=Рестартирањето на Tor нема да ви ги затвори табовите во вашиот прелистувач. +torlauncher.tor_controlconn_failed=Не може да се поврзе на Tor контролната порта. +torlauncher.tor_failed_to_start=Tor не успеа да се стартува. +torlauncher.tor_control_failed=Не успеа да преземе контрола врз Tor. +torlauncher.tor_bootstrap_failed=Tor не успеа да воспостави поврзување со Tor мрежата. +torlauncher.tor_bootstrap_failed_details=%1$S не успеаа (%2$S). + +torlauncher.unable_to_start_tor=Не може да се стартува Tor.\n\n%S +torlauncher.tor_missing=Извршната датотека на Tor недостасува. +torlauncher.torrc_missing=torrc датотеката недостасува и не може да биде создадена. +torlauncher.datadir_missing=Tor податочниот директориум не постои и не може да биде создаден. +torlauncher.onionauthdir_missing=Директориумот за Tor onion автентификација не постои или не може да биде создаден. +torlauncher.password_hash_missing=Неуспешно добивање на хаш-лозинка. + +torlauncher.failed_to_get_settings=Невозможно е да се добијат Tor поставки.\n\n%S +torlauncher.failed_to_save_settings=Невозможно е да се зачуваат Tor поставките.\n\n%S +torlauncher.ensure_tor_is_running=Проверете дали Tor е вклучен. + +torlauncher.error_proxy_addr_missing=Мора да ги посочите и IP адресите или хостовите и бројот на портата за да го конфигурирате Tor да користи прокси за пристап на Интернет. +torlauncher.error_proxy_type_missing=Морате да одберете тип на прокси. +torlauncher.error_bridges_missing=Морате да одберете еден или повеќе мостови. +torlauncher.error_default_bridges_type_missing=Мора да одберете тип на транспорт за обезбедените мостови. +torlauncher.error_bridgedb_bridges_missing=Ве молиме побарајте мост. +torlauncher.error_bridge_bad_default_type=Нема обезбедени мостови кои го имаат типот на транспорт %S а се достапни. Прилагодете ги вашите поставки. + +torlauncher.bridge_suffix.meek-amazon=(работи во Кина) +torlauncher.bridge_suffix.meek-azure=(работи во Кина) + +torlauncher.request_a_bridge=Барање за мост... +torlauncher.request_a_new_bridge=Барање за нов мост... +torlauncher.contacting_bridgedb=Контактирање со BridgeDB. Ве молиме почекајте. +torlauncher.captcha_prompt=Решете ја ЗАДАЧАТА за да побарате мост. +torlauncher.bad_captcha_solution=Решението е погрешно. Ве молиме обидете се повторно. +torlauncher.unable_to_get_bridge=Не е во можност добивањето на мост од BridgeDB.\n\n%S +torlauncher.no_meek=Овој прелистувач не е конфигуриран за meek, кој е потребен за добивање на мостови. +torlauncher.no_bridges_available=Нема достапни мостови во овој момент. Извинете. + +torlauncher.connect=Поврзи +torlauncher.restart_tor= Повторно стартување на Tor +torlauncher.quit=Прекини +torlauncher.quit_win=Излез +torlauncher.done=Завршено + +torlauncher.forAssistance=За помош, контактирајте не на %S +torlauncher.forAssistance2=За помош, посетете ја %S + +torlauncher.copiedNLogMessages=Копирањето е завршено. %S Tor лог пораките се подготвени да бидат залепени во уредувач на текст или во порака за е-пошта. + +torlauncher.bootstrapStatus.starting=Започнување +torlauncher.bootstrapStatus.conn_pt=Поврзување со мост +torlauncher.bootstrapStatus.conn_done_pt=Поврзан со мост +torlauncher.bootstrapStatus.conn_proxy=Поврзување со прокси +torlauncher.bootstrapStatus.conn_done_proxy=Поврзан со мост +torlauncher.bootstrapStatus.conn=Поврзување со Tor реле +torlauncher.bootstrapStatus.conn_done=Поврзан со Tor реле +torlauncher.bootstrapStatus.handshake=Преговарање со Tor реле +torlauncher.bootstrapStatus.handshake_done=Завршено преговарање со Tor реле +torlauncher.bootstrapStatus.onehop_create=Воспоставување енкриптирано поврзување со директориумот +torlauncher.bootstrapStatus.requesting_status=Добивање на мрежен статус +torlauncher.bootstrapStatus.loading_status=Вчитување на мрежен статус +torlauncher.bootstrapStatus.loading_keys=Вчитување на авторитетни сертификати +torlauncher.bootstrapStatus.requesting_descriptors=Барање на информации за реле +torlauncher.bootstrapStatus.loading_descriptors=Вчитување на информации за реле +torlauncher.bootstrapStatus.enough_dirinfo=Завршено е вчитувањето на информациите за релето +torlauncher.bootstrapStatus.ap_conn_pt=Градење кругови: Поврзување со мост +torlauncher.bootstrapStatus.ap_conn_done_pt=Градење кругови: Поврзан со мост +torlauncher.bootstrapStatus.ap_conn_proxy=Градење кругови: Поврзување со прокси +torlauncher.bootstrapStatus.ap_conn_done_proxy=Градење кругови: Поврзан со прокси +torlauncher.bootstrapStatus.ap_conn=Градење кругови: Поврзување со Tor реле +torlauncher.bootstrapStatus.ap_conn_done=Градење кругови: Поврзан со Tor реле +torlauncher.bootstrapStatus.ap_handshake=Градење кругови: Преговарање со Tor реле +torlauncher.bootstrapStatus.ap_handshake_done=Градење кругови: Завршено преговарање со Tor реле +torlauncher.bootstrapStatus.circuit_create=Градење кругови: Воспоставување на Tor круг +torlauncher.bootstrapStatus.done=Поврзани сте на Tor мрежата! + +torlauncher.bootstrapWarning.done=завршено +torlauncher.bootstrapWarning.connectrefused=поврзувањето е одбиено +torlauncher.bootstrapWarning.misc=разно +torlauncher.bootstrapWarning.resourcelimit=недоволни ресурси +torlauncher.bootstrapWarning.identity=идентитетско несогласување +torlauncher.bootstrapWarning.timeout=времето за поврзување истече +torlauncher.bootstrapWarning.noroute=нема рута до хост +torlauncher.bootstrapWarning.ioerror=грешка при читање/запишување +torlauncher.bootstrapWarning.pt_missing=недостасува pluggable transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Поврзувањето со серверот беше изгубено. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Не може да се поврзе со серверот. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Не може да се поврзе со проксито. + +torlauncher.copiedNLogMessagesShort=Копирани %S логови diff --git a/toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd new file mode 100644 index 000000000000..ba27c72842bb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; dibangunkan oleh"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", sebuah usaha tidak berasaskan keuntungan untuk melindungi kerahsiaan dan kebebasan atas talian anda."> + +<!ENTITY help.start "Mahu membantu?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Derma"> +<!ENTITY help.or "atau"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "sertai"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Ada Pertanyaan?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Bantulah Pembangunan Rangkaian Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Maklumat Pelesenan"> +<!ENTITY tor.TrademarkStatement "'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc."> diff --git a/toolkit/torbutton/chrome/locale/ms/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ms/aboutTBUpdate.dtd new file mode 100644 index 000000000000..30470b87e42f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Log Perubahan Pelayar Tor"> +<!ENTITY aboutTBUpdate.updated "Pelayar Tor telah dikemaskinikan."> +<!ENTITY aboutTBUpdate.linkPrefix "Untuk dapatkan maklumat terkini berkenaan keluaran ini."> +<!ENTITY aboutTBUpdate.linkLabel "lawati laman sesawang kami"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versi"> +<!ENTITY aboutTBUpdate.releaseDate "Tarikh Keluaran"> +<!ENTITY aboutTBUpdate.releaseNotes "Nota Keluaran"> diff --git a/toolkit/torbutton/chrome/locale/ms/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ms/aboutTor.dtd new file mode 100644 index 000000000000..e464089e0299 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Perihal Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Lihat Log Perubahan"> + +<!ENTITY aboutTor.ready.label "Menjelajahlah. Secara Persendirian."> +<!ENTITY aboutTor.ready2.label "Anda kini bersedia menikmati pengalaman melayari Internet secara persendirian."> +<!ENTITY aboutTor.failure.label "Sesuatu telah berlaku!"> +<!ENTITY aboutTor.failure2.label "Tor tidak berfungsi ke atas pelayar ini."> + +<!ENTITY aboutTor.search.label "Gelintar dengan DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Ada Pertanyaan?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Periksa Panduan Pelayar Tor kami »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Panduan Pelayar Tor"> + +<!ENTITY aboutTor.tor_mission.label "Projek Tor ialah organisasi bukan-berasaskan-keuntungan US 501(c)(3) yang melindungi hak-hak kemanusian dan kebebasan dengan mencipta dan menghasilkan teknologi keawanamaan dan kerahsiaan bebas dan bersumber-terbuka, menyokong ketersediaan dan penggunaan tanpa-had, dan melanjutkan kesefahaman saintifik dan popular mereka."> +<!ENTITY aboutTor.getInvolved.label "Sertai »"> + +<!ENTITY aboutTor.newsletter.tagline "Dapatkan berita terkini Tor yang terus ke dalam kotak mel anda."> +<!ENTITY aboutTor.newsletter.link_text "Daftar untuk dapatkan Berita Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor sepenuhnya percuma digunakan kerana adanya derma oleh individu seperti anda."> +<!ENTITY aboutTor.donationBanner.buttonA "Dermalah Sekarang"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "BERI DERMA SEKARANG"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/ms/brand.dtd b/toolkit/torbutton/chrome/locale/ms/brand.dtd new file mode 100644 index 000000000000..6bd3312f7a68 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Pelayar Tor"> +<!ENTITY brandShortName "Pelayar Tor"> +<!ENTITY brandFullName "Pelayar Tor"> +<!ENTITY vendorShortName "Projek Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Pelayar Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klik untuk muat pemalam sistem terpasang"> +<!ENTITY plugins.installed.enable "Benarkan pemalam"> +<!ENTITY plugins.installed.disable "Lumpuhkan pemalam"> +<!ENTITY plugins.installed.disable.tip "Klik untuk elak memuatkan pemalam sistem"> diff --git a/toolkit/torbutton/chrome/locale/ms/brand.properties b/toolkit/torbutton/chrome/locale/ms/brand.properties new file mode 100644 index 000000000000..2bde10f5886e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Pelayar Tor +brandShortName=Pelayar Tor +brandFullName=Pelayar Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Pelayar Tor +vendorShortName=Projek Tor + +homePageSingleStartMain=Firefox Start, halaman utama yang pantas dan dilengkapi dengan gelintar terbina-dalam. +homePageImport=Import halaman utama anda dari %S + +homePageMigrationPageTitle=Pemilihan Laman Utama +homePageMigrationDescription=Sila pilih halaman utama yang ingin digunakan: + +syncBrandShortName=Segerak diff --git a/toolkit/torbutton/chrome/locale/ms/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ms/branding/brand.ftl new file mode 100644 index 000000000000..058e7c9ac0e2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Pelayar Tor +-brand-short-name = Pelayar Tor +-brand-full-name = Pelayar Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Pelayar Tor +-vendor-short-name = Projek Tor +trademarkInfo = 'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc. diff --git a/toolkit/torbutton/chrome/locale/ms/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ms/browserOnboarding.properties new file mode 100644 index 000000000000..353fca11fa47 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Selamat Datang +onboarding.tour-tor-welcome.title=Anda sedia. +onboarding.tour-tor-welcome.description=Pelayar Tor menawatkan piawaian kerahsiaan dan keselamatan tertinggi ketika melayari sesawang. Anda kini dilindungi dari penjejakan, pemantauan, dan penapisan. Panduan pantas ini akan membantu anda bagaimana hendak menggunakannya. +onboarding.tour-tor-welcome.next-button=Pergi ke Privasi + +onboarding.tour-tor-privacy=Privasi +onboarding.tour-tor-privacy.title=Endah penjejak dan pengintip. +onboarding.tour-tor-privacy.description=Pelayar Tor mengasingkan kuki dan memadam sejarah pelayar anda selepas sesi tamat. Pengubahsuaian ini memastikan kerahsiaan dan keselamatan pelayar anda dilindungi. Klik 'Rangkaian Tor' untuk mengetahui bagaiaman kami melindungi anda pada tahap rangkaian. +onboarding.tour-tor-privacy.button=Pergi ke Rangkaian Tor + +onboarding.tour-tor-network=Rangkaian Tor +onboarding.tour-tor-network.title=Menjelajah dengan rangkaian tidak terpusat. +onboarding.tour-tor-network.description=Pelayar Tor menghubungkan anda dengan rangkaian Tor yang diurus oleh beribu-ribu para sukarelawan di seluruh dunia. Tidak seperti VPN, tiada kegagalan atau entiti terpusat yang anda kena percaya untuk menikmati internet secara persendirian. +onboarding.tour-tor-network.description-para2=BAHARU: Tetapan Rangkaian Tor, termasuklah keupayaan memohon jambatan-jambatan yang menyekat Tor, kini boleh ditemui melalui Keutamaan. +onboarding.tour-tor-network.action-button=Laras Tetapan Rangkaian Tor anda +onboarding.tour-tor-network.button=Pergi ke Paparan Litar + +onboarding.tour-tor-circuit-display=Paparan Litar +onboarding.tour-tor-circuit-display.title=Lihat laluan anda. +onboarding.tour-tor-circuit-display.description=Bagi setiap domain yang anda lawati, trafik anda disampaikan dan disulitkan dalam litar merentasi tiga geganti Tor mengelilingi dunia. Tiada laman sesawang mengetahui lokasi anda bersambung. Anda boleh pohon satu litar baharu dengan mengklik 'Litar Baharu untuk Laman ini' pada Paparan Litar kami. +onboarding.tour-tor-circuit-display.button=Lihat Laluan Saya +onboarding.tour-tor-circuit-display.next-button=Pergi ke Keselamatan + +onboarding.tour-tor-security=Keselamatan +onboarding.tour-tor-security.title=Pilih pengalaman yang dikehendaki. +onboarding.tour-tor-security.description=Kami juga menyediakan tetapan tambahan untuk menambahbaik keselamatan pelayar anda. Tetapan Keselamatan kami membolehkan anda sekat unsur-unsur yang boleh digunakan untuk menyerang komputer anda. Klik di bawah untuk melihat apakah perbezaan pilihan-pilihan tawarkan. +onboarding.tour-tor-security.description-suffix=Perhatian: Secara lalai, NoScript dan HTTPS Everywhere tidak di sertakan dalam palang alat, tetapi anda boleh suaikan palang alat untuk menambahnya. +onboarding.tour-tor-security-level.button=Lihat Tahap Keselamatan Anda +onboarding.tour-tor-security-level.next-button=Pergi ke Peuta Pengalaman + +onboarding.tour-tor-expect-differences=Petua Pengalaman. +onboarding.tour-tor-expect-differences.title=Jangkakan beberapa perbezaan. +onboarding.tour-tor-expect-differences.description=Dengan semua fitur keselamatan dan privasi yang disediakan oleh Tor, pengalaman anda ketika melayari internet menjadi sedikit berbeza. Menjadi lebih perlahan berbanding sebelum ini dan juga bergantung pada tahap keselamatan yang anda tetapkan, sesetengah unsur-unsur mungkin tidak berfungsi atau dimuatkan. Anda juga akan ditanya sama ada manusia dan bukan robot. +onboarding.tour-tor-expect-differences.button=Lihat FAQ +onboarding.tour-tor-expect-differences.next-button=Pergi ke Perkhidmatan Onion + +onboarding.tour-tor-onion-services=Perkhidmatan Onion +onboarding.tour-tor-onion-services.title=Mahu lebih dilindungi. +onboarding.tour-tor-onion-services.description=Perkhidmatan Onion merupakan laman-laman berakhir dengan .onion yang menyediakan perlindungan tambahan kepada para penerbit dan pelawat, termasuklah perlindungan terhadap tapisan. Perkhidmatan Onion membolehkan sesiapa sahaja menyediakan kandungan dan perkhidmatan secara awanama. Klik di bawah untuk melawati laman onion DuckDuckGo. +onboarding.tour-tor-onion-services.button=Lawati Onion +onboarding.tour-tor-onion-services.next-button=Selesai + +onboarding.overlay-icon-tooltip-updated2=Lihat yang terbaharu\ndi dalam %S +onboarding.tour-tor-update.prefix-new=Baharu +onboarding.tour-tor-update.prefix-updated=Dikemaskini + +onboarding.tour-tor-toolbar=Palang Alat +onboarding.tour-tor-toolbar-update-9.0.title=Selamat Tinggal Butang Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Kami mahu anda menikmati Tor yang sepenuhnya disepadukan dengan Pelayar Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Jadi, berbanding penggunaan butang onion, anda boleh melihat Litar Tor anda melalui [i] di dalam palang URL dan boleh memohon satu Identiti Baharu menggunakan butang palang alat atau menu [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Bagaimana hendak Meminta satu Identiti Baharu... +onboarding.tour-tor-toolbar-update-9.0.next-button=Pergi ke Rangkaian Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Seterusnya +onboarding.tor-circuit-display.done=Selesai +onboarding.tor-circuit-display.one-of-three=1 dari 3 +onboarding.tor-circuit-display.two-of-three=2 dari 3 +onboarding.tor-circuit-display.three-of-three=3 dari 3 + +onboarding.tor-circuit-display.intro.title=Bagaimanakah litar-litar ini berfungsi? +onboarding.tor-circuit-display.intro.msg=Litar-litar diperbuat daripada geganti-geganti terumpuk secara rawak, yang merupakan komputer-komputer di seluruh dunia yang dikonfigur khas untuk memajukan trafik Tor. Litar-litar membolehkan anda melayari Internet secara persendirian yang dihubungkan dengan perkhidmatan onion. + +onboarding.tor-circuit-display.diagram.title=Paparan Litar +onboarding.tor-circuit-display.diagram.msg=Rajah ini menunjukkan geganti-geganti yang terlibat dengan litar bagi laman sesawang ini. Untuk menghindari pemautan aktiviti merentasi laman-laman yang berbeza, setiap laman sesawang memperoleh satu litar yang berlainan. + +onboarding.tor-circuit-display.new-circuit.title=Anda perlukan satu litar baharu? +onboarding.tor-circuit-display.new-circuit.msg=Jika anda masih tidak berjaya bersambung dengan laman sesawang yang ingin dilawati atau laman tidak dimuatkan dengan betul, anda boleh guna butang ini untuk memuatkan semula laman tersebut dengan satu litar baharu. diff --git a/toolkit/torbutton/chrome/locale/ms/network-settings.dtd b/toolkit/torbutton/chrome/locale/ms/network-settings.dtd new file mode 100644 index 000000000000..4bed607cb8d4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tetapan Rangkaian Tor"> +<!ENTITY torsettings.wizard.title.default "Sambung denganTor"> +<!ENTITY torsettings.wizard.title.configure "Tetapan Rangkaian Tor"> +<!ENTITY torsettings.wizard.title.connecting "Menjalinkan Sambungan"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Bahasa Pelayar Tor"> +<!ENTITY torlauncher.localePicker.prompt "Sila pilih satu bahasa."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klik "Sambung" untuk bersambung dengan Tor."> +<!ENTITY torSettings.configurePrompt ".Klik "Konfigur" untuk laraskan tetapan rangkaian jika anda berada di negara yang melarang penggunaan Tor (seperti Mesir, China, Turki) atau jika anda menyambung dengan rangkaian persendirian yang memerlukan proksi"> +<!ENTITY torSettings.configure "Konfigur"> +<!ENTITY torSettings.connect "Sambung"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Menunggu Tor untuk dimulakan..."> +<!ENTITY torsettings.restartTor "Mula Semula Tor"> +<!ENTITY torsettings.reconfigTor "Konfigur Semula"> + +<!ENTITY torsettings.discardSettings.prompt "Anda telah mengkonfigur titi Tor atau telah memasukkan tetapan proksi setempat.  Untuk membuat sambungan terus dengan rangkaian Tor. tetapan ini mesti dibuang."> +<!ENTITY torsettings.discardSettings.proceed "Buang Tetapan dan Sambung"> + +<!ENTITY torsettings.optional "Pilihan"> + +<!ENTITY torsettings.useProxy.checkbox "Saya guna proksi untuk bersambung dengan Internet"> +<!ENTITY torsettings.useProxy.type "Jenis Proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "pilih sejenis proksi"> +<!ENTITY torsettings.useProxy.address "Alamat"> +<!ENTITY torsettings.useProxy.address.placeholder "Alamat IP atau nama hos"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Nama Pengguna"> +<!ENTITY torsettings.useProxy.password "Kata Laluan"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Komputer ini melalui tembok api yang hanya membolehkan sambungan ke port tertentu"> +<!ENTITY torsettings.firewall.allowedPorts "Port Dibenarkan"> +<!ENTITY torsettings.useBridges.checkbox "Tor dilarang penggunaannya di negara saya"> +<!ENTITY torsettings.useBridges.default "Pilih satu titi terbina-dalam"> +<!ENTITY torsettings.useBridges.default.placeholder "pilih satu titi"> +<!ENTITY torsettings.useBridges.bridgeDB "Pinta titi dari torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Masukkan aksara yang tertera dari imej"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Dapatkan satu cabaran baharu"> +<!ENTITY torsettings.useBridges.captchaSubmit "Serah"> +<!ENTITY torsettings.useBridges.custom "Sediakan satu titi yang saya tahu"> +<!ENTITY torsettings.useBridges.label "Masukkan maklumat titi dari sumber yang dipercayai."> +<!ENTITY torsettings.useBridges.placeholder "taip alamat:port (satu per baris)"> + +<!ENTITY torsettings.copyLog "Salin log Tor ke Papan Keratan"> + +<!ENTITY torsettings.proxyHelpTitle "Bantuan Proksi"> +<!ENTITY torsettings.proxyHelp1 "Satu proksi setempat diperlukan semasa menyambung dengan rangkaian syarikat, sekolah, atau universiti. Jika anda tidak pasti sama ada proksi diperlukan atau sebaliknya, lihat tetapan Internet dalam pelayar yang lain atau periksa tetapan rangkaian sistem anda."> + +<!ENTITY torsettings.bridgeHelpTitle "Bantuan Geganti Titi"> +<!ENTITY torsettings.bridgeHelp1 "Titi adalah geganti tidak tersenarai yang menjadikannya lebih sukar menyekat sambungan dengan Rangkaian Tor.  Setiap jenis titi menggunakan kaedah berbeza untuk menghindari sekatan.  Obf menjadikan trafik anda seakan-akan hingar rawak, dan paling teruk menjadikan trafik anda kelihatan mahu bersambung dengan perkhidmatan lain selain dari Tor."> +<!ENTITY torsettings.bridgeHelp2 "Oleh kerana terdapat beberapa negara menyekat Tor, sesetengah titi berfungsi di negara tertentu tetapi tidak pada negar lain.  Jika anda tidak pasti titi yang manakah sesuai untuk negara anda, sila lawati torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Tunggu sebentar sementara kami menjalinkan sambungan dengan rangkaian Tor.  Ia mengambil masa beberapa minit."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Sambungan"> +<!ENTITY torPreferences.torSettings "Tetapan Tor"> +<!ENTITY torPreferences.torSettingsDescription "Pelayar Tor menghala trafik anda ke dalam Rangkaian Tor, yang dioperasikan oleh beribu-ribu para sukarelawan di serata dunia." > +<!ENTITY torPreferences.learnMore "Ketahui lebih lanjut"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Luar Talian"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Connected"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Ketahui lebih lanjut"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Jambatan, ataupun Bridges"> +<!ENTITY torPreferences.bridgesDescription "Titi membantu anda capai Rangkaian Tor di kawasan yang mana Tor telah disekat. Bergantung pada kedudukan atau lokasi anda, titi ini mungkin berfungsi lebih baik berbanding titi-titi yang lain."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatic"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Buang"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Copied!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Pinta satu Titi..."> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Lanjutan"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Lihat Log..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Batal"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Pohon Titi"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Menghubungi BridgeDB. Tunggu Sebentar."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Selesaikan CAPTCHA untuk meminta satu titi."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Jawapan salah. Cuba sekali lagi."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Log Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "Connecting…"> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatic"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Try Again"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/ms/onboarding.properties b/toolkit/torbutton/chrome/locale/ms/onboarding.properties new file mode 100644 index 000000000000..727fb98dc46e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Baru menggunakan %S?\nMari mulakan. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S semuanya baru.\nLihat apa yang anda boleh lakukan! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Tutup +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Abai +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Selesai diff --git a/toolkit/torbutton/chrome/locale/ms/torbutton.dtd b/toolkit/torbutton/chrome/locale/ms/torbutton.dtd new file mode 100644 index 000000000000..5465cc855978 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Identiti Baharu"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Litar Tor baharu untuk Laman ini"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tetapan Rangkaian Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Periksa untuk dapatkan Kemaskini Pelayar Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Perlindungan Kuki..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klik untuk mengawalkan Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Tetapan Keselamatan Pelayar Tor"> +<!ENTITY torbutton.cookiedialog.title "Urus Perlindungan Kuki"> +<!ENTITY torbutton.cookiedialog.lockCol "Dilindungi"> +<!ENTITY torbutton.cookiedialog.domainCol "Hos"> +<!ENTITY torbutton.cookiedialog.nameCol "Nama"> +<!ENTITY torbutton.cookiedialog.pathCol "Laluan"> +<!ENTITY torbutton.cookiedialog.protectCookie "Lindung Kuki"> +<!ENTITY torbutton.cookiedialog.removeCookie "Buang Kuki"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Kuki Tidak Dilindungi"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Buang Semua Kecuali Dilindungi"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Lindungi Kuki Baharu"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Jangan Lindungi Kuki Baharu"> +<!ENTITY torbutton.prefs.sec_caption "Tahap Keselamatan"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Pelaras Keselamatan membolehkan anda lumpuhkan beberapa fitur pelayar yang mana ia menjadikan pelayar anda mudah terdedah dengan serangan penggodaman."> +<!ENTITY torbutton.prefs.sec_standard_label "Piawai"> +<!ENTITY torbutton.prefs.sec_standard_description "Semua Pelayar Tor dan fitur laman sesawang telah dibenarkan."> +<!ENTITY torbutton.prefs.sec_safer_label "Lebih Selamat"> +<!ENTITY torbutton.prefs.sec_safer_description "Fitur-fitur laman sesawang yang dilumpuhkan biasanya merbahaya, boleh menyebabkan beberapa laman kehilangan kefungsiannya."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Pada tetapan lebih selamat:"> +<!ENTITY torbutton.prefs.sec_safest_label "Paling Selamat"> +<!ENTITY torbutton.prefs.sec_safest_description "Hanya benarkan fitur-fitur laman sesawang yang diperlukan untuk laman-laman statik dan perkhidmatan asas. Perubahan ini dapat menjejaskan imej, media dan skrip."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Pada tetapan paling selamat:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Ketahui lebih lanjut"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "Skrip Java dilumpuhkan pada laman-laman bukan-HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "Skrip Java dilumpuhkan secara lalai untuk semua laman."> +<!ENTITY torbutton.prefs.sec_limit_typography "Sesetengah fon dan simbol matematik dilumpuhkan."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Sesetengah fon, ikon, simbol matematik, dan imej dilumpuhkan."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio dan video (media HTML5) dan WebGL adalah klik-untuk-dimainkan."> +<!ENTITY torbutton.prefs.sec_custom_warning "Suai"> +<!ENTITY torbutton.prefs.sec_overview "Lumpuhkan beberapa fitur sesawang yang boleh digunakan untuk menyerang keselamatan dan keawanamaan anda."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Tahap Keselamatan: Piawai"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Tahap Keselamatan : Lebih Selamat"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Tahap Keselamatan : Paling Selamat"> +<!ENTITY torbutton.prefs.sec_custom_summary "Keutamaan pelayar suai anda telah menyebabkan tetapan keselamatan luar jangkaan. Atas sebab keselamatan dan kerahsiaan, kami sarankan anda memilih salah satu daripada tahap keselamatan lalai yang ada."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Pulih Lalai"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Tetapan Keselamatan Lanjutan..."> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Litar Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Lihat baharu untuk Laman ini"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Buka bisikan pengesahihan klien perkhidmatan onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Ingat kunci ini"> diff --git a/toolkit/torbutton/chrome/locale/ms/torbutton.properties b/toolkit/torbutton/chrome/locale/ms/torbutton.properties new file mode 100644 index 000000000000..15f4d3308b54 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP tidak diketahui +torbutton.circuit_display.onion_site = Laman Onion +torbutton.circuit_display.this_browser = Pelayar ini +torbutton.circuit_display.relay = Geganti +torbutton.circuit_display.tor_bridge = Titi +torbutton.circuit_display.unknown_country = Negara tidak diketahui +torbutton.circuit_display.guard = Jaga +torbutton.circuit_display.guard_note = Nod [Jaga] anda tidak berubah. +torbutton.circuit_display.learn_more = Ketahui lebih lanjut +torbutton.circuit_display.click_to_copy = Click to Copy +torbutton.circuit_display.copied = Copied! +torbutton.content_sizer.margin_tooltip = Pelayar Tor menambah jidar ini untuk memastikan tinggi dan lebar tetingkap anda kurang dikenali, dan seterusnya mengurangkan keupayaan orang lain menjejak anda ketika berada diatas-talian. +extensions.torbutton@torproject.org.description = Torbutton menyediakan butang bagi mengkonfigur tetapan Tor secara pantas dan mudah membersihkan data pelayaran persendirian anda. +torbutton.popup.external.title = Muat turun jenis fail luar? +torbutton.popup.external.app = Pelayar Tor tidak dapat paparkan fail ini. Anda perlu membukanya dengan aplikasi lain.\n\n +torbutton.popup.external.note = Sesetengah jenis fail boleh menyebabkan aplikasi menyambung dengan Internet tanpa menggunakan Tor.\n\n +torbutton.popup.external.suggest = Sebagai langkah berjaga-jaga, anda sepatutnya hanya membuka fail dimuat turun ketika berada diluar talian, atau guna CD Langsung Tor seperti Tails.\n +torbutton.popup.launch = Muat turun fail +torbutton.popup.cancel = Batal +torbutton.popup.dontask = Muat turun fail secara automatik mulai sekarang +torbutton.popup.no_newnym = Torbutton tidak dapat memberikan anda identiti baharu secara selamat. Ia tidak mempunyai capaian ke Port Kawalan Tor.\n\nAnda pasti masih menjalankan Berkas Pelayar Tor? +torbutton.security_settings.menu.title = Tetapan Keselamatan +torbutton.title.prompt_torbrowser = Maklumat Torbutton Penting +torbutton.popup.prompt_torbrowser = Torbutton berfungsi secara berlainan sekarang: anda tidak boleh mematikannya lagi.\n\nKami membuat perubahan ini kerana ia tidak selamat menggunakan Torbutton dalam pelayar yang juga digunakan untuk pelayaran bukan-Tor. Terdapat terlalu banyak pepijat yang masih belum dibaiki.\n\nJika anda mahu menggunakan Firefox seperti biasa, anda patut menyahpasang Torbutton dan muat turun Berkas Pelayar Tor. Sifat kerahsiaan Pelayar Tor adalah lebih baik berbandin [...] +torbutton.popup.short_torbrowser = Maklumat Torbutton Penting! \n\nTorbutton kini sentiasa dibenarkan. \n\nKlik pada Torbutton untuk maklumat lanjut. + +torbutton.popup.confirm_plugins = Pemalam seperti Flash boleh mengganggu privasi dan keawanamaan anda.\n\nIa juga boleh melepasi Tor dan mendedahkan lokasi dan alamat IP semasa anda.\n\nAnda pasti anda mahu benarkan pemalam tersebut?\n\n +torbutton.popup.never_ask_again = Jangan tanya saya lagi +torbutton.popup.confirm_newnym = Pelayar Tor akan menutup semua tetingkap dan tab. Semua sesi laman sesawang akan hilang.\n\nMulakan semula Pelayar Tor sekarang untuk tetapkan semula identiti anda?\n\n + +torbutton.maximize_warning = Memaksimumkan Pelayar Tor dapat membenarkan laman sesawang tentukan saiz monitor anda, yang mana boleh digunakan untuk menjejak anda. Kami sarankan anda biarkan tetingkap Pelayar Tor dalam saiz lalai asalnya. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Laman sesawang (%S) ini cuba mengekstrak data imej kanvas HTML5, yang boleh digunakan untuk mengecam komputer anda secara unik.\n\nPatutkah Pelayar Tor membenarkan laman sesawang ini mengekstrak data imej kanvas HTML5? +canvas.notNow=Bukan Sekarang +canvas.notNowAccessKey=N +canvas.allow=Benarkan pada masa hadapan +canvas.allowAccessKey=A +canvas.never=Tidak sesekali untuk laman ini (disarankan) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Masalah Profil %S +profileReadOnly=Anda tidak boleh jalankan %S dari sistem fail baca-sahaja. Sila salin %S ke lokasi lain sebelum cuba gunakannya. +profileReadOnlyMac=Anda tidak boleh jalankan %S dari sistem fail baca-sahaja. Sila salin %S ke folder Desktop atau Aplikasi anda sebelum cuba gunakannya. +profileAccessDenied=%S tidak mempunyai keizinan untuk mencapai profil. Sila laras keizinan sistem fail anda dan cuba sekali lagi. +profileMigrationFailed=Pemindahan profil sedia anda telah gagal.\nTetapan baharu akan digunakan. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Memuat turun %S kemaskini + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Sambungan Tersulit (Perkhidmatan Onion, %1$S, %2$S bit kunci, %3$S) +pageInfo_OnionEncryption=Sambungan Tersulit (Perkhidmatan Onion) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Ketahui lebih lanjut +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Rangkaian +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem Loading Onionsite +onionServices.descNotFound.header=Onionsite Not Found +onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem Loading Onionsite +onionServices.descInvalid.header=Onionsite Cannot Be Reached +onionServices.descInvalid=The onionsite is unreachable due an internal error. +onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem Loading Onionsite +onionServices.introFailed.header=Onionsite Has Disconnected +onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem Loading Onionsite +onionServices.rendezvousFailed.header=Unable to Connect to Onionsite +onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later. +onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Authorization Required +onionServices.clientAuthMissing.header=Onionsite Requires Authentication +onionServices.clientAuthMissing=Access to the onionsite requires a key but none was provided. +onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Authorization Failed +onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed +onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator. +onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem Loading Onionsite +onionServices.badAddress.header=Invalid Onionsite Address +onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly. +onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem Loading Onionsite +onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out +onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection. +onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S is requesting that you authenticate. +onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service +onionServices.authPrompt.done=Selesai +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters) +onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key +onionServices.authPreferences.header=Onion Services Authentication +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them. +onionServices.authPreferences.savedKeys=Saved Keys… +onionServices.authPreferences.dialogTitle=Onion Service Keys +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Kunci +onionServices.authPreferences.remove=Buang +onionServices.authPreferences.removeAll=Remove All +onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor +onionServices.authPreferences.failedToRemoveKey=Unable to remove key +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Got it +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Always Prioritize Onions +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Bukan Sekarang +onionLocation.notNowAccessKey=n +onionLocation.description=There's a more private and secure version of this site available over the Tor network via onion services. Onion services help website publishers and their visitors defeat surveillance and censorship. +onionLocation.tryThis=Try Onion Services +onionLocation.onionAvailable=.onion available +onionLocation.learnMore=Learn more… +onionLocation.always=Always +onionLocation.askEverytime=Ask every time +onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known. +onionLocation.onionServicesTitle=Perkhidmatan Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Ketahui lebih lanjut +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Pengaktifan +rulesets.disabled=Disabled +# Ruleset details/edit ruleset +rulesets.edit=Edit +rulesets.name=Nama +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Simpan +rulesets.cancel=Batal diff --git a/toolkit/torbutton/chrome/locale/ms/torlauncher.properties b/toolkit/torbutton/chrome/locale/ms/torlauncher.properties new file mode 100644 index 000000000000..b24d154cd4cc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ms/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Pelancar Tor + +torlauncher.tor_exited_during_startup=Tor tertutup ketika permulaan. Ia berkemungkinan dari ralat dalam fail torrc, pepijat dalam Tor atau berpunca dari lain-lain program dalam sistem anda, atau perkakasan bermasalah. Sehinggalah anda membaiki masalah tersebut dan mulakan semula Tor, Pelayar Tor tidak dapat dimulakan. +torlauncher.tor_exited=Tor keluar secara tidak dijangka. Ia berkemungkinan dari pepijat yang wujud di dalam Tor, berpunca dari lain-lain program dalam sistem anda, atau perkakasan bermasalah. Sehinggalah anda mulakan semula Tor, Pelayar Tor tidak dapat mencapai mana-mana laman sesawang. Jika masalah masih berlanjutan, sila hantar satu salinan Log Tor kepada pasukan sokongan. +torlauncher.tor_exited2=Memulakan semula Tor tidak akan menutup tab pelayar anda. +torlauncher.tor_controlconn_failed=Tidak dapat menyambung ke port kawalan Tor. +torlauncher.tor_failed_to_start=Tor gagal untuk bermula. +torlauncher.tor_control_failed=Gagal mengambil alih Tor. +torlauncher.tor_bootstrap_failed=Tor gagal untuk mewujudkan sambungan rangkaian Tor. +torlauncher.tor_bootstrap_failed_details=%1$S gagal (%2$S). + +torlauncher.unable_to_start_tor=Tidak dapat memulakan Tor.\n\n%S +torlauncher.tor_missing=Tor executable hilang. +torlauncher.torrc_missing=Fail torrc hilang dan tidak dapat dicipta. +torlauncher.datadir_missing=Direktori data Tor tidak wujud dan tidak dapat dicipta. +torlauncher.onionauthdir_missing=Direktori pengesahihan onion Tor tidak wujud atau tidak dapat diciptakan. +torlauncher.password_hash_missing=Gagal untuk mendapatkan kata laluan hashes. + +torlauncher.failed_to_get_settings=Gagal mendapatkan tetapan Tor.\n\n%S +torlauncher.failed_to_save_settings=Gagal menyimpan tetapan Tor.\n\n%S +torlauncher.ensure_tor_is_running=Sila pastikan bahawa Tor telah berjalan. + +torlauncher.error_proxy_addr_missing=Anda mesti nyatakan kedua-dua alamat IP atau nama hos dan nombor port bagi mengkonfigur Tor untuk menggunakan proksi yang dapat mencapai Internet. +torlauncher.error_proxy_type_missing=Anda mesti pilih jenis proksi. +torlauncher.error_bridges_missing=Anda mesti nyatakan satu atau lebih titi. +torlauncher.error_default_bridges_type_missing=Anda mesti pilih jenis angkutan untuk titi yang disediakan. +torlauncher.error_bridgedb_bridges_missing=Sila pinta satu titi. +torlauncher.error_bridge_bad_default_type=Tiada titi disediakan yang mempunyai jenis angkutan %S tersedia. Sila laras tetapan anda. + +torlauncher.bridge_suffix.meek-amazon=(berfungsi di China) +torlauncher.bridge_suffix.meek-azure=(berfungsi di China) + +torlauncher.request_a_bridge=Pinta satu Titi... +torlauncher.request_a_new_bridge=Pinta satu Titi Baharu... +torlauncher.contacting_bridgedb=Menghubungi BridgeDB. Tunggu sebentar. +torlauncher.captcha_prompt=Selesaikan CAPTCHA untuk meminta satu titi. +torlauncher.bad_captcha_solution=Jawapan salah. Cuba sekali lagi. +torlauncher.unable_to_get_bridge=Gagal memperoleh satu titi dari BridgeDB.\n\n%S +torlauncher.no_meek=Pelayar ini tidak dikonfigur untuk meek, yang mana perlu dapatkan titi terlebih dahulu. +torlauncher.no_bridges_available=Tiada titi tersedia buat masa ini. Mohon maaf. + +torlauncher.connect=Sambung +torlauncher.restart_tor=Mula Semula Tor +torlauncher.quit=Henti +torlauncher.quit_win=Keluar +torlauncher.done=Selesai + +torlauncher.forAssistance=Untuk bantuan, hubungi %S +torlauncher.forAssistance2=Untuk dapatkan bantuan, lawati %S + +torlauncher.copiedNLogMessages=Salin selesai. %S mesej log Tor sedia ditampal ke dalam penyunting teks atau mesej emel. + +torlauncher.bootstrapStatus.starting=Memulakan +torlauncher.bootstrapStatus.conn_pt=Menyambung dengan titi +torlauncher.bootstrapStatus.conn_done_pt=Bersambung dengan titi +torlauncher.bootstrapStatus.conn_proxy=Menyambung dengan proksi +torlauncher.bootstrapStatus.conn_done_proxy=Bersambung dengan proksi +torlauncher.bootstrapStatus.conn=Menyambung dengan satu geganti Tor +torlauncher.bootstrapStatus.conn_done=Bersambung dengan satu geganti Tor +torlauncher.bootstrapStatus.handshake=Berunding dengan satu geganti Tor +torlauncher.bootstrapStatus.handshake_done=Selesai berunding dengan satu geganti Tor +torlauncher.bootstrapStatus.onehop_create=Menjalinkan sambungan direktori tersulit +torlauncher.bootstrapStatus.requesting_status=Memperoleh status rangkaian +torlauncher.bootstrapStatus.loading_status=Memuatkan status rangkaian +torlauncher.bootstrapStatus.loading_keys=Memuatkan sijil kuasa +torlauncher.bootstrapStatus.requesting_descriptors=Meminta maklumat geganti +torlauncher.bootstrapStatus.loading_descriptors=Memuatkan maklumat geganti +torlauncher.bootstrapStatus.enough_dirinfo=Selesai memuatkan maklumat geganti +torlauncher.bootstrapStatus.ap_conn_pt=Membina litar: Menyambung dengan titi +torlauncher.bootstrapStatus.ap_conn_done_pt=Membina litar: Bersambung dengan Titi +torlauncher.bootstrapStatus.ap_conn_proxy=Membina litar: Menyambung dengan proksi +torlauncher.bootstrapStatus.ap_conn_done_proxy=Membina litar: Bersambung dengan proksi +torlauncher.bootstrapStatus.ap_conn=Membina litar: Menyambung dengan satu geganti Tor +torlauncher.bootstrapStatus.ap_conn_done=Membina litar: Bersambung dengan geganti Tor +torlauncher.bootstrapStatus.ap_handshake=Membina litar: Berunding dengan satu geganti Tor +torlauncher.bootstrapStatus.ap_handshake_done=Membina litar: Selesai berunding dengan satu geganti Tor +torlauncher.bootstrapStatus.circuit_create=Membina litar: Menjalinkan satu litar Tor +torlauncher.bootstrapStatus.done=Bersambung dengan rangkaian Tor! + +torlauncher.bootstrapWarning.done=selesai +torlauncher.bootstrapWarning.connectrefused=sambungan dinafikan +torlauncher.bootstrapWarning.misc=pelbagai +torlauncher.bootstrapWarning.resourcelimit=sumber tidak mencukupi +torlauncher.bootstrapWarning.identity=identiti tidak sepadan +torlauncher.bootstrapWarning.timeout=sambungan tamat masa +torlauncher.bootstrapWarning.noroute=tiada hala dihoskan +torlauncher.bootstrapWarning.ioerror=ralat baca/tulis +torlauncher.bootstrapWarning.pt_missing=angkutan boleh palam hilang + +torlauncher.nsresult.NS_ERROR_NET_RESET=Sambungan dengan pelayan telah terputus. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Tidak dapat bersambung dengan pelayan. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Tidak dapat bersambung dengan proksi. + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/my/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/my/aboutDialog.dtd new file mode 100644 index 000000000000..74eef2f4e44e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; ကို ဖန်တီးသူသည် "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end "၊ ၎င်းသည် အွန်လိုင်းပေါ်တွင် သင်၏ ပုဂ္ဂိုလ်လုံခြုံရေး နှင့် လွတ်လပ်ခွင့်ကို ခုခံကာကွယ်ရန် လုပ်ဆောင်သော အကျိုးအမြတ်မယူသော အဖွဲ့အစည်းတစ်ခုဖြစ်သည်။"> + +<!ENTITY help.start "ကူညီချင်ပါသလား?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "လှူဒါန်းမယ်"> +<!ENTITY help.or "သို့မဟုတ်"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "ပါ၀င်လုပ်ဆောင်မယ်"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "မေးစရာများရှိဦးမလား?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Tor ကွန်ယက်ကို ကြီးထွားရန်ကူညီပါ!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "လိုင်စင်အကြောင်း သိကောင်းစရာ"> +<!ENTITY tor.TrademarkStatement ""Tor" နှင့် "Onion Logo" (ကြက်သွန်နီအမှတ်တံဆိပ်သင်္ကေတ) သည် Tor Project, Inc. ၏မှတ်ပုံတင်ထားသောကုန်အမှတ်တံဆိပ်ဖြစ်သည်။"> diff --git a/toolkit/torbutton/chrome/locale/my/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/my/aboutTBUpdate.dtd new file mode 100644 index 000000000000..3878e860cf7a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor ဘရောင်ဇာ ChangeLog (ပြောင်းလဲမှုမှတ်တမ်း)"> +<!ENTITY aboutTBUpdate.updated "Tor ဘရောင်ဇာကို အပ်ဒိတ်ပြုလုပ်ထားသည်။"> +<!ENTITY aboutTBUpdate.linkPrefix "ဤထုတ်လွှတ်မှုနှင့် ပတ်သက်၍ နောက်ဆုံးပေါ် သတင်းအချက်အလက်များအတွက်"> +<!ENTITY aboutTBUpdate.linkLabel "ကျွန်ုပ်တို့၏ဝက်ဘ်ဆိုက်သို့ ဝင်ရောက်ကြည့်ရှုပါ"> +<!ENTITY aboutTBUpdate.linkSuffix "။"> +<!ENTITY aboutTBUpdate.version "ဗားရှင်း"> +<!ENTITY aboutTBUpdate.releaseDate "ဖြန့်ချီသည့်ရက်စွဲ"> +<!ENTITY aboutTBUpdate.releaseNotes "ဖြန့်ချီမှတ်ချက်များ"> diff --git a/toolkit/torbutton/chrome/locale/my/aboutTor.dtd b/toolkit/torbutton/chrome/locale/my/aboutTor.dtd new file mode 100644 index 000000000000..d098574c8f20 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tor အကြောင်း"> + +<!ENTITY aboutTor.viewChangelog.label "ပြောင်းလဲမှတ်တမ်း ကြည့်မယ်"> + +<!ENTITY aboutTor.ready.label "လုံခြုံစွာ သုံးစွဲပါ။"> +<!ENTITY aboutTor.ready2.label "သင်သည် အင်တာနက်ကို အလုံခြုံဆုံးစွာ သုံးစွဲဖို့ အဆင်သင့်ဖြစ်ပါပြီ။"> +<!ENTITY aboutTor.failure.label "တစ်ခုခု မှားယွင်းသွားပါသည်!"> +<!ENTITY aboutTor.failure2.label "ဤ ဘရောင်ဇာတွင် Tor အလုပ်မလုပ်ပါ။"> + +<!ENTITY aboutTor.search.label "DuckDuckGo ဖြင့် ရှာဖွေမယ်"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "မေးစရာများ ရှိဦးမလား?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "ကျွန်ုပ်တို့ Tor ဘရောင်ဇာ လက်စွဲစာအုပ်အား ကြည့်ကြည့်ပါ »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "လ"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor ဘရောင်ဇာ လက်စွဲစာအုပ်"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project သည် လူ့အခွင့်အရေးနှင့် လွတ်လပ်ရေးခွင့်များကို တိုးတက်စေရန် အမေရိကန် အကျိုးအမြတ်မယူသော ၅၀၁(ဂ)(၃) အဖွဲ့အစည်းတစ်ခု ဖြစ်ပါသည်။ လွတ်လပ်၍ အမည်ဝှက်ကာ အများသုံးနိုင်ပြီး ပုဂ္ဂိုလ်လုံခြုံရေးစောင့်ရှောက်သော နည်းပညာများ အသုံးပြုပါသည်။ ၎င်းနည်းပညာများကို အကန့်အသတ်မရှိစွာ သုံးစွဲနိုင်ခြင်းနှင့် သိပ္ပံဆိုင်ရာနှင့် ပြည်သူများနားလည်နိုင်စေရန် ပံ့ ပိုးထောက်ပံ့ပါသည်။"> +<!ENTITY aboutTor.getInvolved.label "ပါဝင်ပါ »"> + +<!ENTITY aboutTor.newsletter.tagline "Tor မှ နောက်ဆုံးသတင်းများကို သင့် စာဝင်ပုံးထဲတန်း ရယူလိုက်ပါ။"> +<!ENTITY aboutTor.newsletter.link_text "Tor News သတင်းများအတွက် အမည် စာရင်းသွင်းလိုက်ပါ။"> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor သည် သင့်လို သုံးသူများမှ လှူဒါန်းငွေကြောင့် အခမဲ့သုံးနိုင်ပါသည်။"> +<!ENTITY aboutTor.donationBanner.buttonA "အခုဘဲ လှူမယ်"> + +<!ENTITY aboutTor.alpha.ready.label "စစ်ဆေးခြင်း,နှံ့နှံ့စပ်စပ်"> +<!ENTITY aboutTor.alpha.ready2.label "သင်ဟာ ကမ္ဘာပေါ်မှာ သီးသန့်အဖြစ်ဆုံး ရှာဖွေရေးအတွေ့အကြုံရရှိဖို့ စမ်းသပ်ရန်အဆင်သင့် ဖြစ်နေပါပြီ"> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha ဟာ ထုတ်လုပ်မှုမတိုင်ခင် ၎င်းတို့၏အင်္ဂါရပ်အသစ်များကို နမူနာကြည့်ရန်အသုံးပြုနိုင်ဖို့,လုပ်ဆောင်ချက်များကိုစမ်းသပ်ဖို့ နဲ့ အကြံပြုချက်များပေးနိုင်ဖို့အတွက် ပြုလုပ်ထားသော Tor Browser ရဲ့ မတည်ငြိမ်သောဗားရှင်းတစ်ခုဖြစ်ပါသည်။"> +<!ENTITY aboutTor.alpha.bannerLink "Tor ဖိုရမ်ပေါ်မှာ bug ကို အစီရင်ခံပါ"> + +<!ENTITY aboutTor.nightly.ready.label "စစ်ဆေးခြင်း,နှံ့နှံ့စပ်စပ်"> +<!ENTITY aboutTor.nightly.ready2.label "သင်ဟာ ကမ္ဘာပေါ်မှာ သီးသန့်အဖြစ်ဆုံး ရှာဖွေရေးအတွေ့အကြုံရရှိဖို့ စမ်းသပ်ရန်အဆင်သင့် ဖြစ်နေပါပြီ"> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly ဟာ ထုတ်လုပ်မှုမတိုင်ခင် ၎င်းတို့၏အင်္ဂါရပ်အသစ်များကို နမူနာကြည့်ရန်အသုံးပြုနိုင်ဖို့,လုပ်ဆောင်ချက်များကိုစမ်းသပ်ဖို့ နဲ့ အကြံပြုချက်များပေးနိုင်ဖို့အတွက် ပြုလုပ်ထားသော Tor Browser ရဲ့ မတည်ငြိမ်သောဗားရှင်းတစ်ခုဖြစ်ပါသည်။"> +<!ENTITY aboutTor.nightly.bannerLink "Tor ဖိုရမ်ပေါ်မှာ bug ကို အစီရင်ခံပါ"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ယခု လှူရန်"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "သင့်လှူဒါန်းမှုကို Tor ၏ မိတ်ဆွေများမှ တွဲပေးပါမည်၊ $100,000 အထိ လှူနိုင်ပါသည်။"> diff --git a/toolkit/torbutton/chrome/locale/my/brand.dtd b/toolkit/torbutton/chrome/locale/my/brand.dtd new file mode 100644 index 000000000000..6df03e49e41c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor ဘရောင်ဇာ"> +<!ENTITY brandShortName "Tor ဘရောင်ဇာ"> +<!ENTITY brandFullName "Tor ဘရောင်ဇာ"> +<!ENTITY vendorShortName "Tor စီမံကိန်း ပရောဂျက်"> +<!ENTITY trademarkInfo.part1 ""Tor" နှင့် "Onion Logo" (ကြက်သွန်နီအမှတ်တံဆိပ်သင်္ကေတ) သည် Tor Project, Inc. ၏ မှတ်ပုံတင်ထားသော ကုန်အမှတ်တံဆိပ်ဖြစ်သည်။"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor ဘရောင်ဇာ"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "တင်သွင်းထားသော ထပ်တိုးစနစ်ဆော့ဝဲများကို တင်သုံးရန် နှိပ်ပါ"> +<!ENTITY plugins.installed.enable "ထပ်တိုး ဆော့ဝဲများ ဖွင့်မယ်"> +<!ENTITY plugins.installed.disable "ထပ်တိုး ဆော့ဝဲများ ပိတ်မယ်"> +<!ENTITY plugins.installed.disable.tip "ထပ်တိုးစနစ်ဆော့ဝဲများကို တင်သုံးခြင်းမှ ရှောင်ကြဥ်ရန် နှိပ်ပါ"> diff --git a/toolkit/torbutton/chrome/locale/my/brand.properties b/toolkit/torbutton/chrome/locale/my/brand.properties new file mode 100644 index 000000000000..385dab961cf2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor ဘရောင်ဇာ +brandShortName=Tor ဘရောင်ဇာ +brandFullName=Tor ဘရောင်ဇာ +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor ဘရောင်ဇာ +vendorShortName=Tor စီမံကိန်း ပရောဂျက် + +homePageSingleStartMain=Firefox Start၊ ရှာဖွေရန် ကိရိယာသွင်းထားပြီး လျင်မြင်သော ပင်မစာမျက်နှာ +homePageImport=%S ထံမှ သင့် ပင်မစာမျက်နှာ တင်သွင်းပါ + +homePageMigrationPageTitle=ပင်မ စာမျက်နှာ ရွေးချယ်မှု +homePageMigrationDescription=သင်သုံးလိုသော ပင်မစာမျက်နှာကို ရွေးပေးပါ - + +syncBrandShortName=တိုက်ဆိုင်ညှိယူမယ် diff --git a/toolkit/torbutton/chrome/locale/my/branding/brand.ftl b/toolkit/torbutton/chrome/locale/my/branding/brand.ftl new file mode 100644 index 000000000000..d859549c37a7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor ဘရောင်ဇာ +-brand-short-name = Tor ဘရောင်ဇာ +-brand-full-name = Tor ဘရောင်ဇာ +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor ဘရောင်ဇာ +-vendor-short-name = Tor စီမံကိန်း ပရောဂျက် +trademarkInfo = 'Tor' နှင့် 'Onion Logo' (ကြက်သွန်နီအမှတ်တံဆိပ်သင်္ကေတ) သည် Tor Project, Inc. ၏ မှတ်ပုံတင်ထားသော ကုန်အမှတ်တံဆိပ်ဖြစ်သည်။ diff --git a/toolkit/torbutton/chrome/locale/my/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/my/browserOnboarding.properties new file mode 100644 index 000000000000..3da938f5ef42 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=ကြိုဆိုပါသည် +onboarding.tour-tor-welcome.title=သင် အဆင်သင့်ဖြစ်ပါပြီ။ +onboarding.tour-tor-welcome.description=Tor ဘရောင်ဇာသည် အင်တာနက်သုံးစွဲစဥ် အမြင့်ဆုံး ပုဂ္ဂိုလ်လုံခြုံမှုအား ပေးပို့ပါသည်။ သင့် အွန်လိုင်းခြေရာလိုက်ခံရခြင်း၊ စောင့်ကြည့်ခံရခြင်း နှင့် ဆင်ဆာခံရခြင်းတို့မှ ယခုကာကွယ်ထားပေးပါသည်။ ဤ လမ်းညွှန်တိုသည် သင့်အားမည်ကဲ့သို့ ကာကွယ်ပေးသည်ကို ရှင်းပြပါမည်။ +onboarding.tour-tor-welcome.next-button=ပုဂ္ဂိုလ်လုံခြုံရေး သို့သွားမယ် + +onboarding.tour-tor-privacy=ပုဂ္ဂိုလ်လုံခြုံရေး +onboarding.tour-tor-privacy.title=သင့် အွန်လိုင်းခြေရာလိုက်သူများနှင့် ကလောင်များကို ပယ်ချပါ။ +onboarding.tour-tor-privacy.description=Tor ဘရောင်ဇာသည် ကွတ်ကီးများကို သီးခြားစွာထား၍ သင့် ဘရောင်ဇာ ရာဇဝင်အား သင်အသုံးပြုပြီးလျှင် ဖျက်သိမ်းပေးပါသည်။ ဤလုပ်ဆောင်မှုများသည် ဘရောင်ဇာအတွင်းရှိ သင့်ပုဂ္ဂိုလ်လုံခြုံမှုကို စောင့်ရှောက်ပေးပါသည်။ "Tor ကွန်ယက်" ကိုနှိပ်၍ ကျွန်ုပ်တို့မှ ကွန်ယက်အဆင့်တွင် သင့်ကိုမည်ကဲ့သို့ ကာကွယ်မှုပေးသည်ကို လေ့လာပါ။ +onboarding.tour-tor-privacy.button=Tor ကွန်ယက် သို့သွားမယ် + +onboarding.tour-tor-network=Tor ကွန်ယက် +onboarding.tour-tor-network.title=ဗဟိုထိန်းချုပ်မှု မရှိသော ကွန်ယက်ပေါ် တက်လိုက်ပါ။ +onboarding.tour-tor-network.description=ကမ္ဘာအနှံ့ရှိ လုပ်အားပေးသူများမှ လည်ပတ်ပေးသော Tor ကွန်ယက်ကို သင်နှင့် Tor ဘရောင်ဇာမှ ချိတ်ပေးပါသည်။ အင်တာနက်ကို လုံခြုံစွာခံစားနိုင်ရန်အတွက် VPN နှင့်မတူဘဲ ပျက်ကွက်မှုမရှိပါ သို့မဟုတ် ဗဟိုချုပ်အရာတစ်ခုအား ယုံကြည်ရန်မလိုပါ။ +onboarding.tour-tor-network.description-para2=အသစ် - Tor ကွန်ယက် အပြင်အဆင်များကို ချိန်ညှိချက်များ (Preferences) ဆိုသည့် ကဏ္ဍတွင် တွေ့ရှိနိုင်ပါသည်။ (အချင်းချင်းချိတ်ဆက်၍ ချွေတာခြင်းလုပ်စဥ်များ (bridges) တောင်းဆိုနိုင်ခြင်း အပါအဝင်) +onboarding.tour-tor-network.action-button=သင့် Tor ကွန်ယက် အပြင်အဆင်များ ချိန်ညှိပါ +onboarding.tour-tor-network.button=လမ်းကြောင်းစဥ် သို့သွားမယ် + +onboarding.tour-tor-circuit-display=လမ်းကြောင်းစဥ် +onboarding.tour-tor-circuit-display.title=သင့်လမ်းကြောင်းကို ကြည့်ပါ။ +onboarding.tour-tor-circuit-display.description=သင်ဝင်ရောက်ကြည့်ရှုသည့် ဒိုမိန်းတစ်ခုချင်းစီအတွက် သင့်အသွားအလာများကို လက်ဆင့်ကမ်း၍ ကမ္ဘာအနှံ့ရှိ Tor လမ်းကြောင်း ၃ ခုပေါ်၌ ကုဒ်ဖြင့်ပြောင်းလဲဝှက်ပါသည်။ သင်မည်သည့်နေရာမှ ဆက်သွယ်နေသည်ကို မည်သည့်ဝဘ်ဆိုဒ်ကမျှ မသိပါ။ ကျွန်ုပ်တို့၏ လမ်းကြောင်းစဥ်ရှိ "ဤဆိုဒ်အတွက် လမ်းကြောင်းအသစ်" ကို နှိပ်၍ လမ်းကြောင်းအသစ်ကို သင်တောင်းဆိုနိုင်ပါသည်။ +onboarding.tour-tor-circuit-display.button=ကျွန်ုပ်၏ လမ်းကြောင်းကြည့်မယ် +onboarding.tour-tor-circuit-display.next-button=လုံခြုံရေး သို့သွားမယ် + +onboarding.tour-tor-security=လုံခြုံရေး +onboarding.tour-tor-security.title=သင့် အတွေ့အကြုံကို ရွေးပါ။ +onboarding.tour-tor-security.description=ကျွန်ုပ်တို့သည် သင့် ဘရောင်ဇာလုံခြုံမှုကို ပိုမိုလုံခြုံစေရန် သင့်အား အပိုအပြင်အဆင်များရှိပါသည်။ ကျွန်ုပ်တို့၏ လုံခြုံရေး အပြင်အဆင်များသည် သင့်ကွန်ပျူတာကို တိုက်ခိုက်နိုင်သော အရာများကို ပိတ်ပယ်နိုင်ပါသည်။ အောက်တွင် နှိပ်၍ မည်သို့ ပြင်ဆင်နိုင်ရန် လေ့လာပါ။ +onboarding.tour-tor-security.description-suffix=မှတ်ချက် - NoScript နှင့် HTTPS Everywhere ဆိုသော ထပ်တိုးဆော့ဝဲများသည် ကိရိယာအံထဲတွင် မူလပြင်ဆင်မှုအရ မပါပါ၊ သို့သော််လည်း သင်မှ ကိရိယာအံကို စိတ်ကြိုက်စွာ ပြောင်း၍ ၎င်းတို့ကို ပေါင်းထည့်နိုင်ပါသည်။ +onboarding.tour-tor-security-level.button=သင့် လုံခြုံရေးအဆင့်ကို ကြည့်မယ် +onboarding.tour-tor-security-level.next-button=အတွေ့အကြုံ အကြံပေးချက်များသို့ သွားမယ် + +onboarding.tour-tor-expect-differences=အတွေ့အကြုံ အကြံပေးချက်များ +onboarding.tour-tor-expect-differences.title=အချို့ကွာခြားမှုများ မျှော်လင့်ထားပါ။ +onboarding.tour-tor-expect-differences.description=Tor မှ ပံ့ပိုးပေးထားသော ပုဂ္ဂိုလ်လုံခြုံရေး အင်္ဂါရပ်များကြောင့် သင်အင်တာနက်သုံးစွဲသော အတွေ့အကြုံသည် သာမန်ထက် ကွာခြားနိုင်ပါသည်။ သင့် လုံခြုံရေးအဆင့်ပေါ်မူတည်၍ ဝဘ်ဆိုဒ်အရာများ တင်ပြခြင်းသည် ပိုနှေးနိုင်ပါသည်၊ အချို့အရာများသည် အလုပ်မလုပ်ခြင်း သို့မဟုတ် မတင်ပြနိုင်ခြင်း တို့ဖြစ်တတ်ပါသည်။ သင်သည် လူဟုတ်မဟုတ်သည်ကို စစ်ဆေးမှုခံရနိုင်ပါ� ��ည်။ +onboarding.tour-tor-expect-differences.button=မေးလေ့မေးထရှိသော မေးခွန်းများ ဖတ်မယ် +onboarding.tour-tor-expect-differences.next-button=Onion ဝန်ဆောင်မှုများ သို့သွားမယ် + +onboarding.tour-tor-onion-services=Onion ဝန်ဆောင်မှုများ +onboarding.tour-tor-onion-services.title=အပိုကာကွယ်မှုခံထားပါ။ +onboarding.tour-tor-onion-services.description= Onion ဝန်ဆောင်မှုများသည် .onion နှင့် ဆုံးသည့် ဝဘ်ဆိုက်များဖြစ်ပါသည်။ ၎င်းဝန်ဆောင်မှုများသည် ထုတ်ဝေသူများနှင့် သုံးစွဲသူများကို အပိုကာကွယ်မှုများပေးသည့်အပြင် ဆင်ဆာခံရခြင်းတို့ကိုလည်း ဆန့်ကျင်ရန် အကာကွယ်မှုများလည်းပါဝင်ပါသည်။ Onion ဝန်ဆောင်မှုများသည် မည်သူကိုမဆို အမည်မဖေါ်ဘဲ အကြောင်းအရာများ နှင့် အခြားဝန်ဆောင်မှုများ ထုတ်ဝေနိုင်ရန် အခွင့်လမ ်းပေးပါသည်။ အောက်တွင် နှိပ်၍ DuckDuckGo onion ဆိုဒ်အားဝင်လေ့လာပါ။ +onboarding.tour-tor-onion-services.button=Onion သို့ဝင်ရောက်ပါ +onboarding.tour-tor-onion-services.next-button=ပြီးသွားပြီ + +onboarding.overlay-icon-tooltip-updated2=%S တွင်\nဘာထူးခြားချက်ရှိလဲကြည့်ပါ +onboarding.tour-tor-update.prefix-new=အသစ် +onboarding.tour-tor-update.prefix-updated=အပ်ဒိတ်လုပ်ပြီး + +onboarding.tour-tor-toolbar=ကိရိယာအံ toolbar +onboarding.tour-tor-toolbar-update-9.0.title=ဂွတ်ဘိုင် Onion ခလုတ်။ +onboarding.tour-tor-toolbar-update-9.0.description=ကျွန်ုပ်တို့မှ သင် Tor အသုံးပြုခြင်း အတွေ့အကြုံကို Tor ဘရောင်ဇာအထဲ၌ အပြည့်အဝ ပေါင်းစည်းထားစေချင်ပါသည်။ +onboarding.tour-tor-toolbar-update-9.0.description-para2=အဲ့ဒါကြောင့် onion ခလုတ်သုံးမည့်အစား သင်သည် သင့် Tor လမ်းကြောင်းကို [i] URL အကွက်တွင် တွေ့ရှိနိုင်ပြီး ကိရိယာအံ (toolbar) ခလုတ် သို့မဟုတ် [≡] မီနူး သုံး၍ အထောက်အထားအသစ်ကို တောင်းဆိုနိုင်ပါသည်။ +onboarding.tour-tor-toolbar-update-9.0.button=အထောက်အထားအသစ် မည်သို့ တောင်းဆိုရမည်နည်း +onboarding.tour-tor-toolbar-update-9.0.next-button=Tor ကွန်ယက်ပေါ် သို့သွားပါ + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=ရှေ့ဆက်ရန် +onboarding.tor-circuit-display.done=ပြီးသွားပြီ +onboarding.tor-circuit-display.one-of-three=၁ / ၃ +onboarding.tor-circuit-display.two-of-three=၂ / ၃ +onboarding.tor-circuit-display.three-of-three=၃ / ၃ + +onboarding.tor-circuit-display.intro.title=လမ်းကြောင်းစဥ်များ မည်ကဲ့သို့ အလုပ်လုပ်သနည်း? +onboarding.tor-circuit-display.intro.msg=ဆားကစ်လမ်းကြောင်းများသည် ကျပန်းသတ်မှတ်ထားသော လက်ဆင့်ကမ်းခြင်းများဖြင့် တည်ဆောက်ထားပါသည်။ ၎င်းလက်ဆင့်ကမ်းမှုများသည် ကမ္ဘာအနှံ့ရှိ Tor အသွားအလာများကို လက်ဆင့်ကမ်းနိုင်ရန် ချိန်ညှိထားသည့် ကွန်ပျူတာများဖြစ်ပါသည်။ ဆားကစ်လမ်းကြောင်းများသည် သင့်ကို အင်တာနက်လုံခြုံစွာသုံးစွဲနိုင်စေသည်နှင့် onion ဝန်ဆောင်မှုများနှင့် ချိတ်ဆက်စေနိုင်ပါသည်။ + +onboarding.tor-circuit-display.diagram.title=လမ်းကြောင်းစဥ် +onboarding.tor-circuit-display.diagram.msg=ဤပုံသည် ၎င်းဝဘ်ဆိုဒ်အတွက် လမ်းကြောင်းစဥ်ပေးသော လက်ဆင့်ကမ်းမှုတို့ကို ပြသပါသည်။ ဝဘ်ဆိုဒ်များ အချင်းချင်း ချိတ်ဆက်ခြင်းများကို တားမြစ်ရန် ဝဘ်ဆိုဒ်တစ်ခုကို မတူညီသော လမ်းကြောင်းတစ်ခုစီသာ ရရှိပါသည်။ + +onboarding.tor-circuit-display.new-circuit.title=သင် လမ်းကြောင်းအသစ် လိုအပ်ပါသလား? +onboarding.tor-circuit-display.new-circuit.msg=သင်ဝင်ရောက်ရန် ကြိုးစားနေသော ဝဘ်ဆိုဒ်နှင့် ချိတ်ဆက်၍မရလျှင် သင်သည် ဤခလုတ်အားအသုံးပြု၍ ဝဘ်ဆိုဒ်အား လမ်းကြောင်းအသစ်ဖြင့် ပြန်တင်နိုင်ပါသည်။ diff --git a/toolkit/torbutton/chrome/locale/my/network-settings.dtd b/toolkit/torbutton/chrome/locale/my/network-settings.dtd new file mode 100644 index 000000000000..0d22945f5a4d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor ကွန်ယက် အပြင်အဆင်များ"> +<!ENTITY torsettings.wizard.title.default "Tor နှင့် ချိတ်ဆက်မယ်"> +<!ENTITY torsettings.wizard.title.configure "Tor ကွန်ယက် အပြင်အဆင်များ"> +<!ENTITY torsettings.wizard.title.connecting "ချိတ်ဆက်မှုလိုင်း တည်ထောင်နေသည်"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor ဘရောင်ဇာ ဘာသာစကား"> +<!ENTITY torlauncher.localePicker.prompt "ကျေးဇူးပြု၍ ဘာသာစကားရွေးချယ်ပါ"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Tor နှင့် ချိတ်ဆက်ရန် "ချိတ်ဆက်မယ်" ဆိုသည့် ခလုတ်အား နှိပ်ပါ"> +<!ENTITY torSettings.configurePrompt "ကွန်ယက် အပြင်အဆင်များ ချိန်ညှိရန် "စီစဥ်မယ်" ဆိုသည့်ခလုတ်အား နှိပ်ပါ"> +<!ENTITY torSettings.configure "စီစဥ်မယ်"> +<!ENTITY torSettings.connect "ချိတ်ဆက်မယ်"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Tor စဖို့ စောင့်နေပါသည်..."> +<!ENTITY torsettings.restartTor "Tor ကို ပြန်လည်စတင်မယ်"> +<!ENTITY torsettings.reconfigTor "ပြန်ချိန်ညှိမယ်"> + +<!ENTITY torsettings.discardSettings.prompt "Tor ချိတ်ဆက်တံတားများအား သင်စီမံထားရှိပြီးပါပြီ သို့မဟုတ် လိုကယ်ကြားခံ proxy များ၏ အပြင်အဆင်များကို ရိုက်ထည့်ပြီးပါပြီ။   Tor ကွန်ယက်နှင့် တိုက်ရိုက်ချိတ်ဆက်ရန် ၎င်းအပြင်အဆင်များကို ဖယ်ရှားရပါမည်။"> +<!ENTITY torsettings.discardSettings.proceed "အပြင်အဆင်များ ဖယ်ရှားပြီး ချိတ်ဆက်မယ်"> + +<!ENTITY torsettings.optional "မဖြစ်မနေမဟုတ်"> + +<!ENTITY torsettings.useProxy.checkbox "ကျွန်ုပ်သည် ကြားခံ proxy သုံး၍ အင်တာနက်နှင့် ချိတ်ဆက်ပါသည်"> +<!ENTITY torsettings.useProxy.type "ကြားခံ proxy အမျိုးအစား"> +<!ENTITY torsettings.useProxy.type.placeholder "ကြားခံ proxy အမျိုးအစားတစ်ခု ရွေးပါ"> +<!ENTITY torsettings.useProxy.address "လိပ်စာ"> +<!ENTITY torsettings.useProxy.address.placeholder "IP လိပ်စာ သို့မဟုတ် ဧည့်ခံသူအမည် (hostname)"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "အသုံးပြုသူအမည်"> +<!ENTITY torsettings.useProxy.password "စကားဝှက်"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "အချို့သော port များနှင့်သာ ချိတ်ဆက်မှုများခွင့်ပြုသည့် အသွားအလာထိန်းချုပ်သည့်အလွှာ (firewall) အား ဤကွန်ပျူတာသည် ဖြတ်သန်းပါသည်။"> +<!ENTITY torsettings.firewall.allowedPorts "ခွင့်ပြုထားသော ports"> +<!ENTITY torsettings.useBridges.checkbox "ကျွန်ုပ်၏ နိုင်ငံတွင် Tor ကို ဆင်ဆာခံထားပါသည်"> +<!ENTITY torsettings.useBridges.default "ပင်ကိုသွင်းထားသော ချိတ်ဆက်တံတား ရွေးပါ"> +<!ENTITY torsettings.useBridges.default.placeholder "ချိတ်ဆက်တံတား ရွေးပါ"> +<!ENTITY torsettings.useBridges.bridgeDB "torproject.org မှ ချိတ်ဆက်တံတား တောင်းဆိုပါ"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "ရုပ်ပုံထဲမှ စာလုံးများကို ရိုက်ထည့်ပါ"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "စိန်ခေါ်မှုအသစ် ယူမယ်"> +<!ENTITY torsettings.useBridges.captchaSubmit "တင်သွင်းပါ။"> +<!ENTITY torsettings.useBridges.custom "ကျွန်ုပ်သိသော ချိတ်ဆက်တံတား ပံ့ပိုးပါ"> +<!ENTITY torsettings.useBridges.label "ယုံကြည်ရသော အရင်းအမြစ်မှ ချိတ်ဆက်တံတား အချက်အလက် ရိုက်ထည့်ပါ"> +<!ENTITY torsettings.useBridges.placeholder "လိပ်စာအမျိုးအစား : port (တစ်ကြောင်းတစ်ခုစီ)"> + +<!ENTITY torsettings.copyLog "Tor မှတ်တမ်းကို စာဘုတ်ပေါ်သို့ ကော်ပီကူးယူမယ်"> + +<!ENTITY torsettings.proxyHelpTitle "Proxy ကြားခံ အကူအညီ"> +<!ENTITY torsettings.proxyHelp1 "ကုမ္ပဏီ၊ ကျောင်း၊ သို့မဟုတ် တက္ကသိုလ် ကွန်ယက်များနှင့် ချိတ်ဆက်လျှင် လိုကယ် ကြားခံ proxy လိုအပ်နိုင်ပါသည်။   သင်မှ ကြားခံ proxy လိုမလိုခြင်း မသေချာပါက အခြား ဘရောင်ဇာမှ အင်တာနက် အပြင်အဆင်များ သို့မဟုတ် သင့်စနစ်၏ ကွန်ယက်ချိတ်ဆက်မှု အပြင်အဆင်များကို လေ့လာကြည့်ရှုနိုင်ပါသည်။"> + +<!ENTITY torsettings.bridgeHelpTitle "ချိတ်ဆက်တံတား လက်ဆင့်ကမ်းခြင်း အကူအညီ"> +<!ENTITY torsettings.bridgeHelp1 "ချိန်ဆက်တံတားများ သည် Tor ကွန်ယက်ချိတ်ဆက်မှုများ ကို ပိတ်ပယ်ရန် ခက်ခဲအောင်လုပ်သည့် စာရင်းမသွင်းထားသော လက်ဆင့်ကမ်းမှုများ ဖြစ်ပါသည်။ .  ဆင်ဆာခံရခြင်းကို ရှောင်ကျင်ရန် ချိတ်ဆက်တံတား အမျိုးအစားများတစ်ခုစီသည် ကွဲပြားသော နည်းလမ်းများ အသုံးပြုပါသည်။ .  Obfs အမျိုးအစားသည် သင့် အင်တာနက် အသွားအလာများကို ကျပန်းဆူညံသံကဲ့သို့ အယောင်ဆောင်ပြုပါသည်၊ Meeks အမျ� ��ုးအစားသည် သင့် အင်တာနက် အသွားအလာများ သို့မဟုတ် Tor နှင့် ချိတ်ဆက်ထားခြင်းကို အခြားဝန်ဆောင်မှုနှင့် ချ [...] +<!ENTITY torsettings.bridgeHelp2 "အချို့သောနိုင်ငံများတွင် Tor ကို ပိတ်ပယ်ရန် ကြိုးစားခြင်းကြောင့် အချို့သော ချိတ်ဆက်တံတားများသည် အချို့နိုင်ငံတွင်သာ အလုပ်လုပ်ပြီး အခြားနိုင်ငံများတွင် အလုပ်မလုပ်ပါ။   သင့်နိုင်ငံတွင် မည်သည့် ချိတ်ဆက်တံတားများက အလုပ်လုပ်သည်ကို မသေချာလျှင် torproject.org/about/contact.html သို့ ဝင်ရောက်ကြည့်ရှုပေးပါ။ #support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "ကျွန်ုပ်တို့မှ Tor ကွန်ယက်နှင့် ချိတ်ဆက်မှု ထူထောင်နေတုန်း ခေတ္တစောင့်ပေးပါ။   ဤလုပ်ဆောင်မှုသည် မိနစ်အနည်းအငယ်ကြာနိုင်လိမ့်မည်။"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "ချိတ်ဆက်ခြင်း"> +<!ENTITY torPreferences.torSettings "Tor အပြင်အဆင်များ"> +<!ENTITY torPreferences.torSettingsDescription "ကမ္ဘာအနှံ့ရှိ လုပ်အားပေးများ လုပ်ဆောင်သော Tor ကွန်ယက်ပေါ်တွင် သင့်အသွားအလာများကို Tor ဘရောင်ဇာမှ လမ်းကြောင်းပေးပါသည်။" > +<!ENTITY torPreferences.learnMore "ထပ်မံလေ့လာရန်"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "အင်တာနက်"> +<!ENTITY torPreferences.statusInternetTest "စမ်းသပ်ရန်"> +<!ENTITY torPreferences.statusInternetOnline "လိုင်းတက်နေသည်"> +<!ENTITY torPreferences.statusInternetOffline "အော့ဖ်လိုင်း"> +<!ENTITY torPreferences.statusTorLabel "Tor ကွန်ယက်"> +<!ENTITY torPreferences.statusTorConnected "ချိတ်ဆက်ပြီးပါပြီ"> +<!ENTITY torPreferences.statusTorNotConnected "ချိတ်ဆက်ထားခြင်း မရှိပါ။"> +<!ENTITY torPreferences.statusTorBlocked "ပိတ်ဆို့ခံရနိုင်ချေရှိသည်။"> +<!ENTITY torPreferences.learnMore "ထပ်မံလေ့လာရန်"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "လျင်မြန်စွာစတင်ခြင်း "> +<!ENTITY torPreferences.quickstartDescriptionLong "လျင်မြန်စွာစတင်ခြင်းကို စတင်လိုက်သည်နှင့် သင်နောက်ဆုံးအသုံးပြုခဲ့သော ချိတ်ဆက်မှု အပြင်အဆင်မှုပေါ်မူတည်၍ ၎င်းမှ Tor ဘရောင်ဇာနှင့် Tor ကွန်ရက်သို့ အလိုအလျောက်ချိတ်ဆက်ပေးသည် ။ "> +<!ENTITY torPreferences.quickstartCheckbox "အမြဲတမ်း အလိုအလျောက် ချိတ်ဆက်မည် ။ "> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Bridges"> +<!ENTITY torPreferences.bridgesDescription "ချိတ်ဆက်တံတားများသည် Tor ကို ပိတ်ပယ်ထားသော နေရာများတွင် Tor ကွန်ယက်နှင့် ချိတ်ဆက်ရန် ကူညီပေးပါသည်။ သင့် တည်နေရာပေါ်မူတည်၍ ချိတ်ဆက်တံတားတစ်ခုသည် နောက်တစ်ခုထက် ပိုကောင်းနိုင်ပါလိမ့်မည်။"> +<!ENTITY torPreferences.bridgeLocation "သင်၏ တည်နေရာ"> +<!ENTITY torPreferences.bridgeLocationAutomatic "အလိုအလျောက်"> +<!ENTITY torPreferences.bridgeLocationFrequent "ရွေးချယ်လေ့ရှိသော တည်နေရာများ"> +<!ENTITY torPreferences.bridgeLocationOther "အခြား တည်နေရာများ"> +<!ENTITY torPreferences.bridgeChooseForMe "ကျွနု်ပ်အတွက် တံတား ရွေးချယ်ပါ ။ "> +<!ENTITY torPreferences.bridgeBadgeCurrent "သင်၏ လက်ရှိ တံတားများ "> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "သင် တံတား တစ်ခုထက်ပို၍ သိမ်းထားနိုင်သည် ။ ဒါမှမဟုတ် Tor မှ သင်ချိတ်ဆက်သည့်အခါ မည်သည့်တံတားကို အသုံးပြုရမည်ဆိုသည်ကို ရွေးချယ်ပေးလိမ့်မည် ။ Tor မှ လိုအပ်ပါက အခြား တံတားကို အသုံးပြုရန် အလိုအလျောက် ပြောင်းပေးမည် ဖြစ်သည် ။ "> +<!ENTITY torPreferences.bridgeId "#1 တံတား #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "ဖယ်ရှားရန်"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "နဂိုရှိ တံတားများကို ပိတ်ထားရန် "> +<!ENTITY torPreferences.bridgeShare "QR ကုဒ် ကို အသုံးပြု၍ သို့မဟုတ် လိပ်စာကို ကူးထည့်ခြင်းဖြင့် ဤ တံတား ကို ဝေမျှပါ ။"> +<!ENTITY torPreferences.bridgeCopy "တံတား လိပ်စာ ကို ကူးပါ ။ "> +<!ENTITY torPreferences.copied "ကော်ပီကူးပြီး!"> +<!ENTITY torPreferences.bridgeShowAll "တံတား အားလုံးကို ပြပါ ။"> +<!ENTITY torPreferences.bridgeRemoveAll "တံတားအားလုံးကို ဖယ်ရှားပါ။"> +<!ENTITY torPreferences.bridgeAdd "တံတား အသစ် ထည့်ပါ ။ "> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Tor ဘရောင်ဇာ ၏ နဂိုပါ တံတားများမှ ရွေးချယ်ပါ ။ "> +<!ENTITY torPreferences.bridgeSelectBuiltin "နဂိုပါ တံတား တစ်ခုကို ရွေးချယ်ပါ။ "> +<!ENTITY torPreferences.bridgeRequest "ချိတ်ဆက်တံတား တောင်းဆိုပါ..."> +<!ENTITY torPreferences.bridgeEnterKnown "သင် သိရှိထားပြီးသော တံတားလိပ်စာကို ဖြည့်သွင်းပါ"> +<!ENTITY torPreferences.bridgeAddManually "တံတားအား ကိုယ်တိုင် ထည့်ပါ။"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "အဆင့်မြင့်"> +<!ENTITY torPreferences.advancedDescription "Tor Browser သည် အင်တာနက်နှင့် မည်သို့ ချိတ်ဆက်မည်ကို ချိန်ညှိပါ။"> +<!ENTITY torPreferences.advancedButton "ဆက်တင်များ"> +<!ENTITY torPreferences.viewTorLogs "Tor မှတ်တမ်းများ ကိုကြည့်ရှုပါ"> +<!ENTITY torPreferences.viewLogs "မှတ်တမ်းများ ကြည့်ရှုမယ်..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "တံတားအားလုံးကို ဖယ်ရှားမည်လား။"> +<!ENTITY torPreferences.removeBridgesWarning "ထိုလုပ်ဆောင်ချက်အား ပြန်ပြင်၍ မရနိုင်ပါ။"> +<!ENTITY torPreferences.cancel "ပယ်ဖျက်မည်"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR ကုဒ်ကို စကင်န်ဖတ်ပါ။"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "နဂိုရှိ တံတားများ"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser တွင် "pluggable transports" ဟုလူသိများသော သီးခြားတံတားအမျိုးအစားအချို့ ပါဝင်သည်။"> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 သည် သင့် Tor ၏ အသွားအလာကို ကျပန်း ဖြစ်နိုင်စေသည့် နဂိုပါ တံတားအမျိုးအစားတစ်ခုဖြစ်သည်။ ၎င်းတို့သည် ၎င်းတို့၏ ယခင်နှစ်များဖြစ်သော obfs3 တံတားများထက် ပိတ်ဆို့ခံရနိုင်ခြေ နည်းပါသည်။"> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake သည် စေတနာ့ဝန်ထမ်းများ လုပ်ဆောင်ပေးနေသော Snowflake proxies များမှတစ်ဆင့် သင်၏ ချိတ်ဆက်မှုကို လမ်းကြောင်းပြခြင်းဖြင့် စီစစ်ဖြတ်တောက်မှုကို ချေဖျက်နိုင်သည့် နဂိုပါသည့် တံတားတစ်ခု ဖြစ်သည်။"> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure "> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure သည် သင် Tor ကို အသုံးပြုသည့်အစား Microsoft ဝက်ဘ်ဆိုဒ်ကို အသုံးပြုနေသယောင် ဖြစ်သည့် နဂိုပါ တံတား ဖြစ်သည် ။ "> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "ချိတ်ဆက်တံတား တောင်းဆိုမယ်"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "BridgeDB နှင့် ဆက်သွယ်နေသည်။ ခေတ္တစောင့်ပေးပါ။"> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "လူဟုတ်မဟုတ်စစ်ဆေးမှုကို ဖြေ၍ bridge အား တောင်းဆိုပါ"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "ဖြေရှင်းမှုသည် မမှန်ကန်ပါ။ ပြန်စမ်းကြည့်ပေးပါ။"> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "တံတား ကို ထောက်ပံ့ပေးပါ "> +<!ENTITY torPreferences.provideBridgeHeader "ယုံကြည်စိတ်ချရသည့် အရင်းအမြစ်မှ တံတား နှင့် ပတ်သက်သည့် အချက်အလက်များကို ဝင်ရောက်သည်"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "ချိတ်ဆက်မှု ဆက်တင်များ"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Tor Browser သည် အင်တာနက်နှင့် မည်သို့ ချိတ်ဆက်မည်ကို ချိန်ညှိပါ။"> +<!ENTITY torPreferences.firewallPortsPlaceholder "ကော်မာခြားထားသော တန်ဖိုးများ"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor မှတ်တမ်းများ"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "ချိတ်ဆက်ထားခြင်း မရှိပါ။"> +<!ENTITY torConnect.connectingConcise "ချိတ်ဆက်နေသည်…"> +<!ENTITY torConnect.tryingAgain "ထပ်မံ လုပ်ဆောင်နေသည်"> +<!ENTITY torConnect.noInternet "Tor ဘရောဇာ သည် အင်တာနက်ချိတ်ဆက်၍ မရပါ။"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor ဘရောင်ဇာ မှ Tor သို့ ချိတ်ဆက်မှု မပြုလုပ်နိုင်ပါ ။ "> +<!ENTITY torConnect.assistDescriptionConfigure "သင်၏ ချိတ်ဆက်မှု ကို ချိန်ညှိပါ ။ "> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "သင်၏ တည်နေရာတွင် Tor ကို ပိတ်ဆို့ထားပါက တံတားကို ကြိုးစား အသုံးပြုခြင်းက ကူညီနိုင်လိမ့်မည် ။ ချိတ်ဆက်မှုအကူအညီမှ သင်၏ တည်နေရာကို အသုံးပြုကာ သင်အတွက် ရွေးချယ်ပေးနိုင်သည် သို့မဟုတ် သင် #1 ကို ကိုယ်တိုင် လုပ်ဆောင်နိုင်သည် ။ "> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "တံတားကို ကြိုးစားချိတ်ဆက်နေခြင်း "> +<!ENTITY torConnect.tryingBridgeAgain "နောက်တစ်ကြိမ် ထပ်၍ ကြိုးစားချိတ်ဆက်ကြည့်ခြင်း "> +<!ENTITY torConnect.errorLocation "Tor ဘရောင်ဇာမှ သင်အား မရှာနိုင်ပါ ။ "> +<!ENTITY torConnect.errorLocationDescription "Tor ဘရောင်ဇာမှ သင့်အတွက် မှန်ကန်သော တံတား ရွေးချယ်ပေးနိုင်ရန် အလို့ငှာ သင်၏ တည်နေရာကို သိရှိရန်လိုအပ်သည် ။ သင်၏ တည်နေရာ ကို မဝေမျှလိုပါက သင်ကိုယ်တိုင် #1 ကို လုပ်ဆောင်ပါ ။ "> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "ဤ တည်နေရာ အပြင်အဆင်များမှာ မှန်ကန်ပါသလား ? "> +<!ENTITY torConnect.isLocationCorrectDescription "Tor ဘရောင်ဇာသည် Tor ကို ချိတ်ဆက်မှု မပြုလုပ်နိုင်ပါ ။ ကျေးဇူးပြု၍ သင် ၏ တည်နေရာ အပြင်အဆင် မှန်မမှန်ကို စစ်ဆေးပြီး ပြန်ကြိုးစား ချိတ်ဆက်ပါ ။ သို့မဟုတ် #1 ကို လုပ်ဆောင်ပါ ။ "> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "ချိတ်ဆက်မှု အကူအညီ "> +<!ENTITY torConnect.breadcrumbLocation "တည်နေရာ အပြင်အဆင်များ "> +<!ENTITY torConnect.breadcrumbTryBridge "တံတား ကို ကြိုးစားချိတ်ဆက်ပါ ။ "> +<!ENTITY torConnect.automatic "အလိုအလျောက်"> +<!ENTITY torConnect.selectCountryRegion "တိုင်းပြည် သို့မဟုတ် ဒေသကို ရွေးချယ်ပါ ။ "> +<!ENTITY torConnect.frequentLocations "ရွေးချယ်လေ့ရှိသော တည်နေရာများ"> +<!ENTITY torConnect.otherLocations "အခြား တည်နေရာများ"> +<!ENTITY torConnect.restartTorBrowser "Tor ဘရောင်ဇာကို ပြန်လည်စတင်မယ် ။ "> +<!ENTITY torConnect.configureConnection "ချိတ်ဆက်မှုကို ချိန်ညိပါ ။ "> +<!ENTITY torConnect.viewLog "မှတ်တမ်းများ ကို ကြည့်ရန် "> +<!ENTITY torConnect.tryAgain "ထပ်မံလုပ်ဆောင်ပါ။"> +<!ENTITY torConnect.offline "အင်တာနက်ကို မချိတ်ဆက်နိုင်ပါ ။ "> +<!ENTITY torConnect.connectMessage "Tor အပြင်အဆင်များကို ပြောင်းလဲခြင်းများသည် သင် ချိတ်ဆက်မှု မပြုမခြင်း သက်ရောက်မည်မဟုတ်ပါ ။ "> +<!ENTITY torConnect.tryAgainMessage "Tor ဘရောင်ဇာ သည် Tor ကွန်ရက် ကို ချိတ်ဆက်မှု တည်ဆောက်ရန် မအောင်မြင်ပါ။"> +<!ENTITY torConnect.yourLocation "သင်၏ တည်နေရာ "> +<!ENTITY torConnect.tryBridge "တံတားကို ကြိုးစားချိတ်ဆက်ကြည့်ပါ ။ "> +<!ENTITY torConnect.autoBootstrappingFailed "အလိုအလျောက် ချိန်ညှိခြင်း မအောင်မြင်ပါ ။ "> +<!ENTITY torConnect.autoBootstrappingFailed "အလိုအလျောက် ချိန်ညှိခြင်း မအောင်မြင်ပါ ။ "> +<!ENTITY torConnect.cannotDetermineCountry "အသုံးပြုသူ ၏ တိုင်းပြည်ကို ဆုံးဖြတ်နိုင်ခြင်း မရှိပါ ။ "> +<!ENTITY torConnect.noSettingsForCountry "သင်၏ တည်နေရာအတွက် အပြင်အဆင်များ မရရှိနိုင်ပါ ။ "> diff --git a/toolkit/torbutton/chrome/locale/my/torbutton.dtd b/toolkit/torbutton/chrome/locale/my/torbutton.dtd new file mode 100644 index 000000000000..8d9e3fc74e72 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "အထောက်အထား အသစ်"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "ကိုယ်ပိုင်အမှတ်သင်္ကေတ အသစ်"> +<!ENTITY torbutton.context_menu.new_identity_key "ထ"> +<!ENTITY torbutton.context_menu.new_circuit "ဤဆိုဒ်အတွက် Tor လမ်းကြောင်းအသစ်"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "လ"> +<!ENTITY torbutton.context_menu.networksettings "Tor ကွန်ယက် အပြင်အဆင်များ..."> +<!ENTITY torbutton.context_menu.networksettings.key "ယ"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor ဘရောင်ဇာ အပ်ဒိတ်အတွက် စစ်ပေးပါ..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "အ"> +<!ENTITY torbutton.context_menu.cookieProtections "ကွတ်ကီး အကာအကွယ်များ..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "က"> +<!ENTITY torbutton.button.tooltip "Torbutton ကို အစပြုရန် နှိပ်ပါ"> +<!ENTITY torbutton.prefs.security_settings "Tor ဘရောင်ဇာ လုံခြုံရေး အပြင်အဆင်များ"> +<!ENTITY torbutton.cookiedialog.title "ကွတ်ကီး ကာကွယ်မှုများကို စီမံခန့်ခွဲရန်"> +<!ENTITY torbutton.cookiedialog.lockCol "အကာအကွယ် လုပ်ထားသည်"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "အမည်"> +<!ENTITY torbutton.cookiedialog.pathCol "လမ်းကြောင်း"> +<!ENTITY torbutton.cookiedialog.protectCookie "ကွတ်ကီးကို ကာကွယ်ရန်"> +<!ENTITY torbutton.cookiedialog.removeCookie "ကွတ်ကီးကို ဖယ်ထုတ်ရန်"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "ကွတ်ကီးကို မကာကွယ်ထားပါ"> +<!ENTITY torbutton.cookiedialog.removeAllBut "အားလုံးကို ဖယ်ထုတ်ပါ၊ သို့သော် အကာအကွယ် လုပ်ထားသည်"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "ကွတ်ကီးသစ်များကို ကာကွယ်ရန်"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "ကွတ်ကီးသစ်များကို ကာကွယ်ခြင်း မပြုရန်"> +<!ENTITY torbutton.prefs.sec_caption "လုံခြုံရေးအဆင့်"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "သင့် ဘရောင်ဇာကို ဟက်ကာများ (hackers) စီနင်းရန် ပိုမိုခုခံအားနည်းစေသော သင့်ဘရောင်ဇာ၏ အချို့သောအင်္ဂါရပ်များကို လုံခြုံရေး ပွတ်ရန်ကိရိယာမှ ပိတ်ပယ်နိုင်ပါသည်။"> +<!ENTITY torbutton.prefs.sec_standard_label "ပုံမှန်"> +<!ENTITY torbutton.prefs.sec_standard_description "Tor ဘရောင်ဇာ နှင့် ဝဘ်ဆိုဒ် အင်္ဂါရပ်များအားလုံးကို ဖွင့်ထားပါသည်။"> +<!ENTITY torbutton.prefs.sec_safer_label "ပိုမိုလုံခြုံသော"> +<!ENTITY torbutton.prefs.sec_safer_description " မကြာခဏ အန္တရာယ်ပေးနိုင်သော ဝဘ်ဆိုဒ်အင်္ဂါရပ်များကို ပိတ်ပယ်ထားပါသည်၊ သို့ဖြစ်၍ အချို့သော ဆိုဒ်၏လုပ်နိုင်စွမ်းများ ဆုံးရှူံးစေသည်။"> +<!ENTITY torbutton.prefs.sec_safer_list_label "ပိုမိုလုံခြုံသော အပြင်အဆင်တွင် -"> +<!ENTITY torbutton.prefs.sec_safest_label "အလုံခြုံဆုံး"> +<!ENTITY torbutton.prefs.sec_safest_description "တည်ငြိမ်သော ဆိုဒ်များနှင့် အခြေခံဝန်ဆောင်မှုများအတွက် လိုအပ်သော ဝက်ဘ်ဆိုက်၏အင်္ဂါရပ်များကိုသာ ခွင့်ပြုသည်။ ဤပြောင်းလဲမှုများသည် ရုပ်ပုံများ၊ မီဒီယာများ နှင့် ပရိုဂရမ်ဘာသာစကားများ (scripts) တို့ကို ထိခိုက်စေသည်။"> +<!ENTITY torbutton.prefs.sec_safest_list_label "အလုံခြုံဆုံး အပြင်ဆင်တွင် -"> +<!ENTITY torbutton.prefs.sec_learn_more_label "ထပ်မံလေ့လာမယ်"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "HTTPS ဆိုဒ်များပေါ် မဟုတ်သော JavaScript ကိုပိတ်ထားသည်"> +<!ENTITY torbutton.prefs.sec_js_disabled "ဆိုဒ်များအားလုံးပေါ်တွင် JavaScript ကို မူလအပြင်အဆင်အရ ပိတ်ထားသည်"> +<!ENTITY torbutton.prefs.sec_limit_typography "အချို့သော စာလုံးစတိုင်များ နှင့် သင်္ချာသင်္ကေတများကို ပိတ်ထားသည်"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "အချို့သော စာလုံးစတိုင်များ၊ အိုင်ကွန်များ၊ သင်္ချာသင်္ကေတများ နှင့် ရုပ်ပုံများတို့ကို ပိတ်ထားသည်"> +<!ENTITY torbutton.prefs.sec_click_to_play_media "အသံ နှင့် ဗီဒီယိုဖိုင်များ (HTML5 မီဒီယာ) နှင့် WebGL တို့ကို နှိပ်၍စနိုင်သည် (click-to-play)"> +<!ENTITY torbutton.prefs.sec_custom_warning "စိတ်ကြိုက် "> +<!ENTITY torbutton.prefs.sec_overview "သင့် လုံခြုံရေးနှင့် အမည်ဝှက်မှုတို့ကို တိုက်ခိုက်စေနိုင်သော အချို့သော ဝဘ်အင်္ဂါရပ်များကို ပိတ်ထားမည်"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "လုံခြုံရေးအဆင့် - ပုံမှန်"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "လုံခြုံရေးအဆင့် - ပိုမိုလုံခြုံသော"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "လုံခြုံရေးအဆင့် - အလုံခြုံဆုံး"> +<!ENTITY torbutton.prefs.sec_custom_summary "သင် စိတ်ကြိုက်ရွေးထားသော ဘရောင်ဇာ၏ ချိန်ညှိမှုများသည် ပုံမှန်မဟုတ်သော လုံခြုံရေး အပြင်အဆင်များ ဖြစ်ပေါ်စေခဲ့ပါသည်။ လုံခြုံရေးနှင့် ပုဂ္ဂိုလ်လုံခြုံရေး အကြောင်းပြချက်များအတွက် မူလလုံခြုံရေးအဆင့်သို့ ရွေးထားရန် ကျွန်ုပ်တို့မှ အကြံပြုပါသည်။"> +<!ENTITY torbutton.prefs.sec_restore_defaults " မူလအတိုင်း ပြန်ထားရန်"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "အဆင့်မြင့် လုံခြုံရေး အပြင်အဆင်များ..."> +<!ENTITY torbutton.prefs.sec_change "အပြောင်းအလဲ"> +<!ENTITY torbutton.circuit_display.title "Tor လမ်းကြောင်း"> +<!ENTITY torbutton.circuit_display.new_circuit "ဤဆိုဒ်အတွက် လမ်းကြောင်းအသစ်"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Onion ဝန်ဆောင်မှု သုံးသူအတည်ပြုရန် တောင်းဆိုစာ ဖွင့်ပါ"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "ဤကီးကုဒ်အား မှတ်ထားပါ"> diff --git a/toolkit/torbutton/chrome/locale/my/torbutton.properties b/toolkit/torbutton/chrome/locale/my/torbutton.properties new file mode 100644 index 000000000000..d9d55dd8e7fd --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = အင်တာနက် +torbutton.circuit_display.ip_unknown = မသိရှိသော IP +torbutton.circuit_display.onion_site = Onion ဆိုဒ် +torbutton.circuit_display.this_browser = ဤ ဘရောင်ဇာ +torbutton.circuit_display.relay = ထပ်ဆင့်ကမ်း +torbutton.circuit_display.tor_bridge = Bridge +torbutton.circuit_display.unknown_country = မသိရှိသော နိုင်ငံ +torbutton.circuit_display.guard = စောင့် +torbutton.circuit_display.guard_note = သင်၏ [Guard] node သည်ပြောင်းလဲမည် မဟုတ်ပါ။ +torbutton.circuit_display.learn_more = ထပ်မံလေ့လာမယ် +torbutton.circuit_display.click_to_copy = ကော်ပီကူးရန် နှိပ်ပါ +torbutton.circuit_display.copied = ကော်ပီကူးပြီး! +torbutton.content_sizer.margin_tooltip = Tor ဘရောင်ဇာသည် သင့် ဝင်းဒိုး၏ အကျယ်နှင့် အမြင့်ကို သိပ်မထူးခြားအောင် ဤအနားသတ် ထပ်ပေါင်းပေးပါသည်။ သို့ဖြင့် အခြားလူများသည် သင့်အား အွန်လိုင်းပေါ်တွင် လိုက်ရှာဖွေနိုင်ခြင်း လျော့နည်းစေသည်။ +extensions.torbutton@torproject.org.description = Torbutton သည် Tor အပြင်အဆင်များ ချိန်ဆရန် နှင့် အွန်လိုင်းပေါ် ကိုယ်ပိုင်လှုပ်ရှားမှုရာဇဝင်အား လွယ်ကူလျင်မြန်စွာ ရှင်းလင်းရန် ခလုတ်တစ်ခု ပေးပါသည်။ +torbutton.popup.external.title = ပြင်ပဖိုင်အမျိုးအစား ဒေါင်းလုပ်လုပ်မည်လား? +torbutton.popup.external.app = Tor ဘရောင်ဇာသည် ဤဖိုင်အား ပြသလို့မရပါ။ အခြား အပ္ပလီကေးရှင်းဖြင့် သင်မှ ဖွင့်ရန်လိုအပ်ပါမည်။\n\n +torbutton.popup.external.note = အချို့ဖိုင်အမျိုးအစားများသည် အပ္ပလီကေးရှင်းများအား Tor အသုံးမပြုဘဲ အင်တာနက်နှင့် ချိတ်ဆက် စေနိုင်ပါသည်။\n\n +torbutton.popup.external.suggest = လုံခြုံစေရန် သင်သည် အွန်လိုင်းပေါ်မရှိချိန် သို့မဟုတ် Tails လိုမျိုး Tor Live CD အသုံးပြု၍သာ ဒေါင်းလုပ်ဆွဲထားသောဖိုင်များကို ဖွင့်သင့်ပါသည်။\n +torbutton.popup.launch = ဖိုင်ဒေါင်းလုပ်မယ် +torbutton.popup.cancel = ပယ်ဖျက်မယ် +torbutton.popup.dontask = ယခုအချိန်မှစ၍ ဖိုင်များကို အလိုအလျောက် ဒေါင်းလုပ်ဆွဲမယ် +torbutton.popup.no_newnym = Torbutton သည် သင့်အား အထောက်အထား အသစ်ကို လုံလုံခြုံခြုံ မပေးနိုင်ပါ။ ၄င်းသည် Tor ထိန်းချုပ်ရေး Port ထဲ ၀င်ရောက်ခွင့်မရှိပါ။\n\nTor Browser Bundle ကို သင် သုံးစွဲနေပါသလား? +torbutton.security_settings.menu.title = လုံခြုံရေး အပြင်အဆင်များ +torbutton.title.prompt_torbrowser = အရေးကြီးသော Torbutton အချက်အလက် +torbutton.popup.prompt_torbrowser = Torbutton သည် ယခုအခါ အလုပ်လုပ်ပုံ မတူတော့ပါ။ သင်က ၎င်းခလုတ်ကို ပိတ်လို့မရတော့ပါ။\n\nTor မပါဘဲ ဘရောင်ဇာကို အသုံးပြုတုန်း Torbutton ကို ဘရောင်ဇာအတွင်း အသုံးပြုခြင်းသည် မလုံခြုံ၍ ကျွန်ုပ်တို့မှ ဤပြောင်းလဲချက် ပြုလုပ်ခဲ့ပါသည်။ ပျက်ကွက်မှုများ များလွန်း၍ အခြားနည်းလမ်းနှင့် ပြုပြင်လို့မရတော့လို့ပါ။\n\nသင်မှ Firefox အား ပုံမှန်လိုသုံးစွဲလိုလျှင် သင်မှ Torbutton အား ဖယ်ထုတ်� �ြီး Tor Browser Bundle ကို ဒေါင်းလုပ်လုပ်သင့်ပါသည်။ Tor ဘရောင်ဇာ ၏ ပုဂ္ဂိုလ်ရေးအင်္ဂါရ [...] +torbutton.popup.short_torbrowser = အရေးကြီးသော Torbutton အချက်အလက်!\n\nTorbutton သည် ယခုအမြဲဖွင့်ထားပါသည်။\n\nTorbutton အား နှိပ်၍ အချက်အလက်များ ထပ်မံလေ့လာပါ။ + +torbutton.popup.confirm_plugins = Flash လိုမျိုး တိုးတွဲသော ပလပ်ဂင် ဆော့ဝဲ (plugins) များသည် သင့် ပိဂ္ဂုလုံခြုံရေးနှင့် အမည်ဝှက်ခြင်းတို့ကို ထိခိုက်နိုင်စေပါသည်။\n\n၎င်းတို့သည် သင့်ယခု တည်နေရာနှင့် IP လိပ်စာတို့ကို ဖေါ်ထုတ်ရန် Tor ကို ဖြတ်ကျော်နိုင်ပါသည်။\n\nတိုးတွဲသော ပလပ်ဂင် ဆော့ဝဲ (plugins) များကို ဖွင့်မည်မှာ သေချာပါသလား?\n\n +torbutton.popup.never_ask_again = ကျွန်ုပ်ထံ မည်သည့်အချိန်မျှ ထပ်မမေးပါနှင့် +torbutton.popup.confirm_newnym = Tor ဘရောင်ဇာသည် ဝင်ဒိုးနှင့် တက်ဘ်များအားလုံးကို ပိတ်ပါမည်။ ဝဘ်ဆိုဒ် ဝင်ခြင်းများ အားလုံး ဆုံးရှူံးသွားပါမည်။\n\nသင့် ကိုယ်ရေး အထောက်အထားများ ပြန်လည်ဆက်တင်ချရန် Tor ဘရောင်ဇာကို ပိတ်ပြီးပြန်ဖွင့် မလား?\n\n + +torbutton.maximize_warning = Tor ဘရောင်ဇာကို အကြီးဆုံးဆိုဒ်အထိ ချဲ့ခြင်းအားဖြင့် ဝဘ်ဆိုဒ်များသည် သင့် စကင်ရင် အရွယ်အစားကို သိရှိနိုင်ပြီး သင့်အား လိုက်ရှာလို့ရနိုင်ပါသည်။ ကျွန်ုပ်တို့မှ သင့် Tor ဘရောင်ဇာ ဝင်းဒိုးကို မူရင်းအရွယ်အစားဖြင့် ထားရန် အကြံပြုပါသည်။ + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=ဤဝဘ်ဆိုဒ်သည် (%S) HTML5 ပတ္တူရုပ်ပုံဒေတာကို ထုတ်ယူရန် ကြိုးစားနေပါသည်၊ ၎င်းဒေတာဖြင့် သင့် ကွန်ပျူတာကို တိကျစွာဖေါ်ထုတ်နိုင်ပါသည်။\n\nTor ဘရောင်ဇာမှ ၎င်းဝဘ်ဆိုဒ် HTML5 ပတ္တူရုပ်ပုံဒေတာ ထုတ်ယူခြင်းကို ခွင့်ပြုရမည်လား? +canvas.notNow=ယခုမဟုတ် +canvas.notNowAccessKey=က +canvas.allow=နောင်တွင် ခွင့်ပြုမယ် +canvas.allowAccessKey=A +canvas.never=ဤ ဆိုဒ်အတွက် မည်သည့်အချိန်မှမ (အကြံပြုသည်) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S ပရိုဖိုင် ပြဿနာ +profileReadOnly=%S အား ဖတ်ရန်အတွက်သာ သတ်မှတ်ထားသော ဖိုင်စနစ်ဖြင့် (read-only file system) မဖွင့်နိုင်ပါ။ ကျေးဇူးပြု၍ ၎င်းအား စမ်မးသုံးမီ အခြားနေရာသို့ %S အား ကော်ပီကူးပေးပါ။ +profileReadOnlyMac=%S အား ဖတ်ရန်အတွက်သာ သတ်မှတ်ထားသော ဖိုင်စနစ်ဖြင့် (read-only file system) မဖွင့်နိုင်ပါ။ ကျေးဇူးပြု၍ ၎င်းအား စမ်မးသုံးမီ သင့် Desktop သို့မဟုတ် အပ္ပလီကေးရှင်းဖိုင်တွဲ ထဲသို့ %S အား ကော်ပီကူးပေးပါ။ +profileAccessDenied=%S သည် ပရိုဖိုင် သုံးခွင့်မရှိပါ။ ကျေးဇူးပြု၍ သင့် ဖိုင်စနစ်ခွင့်ပြုချက်များ ပြောင်းလဲ၍ ပြန်စမ်းကြည့်ပေးပါ။ +profileMigrationFailed=သင့် %S ပရိုဖိုင် ပြောင်းလဲခြင်းမအောင်မြင်ပါ။\nအပြင်အဆင်အသစ်များ သုံးစွဲပါမည်။ + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S အပ်ဒတ်အား ဒေါင်းလုပ်ဆွဲနေပါသည် + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=ချိတ်ဆက်မှုအား ကုဒ်ဖြင့်ပြောင်းလဲဝှက်ပြီး (Onion ဝန်ဆောင်မှု၊ %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=ချိတ်ဆက်မှုအား ကုဒ်ဖြင့်ပြောင်းလဲဝှက်ပြီး (Onion ဝန်ဆောင်မှု) +pageInfo_OnionName=Onion အမည် - + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=ထပ်မံလေ့လာမယ် +onionServices.errorPage.browser=ဘရောင်ဇာ +onionServices.errorPage.network=ကွန်ယက် +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.descNotFound.header=Onionsite မတွေ့ရှိပါ +onionServices.descNotFound=အဖြစ်နိုင်ဆုံး အကြောင်းရင်းသည် Onionsite လိုင်းကျခြင်းကြောင့်ဖြစ်ပါသည်။ Onionsite စီမံသူအား ဆက်သွယ်ပေးပါ။ +onionServices.descNotFound.longDescription=အချက်အလက်များ - %S — တောင်းဆိုထားသော onion ဝန်ဆောင်မှု ဖေါ်ပြစာသည် hashring တွင်မတွေ့ရှိ၍ သုံးသူမှ ဝန်ဆောင်မှုအား လက်လှမ်းမမီနိုင်ပါ။ +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.descInvalid.header=Onionsite အား မမီနိုင်ပါ +onionServices.descInvalid=Onionsite အား မမီနိုင်ခြင်းသည် အတွင်းဖြစ်သော ပျက်ကွက်မှုကြောင့်ဖြစ်ပါသည်။ +onionServices.descInvalid.longDescription=အချက်အလက်များ - %S — တောင်းဆိုထားသော onion ဝန်ဆောင်မှု ဖေါ်ပြစာသည် ဆန်းစစ်၍မရပါ သို့မဟုတ် လက်မှတ်အတည်ပြုခြင်း မအောင်မြင်ပါ။ +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.introFailed.header=Onionsite နှင့် ချိတ်ဆက်မှုပြတ်သွား +onionServices.introFailed=အဖြစ်နိုင်ဆုံး အကြောင်းရင်းသည် Onionsite လိုင်းကျခြင်းကြောင့်ဖြစ်ပါသည်။ Onionsite စီမံသူအား ဆက်သွယ်ပေးပါ။ +onionServices.introFailed.longDescription=အချက်အလက်များ - %S — မိတ်ဆက်မှုမအောင်မြင်ပါ၊ ဆိုသည်မှာ ဖေါ်ပြစာတွေ့ရှိသော်လည်း ဝန်ဆောင်မှုသည် မိတ်ဆက်မှုဖြစ်ခြင်းအထိ ချိတ်ဆက်မှု မရှိပါ။ ဖြစ်နိုင်ခြေမှာ ဝန်ဆောင်မှုမှ ဖေါ်ပြစာအား ပြောင်းလဲထားသည် သို့မဟုတ် ၎င်းသည် အလုပ်မလုပ်တော့ပါ။ +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.rendezvousFailed.header=Onionsite နှင့် ချိတ်ဆက်၍မရ +onionServices.rendezvousFailed=Onionsite သည် မအားပါ သို့မဟုတ် Tor ချိတ်ဆက်မှုသည် ဝန်တင်လွန်းနေပါသည်။ နောက်မှပြန်စမ်းကြည့်ပေးပါ။ +onionServices.rendezvousFailed.longDescription=အချက်အလက်များ - %S — သုံးသူဘက်မှ ဝန်ဆောင်မှုနှင့် ပြန်လည်တွေ့ဆုံခြင်း ပျက်ကွက်ခဲ့၍ သုံးသူမှ ချိတ်ဆက်မှုအား မပြီးစီးနိုင်ပါ။ +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=အတည်ပြုခြင်း လိုအပ်ပါသည် +onionServices.clientAuthMissing.header=Onionsite သည် အတည်ပြုခြင်း လိုအပ်ပါသည် +onionServices.clientAuthMissing=Onionsite ထဲဝင်ရောက်ရန် ကုဒ်သော့တစ်ခု လိုအပ်ပါသည်၊ သို့သော်လည်း မည်သည့်ကုဒ်သော့မှ မလက်ခံတွေ့ရှိပါ။ +onionServices.clientAuthMissing.longDescription=အချက်အလက်များ - %S — သုံးသူမှ တောင်းဆိုထားသော Onion ဝန်ဆောင်မှု၏ ဖေါ်ပြစာအား ဒေါင်းလုပ်ဆွဲခဲ့ပါသည်၊ သို့သော်လည်း သုံးသူအတည်ပြုရန် အချက်အလက်များ မတွေ့ရှိ၍ ၎င်းအရာများကို ကုဒ်ပြန်ဖြည်ခြင်းမရပါ။ +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=အတည်ပြုခြင်း မအောင်မြင်ပါ +onionServices.clientAuthIncorrect.header=Onionsite အတည်ပြုခြင်း မအောင်မြင်ပါ +onionServices.clientAuthIncorrect=လက်ခံရရှိထားသော ကီးကုဒ်သည် မှားယွင်းနေပါသည် သို့မဟုတ် ပြန်လည်ရုပ်သိမ်းခံထားရပါသည်။ Onionsite စီမံသူအား ဆက်သွယ်ပေးပါ။ +onionServices.clientAuthIncorrect.longDescription=အချက်အလက်များ - %S — သုံးသူမှ တောင်းဆိုထားသော Onion ဝန်ဆောင်မှု၏ ဖေါ်ပြစာအား ဒေါင်းလုပ်ဆွဲနိုင်ခဲ့ပါသည်၊ သို့သော်လည်း သုံးသူ၏ အတည်ပြုသော အချက်အလက်များသုံး၍ ၎င်းအရာများကို ကုဒ်ပြန်ဖြည်ခြင်းမရပါ။ ဆိုသည်မှာ ဝင်ရောင်သုံးခွင့် ပြန်လည်ရုပ်သိမ်းခံရခြင်း ဖြစ်နိုင်ပါသည်။ +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.badAddress.header=Onionsite လိပ်စာ မမှန်ကန်ပါ +onionServices.badAddress=လက်ခံပေးထားသော Onionsite လိပ်စာသည် မမှန်ကန်ပါ။ ကျေးဇူးပြု၍ မှန်ကန်စွာ ဖြည်းထားပေးရန် စစ်ပေးပါ။ +onionServices.badAddress.longDescription=အချက်အလက်များ - %S — လက်ခံပေးထားသော .onion လိပ်စာသည် မမှန်ကန်ပါ။ ဤမှားယွင်းမှုသည် အောက်ပါအကြောင်းပြချက်များကြောင့်ဖြစ်ပါသည် - လိပ်စာစာလုံးတွဲ မကိုက်ညီပါ၊ ed25519 အများသုံးကီးကုဒ်သည် မမှန်ကန်ပါ သို့်မဟုတ် ကုဒ်ဖြင့်ပြောင်းလဲဝှက်ခြင်းသည် အကျုံးမဝင်ပါ။ +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Onionsite အားတင်ခြင်း ပြဿနာရှိပါသည် +onionServices.introTimedOut.header=Onionsite ဖြတ်လမ်းဖန်တီးခြင်း အချိန်ကုန်ဆုံးသွားပါပြီ +onionServices.introTimedOut=Onionsite ဖြင့် ချိတ်ဆက်မှု မအောင်မြင်ပါ၊ ချိန်ဆက်မှုလိုင်း မကောင်းသောကြောင့် ဖြစ်နိုင်ပါသည်။ +onionServices.introTimedOut.longDescription=အချက်အလက်များ - %S — တောင်းဆိုထားသော Onion ဝန်ဆောင်မှုဖြင့် ချိတ်ဆက်မှု ဖြတ်လမ်းဆက်သွယ်နေတုန်း အချိန်ကုန်ဆုံးသွားပါပြီ။ +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S သည် သင်အတည်ပြုရန် တောင်းဆိုနေပါသည်။ +onionServices.authPrompt.keyPlaceholder=ဤ onion ဝန်ဆောင်မှုအတွက် သင့် သီးသန့်ကီးကုဒ်အား ရိုက်ထည့်ပေးပါ။ +onionServices.authPrompt.done=ပြီးသွားပြီ +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=အကျုံးဝင်သော ကီးကုဒ် ရိုက်ထည့်ပေးပါ (base32 အက္ခရာလုံး ၅၂ လုံး သို့မဟုတ် base64 အက္ခရာလုံး ၄၄ လုံး) +onionServices.authPrompt.failedToSetKey=သင့် ကီးကုဒ်ဖြင့် Tor အား ချိန်ဆပြင်ဆင်၍ မရပါ +onionServices.authPreferences.header=Onion ဝန်ဆောင်မှုများ အတည်ပြုခြင်း +onionServices.authPreferences.overview=အချို့ onion ဝန်ဆောင်မှုများ အသုံးမပြုခင် ကီးကုဒ် (စကားဝှက်လိုမျိုး) ဖြင့် သင့်အထောက်အထားပြရန် လိုအပ်ပါသည်။ +onionServices.authPreferences.savedKeys=သိမ်းထားသော ကီးကုဒ်များ... +onionServices.authPreferences.dialogTitle=Onion ဝန်ဆောင်မှု ကီးကုဒ်များ +onionServices.authPreferences.dialogIntro=အောက်ပါ onionsites များအတွက် ကီးကုဒ်များသည် သင့် ကွန်ပျူတာပေါ်တွင် သိမ်းဆည်းထာပါသည် +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=ကီးကုဒ် +onionServices.authPreferences.remove=ဖယ်ရှားမယ် +onionServices.authPreferences.removeAll=အားလုံး ဖယ်ရှားမယ် +onionServices.authPreferences.failedToGetKeys=Tor မှ ကီးကုဒ်များ မရယူနိုင်ပါ +onionServices.authPreferences.failedToRemoveKey=ကီးကုဒ် ဖယ်ရှား၍မရပါ +onionServices.v2Deprecated.pageTitle=V2 Onion Site အား မကြာမီပိတ်သိမ်းမည်ဖြစ်ကြောင်း သတိပေးချက် +onionServices.v2Deprecated.header=Onion Site ဗားရှင်း ၂ များအား မကြာမီပိတ်သိမ်းသွားမည် +onionServices.v2Deprecated=ဤ Onion Site အားဆက်သွယ်၍မရရှိနိုင်ပါ။ Site စီမံသူအား ဆက်သွယ်ပြီး Upgrade လုပ်ဖို့ အကြံပေးပါ။ +onionServices.v2Deprecated.longDescription=Tor ၏ ဒုတိယ ဗားရှင်း Onion ဝန်ဆောင်မှုများအား ၂၀၂၁ ခု၊ ဇူလိုင်လ မှစတင်ပြီး ဖျက်သိမ်းသွားမည်ဖြစ်ပါ၍ သင်သည် Site စီမံသူတစ်ဦးဖြစ်ပါက သင်၏ Site အား တတိယ ဗားရှင်း အား Upgrade လုပ်ပါ။ +onionServices.v2Deprecated.tryAgain=ရသွားပါပြီ +onionServices.v2Deprecated.tooltip=ဤ Onion Site သည်မကြာမီ ဆက်သွယ်အသုံးပြု၍ ရနိုင်တော့မည် မဟုတ်ပါ။ + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Onions များကို အမြဲ ဦးစားပေးမယ် +onionLocation.alwaysPrioritizeAccessKey=P +onionLocation.notNow=ယခုမဟုတ် +onionLocation.notNowAccessKey=P +onionLocation.description=Tor ကွန်ယက်ပေါ်တွင် onion ဝန်ဆောင်မှုများဖြင့် တစ်ဆင့် ပိုမိုလုံခြုံစိတ်ချရသော ၎င်းဆိုဒ်၏ ဗားရှင်းရှိပါသည်။ Onion ဝန်ဆောင်မှုများသည် ဝဘ်ဆိုဒ်ထုတ်ဝေသူများ နှင့် သုံးသူများအတွက် စောင့်ကြည့်လိုက်ခံခြင်း နှင့် ဆင်ဆာဖြတ်ခံရခြင်းတို့ကို နှိမ်နင်းပေးနိုင်ပါသည်။ +onionLocation.tryThis=Onion ဝန်ဆောင်မှုများ စမ်းသုံးကြည့်ပါ +onionLocation.onionAvailable=.onion ရရှိနိုင် +onionLocation.learnMore=ထပ်မံလေ့လာရန်... +onionLocation.always=အမြဲတမ်း +onionLocation.askEverytime=အချိန်တိုင်းမေးပါ +onionLocation.prioritizeOnionsDescription=.onion ဆိုဒ်များ သိရှိလျှင် ၎င်းတို့ကို ဦးစားပေးပါ။ +onionLocation.onionServicesTitle=Onion Services + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=ခရစ်ပတိုငွေကြေး လိပ်စာ တစ်ခုအား မလုံခြုံသည့် ဝက်ဘ်ဆိုဒ် တစ်ခုမှကူးယူထားသည်။ ထိုလိပ်စာသည် မွမ်းမံပြုပြင်ထားခြင်းဖြစ်နိုင်သည်။ +cryptoSafetyPrompt.whatCanHeading=ထို့အတွက် သင်ဘာလုပ်နိုင်သလဲ? +cryptoSafetyPrompt.whatCanBody=လုံခြုံသော ဆက်သွယ်မှုတည်ဆောက်နိုင်ရန်အတွက် ပတ်လမ်းသစ် တစ်ခုအသုံးပြုပြီး ပြန်လည် ချိတ်ဆက်ပါ။ သို့မဟုတ် ဤသတိပေးချက်အား လစ်လျူရှုပြီး ဖြစ်လာနိုင်မည့် ဆိုကျိုးများအား လက်ခံပါ။ +cryptoSafetyPrompt.learnMore=ထပ်မံလေ့လာမယ် +cryptoSafetyPrompt.primaryAction=တက်ဘ်ကို ပတ်လမ်းသစ်တစ်ခုအသုံးပြု၍ Reload လုပ်ပေးပါ။ +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=သတိပေးချက်အား လစ်လျူရှုမည်။ +cryptoSafetyPrompt.secondaryActionAccessKey=ခ + +# about:rulesets strings. +rulesets.warningTitle=သတိဖြင့် ဆက်လက်လုပ်ဆောင်မည် +rulesets.warningDescription=စည်းမျဥ်းများအား ပြောင်းလဲခြင်းကြောင့် သင့် ဘရောင်ဇာအား မသမာသူများမှ လာရောက်တိုက်ခိုက်နိုင်သည်။ သင်ဘာလုပ်နေသည်ကို ကောင်းကောင်းနားလည်ထားမှ ဆက်လက် ဆောင်ရွက်ပါ။ +rulesets.warningEnable=ဤ အလေးပေးရွေးချယ်မှုများအား ရွေးချယ်မိလျင် ကျွနု်ပ်အားသတိပေးပါ။ +rulesets.warningButton=အကျိုးဆက်အားနားလည်သည်။ ဆက်လုပ်မည်။ +# Ruleset list +rulesets.rulesets=စည်းမျဥ်းများ +rulesets.noRulesets=မည်သည့်စည်းမျဥ်းမျှ မသတ်မှတ်ထားပါ။ +rulesets.noRulesetsDescr=Tor Browser ထဲတွင် စည်းမျဥ်းများအား သိမ်းဆည်းလျင် ဤနေရာတွင် ပေါ်လာလိမ့်မည်။ +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=နောက်ဆုံး အပ်ဒိတ် လုပ်ထားသည်။ +rulesets.neverUpdated=တစ်ခါမျှ အပ်ဒိတ် မလုပ်ထားပါ။ သို့မဟုတ် နောက်ဆုံး အပ်ဒိတ် မအောင်မြင်ပါ။ +rulesets.enabled=ဖွင့်ထားသည် +rulesets.disabled=ပိတ်ထားသည် +# Ruleset details/edit ruleset +rulesets.edit=တည်းဖြတ်ရန် +rulesets.name=အမည် +rulesets.jwk=JWK +rulesets.pathPrefix=လမ်းကြောင်း ရှေ့ဆက် +rulesets.scope=အတိုင်းအတာ +rulesets.enable=ဤစည်းမျဥ်းများအား ပြဌာန်းပါ။ +rulesets.checkUpdates=အပ်ဒိတ် ရပြီလားကြည့်ပါ။ +rulesets.jwkPlaceholder=ဤစည်းမျဥ်းများထဲတွင် အသုံးပြုထားသော JWK (JSON Web Key) ဖောမတ် ကီး +rulesets.jwkInvalid=ဤ JWK အား ဖတ်၍မရနိုင်ပါ။ သို့မဟုတ် ဤကီးသည် အသုံးမဝင်ပါ။ +rulesets.pathPrefixPlaceholder=စည်းမျဥ်းများမှ လိုအပ်သော ဖိုင်များပါဝင်သော URL ရှေ့ဆက် +rulesets.pathPrefixInvalid=ဤ လမ်းကြောင်း ရှေ့ဆက်သည် အသုံးဝင်သော HTTP(S) URl ဟုတ်မနေပါ။ +rulesets.scopePlaceholder=စည်းမျဥ်းများ၏ အတိုင်းအတာအား ပုံမှန် ဖော်ပြချက် +rulesets.scopeInvalid=ဤ အတိုင်းအတာသည် ပုံမှန်ဖော်ပြချက်အနေဖြင့် ဖတ်၍မရနိုင်ပါ။ +rulesets.save=သိမ်းရန် +rulesets.cancel=ပယ်ဖျက်မည် diff --git a/toolkit/torbutton/chrome/locale/my/torlauncher.properties b/toolkit/torbutton/chrome/locale/my/torlauncher.properties new file mode 100644 index 000000000000..f3af687544f8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/my/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Launcher + +torlauncher.tor_exited_during_startup=Tor သည် စတင်နေတုန်း ထွက်ခွာသွားသည်။ ၎င်းဖြစ်ရပ်မှုသည် သင့် torrc ဖိုင်ပျက်ကွက်မှု၊ Tor သို့မဟုတ် သင့် စစ်စတန်စနစ်ပေါ်တွင်ရှိသော အခြား အပ္ပလီကေးရှင်း၏ ပျက်ကွက်မှု၊ သို့မဟုတ် ချိုးယွင်းနေသော ဟာ့ဒ်ဝဲ ကြောင့်ဖြစ်နိုင်ပါသည်။ သင်မှ ပြဿနာ၏ အရင်းအမြစ်ကို ဖြေရှင်းပြီး Tor ကို ပိတ်ပြီးပြန်ဖွင့် (restart) လုပ်သည်အထိ Tor သည် အလုပ်မလုပ်ပါ။ +torlauncher.tor_exited=မမျှော်လင့်ဘဲ Tor သည်ပိတ်သွားပါသည်။ ၎င်းဖြစ်ရပ်သည် Tor တွင်း သို့မဟုတ် သင့်စစ်စတန်စနစ်ပေါ်တွင်ရှိသော အခြား အပ္ပလီကေးရှင်း၏ ပျက်ကွက်မှု၊ သို့မဟုတ် ချို့ယွင်းနေသော ဟာ့ဒ်ဝဲ ကြောင့်ဖြစ်နိုင်ပါသည်။ သင်မှ Tor ကို ပိတ်ပြီးပြန်ဖွင့်ခြင်း (restart) လုပ်သည်အထိ Tor ဘရောင်ဇာသည် မည်သည့် ဝဘ်ဆိုဒ်ကိုမှ ဖွင့်မရပါ။ ပြဿနာသည် ဆက်ဖြစ်နေသေးလျှင် ကျွန်ုပ်တို့ အကူအညီပေးသော အသင်� ��စီသို့ Tor မှတ်တမ်းကူးပို့ပေးပါ။ +torlauncher.tor_exited2=Tor ကို ပိတ်ပြီးပြန်ဖွင့်ခြင်း (restart) ဖြင့် ဖွင့်ထားသော ဘရောင်ဇာတက်ဘ်များ (browser tabs) မပိတ်သွားပါ။ +torlauncher.tor_controlconn_failed=Tor ထိန်းချုပ်သော port နှင့် ချိတ်ဆက်လို့မရပါ။ +torlauncher.tor_failed_to_start=Tor စတင်ခြင်း မအောင်မြင်ပါ။ +torlauncher.tor_control_failed=Tor ကို မထိန်းချုပ်နိုင်ခဲ့ပါ။ +torlauncher.tor_bootstrap_failed=Tor မှ Tor ကွန်ယက်နှင့် ချိတ်ဆက်မှု ပြုလုပ်ခြင်း မအောင်မြင်ပါ။ +torlauncher.tor_bootstrap_failed_details=%1$S မအောင်မြင်ပါ (%2$S) + +torlauncher.unable_to_start_tor=Tor အား စတင်လို့မရပါ။\n\n%S +torlauncher.tor_missing=Tor လည်ပတ်ရန်ဖိုင် ပျောက်နေပါသည်။ +torlauncher.torrc_missing=Torcc ဖိုင်သည် ပျောက်နေပြီး ဖန်တီး၍ မရပါ။ +torlauncher.datadir_missing=Tor ဒေတာ လမ်းညွှန်ကြောင်းသည် တည်ရှိမှုမရှိ၍ ဖန်တီးလို့မရပါ။ +torlauncher.onionauthdir_missing=Tor onion အတည်ပြုရန် လမ်းညွှန်ကြောင်း တည်ရှိမှုမရှိ၍ ဖန်တီးလို့မရပါ။ +torlauncher.password_hash_missing=တစ်ဖက်သာ ကုဒ်ဖြင့်ပြောင်းလဲထားသော စကားဝှက် ရယူခြင်း မအောင်မြင်ပါ။ + +torlauncher.failed_to_get_settings=Tor အပြင်အဆင်များ ရယူ၍မရပါ။\n\n%S +torlauncher.failed_to_save_settings=Tor အပြင်အဆင်များ သိမ်းဆည်း၍မရပါ။\n\n%S +torlauncher.ensure_tor_is_running=ကျေးဇူးပြု၍ Tor အလုပ်လုပ်နေကြောင်း သေချာစစ်ပါ။ + +torlauncher.error_proxy_addr_missing=အင်တာနက်ကို သုံးစွဲနိုင်ရန် ပရောက်ဇီကို ခံပြီး Tor ကို ပြင်ဆင်ရန် IP လိပ်စာ (သို့) host အမည် နှင့် port နံပါတ် တစ်ခုကို တွဲပြီး သတ်မှတ်ဖို့ လိုသည်။ +torlauncher.error_proxy_type_missing=ပရောင်ဇီ အမျိုးအစားကို ရွေးချယ်ရမည်။ +torlauncher.error_bridges_missing=Bridge တစ်ခု (သို့) တစ်ခုမက ရွေးချယ်ရမည်။ +torlauncher.error_default_bridges_type_missing=ထောက်ပံ့ထားသော ချိတ်ဆက်တံတားများအတွက် သယ်ယူရေး အမျိုးအစား တစ်ခု ရွေးရပါမည်။ +torlauncher.error_bridgedb_bridges_missing=ကျေးဇူးပြု၍ ချိတ်ဆက်တံတား တောင်းဆိုပေးပါ။ +torlauncher.error_bridge_bad_default_type=ထောက်ပံ့နေသော မည်သည့် ချိတ်ဆက်တံတားသည် %S ဆိုသည့် သယ်ယူအမျိုးအစား မရှိပါ။ သင့် အပြင်အဆင်များကို ချိန်ညှိပေးပါ။ + +torlauncher.bridge_suffix.meek-amazon=(တရုတ်ပြည်တွင် အလုပ်လုပ်သည်) +torlauncher.bridge_suffix.meek-azure=(တရုတ်ပြည်တွင် အလုပ်လုပ်သည်) + +torlauncher.request_a_bridge=ချိတ်ဆက်တံတား တောင်းဆိုပါ... +torlauncher.request_a_new_bridge=ချိတ်ဆက်တံတားအသစ် တောင်းဆိုပါ... +torlauncher.contacting_bridgedb=BridgeDB ချိတ်ဆက်တံတားနှင့် ဆက်သွယ်နေသည်။ ခေတ္တစောင့်ပေးပါ။ +torlauncher.captcha_prompt=လူဟုတ်မဟုတ်စစ်ဆေးမှုကို ဖြေ၍ bridge အား တောင်းဆိုပါ +torlauncher.bad_captcha_solution=ဖြေရှင်းမှုသည် မမှန်ကန်ပါ။ ပြန်စမ်းကြည့်ပေးပါ။ +torlauncher.unable_to_get_bridge=BridgeDB မှ ချိတ်ဆက်တံတား မရယူနိုင်ပါ။\n\n%S +torlauncher.no_meek=ဘရောင်ဇာသည် အင်တာနက် အသွားအလာအယောင်အဆောင်ပြုရန် (meek) မစီမံထားပါ၊ ချိတ်ဆက်တံတားများ ရယူရန် လိုအပ်ပါသည်။ +torlauncher.no_bridges_available=သည်အချိန်တွင် မည်သည့် ချိတ်ဆက်တံတားမှ မရနိုင်ပါ။ ဝမ်းနည်းပါသည်။ + +torlauncher.connect=ချိတ်ဆက်ရန် +torlauncher.restart_tor=Tor ကို ပြန်လည်စတင်မည် +torlauncher.quit=ထွက်ရန် +torlauncher.quit_win=ထွက်ရန် +torlauncher.done=ပြီးပါပြီ + +torlauncher.forAssistance=အကူအညီတောင်းရန် %S သို့ဆက်သွယ်ပါ +torlauncher.forAssistance2=အကူအညီရယူရန် %S သို့ ဝင်ရောက်လေ့လာပါ + +torlauncher.copiedNLogMessages=ကော်ပီကူး ယူပြီးပါပြီ။ %S Tor မှတ်တမ်းမက်ဆေ့ချ်များသည် စာသားအယ်ဒီတာ (text editor) သို့မဟုတ် အီးမေးလ်မက်ဆေ့ချ် ပေါ်သို့ ကူးယူရန် အဆင်သင့်ဖြစ်ပါပြီး။ + +torlauncher.bootstrapStatus.starting=စနေပြီ +torlauncher.bootstrapStatus.conn_pt=ချိတ်ဆက်တံတား နှင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.conn_done_pt=ချိတ်ဆက်တံတား နှင့် ချိတ်ပြီးပါပြီ +torlauncher.bootstrapStatus.conn_proxy=ကြားခံ proxy နှင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.conn_done_proxy=ကြားခံ proxy နှင့် ချိတ်ဆက်ပြီး +torlauncher.bootstrapStatus.conn=Tor လက်ဆင့်ကမ်းမှု ဖြင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.conn_done=Tor လက်ဆင့်ကမ်းမှု ဖြင့် ချိတ်ဆက်ပြီး +torlauncher.bootstrapStatus.handshake=Tor လက်ဆင့်ကမ်းမှု ဖြင့် ညှိနှိုင်းနေသည် +torlauncher.bootstrapStatus.handshake_done=Tor လက်ဆင့်ကမ်းမှု ဖြင့် ညှိနှိုင်းပြီး +torlauncher.bootstrapStatus.onehop_create=ကုဒ်ဖြင့်စာဝှက်ထားသည့် ဖိုင်လမ်းကြောင်း ချိတ်ဆက်မှု တစ်ခု တည်ဆောက်နေသည် +torlauncher.bootstrapStatus.requesting_status=ကွန်ရက် အနေအထားကို ပြန်ရယူနေသည် +torlauncher.bootstrapStatus.loading_status=ကွန်ရက် အနေအထားကို ဖွင့်နေသည် +torlauncher.bootstrapStatus.loading_keys=လုပ်ပိုင်ခွင့် လက်မှတ်များကို ရယူနေသည် +torlauncher.bootstrapStatus.requesting_descriptors=လက်ဆင့်ကမ်း အချက်အလက်ကို တောင်းခံနေသည် +torlauncher.bootstrapStatus.loading_descriptors=လက်ဆင့်ကမ်း အချက်အလက်များကို ရယူနေသည် +torlauncher.bootstrapStatus.enough_dirinfo=လက်ဆင့်ကမ်း အချက်အလက်များ တင်ခြင်း ပြီးစီး +torlauncher.bootstrapStatus.ap_conn_pt=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - ချိတ်ဆက်တံတား နှင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.ap_conn_done_pt=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - ချိတ်ဆက်တံတား နှင့် ချိတ်ပြီးပါပြီ +torlauncher.bootstrapStatus.ap_conn_proxy=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - ကြားခံ proxy နှင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.ap_conn_done_proxy=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - ကြားခံ proxy နှင့် ချိတ်ပြီးပါပြီ +torlauncher.bootstrapStatus.ap_conn=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - Tor လက်ဆင့်ကမ်းမှု နှင့် ချိတ်နေသည် +torlauncher.bootstrapStatus.ap_conn_done=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - Tor လက်ဆင့်ကမ်းမှု နှင့် ချိတ်ပြီးပါပြီ +torlauncher.bootstrapStatus.ap_handshake=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - Tor လက်ဆင့်ကမ်းမှု နှင့် ညှိနှိုင်းနေပါသည် +torlauncher.bootstrapStatus.ap_handshake_done=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - Tor လက်ဆင့်ကမ်းမှု နှင့် ညှိနှိုင်းပြီးပါပြီ +torlauncher.bootstrapStatus.circuit_create=လမ်းကြောင်းများ တည်ဆောက်နေပါသည် - Tor လမ်းကြောင်း ထူထောင်နေပါသည် +torlauncher.bootstrapStatus.done=Tor ကွန်ရက်ကို ချိတ်ဆက်မိသည်! + +torlauncher.bootstrapWarning.done=ပြီးသွားပြီ +torlauncher.bootstrapWarning.connectrefused=ဆက်သွယ်မှုလိုင်း မရပါ +torlauncher.bootstrapWarning.misc=အထွေထွေ +torlauncher.bootstrapWarning.resourcelimit=အရင်းအမြစ်များ မလုံလောက်ပါ +torlauncher.bootstrapWarning.identity=အထောက်အထား မကိုက်ညီပါ +torlauncher.bootstrapWarning.timeout=ချိတ်ဆက်မှုလိုင်း ပြတ်သွားသည် +torlauncher.bootstrapWarning.noroute=Host ကို သွားမည့် လမ်းမရှိပါ +torlauncher.bootstrapWarning.ioerror=အရေး/အဖတ် ချို့ယွင်းချက် +torlauncher.bootstrapWarning.pt_missing=အသွားအလာအယောင်ဆောင်မှု ကိရိယာ ပျောက်နေပါသည် + +torlauncher.nsresult.NS_ERROR_NET_RESET=ဆာဗာနှင့် ချိတ်ဆက်မှု ပျောက်ဆုံးခဲ့ပါသည်။ +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=ဆာဗာနှင့် မချိတ်ဆက်နိုင်ခဲ့ပါ။ +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=ကြားခံ proxy နှင့် မချိတ်ဆက်နိုင်ခဲ့ပါ။ + +torlauncher.copiedNLogMessagesShort=%S မှတ်တမ်းများကို ကူးယူခဲ့သည် ။ diff --git a/toolkit/torbutton/chrome/locale/nb-NO/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/nb-NO/aboutDialog.dtd new file mode 100644 index 000000000000..708242f24a2a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; blir utviklet av"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", en veldedig organisasjon som jobber for å forsvare ditt personvern og din frihet på nett."> + +<!ENTITY help.start "Vil du hjelpe?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Doner"> +<!ENTITY help.or "eller"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "involver deg"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Spørsmål?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Hjelp Tor-nettverket å vokse!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Lisensinformasjon"> +<!ENTITY tor.TrademarkStatement ""Tor" og "Løk-logoen" er registrerte varemerker tilhørende the Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/nb-NO/aboutTBUpdate.dtd new file mode 100644 index 000000000000..d5dce1898adb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor-nettleseren sin endringslogg"> +<!ENTITY aboutTBUpdate.updated "Tor-nettleseren har blitt oppdatert."> +<!ENTITY aboutTBUpdate.linkPrefix "For den mest oppdaterte informasjonen om denne utgivelsen,"> +<!ENTITY aboutTBUpdate.linkLabel "besøk vårt nettsted"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versjon"> +<!ENTITY aboutTBUpdate.releaseDate "Utgivelsesdato"> +<!ENTITY aboutTBUpdate.releaseNotes "Versjonsnotater"> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd b/toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd new file mode 100644 index 000000000000..af3757975b6f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Om Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Se Endringslogg"> + +<!ENTITY aboutTor.ready.label "Utforsk. Privat."> +<!ENTITY aboutTor.ready2.label "Du er klar for verdens mest private surfing opplevelse."> +<!ENTITY aboutTor.failure.label "Noe gikk galt!"> +<!ENTITY aboutTor.failure2.label "Tor fungerer ikke i denne nettleseren."> + +<!ENTITY aboutTor.search.label "Søk med DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Spørsmål?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Sjekk vår Tor Nettleser Håndbok »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Hånbok for Tor-nettleseren"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project er en US 501(c)(3) ideell organisasjon som fremmer menneskerettigheter og friheter ved å skape og distribuere anonymisering og personvernteknologi for fri og åpen kildekode, som støtter deres ubegrensede tilgjengelighet og bruk, og fremmer sin vitenskapelige og populære forståelse."> +<!ENTITY aboutTor.getInvolved.label "Bli involvert »"> + +<!ENTITY aboutTor.newsletter.tagline "Få de siste nyhetene fra Tor rett til innboksen din."> +<!ENTITY aboutTor.newsletter.link_text "Registrer deg for Tor-nyheter."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor er gratis å bruke, grunnet bidrag fra folk som deg."> +<!ENTITY aboutTor.donationBanner.buttonA "Donér nå"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONÉR NÅ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/brand.dtd b/toolkit/torbutton/chrome/locale/nb-NO/brand.dtd new file mode 100644 index 000000000000..c7e664b914d8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor-nettleseren"> +<!ENTITY brandShortName "Tor-nettleseren"> +<!ENTITY brandFullName "Tor-nettleseren"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 ""Tor" og "Løk-logoen" er registrerte varemerker tilhørende the Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klikk for å laste inn installerte systemtillegg"> +<!ENTITY plugins.installed.enable "Skru på programtillegg"> +<!ENTITY plugins.installed.disable "Skru av programtillegg"> +<!ENTITY plugins.installed.disable.tip "Klikk for å blokkere innlasting av systemtillegg"> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/brand.properties b/toolkit/torbutton/chrome/locale/nb-NO/brand.properties new file mode 100644 index 000000000000..950689dbed82 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor-nettleseren +brandShortName=Tor-nettleseren +brandFullName=Tor-nettleseren +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, en rask startside med innebygd søk +homePageImport=Importer startsiden din fra %S + +homePageMigrationPageTitle=Utvalg av startsider +homePageMigrationDescription=Velg startsiden du vil bruke: + +syncBrandShortName=Synkroniser diff --git a/toolkit/torbutton/chrome/locale/nb-NO/branding/brand.ftl b/toolkit/torbutton/chrome/locale/nb-NO/branding/brand.ftl new file mode 100644 index 000000000000..8f5ec6145921 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor-nettleseren +-brand-short-name = Tor-nettleseren +-brand-full-name = Tor-nettleseren +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' og 'Løk-logoen' er registrerte varemerker tilhørende the Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/nb-NO/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/nb-NO/browserOnboarding.properties new file mode 100644 index 000000000000..209fe6bde485 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Velkommen +onboarding.tour-tor-welcome.title=Du er klar. +onboarding.tour-tor-welcome.description=Tor-nettleseren tilbyr den høyeste standarden på personvern og sikkerhet mens du surfer på nettet. Du er nå beskyttet mot sporing, overvåkning og sensur. Denne raske onboarding vil vise deg hvordan. +onboarding.tour-tor-welcome.next-button=Gå til Personvern + +onboarding.tour-tor-privacy=Personvern +onboarding.tour-tor-privacy.title=Avvis snokere og sporing. +onboarding.tour-tor-privacy.description=Tor Nettleser isolerer informasjonskapsler og sletter nettleserens historie etter økten. Disse endringene sikrer at personvernet ditt og sikkerheten er beskyttet i nettleseren. Klikk "Tor-nettverk" for å lære hvordan vi beskytter deg på nettverksnivå. +onboarding.tour-tor-privacy.button=Gå til Tor-nettverk + +onboarding.tour-tor-network=Tor-nettverk +onboarding.tour-tor-network.title=Reis et desentralisert nettverk. +onboarding.tour-tor-network.description=Tor-nettleseren forbinder deg med Tor-nettet som drives av tusenvis av frivillige rundt om i verden. I motsetning til en VPN er det ingen feilpunkt eller sentralisert enhet du må stole på for å kunne nyte Internettet privat. +onboarding.tour-tor-network.description-para2=NYTT: Tor-nettverksinnstillinger, inkluderer muligheten til å be om broer der Tor er blokkert, kan nå finnes i Innstillinger. +onboarding.tour-tor-network.action-button=Juster dine Tor-nettverksinnstillinger +onboarding.tour-tor-network.button=Gå til Kretsvisning + +onboarding.tour-tor-circuit-display=Kretsvisning +onboarding.tour-tor-circuit-display.title=Se din vei. +onboarding.tour-tor-circuit-display.description=For hvert domene du besøker, blir trafikken din omdirigert og kryptert i en krets over tre Tor-reléer rundt om i verden. Ingen nettside vet hvor du kobler fra. Du kan be om en ny krets ved å klikke "Ny krets for dette nettstedet" på vår kretsvisning. +onboarding.tour-tor-circuit-display.button=Se Min Vei +onboarding.tour-tor-circuit-display.next-button=Gå til Sikkerhet + +onboarding.tour-tor-security=Sikkerhet +onboarding.tour-tor-security.title=Velg din opplevelse. +onboarding.tour-tor-security.description=Vi gir deg også tilleggsinnstillinger for å støte på nettleserens sikkerhet. Våre sikkerhetsinnstillinger lar deg blokkere elementer som kan brukes til å angripe datamaskinen din. Klikk nedenfor for å se hva de forskjellige alternativene gjør. +onboarding.tour-tor-security.description-suffix=Merk: Som standard er NoScript og HTTPS Everywhere ikke inkludert i verktøylinjen, men du kan tilpasse verktøylinjen din for å legge dem til. +onboarding.tour-tor-security-level.button=Se sikkerhetsnivået ditt +onboarding.tour-tor-security-level.next-button=Gå til opplevelsestips + +onboarding.tour-tor-expect-differences=Opplevelsestips +onboarding.tour-tor-expect-differences.title=Forvent noen forskjeller. +onboarding.tour-tor-expect-differences.description=Med alle de sikkerhets og personvernfunksjonene som Tor leverer, kan din erfaring mens du surfer på Internett, være litt annerledes. Det kan være litt tregere, og avhengig av sikkerhetsnivået, kan noen elementer ikke fungere eller lastes. Du kan også bli bedt om å bevise at du er et menneske og ikke en robot. +onboarding.tour-tor-expect-differences.button=se Ofte-Stilte-Spørsmål +onboarding.tour-tor-expect-differences.next-button=Gå til Løk-tjenester + +onboarding.tour-tor-onion-services=Løk-tjenester +onboarding.tour-tor-onion-services.title=Vær ekstra beskyttet. +onboarding.tour-tor-onion-services.description=Onion tjenester er nettsteder som slutter med en .onion som gir ekstra beskyttelse til utgivere og besøkende, inkludert ekstra sikkerhetskontroll mot sensur. Onion tjenester tillater alle å gi innhold og tjenester anonymt. Klikk nedenfor for å besøke DuckDuckGo sin løk-siden. +onboarding.tour-tor-onion-services.button=Besøk en løk-side +onboarding.tour-tor-onion-services.next-button=Ferdig + +onboarding.overlay-icon-tooltip-updated2=Se hva som er nytt\ni %S +onboarding.tour-tor-update.prefix-new=Ny +onboarding.tour-tor-update.prefix-updated=Oppdatert + +onboarding.tour-tor-toolbar=Verktøylinje +onboarding.tour-tor-toolbar-update-9.0.title=Farvel løk-knapp. +onboarding.tour-tor-toolbar-update-9.0.description=Vi ønsker at din erfaring med å bruke Tor skal være fullt integrert i Tor-nettleseren. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Istedenfor å bruke løk-knappen, så kan du se Tor-kretser via [i] i URL-linjen og be om en ny identitet ved å bruke verktøylinjeknappen eller [≡] -menyen. +onboarding.tour-tor-toolbar-update-9.0.button=Hvordan be om en Ny identitet +onboarding.tour-tor-toolbar-update-9.0.next-button=Gå til Tor-nettverk + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Neste +onboarding.tor-circuit-display.done=Ferdig +onboarding.tor-circuit-display.one-of-three=1 av 3 +onboarding.tor-circuit-display.two-of-three=2 av 3 +onboarding.tor-circuit-display.three-of-three=3 av 3 + +onboarding.tor-circuit-display.intro.title=Hvordan fungerer kretser? +onboarding.tor-circuit-display.intro.msg=Kretsene består av tilfeldig tilordnede reléer, som er datamaskiner rundt om i verden, konfigurert til å sende Tor-trafikk. Kretser lar deg bla gjennom privat og koble til løktjenester. + +onboarding.tor-circuit-display.diagram.title=Kretsvisning +onboarding.tor-circuit-display.diagram.msg=Dette diagrammet viser reléene som utgjør kretsen for denne nettsiden. For å forhindre kobling av aktivitet på forskjellige nettsteder, får hver nettside en annen krets. + +onboarding.tor-circuit-display.new-circuit.title=Trenger du en ny krets? +onboarding.tor-circuit-display.new-circuit.msg=Hvis du ikke kan koble til nettstedet du prøver å besøke, eller det ikke lastes riktig, kan du bruke denne knappen til å laste siden på nytt med en ny krets. diff --git a/toolkit/torbutton/chrome/locale/nb-NO/network-settings.dtd b/toolkit/torbutton/chrome/locale/nb-NO/network-settings.dtd new file mode 100644 index 000000000000..574e2d3a9924 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Nettverksinnstillinger for Tor"> +<!ENTITY torsettings.wizard.title.default "Koble til Tor"> +<!ENTITY torsettings.wizard.title.configure "Nettverksinnstillinger for Tor"> +<!ENTITY torsettings.wizard.title.connecting "Etablering av tilkobling"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Språk i Tor-nettleseren"> +<!ENTITY torlauncher.localePicker.prompt "Vennligst velg et språk"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klikk "koble til" for å koble til Tor."> +<!ENTITY torSettings.configurePrompt "Klikk "Sett opp" for å justere nettverksinnstillinger hvis du er i et land som sensurerer Tor (som Egypt, Kina, Tyrkia,) eller hvis du kobler til fra et privat nettverk som krever en mellomtjener."> +<!ENTITY torSettings.configure "Sett opp"> +<!ENTITY torSettings.connect "Koble til"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Venter på at Tor skal starte…"> +<!ENTITY torsettings.restartTor "Omstart av Tor"> +<!ENTITY torsettings.reconfigTor "Sett opp på ny"> + +<!ENTITY torsettings.discardSettings.prompt "Du har satt opp Tor-broer eller du har angitt lokale mellomtjeningsinnstillinger.   For å gjøre en direkte forbindelse til Tor-nettverket, må disse innstillingene fjernes."> +<!ENTITY torsettings.discardSettings.proceed "Fjern innstillinger og koble til"> + +<!ENTITY torsettings.optional "Valgfritt"> + +<!ENTITY torsettings.useProxy.checkbox "Jeg bruker en mellomtjener, for å koble til Internett"> +<!ENTITY torsettings.useProxy.type "Mellomtjener-type"> +<!ENTITY torsettings.useProxy.type.placeholder "velg en mellomtjener-type"> +<!ENTITY torsettings.useProxy.address " Adresse"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-adresse, eller vertsnavn"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Brukernavn"> +<!ENTITY torsettings.useProxy.password "Passord"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Denne datamaskinen går gjennom en brannmur som kun tillater tilkoblinger til visse porter"> +<!ENTITY torsettings.firewall.allowedPorts "Tillatte porter"> +<!ENTITY torsettings.useBridges.checkbox "Tor er sensurert i mitt land"> +<!ENTITY torsettings.useBridges.default "Velg en bro med flere innfartsårer"> +<!ENTITY torsettings.useBridges.default.placeholder "velg en bro"> +<!ENTITY torsettings.useBridges.bridgeDB "Forespør en bro fra torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Skriv inn tegnene fra bildet"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Få en ny utfordring"> +<!ENTITY torsettings.useBridges.captchaSubmit "Send inn"> +<!ENTITY torsettings.useBridges.custom "Tilby en bro jeg kjenner"> +<!ENTITY torsettings.useBridges.label "Skriv inn broinformasjon fra en betrodd kilde."> +<!ENTITY torsettings.useBridges.placeholder "type addresse:port (én per linje)"> + +<!ENTITY torsettings.copyLog "Kopier Tor-loggen til utklippstavlen"> + +<!ENTITY torsettings.proxyHelpTitle "Mellomtjenerhjelp"> +<!ENTITY torsettings.proxyHelp1 "En lokal mellomtjener kan være nødvendig når du kobler deg gjennom et firma, skole eller universitet nettverk.  Hvis du ikke er sikker på om en mellomtjener er nødvendig, kan du se på Internett-innstillingene i en annen nettleser eller kontrollere systemets nettverksinnstillinger."> + +<!ENTITY torsettings.bridgeHelpTitle "Hjelp med Bro-reléoppsett"> +<!ENTITY torsettings.bridgeHelp1 "Broer er ulistede rutingstafettoppsett som gjør det vanskeligere å blokkere tilkoblinger til Tor-nettverket.  Hver type bro bruker en egen måte å unngå sensur.  Obfs-broene får trafikken din til å se ut som tilfeldig støy, og de ydmyke broene får broene til å se ut som de kobler til en annen tjeneste enn Tor."> +<!ENTITY torsettings.bridgeHelp2 "På grunn av hvordan noen land prøver å blokkere Tor, fungerer noen broer i noen land, men ikke i andre.. Hvis du er usikker på hvilke broer som fungerer i ditt land, besøk torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Vent mens tilkobling til Tor-nettverket opprettes.  Dette kan ta flere minutter."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Tilkobling"> +<!ENTITY torPreferences.torSettings "Tor-innstillinger"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser dirigerer trafikken din over Tor-nettverket, drevet av tusenvis av frivillige rundt om i verden." > +<!ENTITY torPreferences.learnMore "Lær mer"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Tilkoblet"> +<!ENTITY torPreferences.statusInternetOffline "Frakoblet"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Tilkoblet"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Lær mer"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Broer"> +<!ENTITY torPreferences.bridgesDescription "Broer hjelper deg med å få tilgang til Tor-nettverket på steder der Tor er blokkert. Avhengig av hvor du er, kan det hende at en bro fungerer bedre enn en annen."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatisk"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Fjern"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Kopiert!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Forespør en bro…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avansert"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Vis logger..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Avbryt"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Forespør en bro"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kontakter BridgeDB. Vennligst vent."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Løs CAPTCHA-en for å forespørre en bro."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Løsningen er ikke riktig. Vær så snill, prøv på nytt."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor-logger"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "Kobler til..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatisk"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Prøv igjen"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/onboarding.properties b/toolkit/torbutton/chrome/locale/nb-NO/onboarding.properties new file mode 100644 index 000000000000..da62a3657089 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Ny på %S?\nLa oss komme i gang. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S er helt ny.\nSe hva du kan gjøre! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Lukk +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Ignorer +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Fullført diff --git a/toolkit/torbutton/chrome/locale/nb-NO/torbutton.dtd b/toolkit/torbutton/chrome/locale/nb-NO/torbutton.dtd new file mode 100644 index 000000000000..eb40733f225f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Ny identitet"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Ny identitet"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Ny Tor-krets for denne siden"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Nettverksinnstillinger for Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Se etter oppdatering for Tor-nettleseren…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Informasjonskapsels-beskyttelse…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klikk for å igangsette Tor-knappen"> +<!ENTITY torbutton.prefs.security_settings "Sikkerhetsinnstillinger for Tor-nettleseren"> +<!ENTITY torbutton.cookiedialog.title "Administrer beskyttelse av informasjonskapsler"> +<!ENTITY torbutton.cookiedialog.lockCol "Beskyttet"> +<!ENTITY torbutton.cookiedialog.domainCol "Vert"> +<!ENTITY torbutton.cookiedialog.nameCol "Navn"> +<!ENTITY torbutton.cookiedialog.pathCol "Rute"> +<!ENTITY torbutton.cookiedialog.protectCookie "Beskytt Informasjonskapsel"> +<!ENTITY torbutton.cookiedialog.removeCookie "Fjern Informasjonskapsel"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Ikke beskytt informasjonskapsel"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Fjern alle bortsett fra beskyttede"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Beskytt nye informasjonskapsler"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Ikke beskytt nye informasjonskapsler"> +<!ENTITY torbutton.prefs.sec_caption "Sikkerhetsnivå"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Sikkerhetsglidebryteren lar deg skru av forskjellige nettleserfunksjoner som kan eksponere deg for risiko."> +<!ENTITY torbutton.prefs.sec_standard_label "Forvalg"> +<!ENTITY torbutton.prefs.sec_standard_description "Alle Tor-nettleser- og nettside-funksjoner er på."> +<!ENTITY torbutton.prefs.sec_safer_label "Tryggere"> +<!ENTITY torbutton.prefs.sec_safer_description "Skrur av nettsidefunksjoner som ofte er farlige, som gjør at noen sider blir skadelidende."> +<!ENTITY torbutton.prefs.sec_safer_list_label "På den tryggere innstillingen:"> +<!ENTITY torbutton.prefs.sec_safest_label "Tryggest"> +<!ENTITY torbutton.prefs.sec_safest_description "Tillater bare nettsidefunksjoner som kreves for statiske sider og grunnleggende tjenester. Disse endringene har innvirkning på bilder, media, og skript."> +<!ENTITY torbutton.prefs.sec_safest_list_label "På den tryggeste innstillingen:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Lær mer"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript er avskrudd på sider som ikke er HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript er som forvalg slått av for alle nettsteder."> +<!ENTITY torbutton.prefs.sec_limit_typography "Noen skrifter og mattesymboler er avskrudd."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Noen skrifter, ikoner, mattesymboler og bilder er avskrudd."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Lyd og video (HTML5 media), og WebGL er klikk-å-spille."> +<!ENTITY torbutton.prefs.sec_custom_warning "Egendefinert"> +<!ENTITY torbutton.prefs.sec_overview "Deaktiver visse webfunksjoner som kan brukes til å angripe sikkerheten din og anonymiteten."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Sikkerhetsnivå: Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Sikkerhetsnivå: Sikrere"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Sikkerhetsnivå: Sikreste"> +<!ENTITY torbutton.prefs.sec_custom_summary "Dine nettleserinnstillinger har ført med seg uvanlige sikkerhetsvalg. Av sikkerhet- og personverns-hensyn anbefaler vi at du velger en av de forvalgte sikkerhetsnivåene."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Gjenopprett forvalg"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Avanserte sikkerhetsinnstillinger..."> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Tor-krets"> +<!ENTITY torbutton.circuit_display.new_circuit "Ny krets for denne siden"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Åpne løk-tjeneste klient autentiserings-ledetekst"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Husk denne nøkkelen"> diff --git a/toolkit/torbutton/chrome/locale/nb-NO/torbutton.properties b/toolkit/torbutton/chrome/locale/nb-NO/torbutton.properties new file mode 100644 index 000000000000..222c0e6faca8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internett +torbutton.circuit_display.ip_unknown = Ukjent IP +torbutton.circuit_display.onion_site = Løk-side +torbutton.circuit_display.this_browser = Denne nettleseren +torbutton.circuit_display.relay = Relè +torbutton.circuit_display.tor_bridge = Bro +torbutton.circuit_display.unknown_country = Ukjent land +torbutton.circuit_display.guard = Vakt +torbutton.circuit_display.guard_note = Din [Vakt] node kan ikke endres. +torbutton.circuit_display.learn_more = Lær mer +torbutton.circuit_display.click_to_copy = Trykk for å kopiere +torbutton.circuit_display.copied = Kopiert! +torbutton.content_sizer.margin_tooltip = Tor Nettleser legger til denne marginen for å gjøre bredden og høyden på vinduet ditt mindre særegent, og reduserer dermed muligheten for folk til å spore deg på nett. +extensions.torbutton@torproject.org.description = Torbutton tilbyr en knapp til å sette opp Tor-innstillinger, samt rask og enkel tilgang til å slette privat nettleserhistorikk. +torbutton.popup.external.title = Last ned en ekstern filtype? +torbutton.popup.external.app = Tor Nettleser kan ikke åpne denne filen. Du er nødt til å åpne den med et annet program.\n\n +torbutton.popup.external.note = Noen filtyper kan forårsake at programmer kobler til internett uten å bruke Tor.\n +torbutton.popup.external.suggest = For å være på den sikre siden, bør du kun åpne nedlastede filer når du frakoblet internett, eller bruke en Tor Live CD som Tails.\n +torbutton.popup.launch = Last ned fil +torbutton.popup.cancel = Avbryt +torbutton.popup.dontask = Last ned filer automatisk fra nå av +torbutton.popup.no_newnym = Torbutton kan ikke trygt gi deg en ny identitet. Den har ikke tilgang til Tor-kontrollporten.\n\nKjører du Tor Nettleser pakken? +torbutton.security_settings.menu.title = Sikkerhetsinnstillinger +torbutton.title.prompt_torbrowser = Viktig Torbutton-informasjon +torbutton.popup.prompt_torbrowser = Torbutton fungerer annerledes nå. Du kan ikke skru den av lenger.\n\nVi gjorde denne forandringen fordi det ikke er sikkert å bruke Torbutton i en nettleser som også brukers til annen surfing enn Tor. \nDet var for mange feil der til at vi kunne fikse det på en annen måte.\n\nHvis du ønsker å bruke Firefox normalt, bør du avinstallere Torbutton og laste ned Tor-nettleserforpakningen. Personvernsinnstillingene til Tor-nettleseren er også overlegen forva [...] +torbutton.popup.short_torbrowser = Viktig Torbutton-informasjon!\n\nTorbutton er alltid aktivert nå.\n\nKlikk på Torbutton for mer informasjon. + +torbutton.popup.confirm_plugins = Nettlesertillegg som f.eks Flash kan skade personvernet og anonymiteten din.\n\nDe kan også omgå Tor og dermed avsløre din nåværende plassering og IP-adresse.\n\nEr du sikker på at du vil aktivere nettlesertillegg?\n\n +torbutton.popup.never_ask_again = Ikke spør meg igjen +torbutton.popup.confirm_newnym = Tor Nettleser vil stenge alle vinduer og faner. Alle nettstedeøkter vil gå tapt.\n\nStart Tor Nettleser på nytt nå for å tilbakestille identiteten din?\n\n + +torbutton.maximize_warning = Å maksimere Tor Nettleser kan tillate nettsteder å bestemme skjermstørrelsen din, som kan brukes til å spore deg. Vi anbefaler at du lar Tor Nettleser vinduer ligge i den opprinnelige standardstørrelsen. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Denne nettsiden (%S) prøvde å pakke ut HTML5-canvas-billeddata, hvilket kan brukes til å tilkjennegi din datamaskin spesifikt i identifiseringsøyemed.\n\nSkal Tor Nettleser tillate denne nettsiden å pakke ut HTML5-canvas-billeddata? +canvas.notNow=Ikke nå +canvas.notNowAccessKey=N +canvas.allow=Tillat i fremtiden +canvas.allowAccessKey=A +canvas.never=Aldri for denne siden (anbefalt) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S profil-problem +profileReadOnly=Du kan ikke kjøre %S fra et filsystem som bare er lesbart. Kopier %S til en annen plass før du prøver å bruke det. +profileReadOnlyMac=Du kan ikke kjøre %S fra et filsystem som bare er lesbart. Kopier %S til skrivebordet eller programmappa før du bruker det. +profileAccessDenied=%S har ikke tilgang til endring av profilen. Juster filrettighetene og prøv igjen. +profileMigrationFailed=Migrering av din eksisterende %S-profil mislykkes.\nNye innstillinger vil bli benyttet. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Laster ned %S oppdatering + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Tilkobling kryptert (Løk Tjeneste, %1$S, %2$S bits nøkler, %3$S) +pageInfo_OnionEncryption=Tilkobling kryptert (Løk Tjeneste) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Lær mer +onionServices.errorPage.browser=Nettleser +onionServices.errorPage.network=Nettverk +onionServices.errorPage.onionSite=Løk-side +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem ved lasting av løk-side +onionServices.descNotFound.header=Onionsite Not Found +onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem ved lasting av løk-side +onionServices.descInvalid.header=Onionsite Cannot Be Reached +onionServices.descInvalid=The onionsite is unreachable due an internal error. +onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problemer med å laste løk-side +onionServices.introFailed.header=Onionsite Has Disconnected +onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problemer med å laste løk-side +onionServices.rendezvousFailed.header=Unable to Connect to Onionsite +onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later. +onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autorisasjon kreves +onionServices.clientAuthMissing.header=Onionsite Requires Authentication +onionServices.clientAuthMissing=Access to the onionsite requires a key but none was provided. +onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorisasjon Feilet +onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed +onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator. +onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problemer med å laste løk-side +onionServices.badAddress.header=Invalid Onionsite Address +onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly. +onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problemer med å laste løk-side +onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out +onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection. +onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S is requesting that you authenticate. +onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service +onionServices.authPrompt.done=Ferdig +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters) +onionServices.authPrompt.failedToSetKey=Kan ikke konfigurere Tor med nøkkelen din +onionServices.authPreferences.header=Onion Services Authentication +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them. +onionServices.authPreferences.savedKeys=Lagrede Nøkler... +onionServices.authPreferences.dialogTitle=Onion Service Keys +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer +onionServices.authPreferences.onionSite=Løk-side +onionServices.authPreferences.onionKey=Nøkkel +onionServices.authPreferences.remove=Fjern +onionServices.authPreferences.removeAll=Fjern Alle +onionServices.authPreferences.failedToGetKeys=Kan ikke hente nøklene fra tor +onionServices.authPreferences.failedToRemoveKey=75%match\nKunne ikke fjerne nøkkel +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Skjønner +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Always Prioritize Onions +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Ikke nå +onionLocation.notNowAccessKey=n +onionLocation.description=There's a more private and secure version of this site available over the Tor network via onion services. Onion services help website publishers and their visitors defeat surveillance and censorship. +onionLocation.tryThis=Try Onion Services +onionLocation.onionAvailable=.onion available +onionLocation.learnMore=Lær mer... +onionLocation.always=Altid +onionLocation.askEverytime=Spør hver gang +onionLocation.prioritizeOnionsDescription=Prioriter. .onion sider når kjent +onionLocation.onionServicesTitle=Løk-tjenester + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Lær mer +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=På +rulesets.disabled=Avskrudd +# Ruleset details/edit ruleset +rulesets.edit=Rediger +rulesets.name=Navn +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Lagre +rulesets.cancel=Avbryt diff --git a/toolkit/torbutton/chrome/locale/nb-NO/torlauncher.properties b/toolkit/torbutton/chrome/locale/nb-NO/torlauncher.properties new file mode 100644 index 000000000000..8dd912a4e025 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nb-NO/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor-oppstarteren + +torlauncher.tor_exited_during_startup=Tor ble avsluttet under oppstart. Dette kan ha sin årsak i en feil i din torrc-fil, en feil i Tor eller et annet program på din maskin, eller feilaktig maskinvare. Tor-nettleseren vil ikke starte før det bakenforliggende problemet er ordnet og du har startet det på ny. +torlauncher.tor_exited=Tor avsluttet uventet. Dette kan skyldes en feil i Tor i seg selv, et annet program på systemet ditt eller feil maskinvare. Før du starter Tor på nytt, vil ikke Tor-nettleseren kunne nå noen nettsteder. Hvis problemet vedvarer, kan du sende en kopi av Tor-loggen til brukerstøtte team. +torlauncher.tor_exited2=Omstart av Tor vil ikke lukke fanene dine. +torlauncher.tor_controlconn_failed=Kunne ikke koble til Tor kontrollport. +torlauncher.tor_failed_to_start=Tor kunne ikke starte. +torlauncher.tor_control_failed=Klarte ikke å ta kontroll over Tor. +torlauncher.tor_bootstrap_failed=Tor fikk ikke etablert en forbindelse til Tor-nettverket. +torlauncher.tor_bootstrap_failed_details=%1$S mislyktes (%2$S). + +torlauncher.unable_to_start_tor=Kunne ikke starte Tor.\n\n%S +torlauncher.tor_missing=Den kjørbare Tor-filen finnes ikke. +torlauncher.torrc_missing=torrc-fila mangler og kunne ikke opprettes. +torlauncher.datadir_missing=Datakatalogen til Tor finnes ikke og kunne ikke opprettes. +torlauncher.onionauthdir_missing=Tor-løk-autentiseringsmappen eksisterer ikke og kunne ikke opprettes. +torlauncher.password_hash_missing=Kunne ikke hente nøkkel-passord. + +torlauncher.failed_to_get_settings=Kunne ikke hente Tor-innstillinger.\n\n%S +torlauncher.failed_to_save_settings=Kunne ikke lagre Tor-innstillinger.\n\n%S +torlauncher.ensure_tor_is_running=Sjekk at Tor kjører. + +torlauncher.error_proxy_addr_missing=Du må spesifisere både IP-adresse eller vertsnavn og et portnummer for å sette opp Tor til bruk med en mellomtjener for å koble til Internett. +torlauncher.error_proxy_type_missing=Du må velge mellomtjener-typen. +torlauncher.error_bridges_missing=Du må velge én eller flere broer. +torlauncher.error_default_bridges_type_missing=Du må velge en tilkoblingstype for de angitte broene. +torlauncher.error_bridgedb_bridges_missing=Forespør en bro. +torlauncher.error_bridge_bad_default_type=Det er ingen angitte broer som har tilkoblingstypen %S tilgjengelig. Juster innstillingene dine. + +torlauncher.bridge_suffix.meek-amazon=(virker i Kina) +torlauncher.bridge_suffix.meek-azure=(virker i Kina) + +torlauncher.request_a_bridge=Forespør en bro… +torlauncher.request_a_new_bridge=Forespør ny bro… +torlauncher.contacting_bridgedb=Kontakter BridgeDB. Vennligst vent. +torlauncher.captcha_prompt=Løs CAPTCHA-en for å forespørre en bro. +torlauncher.bad_captcha_solution=Løsningen er ikke riktig. Vær så snill, prøv på nytt. +torlauncher.unable_to_get_bridge=Kunne ikke skaffe en bro fra BridgeDB\n\n%S +torlauncher.no_meek=Denne nettleseren er ikke konfigurert for saktmodig, noe som er nødvendig for å skaffe broer. +torlauncher.no_bridges_available=Ingen broer er tilgjengelig på dette tidspunktet. Beklager. + +torlauncher.connect=Koble til +torlauncher.restart_tor=Omstart av Tor +torlauncher.quit=Avslutt +torlauncher.quit_win=Exit +torlauncher.done=Ferdig + +torlauncher.forAssistance=For hjelp, kontakt %S +torlauncher.forAssistance2=For hjelp, besøk %S + +torlauncher.copiedNLogMessages=Kopiering ferdig. %S Loggføringsmeldinger fra Tor er klare til å bli sent til et skriveprogram eller en e-post. + +torlauncher.bootstrapStatus.starting=Starter opp +torlauncher.bootstrapStatus.conn_pt=Kobler til bro +torlauncher.bootstrapStatus.conn_done_pt=Koblet til broen +torlauncher.bootstrapStatus.conn_proxy=Kobler til mellomtjener +torlauncher.bootstrapStatus.conn_done_proxy=Koblet til mellomtjener +torlauncher.bootstrapStatus.conn=Kobler til et Tor-relé +torlauncher.bootstrapStatus.conn_done=Koblet til et Tor-relé +torlauncher.bootstrapStatus.handshake=Forhandler med et Tor-relé +torlauncher.bootstrapStatus.handshake_done=Ferdig med å forhandle med et Tor-relé +torlauncher.bootstrapStatus.onehop_create=Etablerer en kryptert katalogforbindelse +torlauncher.bootstrapStatus.requesting_status=Mottar nettverkstatus +torlauncher.bootstrapStatus.loading_status=Laster nettverkstatus +torlauncher.bootstrapStatus.loading_keys=Laster identitetsbekreftende sertifikater +torlauncher.bootstrapStatus.requesting_descriptors=Sender forespørsel om rutingsstafettoppsettsinformasjon +torlauncher.bootstrapStatus.loading_descriptors=Laster inn rutingsstafettoppsetts-informasjon +torlauncher.bootstrapStatus.enough_dirinfo=Fullført lasting om relé informasjon +torlauncher.bootstrapStatus.ap_conn_pt=Bygger kretser: Kobler til bro +torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kretser: Koblet til bro +torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kretser: Kobler til mellomtjener +torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kretser: Koblet til mellomtjener +torlauncher.bootstrapStatus.ap_conn=Bygger kretser: Kobler til et Tor-relé +torlauncher.bootstrapStatus.ap_conn_done=Bygger kretser: Koblet til et Tor-relé +torlauncher.bootstrapStatus.ap_handshake=Bygger kretser: Forhandler med et Tor-relé +torlauncher.bootstrapStatus.ap_handshake_done=Bygger kretser: Ferdig med å forhandle med et Tor-relé +torlauncher.bootstrapStatus.circuit_create=Bygger kretser: Etablering av en Tor-krets +torlauncher.bootstrapStatus.done=Koblet til Tor-nettverket! + +torlauncher.bootstrapWarning.done=ferdig +torlauncher.bootstrapWarning.connectrefused=forbindelse nektet +torlauncher.bootstrapWarning.misc=diverse +torlauncher.bootstrapWarning.resourcelimit=ikke nok resursser +torlauncher.bootstrapWarning.identity=feil identitet +torlauncher.bootstrapWarning.timeout=forbindelse tidsavbrutt +torlauncher.bootstrapWarning.noroute=ingen rute til vert +torlauncher.bootstrapWarning.ioerror=lese/skrive -feil +torlauncher.bootstrapWarning.pt_missing=pluggbar transport mangler + +torlauncher.nsresult.NS_ERROR_NET_RESET=Tilkoblingen til tjeneren gitt tapt. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Kunne ikke koble til tjeneren. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Kunne ikke koble til mellomtjeneren. + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd new file mode 100644 index 000000000000..ef3a712ab291 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; wordt ontwikkeld door "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "het &vendorShortName;"> +<!ENTITY project.end ", een non-profitorganisatie die zich inzet om uw privacy en vrijheid online te verdedigen."> + +<!ENTITY help.start "Wilt u meehelpen?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Doneer"> +<!ENTITY help.or " of "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "doe mee"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Vragen?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Help het Tor-netwerk te groeien!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licentie-informatie"> +<!ENTITY tor.TrademarkStatement "‘Tor’ en het ‘Onion-logo’ zijn geregistreerde handelsmerken van Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/nl/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/nl/aboutTBUpdate.dtd new file mode 100644 index 000000000000..55c4de7a09ae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser-changelog"> +<!ENTITY aboutTBUpdate.updated "Tor Browser is bijgewerkt."> +<!ENTITY aboutTBUpdate.linkPrefix "Bezoek "> +<!ENTITY aboutTBUpdate.linkLabel "onze website"> +<!ENTITY aboutTBUpdate.linkSuffix " voor de meest actuele informatie over deze release."> +<!ENTITY aboutTBUpdate.version "Versie"> +<!ENTITY aboutTBUpdate.releaseDate "Datum van uitgave"> +<!ENTITY aboutTBUpdate.releaseNotes "Uitgaveopmerkingen"> diff --git a/toolkit/torbutton/chrome/locale/nl/aboutTor.dtd b/toolkit/torbutton/chrome/locale/nl/aboutTor.dtd new file mode 100644 index 000000000000..a9a50ae02d9c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Over Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Wijzigingslogboek bekijken"> + +<!ENTITY aboutTor.ready.label "Verken. Privé."> +<!ENTITY aboutTor.ready2.label "U bent klaar voor de meest private surfervaring ter wereld."> +<!ENTITY aboutTor.failure.label "Er ging iets mis!"> +<!ENTITY aboutTor.failure2.label "Tor werkt niet in deze browser."> + +<!ENTITY aboutTor.search.label "Zoeken met DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com/"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Vragen?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Bekijk onze Tor-browserhandleiding »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "H"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor-browserhandleiding"> + +<!ENTITY aboutTor.tor_mission.label "Het Tor Project is een 501(c)(3)-non-profitorganisatie in de VS die rechten en vrijheden van de mens bevordert door vrije en open source anonimiteits- en privacytechnologieën te ontwikkelen en te implementeren, de onbeperkte beschikbaarheid en het gebruik ervan te steunen, en het begrip ervan in de wetenschap en bij het algemeen publiek te bevorderen."> +<!ENTITY aboutTor.getInvolved.label "Doe mee »"> + +<!ENTITY aboutTor.newsletter.tagline "Ontvang het laatste nieuws van Tor direct in uw postvak."> +<!ENTITY aboutTor.newsletter.link_text "Meld u aan voor de Tor-nieuwsbrief."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor is gratis te gebruiken dankzij donaties van mensen zoals u."> +<!ENTITY aboutTor.donationBanner.buttonA "Doneer nu"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "NU DONEREN"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Uw donatie wordt verdubbeld door Friends of Tor, tot $100.000."> diff --git a/toolkit/torbutton/chrome/locale/nl/brand.dtd b/toolkit/torbutton/chrome/locale/nl/brand.dtd new file mode 100644 index 000000000000..97e127b0cd34 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor-browser"> +<!ENTITY brandShortName "Tor-browser"> +<!ENTITY brandFullName "Tor-browser"> +<!ENTITY vendorShortName "Tor-project"> +<!ENTITY trademarkInfo.part1 "‘Tor’ en het ‘Onion-logo’ zijn geregistreerde handelsmerken van Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klik om de geïnstalleerde systeemplug-ins te laden"> +<!ENTITY plugins.installed.enable "Plug-ins inschakelen"> +<!ENTITY plugins.installed.disable "Plug-ins uitschakelen"> +<!ENTITY plugins.installed.disable.tip "Klik om het laden van systeemplug-ins te voorkomen"> diff --git a/toolkit/torbutton/chrome/locale/nl/brand.properties b/toolkit/torbutton/chrome/locale/nl/brand.properties new file mode 100644 index 000000000000..1af5f3c6d20f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor-browser +brandShortName=Tor-browser +brandFullName=Tor-browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor-project + +homePageSingleStartMain=Firefox Start, een snelle startpagina met ingebouwde zoekfunctie +homePageImport=Importeer uw startpagina uit %S + +homePageMigrationPageTitle=Startpaginakeuze +homePageMigrationDescription=Kies de startpagina die u wilt gebruiken: + +syncBrandShortName=Synchronisatie diff --git a/toolkit/torbutton/chrome/locale/nl/branding/brand.ftl b/toolkit/torbutton/chrome/locale/nl/branding/brand.ftl new file mode 100644 index 000000000000..77d517616feb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor-browser +-brand-short-name = Tor-browser +-brand-full-name = Tor-browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor-project +trademarkInfo = ‘Tor’ en het ‘Onion-logo’ zijn geregistreerde handelsmerken van Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/nl/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/nl/browserOnboarding.properties new file mode 100644 index 000000000000..f109d951a3ae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Welkom +onboarding.tour-tor-welcome.title=U bent klaar. +onboarding.tour-tor-welcome.description=Tor Browser biedt de hoogste standaard aan privacy en beveiliging tijdens het websurfen. U bent nu beschermd tegen volgen, bewaking en censuur. Deze snelle onboarding toont hoe dit werkt. +onboarding.tour-tor-welcome.next-button=Naar Privacy + +onboarding.tour-tor-privacy=Privacy +onboarding.tour-tor-privacy.title=Verwerp volgers en speurders. +onboarding.tour-tor-privacy.description=Tor Browser isoleert cookies en verwijdert uw browsergeschiedenis na uw sessie. Deze wijzigingen zorgen ervoor dat uw privacy en veiligheid in de browser zijn beschermd. Klik op ‘Tor-netwerk’ om te lezen hoe we u op netwerkniveau beschermen. +onboarding.tour-tor-privacy.button=Naar Tor-netwerk + +onboarding.tour-tor-network=Tor-netwerk +onboarding.tour-tor-network.title=Reis over een gedecentraliseerd netwerk. +onboarding.tour-tor-network.description=Tor Browser verbindt u met het Tor-netwerk, mogelijk gemaakt door duizenden vrijwilligers over de hele wereld. Anders dan bij een VPN is er geen sprake van één zwakke plek of centrale autoriteit die u moet vertrouwen om privé van het internet gebruik te maken. +onboarding.tour-tor-network.description-para2=NIEUW: de Tor-netwerkinstellingen, waaronder de mogelijkheid om bridges aan te vragen waar Tor is geblokkeerd, zijn nu te vinden in Voorkeuren. +onboarding.tour-tor-network.action-button=Uw Tor-netwerkinstellingen aanpassen +onboarding.tour-tor-network.button=Naar Circuit-venster + +onboarding.tour-tor-circuit-display=Circuit-venster +onboarding.tour-tor-circuit-display.title=Bekijk uw pad. +onboarding.tour-tor-circuit-display.description=Voor elk domein dat u bezoekt, wordt uw verkeer in een circuit over drie Tor-omleidingen over de hele wereld omgeleid en versleuteld. Geen website weet waarvandaan u verbinding maakt. U kunt een nieuw circuit aanvragen door op ‘Nieuw circuit voor deze website’ in ons Circuit-venster te klikken. +onboarding.tour-tor-circuit-display.button=Mijn pad bekijken +onboarding.tour-tor-circuit-display.next-button=Naar Beveiliging + +onboarding.tour-tor-security=Beveiliging +onboarding.tour-tor-security.title=Kies uw ervaring. +onboarding.tour-tor-security.description=We bieden ook aanvullende instellingen om de beveiliging van uw browser te verhogen. Via onze Beveiligingsinstellingen kunt u elementen blokkeren die kunnen worden gebruikt om uw computer aan te vallen. Klik hieronder om te zien wat de verschillende opties doen. +onboarding.tour-tor-security.description-suffix=Opmerking: NoScript en HTTPS Everywhere zijn standaard niet in de werkbalk opgenomen, maar deze kunt u aanpassen om ze toe te voegen. +onboarding.tour-tor-security-level.button=Uw beveiligingsniveau bekijken +onboarding.tour-tor-security-level.next-button=Naar Ervaringstips + +onboarding.tour-tor-expect-differences=Ervaringstips +onboarding.tour-tor-expect-differences.title=Verwacht enige verschillen. +onboarding.tour-tor-expect-differences.description=Met alle door Tor geboden beveiligings- en privacyfuncties kan uw ervaring tijdens het webbrowsen een beetje anders zijn. Dingen gaan misschien iets langzamer, en afhankelijk van het door u gekozen beveiligingsniveau zullen bepaalde elementen misschien niet werken of worden geladen. Er kan ook worden gevraagd te bewijzen dat u een mens bent en geen robot. +onboarding.tour-tor-expect-differences.button=FAQ’s bekijken +onboarding.tour-tor-expect-differences.next-button=Naar Onion-services + +onboarding.tour-tor-onion-services=Onion-services +onboarding.tour-tor-onion-services.title=Wees extra beschermd. +onboarding.tour-tor-onion-services.description=Onion-services zijn websites die op .onion eindigen en extra bescherming bieden voor publicisten en bezoekers, waaronder toegevoegde beschermingsmechanismen tegen censuur. Via Onion-services kan iedereen anoniem inhoud en diensten aanbieden. Klik hieronder om de DuckDuckGo-onion-website te bezoeken. +onboarding.tour-tor-onion-services.button=Een Onion bezoeken +onboarding.tour-tor-onion-services.next-button=Gereed + +onboarding.overlay-icon-tooltip-updated2=Bekijk wat er nieuw is\nin %S +onboarding.tour-tor-update.prefix-new=Nieuw +onboarding.tour-tor-update.prefix-updated=Bijgewerkt + +onboarding.tour-tor-toolbar=Werkbalk +onboarding.tour-tor-toolbar-update-9.0.title=Vaarwel Onion-knop. +onboarding.tour-tor-toolbar-update-9.0.description=We willen dat uw ervaring met Tor volledig is geïntegreerd binnen Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Dat is waarom u nu, in plaats van de onion-knop te gebruiken, uw Tor-circuit via de [i] in de URL-balk kunt zien en een nieuwe identiteit kunt aanvragen via de werkbalkknop of het menu [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Een nieuwe identiteit aanvragen +onboarding.tour-tor-toolbar-update-9.0.next-button=Naar Tor-netwerk + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Volgende +onboarding.tor-circuit-display.done=Gereed +onboarding.tor-circuit-display.one-of-three=1 van 3 +onboarding.tor-circuit-display.two-of-three=2 van 3 +onboarding.tor-circuit-display.three-of-three=3 van 3 + +onboarding.tor-circuit-display.intro.title=Hoe werken circuits? +onboarding.tor-circuit-display.intro.msg=Circuits worden gevormd door willekeurig toegekende relays, bestaande uit computers over de hele wereld die zijn geconfigureerd om Tor-verkeer door te sturen. Via circuits kunt u privé browsen en verbinding maken met onion-services. + +onboarding.tor-circuit-display.diagram.title=Circuit-venster +onboarding.tor-circuit-display.diagram.msg=Dit diagram toont de relays die het circuit voor deze website vormen. Om het koppelen van activiteit tussen verschillende websites te voorkomen, krijgt elke website een apart circuit. + +onboarding.tor-circuit-display.new-circuit.title=Hebt u een nieuw circuit nodig? +onboarding.tor-circuit-display.new-circuit.msg=Als u geen verbinding kunt maken met de website die u probeert te bezoeken of als deze niet goed wordt geladen, kunt u deze knop gebruiken om de website opnieuw te laden met een nieuw circuit. diff --git a/toolkit/torbutton/chrome/locale/nl/network-settings.dtd b/toolkit/torbutton/chrome/locale/nl/network-settings.dtd new file mode 100644 index 000000000000..17760548999b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor-netwerkinstellingen"> +<!ENTITY torsettings.wizard.title.default "Verbinden met Tor"> +<!ENTITY torsettings.wizard.title.configure "Tor-netwerkinstellingen"> +<!ENTITY torsettings.wizard.title.connecting "Een verbinding maken"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Taal van Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Selecteer een taal."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klik op ‘Verbinden’ om met Tor te verbinden."> +<!ENTITY torSettings.configurePrompt "Klik op ‘Configureren’ om de netwerkinstellingen aan te passen als u zich in een land bevindt waar Tor wordt gecensureerd (zoals Egypte, China, Turkije) of als u verbinding maakt via een particulier netwerk waarvoor een proxy is vereist."> +<!ENTITY torSettings.configure "Configureren"> +<!ENTITY torSettings.connect "Verbinden"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Wachten op starten van Tor…"> +<!ENTITY torsettings.restartTor "Tor herstarten"> +<!ENTITY torsettings.reconfigTor "Opnieuw configureren"> + +<!ENTITY torsettings.discardSettings.prompt "U hebt Tor-bridges geconfigureerd, of u hebt lokale proxyinstellingen ingevoerd.  Om een directe verbinding met het Tor-netwerk te maken, moeten deze instellingen worden verwijderd."> +<!ENTITY torsettings.discardSettings.proceed "Instellingen verwijderen en verbinden"> + +<!ENTITY torsettings.optional "Optioneel"> + +<!ENTITY torsettings.useProxy.checkbox "I gebruik een proxy om met het internet te verbinden."> +<!ENTITY torsettings.useProxy.type "Proxytype"> +<!ENTITY torsettings.useProxy.type.placeholder "selecteer een proxytype"> +<!ENTITY torsettings.useProxy.address "Adres"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-adres of hostnaam"> +<!ENTITY torsettings.useProxy.port "Poort"> +<!ENTITY torsettings.useProxy.username "Gebruikersnaam"> +<!ENTITY torsettings.useProxy.password "Wachtwoord"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Deze computer gebruikt een firewall die alleen verbindingen naar bepaalde poorten toestaat"> +<!ENTITY torsettings.firewall.allowedPorts "Toegestane poorten"> +<!ENTITY torsettings.useBridges.checkbox "Tor is in mijn land gecensureerd."> +<!ENTITY torsettings.useBridges.default "Een ingebouwde bridge selecteren"> +<!ENTITY torsettings.useBridges.default.placeholder "selecteer een bridge"> +<!ENTITY torsettings.useBridges.bridgeDB "Een bridge aanvragen bij torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Voer de tekens van de afbeelding in"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Captcha vernieuwen"> +<!ENTITY torsettings.useBridges.captchaSubmit "Verzenden"> +<!ENTITY torsettings.useBridges.custom "Een bridge opgeven die ik ken"> +<!ENTITY torsettings.useBridges.label "Voer bridge-informatie van een vertrouwde bron in."> +<!ENTITY torsettings.useBridges.placeholder "typ adres:poort (één per regel)"> + +<!ENTITY torsettings.copyLog "Tor-log naar klembord kopiëren"> + +<!ENTITY torsettings.proxyHelpTitle "Proxy-hulp"> +<!ENTITY torsettings.proxyHelp1 "Een lokale proxy kan nodig zijn als u verbinding maakt via het netwerk van een bedrijf, school of universiteit. Als u niet zeker weet of een proxy nodig is, bekijk dan de internetinstellingen in een andere browser, of bekijk de netwerkinstellingen van uw systeem."> + +<!ENTITY torsettings.bridgeHelpTitle "Bridge relay-hulp"> +<!ENTITY torsettings.bridgeHelp1 "Bridges zijn niet-vermelde relays die het moeilijker maken om verbindingen met het Tor-netwerk te blokkeren.  Elk type bridge gebruikt een andere methode om censuur te vermijden.  Bridges die obfs gebruiken, laten uw verkeer eruitzien als willekeurige ruis, en bridges die meek gebruiken, laten uw verkeer eruitzien alsof u met een andere service dan Tor verbinding maakt."> +<!ENTITY torsettings.bridgeHelp2 "Vanwege de manier waarop bepaalde landen Tor proberen te blokkeren, werken sommige bridges in bepaalde landen wel, maar niet in andere.  Als u niet zeker weet welke bridges in uw land werken, bezoek dan torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Even geduld; er wordt verbinding gemaakt met het Tor-netwerk.  Dit kan enkele minuten duren."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Verbinding"> +<!ENTITY torPreferences.torSettings "Tor-instellingen"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser routeert uw verkeer over het Tor-netwerk, mogelijk gemaakt door duizenden vrijwilligers over de hele wereld." > +<!ENTITY torPreferences.learnMore "Meer info"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Testen"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Verbonden"> +<!ENTITY torPreferences.statusTorNotConnected "Niet verbonden"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Meer info"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Snelstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Altijd automatisch verbinding maken"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Bridges"> +<!ENTITY torPreferences.bridgesDescription "Bridges helpen u toegang te krijgen tot het Tor-netwerk op plaatsen waar Tor is geblokkeerd. Afhankelijke van waar u zich bevindt, werkt de ene bridge mogelijk beter dan de andere."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatisch"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Verwijderen"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Gekopieerd!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Een bridge aanvragen…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Geavanceerd"> +<!ENTITY torPreferences.advancedDescription "Configureer hoe Tor Browser met het internet verbind."> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "Toon de Tor-logs"> +<!ENTITY torPreferences.viewLogs "Logboeken weergeven…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Annuleren"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Een bridge aanvragen"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contact maken met BridgeDB. Even geduld."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Los de CAPTCHA op om een bridge aan te vragen."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "De oplossing is niet juist. Probeer het opnieuw."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Bridge-informatie van een vertrouwde bron invoeren"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Komma-gescheide waarden"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor-logboeken"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Niet verbonden"> +<!ENTITY torConnect.connectingConcise "Bezig met verbinden..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Automatisch"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Opnieuw proberen"> +<!ENTITY torConnect.offline "Geen internetverbinding"> +<!ENTITY torConnect.connectMessage "Wijzigingen aan Tor-instellingen zullen geen effect hebben totdat je verbind maakt"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser kon geen verbinding maken met het Tor Netwerk"> +<!ENTITY torConnect.yourLocation "Uw locatie"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/nl/onboarding.properties b/toolkit/torbutton/chrome/locale/nl/onboarding.properties new file mode 100644 index 000000000000..68cef737419c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Nieuw met %S?\nLaten we beginnen. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S is helemaal nieuw.\nBekijk wat u kunt doen! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Sluiten +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Verwijderen +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Voltooid diff --git a/toolkit/torbutton/chrome/locale/nl/torbutton.dtd b/toolkit/torbutton/chrome/locale/nl/torbutton.dtd new file mode 100644 index 000000000000..6e8910682503 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nieuwe identiteit"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nieuwe identiteit"> +<!ENTITY torbutton.context_menu.new_identity_key "d"> +<!ENTITY torbutton.context_menu.new_circuit "Nieuw Tor-circuit voor deze website"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nieuw Tor-circuit voor deze website"> +<!ENTITY torbutton.context_menu.new_circuit_key "c"> +<!ENTITY torbutton.context_menu.networksettings "Tor-netwerkinstellingen…"> +<!ENTITY torbutton.context_menu.networksettings.key "n"> +<!ENTITY torbutton.context_menu.downloadUpdate "Controleren op Tor Browser-update…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "u"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookiebeschermingen…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klik om Torbutton te initialiseren"> +<!ENTITY torbutton.prefs.security_settings "Tor Browser-beveiligingsinstellingen"> +<!ENTITY torbutton.cookiedialog.title "Cookiebeschermingen beheren"> +<!ENTITY torbutton.cookiedialog.lockCol "Beschermd"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Naam"> +<!ENTITY torbutton.cookiedialog.pathCol "Pad"> +<!ENTITY torbutton.cookiedialog.protectCookie "Cookie beschermen"> +<!ENTITY torbutton.cookiedialog.removeCookie "Cookie verwijderen"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Cookiebescherming opheffen"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Alle behalve beschermde verwijderen"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Nieuwe cookies beschermen"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Nieuwe cookies niet beschermen"> +<!ENTITY torbutton.prefs.sec_caption "Beveiligingsniveau"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Via de beveiligingsschuifbalk kunt u bepaalde browserfuncties uitschakelen die uw browser kwetsbaarder maken voor hackpogingen."> +<!ENTITY torbutton.prefs.sec_standard_label "Standaard"> +<!ENTITY torbutton.prefs.sec_standard_description "Alle Tor Browser- en websitefuncties zijn ingeschakeld."> +<!ENTITY torbutton.prefs.sec_safer_label "Veiliger"> +<!ENTITY torbutton.prefs.sec_safer_description "Schakelt websitefuncties uit die vaak gevaarlijk zijn, waardoor sommige websites functionaliteit verliezen."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Op de veiliger instelling:"> +<!ENTITY torbutton.prefs.sec_safest_label "Veiligste"> +<!ENTITY torbutton.prefs.sec_safest_description "Alleen websitefuncties toestaan die voor statische websites en basisservices zijn vereist. Deze wijzigingen zijn van invloed op afbeeldingen, media en scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Op de veiligste instelling:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Meer info"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is uitgeschakeld op niet-HTTPS-websites."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is standaard uitgeschakeld op alle websites."> +<!ENTITY torbutton.prefs.sec_limit_typography "Sommige lettertypen en wiskundige symbolen zijn uitgeschakeld."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Sommige lettertypen, pictogrammen, wiskundige symbolen en afbeeldingen zijn uitgeschakeld."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio en video (HTML5-media) en WebGL zijn klikken-voor-afspelen."> +<!ENTITY torbutton.prefs.sec_custom_warning "Aangepast"> +<!ENTITY torbutton.prefs.sec_overview "Bepaalde websitefuncties uitschakelen die kunnen worden gebruikt om uw beveiliging en anonimiteit aan te vallen."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Beveiligingsniveau: standaard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Beveiligingsniveau: veiliger"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Beveiligingsniveau: veiligste"> +<!ENTITY torbutton.prefs.sec_custom_summary "Uw aangepaste browservoorkeuren hebben tot ongebruikelijke beveiligingsinstellingen geleid. Uit veiligheids- en privacyoverwegingen raden we aan een van de standaard beveiligingsniveaus te kiezen."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Standaardwaarden herstellen"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Geavanceerde beveiligingsinstellingen…"> +<!ENTITY torbutton.prefs.sec_change "Wijzigen …"> +<!ENTITY torbutton.circuit_display.title "Tor-circuit"> +<!ENTITY torbutton.circuit_display.new_circuit "Nieuw circuit voor deze website"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Clientauthenticatieprompt voor onion-service openen"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Deze sleutel onthouden"> diff --git a/toolkit/torbutton/chrome/locale/nl/torbutton.properties b/toolkit/torbutton/chrome/locale/nl/torbutton.properties new file mode 100644 index 000000000000..16e837d2c4ed --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP-adres onbekend +torbutton.circuit_display.onion_site = Onion-website +torbutton.circuit_display.this_browser = Deze browser +torbutton.circuit_display.relay = Relay +torbutton.circuit_display.tor_bridge = Bridge +torbutton.circuit_display.unknown_country = Onbekend land +torbutton.circuit_display.guard = Bewaking +torbutton.circuit_display.guard_note = Uw [Guard]-node mag niet worden gewijzigd. +torbutton.circuit_display.learn_more = Meer info +torbutton.circuit_display.click_to_copy = Klik om te kopiëren +torbutton.circuit_display.copied = Gekopieerd! +torbutton.content_sizer.margin_tooltip = Tor Browser voegt deze rand toe om de afmetingen van het venster minder uit de toon te laten vallen. Dit maakt het moeilijker om u online te volgen. +extensions.torbutton@torproject.org.description = Torbutton biedt een knop om Tor-instellingen te configureren en snel en makkelijk privénavigatiegegevens te wissen. +torbutton.popup.external.title = Een extern bestandstype downloaden? +torbutton.popup.external.app = Tor Browser kan dit bestand niet weergeven. U dient het met een andere toepassing te openen.\n\n +torbutton.popup.external.note = Bepaalde typen bestanden kunnen ervoor zorgen dat toepassingen verbinding met het internet maken zonder Tor te gebruiken.\n\n +torbutton.popup.external.suggest = Om veilig te surfen, zou u alleen gedownloade bestanden moeten openen terwijl u offline bent, of gebruik een Tor-live-cd zoals Tails.\n +torbutton.popup.launch = Bestand downloaden +torbutton.popup.cancel = Annuleren +torbutton.popup.dontask = Bestanden vanaf nu automatisch downloaden +torbutton.popup.no_newnym = Torbutton kan u niet veilig een nieuwe identiteit geven. Het heeft geen toegang tot de Tor-controlepoort.\n\nGebruikt u Tor Browser Bundle? +torbutton.security_settings.menu.title = Beveiligingsinstellingen +torbutton.title.prompt_torbrowser = Belangrijke Torbutton-informatie +torbutton.popup.prompt_torbrowser = Torbutton werkt nu anders: u kunt het niet meer uitzetten.\n\nWe hebben deze wijziging doorgevoerd, omdat het niet veilig is om Torbutton te gebruiken in een browser die ook voor browsen zonder Tor wordt gebruikt. Er zaten te veel bugs in die we niet op een andere manier konden verhelpen.\n\nAls u Firefox op de normale manier wilt blijven gebruiken, zult u Torbutten moeten de-installeren en de Tor Browser Bundle moeten downloaden. De privacyeigenschapp [...] +torbutton.popup.short_torbrowser = Belangrijke Torbutton-informatie!\n\nTorbutton is nu altijd ingeschakeld.\n\nKlik op de Torbutton voor meer informatie. + +torbutton.popup.confirm_plugins = Plug-ins zoals Flash kunnen inbreuk maken op uw privacy en anonimiteit.\n\nOok kunnen ze Tor omzeilen om uw huidige locatie en IP-adres te achterhalen.\n\nWeet u zeker dat u plug-ins wilt inschakelen?\n\n +torbutton.popup.never_ask_again = Dit nooit meer vragen +torbutton.popup.confirm_newnym = Tor Browser zal alle vensters en tabbladen sluiten. Alle websitesessies gaan hiermee verloren.\n\nTor Browser nu herstarten om uw identiteit opnieuw in te stellen?\n\n + +torbutton.maximize_warning = Door Tor Browser te maximaliseren, kunnen websites uw beeldschermgrootte vaststellen, wat kan worden gebruikt om u te traceren. Het wordt aanbevolen de oorspronkelijke grootte van Tor Browser-vensters aan te houden. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=De website (%S) heeft geprobeerd HTML5-canvas-afbeeldingsgegevens te extraheren, waarmee unieke identificatie van uw computer mogelijk is.\n\nMoet Tor Browser het extraheren van HTML5-canvas-afbeeldingsgegevens door deze website toestaan? +canvas.notNow=Niet nu +canvas.notNowAccessKey=N +canvas.allow=Toestaan en onthouden +canvas.allowAccessKey=T +canvas.never=Nooit voor deze website (aanbevolen) +canvas.neverAccessKey=o + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S-profielprobleem +profileReadOnly=U kunt %S niet vanaf een alleen-lezen-bestandssysteem uitvoeren. Kopieer %S naar een andere locatie voordat u het probeert te gebruiken. +profileReadOnlyMac=U kunt %S niet vanaf een alleen-lezen-bestandssysteem uitvoeren. Kopieer %S naar uw map Bureaublad of Programma’s voordat u het probeert te gebruiken. +profileAccessDenied=%S heeft geen rechten voor toegang tot het profiel. Pas uw rechten van het bestandssysteem aan en probeer het opnieuw. +profileMigrationFailed=Migratie van uw bestaande %S-profiel is mislukt.\nEr worden nieuwe instellingen gebruikt. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S-update downloaden + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Verbinding versleuteld (Onion-service, %1$S, %2$S-bits sleutels, %3$S) +pageInfo_OnionEncryption=Verbinding versleuteld (Onion-service) +pageInfo_OnionName=Onion-naam: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Meer info +onionServices.errorPage.browser=Browser +onionServices.errorPage.network=Netwerk +onionServices.errorPage.onionSite=Onion-website +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Probleem bij laden van Onion-website +onionServices.descNotFound.header=Onion-website niet gevonden +onionServices.descNotFound=De meest waarschijnlijke oorzaak is dat de onion-website offline is. Neem contact op met de beheerder van de onion-website. +onionServices.descNotFound.longDescription=Details: %S – De opgevraagde onion-servicedescriptor kan niet op de hashring worden gevonden, waardoor de service niet bereikbaar is voor de client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Probleem bij laden van Onion-website +onionServices.descInvalid.header=Onion-website kan niet worden bereikt +onionServices.descInvalid=De onion-website is niet bereikbaar vanwege een interne fout. +onionServices.descInvalid.longDescription=Details: %S – De opgevraagde onion-servicedescriptor kan niet worden geparseerd, of de handtekeningverificatie is mislukt. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Probleem bij laden van Onion-website +onionServices.introFailed.header=Verbinding met Onion-website is verbroken +onionServices.introFailed=De meest waarschijnlijke oorzaak is dat de onion-website offline is. Neem contact op met de beheerder van de onion-website. +onionServices.introFailed.longDescription=Details: %S – Introductie mislukt, wat betekent dat de descriptor is gevonden maar de service niet meer met het introductiepunt is verbonden. Waarschijnlijk heeft de service de descriptor ervan gewijzigd of is deze niet actief. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Probleem bij laden van Onion-website +onionServices.rendezvousFailed.header=Kan geen verbinding maken met Onion-website +onionServices.rendezvousFailed=De onion-website is bezet of het Tor-netwerk is overbelast. Probeer het later opnieuw. +onionServices.rendezvousFailed.longDescription=Details: %S – Rendezvous tussen client en de service is mislukt, wat betekent dat de client de verbinding niet kon voltooien. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autorisatie vereist +onionServices.clientAuthMissing.header=Onion-website vereist authenticatie +onionServices.clientAuthMissing=Toegang tot de onion-website vereist een sleutel, maar deze is niet opgegeven. +onionServices.clientAuthMissing.longDescription=Details: %S – De client heeft de opgevraagde onion-servicedescriptor gedownload maar kon de inhoud ervan niet ontsleutelen, omdat clientautorisatie-informatie ontbreekt. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorisatie mislukt +onionServices.clientAuthIncorrect.header=Onion-website-authenticatie mislukt +onionServices.clientAuthIncorrect=De opgegeven sleutel is onjuist of ingetrokken. Neem contact op met de beheerder van de onion-website. +onionServices.clientAuthIncorrect.longDescription=Details: %S – De client kon de opgevraagde onion-servicedescriptor wel downloaden, maar niet de inhoud ervan ontsleutelen via de opgegeven clientautorisatie-informatie. Dit kan betekenen dat de toegang is ingetrokken. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Probleem bij laden van Onion-website +onionServices.badAddress.header=Ongeldig Onion-websiteadres +onionServices.badAddress=Het opgegeven adres van de onion-website is ongeldig. Controleer of u het juist hebt ingevuld. +onionServices.badAddress.longDescription=Details: %S – Het opgegeven .onion-adres is ongeldig. Deze fout wordt teruggegeven vanwege een van de volgende redenen: de checksum van het adres komt niet overeen, de publieke ed25519-sleutel is niet geldig, of de codering is ongeldig. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Probleem bij laden van Onion-website +onionServices.introTimedOut.header=Time-out bij maken van Onion-websitecircuit +onionServices.introTimedOut=Verbinding maken met de onion-website is mislukt, mogelijk vanwege een slechte netwerkverbinding. +onionServices.introTimedOut.longDescription=Details: %S – Time-out bij verbinding met de opgevraagde onion-service tijdens opbouwen van het rendezvous-circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S vraagt om uw authenticatie. +onionServices.authPrompt.keyPlaceholder=Voer uw privésleutel voor deze onion-service in +onionServices.authPrompt.done=Gereed +onionServices.authPrompt.doneAccessKey=G +onionServices.authPrompt.invalidKey=Voer een geldige sleutel in (52 base32-tekens of 44 base64-tekens) +onionServices.authPrompt.failedToSetKey=Kan Tor niet configureren met uw sleutel +onionServices.authPreferences.header=Onion-servicesauthenticatie +onionServices.authPreferences.overview=Voor sommige Onion-services moet u zich identificeren met een sleutel (een soort wachtwoord) voordat u toegang kunt krijgen. +onionServices.authPreferences.savedKeys=Opgeslagen sleutels… +onionServices.authPreferences.dialogTitle=Onion-servicesleutels +onionServices.authPreferences.dialogIntro=Voor de volgende onion-websites zijn sleutels op uw computer opgeslagen +onionServices.authPreferences.onionSite=Onion-website +onionServices.authPreferences.onionKey=Sleutel +onionServices.authPreferences.remove=Verwijderen +onionServices.authPreferences.removeAll=Alle verwijderen +onionServices.authPreferences.failedToGetKeys=Kan geen sleutels van tor ophalen +onionServices.authPreferences.failedToRemoveKey=Kan sleutel niet verwijderen +onionServices.v2Deprecated.pageTitle=V2 Onion Site Afschrapping Waarschuwing +onionServices.v2Deprecated.header=Versie 2 Onion Sites zal binnenkort worden afgeschaft +onionServices.v2Deprecated=Deze onion-site zal binnenkort niet meer bereikbaar zijn. Neem contact op met de beheerder van de site en moedig hem aan te upgraden. +onionServices.v2Deprecated.longDescription=Tor beëindigt zijn ondersteuning voor versie 2 onion diensten vanaf juli 2021, en deze onion site zal niet langer bereikbaar zijn op dit adres. Als u de beheerder van de site bent, upgrade dan spoedig naar een versie 3 onion dienst. +onionServices.v2Deprecated.tryAgain=Begrepen +onionServices.v2Deprecated.tooltip=Deze ui-site zal binnenkort niet meer bereikbaar zijn + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Onions altijd prioriteit geven +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Niet nu +onionLocation.notNowAccessKey=n +onionLocation.description=Er is een meer private en veilige versie van deze website beschikbaar over het Tor-netwerk via onion-services. Onion-services helpen publicisten van websites en hun bezoekers bewaking en censuur te verslaan. +onionLocation.tryThis=Onion-services proberen +onionLocation.onionAvailable=.onion beschikbaar +onionLocation.learnMore=Meer info… +onionLocation.always=Altijd +onionLocation.askEverytime=Elke keer vragen +onionLocation.prioritizeOnionsDescription=.onion-websites prioriteit geven wanneer bekend. +onionLocation.onionServicesTitle=Onion-services + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Een cryptocurrency adres (%S) is gekopieerd vanuit een onbeveiligde website. Het kan veranderd zijn. +cryptoSafetyPrompt.whatCanHeading=Wat kun je er aan doen? +cryptoSafetyPrompt.whatCanBody=Je kan proberen opnieuw te verbinden met een nieuw circuit om een beveiligde verbinden op te stellen, of het risico accepteren en deze waarschuwing negeren. +cryptoSafetyPrompt.learnMore=Meer info +cryptoSafetyPrompt.primaryAction=Herlaad Tabblad met een Nieuw Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Waarschuwing Negeren +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Ingeschakeld +rulesets.disabled=Uitgeschakeld +# Ruleset details/edit ruleset +rulesets.edit=Bewerken +rulesets.name=Naam +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Opslaan +rulesets.cancel=Annuleren diff --git a/toolkit/torbutton/chrome/locale/nl/torlauncher.properties b/toolkit/torbutton/chrome/locale/nl/torlauncher.properties new file mode 100644 index 000000000000..c4c6c5a8a967 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/nl/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Starter + +torlauncher.tor_exited_during_startup=Tor is afgesloten tijdens het opstarten. Dit kan komen door een fout in uw torrc-bestand, een bug in Tor of ander programma op uw systeem, of defecte hardware. Totdat u het onderliggende probleem oplost en Tor opnieuw start, zal Tor Browser niet opstarten. +torlauncher.tor_exited=Tor is onverwachts afgesloten. Dit kan komen door een bug in Tor zelf, een ander programma op uw systeem, of defecte hardware. Totdat u Tor opnieuw start, zal Tor Browser geen websites kunnen bereiken. Stuur een kopie van uw Tor-logboek naar het ondersteuningsteam als het probleem zich blijft voordoen. +torlauncher.tor_exited2=Tor herstarten zal niet uw browsertabbladen sluiten. +torlauncher.tor_controlconn_failed=Kon geen verbinding maken met Tor-controlepoort. +torlauncher.tor_failed_to_start=Tor kon niet worden gestart. +torlauncher.tor_control_failed=Controle over Tor mislukt. +torlauncher.tor_bootstrap_failed=Tor kon geen Tor-netwerkverbinding maken. +torlauncher.tor_bootstrap_failed_details=%1$S mislukt (%2$S). + +torlauncher.unable_to_start_tor=Kon Tor niet starten.\n\n%S +torlauncher.tor_missing=Het uitvoerbare Tor-bestand ontbreekt. +torlauncher.torrc_missing=Het torrc-bestand ontbreekt en kon niet worden aangemaakt. +torlauncher.datadir_missing=De Tor-gegevensmap bestaat niet en kon niet worden aangemaakt. +torlauncher.onionauthdir_missing=De Tor-onion-authenticatiemap bestaat niet en kon niet worden aangemaakt. +torlauncher.password_hash_missing=Ophalen van gehasht wachtwoord is mislukt. + +torlauncher.failed_to_get_settings=Kon Tor-instellingen niet ophalen.\n\n%S +torlauncher.failed_to_save_settings=Kon Tor-instellingen niet opslaan.\n\n%S +torlauncher.ensure_tor_is_running=Zorg ervoor dat Tor actief is. + +torlauncher.error_proxy_addr_missing=U moet zowel een IP-adres of hostnaam en een poortnummer opgeven om Tor te configureren voor het gebruik van een proxy om toegang te krijgen tot het internet. +torlauncher.error_proxy_type_missing=U moet het proxytype selecteren. +torlauncher.error_bridges_missing=U moet een of meer bridges opgeven. +torlauncher.error_default_bridges_type_missing=U moet een transporttype selecteren voor de verstrekte bridges. +torlauncher.error_bridgedb_bridges_missing=Vraag een bridge aan. +torlauncher.error_bridge_bad_default_type=Er zijn geen verstrekte bridges met het transporttype %S beschikbaar. Pas uw instellingen aan. + +torlauncher.bridge_suffix.meek-amazon=(werkt in China) +torlauncher.bridge_suffix.meek-azure=(werkt in China) + +torlauncher.request_a_bridge=Een bridge aanvragen… +torlauncher.request_a_new_bridge=Een nieuwe bridge aanvragen… +torlauncher.contacting_bridgedb=Contact maken met BridgeDB. Even geduld. +torlauncher.captcha_prompt=Los de CAPTCHA op om een bridge aan te vragen. +torlauncher.bad_captcha_solution=De oplossing is niet juist. Probeer het opnieuw. +torlauncher.unable_to_get_bridge=Kan geen bridge verkrijgen van BridgeDB.\n\n%S +torlauncher.no_meek=Deze browser is niet geconfigureerd voor meek, wat nodig is om bridges te verkrijgen. +torlauncher.no_bridges_available=Er zijn op dit moment geen bridges beschikbaar. + +torlauncher.connect=Verbinden +torlauncher.restart_tor=Tor herstarten +torlauncher.quit=Stoppen +torlauncher.quit_win=Afsluiten +torlauncher.done=Gereed + +torlauncher.forAssistance=Neem contact op met %S voor hulp +torlauncher.forAssistance2=Bezoek %S voor hulp + +torlauncher.copiedNLogMessages=Kopiëren voltooid. %S Tor-logberichten kunnen in een teksteditor of een e-mailbericht worden geplakt. + +torlauncher.bootstrapStatus.starting=Starten +torlauncher.bootstrapStatus.conn_pt=Verbinden met bridge +torlauncher.bootstrapStatus.conn_done_pt=Verbonden met bridge +torlauncher.bootstrapStatus.conn_proxy=Verbinden met proxy +torlauncher.bootstrapStatus.conn_done_proxy=Verbonden met proxy +torlauncher.bootstrapStatus.conn=Verbinden met een Tor-relay +torlauncher.bootstrapStatus.conn_done=Verbonden met een Tor-relay +torlauncher.bootstrapStatus.handshake=Onderhandelen met een Tor-relay +torlauncher.bootstrapStatus.handshake_done=Onderhandelen met een Tor-relay voltooid +torlauncher.bootstrapStatus.onehop_create=Een versleutelde adreslijstverbinding maken +torlauncher.bootstrapStatus.requesting_status=Netwerkstatus ophalen +torlauncher.bootstrapStatus.loading_status=Netwerkstatus laden +torlauncher.bootstrapStatus.loading_keys=Autoriteitscertificaten laden +torlauncher.bootstrapStatus.requesting_descriptors=Relay-informatie opvragen +torlauncher.bootstrapStatus.loading_descriptors=Relay-informatie laden +torlauncher.bootstrapStatus.enough_dirinfo=Laden van relay-informatie voltooid +torlauncher.bootstrapStatus.ap_conn_pt=Circuits opbouwen: verbinden met bridge +torlauncher.bootstrapStatus.ap_conn_done_pt=Circuits opbouwen: verbonden met bridge +torlauncher.bootstrapStatus.ap_conn_proxy=Circuits opbouwen: verbinden met proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Circuits opbouwen: verbonden met proxy +torlauncher.bootstrapStatus.ap_conn=Circuits opbouwen: verbinden met een Tor-relay +torlauncher.bootstrapStatus.ap_conn_done=Circuits opbouwen: verbonden met een Tor-relay +torlauncher.bootstrapStatus.ap_handshake=Circuits opbouwen: onderhandelen met een Tor-relay +torlauncher.bootstrapStatus.ap_handshake_done=Circuits opbouwen: onderhandelen met een Tor-relay voltooid +torlauncher.bootstrapStatus.circuit_create=Circuits opbouwen: Tor-circuit tot stand brengen +torlauncher.bootstrapStatus.done=Verbonden met het Tor-netwerk! + +torlauncher.bootstrapWarning.done=gereed +torlauncher.bootstrapWarning.connectrefused=verbinding geweigerd +torlauncher.bootstrapWarning.misc=overig +torlauncher.bootstrapWarning.resourcelimit=onvoldoende bronnen +torlauncher.bootstrapWarning.identity=identiteitsfout +torlauncher.bootstrapWarning.timeout=verbindingstime-out +torlauncher.bootstrapWarning.noroute=geen route naar host +torlauncher.bootstrapWarning.ioerror=lees-/schrijffout +torlauncher.bootstrapWarning.pt_missing=pluggable transport ontbreekt + +torlauncher.nsresult.NS_ERROR_NET_RESET=De verbinding met de server is verbroken. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Kon geen verbinding maken met de server. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Kon geen verbinding maken met de proxy. + +torlauncher.copiedNLogMessagesShort=%S Logboeken Gekopieerd diff --git a/toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd new file mode 100644 index 000000000000..61a73bd5f0e4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; jest tworzona przez"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", organizację nonprofit która pracuje nad obroną Twojej prywatności i wolności online."> + +<!ENTITY help.start "Chcesz pomóc?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Darowizna"> +<!ENTITY help.or "lub"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "Przyłącz się"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Pytania?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Pomóż sieci Tor powiększyć się!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informacje o licencji"> +<!ENTITY tor.TrademarkStatement "'Tor' oraz logo 'Onion' są zarejestrowanymi markami Tor Project Inc."> diff --git a/toolkit/torbutton/chrome/locale/pl/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/pl/aboutTBUpdate.dtd new file mode 100644 index 000000000000..4efda394cd37 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Lista zmian Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser został zaktualizowany."> +<!ENTITY aboutTBUpdate.linkPrefix "Aby uzyskać najbardziej aktualne informacje o tym wydaniu, "> +<!ENTITY aboutTBUpdate.linkLabel "odwiedź naszą stronę internetową"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Wersja"> +<!ENTITY aboutTBUpdate.releaseDate "Data wydania"> +<!ENTITY aboutTBUpdate.releaseNotes "Informacje o wydaniu"> diff --git a/toolkit/torbutton/chrome/locale/pl/aboutTor.dtd b/toolkit/torbutton/chrome/locale/pl/aboutTor.dtd new file mode 100644 index 000000000000..3bffe47a4e05 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Informacje na temat Tor'a"> + +<!ENTITY aboutTor.viewChangelog.label "Pokaż dziennik zmian"> + +<!ENTITY aboutTor.ready.label "Odkrywaj. Prywatnie."> +<!ENTITY aboutTor.ready2.label "Jesteś gotów do korzystania z najbardziej prywatnego sposobu przeglądania Internetu na świecie."> +<!ENTITY aboutTor.failure.label "Coś poszło nie tak!"> +<!ENTITY aboutTor.failure2.label "Tor nie działa w tej przeglądarce."> + +<!ENTITY aboutTor.search.label "Wyszukaj z DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Pytania?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Sprawdź naszą instrukcje korzystania z Tor Browser »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Instrukcja korzystania z Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "Projekt Tor jest organizacją non-profit US 501(c)(3), wspierającą prawa człowieka i wolności. W jego ramach tworzone są darmowe i otwarte technologie chroniące anonimowość i prywatność. Tor wspiera ich nieograniczoną dostępność i użycie oraz popularyzuje je w świecie nauki i w życiu codziennym. "> +<!ENTITY aboutTor.getInvolved.label "Zaangażuj się »"> + +<!ENTITY aboutTor.newsletter.tagline "Otrzymuj aktualności o Tor, prosto do swojej skrzynki."> +<!ENTITY aboutTor.newsletter.link_text "Zapisz się na newsletter."> +<!ENTITY aboutTor.donationBanner.freeToUse "Z przeglądarki Tor można korzystać bezpłatnie dzięki darowiznom od osób takich jak Ty."> +<!ENTITY aboutTor.donationBanner.buttonA "Przekaż darowiznę teraz"> + +<!ENTITY aboutTor.alpha.ready.label "Przetestuj. Dokładnie."> +<!ENTITY aboutTor.alpha.ready2.label "Jesteś gotów do przetestowania najbardziej prywatnego sposobu przeglądania Internetu na świecie."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha to niestabilna wersja Tor Browser, której możesz używać do podglądu nowych funkcji, testowania ich wydajności i przekazywania opinii przed wydaniem."> +<!ENTITY aboutTor.alpha.bannerLink "Zgłoś błąd na forum Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Przetestuj. Dokładnie."> +<!ENTITY aboutTor.nightly.ready2.label "Jesteś gotów do przetestowania najbardziej prywatnego sposobu przeglądania Internetu na świecie."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly to niestabilna wersja Tor Browser, której możesz używać do podglądu nowych funkcji, testowania ich wydajności i przekazywania opinii przed wydaniem."> +<!ENTITY aboutTor.nightly.bannerLink "Zgłoś błąd na forum Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ZASILANE PRZEZ PRYWATNOŚĆ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "OPÓR"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "ZMIANA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "WOLNOŚĆ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ZRÓB DOTACJE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Twoja darowizna zostanie wyrównana przez Przyjaciół Tor, do maksymalnie 100 000 USD."> diff --git a/toolkit/torbutton/chrome/locale/pl/brand.dtd b/toolkit/torbutton/chrome/locale/pl/brand.dtd new file mode 100644 index 000000000000..a565de4784ea --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Project Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' oraz logo 'Onion' są zarejestrowanymi markami Tor Project Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Kliknij, aby włączyć wszystkie zainstalowane wtyczki systemowe"> +<!ENTITY plugins.installed.enable "Włącz wtyczki"> +<!ENTITY plugins.installed.disable "Wyłącz wtyczki"> +<!ENTITY plugins.installed.disable.tip "Kliknij, aby zapobiec włączaniu wtyczek systemowych."> diff --git a/toolkit/torbutton/chrome/locale/pl/brand.properties b/toolkit/torbutton/chrome/locale/pl/brand.properties new file mode 100644 index 000000000000..500fe0a32d9f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Project Tor + +homePageSingleStartMain=Firefox Start, szybka strona domowa z wbudowana wyszukiwarką +homePageImport=importuj Twoją stronę domową z %S + +homePageMigrationPageTitle=Wybór Strony Domowej +homePageMigrationDescription=Proszę wybierz stronę domową którą chcesz używać: + +syncBrandShortName=Synchronizuj diff --git a/toolkit/torbutton/chrome/locale/pl/branding/brand.ftl b/toolkit/torbutton/chrome/locale/pl/branding/brand.ftl new file mode 100644 index 000000000000..3628b6240b2b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Project Tor +trademarkInfo = 'Tor' oraz logo 'Onion' są zarejestrowanymi markami Tor Project Inc. diff --git a/toolkit/torbutton/chrome/locale/pl/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/pl/browserOnboarding.properties new file mode 100644 index 000000000000..c9c37ef21b9e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Witamy +onboarding.tour-tor-welcome.title=Jesteś gotowy. +onboarding.tour-tor-welcome.description=Tor Browser oferuje najwyższy standard prywatości oraz bezpieczeństwa przy przęglądaniu sieci. Jesteś teraz chroniony przed śledzeniem, inwigilacją i cenzurą. To szybkie wdrożenie pokaże Ci, jak. +onboarding.tour-tor-welcome.next-button=Przejdź do prywatności + +onboarding.tour-tor-privacy=Prywatność +onboarding.tour-tor-privacy.title=Zlekcewarz trackery i snoopery. +onboarding.tour-tor-privacy.description=Tor Browser izoluje ciasteczka i usuwa twoją historię przeglądania po każdej sesji. Te modyfikacje zapewniają że Twoja prywatność oraz bezpieczeństwo są chronione przez przeglądarkę. Kliknij 'Sieć Tor' aby dowiedzieć się jak chronimy Cię na poziomie sieciowym. +onboarding.tour-tor-privacy.button=Przejdź do sieci Tor + +onboarding.tour-tor-network=Sieć Tor +onboarding.tour-tor-network.title=Podrózuj po zdecentralizowanej sieci. +onboarding.tour-tor-network.description=Tor Browser łączy Cię z siecią Tor prowadzoną przez tysiące wolontariuszy na całym świecie. W przeciwieństwie do VPN, nie ma jednego punktu awarii ani scentralizowanej jednostki, której musisz zaufać, aby prywatnie korzystać z Internetu. +onboarding.tour-tor-network.description-para2=NOWOŚĆ: Ustawienia sieciowe Tor, zawierające możliwość proszenia o mostki, gdzie Tor jest zablokowany, znajdują się w Preferencjach. +onboarding.tour-tor-network.action-button=Dopasuj swoje ustawienia sieci Tor +onboarding.tour-tor-network.button=Przejdź do wyświetlacza obwodu + +onboarding.tour-tor-circuit-display=Wyświetlacz obwodu +onboarding.tour-tor-circuit-display.title=Zobacz swoją ścieżkę. +onboarding.tour-tor-circuit-display.description=Dla każdej domeny, którą odwiedzisz, Twój ruch jest przekazywany i zaszyfrowany w obwodzie przechodzącym przez trzy przekaźniki Tor na całym świecie. Żadna strona internetowa nie wie, skąd się łączysz. Możesz poprosić o nowy obwód, klikając "Nowy obwód dla tej strony" na naszym wyświetlaczu obwodu. +onboarding.tour-tor-circuit-display.button=Zobacz moją ścieżkę +onboarding.tour-tor-circuit-display.next-button=Przejdź do bezpieczeństwa + +onboarding.tour-tor-security=Bezpieczeństwo +onboarding.tour-tor-security.title=Wybierz swoje doświadczenie. +onboarding.tour-tor-security.description=Umożliwiamy także dodatkowe ustawienia dla zwiększenia bezpieczeństwa Twojej przeglądarki. Nasze ustawienia bezpieczeństwa pozwalają Ci blokować elementy. które mogą być użyte do ataku Twojego komputera. Kliknij poniżej, aby zobaczyć, co robią różne opcje. +onboarding.tour-tor-security.description-suffix=Uwaga: Domyślnie na pasku narzędzi nie ma NoScript i HTTPS Everywhere, ale możesz dostosować pasek narzędzi i je dodać. +onboarding.tour-tor-security-level.button=Zobacz swój poziom bezpieczeństwa +onboarding.tour-tor-security-level.next-button=Przejdź do wskazówki doświadczenia + +onboarding.tour-tor-expect-differences=Wskazówki do doświadczenia +onboarding.tour-tor-expect-differences.title=Spodziewaj się różnic. +onboarding.tour-tor-expect-differences.description=Ze wszystkimi cechami bezpieczeństwa i prywatności dostarczanych przez Tor, Twoje doświadczenie przy przeglądaniu internetu może się trochę rożnić od zwykłego. Rzeczy mogą być trochę wolniejsze i zależnie od Twojego poziomu bezpieczeństwa, niektóre elementy mogą nie działać lub się nie ładować. Możesz także być pytany o dowód że jesteś człowiekiem, nie robotem. +onboarding.tour-tor-expect-differences.button=Zobacz FAQ +onboarding.tour-tor-expect-differences.next-button=Przejdź do usług Onion + +onboarding.tour-tor-onion-services=Usługi Onion +onboarding.tour-tor-onion-services.title=Bądź dodatkowo chroniony. +onboarding.tour-tor-onion-services.description=Usługi Onion to witryny z rozszerzeniem .onion, które zapewniają dodatkową ochronę wydawcom i odwiedzającym, w tym dodatkowe zabezpieczenia przed cenzurą. Usługi Onion umożliwiają każdemu anonimowe dostarczanie treści i usług. Kliknij poniżej, aby odwiedzić witrynę Onion DuckDuckGo. +onboarding.tour-tor-onion-services.button=Odwiedź Onion +onboarding.tour-tor-onion-services.next-button=Skończone + +onboarding.overlay-icon-tooltip-updated2=Zobacz co nowego\nw %S +onboarding.tour-tor-update.prefix-new=Nowe +onboarding.tour-tor-update.prefix-updated=Zaktualizowano + +onboarding.tour-tor-toolbar=Pasek narzędzi +onboarding.tour-tor-toolbar-update-9.0.title=Żegnaj, przycisku Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Chcemy, aby Twoje doświadczenia z używania Tor były w pełni zintegrowane z Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Dlatego teraz, zamiast używać przycisku Onion, możesz zobaczyć obwód Tor za pomocą [i] na pasku URL i zażądać nowej tożsamości za pomocą przycisku paska narzędzi lub menu [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Jak zażądać nową tożsamość +onboarding.tour-tor-toolbar-update-9.0.next-button=Przejdź do sieci Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Dalej +onboarding.tor-circuit-display.done=Skończone +onboarding.tor-circuit-display.one-of-three=1 z 3 +onboarding.tor-circuit-display.two-of-three=2 z 3 +onboarding.tor-circuit-display.three-of-three=3 z 3 + +onboarding.tor-circuit-display.intro.title=Jak działają obwody? +onboarding.tor-circuit-display.intro.msg=Obwody są zbudowane z losowy przypisanych przekaźników, które są komputerami dookoła świata, skonfigurowanymi do przekazywania ruchu sieciowego Tor. Obwody pozwalają Ci przeglądać prywatnie i łączyć się z usługami onion. + +onboarding.tor-circuit-display.diagram.title=Wyświetlacz obwodu +onboarding.tor-circuit-display.diagram.msg=Ten diagram pokazuje przekaźniki tworzące obwód dla tej strony. Aby zapobiec wiązaniu aktywności pomiędzy różnymi stronami, każda strona dostaje swój obwód. + +onboarding.tor-circuit-display.new-circuit.title=Czy potrzebujesz nowego obwodu? +onboarding.tor-circuit-display.new-circuit.msg=Jeśli nie jesteś w stanie połączyć się ze stroną którą próbujesz odwiedzić albo nie ładuje się ona poprawnie, wtedy możesz użyc tego przycisku aby odświeżyć stronę z nowym obwodem. diff --git a/toolkit/torbutton/chrome/locale/pl/network-settings.dtd b/toolkit/torbutton/chrome/locale/pl/network-settings.dtd new file mode 100644 index 000000000000..f2414da0f9f0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Ustawienia Sieci"> +<!ENTITY torsettings.wizard.title.default "Połącz z siecią Tor"> +<!ENTITY torsettings.wizard.title.configure "Ustawienia sieci Tor"> +<!ENTITY torsettings.wizard.title.connecting "Nawiązywanie połączenia"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Język Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Wybierz język."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Kliknij "Połącz", aby połączyć się z Torem."> +<!ENTITY torSettings.configurePrompt "Kliknij "Konfiguruj", aby dostosować ustawienia sieci, jeśli jesteś w kraju, który cenzuruje Tora (np. Egipt, Chiny, Turcja) lub jeśli łączysz się z prywatnej sieci, która wymaga serwera proxy."> +<!ENTITY torSettings.configure "Konfiguruj"> +<!ENTITY torSettings.connect "Połącz"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Uruchamianie oprogramowania Tor"> +<!ENTITY torsettings.restartTor "Zrestartuj Tora"> +<!ENTITY torsettings.reconfigTor "Przekonfiguruj"> + +<!ENTITY torsettings.discardSettings.prompt "Skonfigurowałeś mostki Tora lub wprowadziłeś lokalne ustawienia serwera proxy.  Aby nawiązać bezpośrednie połączenie do sieci Tor, ustawienia te muszą zostać usunięte."> +<!ENTITY torsettings.discardSettings.proceed "Usuń ustawienia i połącz"> + +<!ENTITY torsettings.optional "(opcjonalnie)"> + +<!ENTITY torsettings.useProxy.checkbox "Używam serwera proxy do łączenia się z Internetem"> +<!ENTITY torsettings.useProxy.type "Typ serwera proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "wybierz typ proxy"> +<!ENTITY torsettings.useProxy.address "Adres"> +<!ENTITY torsettings.useProxy.address.placeholder "Nazwa hosta lub adres IP"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Użytkownik"> +<!ENTITY torsettings.useProxy.password "Hasło"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Ten komputer pozwala na połączenie z ustalonymi portami"> +<!ENTITY torsettings.firewall.allowedPorts "Dozwolone porty"> +<!ENTITY torsettings.useBridges.checkbox "Tor jest ocenzurowany w moim kraju"> +<!ENTITY torsettings.useBridges.default "Wybierz wbudowany mostek"> +<!ENTITY torsettings.useBridges.default.placeholder "wybierz mostek"> +<!ENTITY torsettings.useBridges.bridgeDB "Uzyskaj mostek od torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Wprowadź znaki z obrazka"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Poproś o inne zadanie"> +<!ENTITY torsettings.useBridges.captchaSubmit "Potwierdź"> +<!ENTITY torsettings.useBridges.custom "Dostarcz mostek, który znam"> +<!ENTITY torsettings.useBridges.label "Wprowadź informacje o mostku z zaufanego źródła."> +<!ENTITY torsettings.useBridges.placeholder "wpisz adres:port (po jednym w każdej linii)"> + +<!ENTITY torsettings.copyLog "Skopiuj log do schowka"> + +<!ENTITY torsettings.proxyHelpTitle "Pomoc proxy"> +<!ENTITY torsettings.proxyHelp1 "Lokalny serwer proxy może być potrzebny podczas łączenia się przez sieć firmową, szkolną lub uniwersytecką. Jeśli nie masz pewności, czy serwer proxy jest potrzebny, sprawdź ustawienia internetowe w innej przeglądarce lub sprawdź ustawienia sieciowe systemu."> + +<!ENTITY torsettings.bridgeHelpTitle "Pomoc Przekaźników Mostkowych"> +<!ENTITY torsettings.bridgeHelp1 "Mostki są specjalnymi rodzajami przekaźników, które utrudniają blokowanie połączeń z siecią Tor. Każdy rodzaj mostku wykorzystuje inną metodę unikania cenzury.  Mostki "obfs" sprawiają, że Twój ruch wygląda jak losowy szum, a "meek-azure" sprawiają, że Twój ruch wygląda jakbyś łączył się z tą usługą zamiast z Torem."> +<!ENTITY torsettings.bridgeHelp2 "Ze względu na różny sposób, w jaki kraje próbują blokować Tora, niektóre mostki działają tylko w niektórych krajach.  Jeśli nie masz pewności, które mostki działają w Twoim kraju, odwiedź torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Proszę zaczekać, aż ustanowimy połączenie do sieci Tor.  Może to potrwać kilka minut."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Połączenie"> +<!ENTITY torPreferences.torSettings "Ustawienia Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser kieruje Twój ruch przez sieć Tor, utrzymywaną przez tysiące wolontariuszy na całym świecie." > +<!ENTITY torPreferences.learnMore "Dowiedz się więcej"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Testuj"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Sieć Tor:"> +<!ENTITY torPreferences.statusTorConnected "Połączono"> +<!ENTITY torPreferences.statusTorNotConnected "Brak połączenia"> +<!ENTITY torPreferences.statusTorBlocked "Potencjalnie zablokowany"> +<!ENTITY torPreferences.learnMore "Dowiedz się więcej"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Szybki start"> +<!ENTITY torPreferences.quickstartDescriptionLong "Szybki start łączy Tor Browser z siecią Tor automatycznie po uruchomieniu, w oparciu o ustawienia ostatnio używanego połączenia."> +<!ENTITY torPreferences.quickstartCheckbox "Zawsze łącz automatycznie"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Mostki"> +<!ENTITY torPreferences.bridgesDescription "Mostki ułatwiają dostęp do sieci Tor w miejscach, w których Tor jest zablokowany. W zależności od tego, gdzie jesteś, niektóre mostki mogą działać lepiej niż inne."> +<!ENTITY torPreferences.bridgeLocation "Twoja lokalizacja"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatycznie"> +<!ENTITY torPreferences.bridgeLocationFrequent "Często wybierane lokalizacje"> +<!ENTITY torPreferences.bridgeLocationOther "Inne lokalizacje"> +<!ENTITY torPreferences.bridgeChooseForMe "Wybierz mostek dla mnie…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Twoje obecne mostki"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Możesz zapisać jeden lub więcej mostków, a Tor wybierze, którego z nich użyć podczas połączenia. W razie potrzeby Tor automatycznie przełączy się na korzystanie z innego mostku."> +<!ENTITY torPreferences.bridgeId "#1 mostek: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Usuń"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Wyłącz wbudowane mostki"> +<!ENTITY torPreferences.bridgeShare "Udostępnij ten mostek za pomocą kodu QR lub kopiując jego adres:"> +<!ENTITY torPreferences.bridgeCopy "Skopiuj adres mostka"> +<!ENTITY torPreferences.copied "Skopiowano!"> +<!ENTITY torPreferences.bridgeShowAll "Pokaż wszystkie mostki"> +<!ENTITY torPreferences.bridgeRemoveAll "Usuń wszystkie mostki"> +<!ENTITY torPreferences.bridgeAdd "Dodaj nowy mostek"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Wybierz jeden z wbudowanych mostków Tor Browser"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Wybierz wbudowany mostek…"> +<!ENTITY torPreferences.bridgeRequest "Poproś o mostek..."> +<!ENTITY torPreferences.bridgeEnterKnown "Wpisz adres mostka, który już znasz"> +<!ENTITY torPreferences.bridgeAddManually "Dodaj mostek ręcznie…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Zaawansowane"> +<!ENTITY torPreferences.advancedDescription "Skonfiguruj sposób, w jaki Tor Browser łączy się z Internetem"> +<!ENTITY torPreferences.advancedButton "Ustawienia…"> +<!ENTITY torPreferences.viewTorLogs "Zobacz dziennik zdarzeń Tor"> +<!ENTITY torPreferences.viewLogs "Wyświetl dziennik zdarzeń..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Usunąć wszystkie mostki?"> +<!ENTITY torPreferences.removeBridgesWarning "To działanie nie może zostać cofnięte."> +<!ENTITY torPreferences.cancel "Anuluj"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Skanuj kod QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Wbudowane mostki"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser zawiera określone typy mostków znane jako „podłączane transporty”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 to rodzaj wbudowanego mostka, który sprawia, że ruch w sieci Tor wygląda losowo. Są one też mniej podatne na zablokowanie niż ich poprzednicy, mostki obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake to wbudowany mostek, który omija cenzurę, kierując połączenie przez serwery proxy Snowflake, które są obsługiwane przez wolontariuszy."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure to wbudowany mostek, który sprawia, że wygląda na to, że korzystasz ze strony internetowej Microsoftu zamiast Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Poproś o mostek"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Nawiązywanie połączenia z BridgeDB. Proszę czekać."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Rozwiąż CAPTCHA, aby poprosić o mostek."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Rozwiązanie nie jest poprawne. Proszę spróbuj ponownie."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Dostarcz mostek "> +<!ENTITY torPreferences.provideBridgeHeader "Wprowadź informacje o mostku z zaufanego źródła"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Ustawienia połączenia"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Skonfiguruj sposób, w jaki Tor Browser łączy się z Internetem"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Wartości oddzielone przecinkiem"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Dziennik zdarzeń Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Niepołączony"> +<!ENTITY torConnect.connectingConcise "Trwa łączenie..."> +<!ENTITY torConnect.tryingAgain "Próbuję ponownie…"> +<!ENTITY torConnect.noInternet "Tor Browser nie może połączyć się z Internetem"> +<!ENTITY torConnect.noInternetDescription "Może to być spowodowane problemem z połączeniem, a nie zablokowaniem sieci Tor. Sprawdź połączenie internetowe, ustawienia proxy i zapory sieciowej przed ponowną próbą."> +<!ENTITY torConnect.couldNotConnect "Tor Browser nie może połączyć się z siecią Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "skonfiguruj połączenie"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Jeśli sieć Tor jest zablokowana w Twojej lokalizacji, może pomóc wypróbowanie mostka. Asystent połączenia może wybrać jeden dla Ciebie na podstawie Twojej lokalizacji lub zamiast tego możesz #1 ręcznie."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Próbuję mostka…"> +<!ENTITY torConnect.tryingBridgeAgain "Próbuję jeszcze raz…"> +<!ENTITY torConnect.errorLocation "Tor Browser nie może Cię zlokalizować"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser musi znać Twoją lokalizację, aby wybrać dla Ciebie odpowiedni mostek. Jeśli wolisz nie udostępniać swojej lokalizacji, zamiast tego #1 ręcznie."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Czy te ustawienia lokalizacji są prawidłowe?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser nadal nie może połączyć się z siecią Tor. Sprawdź, czy ustawienia lokalizacji są prawidłowe i spróbuj ponownie lub zamiast tego #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser nadal nie może się połączyć"> +<!ENTITY torConnect.finalErrorDescription "Pomimo wszelkich starań asystent połączenia nie był w stanie połączyć się z siecią Tor. Spróbuj rozwiązać problem z połączeniem i ręcznie dodać mostek."> +<!ENTITY torConnect.breadcrumbAssist "Asystent połączenia"> +<!ENTITY torConnect.breadcrumbLocation "Ustawienia lokalizacji"> +<!ENTITY torConnect.breadcrumbTryBridge "Wypróbuj mostek"> +<!ENTITY torConnect.automatic "Automatycznie"> +<!ENTITY torConnect.selectCountryRegion "Wybierz kraj lub region"> +<!ENTITY torConnect.frequentLocations "Często wybierane lokalizacje"> +<!ENTITY torConnect.otherLocations "Inne lokalizacje"> +<!ENTITY torConnect.restartTorBrowser "Uruchom ponownie Tor Browser"> +<!ENTITY torConnect.configureConnection "Skonfiguruj połączenie…"> +<!ENTITY torConnect.viewLog "Wyświetl dziennik…"> +<!ENTITY torConnect.tryAgain "Spróbuj ponownie"> +<!ENTITY torConnect.offline "Internet nieosiągalny"> +<!ENTITY torConnect.connectMessage "Zmiany w ustawieniach Tor nie zaczną obowiązywać, dopóki się nie połączysz"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser nie może nawiązać połączenia z siecią Tor"> +<!ENTITY torConnect.yourLocation "Twoja lokalizacja"> +<!ENTITY torConnect.tryBridge "Wypróbuj mostek"> +<!ENTITY torConnect.autoBootstrappingFailed "Konfiguracja automatyczna nie powiodła się"> +<!ENTITY torConnect.autoBootstrappingFailed "Konfiguracja automatyczna nie powiodła się"> +<!ENTITY torConnect.cannotDetermineCountry "Nie można określić kraju użytkownika"> +<!ENTITY torConnect.noSettingsForCountry "Brak dostępnych ustawień dla Twojej lokalizacji"> diff --git a/toolkit/torbutton/chrome/locale/pl/onboarding.properties b/toolkit/torbutton/chrome/locale/pl/onboarding.properties new file mode 100644 index 000000000000..293b6f781cee --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Pierwszy raz tutaj?\nZapoznaj się z programem %S +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=Całkiem nowy program %S.\nSprawdź, co może! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Zamknij +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Zamknij +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Przejrzano diff --git a/toolkit/torbutton/chrome/locale/pl/torbutton.dtd b/toolkit/torbutton/chrome/locale/pl/torbutton.dtd new file mode 100644 index 000000000000..eb69f9deb8ea --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nowa Tożsamość"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nowa tożsamość"> +<!ENTITY torbutton.context_menu.new_identity_key "o"> +<!ENTITY torbutton.context_menu.new_circuit "Nowy obwód dla tej strony"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nowy obwód Tor dla tej strony"> +<!ENTITY torbutton.context_menu.new_circuit_key "c"> +<!ENTITY torbutton.context_menu.networksettings "Ustawienia sieci Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Sprawdź czy są aktualizacje Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "u"> +<!ENTITY torbutton.context_menu.cookieProtections "Ochrona plików cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "c"> +<!ENTITY torbutton.button.tooltip "Kliknij tutaj, aby uruchomić Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Ustawienia bezpieczeństwa przeglądarki Tor"> +<!ENTITY torbutton.cookiedialog.title "Zarządzaj ochroną ciasteczek"> +<!ENTITY torbutton.cookiedialog.lockCol "Chronione"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Nazwa"> +<!ENTITY torbutton.cookiedialog.pathCol "Ścieżka"> +<!ENTITY torbutton.cookiedialog.protectCookie "Chroń ciasteczko"> +<!ENTITY torbutton.cookiedialog.removeCookie "Usuń ciasteczko"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Nie chroń ciasteczka"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Usuń wszystkie oprócz chronionych"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Chroń nowe ciasteczka"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Nie chroń nowych ciasteczek"> +<!ENTITY torbutton.prefs.sec_caption "Poziom bezpieczeństwa"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Suwak poziomu bezpieczeństwa pozwala na wyłączenie pewnych funkcji przeglądarki, które mogą uczynić ten program bardziej narażonym na próby ataku hakerskiego."> +<!ENTITY torbutton.prefs.sec_standard_label "Standardowy"> +<!ENTITY torbutton.prefs.sec_standard_description "Wszystkie funkcje Przeglądarki Tor i strony zostały włączone."> +<!ENTITY torbutton.prefs.sec_safer_label "Bezpieczniejszy"> +<!ENTITY torbutton.prefs.sec_safer_description "Wyłącza te funkcje witryn, które często mogą być niebezpieczne. Powoduje to, że niektóre witryny mogą nie działać poprawnie."> +<!ENTITY torbutton.prefs.sec_safer_list_label "W bezpieczniejszych ustawieniach:"> +<!ENTITY torbutton.prefs.sec_safest_label "Najbezpieczniejszy"> +<!ENTITY torbutton.prefs.sec_safest_description "Pozwala tylko na funkcje serwisu wymagane w przypadku witryn statycznych i podstawowych usług. Te zmiany dotyczą obrazów, multimediów i skryptów."> +<!ENTITY torbutton.prefs.sec_safest_list_label "W najbezpieczniejszych ustawieniach:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Dowiedz się więcej"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "Obsługa JavaScript na stronach nie używających HTTPS jest wyłączona."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript jest domyślnie wyłączony na wszystkich stronach."> +<!ENTITY torbutton.prefs.sec_limit_typography "Niektóre czcionki i symbole matematyczne są wyłączone."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Niektóre czcionki, ikony, symbole matematyczne oraz obrazki są wyłączone."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio i wideo (HTML5) oraz WebGL wymagają kliknięcia celem odtworzenia."> +<!ENTITY torbutton.prefs.sec_custom_warning "Dowolne"> +<!ENTITY torbutton.prefs.sec_overview "Wyłącz niektóre funkcje, które mogą zostać użyte do zaatakowania Twojego bezpieczeństwa i anonimowości."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Poziom bezpieczeństwa: Standardowy"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Poziom bezpieczeństwa: Bezpieczniejszy"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Poziom bezpieczeństwa: Najbezpieczniejszy"> +<!ENTITY torbutton.prefs.sec_custom_summary "Niestandardowe preferencje przeglądarki spowodowały nietypowe ustawienia zabezpieczeń. Ze względów bezpieczeństwa i prywatności zalecamy wybranie jednego z domyślnych poziomów zabezpieczeń."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Przywróć domyślne"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Zaawansowane ustawienia zabezpieczeń…"> +<!ENTITY torbutton.prefs.sec_change "Zmień…"> +<!ENTITY torbutton.circuit_display.title "Obwód Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Nowy obwód dla tej strony"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Otwórz dialog uwierzytelniania klienta usługi cebulowej"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Zapamiętaj ten klucz"> diff --git a/toolkit/torbutton/chrome/locale/pl/torbutton.properties b/toolkit/torbutton/chrome/locale/pl/torbutton.properties new file mode 100644 index 000000000000..4ba54df82ba6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP nieznany +torbutton.circuit_display.onion_site = Strona cebulowa +torbutton.circuit_display.this_browser = Ta przeglądarka +torbutton.circuit_display.relay = Przekaźnik +torbutton.circuit_display.tor_bridge = Mostek +torbutton.circuit_display.unknown_country = Nieznane państwo +torbutton.circuit_display.guard = Strażnik +torbutton.circuit_display.guard_note = Twój węzeł [Strażnik] może się nie zmienić. +torbutton.circuit_display.learn_more = Dowiedz się więcej +torbutton.circuit_display.click_to_copy = Kliknij, aby skopiować +torbutton.circuit_display.copied = Skopiowano! +torbutton.content_sizer.margin_tooltip = Tor Browser dodaje ten margines po to, aby szerokość i wysokość okna Twojej przeglądarki była mniej charakterystyczna, dzięki temu zmniejszysz szanse śledzenia Ciebie online. +extensions.torbutton@torproject.org.description = Torbutton udostępnia przycisk do konfiguracji ustawień Tora oraz szybkiego i łatwego usuwania prywatnych danych z przeglądarki. +torbutton.popup.external.title = Pobrać zewnętrzny typ pliku? +torbutton.popup.external.app = Tor Browser nie może wyświetlić tego pliku. Musisz otworzyć go z innej aplikacji\n\n +torbutton.popup.external.note = Niektóre typy plików mogą spowodować połączenie się aplikacji z internetem bez użycia sieci Tor.\n\n +torbutton.popup.external.suggest = Aby być bezpiecznym, pobrane pliki należy uruchamiać wyłącznie w trybie offline, lub użyć dystrybucji Live CD Tora, takich jak Tails.\n +torbutton.popup.launch = Pobierz plik +torbutton.popup.cancel = Anuluj +torbutton.popup.dontask = Automatyczne pobieranie plików jest od teraz włączone +torbutton.popup.no_newnym = Torbutton nie może bezpiecznie dać Ci nowej tożsamości. Nie ma dostępu do Portu Kontrolnego Tora.\n\nUżywasz Paczki Tora z Przeglądarką? +torbutton.security_settings.menu.title = Ustawienia bezpieczeństwa +torbutton.title.prompt_torbrowser = Ważne informacje o Torbuttonie +torbutton.popup.prompt_torbrowser = Torbutton teraz działa inaczej: nie można już go wyłączyć.\n\nZrobiliśmy tę zmianę, gdyż nie jest bezpiecznie używać Torbuttona w przeglądarce używanej także do przeglądania sieci bez Tora. Było za dużo błędów, których nie mogliśmy naprawić inaczej.\n\nJeśli chcesz dalej normalnie używać Firefoksa, odinstaluj Torbutton i pobierz Paczkę Tora z Przeglądarką. Cechy prywatności w Przeglądarce Tora są lepsze od tych w normalnym Firefoksie, nawet gdy jest uż [...] +torbutton.popup.short_torbrowser = Ważne informacje o Torbuttonie!\n\nTorbutton jest teraz ciągle włączony.\n\nKliknij Turbutton, aby dowiedzieć się więcej. + +torbutton.popup.confirm_plugins = Wtyczki takie jak Flash mogą szkodzić Twojej prywatności i anonimowości.\n\nMogą też omijać Tora, aby odkryć Twoją bieżącą lokalizację i adres IP.\n\nCzy na pewno chcesz włączyć wtyczki?\n\n +torbutton.popup.never_ask_again = Nie pytaj mnie więcej +torbutton.popup.confirm_newnym = Tor Browser zamknie wszystkie otwarte okna i karty. Wszystkie sesje zostaną utracone.\n\nCzy chcesz zrestartować Tor Browser teraz, aby zmienić tożsamość?\n\n + +torbutton.maximize_warning = Maksymalizacja Tor Browser pozwala stronom internetowym ustalić rozmiar ekranu i przez to śledzić użytkownika. Polecamy zostawiać Tor Browser w domyślnym rozmiarze. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Ta strona internetowa (%S) próbowała wydobyć HTML5 canvas danych obrazu, które mogą być wykorzystane w celu identyfikacji Twojego komputera.\n\nCzy chcesz, aby Tor Browser pozwolił tej stronie na wydobycie danych obrazu HTML5 canvas? +canvas.notNow=Nie teraz +canvas.notNowAccessKey=N +canvas.allow=Pozwól w przyszłości +canvas.allowAccessKey=P +canvas.never=Nigdy dla tej strony (zalecane) +canvas.neverAccessKey=i + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problem profilu %S +profileReadOnly=Nie możesz uruchomić %S z systemu plików tylko do odczytu. Prosimy o skopiowanie %S do innej lokalizacji przed ponownym jego użyciem. +profileReadOnlyMac=Nie możesz uruchomić %S w systemie plików tylko do odczytu. Prosimy o skopiowanie %S na pulpit, lub do folderu aplikacji przed ponowną próbą uruchomienia. +profileAccessDenied=%S nie posiada uprawnień, aby zobaczyć ten profil. Prosimy zmienić uprawnienia systemu plików i spróbować ponownie. +profileMigrationFailed=Migracja Twojego isniejącego profilu %S nie powiodła się.\nNowe ustawienia zostaną użyte. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Pobieranie aktualizacji %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Połączenie zaszyfrowane (usługa cebulowa, %1$S, %2$S klucze bitowe, %3$S) +pageInfo_OnionEncryption=Połączenie zaszyfrowane (usługa cebulowa) +pageInfo_OnionName=Nazwa cebulowa: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Dowiedz się więcej +onionServices.errorPage.browser=Przeglądarka +onionServices.errorPage.network=Sieć +onionServices.errorPage.onionSite=Strona cebulowa +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.descNotFound.header=Nie znaleziono strony cebulowej +onionServices.descNotFound=Najbardziej prawdopodobną przyczyną jest to, że strona cebulowa jest offline. Skontaktuj się z administratorem strony cebulowej. +onionServices.descNotFound.longDescription=Szczegóły: %S — Żądany deskryptor usługi cebulowej nie może zostać znaleziony na hashringu, zatem usługa nie jest osiągalna dla klienta. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.descInvalid.header=Nie można dotrzeć do strony cebulowej +onionServices.descInvalid=Strona cebulowa jest nieosiągalna z powodu błędu wewnętrznego. +onionServices.descInvalid.longDescription=Szczegóły: %S — Żądany deskryptor usługi cebulowej nie może zostać przeanalizowany lub sprawdzenie poprawności podpisu nie powiodło się. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.introFailed.header=Strona cebulowa została rozłączona +onionServices.introFailed=Najbardziej prawdopodobną przyczyną jest to, że strona cebulowa jest offline. Skontaktuj się z administratorem strony cebulowej. +onionServices.introFailed.longDescription=Szczegóły: %S - Wprowadzenie nie powiodło się, co oznacza, że znaleziono deskryptor, ale usługa nie jest już połączona z punktem wprowadzenia. Prawdopodobnie usługa zmieniła swój deskryptor lub nie jest uruchomiona. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.rendezvousFailed.header=Nie można połączyć się ze stroną cebulową +onionServices.rendezvousFailed=Strona cebulowa jest zajęta lub sieć Tor jest przeciążona. Spróbuj ponownie później. +onionServices.rendezvousFailed.longDescription=Szczegóły: %S — Klient nie mógł się spotkać z usługą, co oznacza, że klient nie mógł sfinalizować połączenia. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Wymagana Autoryzacja +onionServices.clientAuthMissing.header=Strona cebulowa wymaga uwierzytelnienia +onionServices.clientAuthMissing=Dostęp do strony cebulowej wymaga klucza, ale żaden nie został dostarczony. +onionServices.clientAuthMissing.longDescription=Szczegóły: %S — Klient pobrał żądany deskryptor usługi cebulowej, ale nie mógł odszyfrować jego zawartości, ponieważ brakuje informacji autoryzacyjnych klienta. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Uwierzytelnianie nie powiodło się +onionServices.clientAuthIncorrect.header=Uwierzytelnianie strony cebulowej nie powiodło się +onionServices.clientAuthIncorrect=Podany klucz jest niepoprawny lub został odwołany. Skontaktuj się z administratorem strony cebulowej. +onionServices.clientAuthIncorrect.longDescription=Szczegóły: %S — Klient mógł pobrać żądany deskryptor usługi cebulowej, ale nie był w stanie odszyfrować jego zawartości przy użyciu podanych informacji autoryzacyjnych klienta. Może to oznaczać, że dostęp został cofnięty. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.badAddress.header=Nieprawidłowy adres strony cebulowej +onionServices.badAddress=Podany adres strony cebulowej jest nieprawidłowy. Sprawdź, czy wpisałeś go poprawnie. +onionServices.badAddress.longDescription=Szczegóły: %S — Podany adres .onion jest nieprawidłowy. Ten błąd jest zwracany z jednego z następujących powodów: suma kontrolna adresu nie jest zgodna, klucz publiczny ed25519 jest nieprawidłowy lub kodowanie jest nieprawidłowe. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem z ładowaniem strony cebulowej +onionServices.introTimedOut.header=Limit czasu tworzenia obwodu strony cebulowej +onionServices.introTimedOut=Nie udało się połączyć ze stroną cebulową, prawdopodobnie z powodu słabego połączenia sieciowego. +onionServices.introTimedOut.longDescription=Szczegóły: %S — Upłynął limit czasu połączenia z żądaną usługą cebulową podczas próby zbudowania obwodu spotkania. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S żąda uwierzytelnienia. +onionServices.authPrompt.keyPlaceholder=Wprowadź swój klucz prywatny dla tej usługi cebulowej +onionServices.authPrompt.done=Skończone +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Wprowadź poprawny klucz (52 znaki base32 lub 44 znaki base64) +onionServices.authPrompt.failedToSetKey=Konfiguracja Tor przy użyciu twojego klucza nie powiodła się +onionServices.authPreferences.header=Uwierzytelnianie usług cebulowych +onionServices.authPreferences.overview=Niektóre usługi cebulowe wymagają identyfikacji za pomocą klucza (rodzaj hasła) przed uzyskaniem dostępu do nich. +onionServices.authPreferences.savedKeys=Zapisane klucze... +onionServices.authPreferences.dialogTitle=Klucze usługi cebulowej +onionServices.authPreferences.dialogIntro=Klucze następujących stron cebulowych są przechowywane na twoim komputerze +onionServices.authPreferences.onionSite=Strona cebulowa +onionServices.authPreferences.onionKey=Klucz +onionServices.authPreferences.remove=Usuń +onionServices.authPreferences.removeAll=Usuń wszystko +onionServices.authPreferences.failedToGetKeys=Nie można odebrać kluczy z Tor +onionServices.authPreferences.failedToRemoveKey=Usunięcie klucza nie powiodło się +onionServices.v2Deprecated.pageTitle=Ostrzeżenie o wycofaniu strony cebulowej w wersji 2 +onionServices.v2Deprecated.header=Strony cebulowe w wersji 2 zostaną wkrótce wycofane +onionServices.v2Deprecated=Wkrótce ta strona cebulowa będzie niedostępna. Skontaktuj się z jej administratorem i zachęć go do aktualizacji. +onionServices.v2Deprecated.longDescription=Tor kończy wsparcie dla usług cebulowych w wersji 2 począwszy od lipca 2021 r., a ta strona cebulowa nie będzie już dostępna pod tym adresem. Jeśli jesteś administratorem strony, prędko uaktualnij usługę cebulową do wersji 3. +onionServices.v2Deprecated.tryAgain=Rozumiem +onionServices.v2Deprecated.tooltip=Wkrótce ta strona cebulowa będzie niedostępna + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Zawsze traktuj cebule priorytetowo +onionLocation.alwaysPrioritizeAccessKey=u +onionLocation.notNow=Nie teraz +onionLocation.notNowAccessKey=n +onionLocation.description=Bezpieczniejsza wersja tej strony jest dostępna jako usługa cebulowa. Usługi cebulowe pomagają twórcom witryn internetowych oraz odwiedzającym je bronić się przed monitorowaniem ruchu i cenzurą. +onionLocation.tryThis=Wypróbuj usługi cebulowe +onionLocation.onionAvailable=.onion dostępna +onionLocation.learnMore=Dowiedz się więcej... +onionLocation.always=Zawsze +onionLocation.askEverytime=Pytaj za każdym razem +onionLocation.prioritizeOnionsDescription=Nadaj priorytet witrynom .onion, gdy są znane. +onionLocation.onionServicesTitle=Usługi cebulowe + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Adres kryptowaluty (%S) został skopiowany z niezabezpieczonej strony internetowej. Mogło dojść do zmodyfikowania. +cryptoSafetyPrompt.whatCanHeading=Co możesz z tym zrobić? +cryptoSafetyPrompt.whatCanBody=Możesz spróbować ponownie połączyć się z nowym obwodem, aby ustanowić bezpieczne połączenie, lub zaakceptować ryzyko i odrzucić to ostrzeżenie. +cryptoSafetyPrompt.learnMore=Dowiedz się więcej +cryptoSafetyPrompt.primaryAction=Załaduj ponownie kartę z nowym obwodem +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Odrzuć ostrzeżenie +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Postępuj ostrożnie +rulesets.warningDescription=Dodawanie lub modyfikowanie zestawów reguł może spowodować, że atakujący przejmą przeglądarkę. Kontynuuj tylko, jeśli wiesz, co robisz. +rulesets.warningEnable=Ostrzegaj mnie, kiedy próbuję uzyskać dostęp do tych preferencji +rulesets.warningButton=Zaakceptuj ryzyko i kontynuuj +# Ruleset list +rulesets.rulesets=Zestawy reguł +rulesets.noRulesets=Nie znaleziono żadnych zestawów reguł +rulesets.noRulesetsDescr=Gdy zapiszesz zestaw reguł w Tor Browser, pojawi się tutaj. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Ostatnia aktualizacja %S +rulesets.neverUpdated=Nigdy nie zaktualizowano albo ostatnia aktualizacja nie powiodła się +rulesets.enabled=Aktywny +rulesets.disabled=Nieaktywny +# Ruleset details/edit ruleset +rulesets.edit=Edytuj +rulesets.name=Nazwa +rulesets.jwk=JWK +rulesets.pathPrefix=Prefiks ścieżki +rulesets.scope=Zakres +rulesets.enable=Włącz ten zestaw reguł +rulesets.checkUpdates=Sprawdź aktualizacje +rulesets.jwkPlaceholder=Klucz używany do podpisania tego zestawu reguł w formacie JWK (JSON Web Key) +rulesets.jwkInvalid=JWK nie można analizować lub nie jest ważnym kluczem +rulesets.pathPrefixPlaceholder=Prefiks URL, który zawiera pliki wymagane przez zestaw reguł +rulesets.pathPrefixInvalid=Prefiks ścieżki nie jest prawidłowym adresem URL HTTP(S) +rulesets.scopePlaceholder=Wyrażenie regularne dla zakresu reguł +rulesets.scopeInvalid=Zakres nie mógł być analizowany jako wyrażenie regularne +rulesets.save=Zapisz +rulesets.cancel=Anuluj diff --git a/toolkit/torbutton/chrome/locale/pl/torlauncher.properties b/toolkit/torbutton/chrome/locale/pl/torlauncher.properties new file mode 100644 index 000000000000..4dcb22817665 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pl/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Launcher + +torlauncher.tor_exited_during_startup=Tor wyłączył się podczas uruchamiania. Może to być spowodowane błędem programu Tor, lub innego programu zainstalowanego w Twoim systemie, lub może to być wina wadliwego sprzętu. Do czasu naprawienia problemu lub restartu programu, Tor Browser się nie uruchomi. +torlauncher.tor_exited=Tor niespodziewanie wyłączył się. Może to być spowodowane błędem programu Tor, lub innego programu zainstalowanym w Twoim systemie, lub może być to wina wadliwego sprzętu. Do czasu ponownego uruchomienia Tora, Tor Browser nie będzie w stanie dotrzeć do wszystkich stron. Jeśli problem nadal występuje, należy wysłać kopię logów Tora do zespołu pomocy technicznej. +torlauncher.tor_exited2=Zrestartowanie Tora nie spowoduje zamknięcia Twoich zakładek. +torlauncher.tor_controlconn_failed=Nie można połączyć się z portem kontrolnym Tora. +torlauncher.tor_failed_to_start=Nie powiodło się włączenie Tora. +torlauncher.tor_control_failed=Nie udało się przejąć kontroli nad Tor'em. +torlauncher.tor_bootstrap_failed=Tor nie nawiązał połączenia z siecią Tora. +torlauncher.tor_bootstrap_failed_details=%1$S błąd (%2$S). + +torlauncher.unable_to_start_tor=Nie można wystartować aplikacji Tor.\n\n%S +torlauncher.tor_missing=Brakuje pliku wykonywalnego Tora. +torlauncher.torrc_missing=Brakuje pliku torrc i nie mógł on być utworzony. +torlauncher.datadir_missing=Katalog Tora nie istnieje i nie mógł być utworzony. +torlauncher.onionauthdir_missing=Katalog uwierzytelniania cebulowego Tor nie istnieje i nie można go utworzyć. +torlauncher.password_hash_missing=Nie można uzyskać hasha hasła. + +torlauncher.failed_to_get_settings=Nie można odzyskać ustawień Tora.\n\n%S +torlauncher.failed_to_save_settings=Nie można zapisać ustawień Tora.\n\n%S +torlauncher.ensure_tor_is_running=Proszę upewnić się, czy Tor jest włączony. + +torlauncher.error_proxy_addr_missing=Musisz określić adres IP lub nazwę hosta oraz numer portu, aby Tor mógł używać serwera proxy w dostępie do Internetu. +torlauncher.error_proxy_type_missing=Musisz wybrać typ proxy. +torlauncher.error_bridges_missing=Musisz podać jeden lub więcej mostów. (bridges) +torlauncher.error_default_bridges_type_missing=Musisz wybrać rodzaj transportu dla dostępnych mostów. +torlauncher.error_bridgedb_bridges_missing=Proszę poprosić o mostek. +torlauncher.error_bridge_bad_default_type=Brak dostępnych mostków, które mają typ transportu %S. Proszę zmienić swoje ustawienia. + +torlauncher.bridge_suffix.meek-amazon=(działa w Chinach) +torlauncher.bridge_suffix.meek-azure=(działa w Chinach) + +torlauncher.request_a_bridge=Poproś o mostek... +torlauncher.request_a_new_bridge=Poproś o nowy mostek... +torlauncher.contacting_bridgedb=Kontaktowanie się z BridgeDB. Proszę czekać. +torlauncher.captcha_prompt=Rozwiąż CAPTCHA, aby poprosić o mostek. +torlauncher.bad_captcha_solution=Rozwiązanie nie jest poprawne. Proszę spróbuj ponownie. +torlauncher.unable_to_get_bridge=Nie można uzyskać mostku z BridgeDB.\n\n%S +torlauncher.no_meek=Ta przeglądarka nie jest skonfigurowana dla połączeń, które są potrzebne do uzyskania mostków. +torlauncher.no_bridges_available=W tej chwili nie są dostępne żadne mostki. Przepraszamy. + +torlauncher.connect=Połącz +torlauncher.restart_tor=Zrestartuj Tora +torlauncher.quit=Wyjście +torlauncher.quit_win=Wyjście +torlauncher.done=Gotowe + +torlauncher.forAssistance=By uzyskać pomoc, skontaktuj się +torlauncher.forAssistance2=Aby uzyskać pomoc, odwiedź %S + +torlauncher.copiedNLogMessages=Kopia zakończona. %S logi Tora są gotowe do wklejenia do notatnika lub wiadomości email. + +torlauncher.bootstrapStatus.starting=Uruchamianie +torlauncher.bootstrapStatus.conn_pt=Łączenie z mostkiem +torlauncher.bootstrapStatus.conn_done_pt=Połączono z mostkiem +torlauncher.bootstrapStatus.conn_proxy=Łączenie z proxy +torlauncher.bootstrapStatus.conn_done_proxy=Połączono z proxy +torlauncher.bootstrapStatus.conn=Łączenie z przekaźnikiem Tora +torlauncher.bootstrapStatus.conn_done=Połączono z przekaźnikiem Tora +torlauncher.bootstrapStatus.handshake=Negocjowanie z przekaźnikiem Tora +torlauncher.bootstrapStatus.handshake_done=Zakończono negocjację z przekaźnikiem Tora +torlauncher.bootstrapStatus.onehop_create=Ustanawianie szyfrowanego połączenia z katalogiem +torlauncher.bootstrapStatus.requesting_status=Odczytywanie stanu sieci +torlauncher.bootstrapStatus.loading_status=Wczytywanie stanu sieci +torlauncher.bootstrapStatus.loading_keys=Wczytywanie certyfikatów uwierzytelnienia +torlauncher.bootstrapStatus.requesting_descriptors=Żądanie informacji o węźle +torlauncher.bootstrapStatus.loading_descriptors=Wczytywanie informacji o węźle +torlauncher.bootstrapStatus.enough_dirinfo=Zakończono ładowanie informacji przekaźnika +torlauncher.bootstrapStatus.ap_conn_pt=Budowanie obwodu: Łączenie z mostkiem +torlauncher.bootstrapStatus.ap_conn_done_pt=Budowanie obwodu: Połączono z mostkiem +torlauncher.bootstrapStatus.ap_conn_proxy=Budowanie obwodu: Łączenie z proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Budowanie obwodu: Połączono z proxy +torlauncher.bootstrapStatus.ap_conn=Budowanie obwodu: Łączenie z przekaźnikiem Tora +torlauncher.bootstrapStatus.ap_conn_done=Budowanie obwodu: Połączono z przekaźnikiem Tora +torlauncher.bootstrapStatus.ap_handshake=Budowanie obwodu: Negocjowanie z przekaźnikiem Tora +torlauncher.bootstrapStatus.ap_handshake_done=Budowanie obwodu: Zakończono negocjowanie z przekaźnikiem Tora +torlauncher.bootstrapStatus.circuit_create=Budowanie obwodu: Ustanawianie połączenia z Torem +torlauncher.bootstrapStatus.done=Połączony z siecią Tor! + +torlauncher.bootstrapWarning.done=zrobione +torlauncher.bootstrapWarning.connectrefused=połączenie odrzucone +torlauncher.bootstrapWarning.misc=różne +torlauncher.bootstrapWarning.resourcelimit=niewystarczające zasoby +torlauncher.bootstrapWarning.identity=niezgodność tożsamości +torlauncher.bootstrapWarning.timeout=upłynął czas połączenia +torlauncher.bootstrapWarning.noroute=brak trasy do hosta +torlauncher.bootstrapWarning.ioerror=błąd zapisu/odczytu +torlauncher.bootstrapWarning.pt_missing=brak podłączanego transportu + +torlauncher.nsresult.NS_ERROR_NET_RESET=Połączenie z serwerem zostało utracone. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Nie można połączyć się z serwerem. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Nie można połączyć się z serwerem proxy. + +torlauncher.copiedNLogMessagesShort=Skopiowanych logów %S diff --git a/toolkit/torbutton/chrome/locale/pt-BR/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/pt-BR/aboutDialog.dtd new file mode 100644 index 000000000000..1965f2195782 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; foi programada por "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "o/a &vendorShortName;"> +<!ENTITY project.end ", uma organização sem fins lucrativos para defender a sua privacidade e liberdade na internet."> + +<!ENTITY help.start "Você gostaria de ajudar?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Doar"> +<!ENTITY help.or "ou"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "envolver-se"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Perguntas?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Ajude a Rede Tor a crescer!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informações de licenciamento "> +<!ENTITY tor.TrademarkStatement "'Tor' e 'Logo da Cebola' são marcas registradas do Projeto Tor, Inc."> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/pt-BR/aboutTBUpdate.dtd new file mode 100644 index 000000000000..ac45c18c6d56 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Registro de mudanças do navegador Tor"> +<!ENTITY aboutTBUpdate.updated "O Navegador Tor foi atualizado."> +<!ENTITY aboutTBUpdate.linkPrefix "Para obter as informações mais recentes sobre esta versão"> +<!ENTITY aboutTBUpdate.linkLabel "visite nosso site."> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Versão"> +<!ENTITY aboutTBUpdate.releaseDate "Data de lançamento"> +<!ENTITY aboutTBUpdate.releaseNotes "Notas da Versão"> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd b/toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd new file mode 100644 index 000000000000..bfc6ec6af6b6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Sobre o Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Visualizar o registro de mudanças"> + +<!ENTITY aboutTor.ready.label "Explore. Com privacidade."> +<!ENTITY aboutTor.ready2.label "Você está pronto para a maior experiência de navegação privada do mundo."> +<!ENTITY aboutTor.failure.label "Alguma coisa deu errado!"> +<!ENTITY aboutTor.failure2.label "Tor não está funcionando neste navegador. "> + +<!ENTITY aboutTor.search.label "Pesquisar com DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Perguntas?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Consulte nosso Manual do Navegador Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manual do Navegador Tor"> + +<!ENTITY aboutTor.tor_mission.label "O Projeto Tor é uma organização sem fins lucrativos dos EUA 501 (c) (3) que promove direitos humanos e liberdades, criando e implementando tecnologias de privacidade e anonimato, de código aberto e livre, apoiando a sua disponibilidade e uso irrestrito e promovendo o seu entendimento científico e popular"> +<!ENTITY aboutTor.getInvolved.label "Envolva-se»"> + +<!ENTITY aboutTor.newsletter.tagline "Receba as últimas notícias do Tor diretamente na sua caixa de e-mail."> +<!ENTITY aboutTor.newsletter.link_text "Inscreva-se para receber Notícias do Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "O Tor é gratuito para uso graças às doações de pessoas como você."> +<!ENTITY aboutTor.donationBanner.buttonA "Doe Agora"> + +<!ENTITY aboutTor.alpha.ready.label "Teste. Completamente."> +<!ENTITY aboutTor.alpha.ready2.label "Você está pronto para testar a experiência de navegação mais privada do mundo."> +<!ENTITY aboutTor.alpha.bannerDescription "O navegador Tor Alpha é uma versão instável do Tor Browser que você pode usar para visualizar novos recursos, testar seu desempenho e fornecer feedback antes do lançamento."> +<!ENTITY aboutTor.alpha.bannerLink "Relate um bug no Fórum Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Teste. Completamente."> +<!ENTITY aboutTor.nightly.ready2.label "Você está pronto para testar a experiência de navegação mais privada do mundo."> +<!ENTITY aboutTor.nightly.bannerDescription "O Tor Browser está em versão instável do Tor Browser que você usa para pré-visualizar novos recursos, testar seu desempenho e prover feedback antes do lançamento."> +<!ENTITY aboutTor.nightly.bannerLink "Relate um bug no Fórum Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DOE AGORA"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Sua doação será coberta pelos Amigos do Tor, chegando até $100.000,00 "> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/brand.dtd b/toolkit/torbutton/chrome/locale/pt-BR/brand.dtd new file mode 100644 index 000000000000..fa176bddaaa7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Navegador Tor"> +<!ENTITY brandShortName "Navegador Tor"> +<!ENTITY brandFullName "Navegador Tor"> +<!ENTITY vendorShortName "Projeto Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' e 'Logo da Cebola' são marcas registradas do Projeto Tor, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Navegador Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Clique para carregar os plugins de sistema instalados"> +<!ENTITY plugins.installed.enable "Ativar plugins"> +<!ENTITY plugins.installed.disable "Desativar plugins"> +<!ENTITY plugins.installed.disable.tip "Clique para evitar o carregamento de plugins de sistema "> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/brand.properties b/toolkit/torbutton/chrome/locale/pt-BR/brand.properties new file mode 100644 index 000000000000..ddd98942e2ae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Navegador Tor +brandShortName=Navegador Tor +brandFullName=Navegador Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Navegador Tor +vendorShortName=Projeto Tor + +homePageSingleStartMain=Firefox Start, uma página inicial rápida com pesquisa embutida +homePageImport=Importar sua página inicial de %S + +homePageMigrationPageTitle=Seleção da Página Inicial +homePageMigrationDescription=Por favor, selecione a página inicial que você deseja usar: + +syncBrandShortName=Sincronizar diff --git a/toolkit/torbutton/chrome/locale/pt-BR/branding/brand.ftl b/toolkit/torbutton/chrome/locale/pt-BR/branding/brand.ftl new file mode 100644 index 000000000000..523f89c47bd5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Navegador Tor +-brand-short-name = Navegador Tor +-brand-full-name = Navegador Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Navegador Tor +-vendor-short-name = Projeto Tor +trademarkInfo = 'Tor' e 'Logo da Cebola' são marcas registradas do Projeto Tor, Inc. diff --git a/toolkit/torbutton/chrome/locale/pt-BR/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/pt-BR/browserOnboarding.properties new file mode 100644 index 000000000000..519723293c36 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Boas vindas +onboarding.tour-tor-welcome.title=Você está pronto. +onboarding.tour-tor-welcome.description=O Tor Browser oferece o mais elevado padrão de privacidade e segurança para navegação na web. Você, agora, está protegido contra rastreamento, vigilância e censura. Esta rápida abordagem mostrará como ele faz isso. +onboarding.tour-tor-welcome.next-button=Vá para Privacidade + +onboarding.tour-tor-privacy=Privacidade +onboarding.tour-tor-privacy.title=Despiste rastreadores e xeretas. +onboarding.tour-tor-privacy.description=O navegador Tor isola cookies e deleta o histórico de navegação do browser após o fim da sua sessão. Estas modificações garantem que sua privacidade e segurança estejam protegidas no browser. Clique em 'Rede Tor' para aprender como nós te protegemos ao nível de rede. +onboarding.tour-tor-privacy.button=Vá para a Rede Tor. + +onboarding.tour-tor-network=Rede Tor +onboarding.tour-tor-network.title=Viaje por uma rede descentralizada. +onboarding.tour-tor-network.description=O Tor Browser conecta você à rede Tor, composta por milhares de voluntários ao redor do mundo. Diferente de uma VPN, não há uma entidade ou ponto de falha central em que você precisa confiar para desfrutar da internet com privacidade. +onboarding.tour-tor-network.description-para2=NOVO: As configurações de rede do Tor, incluindo a capacidade de solicitar pontes onde o Tor está bloqueado, agora podem ser encontradas em Preferências. +onboarding.tour-tor-network.action-button=Ajuste suas configurações de rede do Tor +onboarding.tour-tor-network.button=Vá para a Exibição de Circuitos + +onboarding.tour-tor-circuit-display=Exibição de Circuitos +onboarding.tour-tor-circuit-display.title=Veja o seu caminho. +onboarding.tour-tor-circuit-display.description=Para cada domínio que você visita, o seu tráfego é retransmitido e criptografado em um circuito através de três retransmissores do Tor ao redor do mundo. Nenhum site sabe de onde você está se conectando. Você pode solicitar um novo circuito clicando em "Novo Circuito para este Site" no hamburger display à direita do seu browser. +onboarding.tour-tor-circuit-display.button=Ver Meu Caminho +onboarding.tour-tor-circuit-display.next-button=Vá para segurança + +onboarding.tour-tor-security=Segurança +onboarding.tour-tor-security.title=Escolha sua experiência. +onboarding.tour-tor-security.description=Nós também fornecemos configurações adicionais para aumentar a segurança do seu navegador. Nossas configurações de segurança permitem que você bloqueie elementos que podem ser usados para atacar o seu computador. Clique abaixo para ver o que essas diferentes opções fazem. +onboarding.tour-tor-security.description-suffix=Nota: Por padrão, o NoScript e o HTTPS Everywhere não estão incluídos na barra de ferramentas, mas você pode personalizar sua barra de ferramentas para adicioná-los. +onboarding.tour-tor-security-level.button=Veja seu nível de segurança +onboarding.tour-tor-security-level.next-button=Vá para dicas de experiência + +onboarding.tour-tor-expect-differences=Dicas de Experiência +onboarding.tour-tor-expect-differences.title=Espere algumas diferenças. +onboarding.tour-tor-expect-differences.description=Com toda segurança e funcionalidades de privacidade fornecidos pelo Tor, sua experiência na utilização da internet pode ser um pouco diferente. As coisas podem ficar um pouco mais devagar, e dependendo do seu nível de segurança alguns elementos podem não funcionar ou serem carregados. Você também poderá ser questionado a provar que é um humano e não um robô. +onboarding.tour-tor-expect-differences.button=Veja FAQs +onboarding.tour-tor-expect-differences.next-button=Vá para Serviços Onion + +onboarding.tour-tor-onion-services=Serviços Onion +onboarding.tour-tor-onion-services.title=Fique extra protegido. +onboarding.tour-tor-onion-services.description=Serviços Onion são sites que terminam com .onion e que fornecem proteções extras para editores e visitantes, incluindo proteções adicionais contra censura. Serviços Onion permitem que qualquer um forneça conteúdo e serviços anonimamente. Clique abaixo para visitar o site onion DuckDuckGo. +onboarding.tour-tor-onion-services.button=Visitar um endereço Onion +onboarding.tour-tor-onion-services.next-button=Feito + +onboarding.overlay-icon-tooltip-updated2=Veja o que é novo\nem %S +onboarding.tour-tor-update.prefix-new=Novo +onboarding.tour-tor-update.prefix-updated=Atualizado + +onboarding.tour-tor-toolbar=Barra de ferramentas +onboarding.tour-tor-toolbar-update-9.0.title=Adeus Onion Botão. +onboarding.tour-tor-toolbar-update-9.0.description=Queremos que sua experiência com o Tor seja totalmente integrada ao Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=É por isso que agora, em vez de usar o onion botão, você pode ver o seu Tor Circuit através do [i] na barra de URL e solicitar uma nova identidade usando o botão da barra de ferramentas ou o menu [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Como solicitar uma nova identidade +onboarding.tour-tor-toolbar-update-9.0.next-button=Vá para a Rede Tor. + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Próximo +onboarding.tor-circuit-display.done=Feito +onboarding.tor-circuit-display.one-of-three=1 de 3 +onboarding.tor-circuit-display.two-of-three=2 de 3 +onboarding.tor-circuit-display.three-of-three=3 de 3 + +onboarding.tor-circuit-display.intro.title=Como circuitos funcionam ? +onboarding.tor-circuit-display.intro.msg=Circuitos são compostos de relés designados aleatoriamente, que são computadores ao redor do mundo, configurados para encaminhar o tráfico Tor. Circuitos permitem que você navegue privadamente e se conecte a serviços onion. + +onboarding.tor-circuit-display.diagram.title=Exibição de Circuitos +onboarding.tor-circuit-display.diagram.msg=Este diagrama mostra os retransmissores que compõem o circuito para este website. Para evitar a correlação de atividade entre sites diferentes, cada website recebe um novo circuito diferente do anterior. + +onboarding.tor-circuit-display.new-circuit.title=Você precisa de um novo circuito ? +onboarding.tor-circuit-display.new-circuit.msg=Se você estiver impossibilitado de conectar-se ao site que está tentando visitar ou este não está sendo carregado corretamente, então você pode utilizar este botão para recarregar o site em um novo circuito. diff --git a/toolkit/torbutton/chrome/locale/pt-BR/network-settings.dtd b/toolkit/torbutton/chrome/locale/pt-BR/network-settings.dtd new file mode 100644 index 000000000000..de4d9655bb46 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Configurações da Rede Tor"> +<!ENTITY torsettings.wizard.title.default "Conectar-se ao Tor"> +<!ENTITY torsettings.wizard.title.configure "Configurações da Rede Tor"> +<!ENTITY torsettings.wizard.title.connecting "Estabelecendo uma Conexão "> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Idioma do navegador Tor"> +<!ENTITY torlauncher.localePicker.prompt "Por favor, selecione um idioma."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Clique em “Conectar” para conectar-se ao Tor."> +<!ENTITY torSettings.configurePrompt "Clique em “Configurar” para definir as configurações de rede caso esteja em um país em que o uso de Tor é impossibilitado (Egito, China e Turquia, por exemplo) ou esteja conectando-se por meio de uma rede privada que requeira um proxy."> +<!ENTITY torSettings.configure "Configurar"> +<!ENTITY torSettings.connect "Conectar"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Esperando que Tor inicie..."> +<!ENTITY torsettings.restartTor "Reiniciar o Tor"> +<!ENTITY torsettings.reconfigTor "Reconfigurar"> + +<!ENTITY torsettings.discardSettings.prompt "Você configurou as definições de conexões de ponte Tor ou inseriu um proxy local.  Para fazer uma conexão direta à rede Tor, essas definições devem ser removidas."> +<!ENTITY torsettings.discardSettings.proceed "Remover Configurações e Conectar"> + +<!ENTITY torsettings.optional "Opcional"> + +<!ENTITY torsettings.useProxy.checkbox "Eu uso um proxy para me conectar à Internet"> +<!ENTITY torsettings.useProxy.type "Tipo de Proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "Selecione um tipo de proxy"> +<!ENTITY torsettings.useProxy.address "Endereço"> +<!ENTITY torsettings.useProxy.address.placeholder "Endereço IP ou Servidor"> +<!ENTITY torsettings.useProxy.port "Porta"> +<!ENTITY torsettings.useProxy.username "Usuário"> +<!ENTITY torsettings.useProxy.password "Senha"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "A conexão Internet deste computador é filtrada por uma firewall que autoriza conexões somente a determinadas portas."> +<!ENTITY torsettings.firewall.allowedPorts "Portas permitidas"> +<!ENTITY torsettings.useBridges.checkbox "O Tor é censurado no meu país"> +<!ENTITY torsettings.useBridges.default "Selecione uma ponte incorporada"> +<!ENTITY torsettings.useBridges.default.placeholder "Selecione uma ponte"> +<!ENTITY torsettings.useBridges.bridgeDB "Solicite uma ponte de torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Digite os caracteres que aparecem na imagem"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Pegue um novo desafio"> +<!ENTITY torsettings.useBridges.captchaSubmit "Submeter"> +<!ENTITY torsettings.useBridges.custom "Ofereça um ponte já conhecida"> +<!ENTITY torsettings.useBridges.label "Inserir informações sobre a ponte a partir de uma fonte confiável"> +<!ENTITY torsettings.useBridges.placeholder "digite o endereço : porta (um por linha)"> + +<!ENTITY torsettings.copyLog "Copiar o registro do Tor na área de transferência"> + +<!ENTITY torsettings.proxyHelpTitle "Ajuda com o Proxy"> +<!ENTITY torsettings.proxyHelp1 "Um proxy local pode ser necessário ao conectar-se através de uma empresa, escola ou rede universitária. Se você não tiver certeza se um proxy é necessário, verifique as configurações da Internet em outro navegador ou verifique as configurações de rede do seu sistema."> + +<!ENTITY torsettings.bridgeHelpTitle "Ajuda Retransmissor de Ponte"> +<!ENTITY torsettings.bridgeHelp1 "Pontes são retransmissores não listados que dificultam o bloqueio de conexões à Rede Tor.  Cada tipo de ponte usa um método diferente para evitar censura.  Obfs faz com que o seu tráfego online pareca um barulho aleatório, e as de tipo meek fazem o seu tráfego online parecer como se estivesse conectando-se a um outro serviço e não ao Tor."> +<!ENTITY torsettings.bridgeHelp2 "Por causa do modo como certos países tentam bloquear Tor, certas pontes funcionam em alguns países, mas não em outros.  Caso você não tenha certeza sobre como pontes funcionam no país onde você está, consulte torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Por favor, aguarde enquanto estabelecemos uma conexão com a rede Tor.  Isso pode demorar alguns minutos."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Conexão"> +<!ENTITY torPreferences.torSettings "Configurações do Tor"> +<!ENTITY torPreferences.torSettingsDescription "O Navegador Tor direciona seu tráfego pela Rede Tor, administrada por milhares de voluntários em todo o mundo." > +<!ENTITY torPreferences.learnMore "Saiba mais"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Testar"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Rede Tor:"> +<!ENTITY torPreferences.statusTorConnected "Conectado"> +<!ENTITY torPreferences.statusTorNotConnected "Não conectado"> +<!ENTITY torPreferences.statusTorBlocked "Potencialmente bloqueado"> +<!ENTITY torPreferences.learnMore "Saiba mais"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Inicio rápido"> +<!ENTITY torPreferences.quickstartDescriptionLong "O começo rápido conecta o Navegador Tor à Rede Tor automaticamente quando iniciado, com base em suas últimas configurações de conexão usadas."> +<!ENTITY torPreferences.quickstartCheckbox "Sempre conectar automaticamente"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Pontes"> +<!ENTITY torPreferences.bridgesDescription "As pontes ajudam você a acessar a rede Tor em locais onde o Tor está bloqueado. Dependendo de onde você estiver, uma ponte pode funcionar melhor que outra."> +<!ENTITY torPreferences.bridgeLocation "Sua localização"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automático"> +<!ENTITY torPreferences.bridgeLocationFrequent "Locais selecionados com frequência"> +<!ENTITY torPreferences.bridgeLocationOther "Outros locais"> +<!ENTITY torPreferences.bridgeChooseForMe "Escolha uma ponte para mim…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Suas pontes atuais"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Você pode salvar uma ou mais pontes, e o Tor escolherá quais você usar quando você se conectar. O Tor automaticamente trocará outra ponte quando necessário."> +<!ENTITY torPreferences.bridgeId "#1 ponte: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Remover"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Desabilitar pontes integradas"> +<!ENTITY torPreferences.bridgeShare "Compartilhe esta ponte usando o código QR ou copiando seu endereço:"> +<!ENTITY torPreferences.bridgeCopy "Copiar endereço da ponte"> +<!ENTITY torPreferences.copied "Copiado!"> +<!ENTITY torPreferences.bridgeShowAll "Mostrar todas as pontes"> +<!ENTITY torPreferences.bridgeRemoveAll "Remover todas as pontes"> +<!ENTITY torPreferences.bridgeAdd "Adicionar nova ponte"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Escolha uma das pontes integradas do Navegador Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Selecione uma ponte integrada…"> +<!ENTITY torPreferences.bridgeRequest "Solicitar uma ponte..."> +<!ENTITY torPreferences.bridgeEnterKnown "Digite um endereço de ponte que você já conhece"> +<!ENTITY torPreferences.bridgeAddManually "Adicionar ponte manualmente"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avançado"> +<!ENTITY torPreferences.advancedDescription "Configure como o Navegador Tor se conecta à internet"> +<!ENTITY torPreferences.advancedButton "Configurações..."> +<!ENTITY torPreferences.viewTorLogs "Veja os registros do Tor"> +<!ENTITY torPreferences.viewLogs "Ver registros…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remover todas as pontes?"> +<!ENTITY torPreferences.removeBridgesWarning "Essa ação não pode ser desfeita."> +<!ENTITY torPreferences.cancel "Cancelar"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Digitalize o código QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Pontes incorporadas"> +<!ENTITY torPreferences.builtinBridgeDescription "O Navegador Tor inclui alguns tipos específicos de pontes conhecidas como “transportes plugáveis”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 é um tipo de ponte incorporada que faz seu tráfego Tor parecer aleatório. Eles também são menos propensos a serem bloqueados do que seus predecessores, pontes obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "O Snowflake é uma ponte integrada que derrota a censura roteando sua conexão por meio de proxies Snowflake, executados por voluntários."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure é uma ponte integrada que faz parecer que você está usando um site da Microsoft em vez de usar o Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Ponte de solicitação"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Entrando em contato com o BridgeDB. Por favor, espere."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resolva o CAPTCHA para solicitar uma ponte."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "A solução não está correta. Por favor, tente novamente."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Fornecer Ponte."> +<!ENTITY torPreferences.provideBridgeHeader "Insira a configuração de uma Ponte obtida a partir de uma fonte confiável"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Configurações de conexão"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure como o Navegador Tor se conecta à Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Valores separados por vírgula"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Não conectado"> +<!ENTITY torConnect.connectingConcise "Conectando..."> +<!ENTITY torConnect.tryingAgain "Tentando novamente..."> +<!ENTITY torConnect.noInternet "O navegador Tor não conseguiu acessar a Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "O navegador Tor não pôde se conectar ao Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure sua conexão"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Se o Tor é bloqueado e seu local, tente uma ponte, talvez isso possa ajudar. A assistência de conexão pode escolher uma conexão para você usar seu local, ou você pode usar a assistente de conexão manualmente #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Tentando a ponte..."> +<!ENTITY torConnect.tryingBridgeAgain "Tente mais uma vez..."> +<!ENTITY torConnect.errorLocation "O navegador Tor não conseguiu localizar você"> +<!ENTITY torConnect.errorLocationDescription "O Navegador Tor precisa saber sua localização em ordem para escolher a ponte correta para você. Se você não quiser compartilhar sua localização, use a assistente de conexão #1 em vez disso."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Essas configurações de local estão corretas?"> +<!ENTITY torConnect.isLocationCorrectDescription "O Navegador Tor ainda não conseguiu conectar ao Tor. Por favor, verifique se as configurações de sua localização estão corretas e tente novamente, ou em vez disso, use a assistente de conexão #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Assistência de localização"> +<!ENTITY torConnect.breadcrumbLocation "Configurações de localização"> +<!ENTITY torConnect.breadcrumbTryBridge "Testar ponte"> +<!ENTITY torConnect.automatic "Automático"> +<!ENTITY torConnect.selectCountryRegion "Selecione país ou região"> +<!ENTITY torConnect.frequentLocations "Locais selecionados com frequência"> +<!ENTITY torConnect.otherLocations "Outros locais"> +<!ENTITY torConnect.restartTorBrowser "Reiniciar navegador Tor"> +<!ENTITY torConnect.configureConnection "Configure a Conexão..."> +<!ENTITY torConnect.viewLog "Ver registros..."> +<!ENTITY torConnect.tryAgain "Tentar Novamente"> +<!ENTITY torConnect.offline "Internet não acessível"> +<!ENTITY torConnect.connectMessage "Alterações nas configurações do Tor não terão efeito até que você se conecte à rede Tor."> +<!ENTITY torConnect.tryAgainMessage "O navegador Tor não conseguiu estabelecer uma conexão com a rede Tor"> +<!ENTITY torConnect.yourLocation "Sua localização"> +<!ENTITY torConnect.tryBridge "Tente uma Ponte"> +<!ENTITY torConnect.autoBootstrappingFailed "Falha na configuração automática"> +<!ENTITY torConnect.autoBootstrappingFailed "Falha na configuração automática"> +<!ENTITY torConnect.cannotDetermineCountry "Não foi possível determinar o país do usuário"> +<!ENTITY torConnect.noSettingsForCountry "Nenhuma configuração disponível para seu local"> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/onboarding.properties b/toolkit/torbutton/chrome/locale/pt-BR/onboarding.properties new file mode 100644 index 000000000000..6498a3e04661 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Novo(a) no %S?\nVamos começar. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=O %S é todo novo.\nVeja o que pode fazer! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Fechar +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Cancelar +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Completo diff --git a/toolkit/torbutton/chrome/locale/pt-BR/torbutton.dtd b/toolkit/torbutton/chrome/locale/pt-BR/torbutton.dtd new file mode 100644 index 000000000000..c1bf81a4d22f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Nova Identidade"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Nova identidade"> +<!ENTITY torbutton.context_menu.new_identity_key "Eu"> +<!ENTITY torbutton.context_menu.new_circuit "Novo Circuito Tor para este Site"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Novo Circuito Tor para este Site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Configurações da Rede Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Procurar Atualizações do Navegador Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Proteções de Cookies..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Clique para iniciar o Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Configurações de Segurança do Navegador Tor"> +<!ENTITY torbutton.cookiedialog.title "Gerenciar Proteções de Cookies"> +<!ENTITY torbutton.cookiedialog.lockCol "Protegido"> +<!ENTITY torbutton.cookiedialog.domainCol "Hospedeiro"> +<!ENTITY torbutton.cookiedialog.nameCol "Nome"> +<!ENTITY torbutton.cookiedialog.pathCol "Caminho"> +<!ENTITY torbutton.cookiedialog.protectCookie "Proteger Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Remover Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Desproteger Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Remover Todos Exceto os Protegidos"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Proteger Novos Cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Não Proteger Novos Cookies"> +<!ENTITY torbutton.prefs.sec_caption "Nível de Segurança"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "The Security Slider possibilita que você desabilite certas funcionalidades de navegação que podem torná-la mais vulnerável a tentativas de ataque."> +<!ENTITY torbutton.prefs.sec_standard_label "Padrão"> +<!ENTITY torbutton.prefs.sec_standard_description "Todos os recursos do Navegador Tor e do website estão ativos."> +<!ENTITY torbutton.prefs.sec_safer_label "Seguro"> +<!ENTITY torbutton.prefs.sec_safer_description "Desativar recursos inseguros de websites, o que pode fazer com que alguns sites percam a funcionalidade."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Na configuração mais segura:"> +<!ENTITY torbutton.prefs.sec_safest_label "Segurança máxima"> +<!ENTITY torbutton.prefs.sec_safest_description "Apenas permitir os recursos dos websites necessários para sites estáticos e serviços básicos. Essas mudanças afetam imagens, mídias e scripts."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Na configuração máxima:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Aprenda mais"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript está desativado em todos os sites sem HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript está desativado por padrão em todos os sites."> +<!ENTITY torbutton.prefs.sec_limit_typography "Algumas fontes e símbolos matemáticos estão desativados."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Algumas fontes, ícones, símbolos matemáticas e imagens estão desativadas."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Áudio e vídeo (mídia HTML5) e WebGL são reproduzidos com um clique."> +<!ENTITY torbutton.prefs.sec_custom_warning "Personalizado"> +<!ENTITY torbutton.prefs.sec_overview "Desabilita certos recursos web que podem ser usados para atacar sua segurança e anonimato."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Nível de Segurança: Padrão"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Nível de Segurança: Seguro"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Nível de Segurança: Segurança máxima"> +<!ENTITY torbutton.prefs.sec_custom_summary "As configurações personalizadas do seu navegador ficaram fora do comum. Por razões de segurança e de privacidade, recomendamos que você escolha um dos níveis padrões de segurança. "> +<!ENTITY torbutton.prefs.sec_restore_defaults "Restaurar Padrões"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Configurações Avançadas de Segurança"> +<!ENTITY torbutton.prefs.sec_change "Alterar..."> +<!ENTITY torbutton.circuit_display.title "Circuito Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Novo circuito para este site"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Prompt de autenticação do cliente do serviço onion aberto"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Lembre-se desta chave"> diff --git a/toolkit/torbutton/chrome/locale/pt-BR/torbutton.properties b/toolkit/torbutton/chrome/locale/pt-BR/torbutton.properties new file mode 100644 index 000000000000..cff4eafd745f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP desconhecido +torbutton.circuit_display.onion_site = Site Onion +torbutton.circuit_display.this_browser = Este navegador +torbutton.circuit_display.relay = Relê +torbutton.circuit_display.tor_bridge = Ponte +torbutton.circuit_display.unknown_country = País desconhecido +torbutton.circuit_display.guard = Guard +torbutton.circuit_display.guard_note = Seu nó [Guard] não pode mudar. +torbutton.circuit_display.learn_more = Aprenda mais +torbutton.circuit_display.click_to_copy = Clique para copiar +torbutton.circuit_display.copied = Copiado! +torbutton.content_sizer.margin_tooltip = O Navegador Tor inclui esta margem para que a altura e a largura da janela sejam menos distinguíveis, o que reduz a possibilidade de que alguém rastreie a sua navegação . +extensions.torbutton@torproject.org.description = O Torbutton fornece uma opção para configurar as preferências do Tor e, com rapidez e facilidade, limpar os dados de navegação privada. +torbutton.popup.external.title = Fazer o download de um tipo de arquivo externo? +torbutton.popup.external.app = O Navegador Tor não pode exibir este arquivo. Você precisa abri-lo com um outro aplicativo.\n\n +torbutton.popup.external.note = Alguns tipos de arquivos podem fazer com que aplicativos se conectem à Internet sem usar o Tor.\n\n +torbutton.popup.external.suggest = Para sua segurança, você só deve abrir arquivos baixados enquanto estiver desconectado, ou usar um Live CD do Tor, como o Tails.\n +torbutton.popup.launch = Fazer o download do arquivo +torbutton.popup.cancel = Cancelar +torbutton.popup.dontask = Fazer o download dos arquivos automaticamente de agora em diante +torbutton.popup.no_newnym = O Torbutton não pode lhe dar uma nova identidade com segurança. Ele não tem acesso à Porta de Controle do Tor.\n\nVocê está usando o Pacote do Navegador Tor? +torbutton.security_settings.menu.title = Configurações de Segurança +torbutton.title.prompt_torbrowser = Informação importante do Torbutton +torbutton.popup.prompt_torbrowser = O Torbutton agora está funcionando de outra maneira: você não pode mais desligá-lo.\n\nNós fizemos esta mudança porque não é seguro usar o Torbutton em um navegador que também é usado para navegação não-Tor. Havia muitos bugs que nós não conseguíamos resolver de nenhum outro modo.\n\nSe você quiser continuar usando o Firefox normalmente, deverá desinstalar o Torbutton e fazer o download do Pacote do Navegador Tor. As configurações de privacidade do Nav [...] +torbutton.popup.short_torbrowser = Informação Importante do Torbutton!\n\nO Torbutton agora estará sempre habilitado.\n\nClique no Torbutton para mais informações. + +torbutton.popup.confirm_plugins = Plugins como o Flash podem prejudicar sua privacidade e o seu anonimato.\n\nPode ser ainda que eles ignorem o Tor e revelem a sua localização atual e o endereço de IP.\n\nVocê tem certeza que deseja habilitar o uso de plugins?\n\n +torbutton.popup.never_ask_again = Não me pergunte novamente +torbutton.popup.confirm_newnym = O navegador Tor fechará todas as janelas e abas. Todas as sessões de websites serão perdidas.\n\nVocê deseja reiniciar o navegador Tor agora para reiniciar a sua identidade?\n\n + +torbutton.maximize_warning = Maximizar o Navegador Tor pode permitir que websites determinem o tamanho do monitor, o que pode ser usado para rastreá-lo. Recomenda-se deixar a janela do Navegador Tor no seu tamanho original. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Este website (%S) tentou extrair dados de imagem CANVAS HTML5, que podem ser usados para identificar o seu computador.\n\nVocê deseja que o Navegador Tor permita que este website extraia dados de imagem CANVAS HTML5? +canvas.notNow=Por enquanto, não +canvas.notNowAccessKey=N +canvas.allow=Permitir +canvas.allowAccessKey=A +canvas.never=Nunca a este site (recomendado) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problema com o Perfil %S +profileReadOnly=Não é possível executar %S a partir de um sistema de arquivo "somente-leitura". Copie %S em um outro local antes de tentar usá-lo. +profileReadOnlyMac=Não é possível executar %S a partir de um sistema de arquivo "somente-leitura". Copie %S no seu Desktop ou em uma pasta de Aplicações antes de tentar usá-lo.\n +profileAccessDenied=%S não possui permissão para acessar o perfil. Por favor, ajuste as suas permissões de arquivo de sistema e tente novamente. +profileMigrationFailed=Migração de seu perfil %S existente falhou.\nNovas configurações serão usadas. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Baixando a atualização %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Conexão criptografada (Serviço Onion, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=Conexão criptografada (Serviço Onion) +pageInfo_OnionName=Nome Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Saber mais +onionServices.errorPage.browser=Navegador +onionServices.errorPage.network=Rede +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problema ao carregar o Onionsite +onionServices.descNotFound.header=Onionsite não encontrado +onionServices.descNotFound=a causa mais provável é que o onionsite esteja offline. Entre em contato com o administrador do site. +onionServices.descNotFound.longDescription=Detalhes: %S — O descritor de serviço de cebola solicitado não pode ser encontrado no hashring e, portanto, o serviço não pode ser acessado pelo cliente. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problema ao carregar o Onionsite +onionServices.descInvalid.header=Onionsite não pode ser alcançado +onionServices.descInvalid=O onionsite está inacessível devido a um erro interno. +onionServices.descInvalid.longDescription=Detalhes: %S — O descritor de serviço cebola solicitado não pode ser analisado ou a verificação de assinatura falhou. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problema ao carregar o Onionsite +onionServices.introFailed.header=Onionsite se desconectou +onionServices.introFailed=a causa mais provável é que o onionsite esteja offline. Entre em contato com o administrador do site. +onionServices.introFailed.longDescription=Detalhes: %S — Introdução falhou, oque significa que o descritor foi encontrado mas o serviço não está mais conectado ao ponto de introdução. É provável que o serviço mudou seu descritor ou não está operando. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problema ao carregar o Onionsite +onionServices.rendezvousFailed.header=Não foi possível conectar com o Onionsite +onionServices.rendezvousFailed=O onionsite está ocupado ou a rede Tor está sobrecarregada. Tente novamente mais tarde. +onionServices.rendezvousFailed.longDescription=Detalhes: %S — O cliente falhou em encontrar com o serviço, oque significa que o cliente não foi capaz de finalizar a conexão. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autorização necessária +onionServices.clientAuthMissing.header=Onionsite Requer autenticação +onionServices.clientAuthMissing=O acesso ao onionsite requer uma chave, mas nenhuma foi fornecida. +onionServices.clientAuthMissing.longDescription=Detalhes: %S — O cliente fez o download do descritor de serviço cebola solicitado, mas não foi capaz de descriptografar seu conteúdo porque está faltando a informação de autorização do cliente. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Falha na autorização +onionServices.clientAuthIncorrect.header=Falha na autenticação do Onionsite +onionServices.clientAuthIncorrect=A chave fornecida está incorreta ou foi revogada. Entre em contato com o administrador do site. +onionServices.clientAuthIncorrect.longDescription=Detalhes: %S — O cliente conseguiu fazer o download do descritor de serviço de cebola solicitado, mas não conseguiu descriptografar seu conteúdo usando as informações de autorização de cliente fornecidas. Isso pode significar que o acesso foi revogado. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problema ao carregar o Onionsite +onionServices.badAddress.header=Endereço Onionsite inválido +onionServices.badAddress=O endereço fornecido no onionsite é inválido. Verifique se você o inseriu corretamente. +onionServices.badAddress.longDescription=Details: %S — O endereço cebola fornecido não é válido. Este erro está aparecendo devido a uma das seguintes razões: a soma de verificação do endereço não confere, a chave pública ed25519 é inválida ou a codificação é inválida. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problema ao carregar o Onionsite +onionServices.introTimedOut.header=A criação do circuito de onionsite expirou +onionServices.introTimedOut=Falha ao conectar ao onionsite, possivelmente devido a uma conexão de rede ruim. +onionServices.introTimedOut.longDescription=Detalhes: %S — O tempo limite da conexão com o serviço de cebola solicitado expirou ao tentar construir o circuito de encontro. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S está solicitando sua autenticação. +onionServices.authPrompt.keyPlaceholder=Insira a sua chave privada para usar este serviço onion +onionServices.authPrompt.done=Pronto +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Por favor, insira uma chave válida (32 caracteres_Base52 ou 64 caracteres_Base44) +onionServices.authPrompt.failedToSetKey=Não foi possível configurar Tor com a sua chave +onionServices.authPreferences.header=Autenticação de Serviços de Onion +onionServices.authPreferences.overview=Alguns serviços de onion exigem que você se identifique com uma chave (um tipo de senha) antes de poder acessá-los. +onionServices.authPreferences.savedKeys=Chaves salvas… +onionServices.authPreferences.dialogTitle=Chaves de serviço de onion +onionServices.authPreferences.dialogIntro=As chaves para os seguintes sites são armazenadas no seu computador +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Chave +onionServices.authPreferences.remove=Remover +onionServices.authPreferences.removeAll=Remover tudo +onionServices.authPreferences.failedToGetKeys=Não foi possível recuperar as chaves do tor +onionServices.authPreferences.failedToRemoveKey=Não foi possível remover a chave +onionServices.v2Deprecated.pageTitle=Aviso de deprecação do local de onion v2 +onionServices.v2Deprecated.header=Sites onion da versão 2 serão depreciados em breve +onionServices.v2Deprecated=Este site onion não será acessível em breve. Entre em contato com o administrador do site e incentive-os a atualizar. +onionServices.v2Deprecated.longDescription=O Tor está terminando seu suporte para os serviços onion da versão 2 começando em julho de 2021, e este site onion não será mais alcável neste endereço. Se você é o administrador do site, atualize para um serviço onion da versão 3 em breve. +onionServices.v2Deprecated.tryAgain=Entendi +onionServices.v2Deprecated.tooltip=Este site onion não será acessível em breve + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Priorizar sempre Onions +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Por enquanto, não +onionLocation.notNowAccessKey=n +onionLocation.description=Existe uma versão mais privada e segura deste site disponível na rede Tor através de serviços de cebola. Os serviços Onion ajudam os editores de sites e seus visitantes a derrotar a vigilância e a censura. +onionLocation.tryThis=testar serviços Onion +onionLocation.onionAvailable=.onion disponível +onionLocation.learnMore=Saber mais… +onionLocation.always=Sempre +onionLocation.askEverytime=Perguntar sempre +onionLocation.prioritizeOnionsDescription=Priorize sites .onion quando conhecido. +onionLocation.onionServicesTitle=Serviços Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Um endereço de criptomoeda (%S) foi copiado de um site não seguro. Pode ter sido modificado. +cryptoSafetyPrompt.whatCanHeading=O que você pode fazer a respeito? +cryptoSafetyPrompt.whatCanBody=Você pode tentar reconectar com um novo circuito para estabelecer uma conexão segura ou aceitar o risco e ignorar este aviso. +cryptoSafetyPrompt.learnMore=Saiba Mais +cryptoSafetyPrompt.primaryAction=Recarregar guia com um novo circuito +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Aviso de dispersar +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Prossiga com cuidado +rulesets.warningDescription=Adicionar ou modificar conjuntos de regras pode fazer com que invasores invadam seu navegador. Prossiga somente se você souber o que está fazendo. +rulesets.warningEnable=Avise-me quando tentar acessar essas preferências +rulesets.warningButton=Aceite o risco e continue +# Ruleset list +rulesets.rulesets=Conjuntos de regras +rulesets.noRulesets=Nenhum conjunto de regras encontrado +rulesets.noRulesetsDescr=Quando você salva um conjunto de regras no Navegador Tor, ele aparecerá aqui. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Habilitado +rulesets.disabled=Desativado +# Ruleset details/edit ruleset +rulesets.edit=Editar +rulesets.name=Nome +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Escopo +rulesets.enable=Ativar este conjunto de regras +rulesets.checkUpdates=Verificar atualizações +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Salvar +rulesets.cancel=Cancelar diff --git a/toolkit/torbutton/chrome/locale/pt-BR/torlauncher.properties b/toolkit/torbutton/chrome/locale/pt-BR/torlauncher.properties new file mode 100644 index 000000000000..d5d2a0282460 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/pt-BR/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Inicializador do Tor + +torlauncher.tor_exited_during_startup=Tor fechou inesperadamente. Isso pode ser devido um erro no Tor, ou em outro programa ou por falha no hardware. Até que você conserte o problema e reinicie o Tor, o Navegador Tor não será iniciado. +torlauncher.tor_exited=O Tor fechou inesperadamente. Isso pode ser devido a um bug no Tor em si, a um outro programa no seu sistema, ou a um problema com o equipamento. O navegador Tor não poderá acessar nenhum website até que você o reinicie. Se o problema persistir, por favor envie uma cópia do seu Tor Log para a equipe responsável pela assistência. +torlauncher.tor_exited2=Ao reiniciar o Tor, as abas do seu navegador não serão fechadas. +torlauncher.tor_controlconn_failed=Não foi possível conectar-se à porta de controle do Tor. +torlauncher.tor_failed_to_start=Falha ao iniciar Tor. +torlauncher.tor_control_failed=Falha ao receber controle do Tor. +torlauncher.tor_bootstrap_failed=Falha ao tentar estabelecer uma conexão com a rede Tor. +torlauncher.tor_bootstrap_failed_details=%1$S falhou (%2$S). + +torlauncher.unable_to_start_tor=Impossível iniciar Tor. +torlauncher.tor_missing=Falta o programa de execução de Tor. +torlauncher.torrc_missing=O arquivo torrc está ausente e não pôde ser criado. +torlauncher.datadir_missing=O diretório de dados Tor não existe e não pode ser criado. +torlauncher.onionauthdir_missing=O diretório de autenticação de onion do Tor não existe e não pôde ser criado. +torlauncher.password_hash_missing=Falha ao obter a senha criptografada. + +torlauncher.failed_to_get_settings=Impossível recuperar as configurações de Tor. +torlauncher.failed_to_save_settings=Impossível salvar as configurações de Tor. +torlauncher.ensure_tor_is_running=Por favor, verifique que Tor está sendo executado. + +torlauncher.error_proxy_addr_missing=Você deve especificar um endereço IP ou um servidor, e um número de porta para configurar Tor para usar um proxy de acesso a Internet. +torlauncher.error_proxy_type_missing=Você deve selecionar um tipo de proxy. +torlauncher.error_bridges_missing=Você deve especificar uma ou mais pontes. +torlauncher.error_default_bridges_type_missing=Você deve selecionar um tipo de transporte para as pontes fornecidas. +torlauncher.error_bridgedb_bridges_missing=Por favor, solicite uma ponte. +torlauncher.error_bridge_bad_default_type=Entre as pontes fornecidas que têm o tipo de transporte %S, nenhuma está disponível. Por favor ajuste as suas configurações. + +torlauncher.bridge_suffix.meek-amazon=(funciona na China) +torlauncher.bridge_suffix.meek-azure=(funciona na China) + +torlauncher.request_a_bridge=Solicitar uma ponte... +torlauncher.request_a_new_bridge=Solicitar uma nova ponte +torlauncher.contacting_bridgedb=Entrando em contato com BridgeDB. Por favor, aguarde. +torlauncher.captcha_prompt=Resolva o CAPTCHA para solicitar uma ponte. +torlauncher.bad_captcha_solution=A solução não está correta. Por favor, tente novamente. +torlauncher.unable_to_get_bridge=Não é possível obter uma ponte do BridgeDB.\n\n$S +torlauncher.no_meek=Este navegador não está configurado para usar o 'meek', que é necessário para obter pontes. +torlauncher.no_bridges_available=Nenhuma ponte está disponível neste momento. Desculpe. + +torlauncher.connect=Conectar +torlauncher.restart_tor=Reiniciar o Tor +torlauncher.quit=Encerrar +torlauncher.quit_win=Sair +torlauncher.done=Terminado + +torlauncher.forAssistance=Para assistência, contactar %S +torlauncher.forAssistance2=Se você precisar de assistência, visite %S + +torlauncher.copiedNLogMessages=Cópia concluída. As mensagens %S do Tor log estão prontas para ser copiadas em um editor de texto ou em uma mensagem de e-mail. + +torlauncher.bootstrapStatus.starting=Conectando +torlauncher.bootstrapStatus.conn_pt=Conectando-se a ponte +torlauncher.bootstrapStatus.conn_done_pt=Conectado à ponte +torlauncher.bootstrapStatus.conn_proxy=Conectando-se ao proxy +torlauncher.bootstrapStatus.conn_done_proxy=Conectado ao proxy +torlauncher.bootstrapStatus.conn=Conectando a um retransmissor Tor +torlauncher.bootstrapStatus.conn_done=Conectado a um retransmissor Tor +torlauncher.bootstrapStatus.handshake=Negociando com um retransmissor Tor +torlauncher.bootstrapStatus.handshake_done=Acabou de negociar com um retransmissor Tor +torlauncher.bootstrapStatus.onehop_create=Estabelecendo uma conexão de diretório criptografado +torlauncher.bootstrapStatus.requesting_status=Recebendo estado da rede +torlauncher.bootstrapStatus.loading_status=Carregando estado da rede +torlauncher.bootstrapStatus.loading_keys=Carregando certificados de autoridade +torlauncher.bootstrapStatus.requesting_descriptors=Requisitando informações do retransmissor +torlauncher.bootstrapStatus.loading_descriptors=Carregando informações do retransmissor +torlauncher.bootstrapStatus.enough_dirinfo=Informações de retransmissor de carregamento finalizados +torlauncher.bootstrapStatus.ap_conn_pt=Circuitos de construção: conectando a ponte +torlauncher.bootstrapStatus.ap_conn_done_pt=Circuitos de construção: conectados à ponte +torlauncher.bootstrapStatus.ap_conn_proxy=Circuitos de construção: conectando-se ao proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Circuitos de construção: conectados ao proxy +torlauncher.bootstrapStatus.ap_conn=Circuitos de construção: conectando a um retransmissor Tor +torlauncher.bootstrapStatus.ap_conn_done=Circuitos de construção: conectados a um retransmissor Tor +torlauncher.bootstrapStatus.ap_handshake=Circuitos de construção: Negociando com um retransmissor Tor +torlauncher.bootstrapStatus.ap_handshake_done=Circuitos de construção: negociação finalizada com um retransmissor Tor +torlauncher.bootstrapStatus.circuit_create=Circuitos de construção: estabelecendo um circuito Tor +torlauncher.bootstrapStatus.done=Conectado à rede Tor! + +torlauncher.bootstrapWarning.done=pronto +torlauncher.bootstrapWarning.connectrefused=conexão recusada +torlauncher.bootstrapWarning.misc=variados +torlauncher.bootstrapWarning.resourcelimit=recursos insuficientes +torlauncher.bootstrapWarning.identity=identidade conflitante +torlauncher.bootstrapWarning.timeout=tempo limite da conexão excedido +torlauncher.bootstrapWarning.noroute=sem rota para o hospedeiro +torlauncher.bootstrapWarning.ioerror=erro de leitura/gravação +torlauncher.bootstrapWarning.pt_missing=transportador plugável ausente + +torlauncher.nsresult.NS_ERROR_NET_RESET=A conexão com o servidor foi perdida. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Não foi possível conectar ao servidor. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Não foi possível se conectar ao proxy. + +torlauncher.copiedNLogMessagesShort=Copiado %S registros diff --git a/toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd new file mode 100644 index 000000000000..edd6a8c82f64 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; este dezvoltat de"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", o organizație non-profit care îți protejează intimitatea și libertatea online."> + +<!ENTITY help.start "Vrei să ajuţi şi tu?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Donează"> +<!ENTITY help.or "sau"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "implică-te"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Întrebări?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Contribuie la dezvoltarea rețelei Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Informații despre licenţiere"> +<!ENTITY tor.TrademarkStatement "'Tor' și 'Logo-ul Onion' sunt mărci înregistrate ale Proiectului Tor, Inc."> diff --git a/toolkit/torbutton/chrome/locale/ro/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ro/aboutTBUpdate.dtd new file mode 100644 index 000000000000..1a83bd508e2d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Schimbări Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser a fost actualizat."> +<!ENTITY aboutTBUpdate.linkPrefix "Pentru cele mai recente informații despre această versiune,"> +<!ENTITY aboutTBUpdate.linkLabel "vizitați website-ul nostru"> +<!ENTITY aboutTBUpdate.linkSuffix " ."> +<!ENTITY aboutTBUpdate.version "Versiune"> +<!ENTITY aboutTBUpdate.releaseDate "Data lansării"> +<!ENTITY aboutTBUpdate.releaseNotes "Note de Lansare"> diff --git a/toolkit/torbutton/chrome/locale/ro/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ro/aboutTor.dtd new file mode 100644 index 000000000000..132404cd630b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Despre Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Vezi Schimbări"> + +<!ENTITY aboutTor.ready.label "Explorează. În mod privat."> +<!ENTITY aboutTor.ready2.label "Ești gata pentru cel mai sigur mod de navigare din întreaga lume."> +<!ENTITY aboutTor.failure.label "Ceva a mers prost!"> +<!ENTITY aboutTor.failure2.label "Tor nu funcționează în acest browser."> + +<!ENTITY aboutTor.search.label "Caută cu DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Întrebări?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Verifică manualul Tor Browser »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Manualul Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project este o organizație non-profit US 501(c)(3) ce promovează drepturile și libertățile omului prin crearea și implementarea de tehnologii gratuite și open source pentru anonimitate și confidențialitate, sprijinind disponibilitatea și utilizarea lor nerestricționată și continuând întelegerea lor științifică și populară."> +<!ENTITY aboutTor.getInvolved.label "Implică-te »"> + +<!ENTITY aboutTor.newsletter.tagline "Obțineți ultimele știri de la Tor direct în căsuța de e-mail."> +<!ENTITY aboutTor.newsletter.link_text "Abonează-te la Tor News."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor poate fi folosit gratuit datorită donațiilor de la oameni ca tine."> +<!ENTITY aboutTor.donationBanner.buttonA "Donează Acum"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Bine."> +<!ENTITY aboutTor.alpha.ready2.label "Sunteți gata să testați cea mai privată experiență de navigare din lume."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha este o versiune instabilă a Tor Browser pe care o puteți utiliza pentru a previzualiza noi caracteristici, pentru a testa performanța acestora și pentru a oferi feedback înainte de lansare."> +<!ENTITY aboutTor.alpha.bannerLink "Raportați un bug pe Forumul Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Bine."> +<!ENTITY aboutTor.nightly.ready2.label "Sunteți gata să testați cea mai privată experiență de navigare din lume."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly este o versiune instabilă a Tor Browser pe care o puteți utiliza pentru a previzualiza noi caracteristici, pentru a testa performanța acestora și pentru a oferi feedback înainte de lansare."> +<!ENTITY aboutTor.nightly.bannerLink "Raportați un bug pe Forumul Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "CONFIDENȚIALITATEA ÎN CENTRUL ATENȚIEI:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "REZISTENȚĂ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "MODIFICARE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "LIBERTATE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONAȚI ACUM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Friends of Tor va oferi o donație egală cu cea făcută de dvs., în limita a 100.000 USD."> diff --git a/toolkit/torbutton/chrome/locale/ro/brand.dtd b/toolkit/torbutton/chrome/locale/ro/brand.dtd new file mode 100644 index 000000000000..768c23f1cd7b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Proiectul Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' și 'Logo-ul Onion' sunt mărci înregistrate ale Proiectului Tor, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Apăsați pentru a încărca extensiile de sistem instalate"> +<!ENTITY plugins.installed.enable "Activare extensii"> +<!ENTITY plugins.installed.disable "Dezactivare extensii"> +<!ENTITY plugins.installed.disable.tip "Apăsați pentru a preveni încărcarea extensiilor de sistem"> diff --git a/toolkit/torbutton/chrome/locale/ro/brand.properties b/toolkit/torbutton/chrome/locale/ro/brand.properties new file mode 100644 index 000000000000..918489aa972d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Proiectul Tor + +homePageSingleStartMain=Firefox Start, o pagină de pornire rapidă cu căutare inclusă +homePageImport=Importă pagina de pornire din %S + +homePageMigrationPageTitle=Alegere Pagină de Pornire +homePageMigrationDescription=Alegeți pagina de pornire pe care vreți să o folosiți: + +syncBrandShortName=Sincronizare diff --git a/toolkit/torbutton/chrome/locale/ro/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ro/branding/brand.ftl new file mode 100644 index 000000000000..4dd5a09b79b7 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Proiectul Tor +trademarkInfo = 'Tor' și 'Logo-ul Onion' sunt mărci înregistrate ale Proiectului Tor, Inc. diff --git a/toolkit/torbutton/chrome/locale/ro/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ro/browserOnboarding.properties new file mode 100644 index 000000000000..09e58f893211 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Bine ați venit +onboarding.tour-tor-welcome.title=Gata. +onboarding.tour-tor-welcome.description=Navigatorul Tor Browser oferă cel mai ridicat standard de intimitate și securitate în timpul navigării pe Internet. Acesta protejează acum împotriva urmăririi, supravegherii și aplicării cenzurii. Acest scurt tur îți va arăta cum. +onboarding.tour-tor-welcome.next-button=Accesați Politica de Confidențialitate + +onboarding.tour-tor-privacy=Intimitate +onboarding.tour-tor-privacy.title=Cei ce îți urmăresc activitatea. +onboarding.tour-tor-privacy.description=Navigatorul Tor Browser izolează cookie-urile și șterge istoricul de navigare după fiecare sesiune. Aceste modificări îți asigură intimitatea și siguranța. Apasă ‘Rețea Tor’ pentru a afla cum te protejăm la nivel de rețea. +onboarding.tour-tor-privacy.button=Sari la Rețeaua Tor + +onboarding.tour-tor-network=Rețea Tor +onboarding.tour-tor-network.title=Navighează într-o rețea descentralizată +onboarding.tour-tor-network.description=Navigatorul Tor Browser te conectează la rețeaua Tor, menținută de mii de voluntari din întreaga lume. Spre deosebire de o rețea VPN, nu există un punct ce poate eșua sau o entitate centralizată căreia trebuie să ii acorzi încrederea pentru a te bucura de Internet în mod total privat. +onboarding.tour-tor-network.description-para2=NOU: Setările rețelei Tor, inclusiv posibilitatea de a solicita poduri unde este blocat Tor, pot fi găsite acum în Preferințe. +onboarding.tour-tor-network.action-button=Ajustați Setările rețelei Tor +onboarding.tour-tor-network.button=Sari la Afișaj Circuit + +onboarding.tour-tor-circuit-display=Afișaj Circuit +onboarding.tour-tor-circuit-display.title=Vezi ruta ta. +onboarding.tour-tor-circuit-display.description=Pentru fiecare domeniu pe care îl vizitezi, traficul tau este criptat și expediat printr-un circuit format din trei releuri Tor din jurul lumii. Nici un site web nu știe de unde te conectezi. Poți cere un circuit nou apăsând butonul 'Circuit Nou pentru acest Site' sub Afișaj Circuit. +onboarding.tour-tor-circuit-display.button=Vezi Ruta Mea +onboarding.tour-tor-circuit-display.next-button=Accesați pagina de Securitate + +onboarding.tour-tor-security=Securitate +onboarding.tour-tor-security.title=Alege-ți experiența. +onboarding.tour-tor-security.description=De asemenea îți punem la dispoziție setări suplimentare pentru a îți spori siguranța navigatorului. Setările de securitate îți permit să blochezi elemente ce pot fi folosite pentru a îți ataca calculatorul. Apasă butonul de mai jos pentru a explora aceste opțiuni. +onboarding.tour-tor-security.description-suffix=Notă: În mod implicit, NoScript și HTTPS Everywhere nu sunt incluse în bara de instrumente, dar puteți personaliza bara de instrumente pentru a le adăuga. +onboarding.tour-tor-security-level.button=Verifică Nivelul Tău de Securitate +onboarding.tour-tor-security-level.next-button=Accesați Sfaturi pentru experiență + +onboarding.tour-tor-expect-differences=Sfaturi pentru Experiență +onboarding.tour-tor-expect-differences.title=Așteaptă-te la niște diferențe. +onboarding.tour-tor-expect-differences.description=Cu toate elementele de securitate si intimitate puse la dispoziție de Tor, experiența ta de navigare pe internet ar putea fi diferită. Paginile se pot încărca mai lent depinzând de nivelul tău de securitate, iar alte elemente ar putea să nu se încarce sau să nu meargă de loc. De asemenea, se poate să ți se ceară să demonstrezi că esti om și nu robot. +onboarding.tour-tor-expect-differences.button=Vezi Secțiunea de Întrebări Frecvente +onboarding.tour-tor-expect-differences.next-button=Accesați Servicii Onion + +onboarding.tour-tor-onion-services=Servicii Onion +onboarding.tour-tor-onion-services.title=Fii extra protejat. +onboarding.tour-tor-onion-services.description=Serviciile Onion sunt site-uri a căror adresă se termină cu '.onion', ce oferă extra protecție atât celor care le publică cât și celor care le vizitează, și care includ măsuri suplimentare împotriva cenzurii. Serviciile Onion permit oricui să procure conținut sau servicii în mod anonim. Apasă butonul de mai jos pentru a vizita site-ul onion DuckDuckGo. +onboarding.tour-tor-onion-services.button=Vizitează un site Onion +onboarding.tour-tor-onion-services.next-button=Gata + +onboarding.overlay-icon-tooltip-updated2=Vedeți care sunt noutățile\nîn %S +onboarding.tour-tor-update.prefix-new=Nou +onboarding.tour-tor-update.prefix-updated=Actualizat + +onboarding.tour-tor-toolbar=Bara cu instrumente +onboarding.tour-tor-toolbar-update-9.0.title=La revedere buton onion. +onboarding.tour-tor-toolbar-update-9.0.description=Dorim ca experiența dvs. folosind Tor să fie complet integrată în Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=De aceea acum, în loc să folosiți butonul ceapă, puteți vedea Circuitul Tor dvs. prin [i] în bara URL și puteți solicita o nouă identitate folosind butonul barei de instrumente sau meniul [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Cum să solicitați o nouă identitate +onboarding.tour-tor-toolbar-update-9.0.next-button=Sari la Rețeaua Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Înaintează +onboarding.tor-circuit-display.done=Gata +onboarding.tor-circuit-display.one-of-three=1 din 3 +onboarding.tor-circuit-display.two-of-three=2 din 3 +onboarding.tor-circuit-display.three-of-three=3 din 3 + +onboarding.tor-circuit-display.intro.title=Cum funcționează circuitele? +onboarding.tor-circuit-display.intro.msg=Circuitele sunt alcătuite din releuri desemnate la întamplare, care sunt computere din întreaga lume special configurate pentru a propaga traficul Tor. Circuitele îți permit să navighezi pe web în mod privat și să te conectezi la servicii de tip onion. + +onboarding.tor-circuit-display.diagram.title=Afișaj Circuit +onboarding.tor-circuit-display.diagram.msg=Această diagramă îți arată releurile din care este alcătuit circuitul pentru acest site web. Pentru a preveni corelarea activității tale de pe diferite site-uri, fiecare site folosește un circuit diferit. + +onboarding.tor-circuit-display.new-circuit.title=Ai nevoie de un circuit nou? +onboarding.tor-circuit-display.new-circuit.msg=Dacă nu te poți conecta la site-ul web pe care dorești să îl vizitezi, poți folosi acest buton pentru a îl reîncărca folosind un alt circuit. diff --git a/toolkit/torbutton/chrome/locale/ro/network-settings.dtd b/toolkit/torbutton/chrome/locale/ro/network-settings.dtd new file mode 100644 index 000000000000..091c2802b302 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Setări Rețea Tor"> +<!ENTITY torsettings.wizard.title.default "Conectare la Tor"> +<!ENTITY torsettings.wizard.title.configure "Setări Rețea Tor"> +<!ENTITY torsettings.wizard.title.connecting "Stabilire Conexiune"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Limba pentru Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Va rugăm sa alegeți o limbă."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Apasă "Conectare" pentru a te conecta la Tor."> +<!ENTITY torSettings.configurePrompt "Apasă "Configurare" pentru a modifica setările de rețea dacă te afli într-o țară care blochează Tor (cum ar fi Egipt, China, Turcia) sau dacă te conectezi dintr-o rețea privată care necesită un proxy."> +<!ENTITY torSettings.configure "Configurare"> +<!ENTITY torSettings.connect "Conectare"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Aștept Tor să pornească..."> +<!ENTITY torsettings.restartTor "Repornește Tor"> +<!ENTITY torsettings.reconfigTor "Reconfigurare"> + +<!ENTITY torsettings.discardSettings.prompt "Ați configurat punți Tor sau ați introdus setări proxy locale.  Pentru a te conecta direct la rețeaua Tor aceste setări trebuiesc eliminate."> +<!ENTITY torsettings.discardSettings.proceed "Eliminare Setări și Conectare"> + +<!ENTITY torsettings.optional "Opțional"> + +<!ENTITY torsettings.useProxy.checkbox "Folosesc un proxy pentru a mă conecta la Internet"> +<!ENTITY torsettings.useProxy.type "Tip proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "alege un tip de proxy"> +<!ENTITY torsettings.useProxy.address "Adresa"> +<!ENTITY torsettings.useProxy.address.placeholder "Adresă IP sau hostname"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Nume utilizator"> +<!ENTITY torsettings.useProxy.password "Parola"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Acest computer trece printr-un firewall care permite doar conexiuni către anumite porturi"> +<!ENTITY torsettings.firewall.allowedPorts "Porturi permise"> +<!ENTITY torsettings.useBridges.checkbox "Tor este cenzurat în țara mea"> +<!ENTITY torsettings.useBridges.default "Selectează o punte integrată"> +<!ENTITY torsettings.useBridges.default.placeholder "selectează o punte"> +<!ENTITY torsettings.useBridges.bridgeDB "Cere o punte de la torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Introdu caracterele din imagine"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Obțineți o nouă provocare"> +<!ENTITY torsettings.useBridges.captchaSubmit "Trimite"> +<!ENTITY torsettings.useBridges.custom "Folosește o punte pe care o știu"> +<!ENTITY torsettings.useBridges.label "Introdu informația despre punte dintr-o sursă de încredere"> +<!ENTITY torsettings.useBridges.placeholder "scrie adresă:port (una pe linie)"> + +<!ENTITY torsettings.copyLog "Copiați jurnalul Tor în Clipboard"> + +<!ENTITY torsettings.proxyHelpTitle "Ajutor Proxy"> +<!ENTITY torsettings.proxyHelp1 "Un proxy local ar putea fi necesar la conectarea prin rețeaua unei companii, școli sau universități. Dacă nu ești sigur că un proxy este necesar, vezi setările pentru Internet în alt navigator web sau verifică setările de rețea."> + +<!ENTITY torsettings.bridgeHelpTitle "Ajutor Releuri de tip Punte"> +<!ENTITY torsettings.bridgeHelp1 "Punțile sunt relee ne-listate care fac mai dificilă blocarea conexiunilor spre Rețeaua Tor.   Fiecare tip de punte folosește o altă metodă pentru a evita cenzura.   Cele de tip obfs fac traficul tău să semene cu zgomot aleatoriu, iar cele meek fac traficul să pară că se conectează la acel serviciu în loc de Tor."> +<!ENTITY torsettings.bridgeHelp2 "Datorită modului în care diverse țări încearcă să blocheze Tor, unele punți funcționează doar în anumite țări și nu în altele.   Dacă nu ești sigur ce punți funcționează în țara ta, vizitează torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Te rugăm să aștepți până ce stabilim o conexiune cu rețeaua Tor.   Aceasta poate dura mai multe minute."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Conexiune"> +<!ENTITY torPreferences.torSettings "Setări Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser vă orientează traficul prin rețeaua Tor, condusă de mii de voluntari din întreaga lume." > +<!ENTITY torPreferences.learnMore "Aflați mai multe"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Test"> +<!ENTITY torPreferences.statusInternetOnline "Online"> +<!ENTITY torPreferences.statusInternetOffline "Offline"> +<!ENTITY torPreferences.statusTorLabel "Rețeaua Tor:"> +<!ENTITY torPreferences.statusTorConnected "Conectată"> +<!ENTITY torPreferences.statusTorNotConnected "Neconectat"> +<!ENTITY torPreferences.statusTorBlocked "Blocat potențial"> +<!ENTITY torPreferences.learnMore "Aflați mai multe"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Pornire rapidă"> +<!ENTITY torPreferences.quickstartDescriptionLong "QuickStart conectează Tor Browser la rețeaua Tor automat atunci când este lansată, pe baza ultimelor setări de conexiune utilizate."> +<!ENTITY torPreferences.quickstartCheckbox "Conectați-vă automat întotdeauna"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Punți"> +<!ENTITY torPreferences.bridgesDescription "Podurile vă ajută să accesați rețeaua Tor în locurile în care Tor este blocat. În funcție de locul în care vă aflați, un pod poate funcționa mai bine decât altul."> +<!ENTITY torPreferences.bridgeLocation "Locația dumneavoastră"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatic"> +<!ENTITY torPreferences.bridgeLocationFrequent "Locații selectate frecvent"> +<!ENTITY torPreferences.bridgeLocationOther "Alte locații"> +<!ENTITY torPreferences.bridgeChooseForMe "Alege un pod pentru mine..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Podurile voastre actuale"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Puteți salva unul sau mai multe poduri, iar Tor vă alege pe care să o utilizați atunci când vă conectați. Tor va comuta automat pentru a utiliza un alt pod atunci când este necesar."> +<!ENTITY torPreferences.bridgeId "#1 pod: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Eliminați"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Dezactivați podurile încorporate"> +<!ENTITY torPreferences.bridgeShare "Partajați această punte utilizând codul QR sau copiind adresa:"> +<!ENTITY torPreferences.bridgeCopy "Copiere adresă pod"> +<!ENTITY torPreferences.copied "Copiat!"> +<!ENTITY torPreferences.bridgeShowAll "Arată toate podurile"> +<!ENTITY torPreferences.bridgeRemoveAll "Stergeți toate podurile"> +<!ENTITY torPreferences.bridgeAdd "Adăugați un pod nou"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Alegeți unul dintre podurile încorporate ale Tor Browser"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Selectați un pod încorporat..."> +<!ENTITY torPreferences.bridgeRequest "Cerere Punte..."> +<!ENTITY torPreferences.bridgeEnterKnown "Introduceți o adresă de pod pe care o cunoașteți deja"> +<!ENTITY torPreferences.bridgeAddManually "Adăugați manual un pod…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avansat"> +<!ENTITY torPreferences.advancedDescription "Configurați modul în care Tor Browser se conectează la internet"> +<!ENTITY torPreferences.advancedButton "Setări..."> +<!ENTITY torPreferences.viewTorLogs "Vezi jurnalele Tor"> +<!ENTITY torPreferences.viewLogs "Vizualizați jurnalele ..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Stergeți toate podurile?"> +<!ENTITY torPreferences.removeBridgesWarning "Această acțiune nu poate fi ireversibilă."> +<!ENTITY torPreferences.cancel "Anulați"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scanează codul QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Poduri încorporate"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser include unele tipuri specifice de poduri cunoscute sub numele de "transporturi conectabile"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 este un tip de pod încorporat care face ca traficul Tor să pară aleatoriu. De asemenea, este mai puțin probabil ca acestea să fie blocate decât predecesorii lor, podurile obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake este un pod încorporat care învinge cenzura prin rutarea conexiunii prin proxy-uri Snowflake, rulate de voluntari."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure este un pod încorporat care face să pară că utilizați un website Microsoft în loc să utilizați Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Cere podul"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contactarea BridgeDB. Te rog asteapta."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Rezolvă acest CAPTCHA pentru a cere o punte."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Soluția nu este corectă. Încearcă din nou."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Oferă pod"> +<!ENTITY torPreferences.provideBridgeHeader "Introduceți informații despre punte dintr-o sursă de încredere"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Setările de conexiune"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configurați modul în care Tor Browser se conectează la internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Valori separate de virgulă"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Jurnalele Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Neconectat"> +<!ENTITY torConnect.connectingConcise "Se conectează..."> +<!ENTITY torConnect.tryingAgain "Încercăm din nou..."> +<!ENTITY torConnect.noInternet "Tor Browser nu s-a putut conecta la internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser nu s-a putut conecta la Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "Configurați conexiunea"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Dacă Tor este blocat în locația dumneavoastră, încercarea unui pod poate ajuta. Connection Assist poate alege unul pentru dumneavoastră utilizând locația dumneavoastră, sau puteți #1 manual în schimb."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Încearcă un pod..."> +<!ENTITY torConnect.tryingBridgeAgain "Încercăm încă o dată..."> +<!ENTITY torConnect.errorLocation "Tor Browser nu v-a putut localiza"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser trebuie să știe locația dumneavoastră pentru a alege podul potrivit pentru dumneavoastră. Dacă preferați să nu partajați locația dumneavoastră, #1 în schimb manual."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Aceste setări de locație sunt corecte?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser încă nu s-a putut conecta la Tor. Verificați dacă setările de locație sunt corecte și încercați din nou, sau #1 în schimb."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Asistență la conectare"> +<!ENTITY torConnect.breadcrumbLocation "Setările de locație"> +<!ENTITY torConnect.breadcrumbTryBridge "Încearcă un pod"> +<!ENTITY torConnect.automatic "Automatic"> +<!ENTITY torConnect.selectCountryRegion "Selectați țara sau regiunea"> +<!ENTITY torConnect.frequentLocations "Locații selectate frecvent"> +<!ENTITY torConnect.otherLocations "Alte locații"> +<!ENTITY torConnect.restartTorBrowser "Reporniți Tor Browser"> +<!ENTITY torConnect.configureConnection "Configurați conexiunea…"> +<!ENTITY torConnect.viewLog "Vizualizare jurnale…"> +<!ENTITY torConnect.tryAgain "Încercați din nou"> +<!ENTITY torConnect.offline "Internetul nu este accesibil"> +<!ENTITY torConnect.connectMessage "Schimbările la setările Tor nu vor fi aplicate până când vă conectați la Tor Network"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser a eșuat să stabilească o conexiune la Tor Network"> +<!ENTITY torConnect.yourLocation "Locația dumneavoastră"> +<!ENTITY torConnect.tryBridge "Încearcă un pod"> +<!ENTITY torConnect.autoBootstrappingFailed "Configurarea automată a eșuat"> +<!ENTITY torConnect.autoBootstrappingFailed "Configurarea automată a eșuat"> +<!ENTITY torConnect.cannotDetermineCountry "Nu se poate determina țara utilizatorului"> +<!ENTITY torConnect.noSettingsForCountry "Nu sunt disponibile setări pentru locația dumneavoastră"> diff --git a/toolkit/torbutton/chrome/locale/ro/onboarding.properties b/toolkit/torbutton/chrome/locale/ro/onboarding.properties new file mode 100644 index 000000000000..bca65d562717 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Ești nou în %S?\nSă începem. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S este nou-nouț.\nVezi ce poți să faci! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Închide +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Înlătură +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Terminat diff --git a/toolkit/torbutton/chrome/locale/ro/torbutton.dtd b/toolkit/torbutton/chrome/locale/ro/torbutton.dtd new file mode 100644 index 000000000000..a56e11b84c71 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/torbutton.dtd @@ -0,0 +1,57 @@ +<!ENTITY torbutton.context_menu.new_identity "Identitate nouă"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Identitate nouă"> +<!ENTITY torbutton.context_menu.new_identity_key "l"> +<!ENTITY torbutton.context_menu.new_circuit "Circuit Tor nou pentru acest site"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Nou circuit Tor pentru acest site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Configurare Rețea Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Verifică dacă există actualizări pentru Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Protecție Cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Apasă pentru a inițializa Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Setări Securitate Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Gestionare Protecţie Cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "Protejat"> +<!ENTITY torbutton.cookiedialog.domainCol "Gazdă"> +<!ENTITY torbutton.cookiedialog.nameCol "Nume"> +<!ENTITY torbutton.cookiedialog.pathCol "Rută"> +<!ENTITY torbutton.cookiedialog.protectCookie "Protejare Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Eliminare Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Indepărtare protecție Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Eliminare totală, minus elemente protejate"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Protejare Cookie-uri noi"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Nu proteja Cookie-urile noi"> +<!ENTITY torbutton.prefs.sec_caption "Nivel Securitate"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Opțiunea Security Slider îți permite să dezactivezi anumite caracteristici ale navigatorului care îl fac mai vulnerabil în fața atacurilor."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Toate facilitățile site-ului web și ale Tor Browser sunt active."> +<!ENTITY torbutton.prefs.sec_safer_label "Mai sigur"> +<!ENTITY torbutton.prefs.sec_safer_description "Dezactivează facilități ale site-ului web care sunt deseori periculoase, provocând uneori pierderea funcționalității"> +<!ENTITY torbutton.prefs.sec_safer_list_label "La setarea mai sigură:"> +<!ENTITY torbutton.prefs.sec_safest_label "Cel mai sigur"> +<!ENTITY torbutton.prefs.sec_safest_description "Permite doar facilitățile necesare pentru site-uri simple și servicii de bază. Aceste modificări afectează imagini, media și scripturi."> +<!ENTITY torbutton.prefs.sec_safest_list_label "La setarea cea mai sigură:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Află mai mult"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript e dezactivat în site-uri non-HTTPS"> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript e dezactivat implicit în toate site-urile."> +<!ENTITY torbutton.prefs.sec_limit_typography "Unele fonturi și simboluri matematice sunt dezactivate."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Unele fonturi, pictograme, simboluri matematice și imagini sunt dezactivate."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Fișierele audio și video (HTML5 media) și WebGL sunt pot fi redate la clic."> +<!ENTITY torbutton.prefs.sec_custom_warning "Personalizat"> +<!ENTITY torbutton.prefs.sec_overview "Dezactivează anuminte facilități web care pot fi folosite pentru a-ți ataca securitatea și anonimitatea. +"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Nivel Securitate: Normal"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Nivel Securitate: Sigur"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Nivel Securitate: Prudent"> +<!ENTITY torbutton.prefs.sec_custom_summary "Preferințele dvs. de browser personalizate au avut ca rezultat setări de securitate neobișnuite. Din motive de securitate și confidențialitate, vă recomandăm să alegeți una dintre nivelurile de securitate implicite."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Revenire la Setările Inițiale"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Setări Avansate de Securitate..."> +<!ENTITY torbutton.prefs.sec_change "Schimbă..."> +<!ENTITY torbutton.circuit_display.title "Circuit Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Circuit nou pentru acest site"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Deschideți promptul de autentificare a clientului de serviciu onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Țineți minte această cheie"> diff --git a/toolkit/torbutton/chrome/locale/ro/torbutton.properties b/toolkit/torbutton/chrome/locale/ro/torbutton.properties new file mode 100644 index 000000000000..1f6429786b9b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP necunoscut +torbutton.circuit_display.onion_site = Site Onion +torbutton.circuit_display.this_browser = Acest navigator +torbutton.circuit_display.relay = Releu +torbutton.circuit_display.tor_bridge = Punte +torbutton.circuit_display.unknown_country = Țară necunoscută +torbutton.circuit_display.guard = Releu Gardă +torbutton.circuit_display.guard_note = Releul de [Gardă] va putea rămâne neschimbat. +torbutton.circuit_display.learn_more = Află mai mult +torbutton.circuit_display.click_to_copy = Click pentru a copia +torbutton.circuit_display.copied = Copiat! +torbutton.content_sizer.margin_tooltip = Navigatorul Tor Browser adaugă această margine pentru a face lățimea și înălțimea ferestrei tale mai puțin specifică, și astfel reduce abilitatea altora de a te urmări online. +extensions.torbutton@torproject.org.description = Torbutton oferă posibilitatea de a configura setările navigatorului si de a goli rapid şi ușor datele private ale navigării. +torbutton.popup.external.title = Descărcare fișier de tip extern? +torbutton.popup.external.app = Navigatorul Tor Browser nu poate afișa acest fișier. Va trebui să îl deschizi cu o altă aplicație.\n\n +torbutton.popup.external.note = Anumite tipuri de fișiere pot face ca aplicațiile să se conecteze la Internet fără Tor.\n\n +torbutton.popup.external.suggest = Pentru siguranță ești sfătuit să deschizi fișiere descărcate numai când ești offline, sau să folosești un sistem Tor Live precum Tails.\n +torbutton.popup.launch = Descărcare fişier +torbutton.popup.cancel = Anulare +torbutton.popup.dontask = Descarcă fişiere automat de acum înainte +torbutton.popup.no_newnym = Torbutton nu îți poate oferi o identitate nouă, deoarece nu are acces la Tor Control Port.\n\nEști sigur că rulează Tor Browser Bundle? +torbutton.security_settings.menu.title = Setări de Securitate +torbutton.title.prompt_torbrowser = Informații importante Torbutton +torbutton.popup.prompt_torbrowser = Torbutton funcționează acum în mod diferit: nu mai poate fi închis.\n\nAm făcut această schimbare deoarece Torbutton nu poate fi folosit în siguranță într-un browser care e utilizat și pentru navigare non-Tor. Erau prea multe buguri pe care nu le puteam remedia în alt fel.\n\nDacă doriți să continuați să folosiți Firefox normal, ar trebui să dezinstalați Torbutton și descărcați pachetul Tor Browser. Proprietățile de navigare privată ale Tor Browser sun [...] +torbutton.popup.short_torbrowser = Informație Torbutton importantă!\n\nTorbutton este acum permanent activat.\n\nFaceți click pe Torbutton pentru mai multe informații. + +torbutton.popup.confirm_plugins = Plugin-urile cum ar fi "Flash" îți pot afecta intimitatea și anonimitatea.\n\nDeasemenea ele pot ocoli Tor și îți pot dezvălui locația curentă și adresa IP.\n\nSigur doriți să activați plugin-urile?\n\n +torbutton.popup.never_ask_again = Nu mai întreba din nou +torbutton.popup.confirm_newnym = Navigatorul web Tor va închide toate ferestrele și tab-urile. Toate sesiunile se vor pierde.\n\nDorești să reinițializezi Navigatorul Tot acum pentru a-ți putea reseta identitatea?\n\n + +torbutton.maximize_warning = Maximizarea navigatorului Tor poate permite anumitor site-uri să determine mărimea monitorului tău, care poate fi folosită pentru a te urmări. Îți recomandăm să folosești fereastra Navigatorului Tor la dimensiunea originală implicită. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Acest site web (%S) încearcă să extragă datele imaginii HTML5, care pot fi utilizate la identificarea în mod unic a computerului dumneavoastră.\n\nAr trebui ca navigatorul Tor să permită acestui site web să extragă datele imaginii HTML5? +canvas.notNow=Nu acum +canvas.notNowAccessKey=N +canvas.allow=Permite în viitor +canvas.allowAccessKey=A +canvas.never=Niciodată pentru acest site (recomandat) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Problemă profil +profileReadOnly=Nu poți rula %S dintr-un sistem de fișiere doar pentru citire. Copiază %S într-o altă locație înainte de a încerca folosirea lui. +profileReadOnlyMac=Nu poți rula %S dintr-un sistem de fișiere doar pentru citire. Copiază %S pe Desktop sau în fișierul de Aplicații înainte de a încerca folosirea lui. +profileAccessDenied=%S nu are permisiunea de a accesa profilul. Ajustează permisiunile de sistem de fișiere și reîncearcă. +profileMigrationFailed=Migrarea profilului %S tău a eşuat.\nSe vor folosi setări noi. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Se descarcă actualizarea %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Conexiune Criptată (Serviciu Onion, %1$S, cheie pe %2$S biți, %3$S) +pageInfo_OnionEncryption=Conexiune Criptată (Serviciu Onion) +pageInfo_OnionName=Nume Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Află mai mult +onionServices.errorPage.browser=Bowser +onionServices.errorPage.network=Reţea +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.descNotFound.header=Nu am găsit Onionsite +onionServices.descNotFound=Cea mai probabilă cauză este că Onionsite este offline. Contactați administratorul Onionsite. +onionServices.descNotFound.longDescription=Detalii: %S — Descriptorul serviciului de Onion solicitat nu poate fi găsit pe hashring și, prin urmare, serviciul nu poate fi accesat de către client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.descInvalid.header=Onionsite nu poate fi accesat +onionServices.descInvalid=Onionsite nu poate fi accesat din cauza unei erori interne. +onionServices.descInvalid.longDescription=Detalii: %S — Descriptorul serviciului Onion solicitat nu poate fi analizat sau validarea semnăturii a eșuat. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.introFailed.header=Onionsite s-a deconectat +onionServices.introFailed=Cea mai probabilă cauză este că Onionsite este offline. Contactați administratorul Onionsite. +onionServices.introFailed.longDescription=Detalii: %S — Introducerea a eșuat, ceea ce înseamnă că descriptorul a fost găsit, dar serviciul nu mai este conectat la punctul de introducere. Este probabil ca serviciul să-și fi schimbat descriptorul sau să nu funcționeze. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.rendezvousFailed.header=Conectarea la Onionsite nu este posibilă +onionServices.rendezvousFailed=Onionsite este ocupat sau rețeaua Tor este supraîncărcată. Încercați mai târziu. +onionServices.rendezvousFailed.longDescription=Detalii: %S — Clientul nu a reușit să ia legătura cu serviciul, ceea ce înseamnă că clientul nu a putut finaliza conexiunea. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Este necesară autorizarea +onionServices.clientAuthMissing.header=Onionsite cere autentificarea +onionServices.clientAuthMissing=Accesul la Onionsite necesită o cheie, dar nu a fost furnizată niciuna. +onionServices.clientAuthMissing.longDescription=Detalii: %S — Clientul a descărcat descriptorul serviciului Onion solicitat, dar nu a putut să decripteze conținutul său, deoarece lipsesc informațiile privind autorizarea clientului. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorizarea a eșuat +onionServices.clientAuthIncorrect.header=Autorizarea Onionsite a eșuat +onionServices.clientAuthIncorrect=Cheia furnizată este incorectă sau a fost revocată. Contactați administratorul Onionsite. +onionServices.clientAuthIncorrect.longDescription=Detalii: %S — Clientul a putut descărca descriptorul serviciului Onion solicitat, dar nu a putut să decripteze conținutul său folosind informațiile de autorizare furnizate de client. Aceasta poate însemna că accesul a fost revocat. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.badAddress.header=Adresa Onionsite incorectă +onionServices.badAddress=Adresa furnizată la Onionsite nu este validă. Verificați dacă ați introdus-o corect. +onionServices.badAddress.longDescription=Detalii: %S — Adresa .onion furnizată nu este validă. Această eroare are unul dintre următoarele motive: suma de control a adresei nu se potrivește, cheia publică ed25519 nu este valabilă sau codificarea este nevalidă. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=A apărut o problemă la încărcarea Onionsite +onionServices.introTimedOut.header=Crearea de circuite Onionsite a fost terminată +onionServices.introTimedOut=Eroare la conectarea la Oniosite, posibil din cauza unei conexiuni de rețea deficitare. +onionServices.introTimedOut.longDescription=Detalii: %S — Conexiunea la serviciul Onion solicitat a expirat în timp ce încercați să construiți circuitul de întâlnire. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S vă cere să vă autentificați. +onionServices.authPrompt.keyPlaceholder=Introduceți cheia privată pentru acest serviciu de ceapă +onionServices.authPrompt.done=Gata +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Vă rugăm să introduceți o cheie validă (52 de caractere base32 sau 44 de caractere base64) +onionServices.authPrompt.failedToSetKey=Imposibil de configurat Tor cu cheia dvs. +onionServices.authPreferences.header=Servicii de autentificare Onion +onionServices.authPreferences.overview=Unele servicii Onion necesită să vă identificați cu o cheie (un fel de parolă) înainte de a le putea accesa. +onionServices.authPreferences.savedKeys=Cheile salvate ... +onionServices.authPreferences.dialogTitle=Chei de servicii Onion +onionServices.authPreferences.dialogIntro=Cheile pentru următoarele saituri Onion sunt stocate pe computer +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Cheie +onionServices.authPreferences.remove=Eliminare +onionServices.authPreferences.removeAll=Șterge tot +onionServices.authPreferences.failedToGetKeys=Imposibil de a prelua chei de la tor +onionServices.authPreferences.failedToRemoveKey=Nu se poate elimina cheia +onionServices.v2Deprecated.pageTitle=Avertisment privind deprecierea site-ului Tor V2 +onionServices.v2Deprecated.header= Versiunea a 2 a a site-urilor Onion va fi învechită în curând +onionServices.v2Deprecated=Acest site nu va putea fi accesat în curând. Contactați administratorul site-ului și rugați-l să facă upgrade. +onionServices.v2Deprecated.longDescription=Tor va sfârsi suportul pentru versiunea a 2 a a Serviciilor Onion începand de Iulie 2021, și acest site nu va fi disponibil la această adresă. Dacă tu esti administratorul site-ului, upgradați la versiunea a 3 a a Serviciilor Onion în curand. +onionServices.v2Deprecated.tryAgain=Am înțeles +onionServices.v2Deprecated.tooltip=Acest site Onion nu va mai fi valabil cât de curând + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Întotdeauna prioritate pentru serviciile Onion +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Nu acum +onionLocation.notNowAccessKey=n +onionLocation.description=Există o versiune mai privată și mai sigură a acestui site, disponibilă prin rețeaua Tor, prin intermediul serviciilor Onion. Serviciile Onion ajută editorii de site-uri și vizitatorii lor să învingă supravegherea și cenzura. +onionLocation.tryThis=Încercați serviciile Onion +onionLocation.onionAvailable=.onion disponibil +onionLocation.learnMore=Aflați mai multe +onionLocation.always=Întotdeauna +onionLocation.askEverytime=Întreabă de fiecare dată +onionLocation.prioritizeOnionsDescription=Prioritizați site-urile .onion când sunt cunoscute. +onionLocation.onionServicesTitle=Servicii Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=O adresă de criptomonede (%S) a fost copiat de pe un site nesecurizat. Este posibil ca această adresă să fi fost modificată. +cryptoSafetyPrompt.whatCanHeading=Ce ai putea face în această privintă? +cryptoSafetyPrompt.whatCanBody=Puteți încerca să vă reconectați cu un circuit nou pentru a stabili o conexiune securizată, ori vă asumați riscul și refuzați avertismentul. +cryptoSafetyPrompt.learnMore=Află mai mult +cryptoSafetyPrompt.primaryAction=Reîncărcați Fila cu un Circuit Nou +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Refuzați avertismentul +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Continuați cu prudență +rulesets.warningDescription=Adăugarea sau modificarea regulilor poate determina atacatorii să deturneze browserul. Continuați numai dacă știți ce faceți. +rulesets.warningEnable=Avertizează-mă când încerc să accesez aceste preferințe +rulesets.warningButton=Acceptă riscul și continuă +# Ruleset list +rulesets.rulesets=Seturi de reguli +rulesets.noRulesets=Nu au fost găsite seturi de reguli +rulesets.noRulesetsDescr=Când salvați un set de reguli în Tor Browser, acesta va apărea aici. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Actualizat ultima dată %S +rulesets.neverUpdated=Nu s-a actualizat niciodată sau ultima actualizare a eșuat +rulesets.enabled=Activat +rulesets.disabled=Dezactivat +# Ruleset details/edit ruleset +rulesets.edit=Editare +rulesets.name=Prenume +rulesets.jwk=JWK +rulesets.pathPrefix=Prefixul căii +rulesets.scope=Scop +rulesets.enable=Activați acest set de reguli +rulesets.checkUpdates=Verificați pentru actualizări +rulesets.jwkPlaceholder=Cheia utilizată pentru a semna acest set de reguli în formatul JWK (JSON Web Key) +rulesets.jwkInvalid=JWK nu a putut fi parsat, sau nu este o cheie validă +rulesets.pathPrefixPlaceholder=Prefixul URL-ului care conține fișierele necesare de seturi de reguli +rulesets.pathPrefixInvalid=Prefixul căii nu este un URL HTTP(S) valid +rulesets.scopePlaceholder=Exprimarea regulată a domeniului de aplicare al normelor +rulesets.scopeInvalid=Domeniul de aplicare nu a putut fi analizat ca o expresie regulată +rulesets.save=Salvare +rulesets.cancel=Anulare diff --git a/toolkit/torbutton/chrome/locale/ro/torlauncher.properties b/toolkit/torbutton/chrome/locale/ro/torlauncher.properties new file mode 100644 index 000000000000..c6a46a5d3d17 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ro/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Lansator Tor + +torlauncher.tor_exited_during_startup=Tor s-a închis în mod neașteptat. Acest lucru se datorează fie unei erori în Tor, în alt program de pe sistemul dvs., sau a unei defecțiuni de hardware. Până nu veți repara problema şi veți reporni Tor, navigatorul Tor Browser nu va porni. +torlauncher.tor_exited=Tor s-a închis în mod neașteptat. Acest lucru se datorează fie unei erori în Tor, în alt program de pe sistemul dvs., sau a unei defecțiuni în hardware. Navigatorul Tor Browser nu va putea accesa nici un site decât dacă reporniți Tor. Dacă problema persistă, vă rugăm să trimiteți o copie a jurnalului Tor către echipa de suport. +torlauncher.tor_exited2=Repornirea Tor nu va închide ferestrele navigatorului dvs. +torlauncher.tor_controlconn_failed=Nu s-a putut conecta la portul de control Tor. +torlauncher.tor_failed_to_start=Tor nu a putut porni. +torlauncher.tor_control_failed=Eșuare la preluarea controlului Tor. +torlauncher.tor_bootstrap_failed=Tor nu a reușit să stabilească o conexiune la rețeaua Tor. +torlauncher.tor_bootstrap_failed_details=%1$S eșuare (%2$S). + +torlauncher.unable_to_start_tor=Tor nu a putut porni.\n\n%S +torlauncher.tor_missing=Fișierul executabil Tor lipsește. +torlauncher.torrc_missing=Fişierul torrc lipseşte şi nu a putut fi creat. +torlauncher.datadir_missing=Directorul de date Tor nu există şi nu a putut fi creat. +torlauncher.onionauthdir_missing=Directorul de autentificare Tor Onion nu există și nu a putut fi creat. +torlauncher.password_hash_missing=Eroare la obținerea hash-ului parolei. + +torlauncher.failed_to_get_settings=Nu s-au putut obține setările Tor.\n\n%S +torlauncher.failed_to_save_settings=Nu s-au putut salva setările Tor.\n\n%S +torlauncher.ensure_tor_is_running=Vă rugăm asigurați-vă că Tor este pornit. + +torlauncher.error_proxy_addr_missing=Pentru a configura Tor să folosească un proxy prin care să accesaţi Internetul, este nevoie să specificaţi atât o adresă de IP, cât şi un port. +torlauncher.error_proxy_type_missing=Tipul de proxy trebuie selectat. +torlauncher.error_bridges_missing=Trebuiesc specificate una sau mai multe punți. +torlauncher.error_default_bridges_type_missing=Un tip de transport pentru punțile oferite trebuie selectat. +torlauncher.error_bridgedb_bridges_missing=Vă rugăm cereți o punte. +torlauncher.error_bridge_bad_default_type=Nici o punte cu suport pentru transport tip %S nu este disponibilă. Ajustați setările. + +torlauncher.bridge_suffix.meek-amazon=(funcționează în China) +torlauncher.bridge_suffix.meek-azure=(funcționează în China) + +torlauncher.request_a_bridge=Cerere Punte... +torlauncher.request_a_new_bridge=Cerere Punte Nouă +torlauncher.contacting_bridgedb=Se contactează BridgeDB. Așteptați. +torlauncher.captcha_prompt=Rezolvă acest CAPTCHA pentru a cere o punte. +torlauncher.bad_captcha_solution=Soluția nu este corectă. Încearcă din nou. +torlauncher.unable_to_get_bridge=Nu s-a putut obține o punte de la BridgeDB.\n\n%S +torlauncher.no_meek=Acest navigator nu este configurat pentru meek, care este necesar pentru a obține punți. +torlauncher.no_bridges_available=Nu există punți disponibile în acest moment. Ne pare rău. + +torlauncher.connect=Conectare +torlauncher.restart_tor=Repornire Tor +torlauncher.quit=Revocare +torlauncher.quit_win=Ieşire +torlauncher.done=Gata + +torlauncher.forAssistance=Pentru asistență, contactați %S +torlauncher.forAssistance2=Pentru asistenţă, vizitați %S + +torlauncher.copiedNLogMessages=Copiere efectuată. %S mesaje din jurnalul Tor sunt gata de lipire într-un editor de text sau un mesaj e-mail. + +torlauncher.bootstrapStatus.starting=Pornește +torlauncher.bootstrapStatus.conn_pt=Se conectează la bridge +torlauncher.bootstrapStatus.conn_done_pt=Conectat la bridge +torlauncher.bootstrapStatus.conn_proxy=Se conectează la proxy +torlauncher.bootstrapStatus.conn_done_proxy=Conectat la proxy +torlauncher.bootstrapStatus.conn=Se conectează la un releu Tor +torlauncher.bootstrapStatus.conn_done=Conectat la un releu Tor +torlauncher.bootstrapStatus.handshake=Negociază cun un releu Tor +torlauncher.bootstrapStatus.handshake_done=S-a încheiat negocierea cu un releu Tor +torlauncher.bootstrapStatus.onehop_create=Se stabileşte o conexiune criptată la director +torlauncher.bootstrapStatus.requesting_status=Se obţin informaţii despre starea reţelei +torlauncher.bootstrapStatus.loading_status=Se încarcă informaţiile despre starea reţelei +torlauncher.bootstrapStatus.loading_keys=Se încarcă certificatele de autoritate +torlauncher.bootstrapStatus.requesting_descriptors=Se cer informaţii despre releuri +torlauncher.bootstrapStatus.loading_descriptors=Se încarcă informaţiile despre releuri +torlauncher.bootstrapStatus.enough_dirinfo=S-a încheiat încărcarea informației din releu +torlauncher.bootstrapStatus.ap_conn_pt=Se construiesc circuite: Conectarea la bridge +torlauncher.bootstrapStatus.ap_conn_done_pt=Se construiesc circuite: Conectat la bridge +torlauncher.bootstrapStatus.ap_conn_proxy=Se construiesc circuite: Conectarea la proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Se construiesc circuite: Conectat la proxy +torlauncher.bootstrapStatus.ap_conn=Se construiesc circuite: Conectarea la releu Tor +torlauncher.bootstrapStatus.ap_conn_done=Se construiesc circuite: Conectat la releu Tor +torlauncher.bootstrapStatus.ap_handshake=Se construiesc circuite: Negocierea cu un releu Tor +torlauncher.bootstrapStatus.ap_handshake_done=Se construiesc circuite: S-a încheiat negocierea cu un releu Tor +torlauncher.bootstrapStatus.circuit_create=Se construiesc circuite: Stabilirea unui circuit Tor +torlauncher.bootstrapStatus.done=Conectare la rețeaua Tor efectuată cu succes! + +torlauncher.bootstrapWarning.done=efectuat +torlauncher.bootstrapWarning.connectrefused=conexiune refuzată +torlauncher.bootstrapWarning.misc=diverse +torlauncher.bootstrapWarning.resourcelimit=resurse insuficiente +torlauncher.bootstrapWarning.identity=identităţile nu se potrivesc +torlauncher.bootstrapWarning.timeout=timpul alocat pentru conexiune a expirat (timeout) +torlauncher.bootstrapWarning.noroute=nici o rută către gazdă +torlauncher.bootstrapWarning.ioerror=eroare la scriere/citire +torlauncher.bootstrapWarning.pt_missing=pluggable transport lipsă + +torlauncher.nsresult.NS_ERROR_NET_RESET=Conexiunea cu serverul a fost pierdută. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Nu s-a putut conecta la server. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Nu s-a putut conecta la proxy. + +torlauncher.copiedNLogMessagesShort=Log-urile %S au fost copiate diff --git a/toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd new file mode 100644 index 000000000000..88a9978b739e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; разработан"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", некоммерческим проектом для защиты приватности и других свобод в сети."> + +<!ENTITY help.start "Хотите помочь?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Пожертвуйте"> +<!ENTITY help.or "или"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "присоединяйтесь"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Вопросы?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Помогите сети Tor стать больше!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Информация о лицензии"> +<!ENTITY tor.TrademarkStatement "'Tor' и логотип 'Onion' – зарегистрированные торговые марки Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/ru/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/ru/aboutTBUpdate.dtd new file mode 100644 index 000000000000..b9169e2366fd --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Журнал изменений Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser обновлен."> +<!ENTITY aboutTBUpdate.linkPrefix "Самая свежая информация об этой версии – "> +<!ENTITY aboutTBUpdate.linkLabel "на нашем сайте"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Версия"> +<!ENTITY aboutTBUpdate.releaseDate "Дата выхода"> +<!ENTITY aboutTBUpdate.releaseNotes "Примечания"> diff --git a/toolkit/torbutton/chrome/locale/ru/aboutTor.dtd b/toolkit/torbutton/chrome/locale/ru/aboutTor.dtd new file mode 100644 index 000000000000..6d5e0999b492 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "О проекте Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Список изменений"> + +<!ENTITY aboutTor.ready.label "Исследуйте. Приватно."> +<!ENTITY aboutTor.ready2.label "Вы готовы к самому приватному интернет-серфингу в мире."> +<!ENTITY aboutTor.failure.label "Что-то пошло не так!"> +<!ENTITY aboutTor.failure2.label "Tor не работает в этом браузере."> + +<!ENTITY aboutTor.search.label "Поиск с помощью DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Вопросы?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Предлагаем руководство по Тоr Browser »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "М"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Руководство по Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project – некоммерческая организация, зарегистрированная в США со статусом 501(c)(3). Tor Project продвигает права и свободы человека – создает и распространяет технологии для обеспечения анонимности и приватности с открытым исходным кодом, поддерживает их неограниченную доступность, содействует их научному и популярному пониманию."> +<!ENTITY aboutTor.getInvolved.label "Присоединяйтесь »"> + +<!ENTITY aboutTor.newsletter.tagline "Получайте свежие новости от Tor по email."> +<!ENTITY aboutTor.newsletter.link_text "Подпишитесь на новости Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor бесплатен благодаря пожертвованиям таких людей, как вы."> +<!ENTITY aboutTor.donationBanner.buttonA "Пожертвовать"> + +<!ENTITY aboutTor.alpha.ready.label "Протестируйте. Тщательно."> +<!ENTITY aboutTor.alpha.ready2.label "Вы готовы протестировать самый приватный в мире браузер."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha — это нестабильная версия Tor Browser, которую вы можете использовать для ознакомления с новыми функциями, тестирования их работы и обратной связи перед релизом."> +<!ENTITY aboutTor.alpha.bannerLink "Сообщить об ошибке на форуме Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Протестируйте. Тщательно."> +<!ENTITY aboutTor.nightly.ready2.label "Вы готовы протестировать самый приватный в мире браузер."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly — это нестабильная версия Tor Browser, которую вы можете использовать для ознакомления с новыми функциями, тестирования их работы и обратной связи перед релизом."> +<!ENTITY aboutTor.nightly.bannerLink "Сообщить об ошибке на форуме Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ОСНОВАН НА ПРИВАТНОСТИ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "СОПРОТИВЛЕНИЕ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "ПЕРЕМЕНЫ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "СВОБОДА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ПОЖЕРТВОВАТЬ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Ваше пожертвование в размере до $100000 удвоят Friends of Tor."> diff --git a/toolkit/torbutton/chrome/locale/ru/brand.dtd b/toolkit/torbutton/chrome/locale/ru/brand.dtd new file mode 100644 index 000000000000..7a6225ae915c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' и логотип 'Onion' – зарегистрированные торговые марки Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Нажмите для загрузки установленных системных плагинов"> +<!ENTITY plugins.installed.enable "Включить плагины"> +<!ENTITY plugins.installed.disable "Отключить плагины"> +<!ENTITY plugins.installed.disable.tip "Нажмите для предотвращения загрузки системых плагинов"> diff --git a/toolkit/torbutton/chrome/locale/ru/brand.properties b/toolkit/torbutton/chrome/locale/ru/brand.properties new file mode 100644 index 000000000000..3d2e35101b79 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Стартовая страница Firefox со встроенным поиском +homePageImport=Импорт домашней страницы из %S + +homePageMigrationPageTitle=Выбор домашней страницы +homePageMigrationDescription=Пожалуйста, выберите домашнюю страницу: + +syncBrandShortName=Синхронизация diff --git a/toolkit/torbutton/chrome/locale/ru/branding/brand.ftl b/toolkit/torbutton/chrome/locale/ru/branding/brand.ftl new file mode 100644 index 000000000000..f081a2caa39b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' и логотип 'Onion' – зарегистрированные торговые марки Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/ru/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/ru/browserOnboarding.properties new file mode 100644 index 000000000000..fc290b987c56 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Начало +onboarding.tour-tor-welcome.title=Вы готовы +onboarding.tour-tor-welcome.description=Tor Browser – лучший защитник приватности и безопасности при просмотре сайтов. Теперь вам не страшны слежка и цензура. Подробнее об этом расскажет наше маленькое руководство. +onboarding.tour-tor-welcome.next-button=Приватность + +onboarding.tour-tor-privacy=Приватность +onboarding.tour-tor-privacy.title=Слежка останется с носом +onboarding.tour-tor-privacy.description=Tor Browser изолирует файлы cookie и удаляет историю браузера после завершения сессии. Эти сделано ради приватности и безопасности. Перейдите к пункту "Сеть Tor", чтобы узнать, как мы защищаем вас на сетевом уровне. +onboarding.tour-tor-privacy.button=Сеть Tor + +onboarding.tour-tor-network=Сеть Tor +onboarding.tour-tor-network.title=Децентрализованная сеть +onboarding.tour-tor-network.description=Tor Browser подключает вас к сети Tor. Ее поддерживают волонтеры со всего мира. Это не VPN, здесь нет единственного узла, отказ которого вызовет сбой всей системы. Нет здесь и централизованного сервиса, которому придется довериться, чтобы приватно использовать интернет. +onboarding.tour-tor-network.description-para2=НОВОЕ: настройки сети Tor, включая возможность запрашивать мосты для стран, где Tor заблокирован. +onboarding.tour-tor-network.action-button=Настройте параметры сети Tor +onboarding.tour-tor-network.button=Просмотр цепочки + +onboarding.tour-tor-circuit-display=Просмотр цепочки +onboarding.tour-tor-circuit-display.title=Ваша цепочка +onboarding.tour-tor-circuit-display.description=Для каждого посещаемого вами домена трафик передается и шифруется в цепочке через три узла Tor. Эти узлы разбросаны по всему миру. Ни один веб-сайт не знает, откуда вы подключаетесь к сети. Можно изменить маршрут, если выбрать в меню пункт "Новая цепочка Tor для этого сайта". +onboarding.tour-tor-circuit-display.button=Ваша цепочка +onboarding.tour-tor-circuit-display.next-button=Безопасность + +onboarding.tour-tor-security=Безопасность +onboarding.tour-tor-security.title=Настраивайте для себя +onboarding.tour-tor-security.description=Предлагаем дополнительные настройки безопасности. С их помощью браузер блокирует элементы, которые злоумышленник может использовать для атаки на ваш компьютер. Нажмите кнопку ниже, чтобы увидеть эти настройки. +onboarding.tour-tor-security.description-suffix=Обратите внимание: по умолчанию NoScript и HTTPS Everywhere не отображаются в панели задач, но вы можете изменить это в настройках. +onboarding.tour-tor-security-level.button=Ваш уровень безопасности +onboarding.tour-tor-security-level.next-button=Рекомендации + +onboarding.tour-tor-expect-differences=Рекомендации +onboarding.tour-tor-expect-differences.title=Возможны отличия +onboarding.tour-tor-expect-differences.description=Tor обеспечивает безопасность и конфиденциальность, но ценой некоторых изменений. Скорость работы в сети может быть немного ниже. Некоторые элементы сайтов могут не работать или вовсе не загружаться (в зависимости от настроек безопасности). Иногда, вероятно, вам придется лишний раз доказывать, что вы человек, а не робот. +onboarding.tour-tor-expect-differences.button=Посмотреть FAQ +onboarding.tour-tor-expect-differences.next-button=Onion-ресурсы + +onboarding.tour-tor-onion-services=Onion-ресурсы +onboarding.tour-tor-onion-services.title=Попробуйте суперзащиту +onboarding.tour-tor-onion-services.description=Onion-ресурсы – сайты, которые заканчиваются на .onion. Они обеспечивают дополнительную защиту своим владельцам и посетителям, в том числе от цензуры. Onion-ресурсы позволяют любому человеку публиковать контент и предлагать свои услуги. Нажмите кнопку ниже, чтобы посетить onion-сайт DuckDuckGo. +onboarding.tour-tor-onion-services.button=Посетите onion-сайт +onboarding.tour-tor-onion-services.next-button=Готово + +onboarding.overlay-icon-tooltip-updated2=Что нового\nв %S +onboarding.tour-tor-update.prefix-new=Новое +onboarding.tour-tor-update.prefix-updated=Обновлено + +onboarding.tour-tor-toolbar=Панель инструментов +onboarding.tour-tor-toolbar-update-9.0.title=Прощай, кнопка "Onion" +onboarding.tour-tor-toolbar-update-9.0.description=Мы хотим, чтобы в Tor Browser все важное было под рукой. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Кнопка "Onion" больше не нужна. Теперь вы можете увидеть свою цепочку Tor, нажав значок замочка в адресной строке. Создать новую личность можно нажатием кнопки на панели инструментов или через меню [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Как запросить новую личность +onboarding.tour-tor-toolbar-update-9.0.next-button=Перейти в cеть Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Далее +onboarding.tor-circuit-display.done=Готово +onboarding.tor-circuit-display.one-of-three=1 из 3 +onboarding.tor-circuit-display.two-of-three=2 из 3 +onboarding.tor-circuit-display.three-of-three=3 из 3 + +onboarding.tor-circuit-display.intro.title=Как работает цепочка? +onboarding.tor-circuit-display.intro.msg=Цепочка образуется из случайно назначенных узлов. Это компьютеры в разных частях света. Они настроены для пересылки трафика Tor. Цепочка делает ваш браузер безопасным и позволяет подключаться к onion-сайтам. + +onboarding.tor-circuit-display.diagram.title=Просмотр цепочки +onboarding.tor-circuit-display.diagram.msg=Здесь показаны узлы, которые составляют цепочку для этого сайта. У каждого сайта своя цепочка. Это нужно, чтобы нельзя было сопоставить ваши действия на разных сайтах. + +onboarding.tor-circuit-display.new-circuit.title=Нужна новая цепочка? +onboarding.tor-circuit-display.new-circuit.msg=Если не получается открыть сайт или он не загружается должным образом, попробуйте нажать эту кнопку. Сайт перезагрузится с новой цепочкой. diff --git a/toolkit/torbutton/chrome/locale/ru/network-settings.dtd b/toolkit/torbutton/chrome/locale/ru/network-settings.dtd new file mode 100644 index 000000000000..375e3c3b517f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Настройки сети Tor"> +<!ENTITY torsettings.wizard.title.default "Подключение к Tor"> +<!ENTITY torsettings.wizard.title.configure "Настройки сети Tor"> +<!ENTITY torsettings.wizard.title.connecting "Идет подключение"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Язык Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Пожалуйста, выберите язык."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Нажмите "Соединиться" для подключения к Tor."> +<!ENTITY torSettings.configurePrompt "Нажмите "Настроить" для настройки сети. Это имеет смысл, если вы в стране, запрещающей Tor (например, Египет, Китай, Турция), или если вы подключаетесь из приватной сети, требующей прокси."> +<!ENTITY torSettings.configure "Настроить"> +<!ENTITY torSettings.connect "Соединиться"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Ожидание запуска Tor..."> +<!ENTITY torsettings.restartTor "Перезапустить Tor"> +<!ENTITY torsettings.reconfigTor "Изменить настройки"> + +<!ENTITY torsettings.discardSettings.prompt "Вы настроили мосты Tor или локальный прокси-сервер. Для прямого подключения к сети Tor эти параметры нужно удалить."> +<!ENTITY torsettings.discardSettings.proceed "Удалить настройки и подключиться"> + +<!ENTITY torsettings.optional "Дополнительно"> + +<!ENTITY torsettings.useProxy.checkbox "Я использую прокси для подключения к интернету"> +<!ENTITY torsettings.useProxy.type "Тип прокси"> +<!ENTITY torsettings.useProxy.type.placeholder "выбор типа прокси"> +<!ENTITY torsettings.useProxy.address "Адрес"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-адрес или хост"> +<!ENTITY torsettings.useProxy.port "Порт"> +<!ENTITY torsettings.useProxy.username "Имя пользователя"> +<!ENTITY torsettings.useProxy.password "Пароль"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Мой брандмауэр разрешает подключения только к определенным портам"> +<!ENTITY torsettings.firewall.allowedPorts "Разрешенные порты"> +<!ENTITY torsettings.useBridges.checkbox "Tor заблокирован в моей стране"> +<!ENTITY torsettings.useBridges.default "Выбрать встроенный мост"> +<!ENTITY torsettings.useBridges.default.placeholder "выбор моста"> +<!ENTITY torsettings.useBridges.bridgeDB "Запросить мост у torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Введите символы с изображения"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Показать другую картинку"> +<!ENTITY torsettings.useBridges.captchaSubmit "ОК"> +<!ENTITY torsettings.useBridges.custom "Указать мост вручную"> +<!ENTITY torsettings.useBridges.label "Укажите данные моста из доверенного источника"> +<!ENTITY torsettings.useBridges.placeholder "адрес:порт (по одному в строке)"> + +<!ENTITY torsettings.copyLog "Скопировать журнал Tor в буфер обмена"> + +<!ENTITY torsettings.proxyHelpTitle "Помощь по прокси"> +<!ENTITY torsettings.proxyHelp1 "Локальный прокси-сервер может понадобиться при подключении через корпоративную, школьную или университетскую сеть. Если вы не уверены, нужен ли прокси, посмотрите сетевые настройки в другом браузере или проверьте сетевые настройки вашей системы."> + +<!ENTITY torsettings.bridgeHelpTitle "Помощь по мостам (ретрансляторам)"> +<!ENTITY torsettings.bridgeHelp1 "Мосты – непубличные точки-посредники (ретрансляторы), которые затрудняют попытки цензоров блокировать подключения к сети Tor. Каждый тип моста использует отличный от других метод для обхода блокировки. Мосты типа "obfs" делают ваш трафик похожим на случайный шум. Мосты типа "meek" имитируют подключение к сервису, отличному от Tor."> +<!ENTITY torsettings.bridgeHelp2 "Разные страны по-разному пытаются блокировать Tor. Поэтому те или иные мосты работают в одних странах, но не работают в других. Если не уверены в том, какой мост сработает у вас в стране, посетите torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Пожалуйста, подождите, пока мы установим подключение к сети Tor. Это может занять несколько минут."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Подключение"> +<!ENTITY torPreferences.torSettings "Настройки Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser перенаправляет ваш трафик через сеть Tor. Ее поддерживают тысячи добровольцев по всему миру." > +<!ENTITY torPreferences.learnMore "Узнать больше"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Интернет:"> +<!ENTITY torPreferences.statusInternetTest "Тест"> +<!ENTITY torPreferences.statusInternetOnline "В сети"> +<!ENTITY torPreferences.statusInternetOffline "Не в сети"> +<!ENTITY torPreferences.statusTorLabel "Сеть Tor:"> +<!ENTITY torPreferences.statusTorConnected "Подключено"> +<!ENTITY torPreferences.statusTorNotConnected "Не подключен"> +<!ENTITY torPreferences.statusTorBlocked "Потенциально заблокирован"> +<!ENTITY torPreferences.learnMore "Узнать больше"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Быстрый старт"> +<!ENTITY torPreferences.quickstartDescriptionLong "Быстрый запуск автоматически подключит Tor Browser к сети Tor при запуске, исходя из последних использованных настроек подключения."> +<!ENTITY torPreferences.quickstartCheckbox "Всегда подключаться автоматически"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Мосты"> +<!ENTITY torPreferences.bridgesDescription "Мосты помогают получить доступ к сети Tor там, где он заблокирован. В зависимости от вашего местонахождения один мост может работать лучше другого."> +<!ENTITY torPreferences.bridgeLocation "Ваше местоположение"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Автоматически"> +<!ENTITY torPreferences.bridgeLocationFrequent "Часто выбираемые местоположения"> +<!ENTITY torPreferences.bridgeLocationOther "Другие места"> +<!ENTITY torPreferences.bridgeChooseForMe "Выбрать мост для меня..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Ваши текущие мосты"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Вы можете сохранить один или несколько мостов, и Tor сам выберет, какой из них использовать при подключении. Tor автоматически переключится на использование другого моста, когда это необходимо."> +<!ENTITY torPreferences.bridgeId "#1 мост: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Удалить"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Отключить встроенные мосты"> +<!ENTITY torPreferences.bridgeShare "Поделитесь этим мостом, используя QR-код или скопировав его адрес:"> +<!ENTITY torPreferences.bridgeCopy "Скопировать адрес моста"> +<!ENTITY torPreferences.copied "Скопировано!"> +<!ENTITY torPreferences.bridgeShowAll "Показать все мосты"> +<!ENTITY torPreferences.bridgeRemoveAll "Удалить все мосты"> +<!ENTITY torPreferences.bridgeAdd "Добавить новый мост"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Выберите один из встроенных мостов Tor Browser"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Выбрать встроенный мост…"> +<!ENTITY torPreferences.bridgeRequest "Запрос моста…"> +<!ENTITY torPreferences.bridgeEnterKnown "Введите адрес моста, который вам уже известен"> +<!ENTITY torPreferences.bridgeAddManually "Добавить мост вручную…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Дополнительно"> +<!ENTITY torPreferences.advancedDescription "Настройка подключения Tor Browser к интернету"> +<!ENTITY torPreferences.advancedButton "Настройки…"> +<!ENTITY torPreferences.viewTorLogs "Просмотр журналов Tor"> +<!ENTITY torPreferences.viewLogs "Смотреть журнал…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Удалить все мосты?"> +<!ENTITY torPreferences.removeBridgesWarning "Это действие не может быть отменено."> +<!ENTITY torPreferences.cancel "Отменить"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Сканировать QR-код"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Встроенные мосты"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser включает в себя несколько специальных типов мостов, известных как "подключаемые транспорты"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 — это тип встроенного моста, благодаря которому ваш трафик Tor выглядит случайным. Кроме того, вероятность его блокировки ниже, чем у его предшественника, моста obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake — это встроенный мост, который обходит цензуру, направляя ваше соединение через прокси-серверы Snowflake, которыми управляют добровольцы"> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure — это встроенный мост, который делает ваш трафик неотличимым от трафика в направлении Microsoft."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Запрос моста"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Обращение к BridgeDB. Пожалуйста, подождите."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решите CAPTCHA для запроса моста"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Неправильно. Пожалуйста, попробуйте снова."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Предоставить мост"> +<!ENTITY torPreferences.provideBridgeHeader "Укажите данные моста из доверенного источника"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Настройки подключения"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Настройте способ подключения Tor Browser к интернету"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Значения, разделенные запятыми"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Журнал Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Не подключен"> +<!ENTITY torConnect.connectingConcise "Соединение..."> +<!ENTITY torConnect.tryingAgain "Повторная попытка..."> +<!ENTITY torConnect.noInternet "Tor Browser не может подключиться к Интернету"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser не может подключиться к Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "настроить подключение"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Если Tor заблокирован в месте вашего нахождения, попробуйте использовать мост. Помощник подключения поможет подобрать мост, используя ваше местоположение, или вы можете выбрать #1 вручную."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Пробуем мост..."> +<!ENTITY torConnect.tryingBridgeAgain "Пробуем еще раз…"> +<!ENTITY torConnect.errorLocation "Tor Browser не смог определить ваше местоположение"> +<!ENTITY torConnect.errorLocationDescription "Браузеру Tor необходимо знать ваше местоположение, чтобы подобрать для вас подходящий мост. Если вы предпочитаете не сообщать ваше местоположение, то выберите #1 вручную."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Эти настройки местоположения верны?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser все еще не может подключиться к Tor. Пожалуйста, проверьте правильность настроек местоположения и повторите попытку или #1 вместо этого."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Помощник подключения"> +<!ENTITY torConnect.breadcrumbLocation "Настройки местоположения"> +<!ENTITY torConnect.breadcrumbTryBridge "Попробовать мост"> +<!ENTITY torConnect.automatic "Автоматически"> +<!ENTITY torConnect.selectCountryRegion "Выбор страны или региона"> +<!ENTITY torConnect.frequentLocations "Часто выбираемые местоположения"> +<!ENTITY torConnect.otherLocations "Другие места"> +<!ENTITY torConnect.restartTorBrowser "Перезапустить Tor Browser"> +<!ENTITY torConnect.configureConnection "Настройка подключения…"> +<!ENTITY torConnect.viewLog "Просмотр журналов…"> +<!ENTITY torConnect.tryAgain "Попробовать снова"> +<!ENTITY torConnect.offline "Интернет недоступен"> +<!ENTITY torConnect.connectMessage "Изменения в настройках Tor не вступят в силу, пока вы не подключитесь"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser не удалось установить соединение с сетью Tor"> +<!ENTITY torConnect.yourLocation "Ваше местоположение"> +<!ENTITY torConnect.tryBridge "Попробовать мост"> +<!ENTITY torConnect.autoBootstrappingFailed "Автоматическая настройка не удалась"> +<!ENTITY torConnect.autoBootstrappingFailed "Автоматическая настройка не удалась"> +<!ENTITY torConnect.cannotDetermineCountry "Невозможно определить страну пользователя"> +<!ENTITY torConnect.noSettingsForCountry "Нет доступных настроек для вашего местоположения"> diff --git a/toolkit/torbutton/chrome/locale/ru/onboarding.properties b/toolkit/torbutton/chrome/locale/ru/onboarding.properties new file mode 100644 index 000000000000..15fe5e1e9947 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Новичок в %S?\nДавайте начнём. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S совсем новый.\nПосмотрите, что вы можете сделать! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Закрыть +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Убрать +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Завершено diff --git a/toolkit/torbutton/chrome/locale/ru/torbutton.dtd b/toolkit/torbutton/chrome/locale/ru/torbutton.dtd new file mode 100644 index 000000000000..a24ea0248deb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Новая личность"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Новая личность"> +<!ENTITY torbutton.context_menu.new_identity_key "л"> +<!ENTITY torbutton.context_menu.new_circuit "Новая цепочка Tor для этого cайта"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Новая цепочка Tor для этого cайта"> +<!ENTITY torbutton.context_menu.new_circuit_key "ц"> +<!ENTITY torbutton.context_menu.networksettings "Настройки сети Tor"> +<!ENTITY torbutton.context_menu.networksettings.key "с"> +<!ENTITY torbutton.context_menu.downloadUpdate "Проверить наличие обновлений Tor Browser"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "о"> +<!ENTITY torbutton.context_menu.cookieProtections "Защита куки"> +<!ENTITY torbutton.context_menu.cookieProtections.key "к"> +<!ENTITY torbutton.button.tooltip "Нажмите для старта Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Настройки безопасности Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Управление защитой куки-файлов"> +<!ENTITY torbutton.cookiedialog.lockCol "Защищено"> +<!ENTITY torbutton.cookiedialog.domainCol "Сайт"> +<!ENTITY torbutton.cookiedialog.nameCol "Имя"> +<!ENTITY torbutton.cookiedialog.pathCol "Путь"> +<!ENTITY torbutton.cookiedialog.protectCookie "Защитить cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Удалить cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Снять защиту cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Удалить все, кроме защищенных"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Защищать новые cookie"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Не защищать новые cookie"> +<!ENTITY torbutton.prefs.sec_caption "Уровень безопасности"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Настройки безопасности позволяют запретить некоторые функции браузера, которые могут повысить его уязвимость."> +<!ENTITY torbutton.prefs.sec_standard_label "Обычный"> +<!ENTITY torbutton.prefs.sec_standard_description "Все функции Tor Browser и веб-сайтов включены."> +<!ENTITY torbutton.prefs.sec_safer_label "Высокий"> +<!ENTITY torbutton.prefs.sec_safer_description "Отключены функции веб-сайтов, которые часто бывают опасны. Могут быть проблемы с работой некоторых сайтов."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Высокий уровень:"> +<!ENTITY torbutton.prefs.sec_safest_label "Высший"> +<!ENTITY torbutton.prefs.sec_safest_description "Разрешены только функции веб-сайтов, необходимые для статических сайтов и основных сервисов. Эти изменения влияют на изображения, медиа и скрипты."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Высший уровень:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Подробнее"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript отключен на всех сайтах без HTTPS. "> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript отключен по умолчанию на всех сайтах."> +<!ENTITY torbutton.prefs.sec_limit_typography "Отключены некоторые шрифты и математические символы."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Отключены некоторые шрифты, значки, математические символы и изображения."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Аудио, видео (медиа HTML5) и WebGL проигрываются при нажатии."> +<!ENTITY torbutton.prefs.sec_custom_warning "Пользовательский"> +<!ENTITY torbutton.prefs.sec_overview "Отключите веб-функции, которые могут использоваться для атаки на вашу безопасность и анонимность."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Уровень безопасности: обычный"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Уровень безопасности: высокий"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Уровень безопасности: высший"> +<!ENTITY torbutton.prefs.sec_custom_summary "Необычная комбинация настроек браузера. По соображениям безопасности и приватности рекомендуем выбрать один из уровней безопасности по умолчанию."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Восстановить значения по умолчанию"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Дополнительные настройки безопасности..."> +<!ENTITY torbutton.prefs.sec_change "Изменение..."> +<!ENTITY torbutton.circuit_display.title "Цепочка Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Новая цепочка для этого сайта"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Открыть запрос аутентификации клиента onion-ресурса"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Запомнить этот ключ"> diff --git a/toolkit/torbutton/chrome/locale/ru/torbutton.properties b/toolkit/torbutton/chrome/locale/ru/torbutton.properties new file mode 100644 index 000000000000..f7d6da9dabaf --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Интернет +torbutton.circuit_display.ip_unknown = Неизвестный IP +torbutton.circuit_display.onion_site = Onion-сайт +torbutton.circuit_display.this_browser = Этот браузер +torbutton.circuit_display.relay = Узел +torbutton.circuit_display.tor_bridge = Мост +torbutton.circuit_display.unknown_country = Неизвестная страна +torbutton.circuit_display.guard = Сторожевой +torbutton.circuit_display.guard_note = [Сторожевой] узел нельзя изменить. +torbutton.circuit_display.learn_more = Узнать больше +torbutton.circuit_display.click_to_copy = Нажмите для копирования +torbutton.circuit_display.copied = Скопировано! +torbutton.content_sizer.margin_tooltip = Tor Browser добавляет этот отступ, чтобы ширина и высота окна были менее узнаваемыми. Это затрудняет отслеживание в интернете. +extensions.torbutton@torproject.org.description = Torbutton предлагает кнопку для настройки Tor. С помощью Torbutton можно быстро и легко очистить личные данные просмотра. +torbutton.popup.external.title = Скачать внешний файл? +torbutton.popup.external.app = Tor Browser не может отобразить этот файл. Придется открыть его с помощью другого приложения.\n\n +torbutton.popup.external.note = Некоторые типы файлов могут вызывать подключение приложений к интернету без использования Tor.\n\n +torbutton.popup.external.suggest = Ради безопасности лучше открывать скачанные файлы только без подключения к интернету. Также можно использовать Tor Live CD, например, Tails.\n +torbutton.popup.launch = Скачать файл +torbutton.popup.cancel = Отмена +torbutton.popup.dontask = В будущем скачивать файлы автоматически +torbutton.popup.no_newnym = Torbutton не может безопасно создать для вас новую личность. Он не имеет доступа к контрольному порту Tor.\n\nВы используете Tor Browser Bundle? +torbutton.security_settings.menu.title = Настройки безопасности +torbutton.title.prompt_torbrowser = Важная информация о Torbutton +torbutton.popup.prompt_torbrowser = Теперь Torbutton работает по-другому: выключить его больше нельзя.\n\nЗачем понадобилось это изменение? Небезопасно использовать Torbutton в браузере, где также работают без Tor. Возникает слишком много ошибок. Мы не можем их исправить другим способом.\n\nЕсли вы хотите и далее пользоваться Firefox в обычном режиме, лучше удалить Torbutton и загрузить Tor Browser Bundle. Конфиденциальность Tor Browser превосходит обычный Firefox, даже если это FIrefox [...] +torbutton.popup.short_torbrowser = Важная информация о Torbutton!\n\nTorbutton теперь всегда включен.\n\nНажмите на Torbutton для дополнительной информации. + +torbutton.popup.confirm_plugins = Плагины (например, Flash) могут нанести вред вашей конфиденциальности и анонимности.\n\nТакже они могут обойти Tor, чтобы узнать ваше текущее местоположение и IP-адрес.\n\nВы уверены, что хотите включить плагины?\n\n +torbutton.popup.never_ask_again = Больше не спрашивать +torbutton.popup.confirm_newnym = Tor Browser закроет все окна и вкладки. Все сессии сайтов будут закрыты.\n\nПерезапустить Tor Browser, чтобы получить новую личность?\n\n + +torbutton.maximize_warning = Открытие Tor Browser на максимальную величину позволяет веб-сайтам определять разрешение вашего монитора. Эту информацию тоже можно использоваться для отслеживания. Мы рекомендуем оставлять окна браузера Tor в их размере по умолчанию. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Этот веб-сайт (%S) попытался извлечь данные изображения из HTML5 canvas. Это может быть использовано для уникальной идентификации вашего компьютера.\n\nДолжен ли Tor Browser разрешить этому сайту извлекать данные изображения HTML5 canvas? +canvas.notNow=Не сейчас +canvas.notNowAccessKey=Н +canvas.allow=Разрешить в будущем +canvas.allowAccessKey=Р +canvas.never=Никогда для этого сайта (рекомендуется) +canvas.neverAccessKey=с + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Проблема с профилем %S +profileReadOnly=Вы не можете запустить %S из файловой системы, доступной только для чтения. Пожалуйста, скопируйте %S в другое место перед использованием. +profileReadOnlyMac=Вы не можете запустить %S из файловой системы, доступной только для чтения. Пожалуйста, скопируйте %S на рабочий стол или в папку "Программы" перед использованием. +profileAccessDenied=У %S нет прав доступа к профилю. Пожалуйста, настройте разрешения вашей файловой системы и попробуйте снова. +profileMigrationFailed=Миграция вашего профиля %S не удалась. \nБудут использованы новые настройки. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Скачиваем обновление: %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Соединение зашифровано (onion-ресурс, %1$S, %2$S-битные ключи, %3$S) +pageInfo_OnionEncryption=Соединение зашифровано (onion-ресурс) +pageInfo_OnionName=Имя onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Узнать больше +onionServices.errorPage.browser=Браузер +onionServices.errorPage.network=Сеть +onionServices.errorPage.onionSite=Onion-сайт +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Ошибка загрузки onion-сайта +onionServices.descNotFound.header=Onion-сайт не найден +onionServices.descNotFound=Наиболее вероятная причина – onion-сайт отключен. Свяжитесь с его администратором. +onionServices.descNotFound.longDescription=Подробности: %S – запрошенный дескриптор onion-ресурса не найден в хэше. Сервис недоступен для клиента. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Ошибка загрузки onion-сайта +onionServices.descInvalid.header=Ошибка доступа к onion-сайту +onionServices.descInvalid=Onion-сайт недоступен из-за внутренней ошибки. +onionServices.descInvalid.longDescription=Подробности: %S – запрошенный дескриптор onion-сайта не может быть обработан, либо произошла ошибка проверки подписи. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Ошибка загрузки onion-сайта +onionServices.introFailed.header=Разрыв соединения с onion-сайтом +onionServices.introFailed=Наиболее вероятная причина – onion-сайт отключен. Свяжитесь с его администратором. +onionServices.introFailed.longDescription=Подробности: %S – ошибка знакомства. Это значит, что дескриптор обнаружен, но сервис больше не подключен к точке знакомства. Вероятная причина: сервис изменил свой дескриптор или вообще не работает. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Ошибка загрузки onion-сайта +onionServices.rendezvousFailed.header=Ошибка подключения к onion-сайту +onionServices.rendezvousFailed=Onion-сайт занят, или сеть Tor перегружена. Попробуйте позже. +onionServices.rendezvousFailed.longDescription=Подробности: %S – клиенту не удалось установить связь с сервисом. Клиент не сумел завершить подключение. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Требуется авторизация +onionServices.clientAuthMissing.header=Onion-сайт потребовал авторизоваться +onionServices.clientAuthMissing=Для доступа к onion-сайту нужен ключ, но его нет. +onionServices.clientAuthMissing.longDescription=Подробности: %S – клиент скачал затребованный дескриптор onion-ресурса, но не смог расшифровать его содержание из-за отсутствия авторизационных данных клиента. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Ошибка авторизации +onionServices.clientAuthIncorrect.header=Ошибка аутентификации на onion-сайте +onionServices.clientAuthIncorrect=Предложенный ключ неверен или был отозван. Свяжитесь с администратором onion-сайта. +onionServices.clientAuthIncorrect.longDescription=Детали: %S – Клиент смог скачать требуемый дескриптор onion-ресурса, но не сумел расшифровать его содержание с помощью предоставленной клиентом авторизационной информации. Возможная причина – ключ был отозван. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Ошибка загрузки onion-сайта +onionServices.badAddress.header=Ошибка адреса onion-сайта +onionServices.badAddress=Указанный адрес onion-сайта неверен. Пожалуйста, убедитесь, что правильно ввели данные. +onionServices.badAddress.longDescription=Подробности: %S – Неверный адрес onion-сайта. Такая ошибка появляется при проблеме с контрольной суммой адреса, неверном открытом ключе ed25519 или неправильной кодировке. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Ошибка загрузки onion-сайта +onionServices.introTimedOut.header=Тайм-аут создания цепочки onion-сайта +onionServices.introTimedOut=Не удалось установить связь с onion-сайтом, возможно, из-за плохого соединения. +onionServices.introTimedOut.longDescription=Подробности: %S – Время соединения с запрошенным onion-ресурсом истекло. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S требует аутентификации. +onionServices.authPrompt.keyPlaceholder=Укажите свой секретный ключ для этого onion-ресурса +onionServices.authPrompt.done=Готово +onionServices.authPrompt.doneAccessKey=Г +onionServices.authPrompt.invalidKey=Пожалуйста, введите правильный ключ (52 символа base32 или 44 символа base64) +onionServices.authPrompt.failedToSetKey=Не удается настроить Tor с вашим ключом +onionServices.authPreferences.header=Аутентификация onion-ресурсов +onionServices.authPreferences.overview=Доступ к некоторым onion-ресурсам возможен только после идентификации с помощью ключа (вроде пароля). +onionServices.authPreferences.savedKeys=Сохраненные ключи… +onionServices.authPreferences.dialogTitle=Ключи onion-ресурсов +onionServices.authPreferences.dialogIntro=Ключи для следующих onion-сайтов хранятся на вашем компьютере +onionServices.authPreferences.onionSite=Onion-сайт +onionServices.authPreferences.onionKey=Ключ +onionServices.authPreferences.remove=Удалить +onionServices.authPreferences.removeAll=Удалить все +onionServices.authPreferences.failedToGetKeys=Невозможно получить ключи от Tor +onionServices.authPreferences.failedToRemoveKey=Невозможно удалить ключ +onionServices.v2Deprecated.pageTitle=Предупреждение о прекращении поддержки сайтов Onion V2 +onionServices.v2Deprecated.header=Поддержка сайтов Onion версии 2 скоро будет прекращена. +onionServices.v2Deprecated=Этот сайт скоро будет недоступен. Пожалуйста, свяжитесь с администратором сайта и попросите его обновить сайт. +onionServices.v2Deprecated.longDescription=Tor прекращает поддержку Onion-сервисов версии 2 с июля 2021 года, и этот Onion-сайт больше не будет доступен по этому адресу. Если вы являетесь администратором сайта, перейдите на Onion-сервис версии 3 в ближайшее время. +onionServices.v2Deprecated.tryAgain=ОК +onionServices.v2Deprecated.tooltip=Этот onion-сайт в ближайшее время станет недоступным + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Onion-ресурсы всегда в приоритете +onionLocation.alwaysPrioritizeAccessKey=п +onionLocation.notNow=Не сейчас +onionLocation.notNowAccessKey=н +onionLocation.description=Есть более приватная и безопасная версия этого сайта. Это onion-версия, которую можно просматривать в сети Tor. Onion-ресурсы помогают владельцам сайтов и посетителям избегать слежки и цензуры. +onionLocation.tryThis=Попробуйте onion-ресурсы +onionLocation.onionAvailable=.onion доступно +onionLocation.learnMore=Узнать больше... +onionLocation.always=Всегда +onionLocation.askEverytime=Спрашивать всякий раз +onionLocation.prioritizeOnionsDescription=Onion-сайты в приоритете (по возможности). +onionLocation.onionServicesTitle=Onion-ресурсы + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Адрес криптовалюты (%S) был скопирован с небезопасного веб-сайта. Он мог быть изменен. +cryptoSafetyPrompt.whatCanHeading=Что вы можете с этим сделать? +cryptoSafetyPrompt.whatCanBody=Вы можете попробовать переподключиться к новой цепочке, чтобы установить безопасное соединение, или принять риск и пропустить это предупреждение. +cryptoSafetyPrompt.learnMore=Узнать больше +cryptoSafetyPrompt.primaryAction=Перезагрузить вкладку с новой цепочкой +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Закрыть предупреждение +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Соблюдайте осторожность +rulesets.warningDescription=Добавление или изменение наборов правил может привести к атакам злоумышленников на ваш браузер. Продолжайте только в том случае, если вы знаете, что делаете. +rulesets.warningEnable=Предупреждать меня при попытке доступа к этим настройкам +rulesets.warningButton=Принять риск и продолжить +# Ruleset list +rulesets.rulesets=Наборы правил +rulesets.noRulesets=Наборы правил не найдены +rulesets.noRulesetsDescr=После сохранения набора правил в Tor Browser он будет отображаться здесь. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Последнее обновление %S +rulesets.neverUpdated=Никогда не обновлялся или последнее обновление не удалось +rulesets.enabled=Включено +rulesets.disabled=Отключено +# Ruleset details/edit ruleset +rulesets.edit=Редактировать +rulesets.name=Имя +rulesets.jwk=JWK +rulesets.pathPrefix=Префикс пути +rulesets.scope=Область +rulesets.enable=Включить этот набор правил +rulesets.checkUpdates=Проверить наличие обновлений +rulesets.jwkPlaceholder=Ключ, используемый для подписи этого набора правил в формате JWK (JSON Web Key). +rulesets.jwkInvalid=JWK не удалось обработать, или он не является действительным ключом +rulesets.pathPrefixPlaceholder=Префикс URL, содержащий файлы, необходимые набору правил +rulesets.pathPrefixInvalid=Префикс пути не является допустимым URL-адресом HTTP(S) +rulesets.scopePlaceholder=Регулярное выражение для области действия правил +rulesets.scopeInvalid=Область действия не может быть разобрана как регулярное выражение +rulesets.save=Сохранить +rulesets.cancel=Отмена diff --git a/toolkit/torbutton/chrome/locale/ru/torlauncher.properties b/toolkit/torbutton/chrome/locale/ru/torlauncher.properties new file mode 100644 index 000000000000..c431ad6ec0af --- /dev/null +++ b/toolkit/torbutton/chrome/locale/ru/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Загрузчик Tor + +torlauncher.tor_exited_during_startup=Tor неожиданно завершил работу при запуске. Это могло произойти из-за ошибки в файле torrc, ошибки в Tor или другой программе у вас в системе, а также из-за неисправного оборудования. Для запуска Tor Browser нужно устранить причину проблемы и перезагрузить Tor. +torlauncher.tor_exited=Tor неожиданно завершил работу. Это могло быть вызвано сбоем в Tor, в другой программе, а также неисправностью компьютера. Чтобы загружать сайты через Tor Browser, нужно перезапустить Tor. Если проблема останется, пожалуйста, отправьте копию журнала (логов) Tor нашей команде поддержки. +torlauncher.tor_exited2=Перезапуск Тор не закроет вкладки браузера. +torlauncher.tor_controlconn_failed=Ошибка соединения с контрольным портом Tor. +torlauncher.tor_failed_to_start=Ошибка запуска Tor. +torlauncher.tor_control_failed=Ошибка связи с Tor. +torlauncher.tor_bootstrap_failed=Ошибка подключения к сети Tor. +torlauncher.tor_bootstrap_failed_details=Ошибка %1$S (%2$S). + +torlauncher.unable_to_start_tor=Ошибка запуска Tor.\n\n%S +torlauncher.tor_missing=Исполняемый файл Tor отсутствует. +torlauncher.torrc_missing=Файл torrc отсутствует и не может быть создан. +torlauncher.datadir_missing=Папка данных Tor отсутствует и не может быть создана. +torlauncher.onionauthdir_missing=Папка проверки подлинности Tor отсутствует и не может быть создана. +torlauncher.password_hash_missing=Ошибка получения хэшированного пароля. + +torlauncher.failed_to_get_settings=Ошибка загрузки настроек Tor.\n\n%S +torlauncher.failed_to_save_settings=Ошибка сохранения настроек Tor.\n\n%S +torlauncher.ensure_tor_is_running=Пожалуйста, убедитесь, что Tor запущен. + +torlauncher.error_proxy_addr_missing=Вы должны указать IP-адрес (или имя хоста) и порт, чтобы настроить Tor на работу через прокси. +torlauncher.error_proxy_type_missing=Нужно выбрать тип прокси. +torlauncher.error_bridges_missing=Нужно указать один или несколько мостов. +torlauncher.error_default_bridges_type_missing=Нужно выбрать тип транспорта указанных мостов. +torlauncher.error_bridgedb_bridges_missing=Пожалуйста, запросите мост. +torlauncher.error_bridge_bad_default_type=Нет мостов с поддержкой типа транспорта %S. Пожалуйста, измените настройки. + +torlauncher.bridge_suffix.meek-amazon=(работает в Китае) +torlauncher.bridge_suffix.meek-azure=(работает в Китае) + +torlauncher.request_a_bridge=Запрос моста… +torlauncher.request_a_new_bridge=Запрос нового моста… +torlauncher.contacting_bridgedb=Обращение к BridgeDB. Пожалуйста, подождите. +torlauncher.captcha_prompt=Решите CAPTCHA для запроса моста. +torlauncher.bad_captcha_solution=Ошибка. Пожалуйста, попробуйте снова. +torlauncher.unable_to_get_bridge=Ошибка получения моста из BridgeDB.\n\n%S +torlauncher.no_meek=Этот браузер не настроен для meek (требуется для получения мостов). +torlauncher.no_bridges_available=В настоящее время мостов нет. Извините. + +torlauncher.connect=Соединиться +torlauncher.restart_tor=Перезапустить Tor +torlauncher.quit=Выйти +torlauncher.quit_win=Выход +torlauncher.done=Готово + +torlauncher.forAssistance=Для помощи свяжитесь с %S +torlauncher.forAssistance2=Для помощи посетите %S + +torlauncher.copiedNLogMessages=Копирование завершено. %S сообщений с логами Tor находятся в буфере обмена. Можно вставить их в текстовый редактор или email. + +torlauncher.bootstrapStatus.starting=Запуск +torlauncher.bootstrapStatus.conn_pt=Подключение к мосту +torlauncher.bootstrapStatus.conn_done_pt=Подключено к мосту +torlauncher.bootstrapStatus.conn_proxy=Подключение к прокси +torlauncher.bootstrapStatus.conn_done_proxy=Подключено к прокси +torlauncher.bootstrapStatus.conn=Подключение к узлу Tor +torlauncher.bootstrapStatus.conn_done=Подключено к узлу Tor +torlauncher.bootstrapStatus.handshake=Обмен данными с узлом Tor +torlauncher.bootstrapStatus.handshake_done=Обмен данными с узлом Tor завершен +torlauncher.bootstrapStatus.onehop_create=Создание шифрованного соединения +torlauncher.bootstrapStatus.requesting_status=Получение статуса сети +torlauncher.bootstrapStatus.loading_status=Загрузка статуса сети +torlauncher.bootstrapStatus.loading_keys=Загрузка сертификатов +torlauncher.bootstrapStatus.requesting_descriptors=Запрос данных об узле +torlauncher.bootstrapStatus.loading_descriptors=Загрузка данных об узле +torlauncher.bootstrapStatus.enough_dirinfo=Загрузка данных об узле завершена +torlauncher.bootstrapStatus.ap_conn_pt=Создание цепочки: подключение к мосту +torlauncher.bootstrapStatus.ap_conn_done_pt=Создание цепочки: подключено к мосту +torlauncher.bootstrapStatus.ap_conn_proxy=Создание цепочки: подключение к прокси +torlauncher.bootstrapStatus.ap_conn_done_proxy=Создание цепочки: подключено к прокси +torlauncher.bootstrapStatus.ap_conn=Создание цепочки: подключение к узлу Tor +torlauncher.bootstrapStatus.ap_conn_done=Создание цепочки: подключено к узлу Tor +torlauncher.bootstrapStatus.ap_handshake=Создание цепочки: обмен данными с узлом Tor +torlauncher.bootstrapStatus.ap_handshake_done=Создание цепочки: обмен данными с узлом Tor завершен +torlauncher.bootstrapStatus.circuit_create=Создание цепочки Tor +torlauncher.bootstrapStatus.done=Подключено к сети Tor! + +torlauncher.bootstrapWarning.done=ok +torlauncher.bootstrapWarning.connectrefused=в подключении отказано +torlauncher.bootstrapWarning.misc=pазное +torlauncher.bootstrapWarning.resourcelimit=нехватка ресурсов +torlauncher.bootstrapWarning.identity=ошибка идентификации +torlauncher.bootstrapWarning.timeout=тайм-аут соединения +torlauncher.bootstrapWarning.noroute=ошибка пути к хосту +torlauncher.bootstrapWarning.ioerror=ошибка чтения/записи +torlauncher.bootstrapWarning.pt_missing=отсутствует подключаемый транспорт + +torlauncher.nsresult.NS_ERROR_NET_RESET=Соединение с сервером потеряно. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Ошибка подключения к серверу. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Ошибка подключения к прокси. + +torlauncher.copiedNLogMessagesShort=Скопировано логов: %S diff --git a/toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd new file mode 100644 index 000000000000..788292b6b338 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; është zhvilluar prej "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", një ent jofitimprurës që punon për të mbrojtur privatësinë dhe lirinë tuaj internetore."> + +<!ENTITY help.start "Doni të ndihmoni? "> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Dhuroni"> +<!ENTITY help.or " ose"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "përfshihuni"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Pyetje?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Ndihmojeni Rrjetin Tor të Fuqizohet!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Të dhëna Licencimi"> +<!ENTITY tor.TrademarkStatement "'Tor' dhe 'Onion Logo' janë shenja tregtare të regjistruara të Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/sq/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/sq/aboutTBUpdate.dtd new file mode 100644 index 000000000000..e78aa6dd704b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Regjistër Ndryshimesh Në Shfletuesin Tor"> +<!ENTITY aboutTBUpdate.updated "Shfletuesi Tor është përditësuar."> +<!ENTITY aboutTBUpdate.linkPrefix "Për një informacion më të përditësuar në lidhje me këtë version,"> +<!ENTITY aboutTBUpdate.linkLabel "vizitoni sajtin tonë"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Datë Hedhjeje Në Qarkullim"> +<!ENTITY aboutTBUpdate.releaseNotes "Shënime Hedhjeje Në Qarkullim"> diff --git a/toolkit/torbutton/chrome/locale/sq/aboutTor.dtd b/toolkit/torbutton/chrome/locale/sq/aboutTor.dtd new file mode 100644 index 000000000000..00d055136bcc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Rreth Tor-it"> + +<!ENTITY aboutTor.viewChangelog.label "Shihni Regjistër Ndryshimesh"> + +<!ENTITY aboutTor.ready.label "Eksploroni. Privatisht."> +<!ENTITY aboutTor.ready2.label "Jeni gati për shfletimin më privat në botë."> +<!ENTITY aboutTor.failure.label "Diçka Shkoi Keq!"> +<!ENTITY aboutTor.failure2.label "Tor-i s’po punon në këtë shfletues."> + +<!ENTITY aboutTor.search.label "Kërko me DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Pyetje?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Shihni Doracakun tonë për Shfletuesin Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "D"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Doracak Shfletuesi Tor"> + +<!ENTITY aboutTor.tor_mission.label "Projekti Tor është një ent jofitimprurës i kategorisë US 501(c)(3), që shpie përpara të drejtat dhe liritë e njerëzve përmes krijimit dhe vënies në jetë të teknologjive të lira dhe me burim të hapur për anonimitet dhe privatësi, përkrahjes së pasjes dhe përdorimit të pakufizuar të tyre dhe shpënies më tej të të kuptuarit të tyre shkencor dhe popullor."> +<!ENTITY aboutTor.getInvolved.label "Përfshihuni »"> + +<!ENTITY aboutTor.newsletter.tagline "Merrni lajmet më të reja nga Tor-i drejt e te mesazhet tuaja email."> +<!ENTITY aboutTor.newsletter.link_text "Regjistrohuni për Lajme Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor-i mund të përdoret lirisht, falë dhurimeve nga njerëz si ju."> +<!ENTITY aboutTor.donationBanner.buttonA "Dhuroni Tani"> + +<!ENTITY aboutTor.alpha.ready.label "Testojeni. Në tërësi."> +<!ENTITY aboutTor.alpha.ready2.label "Jeni gati të provoni funksionimin e shfletimit më privat të botës."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha është një version i paqëndrueshëm i Shfletuesit Tor që mund ta përdorni për të parë paraprakisht veçori të reja, të provoni funksionimin e tyre dhe të jepni përshtypje para hedhjes në qarkullim."> +<!ENTITY aboutTor.alpha.bannerLink "Njoftoni një të metë te Forumi i Tor-it"> + +<!ENTITY aboutTor.nightly.ready.label "Testojeni. Në tërësi."> +<!ENTITY aboutTor.nightly.ready2.label "Jeni gati të provoni funksionimin e shfletimit më privat të botës."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly është një version i paqëndrueshëm i Shfletuesit Tor që mund ta përdorni për të parë paraprakisht veçori të reja, të provoni funksionimin e tyre dhe të jepni përshtypje para hedhjes në qarkullim."> +<!ENTITY aboutTor.nightly.bannerLink "Njoftoni një të metë te Forumi i Tor-it"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "BAZUAR NË PRIVATËSI:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "REZISTENCË"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "NDRYSHIM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "LIRI"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DHURONI TANI"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Për dhurimin tuaj deri në 100000 dollarë, do të jepen po aq nga Miqtë e Tor-it."> diff --git a/toolkit/torbutton/chrome/locale/sq/brand.dtd b/toolkit/torbutton/chrome/locale/sq/brand.dtd new file mode 100644 index 000000000000..a24ee076f86b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Shfletuesi Tor"> +<!ENTITY brandShortName "Shfletuesi Tor"> +<!ENTITY brandFullName "Shfletuesi Tor"> +<!ENTITY vendorShortName "Projekti Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' dhe 'Onion Logo' janë shenja tregtare të regjistruara të Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Shfletuesi Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klikoni, që të ngarkohen shtojca sistemi të instaluara"> +<!ENTITY plugins.installed.enable "Aktivizo shtojcat"> +<!ENTITY plugins.installed.disable "Çaktivizo shtojcat"> +<!ENTITY plugins.installed.disable.tip "Klikoni që të parandalohet ngarkimi i shtojcave të sistemit"> diff --git a/toolkit/torbutton/chrome/locale/sq/brand.properties b/toolkit/torbutton/chrome/locale/sq/brand.properties new file mode 100644 index 000000000000..be60bb1ac177 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Shfletuesi Tor +brandShortName=Shfletuesi Tor +brandFullName=Shfletuesi Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Shfletuesi Tor +vendorShortName=Projekti Tor + +homePageSingleStartMain=Nisje me Firefox, një faqe hyrëse e shpejtë, me kërkimin të integruar +homePageImport=Importoni faqen tuaj hyrëse nga %S + +homePageMigrationPageTitle=Përzgjedhje Faqeje Hyrëse +homePageMigrationDescription=Ju lutemi, përzgjidhni faqen hyrëse që doni të përdoret: + +syncBrandShortName=Njëkohësoje diff --git a/toolkit/torbutton/chrome/locale/sq/branding/brand.ftl b/toolkit/torbutton/chrome/locale/sq/branding/brand.ftl new file mode 100644 index 000000000000..575e4a175c0a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Shfletuesi Tor +-brand-short-name = Shfletuesi Tor +-brand-full-name = Shfletuesi Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Shfletuesi Tor +-vendor-short-name = Projekti Tor +trademarkInfo = 'Tor' dhe 'Onion Logo' janë shenja tregtare të regjistruara të Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/sq/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/sq/browserOnboarding.properties new file mode 100644 index 000000000000..c266e1c0694c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Mirë se vini +onboarding.tour-tor-welcome.title=Jeni gati. +onboarding.tour-tor-welcome.description=Shfletuesi Tor ofron standardin më të lartë të privatësisë dhe sigurisë, teksa shfletohet në web. Tani jeni i mbrojtur nga gjurmimi, survejimi dhe censurimi. Kjo mirëseardhje e shpejtë do t’ju tregojë se si. +onboarding.tour-tor-welcome.next-button=Shko te Privatësi + +onboarding.tour-tor-privacy=Privatësi +onboarding.tour-tor-privacy.title=Përçmoni gjurmues dhe përgjues. +onboarding.tour-tor-privacy.description=Shfetuesi Tor izolon cookie-t dhe fshih historikun e shfletimit tuaj pas sesioni tuaj. Këto ndryshime garantojnë që privatësia dhe siguria juaj të jenë të mbrojtura në shfletues. Për të mësuar se si ju mbrojmë në shkallë rrjeti, klikoni mbi ‘Rrjeti Tor’. +onboarding.tour-tor-privacy.button=Shko në Rrjetin Tor + +onboarding.tour-tor-network=Rrjeti Tor +onboarding.tour-tor-network.title=Lëvizni në një rrjet të decentralizuar. +onboarding.tour-tor-network.description=Shfletuesi Tor ju lidh me rrjetin Tor të mbajtur në punë nga mijëra vullnetarë anembanë botës. Ndryshe nga një VPN, s’ka pikë dështimi apo njësi të centralizuar të cilës duhet t’i besoni, për të mundur të shijoni privatisht internetin. +onboarding.tour-tor-network.description-para2=E RE: Rregullimet e Rrjetit Tor, përfshi aftësinë për të kërkuar ura, kur Tor-i është i bllokuar, tanimë mund të gjendjen te Parapëlqimet. +onboarding.tour-tor-network.action-button=Përimtoni Rregullimet Tuaja të Rrjetit Tor +onboarding.tour-tor-network.button=Shko te Shfaqje Qarku + +onboarding.tour-tor-circuit-display=Shfaqje Qarku +onboarding.tour-tor-circuit-display.title=Shihni shtegun tuaj. +onboarding.tour-tor-circuit-display.description=Për çdo përkatësi që vizitoni, trafiku juaj kalohet dhe fshehtëzohet përmes tre relesh Tor anembanë botës. S’e di ndonjë sajt se prej nga po lidheni. Mund të kërkoni një qark të ri duke klikuar mbi ‘Qark i Ri për këtë Sajt’ te Ekrani ynë i Qarqeve. +onboarding.tour-tor-circuit-display.button=Pa të Shoh Shtegun Tim +onboarding.tour-tor-circuit-display.next-button=Shko te Siguri + +onboarding.tour-tor-security=Siguri +onboarding.tour-tor-security.title=Zgjidhni rastin tuaj. +onboarding.tour-tor-security.description=Ju furnizojmë edhe me rregullime shtesë për përforcim të sigurisë së shfletuesit tuaj. Rregullimet tona për Sigurinë ju lejojnë të bllokoni elementë që mund të përdoreshin për sulmuar kompjuterin tuaj. Klikoni më poshtë që të shihni se ç’bëjnë mundësitë e ndryshme. +onboarding.tour-tor-security.description-suffix=Shënim: Si parazgjedhje, NoScript-i dhe HTTPS Everywhere nuk përfshihen te paneli, por mundeni ta përshtatni panelin që t’i shtoni. +onboarding.tour-tor-security-level.button=Shihni Shkallën Tuaj të Sigurisë +onboarding.tour-tor-security-level.next-button=Shko te Ndihmëza mbi Punimin + +onboarding.tour-tor-expect-differences=Ndihmëza mbi Punimin +onboarding.tour-tor-expect-differences.title=Pritni ca ndryshime. +onboarding.tour-tor-expect-differences.description=Me krejt veçoritë për siguri dhe privatësi të furnizuara nga Tor, punimi juaj teksa shfletoni në internet mund të jetë pakëz i ndryshëm. Gjërat mund të jenë pakëz më të ngadalta, dhe, në varësi të shkallës tuaj të sigurisë, disa elementë mund të mos funksionojnë apo ngarkohen. Mundet edhe t’ju kërkohet të provoni se jeni qenie njerëzore dhe jo robot. +onboarding.tour-tor-expect-differences.button=Shihni PBR +onboarding.tour-tor-expect-differences.next-button=Shko te Shërbime Onion + +onboarding.tour-tor-onion-services=Shërbime Onion +onboarding.tour-tor-onion-services.title=Jini ekstra i mbrojtur. +onboarding.tour-tor-onion-services.description=Shërbimet Onion janë sajte që mbarojnë me një .onion çka furnizon mbrojtje ekstra për publikuesit dhe vizitorët, duke përfshirë mbrojtje shtesë kundër censurës. Shërbimet Onion lejojnë këdo të japë në mënyrë anonime lëndë dhe shërbime. Klikoni më poshtë që të vizitoni sajtin onion të DuckDuckGo-ut. +onboarding.tour-tor-onion-services.button=Vizitoni një Onion +onboarding.tour-tor-onion-services.next-button=U bë + +onboarding.overlay-icon-tooltip-updated2=Shihni ç’ka të re\nnë %S +onboarding.tour-tor-update.prefix-new=E re +onboarding.tour-tor-update.prefix-updated=U përditësua + +onboarding.tour-tor-toolbar=Panel +onboarding.tour-tor-toolbar-update-9.0.title=Lamtumirë Butoni Onion +onboarding.tour-tor-toolbar-update-9.0.description=Duam që puna juaj në përdorimin e Tor-it të jetë plotësisht e integruar brenda Shfletuesit Tor. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Kjo është arsyeja pse tanimë, në vend të përdorimit të butonit Onion, mundeni të shihni Qarkun tuaj Tor përmes [i] te shtylla e URL-ve dhe të kërkoni një Identitet të Ri duke përdorur butonin e panelit ose menunë [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Si të Kërkohet Identitet i Ri +onboarding.tour-tor-toolbar-update-9.0.next-button=Shko në Rrjetin Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Pasuesi +onboarding.tor-circuit-display.done=U krye +onboarding.tor-circuit-display.one-of-three=1 nga 3 +onboarding.tor-circuit-display.two-of-three=2 nga 3 +onboarding.tor-circuit-display.three-of-three=3 nga 3 + +onboarding.tor-circuit-display.intro.title=Si funksionojnë qarqet? +onboarding.tor-circuit-display.intro.msg=Qarqet formohen nga rele të caktuara kuturu, të cilat janë kompjutera anembanë botës të formësuar për të përcjellë trafik Tor. Qarqet ju lejojnë të shfletoni privatisht dhe të lidheni me shërbime onion. + +onboarding.tor-circuit-display.diagram.title=Shfaqje Qarku +onboarding.tor-circuit-display.diagram.msg=Ky diagram shfaq reletë që formojnë qarkun për këtë sajt. Për të parandaluar lidhjen e veprimtarive nëpër sajte të ndryshme, çdo sajti i jepet një qark i ndryshëm. + +onboarding.tor-circuit-display.new-circuit.title=Ju duhet një qark i ri? +onboarding.tor-circuit-display.new-circuit.msg=Nëse s’jeni në gjendje të lidheni me sajtin që po rrekeni të vizitoni, ose nëse s’ngarkohet si duhet, atëherë mund të përdorni këtë buton që ta ringarkoni sajtin me një qark të ri. diff --git a/toolkit/torbutton/chrome/locale/sq/network-settings.dtd b/toolkit/torbutton/chrome/locale/sq/network-settings.dtd new file mode 100644 index 000000000000..20b2c9864397 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Rregullime Rrjeti Tor"> +<!ENTITY torsettings.wizard.title.default "Lidhu me Tor-in"> +<!ENTITY torsettings.wizard.title.configure "Rregullime Rrjeti Tor"> +<!ENTITY torsettings.wizard.title.connecting "Vendosje Lidhjeje"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Gjuha e Shfletuesit Tor"> +<!ENTITY torlauncher.localePicker.prompt "Ju lutemi, përzgjidhni një gjuhë."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Që të lidheni me Tor-in, klikoni mbi “Lidhu”."> +<!ENTITY torSettings.configurePrompt "Klikoni mbi “Formësoje” që të përimtoni rregullime rrjeti, nëse gjendeni në një vend që censuron Tor-in (bie fjala, Egjipt, Kinë, Turqi) ose nëse po lidheni nga një rrjet privat që lyp doemos një ndërmjetës."> +<!ENTITY torSettings.configure "Formësojeni"> +<!ENTITY torSettings.connect "Lidhu"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Po pritet që të niset Tor-i…"> +<!ENTITY torsettings.restartTor "Riniseni Tor-in"> +<!ENTITY torsettings.reconfigTor "Riformësojeni"> + +<!ENTITY torsettings.discardSettings.prompt "Keni formësuar ura Tor ose keni dhënë rregullime ndërmjetësi vendor.  Për të bërë një lidhje të drejtpërdrejtë me rrjetin Tor, këto rregullime duhet të hiqen."> +<!ENTITY torsettings.discardSettings.proceed "Hiqi Rregullimet dhe Lidhu"> + +<!ENTITY torsettings.optional "Opsional"> + +<!ENTITY torsettings.useProxy.checkbox "Për t’u lidhur në Internet, unë përdor një ndërmjetës"> +<!ENTITY torsettings.useProxy.type "Lloj Ndërmjetësi"> +<!ENTITY torsettings.useProxy.type.placeholder "përzgjidhni një lloj ndërmjetësi"> +<!ENTITY torsettings.useProxy.address "Adresë"> +<!ENTITY torsettings.useProxy.address.placeholder "Adresë IP ose emër strehë"> +<!ENTITY torsettings.useProxy.port "Portë"> +<!ENTITY torsettings.useProxy.username "Emër përdoruesi"> +<!ENTITY torsettings.useProxy.password "Fjalëkalim"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Ky kompjuter kalon përmes një firewall-i, i cili lejon lidhje vetëm me disa porta."> +<!ENTITY torsettings.firewall.allowedPorts "Porta të Lejuara"> +<!ENTITY torsettings.useBridges.checkbox "TOR censurohet në vendin tim"> +<!ENTITY torsettings.useBridges.default "Përzgjidhni një Urë të Brendshme"> +<!ENTITY torsettings.useBridges.default.placeholder "përzgjidhni një urë"> +<!ENTITY torsettings.useBridges.bridgeDB "Kërkoni një urë nga torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Jepni shenjat prej figure"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Merrni një provë të re"> +<!ENTITY torsettings.useBridges.captchaSubmit "Parashtrojeni"> +<!ENTITY torsettings.useBridges.custom "Furnizo një urë që njoh"> +<!ENTITY torsettings.useBridges.label "Jepni të dhëna ure prej një burimi të besuar."> +<!ENTITY torsettings.useBridges.placeholder "shtypni adresë:portë (një për rresht)"> + +<!ENTITY torsettings.copyLog "Kopjo Regjistër Tor në Të papastër"> + +<!ENTITY torsettings.proxyHelpTitle "Ndihmë për Ndërmjetës"> +<!ENTITY torsettings.proxyHelp1 "Kur bëhet lidhje përmes një rrjeti shoqërie, shkolle apo universiteti, mund të duhet një ndërmjetës vendor. Nëse s’jeni i sigurt nëse duhet apo jo një ndërmjetës, shihni rregullimet për Internet në një shfletues tjetër ose kontrolloni te rregullimet e rrjetit për sistemin tuaj."> + +<!ENTITY torsettings.bridgeHelpTitle "Ndihmë mbi Rele Ura"> +<!ENTITY torsettings.bridgeHelp1 "Urat janë rele jo të pranishme në lista, që e bëjnë më të vështirë bllokimin e lidhjeve me Rrjetin Tor.  Çdo lloj ure përdor një metodë të ndryshme për shmangie censurimi.  Ato me errësim e bëjnë trafikun tuaj të duket si zhurmë e parregullt, dhe ato të llojit “meek” e bëjnë trafikun tuaj të duket sikur po bëhet lidhje me shërbimin e synuar, në vend se me Tor-in."> +<!ENTITY torsettings.bridgeHelp2 "Për shkak të mënyrave se si disa vende rreken të bllokojnë Tor-in, disa ura funksionojnë në disa nga vendet, por jo në të tjera.  Nëse s’jeni i sigurt se cilat ura funksionojnë në vendin tuaj, vizitoni torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Ju lutemi, prisni, teksa vendosim një lidhje me rrjetin e Tor.  Kjo mund të kërkojë disa minuta."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Spojenie"> +<!ENTITY torPreferences.torSettings "Rregullime Tor"> +<!ENTITY torPreferences.torSettingsDescription "Shfletuesi Tor e kalon trafikun tuaj përmes Rrjetit Tor, i mbajtur në këmbë nga mijëra vullnetarë anembanë botës." > +<!ENTITY torPreferences.learnMore "Mësoni më tepër"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Provë"> +<!ENTITY torPreferences.statusInternetOnline "I lidhur"> +<!ENTITY torPreferences.statusInternetOffline "Jo në linjë"> +<!ENTITY torPreferences.statusTorLabel "Rrjeti Tor:"> +<!ENTITY torPreferences.statusTorConnected "I lidhur"> +<!ENTITY torPreferences.statusTorNotConnected "Jo i Lidhur"> +<!ENTITY torPreferences.statusTorBlocked "Potencialisht e Bllokuar"> +<!ENTITY torPreferences.learnMore "Mësoni më tepër"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Nisje e shpejtë"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart-i bën automatikisht lidhjen e Shfletuesit Tor me Rrjetin Tor, kur niset, bazuar në rregullimet e përdorura për lidhjen e fundit."> +<!ENTITY torPreferences.quickstartCheckbox "Lidhu përherë automatikisht"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Ura"> +<!ENTITY torPreferences.bridgesDescription "Urat ju ndihmojnë të përdorni Rrjetin Tor në vende ku Tor-i është i bllokuar. Në varësi të vendit ku ndodheni, një urë mund të punojë më mirë se një tjetër."> +<!ENTITY torPreferences.bridgeLocation "Vendndodhja juaj"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatike"> +<!ENTITY torPreferences.bridgeLocationFrequent "Vendndodhje të përzgjedhura rëndom"> +<!ENTITY torPreferences.bridgeLocationOther "Vendndodhje të tjera"> +<!ENTITY torPreferences.bridgeChooseForMe "Zgjidhni një Urë Për Mua…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Urat Tuaja të Tanishme"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Mund të ruani një ose më tepër ura dhe Tor-i do të zgjedhë cilën të përdoret, kur lidheni. Tor-i do të kalojë automatikisht në përdorimin e një tjetër ure, kur kjo është e nevojshme."> +<!ENTITY torPreferences.bridgeId "Ura #1: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Hiqe"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Çaktivizo ura të brendshme"> +<!ENTITY torPreferences.bridgeShare "Ndajeni me të tjerët këtë urë duke u dhënë kodin QR, ose duke kopjuar adresën e saj:"> +<!ENTITY torPreferences.bridgeCopy "Kopjo Adresë Ure"> +<!ENTITY torPreferences.copied "U kopjua!"> +<!ENTITY torPreferences.bridgeShowAll "Shfaqi Krejt Urat"> +<!ENTITY torPreferences.bridgeRemoveAll "Hiqi Krejt Urat"> +<!ENTITY torPreferences.bridgeAdd "Shtoni një Urë të Re"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Zgjidhni një nga urat e brendshme të Shfletuesit Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Përzgjidhni një Urë të Brendshme…"> +<!ENTITY torPreferences.bridgeRequest "Kërkoni një Urë…"> +<!ENTITY torPreferences.bridgeEnterKnown "Jepni një adresë ure që njihni tashmë"> +<!ENTITY torPreferences.bridgeAddManually "Shtoni një Urë Dorazi…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Të mëtejshme"> +<!ENTITY torPreferences.advancedDescription "Formësoni se si lidhet në Internet Shfletuesi Tor"> +<!ENTITY torPreferences.advancedButton "Rregullime…"> +<!ENTITY torPreferences.viewTorLogs "Shihni regjistrat e Tor-it"> +<!ENTITY torPreferences.viewLogs "Shihni Regjistra…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Të hiqen krejt urat?"> +<!ENTITY torPreferences.removeBridgesWarning "Ky veprim s’mund të zhbëhet."> +<!ENTITY torPreferences.cancel "Anuloje"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Skanoni kodin QR"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Ura të Brendshme"> +<!ENTITY torPreferences.builtinBridgeDescription "Shfletuesi Tor përfshin disa lloje specifike urash, të njohura si “transporte të shtueshëm”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 është një lloj urash të brendshme që e bëjnë trafikun tuaj Tor të duket si kuturu. Për to gjithashtu ka më pak gjasa të bllokohen, se sa pararendëset e tyre, urat obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake-u është një urë e brendshme që mposht censurimin duke e kaluar lidhjen tuaj përmes ndërmjetësish Snowflake, të mbajtura në punë nga vullnetarë."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure është një urë e brendshme që bën të duket sikur po përdorni një sajt Microsoft, në vend të Tor-it që po përdorni."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Kërkoni Urë"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Po lidhet me BridgeDB. Ju lutemi, Pritni."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Që të kërkoni një urë, zgjidhni CAPTCHA-n."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Zgjidhja s’është e saktë. Ju lutemi, riprovoni."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Jepni një Urë"> +<!ENTITY torPreferences.provideBridgeHeader "Jepni të dhëna ure prej një burimi të besuar"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Rregullime Lidhjeje"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Formësoni se si lidhet në Internet Shfletuesi Tor"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Vlera të ndara me presje"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Regjistra Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Jo i Lidhur"> +<!ENTITY torConnect.connectingConcise "Po lidhet…"> +<!ENTITY torConnect.tryingAgain "Po riprovohet…"> +<!ENTITY torConnect.noInternet "Shfletuesi Tor s’u lidh dot me Internetin"> +<!ENTITY torConnect.noInternetDescription "Kjo mund të vijë nga një problem lidhjeje, në vend se nga bllokimi i Tor-it. Përpara se të riprovoni, kontrolloni lidhjen tuaj Internet, rregullimet për ndërmjetësin dhe për firewall-in."> +<!ENTITY torConnect.couldNotConnect "Shfletuesi Tor s’u lidh dot me Tor-in"> +<!ENTITY torConnect.assistDescriptionConfigure "formësoni lidhjen tuaj"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Nëse Tor-i është i bllokuar në vendndodhjen tuaj, provimi i një ure mund të ndihmonte. Ndihmësi i lidhjeve mund të zgjedhë një për ju duke përdorur vendndodhjen tuaj, ose mundeni të #1 dorazi."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Provoni një urë…"> +<!ENTITY torConnect.tryingBridgeAgain "Po provohet edhe një herë…"> +<!ENTITY torConnect.errorLocation "Shfletuesi Tor s’ju lokalizoi dot"> +<!ENTITY torConnect.errorLocationDescription "Shfletuesi Tor lypset të njohë vendndodhjen tuaj, që të mund të zgjedhë urën e duhur për ju. Nëse s’doni ta jepni vendndodhjen tuaj, #1 dorazi."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "A janë të sakta këto rregullime vendndodhjeje?"> +<!ENTITY torConnect.isLocationCorrectDescription "Shfletuesi Tor prapë s’u lidh dot me Tor-in. Ju lutemi, kontrolloni se rregullimet e vendndodhjes tuaj janë të sakta dhe riprovoni, ose #1."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Shfletuesi Tor ende s’lidhet dot"> +<!ENTITY torConnect.finalErrorDescription "Pavarësisht përpjekjeve më të mira, ndihmësi i lidhjes s’qe në gjendje të lidhet me Tor-in. Provoni të diagnostikoni lidhjen dhe tuaj dhe të shtoni një urë dorazi."> +<!ENTITY torConnect.breadcrumbAssist "Ndihmës lidhjeje"> +<!ENTITY torConnect.breadcrumbLocation "Rregullime vendndodhjeje"> +<!ENTITY torConnect.breadcrumbTryBridge "Provoni një urë"> +<!ENTITY torConnect.automatic "Automatike"> +<!ENTITY torConnect.selectCountryRegion "Përzgjidhni Vend ose Rajon"> +<!ENTITY torConnect.frequentLocations "Vendndodhje të përzgjedhura rëndom"> +<!ENTITY torConnect.otherLocations "Vendndodhje të tjera"> +<!ENTITY torConnect.restartTorBrowser "Rinisni Shfletuesin Tor"> +<!ENTITY torConnect.configureConnection "Formësoni Lidhje…"> +<!ENTITY torConnect.viewLog "Shihni regjistra…"> +<!ENTITY torConnect.tryAgain "Riprovoni"> +<!ENTITY torConnect.offline "S’kapet dot Interneti"> +<!ENTITY torConnect.connectMessage "Ndryshimet te Rregullimet e Tor-it s’do të hyjnë në fuqi para se të lidheni"> +<!ENTITY torConnect.tryAgainMessage "Shfletuesi Tor dështoi në vendosjen e një lidhjeje me Rrjetin Tor"> +<!ENTITY torConnect.yourLocation "Vendndodhja Juaj"> +<!ENTITY torConnect.tryBridge "Provoni një Urë"> +<!ENTITY torConnect.autoBootstrappingFailed "Formësimi i vetvetishëm dështoi"> +<!ENTITY torConnect.autoBootstrappingFailed "Formësimi i vetvetishëm dështoi"> +<!ENTITY torConnect.cannotDetermineCountry "S’arrihet të përcaktohet vend përdoruesi"> +<!ENTITY torConnect.noSettingsForCountry "S’ka rregullime për vendndodhjen tuaj"> diff --git a/toolkit/torbutton/chrome/locale/sq/onboarding.properties b/toolkit/torbutton/chrome/locale/sq/onboarding.properties new file mode 100644 index 000000000000..87524457dfc1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=I ri te %S?\nLe t’ia fillojmë. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S-i është i tëri i ri.\nShihni se ç’mund të bëni! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Mbylleni +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Hidhe tej +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=I plotësuar diff --git a/toolkit/torbutton/chrome/locale/sq/torbutton.dtd b/toolkit/torbutton/chrome/locale/sq/torbutton.dtd new file mode 100644 index 000000000000..d422cf937ba4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Identitet i Ri"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Identitet i ri"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Qark i Ri Tor për këtë Sajt"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Qark të ri Tor për këtë sajt"> +<!ENTITY torbutton.context_menu.new_circuit_key "Q"> +<!ENTITY torbutton.context_menu.networksettings "Rregullime Rrjeti Tor…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Kontrollo për Përditësime të Shfletuesit Tor…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "P"> +<!ENTITY torbutton.context_menu.cookieProtections "Mbrojtje nga Cookie-t…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Klikoni që të niset Torbutton-i"> +<!ENTITY torbutton.prefs.security_settings "Rregullime Sigurie Shfletuesi Tor"> +<!ENTITY torbutton.cookiedialog.title "Administroni Mbrojtje Cookie-sh"> +<!ENTITY torbutton.cookiedialog.lockCol "I mbrojtur"> +<!ENTITY torbutton.cookiedialog.domainCol "Strehë"> +<!ENTITY torbutton.cookiedialog.nameCol "Emër"> +<!ENTITY torbutton.cookiedialog.pathCol "Shteg"> +<!ENTITY torbutton.cookiedialog.protectCookie "Mbroje Cookie-n"> +<!ENTITY torbutton.cookiedialog.removeCookie "Lëvizeni Cookie-n"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Hiqja Mbrojtjen Cookie-t"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Hiqi Krejt, Përveç të Mbrojturave"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Mbroji Cookie-t e Reja"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Mos i Mbro Cookie-t e Reja"> +<!ENTITY torbutton.prefs.sec_caption "Nivel Sigurie"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Rrëshqitësi i Sigurisë ju lejon të çaktivizoni disa veçori të shfletuesit që mund ta bëjnë shfletuesin tuaj më të dobët kundrejt përpjekjesh hack-imi."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Krejt veçoritë për Shfletues dhe sajt Tor janë të aktivizuara."> +<!ENTITY torbutton.prefs.sec_safer_label "Më e sigurt:"> +<!ENTITY torbutton.prefs.sec_safer_description "Çaktivizon veçori sajti që shpesh janë të rrezikshme, duke bërë që disa sajte të humbasin funksione."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Me rregullimet për më të sigurt:"> +<!ENTITY torbutton.prefs.sec_safest_label "Më e sigurta"> +<!ENTITY torbutton.prefs.sec_safest_description "Lejon vetëm veçori sajti të domosdoshme për sajte statikë dhe shërbime elementare. Këto ndryshime prekin figura, media, dhe programthe."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Me rregullimet për më të sigurtën:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Mësoni më tepër"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript-i është i çaktivizuar në sajte jo-HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "Si parazgjedhje, JavaScript-i është i çaktivizuar në krejt sajtet."> +<!ENTITY torbutton.prefs.sec_limit_typography "Janë çaktivizuar disa shkronja dhe simbole matematike."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Disa shkronja, ikona, simbole matematike dhe figura janë çaktivizuar."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audioja dhe videoja (media HTML5), dhe WebGL janë të llojit klikojini-që-të-luhen."> +<!ENTITY torbutton.prefs.sec_custom_warning "Vetjake"> +<!ENTITY torbutton.prefs.sec_overview "Çaktivizoni disa veçori web që mund të përdoren për të sulmuar sigurinë dhe anonimitetin tuaj."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Shkallë Sigurie : Standarde"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Shkallë Sigurie : Më e Sigurt"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Shkallë Sigurie : Më e Sigurta"> +<!ENTITY torbutton.prefs.sec_custom_summary "Parapëlqimet tuaja vetjake për shfletuesin kanë sjellë në rregullime të pazakonta për sigurinë. Për arsye sigurie dhe privatësie, rekomandojmë që të zgjidhni një nga shkallët parazgjedhje të sigurisë."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Rikthe Parazgjedhjet"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Rregullime të Mëtejshme Sigurie…"> +<!ENTITY torbutton.prefs.sec_change "Ndryshojeni…"> +<!ENTITY torbutton.circuit_display.title "Qark TOR"> +<!ENTITY torbutton.circuit_display.new_circuit "Qark i ri për këtë Sajt"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Hap skenën e mirëfilltësimit të klienti shërbimesh Onion"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Mbaje mend këtë kyç"> diff --git a/toolkit/torbutton/chrome/locale/sq/torbutton.properties b/toolkit/torbutton/chrome/locale/sq/torbutton.properties new file mode 100644 index 000000000000..69efb3643f62 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = IP e panjohur +torbutton.circuit_display.onion_site = Sajt Onion +torbutton.circuit_display.this_browser = Ky shfletues +torbutton.circuit_display.relay = Rele +torbutton.circuit_display.tor_bridge = Urë +torbutton.circuit_display.unknown_country = Vend i panjohur +torbutton.circuit_display.guard = Guard +torbutton.circuit_display.guard_note = Nyja juaj [Guard] s’mund të ndryshohet. +torbutton.circuit_display.learn_more = Mësoni më tepër +torbutton.circuit_display.click_to_copy = Klikoni të Kopjohet +torbutton.circuit_display.copied = U kopjua! +torbutton.content_sizer.margin_tooltip = Shfletuesi Tor e shton këtë mënjanë për ta bërë më pak të dallueshme gjerësinë dhe lartësinë e dritares tuaj, duke zvogëluar kështu aftësinë e njerëzve t’ju gjurmojnë në internet. +extensions.torbutton@torproject.org.description = Torbutton-i ofron një buton për formësim të rregullimeve për Tor-in dhe për të spastruar shpejt dhe kollaj të dhëna shfletimi privat. +torbutton.popup.external.title = Të shkarkohet një lloj kartele e jashtme? +torbutton.popup.external.app = Shfletuesi Tor s’mundet ta shfaqë këtë kartelë. Do t’ju duhet ta hapni me një tjetër aplikacion.\n\n +torbutton.popup.external.note = Disa lloje kartelash mund t’i bëjnë aplikacionet të lidhen me internetin pa përdorur Tor-in.\n +torbutton.popup.external.suggest = Për të qenë të sigurt, kartelat e shkarkuara duhet t’i hapni vetëm kur të jeni të shkëputur nga interneti, ose përdorni një Tor Live CD, bie fjala, Tails.\n +torbutton.popup.launch = Shkarkoje kartelën +torbutton.popup.cancel = Anuloje +torbutton.popup.dontask = Tani e tutje kartelat shkarkoji automatikisht +torbutton.popup.no_newnym = Torbutton-i s’mund t’ju japë një identitet të ri në mënyrë të parrezik. S’ka hyrje në Tor Control Port.\n\nA xhironi Paketën Shfletuesi Tor? +torbutton.security_settings.menu.title = Rregullime Sigurie +torbutton.title.prompt_torbrowser = Informacion i Rëndësishëm mbi Torbutton-in +torbutton.popup.prompt_torbrowser = Tanimë Torbutton-i funksionon ndryshe: s’mundeni më ta mbyllni.\n\nE bëmë këtë ndryshim sepse s’është e parrezik të përdoret Torbutton-i me një shfletues që përdoret edhe për shfletim pa Tor. Kishte shumë të meta që s’mundëm t’i ndreqnim me ndonjë mënyrë tjetër.\n\nNëse doni të vijoni ta përdorni Firefox-in normalisht, duhet ta çinstaloni Torbutton-in dhe të shkarkoni Tor Browser Bundle. Vetitë e privatësisë së Shfletuesit Tor janë gjithashtu sipërane [...] +torbutton.popup.short_torbrowser = Informacion i Rëndësishëm për Torbutton-in!\n\nTorbutton-i tanimë është gjithmonë i aktivizuar.\n\nPër më tepër të dhëna, klikoni mbi Torbutton-in. + +torbutton.popup.confirm_plugins = Shtojca të tilla si Flash mund të dëmtojnë privatësinë dhe anonimatin tuaj.\n\nAto munden gjithashtu ta anashkalojnë Tor-i, për të zbuluar vendndodhjen tuaj të tanishme dhe adresën IP.\n\nA jeni i sigurt se doni të aktivizohen shtojcat?\n\n +torbutton.popup.never_ask_again = Mos më pyetni më +torbutton.popup.confirm_newnym = Shfletuesi Tor do të mbyllë krejt dritaret dhe skedat. Krejt sesionet e sajteve do të humbasin .\n\nTë riniset Shfletuesi To tani, që të kthehet identiteti juaj te parazgjedhjet?\n\n + +torbutton.maximize_warning = Maksimizimi i Shfletuesit Tor mund t’u lejojë sajteve të përcaktojnë madhësinë e monitorit tuaj, çka mund të përdoret për t’ju gjurmuar. Rekomandojmë ta lini dritaren e Shfletuesit Tor në madhësinë e vet origjinale të parazgjedhur. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Ky sajt (%S) po rreket të përftojë të dhëna figurash kanavacë HTML5, të cilat mund të përdoren për të identifikuar më mënyrë unike kompjuterin tuaj.\n\nA duhet ta lejojë Shfletuesi Tor këtë sajt të përftojë të dhëna figurash kanavacë HTML5? +canvas.notNow=Jo Tani +canvas.notNowAccessKey=J +canvas.allow=Lejoje në të ardhmen +canvas.allowAccessKey=L +canvas.never=Kurrë për këtë sajt (e rekomanduar) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Problem me Profilin %S +profileReadOnly=S’mund të xhironi %S prej një sistemi kartelash vetëm-lexim. Ju lutemi, kopjojeni %S në një vendndodhje tjetër, para se të provoni ta përdorni. +profileReadOnlyMac=S’mund të xhironi %S prej një sistemi kartelash vetëm-lexim. Ju lutemi, kopjojeni %S te dosja juaj Desktop ose ajo Aplikacione, para se të provoni ta përdorni. +profileAccessDenied=%S s’ka leje të hyjë te profili. Ju lutemi, përshtatni lejet tuaja mbi sistemin e kartelave dhe riprovoni. +profileMigrationFailed=Migrimi i profilit tuaj ekzistues %S dështoi.\nDo të përdoren rregullime të reja. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Po shkarkohet përditësim i %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Lidhje e Fshehtëzuar (Shërbim Onion, %1$S, kyçe %2$S bit, %3$S) +pageInfo_OnionEncryption=Lidhje e Fshehtëzuar (Shërbim Onion) +pageInfo_OnionName=Emër Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Mësoni më tepër +onionServices.errorPage.browser=Shfletues +onionServices.errorPage.network=Rrjet +onionServices.errorPage.onionSite=Sajt onion +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.descNotFound.header=S’u Gjet Sajt Onion +onionServices.descNotFound=Shkaku më i mundshëm është që sajti onion të jetë jashtë linje. Lidhuni me përgjegjësin e sajtit onion. +onionServices.descNotFound.longDescription=Hollësi: %S — Përshkruesi i kërkuar për shërbimin onion s’gjendet dot te hashring-u dhe kështu shërbimi s’kapet dot nga klienti. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.descInvalid.header=S’kapet Dot Sajt Onion +onionServices.descInvalid=Sajti onion s’kapet dot, për shkak të një gabimi të brendshëm. +onionServices.descInvalid.longDescription=Hollësi: %S — Përshkruesi i kërkuar për shërbimin onion s’përtypet dot ose vlerësimi i nënshkrimit dështoi. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.introFailed.header=Sajti Onion u Shkëput +onionServices.introFailed=Shkaku më i mundshëm është që sajti onion të jetë jashtë linje. Lidhuni me përgjegjësin e sajtit onion. +onionServices.introFailed.longDescription=Hollësi: %S — Prezantimi dështoi, që do të thotë se përshkruesi u gjet, por shërbimi s’është i lidhur më te pika e prezantimit. Ka gjasa që shërbimi të ketë ndryshuar përshkrues ose nuk po xhiron. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.rendezvousFailed.header=S’arrihet të lidhet me Sajtin Onion +onionServices.rendezvousFailed=Sajti onion është i zënë, ose rrjeti Tor është i mbingarkuar. Riprovoni më vonë. +onionServices.rendezvousFailed.longDescription=Hollësi: %S — Klienti s’arriti të kryejë rendezvous me shërbimin, që do të thotë se klienti s’qe në gjendje të finalizojë lidhjen. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Lypset Autorizim +onionServices.clientAuthMissing.header=Sajti Onion Kërkon Doemos Mirëfilltësim +onionServices.clientAuthMissing=Hyrja te onionsite lyp një kyç, por s’është dhënë i tillë. +onionServices.clientAuthMissing.longDescription=Hollësi: %S — Klienti shkarkoi përshkruesin e domosdoshëm të shërbimit onion, por s’qe në gjendje të shfshehtëzonte lëndën e tij, ngaqë mungojnë të dhëna autorizimi klienti. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autorizimi Dështoi +onionServices.clientAuthIncorrect.header=Mirëfilltësimi Me Sajtin Onion Dështoi +onionServices.clientAuthIncorrect=Kyçi i dhënë është i pasaktë ose është shfuqizuar. Lidhuni me përgjegjësin e sajtit onion. +onionServices.clientAuthIncorrect.longDescription=Hollësi: %S — Klienti qe në gjendje të shkarkonte përshkruesin e domosdoshëm të shërbimit onion, por s’qe në gjendje të shfshehtëzonte lëndën e tij duke përdorur të dhëna të furnizuara për autorizim klienti. Kjo do të thotë se hyrja është shfuqizuar. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.badAddress.header=Adresë Sajti Onion e Pavlefshme +onionServices.badAddress=Adresa e dhënë e sajtit onion është e pavlefshme. Ju lutemi, kontrolloni nëse e keni dhënë saktë. +onionServices.badAddress.longDescription=Hollësi: %S — Adresa .onion e dhënë është e pavlefshme. Ky gabim vjen për shkak të një prej arsyeve vijuese: checksum-i i adresës nuk përputhet, kyçi publik ed25519 është i pavlefshëm, ose kodimi është i pavlefshëm. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem Në Ngarkimin e Sajtit Onion +onionServices.introTimedOut.header=Krijimit të Qarkut të Sajtit Onion i Mbaroi Koha +onionServices.introTimedOut=S’u arrit të lidhej te sajt onion, mundet për shkak lidhjeje të dobët me rrjetin. +onionServices.introTimedOut.longDescription=Hollësi: %S — Lidhjes për te shërbimi onion i kërkuar i mbaroi koha, teksa provohej të ngrihej një qark rendezvous. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S po kërkon doemos të bëni mirëfilltësim. +onionServices.authPrompt.keyPlaceholder=Jepni kyçin tuaj privat për këtë shërbim onion +onionServices.authPrompt.done=U krye +onionServices.authPrompt.doneAccessKey=k +onionServices.authPrompt.invalidKey=Ju lutemi, jepni një kyç të vlefshëm (52 shenja base32 ose 44 base64 shenja) +onionServices.authPrompt.failedToSetKey=S’arrihet të formësohet Tor-i me kyçin tuaj +onionServices.authPreferences.header=Mirëfilltësim Shërbimesh Onion +onionServices.authPreferences.overview=Disa shërbime onion lypin që të identifikoni veten me një kyç (një lloj fjalëkalimi), përpara se të hyni në ta. +onionServices.authPreferences.savedKeys=Kyçe të Ruajtur… +onionServices.authPreferences.dialogTitle=Kyçe Shërbimesh Onion +onionServices.authPreferences.dialogIntro=Në kompjuterin tuaj janë depozituar kyçe për sajtet onion vijues +onionServices.authPreferences.onionSite=Sajt onion +onionServices.authPreferences.onionKey=Kyç +onionServices.authPreferences.remove=Hiqe +onionServices.authPreferences.removeAll=Hiqi Krejt +onionServices.authPreferences.failedToGetKeys=S’arrihet të merren kyçe prej Tor-i +onionServices.authPreferences.failedToRemoveKey=S’arrihet të hiqet kyçi +onionServices.v2Deprecated.pageTitle=Sinjalizim Nxjerrjeje Nga Përdorimi Sajti V2 Onion +onionServices.v2Deprecated.header=Sajtet në version 2 Onion do të nxirren nga përdorimi së shpejti +onionServices.v2Deprecated=Ky sajt onion së shpejti s’do të mund të hapet më. Ju lutemi, lidhuni me përgjegjësin e sajtit dhe nxiteni ta përmirësojë. +onionServices.v2Deprecated.longDescription=Duke filluar nga korriku 2021, Tor-i po i jep fund mbulimit prej tij të shërbimeve version 2, dhe ky sajt onion s’do të jetë më i passhëm në këtë adresë. Nëse jeni një përgjegjës sajti, përmirësojeni së shpejti me një shërbim onion version 3. +onionServices.v2Deprecated.tryAgain=E mora vesh +onionServices.v2Deprecated.tooltip=Ky sajt onion së shpejti s’do të jetë më i passhëm + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Jepu Përherë Përparësi Onions +onionLocation.alwaysPrioritizeAccessKey=J +onionLocation.notNow=Jo Tani +onionLocation.notNowAccessKey=o +onionLocation.description=Ka një version më privat dhe më të sigurt të këtij sajti, i passhëm në rrjetin Tor përmes shërbimesh onion. Shërbimet onion i ndihmojnë të zotët e sajteve dhe vizitorët e tyre të mundin survejimin dhe censurën. +onionLocation.tryThis=Provoni Shërbime Onion +onionLocation.onionAvailable=ka .onion +onionLocation.learnMore=Mësoni më tepër… +onionLocation.always=Përherë +onionLocation.askEverytime=Pyet çdo herë +onionLocation.prioritizeOnionsDescription=Jepu përparësi sajteve .onion, kur njihen. +onionLocation.onionServicesTitle=Shërbime Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=U kopjuar një adresë kriptomonedhash (%S) prej një sajti jo të sigurt. Mund të jetë ndryshuar. +cryptoSafetyPrompt.whatCanHeading=Ç’mund të bëni për të? +cryptoSafetyPrompt.whatCanBody=Mund të provoni të rilidheni me një qark të ri, që të vendosni një lidhje të sigurt, ose të pranoni rrezikun dhe të hidhni tej këtë sinjalizim. +cryptoSafetyPrompt.learnMore=Mësoni më tepër +cryptoSafetyPrompt.primaryAction=Ringarko Skedën me një Qark të Ri +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Hidhe Tej Sinjalizimin +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Vazhdoni me Kujdes +rulesets.warningDescription=Shtimi ose ndryshimi i grupeve të rregullave mund të sjellë marrjen peng të shfletuesit tuaj nga agresorë. Ecni më tej vetëm nëse e dini se ç’po bëni. +rulesets.warningEnable=Sinjalizomë, kur përpiqem të prek këto parapëlqime +rulesets.warningButton=Pranoni Rrezikun dhe Vazhdoni +# Ruleset list +rulesets.rulesets=Grupe rregullash +rulesets.noRulesets=S’u gjetën grupe rregullash +rulesets.noRulesetsDescr=Kur ruani një grup rregullash në Shfletuesin Tor, do të shfaqet këtu. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Përditësuar së fundi më %S +rulesets.neverUpdated=Pa u përditësuar ndonjëherë, ose përditësimi i fundit dështoi +rulesets.enabled=I aktivizuar +rulesets.disabled=I çaktivizuar +# Ruleset details/edit ruleset +rulesets.edit=Përpunojeni +rulesets.name=Emër +rulesets.jwk=JWK +rulesets.pathPrefix=Parashtesë Shtegu +rulesets.scope=Fushëveprim +rulesets.enable=Aktivizoje këtë grup rregullash +rulesets.checkUpdates=Kontrollo për Përditësime +rulesets.jwkPlaceholder=Kyçi i përdorur për të nënshkruar këtë grup rregullash, në formatin (Kyç Web JSON) +rulesets.jwkInvalid=S’u përtyp dot JWK, ose s’është kyç i pavlefshëm +rulesets.pathPrefixPlaceholder=Parashtesë URL-je që përmban kartelat e nevojshme nga grupi i rregullave +rulesets.pathPrefixInvalid=Parashtesa e shtegut s’është URL HTTP(S) e vlefshme +rulesets.scopePlaceholder=Shprehje e rregullt për fushëveprimin e rregullave +rulesets.scopeInvalid=Fushëveprimi s’u përtyp dot si një shprehje e rregullt +rulesets.save=Ruaje +rulesets.cancel=Anuloje diff --git a/toolkit/torbutton/chrome/locale/sq/torlauncher.properties b/toolkit/torbutton/chrome/locale/sq/torlauncher.properties new file mode 100644 index 000000000000..344a6c083089 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sq/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Nisës Tor-i + +torlauncher.tor_exited_during_startup=U dol nga Tor-i gjatë nisjes. Kjo mund të ketë ardhur nga një gabim në kartelën tuaj torrc, një e metë në Tor ose në një tjetër program në sistemin tuaj, ose nga hardware me defekt. Pa ndrequr problemin në fjalë dhe rinisur Tor-in, Shfletuesi Tor s’do të niset. +torlauncher.tor_exited=Tor-i reshti së funksionuari papritmas. Kjo mund të jetë për shkak të një të mete të vetë Tor-it, të një tjetër programi në sistemin tuaj, ose defekti në hardware. Derisa ta rinisni Tor-in, Shfletuesi Tor s’do të jetë në gjendje të hapë ndonjë sajt. Nëse problemi vijon, ju lutemi, dërgojini ekipit të asistencës një kopje të Regjistrit të Tor-it tuaj. +torlauncher.tor_exited2=Rinisja e Tor-it s’do t’i mbyllë skedat e shfletuesit tuaj. +torlauncher.tor_controlconn_failed=S’u lidh dot me portë kontrolli Tor. +torlauncher.tor_failed_to_start=Tor-i s’arriti të niset. +torlauncher.tor_control_failed=S’u arri të merrej në kontroll Tor-i. +torlauncher.tor_bootstrap_failed=Tor-i s’arriti të vendosë lidhje me një rrjet Tor. +torlauncher.tor_bootstrap_failed_details=%1$S dështoi (%2$S). + +torlauncher.unable_to_start_tor=S’arrihet të niset Tor-i.\n\n%S +torlauncher.tor_missing=Mungon kartela e ekzekutueshme Tor +torlauncher.torrc_missing=Mungon kartela torrc dhe s’mund të krijohet. +torlauncher.datadir_missing=Drejtoria e të dhënave Tor s’ekziston dhe s’mund të krijohet. +torlauncher.onionauthdir_missing=Drejtoria e mirëfilltësimeve Onion e Tor-it nuk ekziston ose s’u krijua dot. +torlauncher.password_hash_missing=S’u arrit të merrej fjalëkalim me hash. + +torlauncher.failed_to_get_settings=S’arrihet të merren rregullime për Tor-in.\n\n%S +torlauncher.failed_to_save_settings=S’arrihet të ruhen rregullime për Tor-in.\n\n%S +torlauncher.ensure_tor_is_running=Ju lutemi, sigurohuni që Tor-i po xhiron. + +torlauncher.error_proxy_addr_missing=Për ta formësuar Tor-in të përdorë një ndërmjetës për hyrje në Internet, duhet të përcaktoni një adresë IP ose emërstrehë, si edhe një numër porte. +torlauncher.error_proxy_type_missing=Duhet të përzgjidhni llojin e ndërmjetësit. +torlauncher.error_bridges_missing=Duhet të specifikoni një ose më shumë ura. +torlauncher.error_default_bridges_type_missing=Duhet të përzgjidhni një lloj transporti për urat e furnizuara. +torlauncher.error_bridgedb_bridges_missing=Ju lutemi, kërkoni një urë. +torlauncher.error_bridge_bad_default_type=S’ka gati ura të furnizuara, që kanë transport të llojit %S. Ju lutemi, përimtoni rregullimet tuaja. + +torlauncher.bridge_suffix.meek-amazon=(funksionon në Kinë) +torlauncher.bridge_suffix.meek-azure=(funksionon në Kinë) + +torlauncher.request_a_bridge=Kërkoni një Urë… +torlauncher.request_a_new_bridge=Kërkoni një Urë të Re… +torlauncher.contacting_bridgedb=Po kontaktohet BridgeDB. Ju lutemi, pritni. +torlauncher.captcha_prompt=Që të kërkoni një urë, zgjidhni CAPTCHA-n. +torlauncher.bad_captcha_solution=Zgjidhja s’është e saktë. Ju lutemi, riprovoni. +torlauncher.unable_to_get_bridge=S’arrihet të merret një urë nga BridgeDB.\n\n%S +torlauncher.no_meek=Ky shfletues s’është formësuar për meek, i cili është i nevojshëm për të marrë ura. +torlauncher.no_bridges_available=S’ka ura të passhme tani. Na ndjeni. + +torlauncher.connect=Lidhu +torlauncher.restart_tor=Riniseni Tor-in +torlauncher.quit=Mbylle +torlauncher.quit_win=Dil +torlauncher.done=U bë + +torlauncher.forAssistance=Për asistencë, lidhuni me %S +torlauncher.forAssistance2=Për asistencë, vizitoni %S + +torlauncher.copiedNLogMessages=Kopjimi u krye. Mesazhet e regjistrit të Tor-it për %S janë gati për t’u ngjitur në një përpunues tekstesh, ose në një mesazh email. + +torlauncher.bootstrapStatus.starting=Po niset +torlauncher.bootstrapStatus.conn_pt=Po lidhet me urën +torlauncher.bootstrapStatus.conn_done_pt=I lidhur me urën +torlauncher.bootstrapStatus.conn_proxy=Po lidhet me ndërmjetësin +torlauncher.bootstrapStatus.conn_done_proxy=U lidh te ndërmjetësi +torlauncher.bootstrapStatus.conn=Po bëhet lidhja me një rele Tor +torlauncher.bootstrapStatus.conn_done=U bë lidhja me një rele Tor +torlauncher.bootstrapStatus.handshake=Po negociohet me një rele Tor +torlauncher.bootstrapStatus.handshake_done=U përfundua së negociuari me një rele Tor +torlauncher.bootstrapStatus.onehop_create=Po vendoset një lidhje e fshehtëzuar me drejtorinë +torlauncher.bootstrapStatus.requesting_status=Po merret gjendje rrjeti +torlauncher.bootstrapStatus.loading_status=Po ngarkohet gjendje rrjeti +torlauncher.bootstrapStatus.loading_keys=Po ngarkohen dëshmi autoriteti +torlauncher.bootstrapStatus.requesting_descriptors=Po kërkohen të dhëna releje +torlauncher.bootstrapStatus.loading_descriptors=Po ngarkohen të dhëna releje +torlauncher.bootstrapStatus.enough_dirinfo=U përfundua ngarkimi i informacionit mbi relenë +torlauncher.bootstrapStatus.ap_conn_pt=Po montohen qarqe: Po bëhet lidhja me urën +torlauncher.bootstrapStatus.ap_conn_done_pt=Po montohen qarqe: U bë lidhja me urën +torlauncher.bootstrapStatus.ap_conn_proxy=Po montohen qarqe: Po bëhet lidhja me ndërmjetësin +torlauncher.bootstrapStatus.ap_conn_done_proxy=Po montohen qarqe: U bë lidhja me ndërmjetësin +torlauncher.bootstrapStatus.ap_conn=Po montohen qarqe: Po bëhet lidhja me një rele Tor +torlauncher.bootstrapStatus.ap_conn_done=Po montohen qarqe: U bë lidhja me një rele Tor +torlauncher.bootstrapStatus.ap_handshake=Po montohen qarqe: Po negociohet me një rele Tor +torlauncher.bootstrapStatus.ap_handshake_done=Po montohen qarqe: U përfundua së negociuari me një rele Tor +torlauncher.bootstrapStatus.circuit_create=Po montohen qarqe: Po vendoset një qark Tor +torlauncher.bootstrapStatus.done=I lidhur me rrjetin Tor! + +torlauncher.bootstrapWarning.done=kryer +torlauncher.bootstrapWarning.connectrefused=lidhja u refuzua +torlauncher.bootstrapWarning.misc=të ndryshme +torlauncher.bootstrapWarning.resourcelimit=burime të pamjaftueshme +torlauncher.bootstrapWarning.identity=mospërputhje identitetesh +torlauncher.bootstrapWarning.timeout=mbarim kohe për lidhjen +torlauncher.bootstrapWarning.noroute=s’ka rrugë për te streha +torlauncher.bootstrapWarning.ioerror=gabim leximi/shkrimi +torlauncher.bootstrapWarning.pt_missing=mungon transport shtojcë + +torlauncher.nsresult.NS_ERROR_NET_RESET=Humbi lidhja me shërbyesin. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=S’u bë dot lidhja me shërbyesin. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=S’u lidh dot me ndërmjetësin. + +torlauncher.copiedNLogMessagesShort=U kopjuan %S Regjistra diff --git a/toolkit/torbutton/chrome/locale/sv-SE/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/sv-SE/aboutDialog.dtd new file mode 100644 index 000000000000..125dc5b7f893 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; utvecklas av"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", en idéell verksamhet som arbetar för att försvara din frihet och integritet på nätet."> + +<!ENTITY help.start "Vill du hjälpa till?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Donera"> +<!ENTITY help.or "eller"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "involvera dig"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Frågor?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Hjälp Tor-nätverket växa!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Licensinformation"> +<!ENTITY tor.TrademarkStatement "'Tor' och 'Onion-logotypen' är registrerade varumärken av Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/sv-SE/aboutTBUpdate.dtd new file mode 100644 index 000000000000..113b148f97d3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser-ändringslogg"> +<!ENTITY aboutTBUpdate.updated "Tor Browser har uppdaterats."> +<!ENTITY aboutTBUpdate.linkPrefix "För den senaste informationen om den här versionen, "> +<!ENTITY aboutTBUpdate.linkLabel "besök vår webbplats"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Utgivningsdatum"> +<!ENTITY aboutTBUpdate.releaseNotes "Versionsinformation"> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd b/toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd new file mode 100644 index 000000000000..e115a4918c6b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Om Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Visa ändringsloggen"> + +<!ENTITY aboutTor.ready.label "Utforska. Privat."> +<!ENTITY aboutTor.ready2.label "Du är redo för världens mest privata surfupplevelse."> +<!ENTITY aboutTor.failure.label "Någonting gick fel!"> +<!ENTITY aboutTor.failure2.label "Tor fungerar inte i den här webbläsaren."> + +<!ENTITY aboutTor.search.label "Sök med DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Frågor?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Titta i vår bruksanvisningen för Tor Browser »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Bruksanvisning för Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project är en amerikansk 501(c)(3) ideell organisation som främjar mänskliga rättigheter och friheter genom att skapa och distribuera anonymitets- och integritetsteknik med fri och öppen källkod, stöda deras obegränsade tillgänglighet och användning och främja deras vetenskapliga och populära förståelse."> +<!ENTITY aboutTor.getInvolved.label "Engagera dig »"> + +<!ENTITY aboutTor.newsletter.tagline "Få de senaste nyheterna från Tor direkt i din inkorg."> +<!ENTITY aboutTor.newsletter.link_text "Anmäl dig till Tor-nyheter."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor är gratis att använda på grund av donationer från personer som du."> +<!ENTITY aboutTor.donationBanner.buttonA "Donera nu"> + +<!ENTITY aboutTor.alpha.ready.label "Testa. Grundligt."> +<!ENTITY aboutTor.alpha.ready2.label "Du är redo att testa världens mest privata surfupplevelse."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha är en instabil version av Tor Browser som du kan använda för att förhandsgranska nya funktioner, testa deras prestanda och ge återkoppling innan lanseringen."> +<!ENTITY aboutTor.alpha.bannerLink "Rapportera ett fel på Tor-forumet"> + +<!ENTITY aboutTor.nightly.ready.label "Testa. Grundligt."> +<!ENTITY aboutTor.nightly.ready2.label "Du är redo att testa världens mest privata surfupplevelse."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly är en instabil version av Tor Browser som du kan använda för att förhandsgranska nya funktioner, testa deras prestanda och ge återkoppling innan den släpps."> +<!ENTITY aboutTor.nightly.bannerLink "Rapportera ett fel på Tor-forumet"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "DRIVS AV INTEGRITET:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "MOTSTÅND"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "FÖRÄNDRING"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FRIHET"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "DONERA NU"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Din donation kommer matchas av Friends of Tor, upp till $100 000."> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/brand.dtd b/toolkit/torbutton/chrome/locale/sv-SE/brand.dtd new file mode 100644 index 000000000000..2a7e9afc397a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "'Tor' och 'Onion-logotypen' är registrerade varumärken av Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Klicka här för att läsa in installerade systemtillägg."> +<!ENTITY plugins.installed.enable "Aktivera tillägg"> +<!ENTITY plugins.installed.disable "Inaktivera tillägg"> +<!ENTITY plugins.installed.disable.tip "Klicka för att förhindra inläsningen av systemtillägg."> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/brand.properties b/toolkit/torbutton/chrome/locale/sv-SE/brand.properties new file mode 100644 index 000000000000..5f81dd19cbde --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start, en snabb webbplats med inbyggd sökfunktion +homePageImport=Importera din startsida från %S + +homePageMigrationPageTitle=Val av startsida +homePageMigrationDescription=Välj den startsida du vill använda: + +syncBrandShortName=Synkronisera diff --git a/toolkit/torbutton/chrome/locale/sv-SE/branding/brand.ftl b/toolkit/torbutton/chrome/locale/sv-SE/branding/brand.ftl new file mode 100644 index 000000000000..491108ccadc8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Project +trademarkInfo = 'Tor' och 'Onion-logotypen' är registrerade varumärken av Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/sv-SE/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/sv-SE/browserOnboarding.properties new file mode 100644 index 000000000000..31f027fe26c5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Välkommen +onboarding.tour-tor-welcome.title=Du är redo. +onboarding.tour-tor-welcome.description=Tor Browser erbjuder högsta standard för integritet och säkerhet när du surfar på webben. Du är nu skyddad mot spårning, övervakning och censur. Denna snabba introduktion kommer att visa dig hur. +onboarding.tour-tor-welcome.next-button=Gå till Integritet + +onboarding.tour-tor-privacy=Integritet +onboarding.tour-tor-privacy.title=Avvisa bevakare och snokare. +onboarding.tour-tor-privacy.description=Tor Browser isolerar kakor och tar bort din webbläsarhistorik efter din session. Dessa ändringar säkerställa din integritet och säkerhet skyddas i webbläsaren. Klicka på "Tor-nätverk" för att lära dig hur vi skyddar dig på nätverksnivå. +onboarding.tour-tor-privacy.button=Gå till Tor-nätverk + +onboarding.tour-tor-network=Tor-nätverk +onboarding.tour-tor-network.title=Res ett decentraliserat nätverk. +onboarding.tour-tor-network.description=Tor Browser ansluter dig till Tor-nätverket som drivs av tusentals volontärer runt om i världen. Till skillnad från en VPN finns det ingen enskild punkt för misslyckande eller centraliserad enhet som du behöver lita på för att njuta av internet privat. +onboarding.tour-tor-network.description-para2=NYTT: Tor-nätverksinställningar, inklusive möjligheten att begära broar där Tor är blockerad, kan nu hittas i Inställningar. +onboarding.tour-tor-network.action-button=Justera Tor-nätverksinställningarna +onboarding.tour-tor-network.button=Gå till Kretsvisning + +onboarding.tour-tor-circuit-display=Kretsvisning +onboarding.tour-tor-circuit-display.title=Se din väg. +onboarding.tour-tor-circuit-display.description=För varje domän du besöker förmedlas din trafik och krypteras i en krets över tre tor-reläer runt om i världen. Ingen webbplats vet var du ansluter från. Du kan begära en ny krets genom att klicka på "Ny krets för denna webbplats" på vår kretsvisning. +onboarding.tour-tor-circuit-display.button=Se min väg +onboarding.tour-tor-circuit-display.next-button=Gå till Säkerhet + +onboarding.tour-tor-security=Säkerhet +onboarding.tour-tor-security.title=Välj din upplevelse. +onboarding.tour-tor-security.description=Vi förser dig också med ytterligare inställningar för att öka säkerheten i din webbläsare. Våra säkerhetsinställningar låter dig blockera element som kan användas för att attackera din dator. Klicka nedan för att se vad de olika alternativen gör. +onboarding.tour-tor-security.description-suffix=Observera: Som standard ingår inte NoScript och HTTPS Everywhere i verktygsfältet, men du kan anpassa verktygsfältet för att lägga till dem. +onboarding.tour-tor-security-level.button=Se din säkerhetsnivå +onboarding.tour-tor-security-level.next-button=Gå till Erfarenhets tips + +onboarding.tour-tor-expect-differences=Erfarenhets tips +onboarding.tour-tor-expect-differences.title=Förvänta dig vissa skillnader. +onboarding.tour-tor-expect-differences.description=Med alla säkerhets- och integritetsfunktioner som Tor tillhandahåller kan din upplevelse när du surfar på internet vara lite annorlunda. Saker kan vara lite långsammare och beroende på din säkerhetsnivå kanske vissa element inte fungerar eller läses in. Du kan också bli ombedd att bevisa att du är en människa och inte en robot. +onboarding.tour-tor-expect-differences.button=Se Vanliga frågor +onboarding.tour-tor-expect-differences.next-button=Gå till Onion-tjänster + +onboarding.tour-tor-onion-services=Onion-tjänster +onboarding.tour-tor-onion-services.title=Var extra skyddad. +onboarding.tour-tor-onion-services.description=Onion-tjänster är webbplatser som slutar med .onion och ger extra skydd till utgivare och besökare, inklusive extra skyddsåtgärder mot censur. Onion-tjänster tillåter vem som helst att tillhandahålla innehåll och tjänster anonymt. Klicka nedan för att besöka onion-webbplatsen för DuckDuckGo. +onboarding.tour-tor-onion-services.button=Besök en onion +onboarding.tour-tor-onion-services.next-button=Klar + +onboarding.overlay-icon-tooltip-updated2=Se vad som är nytt\ni %S +onboarding.tour-tor-update.prefix-new=Ny +onboarding.tour-tor-update.prefix-updated=Uppdaterad + +onboarding.tour-tor-toolbar=Verktygsfält +onboarding.tour-tor-toolbar-update-9.0.title=Adjö onion-knappen. +onboarding.tour-tor-toolbar-update-9.0.description=Vi vill att din upplevelse med Tor ska vara helt integrerad i Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Därför kan du nu, i stället för att använda onion-knappen, se din Tor-krets via [i] i webbadressfältet och begära en ny identitet med hjälp av verktygsraden eller menyn. +onboarding.tour-tor-toolbar-update-9.0.button=Hur man begär en ny identitet +onboarding.tour-tor-toolbar-update-9.0.next-button=Gå till Tor-nätverket + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Nästa +onboarding.tor-circuit-display.done=Klar +onboarding.tor-circuit-display.one-of-three=1 av 3 +onboarding.tor-circuit-display.two-of-three=2 av 3 +onboarding.tor-circuit-display.three-of-three=3 av 3 + +onboarding.tor-circuit-display.intro.title=Hur fungerar kretsar? +onboarding.tor-circuit-display.intro.msg=Kretsar består av slumpmässigt tilldelade reläer, som är datorer runt om i världen konfigurerade för att vidarebefordra Tor-trafik. Kretsar tillåter dig att surfa privat och ansluta till onion-tjänster. + +onboarding.tor-circuit-display.diagram.title=Kretsvisning +onboarding.tor-circuit-display.diagram.msg=Detta diagram visar reläer som utgör kretsen för denna webbplats. För att förhindra länkning av aktivitet över olika platser, varje webbplats får en annan krets. + +onboarding.tor-circuit-display.new-circuit.title=Behöver du en ny krets? +onboarding.tor-circuit-display.new-circuit.msg=Om du inte kan ansluta till webbplatsen du försöker besöka eller den inte läses in ordentligt, kan du använda den här knappen för att läsa om webbplatsen med en ny krets. diff --git a/toolkit/torbutton/chrome/locale/sv-SE/network-settings.dtd b/toolkit/torbutton/chrome/locale/sv-SE/network-settings.dtd new file mode 100644 index 000000000000..445292092b0c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Nätverksinställningar för Tor"> +<!ENTITY torsettings.wizard.title.default "Anslut till Tor"> +<!ENTITY torsettings.wizard.title.configure "Nätverksinställningar för Tor"> +<!ENTITY torsettings.wizard.title.connecting "Etablerar en anslutning"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Språk för Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "Välj ett språk."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Klicka på "Anslut" för att ansluta till Tor."> +<!ENTITY torSettings.configurePrompt "Klicka på "Konfigurera" för att justera nätverksinställningar om du är i ett land som censurerar Tor (som Egypten, Kina eller Turkiet) eller om du ansluter från ett privat nätverk som kräver en proxy."> +<!ENTITY torSettings.configure "Konfigurera"> +<!ENTITY torSettings.connect "Anslut"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Väntar på att Tor ska starta..."> +<!ENTITY torsettings.restartTor "Starta om Tor"> +<!ENTITY torsettings.reconfigTor "Omkonfigurera"> + +<!ENTITY torsettings.discardSettings.prompt "Du har konfigurerat Tor-broar eller så har du angett lokala proxyinställningar.  För att göra en direktanslutning till Tor-nätverket måste de här inställningarna tas bort."> +<!ENTITY torsettings.discardSettings.proceed "Ta bort inställningar och anslut"> + +<!ENTITY torsettings.optional "Valfritt"> + +<!ENTITY torsettings.useProxy.checkbox "Jag använder en proxy för att ansluta till internet"> +<!ENTITY torsettings.useProxy.type "Proxytyp"> +<!ENTITY torsettings.useProxy.type.placeholder "Välj en proxytyp"> +<!ENTITY torsettings.useProxy.address "Adress"> +<!ENTITY torsettings.useProxy.address.placeholder "IP-adress eller värdnamn"> +<!ENTITY torsettings.useProxy.port "Port"> +<!ENTITY torsettings.useProxy.username "Användarnamn"> +<!ENTITY torsettings.useProxy.password "Lösenord"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Denna dator går genom en brandvägg som bara tillåter anslutningar på vissa specifika portar."> +<!ENTITY torsettings.firewall.allowedPorts "Tillåtna portar"> +<!ENTITY torsettings.useBridges.checkbox "Tor är censurerat i mitt land"> +<!ENTITY torsettings.useBridges.default "Välj en inbyggd bro"> +<!ENTITY torsettings.useBridges.default.placeholder "Välj en bro"> +<!ENTITY torsettings.useBridges.bridgeDB "Begär en bro från torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Ange tecknen från bilden"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Få en ny utmaning"> +<!ENTITY torsettings.useBridges.captchaSubmit "Skicka"> +<!ENTITY torsettings.useBridges.custom "Ange en bro jag känner till"> +<!ENTITY torsettings.useBridges.label "Ange broinformationen från en betrodd källa."> +<!ENTITY torsettings.useBridges.placeholder "skriv adress:port (en per rad)"> + +<!ENTITY torsettings.copyLog "Kopiera Tor-logg till urklipp"> + +<!ENTITY torsettings.proxyHelpTitle "Proxyhjälp"> +<!ENTITY torsettings.proxyHelp1 "En lokal proxy kan behövas när du ansluter via ett företags-, skol- eller universitetsnätverk. Om du inte är säker på om en proxy behövs, titta på internetinställningarna i en annan webbläsare eller kontrollera systemets nätverksinställningar."> + +<!ENTITY torsettings.bridgeHelpTitle "Hjälp om relä-broar"> +<!ENTITY torsettings.bridgeHelp1 "Broar är olistade reläer som gör det svårare att blockera anslutningar till Tor-nätverket.   Var typ av bro använder sig av olika metoder för att undvika censur.   Obfs gör att din trafik ser ut som brus och meek gör att din trafik ser ut som att du ansluter till tjänsten istället för Tor."> +<!ENTITY torsettings.bridgeHelp2 "I och med att vissa länder försöker blockera Tor fungerar inte alla broar i alla länder.   Ifall du är osäker på vilka broar som fungerar i ditt land besök torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Vänta medan vi etablerar en anslutning till Tor-nätverket.   Detta kan ta flera minuter."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Anslutning"> +<!ENTITY torPreferences.torSettings "Tor-inställningar"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser dirigerar din trafik över Tor-nätverket, som drivs av tusentals volontärer runt om i världen." > +<!ENTITY torPreferences.learnMore "Läs mer"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Testa"> +<!ENTITY torPreferences.statusInternetOnline "Uppkopplad"> +<!ENTITY torPreferences.statusInternetOffline "Nedkopplad"> +<!ENTITY torPreferences.statusTorLabel "Tor-nätverk:"> +<!ENTITY torPreferences.statusTorConnected "Ansluten"> +<!ENTITY torPreferences.statusTorNotConnected "Inte ansluten"> +<!ENTITY torPreferences.statusTorBlocked "Potentiellt blockerad"> +<!ENTITY torPreferences.learnMore "Läs mer"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Snabbstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Snabbstart ansluter Tor Browser till Tor-nätverket automatiskt när den startas, baserat på dina senast använda anslutningsinställningar."> +<!ENTITY torPreferences.quickstartCheckbox "Anslut alltid automatiskt"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Broar"> +<!ENTITY torPreferences.bridgesDescription "Broar hjälper dig att komma åt Tor-nätverket på platser där Tor är blockerat. Beroende på var du är, kan en bro fungera bättre än en annan."> +<!ENTITY torPreferences.bridgeLocation "Din plats"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Automatiskt"> +<!ENTITY torPreferences.bridgeLocationFrequent "Ofta valda platser"> +<!ENTITY torPreferences.bridgeLocationOther "Andra platser"> +<!ENTITY torPreferences.bridgeChooseForMe "Välj en bro för mig..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "Dina nuvarande broar"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Du kan spara en eller flera broar och Tor väljer vilken som ska användas när du ansluter. Tor kommer automatiskt att byta till att använda en annan bro när det behövs."> +<!ENTITY torPreferences.bridgeId "#1 bro: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Ta bort"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Inaktivera inbyggda broar"> +<!ENTITY torPreferences.bridgeShare "Dela denna bro med QR-koden eller genom att kopiera dess adress:"> +<!ENTITY torPreferences.bridgeCopy "Kopiera broadress"> +<!ENTITY torPreferences.copied "Kopierad!"> +<!ENTITY torPreferences.bridgeShowAll "Visa alla broar"> +<!ENTITY torPreferences.bridgeRemoveAll "Ta bort alla broar"> +<!ENTITY torPreferences.bridgeAdd "Lägg till en ny bro"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Välj från en av Tor Browsers inbyggda broar"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Välj en inbyggd bro..."> +<!ENTITY torPreferences.bridgeRequest "Begär en bro..."> +<!ENTITY torPreferences.bridgeEnterKnown "Ange en broadress som du redan känner till"> +<!ENTITY torPreferences.bridgeAddManually "Lägg till en bro manuellt..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Avancerat"> +<!ENTITY torPreferences.advancedDescription "Konfigurera hur Tor Browser ansluter till internet"> +<!ENTITY torPreferences.advancedButton "Inställningar…"> +<!ENTITY torPreferences.viewTorLogs "Se Tor-loggarna"> +<!ENTITY torPreferences.viewLogs "Visa loggar…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Ta bort alla broar?"> +<!ENTITY torPreferences.removeBridgesWarning "Denna åtgärd kan inte ångras."> +<!ENTITY torPreferences.cancel "Avbryt"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Skanna QR-koden"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Inbyggda broar"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser innehåller några specifika typer av broar som kallas "pluggbara transporter"."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 är en typ av inbyggd bro som får din Tor-trafik att se slumpmässig ut. De är också mindre benägna att blockeras än sina föregångare, obfs3-broar."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake är en inbyggd bro som besegrar censur genom att dirigera din anslutning genom Snowflake-proxyer, som drivs av frivilliga."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure är en inbyggd bro som får det att se ut som att du använder en Microsoft-webbplats istället för att använda Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Begär bro"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Kontaktar BridgeDB. Vänta."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Lös CAPTCHA för att begära en bro."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Lösningen är inte korrekt. Försök igen."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Tillhandahåll bro"> +<!ENTITY torPreferences.provideBridgeHeader "Ange broinformation från en betrodd källa"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Anslutningsinställningar"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Konfigurera hur Tor Browser ansluter till internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Kommaseparerade värden"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor-loggar"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Inte ansluten"> +<!ENTITY torConnect.connectingConcise "Ansluter..."> +<!ENTITY torConnect.tryingAgain "Försöker igen..."> +<!ENTITY torConnect.noInternet "Tor Browser kunde inte nå internet"> +<!ENTITY torConnect.noInternetDescription "Detta kan bero på ett anslutningsproblem snarare än att Tor blockeras. Kontrollera din Internetanslutning, proxy och brandväggsinställningar innan du försöker igen."> +<!ENTITY torConnect.couldNotConnect "Tor Browser kunde inte ansluta till Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "konfigurera din anslutning"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Om Tor är blockerad på din plats kan det hjälpa att pröva en bro. Anslutningshjälp kan välja en åt dig med din plats, eller så kan du #1 manuellt istället."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Prövar en bro..."> +<!ENTITY torConnect.tryingBridgeAgain "Försöker en gång till..."> +<!ENTITY torConnect.errorLocation "Tor Browser kunde inte hitta din plats"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser behöver veta din plats för att kunna välja rätt bro för dig. Om du hellre inte vill dela din plats, #1 manuellt istället."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Är dessa platsinställningar korrekta?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser kunde fortfarande inte ansluta till Tor. Kontrollera att dina platsinställningar är korrekta och försök igen, eller #1 istället."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser kan fortfarande inte ansluta"> +<!ENTITY torConnect.finalErrorDescription "Trots sina bästa ansträngningar kunde anslutningsassistenten inte ansluta till Tor. Försök att felsöka din anslutning och lägga till en bro manuellt istället."> +<!ENTITY torConnect.breadcrumbAssist "Anslutningshjälp"> +<!ENTITY torConnect.breadcrumbLocation "Platsinställningar"> +<!ENTITY torConnect.breadcrumbTryBridge "Pröva en bro"> +<!ENTITY torConnect.automatic "Automatisk"> +<!ENTITY torConnect.selectCountryRegion "Välj land eller region"> +<!ENTITY torConnect.frequentLocations "Ofta valda platser"> +<!ENTITY torConnect.otherLocations "Andra platser"> +<!ENTITY torConnect.restartTorBrowser "Starta om Tor Browser"> +<!ENTITY torConnect.configureConnection "Konfigurera anslutning..."> +<!ENTITY torConnect.viewLog "Visa loggar..."> +<!ENTITY torConnect.tryAgain "Försök igen"> +<!ENTITY torConnect.offline "Internet är onåbart"> +<!ENTITY torConnect.connectMessage "Ändringar av Tor-inställningar träder inte i kraft förrän du ansluter"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser har misslyckats med att upprätta en anslutning till Tor-nätverket"> +<!ENTITY torConnect.yourLocation "Din plats"> +<!ENTITY torConnect.tryBridge "Pröva en bro"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatisk konfiguration misslyckades"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatisk konfiguration misslyckades"> +<!ENTITY torConnect.cannotDetermineCountry "Det går inte att bestämma användarens land"> +<!ENTITY torConnect.noSettingsForCountry "Inga inställningar tillgängliga för din plats"> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/onboarding.properties b/toolkit/torbutton/chrome/locale/sv-SE/onboarding.properties new file mode 100644 index 000000000000..8dcc274be874 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Ny på %S?\nLåt oss börja. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S är helt ny.\nSe vad du kan göra! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Stäng +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Ignorera +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Slutförd diff --git a/toolkit/torbutton/chrome/locale/sv-SE/torbutton.dtd b/toolkit/torbutton/chrome/locale/sv-SE/torbutton.dtd new file mode 100644 index 000000000000..3df4e2175157 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Ny identitet"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Ny identitet"> +<!ENTITY torbutton.context_menu.new_identity_key "N"> +<!ENTITY torbutton.context_menu.new_circuit "Ny Tor-krets för denna webbplats"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Ny Tor-krets för denna webbplats"> +<!ENTITY torbutton.context_menu.new_circuit_key "S"> +<!ENTITY torbutton.context_menu.networksettings "Tor-nätverksinställningar..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Sök efter uppdateringar för Tor Browser..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Skydd mot kakor..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "S"> +<!ENTITY torbutton.button.tooltip "Klicka för att initialisera Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Säkerhetsinställningar i Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "Hantera skydd mot kakor"> +<!ENTITY torbutton.cookiedialog.lockCol "Skyddad"> +<!ENTITY torbutton.cookiedialog.domainCol "Värd"> +<!ENTITY torbutton.cookiedialog.nameCol "Namn"> +<!ENTITY torbutton.cookiedialog.pathCol "Sökväg"> +<!ENTITY torbutton.cookiedialog.protectCookie "Skydda kakan"> +<!ENTITY torbutton.cookiedialog.removeCookie "Ta bort kakan"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Sluta skydda kakan"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Ta bort alla utom skyddade"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Skydda nya kakor"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Skydda inte nya kakor"> +<!ENTITY torbutton.prefs.sec_caption "Säkerhetsnivå"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Säkerhetsreglaget låter dig stänga av vissa webbläsarfunktioner som kan göra din webbläsare mer sårbar mot intrångsförsök."> +<!ENTITY torbutton.prefs.sec_standard_label "Standard"> +<!ENTITY torbutton.prefs.sec_standard_description "Alla funktioner för Tor Browser och webbplatsfunktioner är aktiverade."> +<!ENTITY torbutton.prefs.sec_safer_label "Säkrare"> +<!ENTITY torbutton.prefs.sec_safer_description "Inaktiverar webbplatsfunktioner som ofta är farliga, vilket gör att vissa webbplatser förlorar funktionalitet."> +<!ENTITY torbutton.prefs.sec_safer_list_label "I den säkrare inställningen:"> +<!ENTITY torbutton.prefs.sec_safest_label "Säkrast"> +<!ENTITY torbutton.prefs.sec_safest_description "Tillåt endast webbplatsfunktioner som krävs för statiska webbplatser och grundläggande tjänster. Dessa förändringar påverkar bilder, media och skript."> +<!ENTITY torbutton.prefs.sec_safest_list_label "I den säkraste inställningen:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Läs mer"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript är inaktiverat på webbplatser utan HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript är inaktiverat som standard på alla webbplatser."> +<!ENTITY torbutton.prefs.sec_limit_typography "Vissa teckensnitt och matematiska symboler är inaktiverade."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Vissa teckensnitt, ikoner, matematiska symboler och bilder är inaktiverade."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Ljud och video (HTML5-media) och WebGL är klicka-för-att-spela."> +<!ENTITY torbutton.prefs.sec_custom_warning "Anpassad"> +<!ENTITY torbutton.prefs.sec_overview "Inaktivera vissa webbfunktioner som kan användas för att attackera din säkerhet och anonymitet."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Säkerhetsnivå : Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Säkerhetsnivå : Säkrare"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Säkerhetsnivå: Säkrast"> +<!ENTITY torbutton.prefs.sec_custom_summary "Dina anpassade webbläsarinställningar har resulterat i ovanliga säkerhetsinställningar. Av säkerhets- och integritetsskäl rekommenderar vi att du använder en av de fördefinierade säkerhetsnivåerna."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Återställ standardvärden"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Avancerade säkerhetsinställningar…"> +<!ENTITY torbutton.prefs.sec_change "Ändra…"> +<!ENTITY torbutton.circuit_display.title "Tor-krets"> +<!ENTITY torbutton.circuit_display.new_circuit "Ny krets för denna webbplats"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Öppna onion-tjänstklientens autentiseringsangivning"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Kom ihåg den här nyckeln"> diff --git a/toolkit/torbutton/chrome/locale/sv-SE/torbutton.properties b/toolkit/torbutton/chrome/locale/sv-SE/torbutton.properties new file mode 100644 index 000000000000..5f82b8e4049e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = Okänd IP-adress. +torbutton.circuit_display.onion_site = Onion-webbplats +torbutton.circuit_display.this_browser = Denna webbläsare +torbutton.circuit_display.relay = Relä +torbutton.circuit_display.tor_bridge = Bro +torbutton.circuit_display.unknown_country = Okänt land +torbutton.circuit_display.guard = Vakt +torbutton.circuit_display.guard_note = Din [Guard]-nod kanske inte ändras. +torbutton.circuit_display.learn_more = Läs mer +torbutton.circuit_display.click_to_copy = Klicka för att kopiera +torbutton.circuit_display.copied = Kopierat! +torbutton.content_sizer.margin_tooltip = Tor Browser lägger till denna marginal för att göra bredden och höjden på ditt fönster mindre tydlig. Därmed minskas möjligheten att spåra dig. +extensions.torbutton@torproject.org.description = Torbutton tillhandahåller en knapp för att konfigurera Tor-inställningar och snabbt och enkelt rensa privata surfdata. +torbutton.popup.external.title = Hämta en extern filtyp? +torbutton.popup.external.app = Tor Browser kan inte visa filen. Du behöver öppna den i ett annat program.\n\n +torbutton.popup.external.note = Vissa typer av filer kan få program att ansluta till internet utan att använda Tor.\n\n +torbutton.popup.external.suggest = Det är säkrast att öppna filer du har hämtat hem bara när du är offline, eller så kan du använda en Tor Live CD som till exempel Tails.\n +torbutton.popup.launch = Hämta fil +torbutton.popup.cancel = Avbryt +torbutton.popup.dontask = Hämta filer automatiskt i fortsättningen +torbutton.popup.no_newnym = Torbutton kan inte säkert ge dig en ny identitet. Det har inte tillgång till Tor Control Port.\n\nHar du startat du Tor Browser Bundle? +torbutton.security_settings.menu.title = Säkerhetsinställningar +torbutton.title.prompt_torbrowser = Viktig information om Torbutton +torbutton.popup.prompt_torbrowser = Torbutton fungerar annorlunda nu: du kan inte stänga av den längre.\n\nVi gjorde denna förändring eftersom det inte är säkert att använda Torbutton i en webbläsare som också används för surfning utan Tor. Det fanns för många fel som vi inte kunde åtgärda på något annat sätt.\n\nOm du vill fortsätta använda Firefox normalt bör du avinstallera Torbotton och hämta Tor Browser Bundle. Tor Browser skyddar din integritet bättre än vanliga Firefox, även när F [...] +torbutton.popup.short_torbrowser = Viktig information om Torbutton!\n\nTorbutton är nu alltid aktiverad.\n\nKlicka på Torbutton för mer information. + +torbutton.popup.confirm_plugins = Tillägg som Flash kan skada din integritet och anonymitet.\n\nDe kan också kringgå Tor för att avslöja din nuvarande plats och IP-adress.\n\nÄr du säker på att du vill aktivera tillägg?\n\n +torbutton.popup.never_ask_again = Fråga mig aldrig igen +torbutton.popup.confirm_newnym = Tor Browser kommer att stänga alla fönster och flikar. Alla webbplatssessioner kommer att gå förlorade.\n\nStarta om Tor Browser nu för att återställa din identitet?\n\n + +torbutton.maximize_warning = Maximering av Tor Browser kan ge webbplatser möjlighet att upptäcka din skärmstorlek, vilket kan användas för att spåra dig. Vi rekommenderar att du lämnar Tor Browser-fönstret i dess standardstorlek. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Denna webbplats (%S) försökte extrahera HTML5-kanvasbilddata, som skulle kunna användas för att identifiera just din dator.\n\nSka Tor Browser tillåta denna webbplats att extrahera HTML5-kanvasbilddata? +canvas.notNow=Inte nu +canvas.notNowAccessKey=N +canvas.allow=Tillåt i framtiden +canvas.allowAccessKey=A +canvas.never=Aldrig för denna sida (rekommenderas) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Profilproblem +profileReadOnly=Du kan inte köra %S från ett skrivskyddat filsystem. Kopiera %S till en annan plats innan du försöker använda den. +profileReadOnlyMac=Du kan inte köra %S från ett skrivskyddat filsystem. Kopiera först %S till ditt skrivbord eller Applications-mappen innan du försöker använda den. +profileAccessDenied=%S har inte behörighet att komma åt profilen. Justera dina filsystembehörigheter och försök igen. +profileMigrationFailed=Migrering av din befintliga %S profil misslyckades.\nNya inställningar kommer att användas. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Hämtar %S-uppdatering + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Anslutning krypterad (onion-tjänst, %1$S, %2$S bit nycklar, %3$S) +pageInfo_OnionEncryption=Anslutning krypterad (onion-tjänst) +pageInfo_OnionName=Onion-namn: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Läs mer +onionServices.errorPage.browser=Webbläsare +onionServices.errorPage.network=Nätverk +onionServices.errorPage.onionSite=Onion-webbplats +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem med att läsa in onion-webbplats +onionServices.descNotFound.header=Onion-webbplats hittades inte +onionServices.descNotFound=Den mest troliga orsaken är att onion-webbplatsen är frånkopplad. Kontakta administratör för onion-webbplats. +onionServices.descNotFound.longDescription=Detaljer: %S — Den begärda beskrivningen för onion-tjänsten kan inte hittas på hashringen och därför kan tjänsten inte nås av klienten. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem med att läsa in onion-webbplats +onionServices.descInvalid.header=Onion-webbplats kan inte nås +onionServices.descInvalid=Onion-webbplatsen är onåbar på grund av ett internt fel. +onionServices.descInvalid.longDescription=Detaljer: %S — Den begärda beskrivningen för onion-tjänsten kan inte tolkas eller signaturvalidering misslyckades. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem med att läsa in onion-webbplatsen +onionServices.introFailed.header=Onion-webbplats har kopplats från +onionServices.introFailed=Den mest troliga orsaken är att onion-webbplatsen är frånkopplad. Kontakta administratör för onion-webbplats. +onionServices.introFailed.longDescription=Detaljer: %S — Introduktion misslyckades, vilket innebär att beskrivningen hittades men tjänsten är inte längre ansluten till introduktionspunkten. Det är troligt att tjänsten har ändrat sin beskrivning eller att den inte är igång. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem med att läsa in onion-webbplats +onionServices.rendezvousFailed.header=Det går inte att ansluta till onion-webbplats +onionServices.rendezvousFailed=Onion-webbplatsen är upptagen eller Tor-nätverket är överbelastat. Försök igen senare. +onionServices.rendezvousFailed.longDescription=Detaljer: %S — Klienten misslyckades med att delta i tjänsten, vilket innebär att klienten inte kunde slutföra anslutningen. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Autentisering krävs +onionServices.clientAuthMissing.header=Onion-webbplats kräver autentisering +onionServices.clientAuthMissing=Tillgång till onion-webbplats kräver en nyckel men ingen tillhandahölls. +onionServices.clientAuthMissing.longDescription=Detaljer: %S — Klienten hämtade den begärda beskrivningen för onion-tjänsten men kunde inte dekryptera dess innehåll eftersom klientauktoriseringsinformation saknas. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Autentisering misslyckades +onionServices.clientAuthIncorrect.header=Autentisering av onion-webbplatsen misslyckades +onionServices.clientAuthIncorrect=Den tillhandahållna nyckeln är felaktig eller har återkallats. Kontakta administratören för onion-webbplatsen. +onionServices.clientAuthIncorrect.longDescription=Detaljer: %S — Klienten kunde hämta den begärda beskrivningen för onion-tjänsten men kunde inte dekryptera dess innehåll med den tillhandahållna klientauktoriseringsinformationen. Det kan innebära att åtkomsten har återkallats. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem med att läsa in onion-webbplats +onionServices.badAddress.header=Ogiltig onion-webbplatsadress +onionServices.badAddress=Den angivna adressen för onion-webbplatsen är ogiltig. Kontrollera att du har skrivit in det korrekt. +onionServices.badAddress.longDescription=Detaljer: %S — Den tillhandahållna .onion-adressen är ogiltig. Det här felet returneras på grund av ett av följande skäl: adresskontrollsumman stämmer inte, den offentliga nyckeln ed25519 är ogiltig eller kodningen är ogiltig. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem med att läsa in onion-webbplats +onionServices.introTimedOut.header=Tiden för skapandet av onion-webbplatskrets löpte ut +onionServices.introTimedOut=Det gick inte att ansluta till onion-webbplats, eventuellt på grund av en dålig nätverksanslutning. +onionServices.introTimedOut.longDescription=Detaljer: %S — Anslutningen till den begärda onion-tjänsten avbröts när man försökte bygga möteskretsen. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S begär att du autentisera. +onionServices.authPrompt.keyPlaceholder=Ange din privata nyckel för den här onion-tjänsten +onionServices.authPrompt.done=Klar +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Ange en giltig nyckel (52 base32-tecken eller 44 base64-tecken) +onionServices.authPrompt.failedToSetKey=Det går inte att konfigurera Tor med din nyckel +onionServices.authPreferences.header=Autentisering för onion-tjänster +onionServices.authPreferences.overview=Vissa onion-tjänster kräver att du identifierar dig med en nyckel (ett slags lösenord) innan du kan komma åt dem. +onionServices.authPreferences.savedKeys=Sparade nycklar… +onionServices.authPreferences.dialogTitle=Nycklar för onion-tjänster +onionServices.authPreferences.dialogIntro=Nycklar för följande onion-webbplatser lagras på din dator +onionServices.authPreferences.onionSite=Onion-webbplats +onionServices.authPreferences.onionKey=Förklaring +onionServices.authPreferences.remove=Ta bort +onionServices.authPreferences.removeAll=Ta bort alla +onionServices.authPreferences.failedToGetKeys=Det går inte att hämta nycklar från Tor +onionServices.authPreferences.failedToRemoveKey=Det går inte att ta bort nyckeln +onionServices.v2Deprecated.pageTitle=Varning för upphörande av V2 onion-webbplats +onionServices.v2Deprecated.header=Version 2 onion-webbplatser kommer snart att upphöra att gälla +onionServices.v2Deprecated=Denna onion-webbplats kan inte nås snart. Kontakta webbplatsadministratören och uppmuntra dem att uppgradera. +onionServices.v2Deprecated.longDescription=Tor avslutar sitt stöd för onion-tjänster av version 2 i början av juli 2021, och denna onion-webbplats kan inte längre nås på den här adressen. Om du är webbplatsadministratör kan du snart uppgradera till en onion-tjänst av version 3. +onionServices.v2Deprecated.tryAgain=Förstått +onionServices.v2Deprecated.tooltip=Denna onion-webbplats kommer inte vara nåbar snart + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Prioritera alltid onion-tjänster +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Inte just nu +onionLocation.notNowAccessKey=n +onionLocation.description=Det finns en mer privat och säker version av denna webbplats via Tor-nätverket via onion-tjänster. Onion-tjänster hjälper webbplatsutgivare och deras besökare att besegra övervakning och censur. +onionLocation.tryThis=Testa onion-tjänster +onionLocation.onionAvailable=.onion tillgänglig +onionLocation.learnMore=Läs mer... +onionLocation.always=Alltid +onionLocation.askEverytime=Fråga varje gång +onionLocation.prioritizeOnionsDescription=Prioritera .onion-webbplatser när de är kända. +onionLocation.onionServicesTitle=Onion-tjänster + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=En kryptovaluta-adress (%S) har kopierats från en osäker webbplats. Den kunde ha ändrats. +cryptoSafetyPrompt.whatCanHeading=Vad kan du göra åt det? +cryptoSafetyPrompt.whatCanBody=Du kan försöka återansluta till en ny krets för att upprätta en säker anslutning eller acceptera risken och avvisa denna varning. +cryptoSafetyPrompt.learnMore=Läs mer +cryptoSafetyPrompt.primaryAction=Läs om fliken med en ny krets +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Avvisa varning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Fortsätt med försiktighet +rulesets.warningDescription=Att lägga till eller ändra regeluppsättningar kan få angripare att kapa din webbläsare. Fortsätt bara om du vet vad du gör. +rulesets.warningEnable=Varna mig när jag försöker komma åt dessa inställningar +rulesets.warningButton=Acceptera risken och fortsätt +# Ruleset list +rulesets.rulesets=Regeluppsättningar +rulesets.noRulesets=Inga regeluppsättningar hittades +rulesets.noRulesetsDescr=När du sparar en regeluppsättning i Tor Browser kommer den att dyka upp här. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Senast uppdaterad %S +rulesets.neverUpdated=Aldrig uppdaterad, eller den senaste uppdateringen misslyckades +rulesets.enabled=Aktiverad +rulesets.disabled=Inaktiverad +# Ruleset details/edit ruleset +rulesets.edit=Ändra +rulesets.name=Namn +rulesets.jwk=JWK +rulesets.pathPrefix=Sökvägsprefix +rulesets.scope=Omfattning +rulesets.enable=Aktivera denna regeluppsättning +rulesets.checkUpdates=Sök efter uppdateringar +rulesets.jwkPlaceholder=Nyckeln som används för att signera denna regeluppsättning i formatet JWK (JSON Web Key). +rulesets.jwkInvalid=JWK kunde inte tolkas, eller så är det inte en giltig nyckel +rulesets.pathPrefixPlaceholder=Webbadressprefix som innehåller de filer som krävs av regeluppsättningen +rulesets.pathPrefixInvalid=Sökvägsprefixet är inte en giltig HTTP(S)-webbadress +rulesets.scopePlaceholder=Regelbundna uttryck för reglernas omfattning +rulesets.scopeInvalid=Omfattningen kunde inte tolkas som ett reguljärt uttryck +rulesets.save=Spara +rulesets.cancel=Avbryt diff --git a/toolkit/torbutton/chrome/locale/sv-SE/torlauncher.properties b/toolkit/torbutton/chrome/locale/sv-SE/torlauncher.properties new file mode 100644 index 000000000000..a276a6b31253 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/sv-SE/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Launcher + +torlauncher.tor_exited_during_startup=Tor stängdes av under uppstart. Detta kan bero på ett fel i din torrc-fil, ett fel i Tor eller ett annat program på ditt system, eller ett hårdvarufel. Tills dess att du har åtgärdat det underliggande problemet och startat om Tor, kommer Tor Browser inte starta. +torlauncher.tor_exited=Tor stängdes oväntat. Detta kan bero på ett fel i själva Tor, ett annat program på ditt system eller ett hårdvarufel. Tills du startar om Tor kommer Tor Browser inte att nå några webbplatser. Om problemet kvarstår, skicka en kopia av din Tor-logg till supportteamet. +torlauncher.tor_exited2=Starta om Tor stänger inte flikarna i webbläsaren. +torlauncher.tor_controlconn_failed=Det gick inte att ansluta till Tor-kontrollporten. +torlauncher.tor_failed_to_start=Det gick inte att starta Tor. +torlauncher.tor_control_failed=Det gick inte att ta kontroll över Tor. +torlauncher.tor_bootstrap_failed=Tor kunde inte upprätta en Tor-nätverksanslutning. +torlauncher.tor_bootstrap_failed_details=%1$S misslyckades (%2$S). + +torlauncher.unable_to_start_tor=Det går inte att starta Tor.\n\n%S +torlauncher.tor_missing=Tors körbara programfil saknas. +torlauncher.torrc_missing=Torrc-filen saknas och gick inte att skapas. +torlauncher.datadir_missing=Tor-datakatalogen finns inte och gick inte att skapas. +torlauncher.onionauthdir_missing=Autentiseringskatalogen för Tor onion finns inte och kunde inte skapas. +torlauncher.password_hash_missing=Det gick inte att få hashat lösenord. + +torlauncher.failed_to_get_settings=Det går inte att hämta inställningarna för Tor.\n\n%S +torlauncher.failed_to_save_settings=Det går inte att spara inställningarna för Tor.\n\n%S +torlauncher.ensure_tor_is_running=Försäkra dig om att Tor är startad. + +torlauncher.error_proxy_addr_missing=Du måste ange både en IP-adress eller värdnamn och ett portnummer för att konfigurera Tor till att använda en proxy för att komma åt internet. +torlauncher.error_proxy_type_missing=Du måste välja proxytyp. +torlauncher.error_bridges_missing=Du måste ange en eller flera broar. +torlauncher.error_default_bridges_type_missing=Du måste välja en transporttyp för de ange broarna. +torlauncher.error_bridgedb_bridges_missing=Begär en bro. +torlauncher.error_bridge_bad_default_type=Inga tillhandahållna broar som har transporttypen %S finns tillgängliga. Justera dina inställningar. + +torlauncher.bridge_suffix.meek-amazon=(fungerar i Kina) +torlauncher.bridge_suffix.meek-azure=(fungerar i Kina) + +torlauncher.request_a_bridge=Begär en bro... +torlauncher.request_a_new_bridge=Begär en ny bro... +torlauncher.contacting_bridgedb=Kontaktar BridgeDB. Vänta. +torlauncher.captcha_prompt=Lös CAPTCHA för att begära en bro. +torlauncher.bad_captcha_solution=Lösningen är inte korrekt. Försök igen. +torlauncher.unable_to_get_bridge=Det går inte att ta emot en bro från BridgeDB.\n\n%S +torlauncher.no_meek=Den här webbläsaren är inte konfigurerad för meek, vilket krävs för att ta emot broar. +torlauncher.no_bridges_available=Inga broar finns tillgängliga för närvarande. + +torlauncher.connect=Anslut +torlauncher.restart_tor=Starta om Tor +torlauncher.quit=Avsluta +torlauncher.quit_win=Stäng +torlauncher.done=Klar + +torlauncher.forAssistance=För assistans, kontakta %S +torlauncher.forAssistance2=För hjälp, besök %S + +torlauncher.copiedNLogMessages=Kopieringen är klar. %S meddelanden från Tor-loggen som du kan klistra in i en textredigerare eller ett e-postmeddelande. + +torlauncher.bootstrapStatus.starting=Startar +torlauncher.bootstrapStatus.conn_pt=Ansluter till bro +torlauncher.bootstrapStatus.conn_done_pt=Ansluten till bro +torlauncher.bootstrapStatus.conn_proxy=Ansluter till proxyservern +torlauncher.bootstrapStatus.conn_done_proxy=Ansluten till proxyservern +torlauncher.bootstrapStatus.conn=Anslutning till en Tor-relä +torlauncher.bootstrapStatus.conn_done=Ansluten till en Tor-relä +torlauncher.bootstrapStatus.handshake=Förhandlar med en Tor-relä +torlauncher.bootstrapStatus.handshake_done=Avslutade förhandlingarna med en Tor-relä +torlauncher.bootstrapStatus.onehop_create=Upprättar en krypterad kataloganslutning +torlauncher.bootstrapStatus.requesting_status=Hämtar nätverksstatus +torlauncher.bootstrapStatus.loading_status=Läser in nätverksstatus +torlauncher.bootstrapStatus.loading_keys=Läser in auktoritära certifikat +torlauncher.bootstrapStatus.requesting_descriptors=Begär reläinformation +torlauncher.bootstrapStatus.loading_descriptors=Läser in reläinformation +torlauncher.bootstrapStatus.enough_dirinfo=Klar med inläsning av reläinformation +torlauncher.bootstrapStatus.ap_conn_pt=Bygger kretser: Ansluter till bro +torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kretser: Ansluten till bro +torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kretsar: Ansluter till proxyservern +torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kretsar: Ansluten till proxyservern +torlauncher.bootstrapStatus.ap_conn=Bygger kretsar: Ansluter till en Tor-relä +torlauncher.bootstrapStatus.ap_conn_done=Bygger kretsar: Ansluten till en Tor-relä +torlauncher.bootstrapStatus.ap_handshake=Bygger kretsar: Förhandlar med en Tor-relä +torlauncher.bootstrapStatus.ap_handshake_done=Bygger kretsar: Avslutade förhandlingarna med en Tor-relä +torlauncher.bootstrapStatus.circuit_create=Bygger kretsar: Upprättar en Tor-krets +torlauncher.bootstrapStatus.done=Ansluten till Tor-nätverket! + +torlauncher.bootstrapWarning.done=klar +torlauncher.bootstrapWarning.connectrefused=anslutningen vägrades +torlauncher.bootstrapWarning.misc=blandat +torlauncher.bootstrapWarning.resourcelimit=otillräckliga resurser +torlauncher.bootstrapWarning.identity=identitet felmatchad +torlauncher.bootstrapWarning.timeout=tidsgränsen överskreds +torlauncher.bootstrapWarning.noroute=framkomlig väg till värddatorn saknas +torlauncher.bootstrapWarning.ioerror=läs-/skrivfel +torlauncher.bootstrapWarning.pt_missing=saknar pluggbar transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Anslutningen till servern förlorades. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Det gick inte att ansluta till servern. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Det gick inte att ansluta till proxyn. + +torlauncher.copiedNLogMessagesShort=Kopierade %S-loggar diff --git a/toolkit/torbutton/chrome/locale/th/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/th/aboutDialog.dtd new file mode 100644 index 000000000000..769e8174ef12 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; พัฒนาโดย"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "the &vendorShortName;"> +<!ENTITY project.end "เป็นองค์กรไม่แสวงหาผลกำไรที่ทำงานเพื่อปกป้องความเป็นส่วนตัวและอิสรภาพของคุณทางออนไลน์"> + +<!ENTITY help.start "อยากช่วยเหลือหรือไม่"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "บริจาค"> +<!ENTITY help.or "หรือ"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "เข้ามามีส่วนร่วม"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "คำถาม?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "ช่วยให้เครือข่ายทอร์เติบโต!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "ข้อมูลลิขสิทธิ์"> +<!ENTITY tor.TrademarkStatement "'Tor 'และ' Onion Logo 'เป็นเครื่องหมายการค้าจดทะเบียนของโครงการ Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/th/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/th/aboutTBUpdate.dtd new file mode 100644 index 000000000000..c0d1746bba1e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "บันทึกการเปลี่ยนแปลงของ Tor Browser"> +<!ENTITY aboutTBUpdate.updated "Tor Browser ถูกอัปเดตแล้ว"> +<!ENTITY aboutTBUpdate.linkPrefix "สำหรับข้อมูลที่อัปเดตที่สุดของการเผยแพร่ครั้งนี้"> +<!ENTITY aboutTBUpdate.linkLabel "ดูเว็บไซต์ของเรา"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "รุ่น"> +<!ENTITY aboutTBUpdate.releaseDate "วันที่เผยแพร่"> +<!ENTITY aboutTBUpdate.releaseNotes "หมายเหตุการเผยแพร่"> diff --git a/toolkit/torbutton/chrome/locale/th/aboutTor.dtd b/toolkit/torbutton/chrome/locale/th/aboutTor.dtd new file mode 100644 index 000000000000..2de90767a878 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "เกี่ยวกับ Tor"> + +<!ENTITY aboutTor.viewChangelog.label "ดูบันทึกการเปลี่ยนแปลง"> + +<!ENTITY aboutTor.ready.label "ค้นหาอย่างปลอดภัย"> +<!ENTITY aboutTor.ready2.label "คุณพร้อมแล้วสำหรับประสบการณ์การท่องอินเทอร์เน็ตที่ปลอดภัย"> +<!ENTITY aboutTor.failure.label "แย่แล้ว มีอะไรบางอย่างผิดพลาด"> +<!ENTITY aboutTor.failure2.label "Tor ทำงานกับเบราว์เซอร์นี้ไม่ได้"> + +<!ENTITY aboutTor.search.label "ค้นหาโดย DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "มีคำถามไหม"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "ดูคู่มือผู้ใช้งาน Tor Browser"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "คู่มือผู้ใช้งาน Tor Browser"> + +<!ENTITY aboutTor.tor_mission.label "โปรเจค Tor เป็นขององค์กรไม่แสวงหาผลกำไรที่ทำงานเพื่อส่งเสริมสิทธิมนุษยชนและเสรีภาพ โดยการสร้างและบริการเทคโนโลยีที่ฟรี เน้นความเป็นนิรนามและโอเพนซอร์ส และส่งเสริมความเป็นส่วนตัว เพื่อสนับสนุนการใช้งานที่ไม่ต้องถูกจำกัด และสร้างความเข้าใจในสาธารณะให้กว้างขึ้น"> +<!ENTITY aboutTor.getInvolved.label "มาร่วมกับเรา"> + +<!ENTITY aboutTor.newsletter.tagline "ส่งตรงข่าวสารเกี่ยวกับ Tor ไปยังกล่องจดหมายของคุณ"> +<!ENTITY aboutTor.newsletter.link_text "สมัครรับข่าวสารเกี่ยวกับ Tor"> +<!ENTITY aboutTor.donationBanner.freeToUse "บริการ Tor นี้ฟรี ไม่มีค่าใช้จ่ายใดๆเพราะเงินบริจาคจากผู้มีน้ำใจอย่างคุณ"> +<!ENTITY aboutTor.donationBanner.buttonA "ร่วมบริจาค"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "บริจาคตอนนี้"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Your donation will be matched by Friends of Tor, up to $100,000."> diff --git a/toolkit/torbutton/chrome/locale/th/brand.dtd b/toolkit/torbutton/chrome/locale/th/brand.dtd new file mode 100644 index 000000000000..44bf749af261 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "โครงการ Tor"> +<!ENTITY trademarkInfo.part1 "'Tor 'และ' Onion Logo 'เป็นเครื่องหมายการค้าจดทะเบียนของโครงการ Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "คลิกเพื่อโหลดปลั๊กอินที่ถูกติดตั้งอยู่ในระบบ"> +<!ENTITY plugins.installed.enable "ปลั๊กอินที่เปิดใช้"> +<!ENTITY plugins.installed.disable "ปลั๊กอินที่ปิดใช้"> +<!ENTITY plugins.installed.disable.tip "คลิกเพื่อกันไม่ให้โหลดปลั๊กอินของระบบ"> diff --git a/toolkit/torbutton/chrome/locale/th/brand.properties b/toolkit/torbutton/chrome/locale/th/brand.properties new file mode 100644 index 000000000000..b0ec5f5c3ed2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=โครงการ Tor + +homePageSingleStartMain=Firefox Start หน้าเหย้าที่โหลดอย่างรวดเร็วและมีช่องค้นหาในตัว +homePageImport=นำเข้าหน้าเหย้าของคุณจาก %S + +homePageMigrationPageTitle=เลือกหน้าเหย้า +homePageMigrationDescription=กรุณาเลือกหน้าเหย้าที่คุณต้องการใช้: + +syncBrandShortName=เชื่อมข้อมูล diff --git a/toolkit/torbutton/chrome/locale/th/branding/brand.ftl b/toolkit/torbutton/chrome/locale/th/branding/brand.ftl new file mode 100644 index 000000000000..b1812e824588 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = โครงการ Tor +trademarkInfo = 'Tor 'และ' Onion Logo 'เป็นเครื่องหมายการค้าจดทะเบียนของโครงการ Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/th/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/th/browserOnboarding.properties new file mode 100644 index 000000000000..25170a008d26 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=ยินดีต้อนรับ +onboarding.tour-tor-welcome.title=คุณพร้อมแล้ว +onboarding.tour-tor-welcome.description=Tor Browser ให้บริการมาตรฐานสูงสุดเรื่องความเป็นส่วนตัวและความปลอดภัยขณะเข้าชมเว็บไซต์ ขณะนี้คุณได้รับการคุ้มครองจากการติดตาม การตรวจตรา และการปิดกั้นอินเทอร์เน็ต ชุดเตรียมความพร้อมจะบอกคุณว่า Tor Browserทำงานอย่างไร +onboarding.tour-tor-welcome.next-button=ไปที่ความเป็นส่วนตัว + +onboarding.tour-tor-privacy=ความเป็นส่วนตัว +onboarding.tour-tor-privacy.title=Snub trackers และ snoopers +onboarding.tour-tor-privacy.description=Tor Browser แยกคุ้กกี้และลบประวัติการใช้เบราว์เซอร์หลังจบเซสซั่น การแก้ไขจะทำให้แน่ใจว่าความเป็นส่วนตัวและความปลอดภัยของคุณได้รับการคุ้มครองในเบราว์เซอร์ คลิก 'Tor Network' เพื่อเรียนรู้ว่าเราคุ้มครองคุณในระดับสูงกว่านี้อย่างไร +onboarding.tour-tor-privacy.button=ไปที่เครือข่าย Tor + +onboarding.tour-tor-network=เครือข่าย Tor +onboarding.tour-tor-network.title=นำทางเพื่อกระจายเครือข่าย +onboarding.tour-tor-network.description=Tor Browser เชื่อมต่อคุณเข้ากับเครือข่าย Tor ที่ทำงานโดยอาสาสมัครกว่าพันคนทั่วโลก Tor Browser ต่างจาก VPN เพราะไม่มีใครสามารถระบุความผิดพลาดหรือหน่วยงานกลางได้ คุณต้องไว้วางใจเพื่อความเพลิดเพลินในการใช้อินเทอร์เน็ตอย่างเป็นส่วนตัว +onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences. +onboarding.tour-tor-network.action-button=ปรับแต่งการตั้งค่าเครือข่าย Tor ของคุณ +onboarding.tour-tor-network.button=ไปที่วงจรหน้าจอ + +onboarding.tour-tor-circuit-display=วงจรหน้าจอ +onboarding.tour-tor-circuit-display.title=ดูพาทของคุณ +onboarding.tour-tor-circuit-display.description=สำหรับทุกๆโดเมนที่คุณเยี่ยมชม ปริมาณการใช้งานของคุณถูกรีเลย์เข้ารหัสลับในวงจรระหว่างTor รีเลย์3แห่งทั่วโลก ไม่มีเว็บไซต์ใดๆที่สามารถรู้ได้ว่าคุณเชื่อมต่อจากที่ไหน คุณสามารถส่งคำร้องสร้างวงจรใหม่ได้ในคลิก วงจร Tor ใหม่สำหรับไซต์นี้ในวงจรหน้าจอ +onboarding.tour-tor-circuit-display.button=ดูพาทของฉัน +onboarding.tour-tor-circuit-display.next-button=ไปที่ความปลอดภัย + +onboarding.tour-tor-security=ความปลอดภัย +onboarding.tour-tor-security.title=เลือกประสบการณ์ของคุณ +onboarding.tour-tor-security.description=เราให้บริการการตั้งค่าเพิ่มเติมสำหรับคุณ ในการเพิ่มความปลอดภัยให้เบราว์เซอร์ของคุณ การตั้งค่าความปลอดภัยจะทำให้คุณสามารถปิดกั้นองค์ประกอบที่อาจโจมตีคอมพิวเตอร์ของคุณได้ คลิกด้านล่างเพื่อดูว่าตัวเลือกต่างๆทำอะไรได้บ้าง +onboarding.tour-tor-security.description-suffix=หมายเหตุ โดยการตั้งค่าเริ่มต้นแล้ว NoScript และ HTTPS ในทุกที่ไม่ได้ถูกรวมเข้าในแถบเครื่องมือ แต่คุณสามารถกำหนดเองเพื่อเพิ่มในแถบเครื่องมือได้ +onboarding.tour-tor-security-level.button=ดูระดับความปลอดภัย +onboarding.tour-tor-security-level.next-button=ไปยังเคล็ดลับประสบการณ์ + +onboarding.tour-tor-expect-differences=เคล็ดลับประสบการณ์ +onboarding.tour-tor-expect-differences.title=คาดหวังบางอย่างที่แตกต่าง +onboarding.tour-tor-expect-differences.description=ฟีเจอร์ด้านความปลอดภัยและความเป็นส่วนตัวต่างๆที่ให้บริการโดย Tor ประสบการณ์ของคุณขณะเรียกดูอินเทอร์เน็ตอาจแตกต่างออกไปบ้าง อาจช้าลง ขึ้นอยู่กับระดับความปลอดภัย องค์ประกอบบางอย่างอาจไม่โหลดหรือไม่ทำงาน อาจมีคำถามเพื่อพิสูจน์ว่าคุณคือมนุษย์และไม่ใช่หุ่นยนต์ +onboarding.tour-tor-expect-differences.button=ดูคำถามที่พบบ่อย +onboarding.tour-tor-expect-differences.next-button=ไปยัง บริการOnion + +onboarding.tour-tor-onion-services=บริการ Onion +onboarding.tour-tor-onion-services.title=การป้องกันที่พิเศษ +onboarding.tour-tor-onion-services.description=บริการ Onion คือไซต์ที่ลงท้ายด้วย.onion ที่ให้บริการการคุ้มครองพิเศษให้กับผู้เผยแพร่หรือผู้เข้าชม รวมไปถึงเพิ่มความคุ้มครองจากการปิดกั้นอินเทอร์เน็ต บริการ Onion อนุญาติทุกคนสามารถจัดหาเนื้อหาและบริการอย่างนิรนาม คลิกด้านล่างเพื่อชมDuckDuckGo ไซต์ onion +onboarding.tour-tor-onion-services.button=เยียมชม Onion +onboarding.tour-tor-onion-services.next-button=เสร็จสิ้น + +onboarding.overlay-icon-tooltip-updated2=ดูว่ามีอะไรใหม่\nใน %S +onboarding.tour-tor-update.prefix-new=สร้างใหม่ +onboarding.tour-tor-update.prefix-updated=อัพเดต + +onboarding.tour-tor-toolbar=แถบเครื่องมือ +onboarding.tour-tor-toolbar-update-9.0.title=ลาก่อน Onion Button +onboarding.tour-tor-toolbar-update-9.0.description=เราอยากให้ประสบการณ์ของคุณในการใช้ Tor ผสมผสานเข้ากับ Tor Browser ได้อย่างสมบูรณ์ +onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu. +onboarding.tour-tor-toolbar-update-9.0.button=วิธีการขอตัวตนใหม่ +onboarding.tour-tor-toolbar-update-9.0.next-button=ไปที่เครือข่าย Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=ต่อไป +onboarding.tor-circuit-display.done=เสร็จสิ้น +onboarding.tor-circuit-display.one-of-three=1 ใน 3 +onboarding.tor-circuit-display.two-of-three=2 ใน 3 +onboarding.tor-circuit-display.three-of-three=3 ใน 3 + +onboarding.tor-circuit-display.intro.title=วงจรทำงานอย่างไร +onboarding.tor-circuit-display.intro.msg=วงจรประกอบด้วยรีเลย์แบบสุ่มซึ่งคอมพิวเตอร์ทั่วโลกกำหนดค่าไว้เพื่อส่งต่อการรับส่งข้อมูล Tor วงจรช่วยให้คุณสามารถเรียกดูแบบและเชื่อมต่อกับบริการ Onion ได้อย่างส่วนตัว + +onboarding.tor-circuit-display.diagram.title=วงจรหน้าจอ +onboarding.tor-circuit-display.diagram.msg=แผนภาพนี้แสดงรีเลย์ที่ประกอบเป็นวงจรสำหรับเว็บไซต์นี้ เพื่อป้องกันการเชื่อมโยงกิจกรรมข้ามไซต์ต่าง ๆ แต่ละเว็บไซต์จะมีวงจรที่แตกต่างกัน + +onboarding.tor-circuit-display.new-circuit.title=คุณต้องการวงจรใหม่หรือไม่ +onboarding.tor-circuit-display.new-circuit.msg=หากคุณไม่สามารถเชื่อมต่อกับเว็บไซต์ที่คุณพยายามเข้าชมหรือมีปัญหาในการโหลด คุณสามารถใช้ปุ่มนี้เพื่อโหลดไซต์ใหม่ด้วยวงจรใหม่ diff --git a/toolkit/torbutton/chrome/locale/th/network-settings.dtd b/toolkit/torbutton/chrome/locale/th/network-settings.dtd new file mode 100644 index 000000000000..9663161313ff --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "ตั้งค่าเครือข่าย Tor"> +<!ENTITY torsettings.wizard.title.default "เชื่อมต่อกับ Tor"> +<!ENTITY torsettings.wizard.title.configure "ตั้งค่าเครือข่าย Tor"> +<!ENTITY torsettings.wizard.title.connecting "กำลังสร้างการเชื่อมต่อ"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "ภาษาของ Tor Browser"> +<!ENTITY torlauncher.localePicker.prompt "โปรดเลือกภาษา"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "คลิกปุ่ม "เชื่อมต่อ" เพื่อเชื่อมต่อกับ Tor"> +<!ENTITY torSettings.configurePrompt "คลิกปุ่ม "กำหนดค่า" เพื่อปรับการตั้งค่าเครือข่ายถ้าคุณอยู่ในประเทศที่เซ็นเซอร์ Tor (เช่น อียิปต์ จีน ตุรกี) หรือถ้าคุณกำลังเชื่อมต่อจากเครือข่ายส่วนตัวที่จำเป็นต้องใช้พร็อกซี"> +<!ENTITY torSettings.configure "กำหนดค่า"> +<!ENTITY torSettings.connect "เชื่อมต่อ"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "กรุณารอให้ Tor เริ่มทำงาน..."> +<!ENTITY torsettings.restartTor "เริ่มการทำงานของ Tor ใหม่"> +<!ENTITY torsettings.reconfigTor "กำหนดค่าใหม่"> + +<!ENTITY torsettings.discardSettings.prompt "คุณได้กำหนดค่าสะพานของ Tor หรือคุณได้ใส่การตั้งค่าพร็อกซีท้องถิ่นไว้แล้ว &#160 คุณจำเป็นต้องลบการตั้งค่าเหล่านี้ออกถ้าต้องการสร้างการเชื่อมต่อโดยตรงกับเครือข่ายของ Tor"> +<!ENTITY torsettings.discardSettings.proceed "ลบการตั้งค่าและการเชื่อมต่อ"> + +<!ENTITY torsettings.optional "ไม่จำเป็น"> + +<!ENTITY torsettings.useProxy.checkbox "ฉันใช้พร็อกซีเพื่อเชื่อมต่อกับอินเทอร์เน็ต"> +<!ENTITY torsettings.useProxy.type "ชนิดพร็อกซี"> +<!ENTITY torsettings.useProxy.type.placeholder "เลือกชนิดพร็อกซี"> +<!ENTITY torsettings.useProxy.address "ที่อยู่"> +<!ENTITY torsettings.useProxy.address.placeholder "ที่อยู่ IP หรือชื่อโฮสต์"> +<!ENTITY torsettings.useProxy.port "พอร์ต"> +<!ENTITY torsettings.useProxy.username "ชื่อผู้ใช้"> +<!ENTITY torsettings.useProxy.password "รหัสผ่าน"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP หรือ HTTPS"> +<!ENTITY torsettings.firewall.checkbox "คอมพิวเตอร์เครื่องนี้ใช้งานผ่านไฟร์วอลล์ที่อนุญาตให้เชื่อมต่อกับเฉพาะบางพอร์ตเท่านั้น"> +<!ENTITY torsettings.firewall.allowedPorts "พอร์ตที่ได้รับอนุญาต"> +<!ENTITY torsettings.useBridges.checkbox "Tor ถูกเซ็นเซอร์ในประเทศของฉัน"> +<!ENTITY torsettings.useBridges.default "เลือกสะพานที่มีมาให้ในตัว"> +<!ENTITY torsettings.useBridges.default.placeholder "เลือกสะพาน"> +<!ENTITY torsettings.useBridges.bridgeDB "เลือกสะพานจาก torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "กรอกตัวอักษรที่อยู่ในภาพ"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "รับการท้าทายใหม่"> +<!ENTITY torsettings.useBridges.captchaSubmit "ส่ง"> +<!ENTITY torsettings.useBridges.custom "จัดหาสะพานที่ฉันรู้จัก"> +<!ENTITY torsettings.useBridges.label "กรอกข้อมูลสะพานจากแหล่งที่น่าเชื่อถือ"> +<!ENTITY torsettings.useBridges.placeholder "พิมพ์ที่อยู่: พอร์ต (บรรทัดละพอร์ต)"> + +<!ENTITY torsettings.copyLog "คัดลอกล็อก Tor ไปที่คลิปบอร์ด "> + +<!ENTITY torsettings.proxyHelpTitle "ความช่วยเหลือเกี่ยวกับพร็อกซี"> +<!ENTITY torsettings.proxyHelp1 "พร็อกซีท้องถิ่นอาจจะมีความจำเป็นหากเชื่อมต่อผ่านเครือข่ายบริษัท โรงเรียน หรือมหาวิทยาลัย   ถ้าคุณไม่แน่ใจว่าจำเป็นจะต้องใช้พร็อกซีหรือไม่ ดูได้ที่การตั้งค่าอินเทอร์เน็ตในเบราวเซอร์อื่น หรือตรวจสอบการตั้งค่าเครือข่ายของระบบของคุณ"> + +<!ENTITY torsettings.bridgeHelpTitle "การช่วยเหลือเกี่ยวกับรีเลย์สะพาน"> +<!ENTITY torsettings.bridgeHelp1 "สะพานเป็นรีเลย์ที่ไม่อยู่ในรายการ ซึ่งทำให้การบล็อกการเชื่อมต่อกับเครือข่าย Tor ทำได้ยากขึ้น   สะพานแต่ละชนิดใช้วิธีการที่แตกต่างกันเพื่อหลบเลี่ยงการเซ็นเซอร์   สะพานแบบ obfs ทำให้การรับส่งข้อมูลของคุณเป็นเหมือนเสียงรบกวนที่ไม่มีความหมาย ส่วนสะพานแบบ meek จะทำให้การรับส่งข้อมูลของคุณเหมือนกำลังเชื่อมต่อกับบริการนั้นๆ แทนที่จะเป็น Tor"> +<!ENTITY torsettings.bridgeHelp2 "เนื่องจากบางประเทศบล็อก Tor สะพานบางอันจึงใช้งานได้เฉพาะในบางประเทศเท่านั้น   ถ้าคุณไม่แน่ใจว่าสะพานอันไหนใช้งานได้ในประเทศของคุณบ้าง กรุณาดูที่ torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "กรุณรอระหว่างที่เรากำลังสร้างการเชื่อมต่อไปยังเครือข่าย Tor   ซึ่งอาจจะใช้เวลาหลายนาที"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "การเชื่อมต่อ"> +<!ENTITY torPreferences.torSettings "การตั้งค่า Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser จะกำหนดเส้นทางการรับส่งข้อมูลของคุณเข้ากับเครือข่าย Tor ที่ทำงานโดยอาสาสมัครกว่าพันคนทั่วโลก" > +<!ENTITY torPreferences.learnMore "เรียนรู้เพิ่มเติม"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "ทดสอบ"> +<!ENTITY torPreferences.statusInternetOnline "ออนไลน์"> +<!ENTITY torPreferences.statusInternetOffline "ออฟไลน์"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "เชื่อมต่อสำเร็จ"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "เรียนรู้เพิ่มเติม"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "เริ่มต้นโดยรวดเร็ว"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "เชื่อมต่อโดยอัตโนมัติตลอด"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "บริดจ์"> +<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "อัตโนมัติ"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "ลบ"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Copied!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "ขอสะพาน…"> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "ขั้นสูง"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "ดูไฟล์บันทึก"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "ยกเลิก"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "เกล็ดหิมะ"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "ขอบริดจ์"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "แก้ปัญหา CAPTCHA เพื่อขอสะพาน"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "วิธีแก้ไขไม่ถูกต้อง กรุณาลองอีกครั้ง"> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor ไฟล์บันทึก"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "กำลังเชื่อมต่อ..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "อัตโนมัติ"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "ลองอีกครั้ง"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/th/onboarding.properties b/toolkit/torbutton/chrome/locale/th/onboarding.properties new file mode 100644 index 000000000000..68ba70e41836 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=เพิ่งเคยใช้ %S?\nมาเริ่มกันเลย +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S เป็นแบบใหม่ทั้งหมด\nดูสิ่งที่คุณสามารถทำได้! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=ปิด +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=ยกเลิก +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=เสร็จสมบูรณ์ diff --git a/toolkit/torbutton/chrome/locale/th/torbutton.dtd b/toolkit/torbutton/chrome/locale/th/torbutton.dtd new file mode 100644 index 000000000000..8efc0569e12b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "สร้างตัวตนใหม่"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "วงจร Tor ใหม่สำหรับไซต์นี้"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "ตั้งค่าเครือข่าย Tor"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "ตรวจสอบสถานะการปรับรุ่น Tor Browser"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "การป้องกันคุกกี้"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "คลิกเพื่อเริ่มใช้ Torbutton"> +<!ENTITY torbutton.prefs.security_settings "ตั้งค่าความปลอดภัย Tor Browser"> +<!ENTITY torbutton.cookiedialog.title "จัดการป้องกัน Cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "ถูกป้องกันอยู่"> +<!ENTITY torbutton.cookiedialog.domainCol "โฮสต์"> +<!ENTITY torbutton.cookiedialog.nameCol "ชื่อ"> +<!ENTITY torbutton.cookiedialog.pathCol "เส้นทาง"> +<!ENTITY torbutton.cookiedialog.protectCookie "การป้องกันคุกกี้"> +<!ENTITY torbutton.cookiedialog.removeCookie "นำคุกกี้ออก"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "คุกกี้ที่ไม่ถูกป้องกัน"> +<!ENTITY torbutton.cookiedialog.removeAllBut "ลบทั้งหมดแต่ป้องกันเอาไว้"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "ป้องกันคุกกี้ใหม่"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "ไม่ต้องป้องกันคุกกี้ใหม่"> +<!ENTITY torbutton.prefs.sec_caption "ระดับความปลอดภัย"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "สไลเดอร์สำหรับความปลอดภัยทำให้คุณปิดคุณสมบัติบางส่วนของเบราว์เซอร์ที่ทำให้บราวเซอร์ของคุณเสี่ยงต่อความพยายามที่จะแฮ็ค"> +<!ENTITY torbutton.prefs.sec_standard_label "มาตรฐาน"> +<!ENTITY torbutton.prefs.sec_standard_description "เปิดใช้งานคุณสมบัติของเบราว์เซอร์ Tor และเว็บไซต์ทั้งหมด"> +<!ENTITY torbutton.prefs.sec_safer_label "ปลอดภัยกว่า"> +<!ENTITY torbutton.prefs.sec_safer_description "ปิดคุณสมบัติเว็บไซต์มักจะมีความเสี่ยง ทำให้บางเว็บไซต์สูญเสียฟังก์ชันการใช้งาน "> +<!ENTITY torbutton.prefs.sec_safer_list_label "การตั้งค่าที่ปลอดภัยกว่า"> +<!ENTITY torbutton.prefs.sec_safest_label "ปลอดภัยที่สุด"> +<!ENTITY torbutton.prefs.sec_safest_description "อนุญาตให้เปิดคุณสมบัติเว็บไซต์เท่าที่จำเป็นสำหรับทำให้เว็บไซต์เสถียรและทำงานพื้นฐานได้ ความเปลี่ยนแปลงเหล่านี้จะมีผลต่อรูปภาพ ข้อมูล และสคริปต์"> +<!ENTITY torbutton.prefs.sec_safest_list_label "การตั้งค่าที่ปลอดภัยที่สุด"> +<!ENTITY torbutton.prefs.sec_learn_more_label "เรียนรู้เพิ่มเติม"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript ถูกปิดบนไซต์ที่ไม่ใช่ HTTPS"> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript ถูกระงับโดยปริยายสำหรับทุกไซต์"> +<!ENTITY torbutton.prefs.sec_limit_typography "แบบอักษรและสัญลักษณ์ทางคณิตศาสตร์บางอย่างถูกปิดใช้งาน"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "แบบอักษร ไอคอน สัญลักษณ์ทางคณิตศาสตร์ และรูปภาพบางอย่างถูกปิดใช้งาน "> +<!ENTITY torbutton.prefs.sec_click_to_play_media "คลิกเพื่อเล่นเสียงและวิดีโอ (HTML 5 มีเดีย) และ WebGL "> +<!ENTITY torbutton.prefs.sec_custom_warning "กำหนดเอง"> +<!ENTITY torbutton.prefs.sec_overview "ปิดใช้งานคุณลักษณะบางอย่างของ เว็บ ที่สามารถใช้เพื่อ การโจมตี ความปลอดภัย และ ความเป็นนิรนาม"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "ระดับความปลอดภัย มาตรฐาน"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "ระดับ ความปลอดภัย : ปลอดภัยยิ่งขึ้น"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "ระดับ ความปลอดภัย : ปลอดภัยที่สุด"> +<!ENTITY torbutton.prefs.sec_custom_summary "การตั้งค่าเบราว์เซอร์ที่กำหนดเองของคุณส่งผลให้เกิดการตั้งค่าที่ไม่ความปลอดภัย เพื่อเหตุผลด้านความปลอดภัยและความเป็นส่วนตัวเรา ขอแนะนำให้คุณเลือกหนึ่งในระดับความปลอดภัยค่าเริ่มต้น"> +<!ENTITY torbutton.prefs.sec_restore_defaults "กลับสู่ค่ามาตรฐาน"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "การตั้งค่าความปลอดภัยชั้นสูง"> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "การเชื่องโยง Tor "> +<!ENTITY torbutton.circuit_display.new_circuit "แหล่งเชื่อมโยงข้อมูลใหม่สำหรับเว็บไซต์นี้"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Remember this key"> diff --git a/toolkit/torbutton/chrome/locale/th/torbutton.properties b/toolkit/torbutton/chrome/locale/th/torbutton.properties new file mode 100644 index 000000000000..3aac05212784 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = อินเทอร์เน็ต +torbutton.circuit_display.ip_unknown = หมายเลข IP ที่ไม่รู้จัก +torbutton.circuit_display.onion_site = ไซต์ Onion +torbutton.circuit_display.this_browser = เบราว์เซอร์นี้ +torbutton.circuit_display.relay = รีเลย์ +torbutton.circuit_display.tor_bridge = สะพาน +torbutton.circuit_display.unknown_country = ไม่ทราบประเทศ +torbutton.circuit_display.guard = การ์ด +torbutton.circuit_display.guard_note = [การ์ด] โหนดของคุณอาจไม่เปลี่ยนแปลง +torbutton.circuit_display.learn_more = เรียนรู้เพิ่มเติม +torbutton.circuit_display.click_to_copy = Click to Copy +torbutton.circuit_display.copied = Copied! +torbutton.content_sizer.margin_tooltip = Tor Browser เพิ่มระยะขอบนี้เพื่อทำให้ความกว้างและความสูงของหน้าต่างคุณโดดเด่นน้อยลง และลดความสามารถของบุคคลอื่นในการติดตามคุณทางออนไลน์ +extensions.torbutton@torproject.org.description = Torbutton มีปุ่มให้ปรับแต่งการตั้งค่า Tor และล้างข้อมูลการดูเว็บส่วนบุคคลอย่างรวดเร็วและง่ายดาย +torbutton.popup.external.title = ดาวน์โหลดไฟล์ภายนอก +torbutton.popup.external.app = Tor Browser ไม่สามารถแสดงไฟล์นี้ คุณต้องเปิดมันในโปรแกรมอื่น\n\n +torbutton.popup.external.note = ไฟล์บางชนิดอาจทำให้โปรแกรมเชื่อมต่อกับอินเทอร์เน็ตโดยไม่ผ่าน Tor\n\n +torbutton.popup.external.suggest = เพื่อความปลอดภัย คุณควรเปิดไฟล์ขณะออฟไลน์หรือใช้ Tor Live CD เช่น Tails\n +torbutton.popup.launch = ดาวน์โหลดไฟล์ +torbutton.popup.cancel = ยกเลิก +torbutton.popup.dontask = ดาวน์โหลดแฟ้มโดยอัตโนมัติตั้งแต่บัดนี้เป็นต้นไป +torbutton.popup.no_newnym = Torbutton ไม่สามารถให้อัตลักษณ์ใหม่กับคุณได้อย่างปลอดภัย มันไม่สามารถเข้าถึง Tor Control Port ได้\n\nคุณกำลังเปิดให้ Tor Browser Bundle ทำงานอยู่หรือไม่? +torbutton.security_settings.menu.title = ตั้งค่าความปลอดภัย +torbutton.title.prompt_torbrowser = ข้อมูล Torbutton ที่สำคัญ +torbutton.popup.prompt_torbrowser = Torbutton ทำงานต่างกันในขณะนี้ คุณไม่สามารถปิดมันได้ต่อไป\n\nเราทำการเปลี่ยนแปลงนี้เพราะมันไม่ปลอดภัยที่จะใช้ Torbutton ในเบราว์เซอร์ที่ไม่ได้เปิดใช้ Tor browser ในขเวลาเดียวกัน มีจุดบกพร่องหลายจุดที่เราไม่สามารถแก้ไขได้โดยวิธีอื่น\n\nถ้าคุณต้องการใช้ Firefox ได้ตามปกติ คุณต้องยกเลิกการติดตั้ง Torbutton และดาวน์โหลดชุดขยายรวมของ Tor Browser ซึ่งคุณสมบัติความเป็นส่วนตัวข� ��ง Tor Browser เหนือกว่าคุณสมบัติของ Firefox ปกติ แม้ Firefox ถูกจะใช้ด้วย Torbutton [...] +torbutton.popup.short_torbrowser = ข้อมูลสำคัญจาก Torbutton\n\nตอนนี้ Torbutton ถูกเปิดใช้ตลอดเวลา\n\nคลิกที่ Torbutton เพื่อดูข้อมูลเพิ่มเติม + +torbutton.popup.confirm_plugins = ปลั๊กอินอย่าง Flash สามารถทำให้ความเป็นส่วนตัวและความเป็นนิรนามของคุณเสียไป\n\nพวกมันสามารถตัดผ่านข้าม Tor ไป และเปิดเผยตำแหน่งที่ตั้งและหมายเลข IP ของคุณ\n\nคุณแน่ใจไหมว่าต้องการจะเปิดใช้ปลั๊กอิน?\n\n +torbutton.popup.never_ask_again = ไม่ต้องถามฉันอีก +torbutton.popup.confirm_newnym = Tor Browser จะปิดหน้าต่างและแท็บทั้งหมด เซสชันของเว็บไซต์ทั้งหมดจะสูญหาย\n\nเริ่มใช้งาน Tor Browser ใหม่ตอนนี้เพื่อรีเซตข้อมูลประจำตัว + +torbutton.maximize_warning = การขยาย Tor Browser อนุญาตให้เว็บไซต์สามารถระบุขนาดหน้าจอของคุณ ซึ่งอาจถูกใช้ในการติดตามคุณ เราแนะนำให้คุณใช้หน้าต่าง Tor Browser ขนาดตามค่าเริ่มต้น + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=เว็บไซต์นี้ (%S) พยายามสกัด ข้อมูลรูปภาพพื้นที่ทำงาน HTML5 ซึ่งอาจถูกใช้ระบุคอมพิวเตอร์ของคุณโดยเฉพาะ\n\nควรให้ Tor Browser อนุญาตเว็บไซต์นี้สกัดข้อมูลรูปภาพพื้นที่ทำงาน HTML5 หรือไม่ +canvas.notNow=ไม่ใช่ตอนนี้ +canvas.notNowAccessKey=N +canvas.allow=อนุญาตในอนาคต +canvas.allowAccessKey=A +canvas.never=ไม่เลยสำหรับเว็บไซต์นี้ (แนะนำ) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=ปัญหาโปรไฟล์ %S +profileReadOnly=คุณไม่สามารถเรียกใช้ %S จากระบบไฟล์แบบอ่านเท่านั้น กรุณาคัดลอก %S ไปยังที่ตั้งอื่นก่อนลองใช้มัน +profileReadOnlyMac=คุณไม่สามารถเรียกใช้ %S จากระบบไฟล์แบบอ่านเท่านั้น กรุณาคัดลอก %S ไปยังเดสก์ท็อปหรือแอปพลิเคชันก่อนลองใช้มัน +profileAccessDenied=%S ไม่ได้รับอนุญาตให้เข้าถึงโปรไฟล์ กรุณาแก้ไขการอนุญาตระบบไฟล์ของคุณและลองใหม่อีกครั้ง +profileMigrationFailed=การย้ายโปรไฟล์ %S ที่มีอยู่แล้วของคุณล้มเหลว\nการตั้งค่าใหม่จะถูกใช้ + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=กำลังดาวน์โหลดอัปเดต %S + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=การเชื่อมต่อเข้ารหัสลับ (Onion Service, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=การเชื่อมต่อเข้ารหัสลับ (Onion Service) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=เรียนรู้เพิ่มเติม +onionServices.errorPage.browser=เบราว์เซอร์ +onionServices.errorPage.network=เครือข่าย +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem Loading Onionsite +onionServices.descNotFound.header=Onionsite Not Found +onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem Loading Onionsite +onionServices.descInvalid.header=Onionsite Cannot Be Reached +onionServices.descInvalid=The onionsite is unreachable due an internal error. +onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem Loading Onionsite +onionServices.introFailed.header=Onionsite Has Disconnected +onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem Loading Onionsite +onionServices.rendezvousFailed.header=Unable to Connect to Onionsite +onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later. +onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Authorization Required +onionServices.clientAuthMissing.header=Onionsite Requires Authentication +onionServices.clientAuthMissing=Access to the onionsite requires a key but none was provided. +onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Authorization Failed +onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed +onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator. +onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem Loading Onionsite +onionServices.badAddress.header=Invalid Onionsite Address +onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly. +onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem Loading Onionsite +onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out +onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection. +onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S is requesting that you authenticate. +onionServices.authPrompt.keyPlaceholder=ใส่กุญแจส่วนตัวของคุณสำหรับ onion service นี้ +onionServices.authPrompt.done=เสร็จสิ้น +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters) +onionServices.authPrompt.failedToSetKey=ไม่สามารถปรับแต่งค่า Tor ได้ด้วยกุญแจของคุณ +onionServices.authPreferences.header=Onion Services Authentication +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them. +onionServices.authPreferences.savedKeys=กุญแจที่ถูกบันทึก... +onionServices.authPreferences.dialogTitle=Onion Service Keys +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=รหัสกุญแจ +onionServices.authPreferences.remove=ลบออก +onionServices.authPreferences.removeAll=ลบออกทั้งหมด +onionServices.authPreferences.failedToGetKeys=ไม่สามารถดึงกุญแจจาก Tor +onionServices.authPreferences.failedToRemoveKey=ไม่สามารถลบกุญแจได้ +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=รับทราบ +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Always Prioritize Onions +onionLocation.alwaysPrioritizeAccessKey=ป +onionLocation.notNow=ไม่ใช่ตอนนี้ +onionLocation.notNowAccessKey=พ +onionLocation.description=There's a more private and secure version of this site available over the Tor network via onion services. Onion services help website publishers and their visitors defeat surveillance and censorship. +onionLocation.tryThis=Try Onion Services +onionLocation.onionAvailable=.onion available +onionLocation.learnMore=Learn more… +onionLocation.always=Always +onionLocation.askEverytime=Ask every time +onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known. +onionLocation.onionServicesTitle=บริการ Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=เรียนรู้เพิ่มเติม +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=ถูกเปิดใช้ +rulesets.disabled=ปิดใช้งาน +# Ruleset details/edit ruleset +rulesets.edit=เเก้ไข +rulesets.name=ชื่อ +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Scope +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=บันทึก +rulesets.cancel=ยกเลิก diff --git a/toolkit/torbutton/chrome/locale/th/torlauncher.properties b/toolkit/torbutton/chrome/locale/th/torlauncher.properties new file mode 100644 index 000000000000..40987d4384f3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/th/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=ตัวเปิด Tor + +torlauncher.tor_exited_during_startup=Tor ออกจากโปรแกรมระหว่างการเริ่มต้น อาจเกิดจากข้อผิดพลาดในไฟล์ torrc ของคุณ ข้อผิดพลาดใน Tor หรือโปรแกรมอื่น ๆ ในระบบของคุณหรือฮาร์ดแวร์ผิดพลาด เบราว์เซอร์ของ Tor ยังจะไม่เริ่มทำงานจนกว่าคุณจะแก้ไขปัญหาพื้นฐานและรีสตาร์ทแล้ว +torlauncher.tor_exited=Tor ออกจากโปรแกรมโดยไม่ได้คาดคิดมาก่อน อาจเป็นเพราะข้อผิดพลาดในตัวของ Tor เอง โปรแกรมอื่นในระบบของคุณหรือผิดความผิดพลาดของฮาร์ดแวร์ จนกว่าคุณจะรีสตาร์ท Tor เบราว์เซอร์ของ Tor จะไม่สามารถเข้าถึงเว็บไซต์ใด ๆ ได้ หากปัญหายังคงอยู่ โปรดส่งสำเนาล็อค Tor ของคุณไปยังทีมสนับสนุน +torlauncher.tor_exited2=การรีสตาร์ท Tor จะไม่ปิดแท็บเบราว์เซอร์ของคุณ +torlauncher.tor_controlconn_failed=ไม่สามารถเชื่อมต่อกับพอร์ตควบคุมของ Tor ได้ +torlauncher.tor_failed_to_start=การเริ่ม Tor ล้มเหลว +torlauncher.tor_control_failed=การควบคุมของTor ล้มเหลว +torlauncher.tor_bootstrap_failed=Tor ล้มเหลวในการเชื่อมต่อกับเครือข่าย Tor +torlauncher.tor_bootstrap_failed_details=%1$S ล้มเหลว (%2$S) + +torlauncher.unable_to_start_tor=ไม่สามารถเริ่มการทำงานของ Tor ได้\n\n%S +torlauncher.tor_missing=แฟ้มโปรแกรม Tor ขาดหายไป +torlauncher.torrc_missing=ไฟล์ torrc หายไปและไม่สามารถสร้างได้ +torlauncher.datadir_missing=ไม่มีข้อมูลไดเรกทอรีของ Tor และไม่สามารถสร้างได้ +torlauncher.onionauthdir_missing=ไม่มีและไม่สามารถสร้างรายชื่อการยืนยันตัวตนของ Tor onion ได้ +torlauncher.password_hash_missing=ล้มเหลวในการเรียกรหัสผ่านที่ถูกแฮช + +torlauncher.failed_to_get_settings=ไม่สามารถเรียกคืนการตั้งค่า Tor ได้\n\n%S +torlauncher.failed_to_save_settings=ไม่สามารถบันทึกการตั้งค่า Tor ได้\n\n%S +torlauncher.ensure_tor_is_running=กรุณาตรวจสอบให้แน่ใจว่า Tor กำลังทำงานอยู่ + +torlauncher.error_proxy_addr_missing=คุณต้องระบุทั้งที่อยู่ IP หรือชื่อเครื่อง และหมายเลขพอร์ต เพื่อปรับแต่ง Tor ให้ใช้พร็อกซีในการเชื่อมต่ออินเทอร์เน็ต +torlauncher.error_proxy_type_missing=คุณต้องเลือกชนิดพร็อกซี +torlauncher.error_bridges_missing=คุณต้องระบุสะพานอย่างน้อยหนึ่งตัว +torlauncher.error_default_bridges_type_missing=คุณต้องเลือกประเภทการถ่ายโอนข้อมูลสำหรับสะพานที่มีให้ +torlauncher.error_bridgedb_bridges_missing=กรุณาขอสะพาน +torlauncher.error_bridge_bad_default_type=ไม่มีสะพานสำหรับชนิดแลกเปลี่ยนข้อมูล% S โปรดปรับการตั้งค่าของคุณ + +torlauncher.bridge_suffix.meek-amazon=(ใช้งานได้ในประเทศจีน) +torlauncher.bridge_suffix.meek-azure=(ใช้งานได้ในประเทศจีน) + +torlauncher.request_a_bridge=ขอสะพาน… +torlauncher.request_a_new_bridge=ขอสะพานใหม่… +torlauncher.contacting_bridgedb=กำลังติดต่อ BridgeDB. กรุณารอ +torlauncher.captcha_prompt=แก้ปัญหา CAPTCHA เพื่อขอสะพาน +torlauncher.bad_captcha_solution=วิธีแก้ไขไม่ถูกต้อง กรุณาลองอีกครั้ง +torlauncher.unable_to_get_bridge=ไม่สามารถรับสะพานจาก BridgeDB\n\n% S +torlauncher.no_meek=เบราว์เซอร์นี้ไม่ได้กำหนดค่าไว้สำหรับ meek ซึ่งจำเป็นสำหรับการรับสะพาน +torlauncher.no_bridges_available=ไม่มีสะพานว่างในขณะนี้ ขอโทษ + +torlauncher.connect=เชื่อมต่อ +torlauncher.restart_tor=เริ่มการทำงานของ Tor ใหม่ +torlauncher.quit=ออก +torlauncher.quit_win=ออก +torlauncher.done=สำเร็จ + +torlauncher.forAssistance=ต้องการความช่วยเหลือ ติดต่อ %S +torlauncher.forAssistance2=สำหรับความช่วยเหลือ เข้าชมที่ %S + +torlauncher.copiedNLogMessages=การคัดลอกสำเนาเสร็จสมบูรณ์ % S ข้อความบันทึก Tor พร้อมที่จะถูกวางลงในโปรแกรมแก้ไขข้อความหรือข้อความอีเมล + +torlauncher.bootstrapStatus.starting=กำลังเริ่มต้น +torlauncher.bootstrapStatus.conn_pt=กำลังเชื่อมต่อที่สะพาน +torlauncher.bootstrapStatus.conn_done_pt=เชื่อมต่อไปที่สะพานแล้ว +torlauncher.bootstrapStatus.conn_proxy=กำลังเชื่อมต่อกับพร็อกซี +torlauncher.bootstrapStatus.conn_done_proxy=เชื่อมต่อกับพร็อกซีแล้ว +torlauncher.bootstrapStatus.conn=การเชื่อมต่อกับ Tor relay +torlauncher.bootstrapStatus.conn_done=การเชื่อมต่อกับ Tor relay แล้ว +torlauncher.bootstrapStatus.handshake=กำลังต่อรองกับ Tor relay +torlauncher.bootstrapStatus.handshake_done=ต่อรองกับ Tor relay เสร็จแล้ว +torlauncher.bootstrapStatus.onehop_create=กำลังสร้างการเชื่อมต่อแบบเข้ารหัสกับคลังเก็บรายชื่อ +torlauncher.bootstrapStatus.requesting_status=กำลังเรียกข้อมูลสถานะเครือข่าย +torlauncher.bootstrapStatus.loading_status=กำลังดึงข้อมูลสถานะเครือข่าย +torlauncher.bootstrapStatus.loading_keys=กำลังดึง ใบรับรองสิทธิ +torlauncher.bootstrapStatus.requesting_descriptors=กำลังร้องขอข้อมูล relay +torlauncher.bootstrapStatus.loading_descriptors=กำลังดึงข้อมูล relay +torlauncher.bootstrapStatus.enough_dirinfo=การโหลดข้อมูลรีเลย์ เสร็จสิ้น +torlauncher.bootstrapStatus.ap_conn_pt=กำลังสร้างวงจร: กำลังเชื่อมต่อกับสะพาน +torlauncher.bootstrapStatus.ap_conn_done_pt=กำลังสร้างวงจร: เชื่อมต่อกับสะพานแล้ว +torlauncher.bootstrapStatus.ap_conn_proxy=กำลังสร้างวงจร: กำลังเชื่อมต่อกับพร็อกซี +torlauncher.bootstrapStatus.ap_conn_done_proxy=กำลังสร้างวงจร: เชื่อมต่อกับพร็อกซีแล้ว +torlauncher.bootstrapStatus.ap_conn=กำลังสร้างวงจร: กำลังเชื่อมต่อกับTor relay +torlauncher.bootstrapStatus.ap_conn_done=กำลังสร้างวงจร: เชื่อมต่อกับ Tor relay แล้ว +torlauncher.bootstrapStatus.ap_handshake=กำลังสร้างวงจร: กำลังติดต่อกับ Tor relay +torlauncher.bootstrapStatus.ap_handshake_done=กำลังสร้างวงจร: ติดต่อกับ Tor relay เสร็จแล้ว +torlauncher.bootstrapStatus.circuit_create=กำลังสร้างวงจร: กำลังสร้างการเชื่อมต่อวงจร Tor +torlauncher.bootstrapStatus.done=เชื่อมต่อเครือข่าย Tor เรียบร้อยแล้ว + +torlauncher.bootstrapWarning.done=สำเร็จ +torlauncher.bootstrapWarning.connectrefused=ถูกปฏิเสธการเชื่อมต่อ +torlauncher.bootstrapWarning.misc=เบ็ดเตล็ด +torlauncher.bootstrapWarning.resourcelimit=ทรัพยากรไม่เพียงพอ +torlauncher.bootstrapWarning.identity=ข้อมูลประจำตัวไม่ตรงกัน +torlauncher.bootstrapWarning.timeout=หมดเวลาสำหรับการเชื่อมต่อ +torlauncher.bootstrapWarning.noroute=ไม่พบเส้นทางไปยัง host +torlauncher.bootstrapWarning.ioerror=อ่าน/เขียน ผิดพลาด +torlauncher.bootstrapWarning.pt_missing=ที่เสียบสำหรับการโอนถ่ายข้อมูลหายไป + +torlauncher.nsresult.NS_ERROR_NET_RESET=การเชื่อมต่อกับเซิร์ฟเวอร์หายไป +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=ไม่สามารถเชื่อมต่อกับพร็อกซี + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd new file mode 100644 index 000000000000..fd0df4611e85 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName;, "> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "kar amacı gütmeyen, çevrimiçi gizlilik ve özgürlüğünüzü koruyan"> +<!ENTITY project.end "&vendorShortName; tarafından geliştirilmiştir."> + +<!ENTITY help.start "Yardım etmek ister misiniz? "> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Bağışta bulunun"> +<!ENTITY help.or " ya da "> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "çalışmalarımıza katılın"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Sorularınız mı var?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Tor ağının büyümesine yardımcı olun!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Lisans bilgileri"> +<!ENTITY tor.TrademarkStatement "'Tor' ve 'Onion Logo' Tor Project, Inc. tarafından tescillenmiş markalardır."> diff --git a/toolkit/torbutton/chrome/locale/tr/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/tr/aboutTBUpdate.dtd new file mode 100644 index 000000000000..d003ba19ec61 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser değişiklik günlüğü"> +<!ENTITY aboutTBUpdate.updated "Tor Browser güncellendi."> +<!ENTITY aboutTBUpdate.linkPrefix "Bu sürüm hakkındaki güncel bilgileri "> +<!ENTITY aboutTBUpdate.linkLabel "web sitemizden alabilirsiniz"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Sürüm"> +<!ENTITY aboutTBUpdate.releaseDate "Yayım tarihi"> +<!ENTITY aboutTBUpdate.releaseNotes "Yayım notları"> diff --git a/toolkit/torbutton/chrome/locale/tr/aboutTor.dtd b/toolkit/torbutton/chrome/locale/tr/aboutTor.dtd new file mode 100644 index 000000000000..484bbadda84d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Tor hakkında"> + +<!ENTITY aboutTor.viewChangelog.label "Değişiklik günlüğünü görüntüle"> + +<!ENTITY aboutTor.ready.label "Keşfedin. Gizlice."> +<!ENTITY aboutTor.ready2.label "Dünyanın en kişisel web tarama deneyimine hazırsınız."> +<!ENTITY aboutTor.failure.label "Bir şeyler ters gitti!"> +<!ENTITY aboutTor.failure2.label "Tor bu tarayıcı ile çalışmıyor."> + +<!ENTITY aboutTor.search.label "DuckDuckGo ile arayın"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Sorularınız mı var?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Tor Browser rehberine bakabilirsiniz"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser rehberi"> + +<!ENTITY aboutTor.tor_mission.label "Tor Projesi, Birleşik Devletler 501(c)(3) vergi muafiyeti maddesi kapsamında, özgür ve açık kaynaklı anonimlik ve kişisel gizlilik teknolojileri geliştirerek insan hakları ve özgürlüklerini ileriye götürmek, bu teknolojilerin bilimsel ve kültürel olarak bilinirliğini arttırmak ve herkes tarafından erişebilmesini sağlamak amacıyla çalışan, kar amacı gütmeyen bir kuruluştur."> +<!ENTITY aboutTor.getInvolved.label "Katkıda bulunun »"> + +<!ENTITY aboutTor.newsletter.tagline "Tor gelişmeleri ile ilgili e-posta almak ister misiniz?"> +<!ENTITY aboutTor.newsletter.link_text "Tor duyurularına abone olun"> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor sizin gibi insanların bağışları ile desteklendiği için ücretsiz olarak kullanılabiliyor."> +<!ENTITY aboutTor.donationBanner.buttonA "Bağış yapın"> + +<!ENTITY aboutTor.alpha.ready.label "Deneyimleyin. Enine boyuna."> +<!ENTITY aboutTor.alpha.ready2.label "Dünyanın en kişisel web tarama deneyimini yaşamaya hazırsınız."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha, yeni özellikleri önceden görüp başarımlarını sınayabileceğiniz ve yayınlanmadan önce geri bildirim verebileceğiniz kararsız bir Tor Browser sürümüdür."> +<!ENTITY aboutTor.alpha.bannerLink "Hataları Tor forumunda bildirin"> + +<!ENTITY aboutTor.nightly.ready.label "Deneyimleyin. Enine boyuna."> +<!ENTITY aboutTor.nightly.ready2.label "Dünyanın en kişisel web tarama deneyimini yaşamaya hazırsınız."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly, yeni özellikleri önceden görüp başarımlarını sınayabileceğiniz ve yayınlanmadan önce geri bildirim verebileceğiniz kararsız bir Tor Browser sürümüdür."> +<!ENTITY aboutTor.nightly.bannerLink "Hataları Tor forumunda bildirin"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "KİŞİSEL GİZLİLİK SAĞLAR:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "DİRENİŞ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "DEĞİŞİM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "ÖZGÜRLÜK"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "BAĞIŞ YAPIN"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Friends of Tor, $100.000 tutarını aşmayan bağışlarınız kadar katkıda bulunacak."> diff --git a/toolkit/torbutton/chrome/locale/tr/brand.dtd b/toolkit/torbutton/chrome/locale/tr/brand.dtd new file mode 100644 index 000000000000..b41e95728b9a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Projesi"> +<!ENTITY trademarkInfo.part1 "'Tor' ve 'Onion Logo' Tor Project, Inc. tarafından tescil edilmiş markalardır."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor Browser"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Kurulmuş sistem uygulama eklerini yüklemek için tıklayın"> +<!ENTITY plugins.installed.enable "Uygulama eklerini etkinleştir"> +<!ENTITY plugins.installed.disable "Uygulama eklerini devre dışı bırak"> +<!ENTITY plugins.installed.disable.tip "Sistem uygulama eklerinin yüklenmesini önlemek için tıklayın"> diff --git a/toolkit/torbutton/chrome/locale/tr/brand.properties b/toolkit/torbutton/chrome/locale/tr/brand.properties new file mode 100644 index 000000000000..b0b05df74daa --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor Browser +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor Browser +vendorShortName=Tor Projesi + +homePageSingleStartMain=Firefox Start, içinde arama bulunan hızlı açılış sayfası +homePageImport=%S üzerinden açılış sayfanızı içe aktarın. + +homePageMigrationPageTitle=Açılış sayfası seçimi +homePageMigrationDescription=Lütfen kullanmak istediğiniz açılış sayfasını seçin: + +syncBrandShortName=Eşitleme diff --git a/toolkit/torbutton/chrome/locale/tr/branding/brand.ftl b/toolkit/torbutton/chrome/locale/tr/branding/brand.ftl new file mode 100644 index 000000000000..d77b5427cd3e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor Browser +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor Browser +-vendor-short-name = Tor Projesi +trademarkInfo = 'Tor' ve 'Onion Logo' Tor Project, Inc. tarafından tescil edilmiş markalardır. diff --git a/toolkit/torbutton/chrome/locale/tr/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/tr/browserOnboarding.properties new file mode 100644 index 000000000000..a0ef6b95814a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Hoş geldiniz +onboarding.tour-tor-welcome.title=Hazırsınız. +onboarding.tour-tor-welcome.description=Tor Browser, web üzerinde gezinirken en yükek standartlarda kişisel gizlilik ve güvelik sağlar. İzleme, gözetleme ve engellemeye karşı koruma sağlar. Nasıl olduğunu buradan hızlıca görebilirsiniz. +onboarding.tour-tor-welcome.next-button=Gizlilik + +onboarding.tour-tor-privacy=Kişisel gizlilik +onboarding.tour-tor-privacy.title=İzleyenlere ve meraklılara hadlerini bildirin. +onboarding.tour-tor-privacy.description=Tor Browser çerezleri yalıtır ve kapattığınızda web tarayıcı geçmişinizi siler. Bu değişiklikler web tarayıcı üzerinde kişisel gizliliğinizin ve güvenliğinizin korunmasını sağlar. Ağ düzeyinde nasıl koruma sağladığımızı öğrenmek için 'Tor Ağı' üzerine tıklayın. +onboarding.tour-tor-privacy.button=Tor ağına geç + +onboarding.tour-tor-network=Tor ağı +onboarding.tour-tor-network.title=Tek merkezden yönetilmeyen bir ağda gezinin. +onboarding.tour-tor-network.description=Tor Browser sizi dünyada binlerce gönüllü tarafından işletilen Tor ağına bağlar. VPN bağlantısının aksine, bir güvenlik açığı ya da İnternet üzerinde kişisel gizliliğinizi koruması için güvenmeniz gereken merkezi bir kuruluş yoktur. +onboarding.tour-tor-network.description-para2=YENİ: Tor Ağı Ayarları, Tor ağına erişimin engellendiği yerlerde köprü isteğinde bulunma özelliği artı Ayarlar bölümü altında bulunabilir. +onboarding.tour-tor-network.action-button=Tor ağı ayarlarınızı yapın +onboarding.tour-tor-network.button=Devre görünümüne geç + +onboarding.tour-tor-circuit-display=Devre görünümü +onboarding.tour-tor-circuit-display.title=Yolunuzu görün. +onboarding.tour-tor-circuit-display.description=Ziyaret ettiğiniz her web sitesi için bağlantınız, dünya üzerindeki üç Tor aktarıcısından oluşan bir devre kurularak şifrelenir ve aktarılır. Hiç bir web sitesi sizin gerçekte nereden bağlandığınızı bilemez. Kullandığınız devreyi değiştirmek için Devre Görünümünde "Sitenin devresini yenile" üzerine tıklayın. +onboarding.tour-tor-circuit-display.button=Yolumu göster +onboarding.tour-tor-circuit-display.next-button=Güvenlik + +onboarding.tour-tor-security=Güvenlik +onboarding.tour-tor-security.title=Deneyiminizi özelleştirin. +onboarding.tour-tor-security.description=Ek ayarları kullanarak web tarayıcınızın güvenliğini arttırabilirsiniz. Güvenlik Düzeyi Ayarı bilgisayarınıza saldırmak için kullanılabilecek bileşenleri engellemenizi sağlar. Seçeneklerinizi görebilmek için aşağıya tıklayın. +onboarding.tour-tor-security.description-suffix=Not: NoScript ve HTTPS Everywhere varsayılan olarak araç çubuğuna eklenmez. Araç çubuğunu özelleştirerek onları ekleyebilirsiniz. +onboarding.tour-tor-security-level.button=Güvenlik düzeyinize bakın +onboarding.tour-tor-security-level.next-button=Deneyim ipuçları + +onboarding.tour-tor-expect-differences=Deneyim puçları +onboarding.tour-tor-expect-differences.title=Bazı farklılıklara açık olun. +onboarding.tour-tor-expect-differences.description=Tor tarafından sağlanan tüm kişisel gizlilik ve güvenlik özellikleri nedeniyle İnternet üzerinde gezinme deneyiminiz biraz farklı olabilir. Sayfalar biraz yavaş olabilir ve kullandığınız güvenlik düzeyine göre bazı bileşenler yüklenmeyebilir ya da çalışmayabilir. Ayrıca bir insan mı robot mu olduğunuzu kanıtlamanız istenebilir. +onboarding.tour-tor-expect-differences.button=Sık sorulan sorulara bakın +onboarding.tour-tor-expect-differences.next-button=Onion hizmetleri + +onboarding.tour-tor-onion-services=Onion hizmetleri +onboarding.tour-tor-onion-services.title=Ek koruma sağlayın. +onboarding.tour-tor-onion-services.description=Onion hizmetleri, yayıncılar ile ziyaretçiler için ek güvenlik ve engellemeleri aşmak için koruma sağlayan, sonu .onion uzantısı ile biten web siteleridir. Onion hizmetleri sayesinde isteyen herkes anonim olarak içerik ve hizmet sunabilir. DuckDuckGo onion sitesini ziyaret etmek için aşağıya tıklayabilirsiniz. +onboarding.tour-tor-onion-services.button=Bir Onion sitesine Gidin +onboarding.tour-tor-onion-services.next-button=Bitti + +onboarding.overlay-icon-tooltip-updated2=%S\nyeniliklerine bakın +onboarding.tour-tor-update.prefix-new=Yeni +onboarding.tour-tor-update.prefix-updated=Güncellendi + +onboarding.tour-tor-toolbar=Araç çubuğu +onboarding.tour-tor-toolbar-update-9.0.title=Soğan düğmesine veda edin. +onboarding.tour-tor-toolbar-update-9.0.description=Tor işlemlerini tamamen Tor Browser ile yapabilmenizi istiyoruz. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Bu nedenle, artık soğan düğmesini kullanmak yerine adres çubuğundaki [i] simgesine tıklayarak Tor Devresini görebilir, araç çubuğu düğmesini ya da [≡] menüsünü kullanarak Yeni Kimlik isteğinde bulunabilirsiniz. +onboarding.tour-tor-toolbar-update-9.0.button=Nasıl yeni kimlik isteğinde bulunacaksınız +onboarding.tour-tor-toolbar-update-9.0.next-button=Tor ağına geç + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Sonraki +onboarding.tor-circuit-display.done=Bitti +onboarding.tor-circuit-display.one-of-three=1/3 +onboarding.tor-circuit-display.two-of-three=2/3 +onboarding.tor-circuit-display.three-of-three=3/3 + +onboarding.tor-circuit-display.intro.title=Devreler nasıl çalışır? +onboarding.tor-circuit-display.intro.msg=Devreler, dünya çapında Tor trafiğini aktarmak üzere yapılandırılmış bilgisayarlar olan rastgele atanmış aktarıcılardan oluşur. Devrelerde kişisel gizliliğinizi koruyarak gezinebilir ve onion hizmetleri ile bağlantı kurabilirsiniz. + +onboarding.tor-circuit-display.diagram.title=Devre görünümü +onboarding.tor-circuit-display.diagram.msg=Bu web sitesinin devresinde kullanılan aktarıcılar bu şemada görülebilir. Farklı web siteleri arasında yapılan işlemler arasında bağlantı kurulmasını engellemek için her web sitesinde farklı bir devre kullanılır. + +onboarding.tor-circuit-display.new-circuit.title=Yeni bir devre mi gerekli? +onboarding.tor-circuit-display.new-circuit.msg=Ziyaret etmeye çalıştığınız web sitesi ile bağlantı kuramıyorsanız ya da site düzgün bir şekilde yüklenmiyorsa, siteyi yeni bir devre kullanarak yeniden yüklemek için bu düğmeyi kullanabilirsiniz. diff --git a/toolkit/torbutton/chrome/locale/tr/network-settings.dtd b/toolkit/torbutton/chrome/locale/tr/network-settings.dtd new file mode 100644 index 000000000000..9ab4de95d07a --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor ağı ayarları"> +<!ENTITY torsettings.wizard.title.default "Tor ağı ile bağlantı kurun"> +<!ENTITY torsettings.wizard.title.configure "Tor ağı ayarları"> +<!ENTITY torsettings.wizard.title.connecting "Bağlantı kuruluyor"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Browser dili"> +<!ENTITY torlauncher.localePicker.prompt "Lütfen bir dil seçin."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Tor ağı ile bağlantı kurmak için "Bağlantı kur" üzerine tıklayın."> +<!ENTITY torSettings.configurePrompt "Tor ağı ile bağlantı kurulmasını engelleyen bir ülkede bulunuyorsanız (Çin, İran, Suriye gibi) ya da vekil sunucu kullanılması gereken özel bir ağdan bağlantı kuruyorsanız, ağ ayarlarını yapmak için "Yapılandır" üzerine tıklayın."> +<!ENTITY torSettings.configure "Yapılandır"> +<!ENTITY torSettings.connect "Bağlantı kur"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Tor uygulamasının başlaması bekleniyor…"> +<!ENTITY torsettings.restartTor "Tor uygulamasını yeniden başlat"> +<!ENTITY torsettings.reconfigTor "Yeniden yapılandır"> + +<!ENTITY torsettings.discardSettings.prompt "Tor Köprülerini yapılandırdınız ya da yerel vekil sunucu ayarları girdiniz.  Tor ağı ile doğrudan bağlantı kurmak için bu ayarlar kaldırılmalıdır."> +<!ENTITY torsettings.discardSettings.proceed "Ayarları kaldır ve bağlantı kur"> + +<!ENTITY torsettings.optional "İsteğe bağlı"> + +<!ENTITY torsettings.useProxy.checkbox "İnternet bağlantısı kurmak için bir vekil sunucu kullanıyorum"> +<!ENTITY torsettings.useProxy.type "Vekil sunucu türü"> +<!ENTITY torsettings.useProxy.type.placeholder "vekil sunucu türünü seçin"> +<!ENTITY torsettings.useProxy.address "Adres"> +<!ENTITY torsettings.useProxy.address.placeholder "IP adresi ya da sunucu adı"> +<!ENTITY torsettings.useProxy.port "Bağlantı noktası"> +<!ENTITY torsettings.useProxy.username "Kullanıcı adı"> +<!ENTITY torsettings.useProxy.password "Parola"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Bu bilgisayarda yalnızca belirli bağlantı noktalarından bağlantı kurulmasına izin veren bir güvenlik duvarı bulunuyor"> +<!ENTITY torsettings.firewall.allowedPorts "Kullanılabilecek bağlantı noktaları"> +<!ENTITY torsettings.useBridges.checkbox "Bulunduğum ülkede Tor ağı engelleniyor"> +<!ENTITY torsettings.useBridges.default "Bir hazır köprü seçin"> +<!ENTITY torsettings.useBridges.default.placeholder "bir köprü seçin"> +<!ENTITY torsettings.useBridges.bridgeDB "torproject.org üzerinden köprü istensin"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Görseldeki karakterleri yazın"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Yeni bir güvenlik kodu isteyin"> +<!ENTITY torsettings.useBridges.captchaSubmit "Gönder"> +<!ENTITY torsettings.useBridges.custom "Bildiğim bir köprüyü kullanacağım"> +<!ENTITY torsettings.useBridges.label "Güvenli bir kaynaktan aldığınız köprü bilgilerini yazın."> +<!ENTITY torsettings.useBridges.placeholder "adres:bağlantı noktası şeklinde yazın (her satıra bir tane)"> + +<!ENTITY torsettings.copyLog "Tor günlüğünü panoya kopyala"> + +<!ENTITY torsettings.proxyHelpTitle "Vekil sunucu yardımı"> +<!ENTITY torsettings.proxyHelp1 "Bir kurum, okul ya da üniversite ağı aracılığıyla bağlantı kurarken yerel bir vekil sunucu gereklidir. Bir vekil sunucu kullanıp kullanmamanız gerektiğinden emin değilseniz, bilgisayarınızın ağa bağlantı şeklini anlamak için aynı ağdaki başka bir web tarayıcısının İnternet ayarlarına bakın ya da sisteminizin ağ ayarlarını gözden geçirin."> + +<!ENTITY torsettings.bridgeHelpTitle "Köprü aktarıcı yardımı"> +<!ENTITY torsettings.bridgeHelp1 "Köprüler, Tor ağı ile bağlantı kurulmasının engellenmesini zorlaştıran ve herkese açık olarak listelenmeyen aktarıcılardır.  Her köprü türü engellemeden kaçınmak için farklı bir yöntem kullanır.  Obfs köprüleri, ağ trafiğinizi rastgele gürültü gibi gösterir. Meek köprüleri ise, trafiğinizi Tor ağı ile değil o hizmet ile bağlantı kurulmuş gibi gösterir."> +<!ENTITY torsettings.bridgeHelp2 "Bazı ülkelerin Tor ağını engellemeye çalışması nedeniyle bazı köprüler bazı ülkelerde çalışırken başka ülkelerde çalışmayabilir.  Ülkenizde hangi köprülerin çalışacağından emin değilseniz, torproject.org/about/contact.html#support adresine bakabilirsiniz."> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Lütfen Tor ağı ile bağlantı kurulurken bekleyin. Bu işlem birkaç dakika sürebilir."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Bağlantı"> +<!ENTITY torPreferences.torSettings "Tor ayarları"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser sizi dünyada binlerce gönüllü tarafından işletilen Tor ağına bağlar." > +<!ENTITY torPreferences.learnMore "Ayrıntılı bilgi alın"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Sınama"> +<!ENTITY torPreferences.statusInternetOnline "Çevrimiçi"> +<!ENTITY torPreferences.statusInternetOffline "Çevrimdışı"> +<!ENTITY torPreferences.statusTorLabel "Tor ağı:"> +<!ENTITY torPreferences.statusTorConnected "Bağlantı kuruldu"> +<!ENTITY torPreferences.statusTorNotConnected "Bağlantı kurulmamış"> +<!ENTITY torPreferences.statusTorBlocked "Olası engelleme"> +<!ENTITY torPreferences.learnMore "Ayrıntılı bilgi alın"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Hızlı başlatma"> +<!ENTITY torPreferences.quickstartDescriptionLong "Hızlı başlatma özelliği, Tor Browser uygulamasının, başlatıldığında, son kullanılan bağlantı ayarları ile Tor ağına otomatik olarak bağlanmasını sağlar."> +<!ENTITY torPreferences.quickstartCheckbox "Bağlantı her zaman otomatik olarak kurulsun"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Köprüler"> +<!ENTITY torPreferences.bridgesDescription "Köprüler Tor bağlantısının engellendiği yerlerden Tor ağına erişmek için kullanılır.. Bulunduğunuz konuma göre bir köprü türü diğerinden daha uygun olabilir."> +<!ENTITY torPreferences.bridgeLocation "Konumunuz"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Otomatik"> +<!ENTITY torPreferences.bridgeLocationFrequent "Sık seçilen konumlar"> +<!ENTITY torPreferences.bridgeLocationOther "Diğer konumlar"> +<!ENTITY torPreferences.bridgeChooseForMe "Benim için bir köprü seç…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Geçerli köprüleriniz"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "Bir ya da daha fazla köprü kaydedebilirsiniz. Bağlantı kurduğunuzda Tor hangisini kullanacağını seçer ve gerektiğinde otomatik olarak bir başka köprüye geçebilir."> +<!ENTITY torPreferences.bridgeId "#1 köprü: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Kaldır"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Hazır köprüler kullanılmasın"> +<!ENTITY torPreferences.bridgeShare "QR kodunu kullanarak ya da köprü satırını kopyalayarak bu köprüyü paylaşın."> +<!ENTITY torPreferences.bridgeCopy "Köprü adresini kopyala"> +<!ENTITY torPreferences.copied "Kopyalandı!"> +<!ENTITY torPreferences.bridgeShowAll "Tüm köprüleri görüntüle"> +<!ENTITY torPreferences.bridgeRemoveAll "Tüm köprüleri sil"> +<!ENTITY torPreferences.bridgeAdd "Yeni köprü ekle"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Bir Tor Browser köprüsü kullanılsın"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Bir hazır köprü seçin…"> +<!ENTITY torPreferences.bridgeRequest "Köprü isteğinde bulun…"> +<!ENTITY torPreferences.bridgeEnterKnown "Bildiğim bir köprüyü yazacağım"> +<!ENTITY torPreferences.bridgeAddManually "El ile köprü ekle…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Gelişmiş"> +<!ENTITY torPreferences.advancedDescription "Tor Browser uygulamasının İnternet bağlantısını yapılandırın"> +<!ENTITY torPreferences.advancedButton "Ayarlar…"> +<!ENTITY torPreferences.viewTorLogs "Tor günlüğü kayıtlarına bakın"> +<!ENTITY torPreferences.viewLogs "Günlüğü görüntüle…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Tüm köprüler silinsin mi?"> +<!ENTITY torPreferences.removeBridgesWarning "Bu işlem geri alınamaz."> +<!ENTITY torPreferences.cancel "İptal"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "QR kodunu tarayın"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Hazır köprüler"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser içinde "değiştirilebilir taşıyıcılar" olarak bilinen bazı özel köprü türleri bulunur."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 Tor trafiğinizi rastgele gibi gösteren bir hazır köprü türüdür. Önceki sürümü olan obfs3 köprülerine göre engellenme olasılıkları daha düşüktür."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake, sansürü aşmak için bağlantınızı gönüllüler tarafından işletilen Snowflake vekil sunucuları üzerinden yönelten bir hazır köprüdür."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure Tor yerine bir Microsoft web sitesi kullanıyormuşsunuz gibi gösteren bir hazır köprüdür."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Köprü isteğinde bulunun"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Köprü veritabanı ile bağlantı kuruluyor. Lütfen bekleyin."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Köprü isteğinde bulunmak için güvenlik denetimini geçin."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Çözüm doğru değil. Lütfen yeniden deneyin."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Köprüyü yazın"> +<!ENTITY torPreferences.provideBridgeHeader "Güvenilir bir kaynaktan aldığınız köprü bilgilerini yazın"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Bağlantı ayarları"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Tor Browser için internet bağlantısını yapılandırın"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Virgül ile ayrılmış değerler"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor günlüğü kayıtları"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Bağlantı kurulmamış"> +<!ENTITY torConnect.connectingConcise "Bağlantı kuruluyor…"> +<!ENTITY torConnect.tryingAgain "Yeniden deneniyor…"> +<!ENTITY torConnect.noInternet "Tor Browser İnternet bağlantısı kuramadı"> +<!ENTITY torConnect.noInternetDescription "Bunun nedeni Tor bağlantısının engellenmesi yerine bir bağlantı sorunu olabilir. Yeniden denemeden önce İnternet bağlantınızı, vekil sunucu ve güvenlik duvarı ayarlarınızı denetleyin."> +<!ENTITY torConnect.couldNotConnect "Tor Browser Tor ağı ile bağlantı kuramadı"> +<!ENTITY torConnect.assistDescriptionConfigure "bağlantınızı yapılandırın"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Bulunduğunuz konumda Tor ağı engelleniyorsa, bir köprü kullanmak işe yarayabilir. Bağlantı yardımcısı ile konumunuzu kullanarak bir köprü belirleyebilir ya da birinciyi el ile seçebilirsiniz."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Bir köprü deneniyor..."> +<!ENTITY torConnect.tryingBridgeAgain "Bir kez daha deneniyor…"> +<!ENTITY torConnect.errorLocation "Tor Browser konumunuzu öğrenemedi"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser sizin için doğru köprüyü belirlemek amacıyla konumunuzu öğrenmek istiyor. Konumunuzu belirtmek istemiyorsanız birinciyi el ile seçin."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Bu konum bilgileri doğru mu?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser hala Tor ağı ile bağlantı kuramıyor. Lütfen konum ayarlarınızın doğru olduğunu denetleyip yeniden deneyin ya da #1. "> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser hala bağlantı kuramıyor"> +<!ENTITY torConnect.finalErrorDescription "Tüm çabalarına rağmen, bağlantı yardımı Tor ile bağlantı kuramadı. Bağlantınızda olabilecek sorunlara bakın ve el ile bir köprü eklemeyi deneyin."> +<!ENTITY torConnect.breadcrumbAssist "Bağlantı yardımcısı"> +<!ENTITY torConnect.breadcrumbLocation "Konum ayarları"> +<!ENTITY torConnect.breadcrumbTryBridge "Bir köprü deneyin"> +<!ENTITY torConnect.automatic "Otomatik"> +<!ENTITY torConnect.selectCountryRegion "Ülke ya da bölgeyi seçin"> +<!ENTITY torConnect.frequentLocations "Sık seçilen konumlar"> +<!ENTITY torConnect.otherLocations "Diğer konumlar"> +<!ENTITY torConnect.restartTorBrowser "Tor Browser uygulamasını yeniden başlat"> +<!ENTITY torConnect.configureConnection "Bağlantıyı yapılandır…"> +<!ENTITY torConnect.viewLog "Günlüğü görüntüle..."> +<!ENTITY torConnect.tryAgain "Yeniden dene"> +<!ENTITY torConnect.offline "İnternet bağlantısı kurulamadı"> +<!ENTITY torConnect.connectMessage "Bağlantı kurulana kadar Tor ayarlarında yapılan değişiklikler etkili olmayacak"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser, Tor ağı ile bağlantı kuramadı"> +<!ENTITY torConnect.yourLocation "Konumunuz"> +<!ENTITY torConnect.tryBridge "Bir köprü deneyin"> +<!ENTITY torConnect.autoBootstrappingFailed "Otomatik olarak yapılandırılamadı"> +<!ENTITY torConnect.autoBootstrappingFailed "Otomatik olarak yapılandırılamadı"> +<!ENTITY torConnect.cannotDetermineCountry "Kullanıcının ülkesi belirlenemedi"> +<!ENTITY torConnect.noSettingsForCountry "Konumunuz için kullanılabilecek bir ayar bulunamadı"> diff --git a/toolkit/torbutton/chrome/locale/tr/onboarding.properties b/toolkit/torbutton/chrome/locale/tr/onboarding.properties new file mode 100644 index 000000000000..a1f4748819dc --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Yeni bir %S kullanıcısı mısınız?\nHadi başlayalım. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S yenilendi!\nNeler yapabileceğinize birlikte bakalım. +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Kapat +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Kapat +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Tamamlandı diff --git a/toolkit/torbutton/chrome/locale/tr/torbutton.dtd b/toolkit/torbutton/chrome/locale/tr/torbutton.dtd new file mode 100644 index 000000000000..1612d5d1e664 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Kimliği yenile"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Kimliği yenile"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Sitenin devresini yenile"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Sitenin devresini yenile"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor ağı ayarları..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Tor Browser güncelleme denetimi..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Çerez koruması..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Torbutton uygulamasını başlatmak için tıklayın"> +<!ENTITY torbutton.prefs.security_settings "Tor Browser güvenlik düzeyi ayarı"> +<!ENTITY torbutton.cookiedialog.title "Çerez koruması yönetimi"> +<!ENTITY torbutton.cookiedialog.lockCol "Korunmuş"> +<!ENTITY torbutton.cookiedialog.domainCol "Sunucu"> +<!ENTITY torbutton.cookiedialog.nameCol "Ad"> +<!ENTITY torbutton.cookiedialog.pathCol "Yol"> +<!ENTITY torbutton.cookiedialog.protectCookie "Çerezi koru"> +<!ENTITY torbutton.cookiedialog.removeCookie "Çerezi sil"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Çerez korumasını kaldır"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Korunanlar dışında tümünü sil"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Yeni çerezler korunsun"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Yeni çerezler korunmasın"> +<!ENTITY torbutton.prefs.sec_caption "Güvenlik düzeyi"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Güvenlik ayarı ile belirli web tarayıcı özeliklerini kapatabilirsiniz. Ancak bu durumda web tarayıcınız saldırılara karşı daha korumasız olur."> +<!ENTITY torbutton.prefs.sec_standard_label "Standart"> +<!ENTITY torbutton.prefs.sec_standard_description "Tüm Tor Browser ve web sitesi özellikleri kullanılabilir."> +<!ENTITY torbutton.prefs.sec_safer_label "Daha güvenli"> +<!ENTITY torbutton.prefs.sec_safer_description "Sıklıkla tehlikeli olan web sitesi özellikleri devre dışı bırakılır ve bazı sitelerin işlevlerinde kayıplar olabilir. "> +<!ENTITY torbutton.prefs.sec_safer_list_label "Daha güvenli ayarlar kullanıldığında:"> +<!ENTITY torbutton.prefs.sec_safest_label "En güvenli"> +<!ENTITY torbutton.prefs.sec_safest_description "Yalnız durağan siteler ve temel hizmetler için gerekli web sitesi özelliklerine izin verilir. Bu değişiklikler görselleri, ortamları ve betikleri etkiler."> +<!ENTITY torbutton.prefs.sec_safest_list_label "En güvenli ayarlar kullanıldığında:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Ayrıntılı bilgi alın"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript, HTTPS kullanmayan sitelerde devre dışı bırakılır."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript betikleri tüm sitelerde varsayılan olarak devre dışı bırakılır."> +<!ENTITY torbutton.prefs.sec_limit_typography "Bazı yazı türleri ve matematik simgeleri devre dışı bırakılır."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Bazı yazı türleri, simgeler, matematik simgeleri ve görseller devre dışı bırakılır."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Ses ve görüntü (HTML5 ortamı) ve WebGL tıklayıp oynatılabilir."> +<!ENTITY torbutton.prefs.sec_custom_warning "Özel"> +<!ENTITY torbutton.prefs.sec_overview "Güvenlik ve anonimliğinize saldırmak için kullanılacak belirli web özelliklerini devre dışı bırakır."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Güvenlik düzeyi : Standart"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Güvenlik düzeyi : Daha güvenli"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Güvenlik düzeyi : En güvenli"> +<!ENTITY torbutton.prefs.sec_custom_summary "Tarayıcınız standart olmayan özel güvenlik düzeyi ayarları kullanıyor. Güvenlik ve gizliliğinizi korumak için aşağıdaki varsayılan güvenlik ayarı düzeylerinden birini seçmeniz önerilir."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Varsayılanları yükle"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Gelişmiş güvenlik düzeyi ayarları…"> +<!ENTITY torbutton.prefs.sec_change "Değiştir…"> +<!ENTITY torbutton.circuit_display.title "Tor devresi"> +<!ENTITY torbutton.circuit_display.new_circuit "Sitenin devresini yenile"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Onion hizmeti istemi kimlik doğrulama penceresini aç"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Bu anahtar anımsansın"> diff --git a/toolkit/torbutton/chrome/locale/tr/torbutton.properties b/toolkit/torbutton/chrome/locale/tr/torbutton.properties new file mode 100644 index 000000000000..6a3b41bfcdf4 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = İnternet +torbutton.circuit_display.ip_unknown = IP bilinmiyor +torbutton.circuit_display.onion_site = Onion sitesi +torbutton.circuit_display.this_browser = Bu tarayıcı +torbutton.circuit_display.relay = Aktarıcı +torbutton.circuit_display.tor_bridge = Köprü +torbutton.circuit_display.unknown_country = Ülke bilinmiyor +torbutton.circuit_display.guard = Koruma +torbutton.circuit_display.guard_note = [Koruma] aktarıcısı değiştirilemez. +torbutton.circuit_display.learn_more = Ayrıntılı bilgi alın +torbutton.circuit_display.click_to_copy = Kopyalamak için tıklayın +torbutton.circuit_display.copied = Kopyalandı! +torbutton.content_sizer.margin_tooltip = Tor Browser pencerenizin genişlik ve yüksekliğini daha az ayırt edilebilir duruma getirmek için kenar boşlukları ekleyerek kişilerin sizi çevrim içi olarak izleme yeteneğini azaltır. +extensions.torbutton@torproject.org.description = Torbutton, Tor ayarlarını yapabileceğiniz ve kişisel tarama verilerinizi hızla ve kolayca silebileceğiniz bir düğme görüntüler. +torbutton.popup.external.title = Bir dış dosya türü indirilsin mi? +torbutton.popup.external.app = Tor Browser bu dosyayı görüntüleyemiyor. Başka bir uygulamayla açmanız gerekecek.\n +torbutton.popup.external.note = Bazı dosya türleri uygulamaların Tor kullanmadan İnternet bağlantısı kurmasına neden olabilir.\n +torbutton.popup.external.suggest = Güvende olmak için, indirilen dosyaları yalnız çevrimdışı iken açmalı ya da Tails benzeri bir Canlı Tor CD ortamı kullanmalısınız.\n +torbutton.popup.launch = Dosyayı indir +torbutton.popup.cancel = İptal\n +torbutton.popup.dontask = Bundan sonra dosyalar otomatik indirilsin +torbutton.popup.no_newnym = Torbutton size yeni bir güvenli kimlik sağlayamadı. Tor denetim bağlantı noktasına erişilemedi.\n\nTor Browser Bundle uygulamasını çalıştırdığınızdan emin olun. +torbutton.security_settings.menu.title = Güvenlik düzeyi ayarı +torbutton.title.prompt_torbrowser = Önemli Torbutton bilgileri +torbutton.popup.prompt_torbrowser = Torbutton şimdi farklı çalışıyor: artık kapatamıyorsunuz.\n\nBu değişikliği yapmamızın nedeni Tor dışında kullanılan başka bir tarayıcıda Torbutton kullanmanın güvenli olmaması. Başka türlü çözemeyeceğimiz birçok sorun vardı.\n\nFirefox tarayıcısını normal olarak kullanmak istiyorsanız, Torbutton uygulamasını kaldırıp Tor Browser Bundle paketini indirebilirsiniz. Tor Browser kişisel gizliliği koruma özellikleri normal Firefox tarayıcısına, hatta Torbut [...] +torbutton.popup.short_torbrowser = Önemli Torbutton Bilgileri!\n\nTorbutton artık kapatılamayacak şekilde etkinleştirildi.\n\nAyrıntılı bilgi almak için Torbutton üzerine tıklayın. + +torbutton.popup.confirm_plugins = Flash gibi eklentiler gizliliğinizi ve anonim kimliğinizi zedeleyebilir.\n\nBu eklentiler Tor uygulamasını atlatarak geçerli konum ve IP adresinizi ortaya çıkarabilir.\n\nBu eklentileri etkinleştirmek istediğinize emin misiniz?\n +torbutton.popup.never_ask_again = Bir daha sorma +torbutton.popup.confirm_newnym = Tor Browser tüm sekme ve pencereleri kapatacak. Tüm web sitesi oturumları kaybolacak.\n\nKimliğinizi sıfırlamak için Tor Browser yeniden başlatılsın mı?\n + +torbutton.maximize_warning = Tor Browser görüntüsünün tüm ekranı kaplaması, ekran boyutunuzun web siteleri tarafından öğrenilmesini ve bu bilginin sizi izlemek için kullanılmasını sağlayabilir. Tor Browser pencerelerini özgün varsayılan boyutlarında bırakmanız önerilir. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Bu web sitesi (%S) bilgisayarınızı benzersiz olarak tanımlayabilmek için kullanılabilen HTML5 tuvalindeki görsel verilerine erişmeye çalıştı.\n\nTor Browser bu web sitesine HTML5 tuval, görsel verisini göndersin mi? +canvas.notNow=Şimdi değil +canvas.notNowAccessKey=N +canvas.allow=İleride izin verilsin +canvas.allowAccessKey=A +canvas.never=Bu site için asla (önerilir) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S profili sorunu +profileReadOnly=%S salt okunur bir dosya sisteminden çalıştırılamaz. Lütfen kullanmadan önce %S uygulamasını farklı bir konuma kopyalayın. +profileReadOnlyMac=%S salt okunur bir dosya sisteminden çalıştırılamaz. Lütfen kullanmadan önce %S uygulamasını Masaüstü veya Uygulamalar klasörüne kopyalayın. +profileAccessDenied=%S, profilinize erişemiyor. Lütfen dosya sistemi izinlerini ayarlayarak yeniden deneyin. +profileMigrationFailed=Var olan %S profiliniz aktarılamadı.\nYeni ayarlar kullanılacak. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=%S güncellemesi indiriliyor + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Bağlantı şifreli (Onion hizmeti, %1$S, %2$S bit anahtarlar, %3$S) +pageInfo_OnionEncryption=Bağlantı şifreli (Onion hizmeti) +pageInfo_OnionName=Onion adı: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Ayrıntılı bilgi alın +onionServices.errorPage.browser=Tarayıcı +onionServices.errorPage.network=Ağ +onionServices.errorPage.onionSite=Onion sitesi +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.descNotFound.header=Onion sitesi bulunamadı +onionServices.descNotFound=Onion sitesi büyük olasılıkla çevrimdışı. Onion sitesinin yöneticisi ile görüşün. +onionServices.descNotFound.longDescription=Ayrıntılar: %S — İstenilen onion hizmetinin tanımlayıcısı karma kitaplığında bulunamadı. Bu nedenle hizmete istemci tarafından erişlemiyor. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.descInvalid.header=Onion sitesine erişilemedi +onionServices.descInvalid=Bir iç hata nedeniyle onion sitesine erişilemiyor. +onionServices.descInvalid.longDescription=Ayrıntılar: %S — İstenilen onion hizmetinin tanımlayıcısı işlenemedi ya da imza doğrulanamadı. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.introFailed.header=Onion sitesinin bağlantısı kesildi +onionServices.introFailed=Onion sitesi büyük olasılıkla çevrimdışı. Onion sitesinin yöneticisi ile görüşün. +onionServices.introFailed.longDescription=Ayrıntılar: %S — Giriş tamamlanamadı. Tanımlayıcı bulunmuş olsa da hizmet artık bu giriş noktasına bağlı değil. Büyük olasılıkla hizmet ya tanımlayıcısını değiştirdi ya da şu anda çalışmıyor. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.rendezvousFailed.header=Onion sitesi ile bağlantı kurulamadı +onionServices.rendezvousFailed=Onion sitesi meşgul ya da Tor ağının yükü fazla. Daha sonra yeniden deneyin. +onionServices.rendezvousFailed.longDescription=Ayrıntılar: %S — İstemci hizmet ile görüşmeyi başlatamadı. Bu durum istemcinin bağlantı kurulumunu tamamlayamadığı anlamına gelir. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Kimlik doğrulaması gerekli +onionServices.clientAuthMissing.header=Onion sitesi kimlik doğrulaması istiyor +onionServices.clientAuthMissing=Onion sitesine erişmek için bir anahtar gerekiyor ancak herhangi bir anahtar belirtilmemiş.. +onionServices.clientAuthMissing.longDescription=Ayrıntılar: %S — İstemci istenilen onion hizmeti tanımlayıcısını indirdi ancak istemci kimlik doğrulama bilgileri eksik olduğundan, içeriğin şifresini çözemedi. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Kimlik doğrulanamadı +onionServices.clientAuthIncorrect.header=Onion sitesinde kimlik doğrulanamadı +onionServices.clientAuthIncorrect=Belirtilen anahtar hatalı ya da kullanımdan kaldırılmış. Onion sitesinin yöneticisi ile görüşün. +onionServices.clientAuthIncorrect.longDescription=Ayrıntılar: %S — İstemci istenilen onion hizmeti tanımlayıcısını indirebildi ancak belirtilen kimlik doğrulama bilgisi ile içeriğinin şifresini çözemedi. Bu durum erişimin kaldırıldığı anlamına gelebilir. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.badAddress.header=Onion sitesi adresi geçersiz +onionServices.badAddress=Belirtilen onion sitesi adresi geçersiz. Lütfen adresi doğru yazdığından emin olun. +onionServices.badAddress.longDescription=Ayrıntılar: %S — Belirtilen .onion adresi geçersiz. Bu hata şunlardan dolayısıyla görülür: Adres sağlaması doğru değil, ed25519 herkese açık anahtarı geçersiz ya da kodlama geçersiz. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Onion sitesi yüklenirken sorun çıktı +onionServices.introTimedOut.header=Onion sitesi devresi oluşturulurken zaman aşımı +onionServices.introTimedOut=Onion sitesi ile bağlantı kurulamadı. Büyük olasılıkla ağ bağlantısı kötü. +onionServices.introTimedOut.longDescription=Ayrıntılar: %S — İstenilen onion hizmeti ile görüşme devresi kurulurken işlem zaman aşımına uğradı. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S kimliğinizi doğrulamanıza gerek duyuyor. +onionServices.authPrompt.keyPlaceholder=Bu Onion hizmeti için kişisel anahtarınızı yazın +onionServices.authPrompt.done=Tamam +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Lütfen geçerli bir anahtar yazın (52 base32 karakteri ya da 44 base64 karakteri) +onionServices.authPrompt.failedToSetKey=Tor, anahtarınız ile yapılandırılamadı +onionServices.authPreferences.header=Onion hizmetleri kimlik doğrulaması +onionServices.authPreferences.overview=Bazı onion hizmetleri ne erişmek için bir anahtar (bir tür parola) kullanarak kimliğinizi belirtmeniz gerekir. +onionServices.authPreferences.savedKeys=Kaydedilmiş anahtarlar… +onionServices.authPreferences.dialogTitle=Onion hizmeti anahtarları +onionServices.authPreferences.dialogIntro=Bilgisayarınıza şu onion siteleri için kayıtlı anahtarlar var +onionServices.authPreferences.onionSite=Onion sitesi +onionServices.authPreferences.onionKey=Anahtar +onionServices.authPreferences.remove=Sil +onionServices.authPreferences.removeAll=Tümünü sil +onionServices.authPreferences.failedToGetKeys=Anahtarlar Tor üzerinden alınamadı +onionServices.authPreferences.failedToRemoveKey=Anahtar silinemedi +onionServices.v2Deprecated.pageTitle=2. sürüm Onion sitelerinin kullanımdan kaldırılması uyarısı +onionServices.v2Deprecated.header=2. sürüm Onion siteleri yakında kullanımdan kaldırılacak +onionServices.v2Deprecated=Bu onion sitesine yakında erişilemeyecek. Lütfen site yöneticisine onion hizmetini yükseltmesini bildirin. +onionServices.v2Deprecated.longDescription=Tor, 2021 Temmuz ayından başlayarak onion hizmetlerinin 2. sürümüne destek vermeyi bırakacak. O nedenle bu onion sitesine bu adresten erişilemeyecek. Sitenin yöneticisi iseniz en kısa zamanda onion hizmetini 3. sürüme yükseltin. +onionServices.v2Deprecated.tryAgain=Anladım +onionServices.v2Deprecated.tooltip=Bu onion sitesine yakında erişilemeyecek + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Onion sitelerine öncelik verilsin +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=Şimdi değil +onionLocation.notNowAccessKey=n +onionLocation.description=Bu sitenin Tor ağı üzerinde onion hizmetleri ile sunulan daha özel ve güvenli bir sürümü var. Onion hizmetleri web sitesi yayıncıları ve ziyaretçilerinin sansürden ve izlenmekten kaçınmasına yardımcı olur. +onionLocation.tryThis=Onion hizmetlerini deneyin +onionLocation.onionAvailable=.onion sitesi var +onionLocation.learnMore=Ayrıntılı bilgi alın… +onionLocation.always=Her zaman +onionLocation.askEverytime=Her defasında sorulsun +onionLocation.prioritizeOnionsDescription=Bilindiğinde .onion sitelerine öncelik verilsin. +onionLocation.onionServicesTitle=Onion hizmetleri + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Güvenli olmayan bir web sitesinden bir kripto para birimi adresi (%S) kopyalandı. Adres değiştirilmiş olabilir. +cryptoSafetyPrompt.whatCanHeading=Bu konuda ne yapabilirsiniz? +cryptoSafetyPrompt.whatCanBody=Güvenli bir bağlantı kurmak için bağlantı devresini yenilemeyi deneyebilir ya da riski kabul ederek bu uyarıyı yok sayabilirsiniz. +cryptoSafetyPrompt.learnMore=Ayrıntılı bilgi alın +cryptoSafetyPrompt.primaryAction=Sekmenin devresini yenile +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Uyarıyı yok say +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Dikkatli ilerleyin +rulesets.warningDescription=Kural kümelerini eklemek ya da değiştirmek saldırganların web tarayıcınıza sızmasına neden olabilir. Yalnız ne yaptığınızı biliyorsanız ilerleyin. +rulesets.warningEnable=Bu seçeneklere erişmek istediğimde beni uyar +rulesets.warningButton=Riski kabul ederek ilerliyorum +# Ruleset list +rulesets.rulesets=Kural kümeleri +rulesets.noRulesets=Herhangi bir kural kümesi bulunamadı +rulesets.noRulesetsDescr=Tor Browser içinde kaydettiğiniz kural kümeleri burada görüntülenir. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Son güncelleme: %S +rulesets.neverUpdated=Asla güncellenmemiş ya da son güncelleme yapılamamış +rulesets.enabled=Etkin +rulesets.disabled=Devre dışı +# Ruleset details/edit ruleset +rulesets.edit=Düzenle +rulesets.name=Ad +rulesets.jwk=JWK +rulesets.pathPrefix=Yol ön eki +rulesets.scope=Kapsam +rulesets.enable=Bu kural kümesini etkinleştir +rulesets.checkUpdates=Güncelleme denetimi +rulesets.jwkPlaceholder=Bu kural kümesini JWK (JSON Web Key) biçiminde imzalamak için kullanılan anahtar +rulesets.jwkInvalid=JWK işlenemedi ya da anahtar geçersiz +rulesets.pathPrefixPlaceholder=Kural kümesinin gerek duyduğu dosyaları içeren adres ön eki +rulesets.pathPrefixInvalid=Yol ön eki geçerli bir HTTP(S) adresi değil +rulesets.scopePlaceholder=Kural kapsamının kurallı ifadesi +rulesets.scopeInvalid=Kapsam bir kurallı ifade olarak işlenemedi +rulesets.save=Kaydet +rulesets.cancel=İptal diff --git a/toolkit/torbutton/chrome/locale/tr/torlauncher.properties b/toolkit/torbutton/chrome/locale/tr/torlauncher.properties new file mode 100644 index 000000000000..12cb4c5ad39e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/tr/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor Başlatıcı + +torlauncher.tor_exited_during_startup=Tor başlatılırken sonlandı. Bu durum torrc dosyasındaki ya da sisteminizdeki başka bir uygulamada bulunan bir hatadan ya da sorunlu bir donanımdan kaynaklanmış olabilir. Sorun çözülene ve Tor uygulaması yeniden başlatılana kadar Tor Browser çalışmayacak. +torlauncher.tor_exited=Tor, beklenmedik şekilde sonlandı. Bu durum Tor içinde ya da sisteminizdeki başka bir uygulamada bulunan bir hatadan ya da sorunlu bir donanımdan kaynaklanmış olabilir. Yeniden başlatılana kadar Tor Browser hiçbir web sitesine erişemeyecek. Sorun devam ederse lütfen Tor Günlüğünün bir kopyasını destek ekibine gönderin. +torlauncher.tor_exited2=Tor uygulaması yeniden başlatıldığında tarayıcı sekmeleriniz kapatılmayacak. +torlauncher.tor_controlconn_failed=Tor denetim bağlantı noktası ile bağlantı kurulamadı. +torlauncher.tor_failed_to_start=Tor başlatılamadı. +torlauncher.tor_control_failed=Tor denetimi alınamadı. +torlauncher.tor_bootstrap_failed=Tor ağı ile bağlantı kurulamadı. +torlauncher.tor_bootstrap_failed_details=%1$S başarısız oldu (%2$S). + +torlauncher.unable_to_start_tor=Tor başlatılamadı.\n\n%S +torlauncher.tor_missing=Çalıştırılabilecek Tor dosyası bulunamadı. +torlauncher.torrc_missing="Torcc" dosyası eksik ve oluşturulamadı. +torlauncher.datadir_missing=Tor veri klasörü bulunamadı ve oluşturulamadı. +torlauncher.onionauthdir_missing=Tor onion kimlik doğrulama klasörü bulunamadı ve oluşturulamadı. +torlauncher.password_hash_missing=Karılmış parola alınamadı. + +torlauncher.failed_to_get_settings=Tor ayarları alınamadı.\n\n%S +torlauncher.failed_to_save_settings=Tor ayarları kaydedilemedi.\n\n%S +torlauncher.ensure_tor_is_running=Lütfen Tor uygulamasının çalıştığından emin olun. + +torlauncher.error_proxy_addr_missing=İnternet ile bir vekil sunucu üzerinden bağlantı kurmak için bir IP adresi ya da sunucu adı ile bağlantı noktası numarasının yazılması gereklidir. +torlauncher.error_proxy_type_missing=Vekil sunucu türünü seçmelisiniz. +torlauncher.error_bridges_missing=Bir ya da birkaç köprü belirtmelisiniz. +torlauncher.error_default_bridges_type_missing=Hazır köprüler için bir aktarım türü seçmelisiniz. +torlauncher.error_bridgedb_bridges_missing=Lütfen bir köprü isteğinde bulunun. +torlauncher.error_bridge_bad_default_type=Hazır köprüler %S aktarım türü için kullanılamıyor. Lütfen ayarlarınızı değiştirin. + +torlauncher.bridge_suffix.meek-amazon=(Çin'de çalışır) +torlauncher.bridge_suffix.meek-azure=(Çin'de çalışır) + +torlauncher.request_a_bridge=Köprü isteğinde bulun… +torlauncher.request_a_new_bridge=Yeni köprü isteğinde bulun... +torlauncher.contacting_bridgedb=Köprü veritabanı ile bağlantı kuruluyor. Lütfen bekleyin. +torlauncher.captcha_prompt=Köprü isteğinde bulunmak için güvenlik denetimini geçin. +torlauncher.bad_captcha_solution=Çözüm doğru değil. Lütfen yeniden deneyin. +torlauncher.unable_to_get_bridge=Köprü veritabanından bir köprü alınamadı. +torlauncher.no_meek=Bu tarayıcı, köprüleri katmak için gerekli meek uygulamasını kullanmak üzere yapılandırılmamış. +torlauncher.no_bridges_available=Ne yazık ki şu anda kullanılabilecek bir köprü yok. + +torlauncher.connect=Bağlantı kur +torlauncher.restart_tor=Tor uygulamasını yeniden başlat +torlauncher.quit=Çık +torlauncher.quit_win=Çıkış +torlauncher.done=Tamamlandı + +torlauncher.forAssistance=Yardım almak için %S ile görüşün +torlauncher.forAssistance2=Yardım almak için, %S sayfasına bakabilirsiniz + +torlauncher.copiedNLogMessages=Kopyalama tamamlandı. %S Tor günlük iletisi bir metin düzenleyici ya da e-posta iletisine kopyalanmaya hazır. + +torlauncher.bootstrapStatus.starting=Başlatılıyor +torlauncher.bootstrapStatus.conn_pt=Köprü bağlantısı kuruluyor +torlauncher.bootstrapStatus.conn_done_pt=Köprü bağlantısı kuruldu +torlauncher.bootstrapStatus.conn_proxy=Vekil sunucu bağlantısı kuruluyor +torlauncher.bootstrapStatus.conn_done_proxy=Vekil sunucu bağlantısı kuruldu +torlauncher.bootstrapStatus.conn=Bir Tor aktarıcısı ile bağlantı kuruluyor +torlauncher.bootstrapStatus.conn_done=Bir Tor aktarıcısı ile bağlantı kuruldu +torlauncher.bootstrapStatus.handshake=Bir Tor aktarıcısı ile iletişim kuruluyor +torlauncher.bootstrapStatus.handshake_done=Bir Tor aktarıcısı ile iletişim kuruldu +torlauncher.bootstrapStatus.onehop_create=Şifrelenmiş dizin bağlantısı kuruluyor +torlauncher.bootstrapStatus.requesting_status=Ağ durumu alınıyor +torlauncher.bootstrapStatus.loading_status=Ağ durumu yükleniyor +torlauncher.bootstrapStatus.loading_keys=Otorite sertifikaları yükleniyor +torlauncher.bootstrapStatus.requesting_descriptors=Aktarıcı bilgileri isteniyor +torlauncher.bootstrapStatus.loading_descriptors=Aktarıcı bilgileri yükleniyor +torlauncher.bootstrapStatus.enough_dirinfo=Aktarıcı bilgileri yüklendi +torlauncher.bootstrapStatus.ap_conn_pt=Devreler hazırlanıyor: Köprü bağlantısı kuruluyor +torlauncher.bootstrapStatus.ap_conn_done_pt=Devreler hazırlanıyor: Köprü bağlantısı kuruldu +torlauncher.bootstrapStatus.ap_conn_proxy=Devreler hazırlanıyor: Vekil sunucu bağlantısı kuruluyor +torlauncher.bootstrapStatus.ap_conn_done_proxy=Devreler hazırlanıyor: Vekil sunucu bağlantısı kuruldu +torlauncher.bootstrapStatus.ap_conn=Devreler hazırlanıyor: Bir Tor aktarıcısı ile bağlantı kuruluyor +torlauncher.bootstrapStatus.ap_conn_done=Devreler hazırlanıyor: Bir Tor aktarıcısı ile bağlantı kuruldu +torlauncher.bootstrapStatus.ap_handshake=Devreler hazırlanıyor: Bir Tor aktarıcısı ile iletişim kuruluyor +torlauncher.bootstrapStatus.ap_handshake_done=Devreler hazırlanıyor: Bir Tor aktarıcısı ile iletişim kuruldu +torlauncher.bootstrapStatus.circuit_create=Devreler hazırlanıyor: Bir Tor devresi kuruluyor +torlauncher.bootstrapStatus.done=Tor ağı ile bağlantı kuruldu! + +torlauncher.bootstrapWarning.done=bitti +torlauncher.bootstrapWarning.connectrefused=bağlantı reddedildi +torlauncher.bootstrapWarning.misc=çeşitli +torlauncher.bootstrapWarning.resourcelimit=kaynaklar yetersiz +torlauncher.bootstrapWarning.identity=kimlik uyuşmazlığı +torlauncher.bootstrapWarning.timeout=bağlantı zaman aşımı +torlauncher.bootstrapWarning.noroute=sunucu yöneltmesi yok +torlauncher.bootstrapWarning.ioerror=okuma/yazma hatası +torlauncher.bootstrapWarning.pt_missing=değiştirilebilir taşıyıcı bulunamadı + +torlauncher.nsresult.NS_ERROR_NET_RESET=Sunucu ile bağlantı kesildi. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Sunucu ile bağlantı kurulamadı. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Vekil sunucu ile bağlantı kurulamadı. + +torlauncher.copiedNLogMessagesShort=%S günlükleri kopyalandı diff --git a/toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd new file mode 100644 index 000000000000..54a618c11131 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; розроблено"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ", некомерційна розробка щоб захистити ваше приватне життя і свободу в Інтернеті."> + +<!ENTITY help.start "Бажаєте допомогти?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Пожертвувати"> +<!ENTITY help.or "або"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "приймати участь"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Питання?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Допомогти рости мережі Tor!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Інформація про ліцензування"> +<!ENTITY tor.TrademarkStatement "'Tor' і 'Onion Logo' є зареєстрованими товарними знаками Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/uk/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/uk/aboutTBUpdate.dtd new file mode 100644 index 000000000000..effbd2147727 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Журнал змін браузеру Tor"> +<!ENTITY aboutTBUpdate.updated "Tor Browser було оновлено."> +<!ENTITY aboutTBUpdate.linkPrefix "Щоб отримати найновішу інформацію про цей реліз, "> +<!ENTITY aboutTBUpdate.linkLabel "відвідайте наш веб-сайт"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Версія"> +<!ENTITY aboutTBUpdate.releaseDate "Дата випуску"> +<!ENTITY aboutTBUpdate.releaseNotes "Примітки до випуску"> diff --git a/toolkit/torbutton/chrome/locale/uk/aboutTor.dtd b/toolkit/torbutton/chrome/locale/uk/aboutTor.dtd new file mode 100644 index 000000000000..59b30140b8e9 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Про Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Переглянути список змін"> + +<!ENTITY aboutTor.ready.label "Шукайте. Приватно."> +<!ENTITY aboutTor.ready2.label "Ви готові до найприватнішого перегляду Інтернету в світі."> +<!ENTITY aboutTor.failure.label "Щось пішло не так!"> +<!ENTITY aboutTor.failure2.label "Tor не працює у цьому браузері."> + +<!ENTITY aboutTor.search.label "Пошук через DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Питання?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Перегляньте наш посібник для вебоглядача Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Посібник для вебоглядача Tor"> + +<!ENTITY aboutTor.tor_mission.label "Проєкт "Tor", згідно зі статтею 501(c)(3) Кодексу США, є неприбутковою організацією, що займається захистом прав і свобод людини, створенням і впровадженням безкоштовних технологій анонімності й приватності з відкритим кодом, підтримуючи їхні необмежені доступність і використання, а також сприяючи їх розумінню наукою і широким загалом."> +<!ENTITY aboutTor.getInvolved.label "Візьміть участь »"> + +<!ENTITY aboutTor.newsletter.tagline "Отримуйте останні новини Tor зразу до своєї скриньки."> +<!ENTITY aboutTor.newsletter.link_text "Підпишіться на новини Tor"> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor можна використовувати безкоштовно завдяки підтримці таких людей, як Ви."> +<!ENTITY aboutTor.donationBanner.buttonA "Підтримати зараз"> + +<!ENTITY aboutTor.alpha.ready.label "Тест. Ретельно."> +<!ENTITY aboutTor.alpha.ready2.label "Ви готові випробувати найприватніший досвід перегляду в світі."> +<!ENTITY aboutTor.alpha.bannerDescription "Браузер Tor Alpha - це нестабільна версія Браузера Tor, яку можна використовувати для попереднього перегляду нових функцій, тестування їхньої продуктивності та надання зворотного зв’язку перед випуском."> +<!ENTITY aboutTor.alpha.bannerLink "Повідомте про помилку на форумі Tor"> + +<!ENTITY aboutTor.nightly.ready.label "Тест. Ретельно."> +<!ENTITY aboutTor.nightly.ready2.label "Ви готові випробувати найприватніший досвід перегляду в світі."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Повідомте про помилку на форумі Tor"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "ЗА ДОПОМОГОЮ ПРИВАТНОСТІ:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "ОПІР"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "ЗМІНА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "СВОБОДА"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "ПІДТРИМАТИ ЗАРАЗ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Ваша пожертва надійде Друзям Tor (до 100 000 доларів США)."> diff --git a/toolkit/torbutton/chrome/locale/uk/brand.dtd b/toolkit/torbutton/chrome/locale/uk/brand.dtd new file mode 100644 index 000000000000..2e7f6e3dc030 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Проект Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' і 'Onion Logo' є зареєстрованими товарними знаками Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor браузер"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Натисніть, щоб завантажити системні плагіни"> +<!ENTITY plugins.installed.enable "Увімкнути плагіни"> +<!ENTITY plugins.installed.disable "Вимкнути плагіни"> +<!ENTITY plugins.installed.disable.tip "Натисніть, щоб уникнути завантаження системних плагінів"> diff --git a/toolkit/torbutton/chrome/locale/uk/brand.properties b/toolkit/torbutton/chrome/locale/uk/brand.properties new file mode 100644 index 000000000000..fc7aa406f791 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor браузер +brandShortName=Tor Browser +brandFullName=Tor Browser +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor браузер +vendorShortName=Проект Tor + +homePageSingleStartMain=Firefox Start - домашня сторінка з вбудованим пошуком +homePageImport=Імпорт вашої домашньої сторінки з %S + +homePageMigrationPageTitle=Вибір домашньої сторінки +homePageMigrationDescription=Виберіть домашню сторінку: + +syncBrandShortName=Синхронізація diff --git a/toolkit/torbutton/chrome/locale/uk/branding/brand.ftl b/toolkit/torbutton/chrome/locale/uk/branding/brand.ftl new file mode 100644 index 000000000000..1cb0952cba2c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor браузер +-brand-short-name = Tor Browser +-brand-full-name = Tor Browser +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor браузер +-vendor-short-name = Проект Tor +trademarkInfo = 'Tor' і 'Onion Logo' є зареєстрованими товарними знаками Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/uk/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/uk/browserOnboarding.properties new file mode 100644 index 000000000000..70cf2a51dc81 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Ласкаво просимо +onboarding.tour-tor-welcome.title=Ви готові. +onboarding.tour-tor-welcome.description=Браузер Tor пропонує найвищий стандарт приватності та безпеки при перегляді мережі. Тепер ви захищені від відстежування, нагляду та цензури. Ця швидка презентація покаже вам, як саме. +onboarding.tour-tor-welcome.next-button=Перейти до Приватності + +onboarding.tour-tor-privacy=Приватність +onboarding.tour-tor-privacy.title=Дайте по носі відстежувачам та шпигунам. +onboarding.tour-tor-privacy.description=Браузер Tor ізолює куки та видаляє вашу історію перегляду після завершення сесії. Ці модифікації забезпечують захист вашої приватності і безпеки у браузері. Натисніть "Мережа Tor" для ознайомлення з тим, як ми захищаємо вас на мережевому рівні. +onboarding.tour-tor-privacy.button=Перейти до мережі Tor + +onboarding.tour-tor-network=Мережа Tor +onboarding.tour-tor-network.title=Подорожуйте децентралізованою мережею. +onboarding.tour-tor-network.description=Браузер Tor під\'єднує вас до мережі Tor, що підтримується тисячами добровольців по всьому світу. На відміну від VPN, тут відсутня єдина точка відмови або централізована організація, якій ви б мали довіряти, щоб подорожувати інтернетом приватно. +onboarding.tour-tor-network.description-para2=НОВЕ: Налаштування мережі Tor включає можливість запитувати мости коли Tor блоковано, можна знайти у Налаштуваннях. +onboarding.tour-tor-network.action-button=Налаштуйте: Ваші налаштування мережі Tor +onboarding.tour-tor-network.button=Перейти до Екрану Ланцюжків + +onboarding.tour-tor-circuit-display=Екран Ланцюжків +onboarding.tour-tor-circuit-display.title=Перегляньте свій шлях. +onboarding.tour-tor-circuit-display.description=Для кожного домену, який ви відвідуєте, ваш трафік ретранслюється та шифрується у ланцюжку, що проходить через три ретранслятори Tor по всьому світі. Жоден веб-сайт не знає, звідки ви під'єднуєтеся. Ви можете надіслати запит на новий ланцюжок, натиснувши "Новий ланцюжок для цього сайту" на Екрані Ланцюжків. +onboarding.tour-tor-circuit-display.button=Переглянути мій шлях +onboarding.tour-tor-circuit-display.next-button=Перейти до Безпеки + +onboarding.tour-tor-security=Безпека +onboarding.tour-tor-security.title=Оберіть ваш досвід. +onboarding.tour-tor-security.description=Ми також надаємо вам додаткові налаштування для посилення безпеки вашого браузеру. Наші Налаштування Безпеки дозволяють вам блокувати елементи, які можуть бути використані для атаки на ваш комп'ютер. Натисніть нижче, щоб побачити, що роблять різні опції. +onboarding.tour-tor-security.description-suffix=Замітка: За замовчуванням NoScript і HTTPS Everywhere не розміщені на панелі інструментів, але ви можете пристосувати свою панель інструментів додавши їх. +onboarding.tour-tor-security-level.button=Перегляньте ваш Рівень Безпеки +onboarding.tour-tor-security-level.next-button=Перейти до Порад щодо Досвіду + +onboarding.tour-tor-expect-differences=Поради щодо Досвіду +onboarding.tour-tor-expect-differences.title=Очікуйте на деякі відмінності. +onboarding.tour-tor-expect-differences.description=Tor забезпечує безпеку і конфіденційність, але ціною деяких змін. Швидкість роботи в мережі може бути трохи нижче. Деякі елементи сайтів можуть не працювати або зовсім не завантажуватися (в залежності від налаштувань безпеки). Іноді, ймовірно, вам доведеться зайвий раз доводити, що ви людина, а не робот. +onboarding.tour-tor-expect-differences.button=Переглянути ЧаПи +onboarding.tour-tor-expect-differences.next-button=Перейти до Цибуляних служб + +onboarding.tour-tor-onion-services=Служби Onion +onboarding.tour-tor-onion-services.title=Отримайте додатковий захист. +onboarding.tour-tor-onion-services.description=Onion-ресурси - це сайти, що закінчуються на .onion. Такі сайти дають додатковий захист своїм власникам та відвідувачам, в тому числі від цензури. Ресурси Onion дозволяють кожній людині анонімно надавати контент та послуги. Натисніть кнопку нижче, щоб відвідати onion-сайт DuckDuckGo. +onboarding.tour-tor-onion-services.button=Відвідати Цибулину +onboarding.tour-tor-onion-services.next-button=Готово + +onboarding.overlay-icon-tooltip-updated2=Переглянути, що нового\nу %S +onboarding.tour-tor-update.prefix-new=Новий +onboarding.tour-tor-update.prefix-updated=Оновлено + +onboarding.tour-tor-toolbar=Панель інструментів +onboarding.tour-tor-toolbar-update-9.0.title=Прощавай, кнопка Onion. +onboarding.tour-tor-toolbar-update-9.0.description=Ми хочемо, щоб ваш досвід використання Tor був повністю інтегрований з Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=Кнопка "Onion" більше не потрібна. Тепер ви можете побачити свій ланцюжок Tor, натиснувши на значок замочка в адресному рядку та створити нову особистість натисканням кнопки на панелі інструментів або через меню [≡]. +onboarding.tour-tor-toolbar-update-9.0.button=Як надіслати запит на нову ідентичність? +onboarding.tour-tor-toolbar-update-9.0.next-button=Перейти до мережі Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Вперед +onboarding.tor-circuit-display.done=Готово +onboarding.tor-circuit-display.one-of-three=1 з 3 +onboarding.tor-circuit-display.two-of-three=2 з 3 +onboarding.tor-circuit-display.three-of-three=3 з 3 + +onboarding.tor-circuit-display.intro.title=Як працюють ланцюжки? +onboarding.tor-circuit-display.intro.msg=Ланцюжок утворюється з випадково призначених вузлів. Це комп'ютери в різних частинах світу. Вони налаштовані для пересилання трафіку Tor. Ланцюжок робить ваш браузер безпечним і дозволяє підключатися до onion-сайтів. + +onboarding.tor-circuit-display.diagram.title=Перегляд ланцюжка +onboarding.tor-circuit-display.diagram.msg=Ця діаграма показує зв'язки, які утворюють ланцюжок для цього сайту. Щоб унеможливити зіставлення ваших дій на різних сайтах, для кожного сайту створюється окремий ланцюжок. + +onboarding.tor-circuit-display.new-circuit.title=Вам потрібен новий ланцюжок? +onboarding.tor-circuit-display.new-circuit.msg=Якщо ви не можете під'єднатися до вебсайту, або він не завантажується належним чином, ви можете скористатися цією кнопкою, щоб перезавантажити сайт з новим ланцюжком. diff --git a/toolkit/torbutton/chrome/locale/uk/network-settings.dtd b/toolkit/torbutton/chrome/locale/uk/network-settings.dtd new file mode 100644 index 000000000000..fba3a84c4ecb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Налаштування мережі Tor"> +<!ENTITY torsettings.wizard.title.default "Зʼєднатися з Tor"> +<!ENTITY torsettings.wizard.title.configure "Налаштування мережі Tor"> +<!ENTITY torsettings.wizard.title.connecting "Встановлення зʼєднання"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Мова вебоглядача Tor"> +<!ENTITY torlauncher.localePicker.prompt "Будь ласка, оберіть мову."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Натисніть кнопку «Зʼєднати», щоб зʼєднатися з Tor."> +<!ENTITY torSettings.configurePrompt "Натисніть «Налаштувати», щоб налаштувати параметри мережі, якщо Ви перебуваєте в країні, яка цензурує Tor (наприклад, Єгипет, Китай, Туреччина) або якщо Ви підʼєднуєтеся з приватної мережі, для якої потрібен проксі-сервер."> +<!ENTITY torSettings.configure "Налаштування"> +<!ENTITY torSettings.connect "З'єднатися"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Підключення до Tor..."> +<!ENTITY torsettings.restartTor "Перезапустити Tor"> +<!ENTITY torsettings.reconfigTor "Переналаштувати"> + +<!ENTITY torsettings.discardSettings.prompt "Ви налаштували мости Tor або ввели налаштування локального проксі.  Для прямого з'єднання з мережею Tor ці налаштування треба вилучити."> +<!ENTITY torsettings.discardSettings.proceed "Вилучити налаштування і під'єднатися"> + +<!ENTITY torsettings.optional "Додатково"> + +<!ENTITY torsettings.useProxy.checkbox "Я використовую проксі для з'єднання з Інтернетом"> +<!ENTITY torsettings.useProxy.type "Тип проксі"> +<!ENTITY torsettings.useProxy.type.placeholder "оберіть тип проксі"> +<!ENTITY torsettings.useProxy.address "Адреса"> +<!ENTITY torsettings.useProxy.address.placeholder "ІР адреса або ім'я хосту"> +<!ENTITY torsettings.useProxy.port "Порт"> +<!ENTITY torsettings.useProxy.username "Ім'я користувача"> +<!ENTITY torsettings.useProxy.password "Пароль"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Мій брандмауер дозволяє підключення тільки до певних портів"> +<!ENTITY torsettings.firewall.allowedPorts "Дозволені порти"> +<!ENTITY torsettings.useBridges.checkbox "Тор цензується в моїй країні"> +<!ENTITY torsettings.useBridges.default "Виберіть вбудований міст"> +<!ENTITY torsettings.useBridges.default.placeholder "Виберіть міст"> +<!ENTITY torsettings.useBridges.bridgeDB "Запитати міст з torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Введіть символи з зображення"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Отримати нове завдання"> +<!ENTITY torsettings.useBridges.captchaSubmit "Надіслати"> +<!ENTITY torsettings.useBridges.custom "Надайте міст, який я знаю"> +<!ENTITY torsettings.useBridges.label "Уведіть інформацію про міст із надійного джерела."> +<!ENTITY torsettings.useBridges.placeholder "тип адреси: порт (по одному на рядок)"> + +<!ENTITY torsettings.copyLog "Скопіювати журнал Tor до буферу обміну"> + +<!ENTITY torsettings.proxyHelpTitle "Довідка Проксі"> +<!ENTITY torsettings.proxyHelp1 "Може знадобитися локальний проксі-сервер при підключенні через мережу компанії, школи або університету. Якщо ви не впевнені у необхідності проксі-серверу, погляньте у налаштування з\єднання з інтернетом у іншому браузері або перевірте ваші системні налаштування мережі."> + +<!ENTITY torsettings.bridgeHelpTitle "Допомога по ретрансляторам типу міст"> +<!ENTITY torsettings.bridgeHelp1 "Мости - це незареєстровані передавачі, що ускладнюють блокування з'єднання з мережею Tor.  Кожен тип мосту використовує інакший метод, щоб уникнути цензури.  Функції obfs роблять ваш трафік схожим на випадковий шум, а функції meek роблять ваш трафік схожим на те, що він підключається до цієї служби не через Tor."> +<!ENTITY torsettings.bridgeHelp2 "Через те, як певні країни намагаються заблокувати Tor, деякі мости працюють в деяких країнах, а в інших ні.  Якщо ви не впевнені в тому, які мости працюють у вашій країні, відвідайте torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Будь ласка, зачекайте, поки ми встановимо з'єднання з мережею Tor.  Це може зайняти кілька хвилин."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Зʼєднання"> +<!ENTITY torPreferences.torSettings "Налаштування Tor"> +<!ENTITY torPreferences.torSettingsDescription "Tor Browser спрямовує ваш трафік через мережу Tor, яка підтримується тисячами добровольців по всьому світу." > +<!ENTITY torPreferences.learnMore "Дізнатися більше"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Інтернет:"> +<!ENTITY torPreferences.statusInternetTest "Тест"> +<!ENTITY torPreferences.statusInternetOnline "У мережі"> +<!ENTITY torPreferences.statusInternetOffline "Поза мережею"> +<!ENTITY torPreferences.statusTorLabel "Мережа Tor:"> +<!ENTITY torPreferences.statusTorConnected "Зʼєднано"> +<!ENTITY torPreferences.statusTorNotConnected "Не під'єднано"> +<!ENTITY torPreferences.statusTorBlocked "Потенційно заблоковано"> +<!ENTITY torPreferences.learnMore "Дізнатися більше"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Швидкий запуск автоматично підключає браузер Tor до мережі Tor під час запуску на основі останніх використаних налаштувань підключення."> +<!ENTITY torPreferences.quickstartCheckbox "Завжди з'єднуватись автоматично"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Мости"> +<!ENTITY torPreferences.bridgesDescription "Мости допомагають отримати доступ до мережі Tor у місцях, де Tor заблоковано. Залежно від того, де ви знаходитесь, один міст може працювати краще, ніж інший."> +<!ENTITY torPreferences.bridgeLocation "Ваше розташування"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Автоматично"> +<!ENTITY torPreferences.bridgeLocationFrequent "Локації які вибираються найчастіше"> +<!ENTITY torPreferences.bridgeLocationOther "Інші локації"> +<!ENTITY torPreferences.bridgeChooseForMe "Обрати для мене міст…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Ваші поточні мости"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 міст: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Вилучити"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Вимкнути вбудовані мости"> +<!ENTITY torPreferences.bridgeShare "Поділіться цим мостом за допомогою QR-коду або скопіювавши його адресу:"> +<!ENTITY torPreferences.bridgeCopy "Копіювати адресу мосту"> +<!ENTITY torPreferences.copied "Скопійовано!"> +<!ENTITY torPreferences.bridgeShowAll "Показати всі мости"> +<!ENTITY torPreferences.bridgeRemoveAll "Видалити всі мости"> +<!ENTITY torPreferences.bridgeAdd "Додати новий міст"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Обрати один із вбудованих мостів браузера Tor"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Обрати вбудований міст..."> +<!ENTITY torPreferences.bridgeRequest "Запросити міст..."> +<!ENTITY torPreferences.bridgeEnterKnown "Введіть адресу мосту, який вам вже відомий"> +<!ENTITY torPreferences.bridgeAddManually "Додати міст вручну…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Розширений"> +<!ENTITY torPreferences.advancedDescription "Налаштуйте спосіб підключення браузера Tor до Інтернету"> +<!ENTITY torPreferences.advancedButton "Налаштування..."> +<!ENTITY torPreferences.viewTorLogs "Переглянути журнали Tor"> +<!ENTITY torPreferences.viewLogs "Переглянути журнали..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Прибрати всі мости?"> +<!ENTITY torPreferences.removeBridgesWarning "Цю дію не можна буде відмінити"> +<!ENTITY torPreferences.cancel "Скасувати"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Сканувати QR код"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Вбудовані мости"> +<!ENTITY torPreferences.builtinBridgeDescription "Браузер Tor включає деякі специфічні типи мостів, відомі як «транспорти, що підключаються»."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 є типом вбудованого моста, завдяки якому ваш трафік Tor виглядає випадковим. Вони рідше будуть заблоковані, ніж їхні попередники, мости obfs3."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake є вбудованим мостом, який долає цензуру, перенаправляючи ваше з’єднання через проксі-сервери Snowflake, якими керують волонтери."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure є вбудованим мостом, який створює враження, ніби ви використовуєте веб-сайт Microsoft замість Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Запросити міст"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Звернення до BridgeDB. Зачекайте, будь ласка."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Розв'яжіть CAPTCHA, щоб надіслати запит на отримання мосту."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Розв'язання невірне. Спробуйте знову."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Надати міст"> +<!ENTITY torPreferences.provideBridgeHeader "Введіть інформацію про міст із надійного джерела"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Налаштування з'єднання"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Налаштуйте спосіб підключення браузера Tor до Інтернету"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Значення, розділені комами"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Журнали Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Не під'єднано"> +<!ENTITY torConnect.connectingConcise "Під'єднання..."> +<!ENTITY torConnect.tryingAgain "Спробувати ще раз..."> +<!ENTITY torConnect.noInternet "Браузер Tor не зміг під'єднатись до інтернету"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Браузер Tor не може підключитися до Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "налаштуйте ваше з'єднання"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "Якщо Tor заблоковано у вашому місцезнаходженні, випробовування мосту може допомогти. Помічник з'єднання допоможе обрати мост для вас, використовуючи ваше місцезнаходження, або ви можете натомість #1 вручну."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Випробовуємо мост…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Браузер Tor не зміг вас знайти"> +<!ENTITY torConnect.errorLocationDescription "Браузер Tor повинен знати ваше місцезнаходження, щоб обрати потрібний для вас міст. Якщо ви не хочете ділитися своїм місцезнаходженням, натомість #1 вручну."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Допомога з'єднання"> +<!ENTITY torConnect.breadcrumbLocation "Налаштування місцезнаходження"> +<!ENTITY torConnect.breadcrumbTryBridge "Випробувати мост"> +<!ENTITY torConnect.automatic "Автоматично"> +<!ENTITY torConnect.selectCountryRegion "Обрати країну чи регіон"> +<!ENTITY torConnect.frequentLocations "Локації які вибираються найчастіше"> +<!ENTITY torConnect.otherLocations "Інші локації"> +<!ENTITY torConnect.restartTorBrowser "Перезапустити Tor Browser"> +<!ENTITY torConnect.configureConnection "Налаштування з'єднання..."> +<!ENTITY torConnect.viewLog "Переглянути журнали..."> +<!ENTITY torConnect.tryAgain "Спробувати ще раз"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Зміни до налаштувань Tor не застосуються, доки ви з'єднані "> +<!ENTITY torConnect.tryAgainMessage "Вебоглядачу Tor не вдалось з'єднатись з мережею Tor"> +<!ENTITY torConnect.yourLocation "Ваше розташування"> +<!ENTITY torConnect.tryBridge "Випробувати мост"> +<!ENTITY torConnect.autoBootstrappingFailed "Невдале автоматичне налаштування"> +<!ENTITY torConnect.autoBootstrappingFailed "Невдале автоматичне налаштування"> +<!ENTITY torConnect.cannotDetermineCountry "Не вдається визначити країну користувача"> +<!ENTITY torConnect.noSettingsForCountry "Немає доступних налаштувань для вашого місцезнаходження"> diff --git a/toolkit/torbutton/chrome/locale/uk/onboarding.properties b/toolkit/torbutton/chrome/locale/uk/onboarding.properties new file mode 100644 index 000000000000..1a6721ef458e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Вперше в %S?\nТо розпочнімо. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S повністю новий.\nПодивіться, що ви можете робити! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Закрити +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Відхилити +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Завершено diff --git a/toolkit/torbutton/chrome/locale/uk/torbutton.dtd b/toolkit/torbutton/chrome/locale/uk/torbutton.dtd new file mode 100644 index 000000000000..a985b73accc8 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Нова особистість"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "Нова сутність"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Нова Схема Tor для цього сайту"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "Нова схема Tor для цього сайту"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Налаштування мережі Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Перевірте оновлення браузера Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Захист cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Клацніть для запуску Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Налаштування безпеки Браузера Tor"> +<!ENTITY torbutton.cookiedialog.title "Керувати Захистом Куків"> +<!ENTITY torbutton.cookiedialog.lockCol "Захищено"> +<!ENTITY torbutton.cookiedialog.domainCol "Хост"> +<!ENTITY torbutton.cookiedialog.nameCol "Ім’я"> +<!ENTITY torbutton.cookiedialog.pathCol "Шлях"> +<!ENTITY torbutton.cookiedialog.protectCookie "Захистити Куки"> +<!ENTITY torbutton.cookiedialog.removeCookie "Видалити Куки"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Незахищені Куки"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Видалити Усі, Окрім Захищених"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Захищати Нові Куки"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Не Захищати Нові Куки"> +<!ENTITY torbutton.prefs.sec_caption "Рівень безпеки"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Повзунок безпеки дозволяє вимкнути певні функції веб-переглядача, які можуть зробити ваш браузер більш вразливим до спроб злому."> +<!ENTITY torbutton.prefs.sec_standard_label "Стандарт"> +<!ENTITY torbutton.prefs.sec_standard_description "Усі можливості браузера Tor та веб-сайту увімкнені."> +<!ENTITY torbutton.prefs.sec_safer_label "Безпечніше"> +<!ENTITY torbutton.prefs.sec_safer_description "Вимикає функції веб-сайтів, які часто є небезпечними, через те, що деякі сайти втрачають функціональність."> +<!ENTITY torbutton.prefs.sec_safer_list_label "На безпечних налаштуваннях:"> +<!ENTITY torbutton.prefs.sec_safest_label "Найбезпечніший"> +<!ENTITY torbutton.prefs.sec_safest_description "Дозволяє лише функції веб-сайтів, необхідні для статичних сайтів та базових послуг. Ці зміни впливають на зображення, медіа та сценарії."> +<!ENTITY torbutton.prefs.sec_safest_list_label "З найбезпечнішими налаштуваннями:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Дізнатися більше"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript вимкнена на сайтах без HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript вимкнена за замовчуванням на усіх сайтах."> +<!ENTITY torbutton.prefs.sec_limit_typography "Деякі шрифти та математичні символи вимкнені."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Деякі шрифти, значки, математичні символи та зображення вимкнені."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Аудіо, відео (HTML5-медіа) і WebGL програються тільки після натискання."> +<!ENTITY torbutton.prefs.sec_custom_warning "Користувацький"> +<!ENTITY torbutton.prefs.sec_overview "Вимкнути певні веб-функції, які можуть бути використані для нападу на вашу безпеку та анонімність."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Рівень безпеки: Стандарт"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Рівень безпеки: Безпечніше"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Рівень безпеки: Найбезпечніший"> +<!ENTITY torbutton.prefs.sec_custom_summary "Ваші користувацькі налаштування веб-переглядача призводять до нестандартних налаштувань безпеки. З міркувань безпеки та приватності ми радимо вибрати один зі стандартних рівнів безпеки."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Відновити початковий стан"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Розширені налаштування безпеки..."> +<!ENTITY torbutton.prefs.sec_change "Змінити..."> +<!ENTITY torbutton.circuit_display.title "Схема Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Нова Схема Tor для цього сайту"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Відкрити цибуляну службу клієнтської автетинтифікації"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Запам'ятати цей ключ"> diff --git a/toolkit/torbutton/chrome/locale/uk/torbutton.properties b/toolkit/torbutton/chrome/locale/uk/torbutton.properties new file mode 100644 index 000000000000..a5c8a8d55133 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Інтернет +torbutton.circuit_display.ip_unknown = Невідомий IP +torbutton.circuit_display.onion_site = Сайт Onion +torbutton.circuit_display.this_browser = Цей вебоглядач +torbutton.circuit_display.relay = Ретранслятор +torbutton.circuit_display.tor_bridge = Міст +torbutton.circuit_display.unknown_country = Невідома країна +torbutton.circuit_display.guard = Сторожовий +torbutton.circuit_display.guard_note = Ваш [Сторожовий] вузол не буде змінюватися. +torbutton.circuit_display.learn_more = Дізнатися більше +torbutton.circuit_display.click_to_copy = Клацніть, щоб скопіювати +torbutton.circuit_display.copied = Скопійовано! +torbutton.content_sizer.margin_tooltip = Tor Browser додає ці поля для того, щоб зробити висоту і ширину вікна менш відмінною, що зменшує можливість відстежувати вас. +extensions.torbutton@torproject.org.description = Torbutton передбачає кнопку, щоб налаштувати Tor і швидко та легко очистити особисті дані перегляду. +torbutton.popup.external.title = Завантажити зовнішній тип файлів? +torbutton.popup.external.app = Tor Browser не може відобразити цей файл. Вам необхідно буде відкрити його за допомогою іншої програми.\n +torbutton.popup.external.note = Деякі типи файлів можуть бути причиною підключення до Інтернет без використання Tor.\n +torbutton.popup.external.suggest = Щоб бути у безпеці, Ви повинні відкривати тільки завантажені файли в автономному режимі, або використовувати Tor Live CD, такий як Tails. \n +torbutton.popup.launch = Завантажити файл +torbutton.popup.cancel = Відмова +torbutton.popup.dontask = З цього моменту автоматично завантажувати файли +torbutton.popup.no_newnym = Torbutton не може безпечно дати вам нову особистість. Він не має доступу до Tor Control Port.\\n\n\\n\nВи використовуєте Tor Browser Bundle? +torbutton.security_settings.menu.title = Параметри безпеки +torbutton.title.prompt_torbrowser = Важлива інформація Torbutton +torbutton.popup.prompt_torbrowser = Torbutton вже працює по-іншому: Ви більше не можете його вимкнути.\\n\n\\n\nМи зробили цю зміну, тому що це не безпечно використовувати Torbutton в браузері, який також використовується для не-Tor перегляду. Існувало занадто багато помилок, так що ми не змогли виправити ніяким іншим способом.\\n\n\\n\nЯкщо ви хочете продовжувати використовувати Firefox нормально, ви повинні видалити Torbutton і завантажити Tor Browser Bundle. Налаштування конфіденц [...] +torbutton.popup.short_torbrowser = Важлива інформація Torbutton!\\n\n\\n\nTorbutton тепер завжди включений.\\n\n\\n\nНатисніть на Torbutton для отримання додаткової інформації. + +torbutton.popup.confirm_plugins = Плагіни, такі як Flash, можуть завдати шкоди вашій конфіденційності та анонімності.\\n\n\\n\nВони також можуть обходити Tor, щоб розкрити ваше поточне місце розташування і IP-адресу.\\n\n\\n\nВи впевнені, що хочете включити плагіни?\\n\n\\n +torbutton.popup.never_ask_again = Більше ніколи не запитувати +torbutton.popup.confirm_newnym = Tor Browser закриє всі вікна і вкладки. Всі сеанси на веб-сайтах буде втрачено.\n\nПерезапустити Tor Browser, щоб змінити вашу особистість? + +torbutton.maximize_warning = Роблячи Tor Browser на весь екран дає можливість веб-сайтам дізнатися розмір вашого екрану, що може бути використано для відстежування. Ми рекомендуємо залишити розмір вікна за замовченням. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Цей веб-сайт (%S) спробував видобути дані зображення канви HTML5, які можна використати для унікальної ідентифікації вашого комп'ютера.\n\nСлід браузеру Tor дозволити цьому веб-сайту видобування даних зображення канви HTML5? +canvas.notNow=Не зараз +canvas.notNowAccessKey=N +canvas.allow=Дозволити у майбутньому +canvas.allowAccessKey=А +canvas.never=Ніколи для цього сайту (рекомендовано) +canvas.neverAccessKey=е + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=Проблема профайла %S +profileReadOnly=Ви не можете виконати %S з файлової системи, доступної тільки для читання. Будь ласка, скопіюйте %S в інше місце перед спробую запустити знову. +profileReadOnlyMac=Ви не можете виконати %S з файлової системи, доступної тільки для читання. Будь ласка, скопіюйте %S до Desktop або Applications директорію перед спробую запустити знову. +profileAccessDenied=%S не має дозволу на доступ до профілю. Будь ласка, змініть налаштування вашої файлової системи і спробуйте знову. +profileMigrationFailed=Міграція Вашого існуючого %S профілю не вдалася.\nБудуть використані нові налаштування. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Завантажую %S оновлень + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=З'єднання зашифроване (Цибуляна служба, %1$S, %2$S-бітні ключі, %3$S) +pageInfo_OnionEncryption=З'єднання зашифроване (Цибуляна служба) +pageInfo_OnionName=Назва Onion: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Дізнатися більше +onionServices.errorPage.browser=Браузер +onionServices.errorPage.network=Мережа +onionServices.errorPage.onionSite=Onion-сайт +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Проблеми завантаження оніонсайту +onionServices.descNotFound.header=Оніонсайт не знайдено +onionServices.descNotFound=Найвірогідніше, що оніонсайт не в мережі. Зв'яжіться з адміністратором оніонсайту. +onionServices.descNotFound.longDescription=Деталі: %S — запитаний дескриптор служби onion не може бути знайдений у хешінгу, і тому клієнт не може отримати доступ до служби. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Проблеми завантаження оніонсайту +onionServices.descInvalid.header=Оніонсайт недосяжний +onionServices.descInvalid=Оніонсайт недосяжний через внутрішню помилку. +onionServices.descInvalid.longDescription=Деталі: %S - Запитуваний дескриптор служби onion неможливо проаналізувати або невдала перевірка підпису. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Проблеми завантаження оніонсайту +onionServices.introFailed.header=Оніонсайт від'єднано +onionServices.introFailed=Найвірогідніше, що оніонсайт не в мережі. Зв'яжіться з адміністратором оніонсайту. +onionServices.introFailed.longDescription=Деталі: %S – помилка знайомства. Це означає, що дескриптор виявлений, але сервіс більше не підключений до точки знайомства. Ймовірна причина: сервіс змінив свій дескриптор або взагалі не працює. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Проблеми завантаження оніонсайту +onionServices.rendezvousFailed.header=Неможливо з'єднатися з оніонсайтом +onionServices.rendezvousFailed=Оніонсайт зайнятий або мережа Tor перенавантажена. Спробуйте пізніше. +onionServices.rendezvousFailed.longDescription=Деталі: %S — клієнт не зміг зустрітися зі службою, що означає, що клієнт не зміг завершити з’єднання. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Потрібна авторизація +onionServices.clientAuthMissing.header=Оніонсайт вимагає автентифікацію +onionServices.clientAuthMissing=Доступ до оніонсайту вимагає ключа, який не надається. +onionServices.clientAuthMissing.longDescription=Деталі: %S — Клієнт завантажив запитаний дескриптор служби onion, але не зміг розшифрувати його вміст, оскільки відсутня інформація про авторизацію клієнта. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Авторизація невдала +onionServices.clientAuthIncorrect.header=Автентифікація оніонсайту невдала +onionServices.clientAuthIncorrect=Наданий ключ не вірний або відкликаний. Зв'яжіться з адміністратором оніонсайту. +onionServices.clientAuthIncorrect.longDescription=Деталі: %S — Клієнт зміг завантажити запитаний дескриптор служби onion, але не зміг розшифрувати його вміст, використовуючи надану інформацію про авторизацію клієнта. Це може означати, що доступ було скасовано. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Проблеми завантаження оніонсайту +onionServices.badAddress.header=Невірна адреса оніонсайту +onionServices.badAddress=Вказана адреса оніонсайту недійсна. Перевірте, чи ви ввели її правильно. +onionServices.badAddress.longDescription=Деталі: %S — Надана адреса .onion недійсна. Ця помилка повертається через одну з наступних причин: контрольна сума адреси не збігається, відкритий ключ ed25519 недійсний або кодування недійсне. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Проблеми завантаження оніонсайту +onionServices.introTimedOut.header=Час створення ланцюжка оніонсайту вийшов +onionServices.introTimedOut=Неможливо з'єднатися з оніонсайтом, імовірно, через погане з'єднання з мережею. +onionServices.introTimedOut.longDescription=Деталі: %S — з’єднання із запитаною службою onion минуло під час спроби побудувати схему зустрічі. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S просить вас пройти автентифікацію. +onionServices.authPrompt.keyPlaceholder=Введіть свій приватний ключ для цього служби onion +onionServices.authPrompt.done=Готово +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Введіть дійсний ключ (52 символи base32 або 44 символи base64) +onionServices.authPrompt.failedToSetKey=Неможливо сконфіґурувати Tor з вашими ключами +onionServices.authPreferences.header=Автентифікація сервісів onion +onionServices.authPreferences.overview=Деякі служби onion вимагають ідентифікувати себе за допомогою ключа (своєрідного пароля), перш ніж отримати до них доступ. +onionServices.authPreferences.savedKeys=Збережені ключі... +onionServices.authPreferences.dialogTitle=Ключі служб onion +onionServices.authPreferences.dialogIntro=Ключі для наступних оніонсайтів зберігаються на вашому комп'ютері +onionServices.authPreferences.onionSite=Оніонсайт +onionServices.authPreferences.onionKey=Ключ +onionServices.authPreferences.remove=Прибрати +onionServices.authPreferences.removeAll=Вилучити всі +onionServices.authPreferences.failedToGetKeys=Неможливо отримати ключі з tor +onionServices.authPreferences.failedToRemoveKey=Неможливо вилучити ключ +onionServices.v2Deprecated.pageTitle=Попередження про припинення підтримки версії 2 Onion сайту +onionServices.v2Deprecated.header=Версія 2 Onion-сайтів стане застарілою найближчім часом +onionServices.v2Deprecated=Цей onion-сайт буде недоступний найближчим часом. Будь ласка, зв’яжіться з адміністратором сайту та заохочуйте його до оновлення. +onionServices.v2Deprecated.longDescription=Tor припиняє підтримку служб onion версії 2, починаючи з липня 2021 року, і цей onion-сайт більше не буде доступним за цією адресою. Якщо ви адміністратор сайту, незабаром оновіть службу onion версії 3. +onionServices.v2Deprecated.tryAgain=Зрозуміло +onionServices.v2Deprecated.tooltip=Цей onion-сайт буде недоступний найближчим часом + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Завжди надавати перевагу оніонсайтам +onionLocation.alwaysPrioritizeAccessKey=а +onionLocation.notNow=Не зараз +onionLocation.notNowAccessKey=p +onionLocation.description=Існує більш приватна та безпечна версія цього сайту, доступна у мережі Tor через службу onion. Служби Onion допомагають видавцям веб-сайтів та їхнім відвідувачам подолати стеження та цензуру. +onionLocation.tryThis=Спробувати сервіси onion +onionLocation.onionAvailable=.onion доступний +onionLocation.learnMore=Дізнатися більше... +onionLocation.always=Завжди +onionLocation.askEverytime=Запитувати кожного разу +onionLocation.prioritizeOnionsDescription=Надавати перевагу відомим сайтам .onion. +onionLocation.onionServicesTitle=Служби Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=Адресу криптовалюти (%S) скопійовано з незахищеного веб-сайту. Його можна було змінити. +cryptoSafetyPrompt.whatCanHeading=Що ви з цим можете зробити? +cryptoSafetyPrompt.whatCanBody=Ви можете спробувати повторно підключитися за допомогою нової схеми, щоб встановити безпечне з’єднання, або погодьтеся на ризик і відхиліть це попередження. +cryptoSafetyPrompt.learnMore=Дізнатися більше +cryptoSafetyPrompt.primaryAction=Вкладка перезавантаження з новою схемою +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Відхилити попередження +cryptoSafetyPrompt.secondaryActionAccessKey=б + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Включено +rulesets.disabled=Вимкнено +# Ruleset details/edit ruleset +rulesets.edit=Змінити +rulesets.name=Ім'я +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Ціль +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Перевірити на оновлення +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Зберегти +rulesets.cancel=Відмінити diff --git a/toolkit/torbutton/chrome/locale/uk/torlauncher.properties b/toolkit/torbutton/chrome/locale/uk/torlauncher.properties new file mode 100644 index 000000000000..fe552fb2f625 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/uk/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Завантажувач Tor + +torlauncher.tor_exited_during_startup=Tor завершив роботу під час запуску. Це може бути викликано помилкою у Вашому torrc файлі, недоробкою в Tor або іншій програмі на Вашій системі, або несправним обладнанням. Доки Ви не усунете первісну проблему і не перезапустите Tor, Tor Browser не працюватиме. +torlauncher.tor_exited=Tor несподівано завершив роботу. Це може бути пов'язано з помилкою в Torі, іншою програмою на вашій системі, або несправним обладнанням. Поки ви не перевантажите Tor, браузер Tor буде не в змозі досягти будь-яких веб-сайтів. Якщо проблема не усувається, то, будь ласка, відправте копію журналу Tor у службу підтримки. +torlauncher.tor_exited2=Перезапуск Tor не буде закривати вкладки вашого браузера. +torlauncher.tor_controlconn_failed=Неможливо з'єднатися з портом управління Tor. +torlauncher.tor_failed_to_start=Tor не зміг запуститися. +torlauncher.tor_control_failed=Збій отримання контролю над Tor. +torlauncher.tor_bootstrap_failed=Tor не вдалося встановити з'єднання з мережею Tor. +torlauncher.tor_bootstrap_failed_details=%1$S невдало (%2$S). + +torlauncher.unable_to_start_tor=Неможливо запустити Tor.\n\n%S +torlauncher.tor_missing=Виконуваний файл Tor відсутній. +torlauncher.torrc_missing=Файл torrc відсутній та не може бути створена. +torlauncher.datadir_missing=Директорія для даних Tor не існує і не може бути створена. +torlauncher.onionauthdir_missing=Каталог цибулинної автентифікації Tor не існує і не може бути створений. +torlauncher.password_hash_missing=Не вдалося отримати хеширований пароль. + +torlauncher.failed_to_get_settings=Не вдалося отримати налаштування Tor.\n\n%S +torlauncher.failed_to_save_settings=Неможливо зберегти налаштування Tor.\n\n%S +torlauncher.ensure_tor_is_running=Переконайтеся що Tor запущений. + +torlauncher.error_proxy_addr_missing=Ви повинні вказати IP-адресу або ім'я хоста і порт, щоб налаштувати Tor і використовувати проксі для доступу в Інтернет. +torlauncher.error_proxy_type_missing=Ви повинні вибрати тип проксі. +torlauncher.error_bridges_missing=Ви повинні вказати один або кілька мережевих мостів. +torlauncher.error_default_bridges_type_missing=Ви повинні вибрати тип транспорту для наданих мережевих мостів. +torlauncher.error_bridgedb_bridges_missing=Надішліть запит на отримання мосту. +torlauncher.error_bridge_bad_default_type=Немає мережевих мостів які мають тип транспорту %S. Будь ласка перевірте ваші налаштування. + +torlauncher.bridge_suffix.meek-amazon=(працює в Китаї) +torlauncher.bridge_suffix.meek-azure=(працює в Китаї) + +torlauncher.request_a_bridge=Надіслати запит на отримання мосту... +torlauncher.request_a_new_bridge=Надіслати запит на отримання нового мосту... +torlauncher.contacting_bridgedb=З'єднання з базою даних мостів. Зачекайте. +torlauncher.captcha_prompt=Розв'яжіть CAPTCHA, щоб надіслати запит на отримання мосту. +torlauncher.bad_captcha_solution=Розв'язання невірне. Спробуйте знову. +torlauncher.unable_to_get_bridge=Не вдалося отримати міст з бази даних мостів.\n\n%S +torlauncher.no_meek=Цей браузер не налаштований для роботи з meek, необхідним для отримання мостів. +torlauncher.no_bridges_available=Наразі немає доступних мостів. Шкода. + +torlauncher.connect=З'єднатися +torlauncher.restart_tor=Перезапустити Tor +torlauncher.quit=Вийти +torlauncher.quit_win=Вихід +torlauncher.done=Готово + +torlauncher.forAssistance=Для допомоги зв'яжіться з %S +torlauncher.forAssistance2=Для отримання допомоги, будь ласка звертайтеся %S + +torlauncher.copiedNLogMessages=Копіювання завершено. %S повідомлень журналу tor готові до вставки у текстовий редактор або повідомлення електронної пошти. + +torlauncher.bootstrapStatus.starting=Запуск +torlauncher.bootstrapStatus.conn_pt=З'єднання з мостом +torlauncher.bootstrapStatus.conn_done_pt=З'єднано з мостом +torlauncher.bootstrapStatus.conn_proxy=З'єднання з проксі-сервером +torlauncher.bootstrapStatus.conn_done_proxy=З'єднано з проксі-сервером +torlauncher.bootstrapStatus.conn=З'єднання з ретранслятором Tor +torlauncher.bootstrapStatus.conn_done=З'єднано з ретранслятором Tor +torlauncher.bootstrapStatus.handshake=Обмін даними з ретранслятором Tor +torlauncher.bootstrapStatus.handshake_done=Обмін даними з ретранслятором Tor завершено +torlauncher.bootstrapStatus.onehop_create=Встановлення зашифрованого з'єднання до каталогу +torlauncher.bootstrapStatus.requesting_status=Отримання стану мережі +torlauncher.bootstrapStatus.loading_status=Завантаження стану мережі +torlauncher.bootstrapStatus.loading_keys=Завантаження сертифікатів авторизації +torlauncher.bootstrapStatus.requesting_descriptors=Запит інформації про марщрутизацію +torlauncher.bootstrapStatus.loading_descriptors=Завантаження інформації про маршрутизацію +torlauncher.bootstrapStatus.enough_dirinfo=Завантаження інформації про ретранслятор завершено +torlauncher.bootstrapStatus.ap_conn_pt=Побудова кіл: З'єднання з мостом +torlauncher.bootstrapStatus.ap_conn_done_pt=Побудова кіл: З'єднано з мостом +torlauncher.bootstrapStatus.ap_conn_proxy=Побудова кіл: З'єднання з проксі-сервером +torlauncher.bootstrapStatus.ap_conn_done_proxy=Побудова кіл: З'єднано з проксі-сервером +torlauncher.bootstrapStatus.ap_conn=Побудова кіл: З'єднання з ретранслятором Tor +torlauncher.bootstrapStatus.ap_conn_done=Побудова кіл: З'єднано з ретранслятором Tor +torlauncher.bootstrapStatus.ap_handshake=Побудова кіл: Обмін даними з ретранслятором Tor +torlauncher.bootstrapStatus.ap_handshake_done=Побудова кіл: Обмін даними з ретранслятором Tor завершено +torlauncher.bootstrapStatus.circuit_create=Побудова кіл: Встановлення кола Tor +torlauncher.bootstrapStatus.done=Підключений до мережі Tor! + +torlauncher.bootstrapWarning.done=виконано +torlauncher.bootstrapWarning.connectrefused=у підключені відмовлено +torlauncher.bootstrapWarning.misc=різне +torlauncher.bootstrapWarning.resourcelimit=недостатні ресурси +torlauncher.bootstrapWarning.identity=невідповідність ідентифікації +torlauncher.bootstrapWarning.timeout=тайм-аут з'єднання +torlauncher.bootstrapWarning.noroute=не вказаний шлях до хосту +torlauncher.bootstrapWarning.ioerror=помилка читання / запису +torlauncher.bootstrapWarning.pt_missing=пропущений підключуваний транспорт + +torlauncher.nsresult.NS_ERROR_NET_RESET=З'єднання з сервером втрачено. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Не вдалося з'єднатися з сервером. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Не вдалося з'єднатися з проксі-сервером. + +torlauncher.copiedNLogMessagesShort=Скопійовано %S логів diff --git a/toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd new file mode 100644 index 000000000000..9f90c6e81206 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; được phát triển bởi"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "the &vendorShortName;"> +<!ENTITY project.end ", một công viêc phi lợi nhuận để bảo vệ sự riêng tư và tự do trực tuyến của bạn."> + +<!ENTITY help.start "Muốn giúp đỡ?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "Quyên góp"> +<!ENTITY help.or "hoặc"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "tham gia"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "Những câu hỏi?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "Giúp đỡ mạng lưới Tor phát triển!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "Thông tin bản quyền"> +<!ENTITY tor.TrademarkStatement "'Tor' và logo Củ hành là thương hiệu đã được đăng ký của Tor Project, Inc."> diff --git a/toolkit/torbutton/chrome/locale/vi/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/vi/aboutTBUpdate.dtd new file mode 100644 index 000000000000..54151896ea2e --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Nhật kí thay dổi trình duyệt Tor"> +<!ENTITY aboutTBUpdate.updated "Trình duyệt Tor đã được cập nhật"> +<!ENTITY aboutTBUpdate.linkPrefix "Dành cho những thông tin cập nhật mới nhất về bản phát hành này,"> +<!ENTITY aboutTBUpdate.linkLabel "đến thăm trang của chúng tôi"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Phiên bản"> +<!ENTITY aboutTBUpdate.releaseDate "Ngày giới thiệu"> +<!ENTITY aboutTBUpdate.releaseNotes "Ghi chú phát hành"> diff --git a/toolkit/torbutton/chrome/locale/vi/aboutTor.dtd b/toolkit/torbutton/chrome/locale/vi/aboutTor.dtd new file mode 100644 index 000000000000..381db4f613ae --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "Thông tin về Tor"> + +<!ENTITY aboutTor.viewChangelog.label "Xem nhật kí thay dổi"> + +<!ENTITY aboutTor.ready.label "Truy cập Internet. Một cách riêng tư."> +<!ENTITY aboutTor.ready2.label "Bạn đã sẵn sàng cho trải nghiệm duyệt web riêng tư nhất trên thế giới."> +<!ENTITY aboutTor.failure.label "Có Lỗi Xảy Ra!"> +<!ENTITY aboutTor.failure2.label "Tor không hoạt động trên trình duyệt này."> + +<!ENTITY aboutTor.search.label "Tìm kiếm với DuckDuckGo"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Những câu hỏi?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "Xem qua Hướng dẫn sử dụng trình duyệt Tor »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Hướng dẫn sử dụng trình duyệt Tor"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project là một tổ chức phi lợi nhuận 501(c)(3) của Hoa Kỳ nhằm thúc đẩy quyền con người và tự do bằng cách tạo và triển khai các công nghệ đảm bảo quyền riêng tư và ẩn danh miễn phí và dựa trên mã nguồn mở, hỗ trợ tính sẵn có và sử dụng không hạn chế của chúng, và giúp phổ biến hơn nữa sự hiểu biết về tính khoa học của những công nghệ này đối với cộng đồng."> +<!ENTITY aboutTor.getInvolved.label "Tham gia »"> + +<!ENTITY aboutTor.newsletter.tagline "Nhận thông tin mới nhất từ Tor được gửi tới hộp thư của bạn."> +<!ENTITY aboutTor.newsletter.link_text "Đăng kí nhận tin tức từ Tor."> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor miễn phí là nhờ sự ủng hộ của những người như bạn."> +<!ENTITY aboutTor.donationBanner.buttonA "Đóng góp Ngay bây giờ"> + +<!ENTITY aboutTor.alpha.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "Test. Thoroughly."> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "Donate Ngay bây giờ"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Sự đóng góp của bạn sẽ được kết hợp với Friends of Tor."> diff --git a/toolkit/torbutton/chrome/locale/vi/brand.dtd b/toolkit/torbutton/chrome/locale/vi/brand.dtd new file mode 100644 index 000000000000..8bec51554444 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Trình duyệt Tor"> +<!ENTITY brandShortName "Trình duyệt Tor"> +<!ENTITY brandFullName "Trình duyệt Tor"> +<!ENTITY vendorShortName "Dự án Tor"> +<!ENTITY trademarkInfo.part1 "'Tor' và logo Củ hành là thương hiệu đã được đăng ký của Tor Project, Inc."> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Trình duyệt Tor"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "Bấm chuột để tải những những chương trình gắn thêm vào hệ thống đã được cài đặt"> +<!ENTITY plugins.installed.enable "Cho phép những chương trình gắn thêm"> +<!ENTITY plugins.installed.disable "Vô hiệu những chương trình gắn thêm"> +<!ENTITY plugins.installed.disable.tip "Bấm chuột để ngăn chặn việc tải những những chương trình gắn thêm vào hệ thống"> diff --git a/toolkit/torbutton/chrome/locale/vi/brand.properties b/toolkit/torbutton/chrome/locale/vi/brand.properties new file mode 100644 index 000000000000..26559eeb7d8b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Trình duyệt Tor +brandShortName=Trình duyệt Tor +brandFullName=Trình duyệt Tor +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Trình duyệt Tor +vendorShortName=Dự án Tor + +homePageSingleStartMain=Firefox Start, một trang chủ nhanh với trình tìm kiếm được tích hợp sẵn +homePageImport=Nhập trang chủ của bạn từ %S + +homePageMigrationPageTitle=Lựa chọn trang chủ +homePageMigrationDescription=Vui lòng chọn trang chủ mà bạn muốn dùng: + +syncBrandShortName=Đồng bộ hóa diff --git a/toolkit/torbutton/chrome/locale/vi/branding/brand.ftl b/toolkit/torbutton/chrome/locale/vi/branding/brand.ftl new file mode 100644 index 000000000000..a504879dfad1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Trình duyệt Tor +-brand-short-name = Trình duyệt Tor +-brand-full-name = Trình duyệt Tor +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Trình duyệt Tor +-vendor-short-name = Dự án Tor +trademarkInfo = 'Tor' và logo Củ hành là thương hiệu đã được đăng ký của Tor Project, Inc. diff --git a/toolkit/torbutton/chrome/locale/vi/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/vi/browserOnboarding.properties new file mode 100644 index 000000000000..f0c784cbe73f --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=Xin chào +onboarding.tour-tor-welcome.title=You’re ready. +onboarding.tour-tor-welcome.description=Tor Browser offers the highest standard of privacy and security while browsing the web. You’re now protected against tracking, surveillance, and censorship. This quick onboarding will show you how. +onboarding.tour-tor-welcome.next-button=Go to Privacy + +onboarding.tour-tor-privacy=Riêng tư +onboarding.tour-tor-privacy.title=Chống theo dõi, rình mò. +onboarding.tour-tor-privacy.description=Trình duyệt Tor cô lập cookies và xoá lịch sử duyệt web của bạn sau mỗi phiên. Những thay đổi này đảm bảo quyền riêng tư của bạn được bảo vệ trong trình duyệt. Nhân 'Tor Network' để tìm hiểu cách chúng tôi bảo vệ bạn trên cấp độ mạng. +onboarding.tour-tor-privacy.button=Đi đến mạng Tor + +onboarding.tour-tor-network=Mạng Tor +onboarding.tour-tor-network.title=Di chuyển trên mạng lưới phi tập trung. +onboarding.tour-tor-network.description=Tor Browser connects you to the Tor network run by thousands of volunteers around the world. Unlike a VPN, there’s no one point of failure or centralized entity you need to trust in order to enjoy the internet privately. +onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences. +onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings +onboarding.tour-tor-network.button=Go to Circuit Display + +onboarding.tour-tor-circuit-display=Circuit Display +onboarding.tour-tor-circuit-display.title=See your path. +onboarding.tour-tor-circuit-display.description=For each domain you visit, your traffic is relayed and encrypted in a circuit across three Tor relays around the world. No website knows where you are connecting from. You can request a new circuit by clicking ‘New Circuit for this Site’ on our Circuit Display. +onboarding.tour-tor-circuit-display.button=See My Path +onboarding.tour-tor-circuit-display.next-button=Go to Security + +onboarding.tour-tor-security=Bảo mật +onboarding.tour-tor-security.title=Chọn trải nghiệm của bạn. +onboarding.tour-tor-security.description=We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer. Click below to see what the different options do. +onboarding.tour-tor-security.description-suffix=Note: By default, NoScript and HTTPS Everywhere are not included on the toolbar, but you can customize your toolbar to add them. +onboarding.tour-tor-security-level.button=See Your Security Level +onboarding.tour-tor-security-level.next-button=Go to Experience Tips + +onboarding.tour-tor-expect-differences=Experience Tips +onboarding.tour-tor-expect-differences.title=Expect some differences. +onboarding.tour-tor-expect-differences.description=With all the security and privacy features provided by Tor, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot. +onboarding.tour-tor-expect-differences.button=See FAQs +onboarding.tour-tor-expect-differences.next-button=Go to Onion Services + +onboarding.tour-tor-onion-services=Các Dịch vụ Onion +onboarding.tour-tor-onion-services.title=Be extra protected. +onboarding.tour-tor-onion-services.description=Onion services are sites that end with a .onion that provide extra protections to publishers and visitors, including added safeguards against censorship. Onion services allow anyone to provide content and services anonymously. Click below to visit the DuckDuckGo onion site. +onboarding.tour-tor-onion-services.button=Visit an Onion +onboarding.tour-tor-onion-services.next-button=Hoàn tất + +onboarding.overlay-icon-tooltip-updated2=See what's new\nin %S +onboarding.tour-tor-update.prefix-new=Mới +onboarding.tour-tor-update.prefix-updated=Updated + +onboarding.tour-tor-toolbar=Toolbar +onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button. +onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser. +onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu. +onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity +onboarding.tour-tor-toolbar-update-9.0.next-button=Đi đến mạng Tor + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=Kế tiếp +onboarding.tor-circuit-display.done=Hoàn tất +onboarding.tor-circuit-display.one-of-three=1 of 3 +onboarding.tor-circuit-display.two-of-three=2 of 3 +onboarding.tor-circuit-display.three-of-three=3 of 3 + +onboarding.tor-circuit-display.intro.title=How do circuits work? +onboarding.tor-circuit-display.intro.msg=Circuits are made up of randomly assigned relays, which are computers around the world configured to forward Tor traffic. Circuits allow you to browse privately and to connect to onion services. + +onboarding.tor-circuit-display.diagram.title=Circuit Display +onboarding.tor-circuit-display.diagram.msg=This diagram shows the relays that make up the circuit for this website. To prevent linking of activity across different sites, each website gets a different circuit. + +onboarding.tor-circuit-display.new-circuit.title=Do you need a new circuit? +onboarding.tor-circuit-display.new-circuit.msg=If you are not able to connect to the website you’re trying to visit or it is not loading properly, then you can use this button to reload the site with a new circuit. diff --git a/toolkit/torbutton/chrome/locale/vi/network-settings.dtd b/toolkit/torbutton/chrome/locale/vi/network-settings.dtd new file mode 100644 index 000000000000..b364abcab9f1 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Những cài đặt của mạng Tor"> +<!ENTITY torsettings.wizard.title.default "Kết nối tới Tor"> +<!ENTITY torsettings.wizard.title.configure "Những cài đặt của mạng Tor"> +<!ENTITY torsettings.wizard.title.connecting "Tạo kết nối"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Ngôn ngữ Trình duyệt Tor"> +<!ENTITY torlauncher.localePicker.prompt "Vui lòng chọn một ngôn ngữ."> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "Nhấn "Kết nối" để kết nối tới mạng Tor"> +<!ENTITY torSettings.configurePrompt "Nhấn "Cấu hình" để điều chỉnh cài đặt mạng nếu bạn đang ở quốc gia đang kiểm duyệt Tor (chẳng hạn như Ai Cập, Trung Quốc, Thổ Nhĩ Kỳ) hoặc bạn đang kết nối từ mạng riêng tư yêu cầu proxy."> +<!ENTITY torSettings.configure "Cấu hình"> +<!ENTITY torSettings.connect "Kết nối"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "Chờ đợi để Tor khởi động.."> +<!ENTITY torsettings.restartTor "Khởi động lại Tor"> +<!ENTITY torsettings.reconfigTor "Cấu hình lại"> + +<!ENTITY torsettings.discardSettings.prompt "Bạn phải cấu hình cầu nối Tor hoặc bạn phải nhập cài đặt ủy quyền nội bộ.  Để tạo một kết nối trực tiếp tới mạng lưới Tor, những cài đặt này phải được loại bỏ."> +<!ENTITY torsettings.discardSettings.proceed "Loại bỏ những cài đặt và kết nối"> + +<!ENTITY torsettings.optional "Tuỳ chọn"> + +<!ENTITY torsettings.useProxy.checkbox "Tôi sử dụng proxy để kết nối tới Internet"> +<!ENTITY torsettings.useProxy.type "Loại proxy"> +<!ENTITY torsettings.useProxy.type.placeholder "chọn loại proxy"> +<!ENTITY torsettings.useProxy.address "Địa chỉ nhà"> +<!ENTITY torsettings.useProxy.address.placeholder "Địa chỉ IP hoặc hostname"> +<!ENTITY torsettings.useProxy.port "Cổng"> +<!ENTITY torsettings.useProxy.username "Tên đăng nhập"> +<!ENTITY torsettings.useProxy.password "Mật mã"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCK 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCK 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "Máy tính này đi qua một tường lửa mà chỉ cho phép tới một vài cổng"> +<!ENTITY torsettings.firewall.allowedPorts "Cổng được cho phép"> +<!ENTITY torsettings.useBridges.checkbox "Tor đã bị kiểm duyệt ở quốc gia của tôi"> +<!ENTITY torsettings.useBridges.default "Sử dụng cầu nối có sẵn"> +<!ENTITY torsettings.useBridges.default.placeholder "chọn loại cầu nối"> +<!ENTITY torsettings.useBridges.bridgeDB "Yêu cầu một cầu nối từ torproject.org"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Nhập đối tượng từ hình ảnh"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Nhận thử thách mới"> +<!ENTITY torsettings.useBridges.captchaSubmit "Gửi"> +<!ENTITY torsettings.useBridges.custom "Cung cấp cầu nối mà tôi biết"> +<!ENTITY torsettings.useBridges.label "Nhập thông tin cầu nối từ một nguồn tin cậy."> +<!ENTITY torsettings.useBridges.placeholder "nhập địa chỉ:cổng (một trên mỗi dòng)"> + +<!ENTITY torsettings.copyLog "Chép nhật ký của Tor vào Clipboard"> + +<!ENTITY torsettings.proxyHelpTitle "Trợ giúp proxy"> +<!ENTITY torsettings.proxyHelp1 "Proxy cục bộ có thể cần thiết khi kết nối qua mạng ở công ty hay trường học. Nếu bạn không chắc rằng có cần dùng proxy hay không, xem cài đặt Internet ở một trình duyệt khác hoặc kiểm tra cài đặt Internet của hệ thống."> + +<!ENTITY torsettings.bridgeHelpTitle "Giúp đỡ về Tiếp sức cầu nối"> +<!ENTITY torsettings.bridgeHelp1 "Cầu nối là những rơle không công khai giúp kết nối tới mạng Tor khó bị chặn hơn.  Mỗi loại cầu nối sử dụng một phương thức khác nhau để tránh kiểm duyệt.  Cầu nối obfs khiến lưu lượng của bạn trông như ngẫu nhiên, còn cầu nối meek khiến lưu lượng của bạn trông như đang kết nối tới dịch vụ đó thay vì Tor."> +<!ENTITY torsettings.bridgeHelp2 "Vì một vài quốc gia chặn Tor theo những cách khác nhau, cầu nối này có thể hoạt động ở quốc gia này nhưng không được ở quốc gia khác.  Nếu bạn không chắc cầu nối nào hoạt động ở quốc gia bạn, hãy truy cập torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "Vui lòng chờ trong khi chúng tôi thiết lập kết nối tới mạng lưới Tor.  Việc này có thể mất một vài phút."> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "Kết nối"> +<!ENTITY torPreferences.torSettings "Cài đặt Tor"> +<!ENTITY torPreferences.torSettingsDescription "Trình duyệt Tor dẫn lưu lượng của bạn qua mạng Tor, vận hành bởi hàng ngàn tình nguyện viên khắp thế giới." > +<!ENTITY torPreferences.learnMore "Tìm hiểu thêm"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "Kiểm tra"> +<!ENTITY torPreferences.statusInternetOnline "Trực tuyến"> +<!ENTITY torPreferences.statusInternetOffline "Ngoại tuyến"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "Đã kết nối"> +<!ENTITY torPreferences.statusTorNotConnected "Not Connected"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "Tìm hiểu thêm"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "Quickstart"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "Cầu Nối"> +<!ENTITY torPreferences.bridgesDescription "Cầu nối giúp bạn truy cập mạng Tor ở những nơi mạng Tor bị chặn. Tùy vào vị trí của bạn mà một cầu nối có thể hoạt động tốt hơn cầu nối khác."> +<!ENTITY torPreferences.bridgeLocation "Your location"> +<!ENTITY torPreferences.bridgeLocationAutomatic "Tự động"> +<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations"> +<!ENTITY torPreferences.bridgeLocationOther "Other locations"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "Gỡ bỏ"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "Copied!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "Yêu cầu Cầu nối..."> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "Nâng cao"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "Settings…"> +<!ENTITY torPreferences.viewTorLogs "View the Tor logs"> +<!ENTITY torPreferences.viewLogs "Xem nhật kí..."> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone."> +<!ENTITY torPreferences.cancel "Hủy bỏ"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "Scan the QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "Yêu cầu cầu nối"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Đang kết nối tới BridgeDB. Vui lòng đợi."> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Giải mã CAPTCHA để yêu cầu cầu nối."> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "Kết quả không đúng. Vui lòng thử lại."> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "Nhập thông tin cầu nối từ một nguồn tin cậy."> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Nhật kí Tor"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "Not Connected"> +<!ENTITY torConnect.connectingConcise "Đang kết nối..."> +<!ENTITY torConnect.tryingAgain "Trying again…"> +<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…"> +<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "Location settings"> +<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge"> +<!ENTITY torConnect.automatic "Tự động"> +<!ENTITY torConnect.selectCountryRegion "Select Country or Region"> +<!ENTITY torConnect.frequentLocations "Frequently selected locations"> +<!ENTITY torConnect.otherLocations "Other locations"> +<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser"> +<!ENTITY torConnect.configureConnection "Configure Connection…"> +<!ENTITY torConnect.viewLog "View logs…"> +<!ENTITY torConnect.tryAgain "Thử lại"> +<!ENTITY torConnect.offline "Internet not reachable"> +<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect"> +<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network"> +<!ENTITY torConnect.yourLocation "Your Location"> +<!ENTITY torConnect.tryBridge "Try a Bridge"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed"> +<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country"> +<!ENTITY torConnect.noSettingsForCountry "No settings available for your location"> diff --git a/toolkit/torbutton/chrome/locale/vi/onboarding.properties b/toolkit/torbutton/chrome/locale/vi/onboarding.properties new file mode 100644 index 000000000000..2371df40f934 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=Bạn mới sử dụng %S?\n Hãy bắt đầu. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S hoàn toàn mới.\n Xem những gì bạn có thể làm! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=Đóng +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=Bỏ qua +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=Hoàn thành diff --git a/toolkit/torbutton/chrome/locale/vi/torbutton.dtd b/toolkit/torbutton/chrome/locale/vi/torbutton.dtd new file mode 100644 index 000000000000..6227e29922a2 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "Danh tính mới"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "Mạch nối Tor mới cho trang này"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Những cài đặt Mạng Tor..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "Kiểm tra Bản cập nhật của trình duyệt Tor..."> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Những sự bảo vệ Cookie..."> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "Bấm chuột để khởi chạy Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Những cài đặt bảo mật cho trình duyệt Tor"> +<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections"> +<!ENTITY torbutton.cookiedialog.lockCol "Protected"> +<!ENTITY torbutton.cookiedialog.domainCol "Host"> +<!ENTITY torbutton.cookiedialog.nameCol "Name"> +<!ENTITY torbutton.cookiedialog.pathCol "Path"> +<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies"> +<!ENTITY torbutton.prefs.sec_caption "Mức độ Bảo mật"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "Những Người điều chỉnh an ninh để cho bạn vô hiệu một vài tính năng của trình duyệt mà có thể làm trình duyệt của bạn dễ bị tổn thương đổi với những cố gắng tấn công."> +<!ENTITY torbutton.prefs.sec_standard_label "Chuẩn"> +<!ENTITY torbutton.prefs.sec_standard_description "Tất cả các tính năng của Trình duyệt Tor và trang web đều được bật."> +<!ENTITY torbutton.prefs.sec_safer_label "An toàn hơn"> +<!ENTITY torbutton.prefs.sec_safer_description "Vô hiệu hóa tính năng website thường gây nguy hiểm, khiến một số trang web mất chức năng."> +<!ENTITY torbutton.prefs.sec_safer_list_label "Ở cài đặt an toàn hơn:"> +<!ENTITY torbutton.prefs.sec_safest_label "An toàn nhất"> +<!ENTITY torbutton.prefs.sec_safest_description "Chỉ cho phép các tính năng trang web được yêu cầu cho các trang web tĩnh và các dịch vụ cơ bản. Những thay đổi này ảnh hưởng đến hình ảnh, phương tiện và tập lệnh."> +<!ENTITY torbutton.prefs.sec_safest_list_label "Ở cài đặt an toàn nhất:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "Biết thêm"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript bị vô hiệu trên các trang web không có HTTPS."> +<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript mặc định bị vô hiệu trên tất cả các trang."> +<!ENTITY torbutton.prefs.sec_limit_typography "Một số phông chữ và ký hiêu toán học bị vô hiệu."> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Một số phông chữ, biểu tượng, và hình ảnh bị vô hiệu."> +<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media), and WebGL are click-to-play."> +<!ENTITY torbutton.prefs.sec_custom_warning "Tùy chỉnh"> +<!ENTITY torbutton.prefs.sec_overview "Disable certain web features that can be used to attack your security and anonymity."> +<!ENTITY torbutton.prefs.sec_standard_tooltip "Security Level : Standard"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "Security Level : Safer"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "Security Level : Safest"> +<!ENTITY torbutton.prefs.sec_custom_summary "Những điều chỉnh trong trình duyệt của bạn vừa tạo ra những lỗi bảo mật bất thường. Vì những lý do bảo mật và riêng tư, chúng tôi khuyến cáo bạn chọn những cấp độ bảo mật mặc định khác."> +<!ENTITY torbutton.prefs.sec_restore_defaults "Khôi phục trạng thái mặc định"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "Advanced Security Settings…"> +<!ENTITY torbutton.prefs.sec_change "Change…"> +<!ENTITY torbutton.circuit_display.title "Mạch Tor"> +<!ENTITY torbutton.circuit_display.new_circuit "Mạch Tor mới cho trang này"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Remember this key"> diff --git a/toolkit/torbutton/chrome/locale/vi/torbutton.properties b/toolkit/torbutton/chrome/locale/vi/torbutton.properties new file mode 100644 index 000000000000..721c7486d426 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = Internet +torbutton.circuit_display.ip_unknown = Địa chỉ IP không biết đến +torbutton.circuit_display.onion_site = Trang củ hành +torbutton.circuit_display.this_browser = Trình duyệt này +torbutton.circuit_display.relay = Tiếp sức +torbutton.circuit_display.tor_bridge = Cầu nối +torbutton.circuit_display.unknown_country = Đất nước không được biết đến +torbutton.circuit_display.guard = Bảo vệ +torbutton.circuit_display.guard_note = Nút [Bảo vệ} của bạn có thể không thay đổi. +torbutton.circuit_display.learn_more = Biết thêm +torbutton.circuit_display.click_to_copy = Click to Copy +torbutton.circuit_display.copied = Copied! +torbutton.content_sizer.margin_tooltip = Trình duyệt Tor thêm lề này để làm cho chiều rộng và chiều cao của màn hình của bạn ít dễ bị phân biệt hơn, và vì thế giảm khả năng của những người theo dõi bạn trực tuyến. +extensions.torbutton@torproject.org.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data. +torbutton.popup.external.title = Tải về một loại tập tin bên ngoài? +torbutton.popup.external.app = Trình duyệt Tor không thể hiển thị tập tin này. Bạn cần mở nó với một ứng dụng khác.\n\n +torbutton.popup.external.note = Môộtiài loại tập tin có thể làm những ứng dụng kết nối tới Internet mà không dùng Tor.\n\n +torbutton.popup.external.suggest = Để an toàn, bạn chỉ nên mở những tập tin được tải về khi đang offline, hoặc sử dụng một Tor Live CD như là Tails.\n +torbutton.popup.launch = Tải tập tin +torbutton.popup.cancel = Hủy bỏ +torbutton.popup.dontask = Tự động tải những tập tin kể từ bây giờ +torbutton.popup.no_newnym = Torbutton không thể đưa bạn một danh tính mới một cách an toàn. Nó không có đường truy cập vào Tor Control Port.\n\nCó phải bạn đang dùng Tor Browser Bundle? +torbutton.security_settings.menu.title = Những cài đặt về an ninh +torbutton.title.prompt_torbrowser = Important Torbutton Information +torbutton.popup.prompt_torbrowser = Torbutton works differently now: you can't turn it off any more.\n\nWe made this change because it isn't safe to use Torbutton in a browser that's also used for non-Tor browsing. There were too many bugs there that we couldn't fix any other way.\n\nIf you want to keep using Firefox normally, you should uninstall Torbutton and download Tor Browser Bundle. The privacy properties of Tor Browser are also superior to those of normal Firefox, even when Firef [...] +torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information. + +torbutton.popup.confirm_plugins = Plugins such as Flash can harm your privacy and anonymity.\n\nThey can also bypass Tor to reveal your current location and IP address.\n\nAre you sure you want to enable plugins?\n\n +torbutton.popup.never_ask_again = Never ask me again +torbutton.popup.confirm_newnym = Trình duyệt Tor sẽ đóng tất cả cửa sổ và các thẻ. Mọi trang phiên của trang web sẽ mất.\n\nKhởi động lại Trình duyệt Tor bây giờ để đặt lại danh tính của bạn?\n\n + +torbutton.maximize_warning = Mở rộng tối đa Trình duyệt Tor có thể cho phép trang web xác định kích cỡ màn hình của bạn, thứ có thể được dùng để theo dõi bạn. Chúng tôi khuyên bạn để của sổ Trình duyệt Tor ở kích cỡ mặc định gốc. + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=Trang web này (%S) đã cố gắng trích xuất dữ liệu bức vẽ hình ảnh HTML5, thứ có thể sử dụng để xác định một cách duy nhất máy tính của bạn.\n\nTrình duyệt Tor có nên cho phép trang web này trích xuất dữ liệu bức vẽ hình ảnh HTML5? +canvas.notNow=Không phải bây giờ +canvas.notNowAccessKey=N +canvas.allow=Cho phép trong tương lai +canvas.allowAccessKey=T +canvas.never=Không bao giờ đối với trang này (được khuyến khích) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S Vấn đề về cấu hình +profileReadOnly=Bạn không thể chạy %S từ một tập tin hệ thống chỉ cho đọc. Vui lòng chép %S tới một vị trí khác trước khi sử dụng nó. +profileReadOnlyMac=Bạn không thể chạy %S từ một tập tin hệ thống chỉ cho đọc. Vui lòng chép %S tới Desktop hoặc ứng dụng thư mục trước khi cố gắng sử dụng nó. +profileAccessDenied=%S không được phép truy cập cấu hình. Vui lòng điều chỉnh sự cho phép của tập tin hệ thống và thử lại. +profileMigrationFailed=Việc di chuyển hồ sơ %S hiện tại của bạn đã thất bại.\nNhững cài đặt mới sẽ được sử dụng. + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=Downloading %S update + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=Đã mã hóa kết nối (Onion Service, %1$S, %2$S bit keys, %3$S) +pageInfo_OnionEncryption=Đã mã hóa kết nối (Onion Service) +pageInfo_OnionName=Onion Name: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=Biết thêm +onionServices.errorPage.browser=Trình duyệt +onionServices.errorPage.network=Mạng lưới +onionServices.errorPage.onionSite=Onionsite +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=Problem Loading Onionsite +onionServices.descNotFound.header=Onionsite Not Found +onionServices.descNotFound=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client. +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=Problem Loading Onionsite +onionServices.descInvalid.header=Onionsite Cannot Be Reached +onionServices.descInvalid=The onionsite is unreachable due an internal error. +onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed. +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=Problem Loading Onionsite +onionServices.introFailed.header=Onionsite Has Disconnected +onionServices.introFailed=The most likely cause is that the onionsite is offline. Contact the onionsite administrator. +onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running. +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=Problem Loading Onionsite +onionServices.rendezvousFailed.header=Unable to Connect to Onionsite +onionServices.rendezvousFailed=The onionsite is busy or the Tor network is overloaded. Try again later. +onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection. +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=Authorization Required +onionServices.clientAuthMissing.header=Onionsite Requires Authentication +onionServices.clientAuthMissing=Access to the onionsite requires a key but none was provided. +onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing. +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=Authorization Failed +onionServices.clientAuthIncorrect.header=Onionsite Authentication Failed +onionServices.clientAuthIncorrect=The provided key is incorrect or has been revoked. Contact the onionsite administrator. +onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked. +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=Problem Loading Onionsite +onionServices.badAddress.header=Invalid Onionsite Address +onionServices.badAddress=The provided onionsite address is invalid. Please check that you entered it correctly. +onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid. +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=Problem Loading Onionsite +onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out +onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection. +onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit. +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S is requesting that you authenticate. +onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service +onionServices.authPrompt.done=Hoàn tất +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters) +onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key +onionServices.authPreferences.header=Onion Services Authentication +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them. +onionServices.authPreferences.savedKeys=Saved Keys… +onionServices.authPreferences.dialogTitle=Onion Service Keys +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer +onionServices.authPreferences.onionSite=Onionsite +onionServices.authPreferences.onionKey=Khóa dữ liệu +onionServices.authPreferences.remove=Gỡ bỏ +onionServices.authPreferences.removeAll=Remove All +onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor +onionServices.authPreferences.failedToRemoveKey=Unable to remove key +onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning +onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon +onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade. +onionServices.v2Deprecated.longDescription=Tor is ending its support for version 2 onion services beginning in July 2021, and this onion site will no longer be reachable at this address. If you are the site administrator, upgrade to a version 3 onion service soon. +onionServices.v2Deprecated.tryAgain=Hiểu rõ +onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon + +# Onion-Location strings. +onionLocation.alwaysPrioritize=Always Prioritize Onions +onionLocation.alwaysPrioritizeAccessKey=y +onionLocation.notNow=Không phải bây giờ +onionLocation.notNowAccessKey=y +onionLocation.description=There's a more private and secure version of this site available over the Tor network via onion services. Onion services help website publishers and their visitors defeat surveillance and censorship. +onionLocation.tryThis=Try Onion Services +onionLocation.onionAvailable=.onion available +onionLocation.learnMore=Learn more… +onionLocation.always=Always +onionLocation.askEverytime=Ask every time +onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known. +onionLocation.onionServicesTitle=Các Dịch vụ Onion + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified. +cryptoSafetyPrompt.whatCanHeading=What can you do about it? +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning. +cryptoSafetyPrompt.learnMore=Biết thêm +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=Dismiss Warning +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=Proceed with Caution +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=Accept the Risk and Continue +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=Last updated %S +rulesets.neverUpdated=Never updated, or last update failed +rulesets.enabled=Bật mở +rulesets.disabled=Tắt +# Ruleset details/edit ruleset +rulesets.edit=Chỉnh sửa +rulesets.name=Tên +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=Phạm vi +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=Check for Updates +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=Lưu +rulesets.cancel=Hủy bỏ diff --git a/toolkit/torbutton/chrome/locale/vi/torlauncher.properties b/toolkit/torbutton/chrome/locale/vi/torlauncher.properties new file mode 100644 index 000000000000..78c6af834d98 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/vi/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Trình khởi chạy Tor + +torlauncher.tor_exited_during_startup=Tor đã thoát trong khi khởi động. Điều này có lẽ là do lỗi trong tập tin torrc của bạn, lỗi của Tor hay một chương trình khác trong hệ thống của bạn, hoặc lỗi phần cứng. Cho đến khi bạn sửa chữa lại vấn đề đó và khởi động lại Tor, trình duyệt Tor sẽ không khởi động. +torlauncher.tor_exited=Tor đã tắt một cách không mong muốn. Việc này có thể do lỗi trong bản thân Tor, một chương trình khác trong hệ thống của bản, hoặc lỗi phần cứng. Cho tới khi bạn khởi động lại Tor, Trình duyệt Tor sẽ không thể truy cập tới bất kỳ trang nào. Nếu vấn đề vẫn tồn tại, vui lòng gửi một bản sao nhật ký của Tor tới nhóm hỗ trợ. +torlauncher.tor_exited2=Khởi động lại Tor sẽ không đóng hết những thẻ trình duyệt của bạn. +torlauncher.tor_controlconn_failed=Không thể kết nối với cổng kiểm soát của Tor. +torlauncher.tor_failed_to_start=Chạy Tor thất bại. +torlauncher.tor_control_failed=Thất bại khi kiểm soát Tor. +torlauncher.tor_bootstrap_failed=Tor đã thất bại khi thiết lập kết nối đến mạng Tor +torlauncher.tor_bootstrap_failed_details=%1$S đã thất bại (%2$S). + +torlauncher.unable_to_start_tor=Không thể khởi động Tor.\n\n%S +torlauncher.tor_missing=Tập tin thực thi của Tor bị thiếu. +torlauncher.torrc_missing=Tập tin torrc đang bị thiếu và không thể tạo. +torlauncher.datadir_missing=Thư mục dữ liệu của Tor không tồn tại và không thể tạo. +torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created. +torlauncher.password_hash_missing=Thất bại khi lấy mật khẩu đã được băm. + +torlauncher.failed_to_get_settings=Không thể nhận được cài đặt Tor. +torlauncher.failed_to_save_settings=Không thể lưu lại các cài đặt của Tor. +torlauncher.ensure_tor_is_running=Hãy chắc chắn rằng Tor đang chạy. + +torlauncher.error_proxy_addr_missing=Bạn phải xác định cả địa chỉ IP hoặc hostname và số cổng để cấu hình Tor sử dụng một proxy để truy cập Internet. +torlauncher.error_proxy_type_missing=Bạn phải chọn kiểu proxy. +torlauncher.error_bridges_missing=Bạn phải chọn một hoặc nhiều cầu nối. +torlauncher.error_default_bridges_type_missing=Bạn phải chọn một hình thức vận chuyển cho cầu nối đã được cung cấp. +torlauncher.error_bridgedb_bridges_missing=Vui lòng yêu cầu cầu nối +torlauncher.error_bridge_bad_default_type=Không cầu nối đã được cung cấp nào có loại vận chuyển %S có sẵn. Vui lòng điều chỉnh cài đặt của bạn. + +torlauncher.bridge_suffix.meek-amazon=(hoạt động ở Trung Quốc) +torlauncher.bridge_suffix.meek-azure=(hoạt động ở Trung Quốc) + +torlauncher.request_a_bridge=Yêu cầu Cầu nối... +torlauncher.request_a_new_bridge=Yêu cầu Cầu nối mới... +torlauncher.contacting_bridgedb=Đang kết nối tới BridgeDB. Vui lòng đợi. +torlauncher.captcha_prompt=Giải mã CAPTCHA để yêu cầu cầu nối. +torlauncher.bad_captcha_solution=Kết quả không đúng. Vui lòng thử lại. +torlauncher.unable_to_get_bridge=Không thể nhận cầu nối từ BridgeDB.\n\n%S +torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges. +torlauncher.no_bridges_available=Không có cầu nối khả dụng lúc này. Xin lỗi. + +torlauncher.connect=Kết nối +torlauncher.restart_tor=Khởi động lại Tor +torlauncher.quit=Thoát +torlauncher.quit_win=Thoát +torlauncher.done=Xong + +torlauncher.forAssistance=Để được trợ giúp, liên hệ %S +torlauncher.forAssistance2=Nếu cần sự giúp đỡ, ghé qua %S + +torlauncher.copiedNLogMessages=Sao chép hoàn tất. %S thông điệp nhật ký của Tor đã sẵn sàng để dán vào một chương trình sửa văn bản hoặc một email. + +torlauncher.bootstrapStatus.starting=Đang khởi động +torlauncher.bootstrapStatus.conn_pt=Đang kết nối tới cầu nối +torlauncher.bootstrapStatus.conn_done_pt=Đã kết nối tới cầu nối +torlauncher.bootstrapStatus.conn_proxy=Đang kết nối tới proxy +torlauncher.bootstrapStatus.conn_done_proxy=Đã kết nối tới proxy +torlauncher.bootstrapStatus.conn=Đang kết nối tới một rơle Tor +torlauncher.bootstrapStatus.conn_done=Đã kết nối tới một rơle Tor +torlauncher.bootstrapStatus.handshake=Đang đàm phán với một rơle Tor +torlauncher.bootstrapStatus.handshake_done=Đã đàm phán với một rơle Tor +torlauncher.bootstrapStatus.onehop_create=Đang thiết lập một kết nối danh mục được mã hóa +torlauncher.bootstrapStatus.requesting_status=Đang nhận trạng thái mạng +torlauncher.bootstrapStatus.loading_status=Đang tải trạng thái mạng +torlauncher.bootstrapStatus.loading_keys=Đang tải chứng nhận quyền +torlauncher.bootstrapStatus.requesting_descriptors=Đang yêu cầu thông tin rơle +torlauncher.bootstrapStatus.loading_descriptors=Đang tải thông tin rơle +torlauncher.bootstrapStatus.enough_dirinfo=Đã tải thông tin rơle +torlauncher.bootstrapStatus.ap_conn_pt=Đang xây dựng mạch: Đang kết nối tới cầu nối +torlauncher.bootstrapStatus.ap_conn_done_pt=Đang xây dựng mạch: Đã kết nối tới cầu nối +torlauncher.bootstrapStatus.ap_conn_proxy=Đang xây dựng mạch: Đang kết nối tới proxy +torlauncher.bootstrapStatus.ap_conn_done_proxy=Đang xây dựng mạch: Đã kết nối tới proxy +torlauncher.bootstrapStatus.ap_conn=Đang xây dựng mạch: Đang kết nối tới một rơle Tor +torlauncher.bootstrapStatus.ap_conn_done=Đang xây dựng mạch: Đã kết nối tới một rơle Tor +torlauncher.bootstrapStatus.ap_handshake=Đang xây dựng mạch: Đang đàm phán với một rơle Tor +torlauncher.bootstrapStatus.ap_handshake_done=Đang xây dựng mạch: Đã đàm phán với một rơle Tor +torlauncher.bootstrapStatus.circuit_create=Đang xây dựng mạch: Đang thiết lập mạch Tor +torlauncher.bootstrapStatus.done=Đã kết nối tới mạng Tor! + +torlauncher.bootstrapWarning.done=xong +torlauncher.bootstrapWarning.connectrefused=kết nối đã bị từ chối +torlauncher.bootstrapWarning.misc=bổ sung +torlauncher.bootstrapWarning.resourcelimit=không đủ tài nguyên +torlauncher.bootstrapWarning.identity=danh tính không khớp +torlauncher.bootstrapWarning.timeout=kết nối đã timeout +torlauncher.bootstrapWarning.noroute=không có lộ trình đến máy chủ +torlauncher.bootstrapWarning.ioerror=lỗi đọc / ghi +torlauncher.bootstrapWarning.pt_missing=thiếu pluggable transport + +torlauncher.nsresult.NS_ERROR_NET_RESET=Mất kết nối tới máy chủ. +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Không thể kết nối tới máy chủ. +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Không thể kết nối tới proxy. + +torlauncher.copiedNLogMessagesShort=Copied %S Logs diff --git a/toolkit/torbutton/chrome/locale/zh-CN/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/zh-CN/aboutDialog.dtd new file mode 100644 index 000000000000..4e7c2549d54b --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; 的开发者为"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "&vendorShortName;"> +<!ENTITY project.end ",一个捍卫您的隐私和自由上网权利的非营利组织。"> + +<!ENTITY help.start "需要得到帮助?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "捐款"> +<!ENTITY help.or "或者"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "参与"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "有疑问?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "帮助 Tor 网络成长!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "许可信息"> +<!ENTITY tor.TrademarkStatement "“Tor”和“Onion Logo”是 Tor Project, Inc 的注册商标。"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/zh-CN/aboutTBUpdate.dtd new file mode 100644 index 000000000000..385bcc4a5189 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor 浏览器更新日志"> +<!ENTITY aboutTBUpdate.updated "Tor 浏览器更新完成。"> +<!ENTITY aboutTBUpdate.linkPrefix "有关此版本的最新信息,"> +<!ENTITY aboutTBUpdate.linkLabel "访问我们的网站"> +<!ENTITY aboutTBUpdate.linkSuffix "。"> +<!ENTITY aboutTBUpdate.version "版本"> +<!ENTITY aboutTBUpdate.releaseDate "发布日期"> +<!ENTITY aboutTBUpdate.releaseNotes "发行说明"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd b/toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd new file mode 100644 index 000000000000..05ebfe5d7917 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "关于 Tor"> + +<!ENTITY aboutTor.viewChangelog.label "查看更新日志"> + +<!ENTITY aboutTor.ready.label "私密浏览"> +<!ENTITY aboutTor.ready2.label "您将享受世界上最私密的浏览体验。"> +<!ENTITY aboutTor.failure.label "出错了!"> +<!ENTITY aboutTor.failure2.label "Tor 无法在该浏览器下运行。"> + +<!ENTITY aboutTor.search.label "通过 DuckDuckGo 搜索"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "有疑问?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "查阅 Tor 浏览器用户手册 »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "Tor 浏览器用户手册"> + +<!ENTITY aboutTor.tor_mission.label "The Tor Project 是一家美国 501(c)(3) 非营利机构,致力于通过开发和部署自由且开放源代码的匿名和隐私技术,为其不受限制的可用性和使用提供支持,促进其在科研领域和大众的知名度来支持人权和自由。"> +<!ENTITY aboutTor.getInvolved.label "参与进来 »"> + +<!ENTITY aboutTor.newsletter.tagline "通过邮件获取 Tor 的最新消息。"> +<!ENTITY aboutTor.newsletter.link_text "订阅 Tor 的最新动态"> +<!ENTITY aboutTor.donationBanner.freeToUse "Tor 是免费使用的,因为有和您一样的人捐助。"> +<!ENTITY aboutTor.donationBanner.buttonA "立即捐助"> + +<!ENTITY aboutTor.alpha.ready.label "测试。 彻底地。"> +<!ENTITY aboutTor.alpha.ready2.label "您将尝试世界上最私密的浏览体验。"> +<!ENTITY aboutTor.alpha.bannerDescription "Tor 浏览器 Alpha 是 Tor 浏览器的一个不稳定的版本,您可以用它来预览一些新特性,测试它的性能并且在正式发行之前提供一些反馈。"> +<!ENTITY aboutTor.alpha.bannerLink "在 Tor 论坛上反馈一个漏洞"> + +<!ENTITY aboutTor.nightly.ready.label "测试。 彻底地。"> +<!ENTITY aboutTor.nightly.ready2.label "您将尝试世界上最私密的浏览体验。"> +<!ENTITY aboutTor.nightly.bannerDescription "Tor 浏览器 Nightly 是一个不稳定的 Tor 浏览器版本,您可以用来预览新功能,测试其性能,并在发布前提供反馈。"> +<!ENTITY aboutTor.nightly.bannerLink "在 Tor 论坛上反馈一个漏洞"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "隐私助力,如虎添翼:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "反抗"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "变革"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "自由"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "立即捐助"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "Tor 的朋友们将获得你的配捐,金额上限为 100,000 美元。"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/brand.dtd b/toolkit/torbutton/chrome/locale/zh-CN/brand.dtd new file mode 100644 index 000000000000..b6e42983e684 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "Tor Browser"> +<!ENTITY brandShortName "Tor Browser"> +<!ENTITY brandFullName "Tor Browser"> +<!ENTITY vendorShortName "Tor Project"> +<!ENTITY trademarkInfo.part1 "“Tor”和“Onion Logo”是 Tor Project, Inc 的注册商标。"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor 浏览器"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "点击加载已安装的系统插件"> +<!ENTITY plugins.installed.enable "启用插件"> +<!ENTITY plugins.installed.disable "禁用插件"> +<!ENTITY plugins.installed.disable.tip "点击阻止加载系统插件"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/brand.properties b/toolkit/torbutton/chrome/locale/zh-CN/brand.properties new file mode 100644 index 000000000000..1a3e694b6850 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=Tor 浏览器 +brandShortName=Tor 浏览器 +brandFullName=Tor 浏览器 +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName=Tor 浏览器 +vendorShortName=Tor Project + +homePageSingleStartMain=Firefox Start:内置搜索功能的快速启动主页 +homePageImport=从 %S 导入主页 + +homePageMigrationPageTitle=主页选择 +homePageMigrationDescription=请选择想要使用的主页: + +syncBrandShortName=同步 diff --git a/toolkit/torbutton/chrome/locale/zh-CN/branding/brand.ftl b/toolkit/torbutton/chrome/locale/zh-CN/branding/brand.ftl new file mode 100644 index 000000000000..bd16e2af7aeb --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = Tor 浏览器 +-brand-short-name = Tor 浏览器 +-brand-full-name = Tor 浏览器 +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = Tor 浏览器 +-vendor-short-name = Tor Project +trademarkInfo = “Tor”和“Onion Logo”是 Tor Project, Inc 的注册商标。 diff --git a/toolkit/torbutton/chrome/locale/zh-CN/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/zh-CN/browserOnboarding.properties new file mode 100644 index 000000000000..a88793e7fcc5 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=欢迎 +onboarding.tour-tor-welcome.title=一切就绪。 +onboarding.tour-tor-welcome.description=Tor 浏览器在浏览互联网中提供最高标准的隐私和安全保护,帮助你对抗跟踪、监控和审查。这个快速指南会向你介绍我们是怎样做的。 +onboarding.tour-tor-welcome.next-button=前往“隐私” + +onboarding.tour-tor-privacy=隐私 +onboarding.tour-tor-privacy.title=拒绝跟踪和嗅探。 +onboarding.tour-tor-privacy.description=Tor 浏览器会隔离 Cookie ,并在你浏览结束时删除 Cookies 和历史记录。这些修改保证了你的安全和隐私在浏览过程中受到保护。点击“Tor 网络”以了解我们如何在网络层级进行保护。 +onboarding.tour-tor-privacy.button=前往“Tor 网络” + +onboarding.tour-tor-network=Tor 网络 +onboarding.tour-tor-network.title=通过非中心化的网络进行浏览。 +onboarding.tour-tor-network.description=Tor 浏览器将你和世界数千名志愿者支持的 Tor 网络相连。和 VPN 不同的是,这里不会有单点故障,也不需要你为了私密浏览信任某一个中心化的实体。 +onboarding.tour-tor-network.description-para2=新内容:设置中的 Tor 网络设置,包括在 Tor 被屏蔽时获取网桥。 +onboarding.tour-tor-network.action-button=调整 Tor 网络设置 +onboarding.tour-tor-network.button=前往"线路显示" + +onboarding.tour-tor-circuit-display=线路显示 +onboarding.tour-tor-circuit-display.title=查看你的路径。 +onboarding.tour-tor-circuit-display.description=对于每个访问的站点,你的通信将通过三个 Tor 中继进行转发与加密,这些中继遍布世界各地。没有网站知道你从何处访问。点击“线路显示”下的“此站点新建线路”,可请求建立新的线路。 +onboarding.tour-tor-circuit-display.button=查看我的路径。 +onboarding.tour-tor-circuit-display.next-button=前往“安全” + +onboarding.tour-tor-security=安全 +onboarding.tour-tor-security.title=自定义你的浏览体验。 +onboarding.tour-tor-security.description=我们也提供更多选项来进一步强化 Tor 浏览器的安全性。安全设置可以允许你屏蔽可能会被用于攻击你的电脑的元素。点击下方的按钮来了解不同的选项的作用。 +onboarding.tour-tor-security.description-suffix=注:默认设置下,NoScript 和 HTTPS Everywhere 不在工具栏出现,但您可以“定制”您的工具栏来添加两者的图标。 +onboarding.tour-tor-security-level.button=查看你设置的安全级别 +onboarding.tour-tor-security-level.next-button=前往“体验小贴士” + +onboarding.tour-tor-expect-differences=浏览提示 +onboarding.tour-tor-expect-differences.title=可能会有些不同。 +onboarding.tour-tor-expect-differences.description=在由 Tor 提供的安全和隐私功能的加持下,你浏览互联网的体验可能会有些不同。例如加载速度变慢,根据你的安全设置的不同,网站上的某些元素可能无法工作或加载。你也许会被更频繁的要求完成验证以确认你不是机器人。 +onboarding.tour-tor-expect-differences.button=查阅常见问题和解答 +onboarding.tour-tor-expect-differences.next-button=前往“洋葱服务” + +onboarding.tour-tor-onion-services=洋葱服务 +onboarding.tour-tor-onion-services.title=保护,更进一步。 +onboarding.tour-tor-onion-services.description=洋葱服务是以 .onion 域名结尾的网站,可以为访问者和发布者提供额外的保护,例如对抗审查。洋葱服务允许任何人以匿名的方式提供内容和服务。点击下面的按钮来访问 DuckDuckGo 的洋葱服务网站。 +onboarding.tour-tor-onion-services.button=访问一个洋葱服务网站 +onboarding.tour-tor-onion-services.next-button=完成 + +onboarding.overlay-icon-tooltip-updated2=看看 %S 有什么更新 +onboarding.tour-tor-update.prefix-new=新建 +onboarding.tour-tor-update.prefix-updated=已更新 + +onboarding.tour-tor-toolbar=工具栏 +onboarding.tour-tor-toolbar-update-9.0.title=拜拜,洋葱按钮。 +onboarding.tour-tor-toolbar-update-9.0.description=我们希望将你使用 Tor 全部操作搬到 Tor 浏览器内。 +onboarding.tour-tor-toolbar-update-9.0.description-para2=所以现在,你可以在地址栏中的[i]按钮中看到 Tor 链路,在工具栏按钮[≡]菜单中请求新的身份,而不是使用洋葱按钮。 +onboarding.tour-tor-toolbar-update-9.0.button=如何请求新身份 +onboarding.tour-tor-toolbar-update-9.0.next-button=前往“Tor 网络” + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=下一步 +onboarding.tor-circuit-display.done=完成 +onboarding.tor-circuit-display.one-of-three=1 / 3 +onboarding.tor-circuit-display.two-of-three=2 / 3 +onboarding.tor-circuit-display.three-of-three=3 / 3 + +onboarding.tor-circuit-display.intro.title=链路如何工作? +onboarding.tor-circuit-display.intro.msg=链路由从世界各地随机分配的三个转发 Tor 流量的中继组成,使你能够私密的进行浏览和连接洋葱服务。 + +onboarding.tor-circuit-display.diagram.title=显示链路 +onboarding.tor-circuit-display.diagram.msg=这张图展示了组成访问这个网站所使用链路的中继。为了防止不同网站间的身份关联,每一个网站都有一条不同的链路。 + +onboarding.tor-circuit-display.new-circuit.title=你需要一条不同的链路? +onboarding.tor-circuit-display.new-circuit.msg=如果你无法通过当前的链路正常的连接到网站(例如网站无法打开或是加载不正确),你可以使用这个按钮来通过一条不同的链路重新加载。 diff --git a/toolkit/torbutton/chrome/locale/zh-CN/network-settings.dtd b/toolkit/torbutton/chrome/locale/zh-CN/network-settings.dtd new file mode 100644 index 000000000000..677610e88d2c --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "Tor 网络设置"> +<!ENTITY torsettings.wizard.title.default "连接 Tor 网络"> +<!ENTITY torsettings.wizard.title.configure "Tor 网络设置"> +<!ENTITY torsettings.wizard.title.connecting "正在建立连接"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "Tor Browser 语言"> +<!ENTITY torlauncher.localePicker.prompt "请选择一种语言。"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "点击“连接”,连接 Tor 网络。"> +<!ENTITY torSettings.configurePrompt "如您所在的国家或地区(如埃及、中国大陆、土耳其)对 Tor 进行审查,或者您的私人网络需要代理,请点击“配置”,调整网络设置。"> +<!ENTITY torSettings.configure "配置"> +<!ENTITY torSettings.connect "连接"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "等待 Tor 启动..."> +<!ENTITY torsettings.restartTor "重新启动 Tor"> +<!ENTITY torsettings.reconfigTor "重新配置"> + +<!ENTITY torsettings.discardSettings.prompt "您已配置 Tor 网桥,或者您已输入本地代理设置。若要直接连接到 Tor 网络,这些设置必须被移除。"> +<!ENTITY torsettings.discardSettings.proceed "移除设置并连接"> + +<!ENTITY torsettings.optional "可选"> + +<!ENTITY torsettings.useProxy.checkbox "使用代理访问互联网"> +<!ENTITY torsettings.useProxy.type "代理服务器类型"> +<!ENTITY torsettings.useProxy.type.placeholder "选择代理类型"> +<!ENTITY torsettings.useProxy.address "地址"> +<!ENTITY torsettings.useProxy.address.placeholder "IP 地址或主机名"> +<!ENTITY torsettings.useProxy.port "端口"> +<!ENTITY torsettings.useProxy.username "用户名"> +<!ENTITY torsettings.useProxy.password "密码"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "该计算机的防火墙仅允许特定端口的互联网连接"> +<!ENTITY torsettings.firewall.allowedPorts "允许的端口"> +<!ENTITY torsettings.useBridges.checkbox "我所在的国家或地区对 Tor 进行了审查"> +<!ENTITY torsettings.useBridges.default "选择内置网桥"> +<!ENTITY torsettings.useBridges.default.placeholder "选择网桥"> +<!ENTITY torsettings.useBridges.bridgeDB "从 torproject.org 获取网桥"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "请输入图中的字符"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "获取新的验证码"> +<!ENTITY torsettings.useBridges.captchaSubmit "提交"> +<!ENTITY torsettings.useBridges.custom "输入已知网桥"> +<!ENTITY torsettings.useBridges.label "输入可信来源提供的网桥:"> +<!ENTITY torsettings.useBridges.placeholder "输入 地址:端口(每行一个)"> + +<!ENTITY torsettings.copyLog "复制 Tor 日志"> + +<!ENTITY torsettings.proxyHelpTitle "代理帮助"> +<!ENTITY torsettings.proxyHelp1 "通过公司,学校或大学的网络连接时可能需要本地代理。  如果您不确定是否需要代理,可查看其他浏览器中的网络设置或查看系统的网络设置。"> + +<!ENTITY torsettings.bridgeHelpTitle "网桥中继帮助"> +<!ENTITY torsettings.bridgeHelp1 "网桥指未公开的 Tor 节点,通过这种节点连接 Tor 网络时更难以封锁。每种网桥使用不同的方式来突破审查。obfs 类型的网桥使通信看起来像随机信号,而 meek 网桥看起来像连接到相应的服务而不是 Tor 网络。"> +<!ENTITY torsettings.bridgeHelp2 "由于封锁方式不同,某种网桥在一些国家可用,但其他国家可能不可用。如果无法确定您应该使用哪种网桥,请访问 torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "正在连接 Tor 网络,可能需几分钟,请稍等。"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "连接"> +<!ENTITY torPreferences.torSettings "Tor 设置"> +<!ENTITY torPreferences.torSettingsDescription "Tor 浏览器将你和世界数千名志愿者支持的 Tor 网络相连" > +<!ENTITY torPreferences.learnMore "了解更多"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "互联网:"> +<!ENTITY torPreferences.statusInternetTest "测试"> +<!ENTITY torPreferences.statusInternetOnline "联机"> +<!ENTITY torPreferences.statusInternetOffline "脱机"> +<!ENTITY torPreferences.statusTorLabel "Tor 网络:"> +<!ENTITY torPreferences.statusTorConnected "已连接"> +<!ENTITY torPreferences.statusTorNotConnected "未连接"> +<!ENTITY torPreferences.statusTorBlocked "可能被屏蔽"> +<!ENTITY torPreferences.learnMore "了解更多"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "快速开始"> +<!ENTITY torPreferences.quickstartDescriptionLong "快速开始将在打开 Tor 浏览器时根据您上次使用的连接设置自动地将其连接到 Tor 网络。"> +<!ENTITY torPreferences.quickstartCheckbox "始终自动连接"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "网桥"> +<!ENTITY torPreferences.bridgesDescription "网桥帮助你在 Tor 被阻塞的地方连接 Tor 网络。取决于你在哪里,有的网桥的效果可能比另一个要好。"> +<!ENTITY torPreferences.bridgeLocation "您的位置"> +<!ENTITY torPreferences.bridgeLocationAutomatic "自动"> +<!ENTITY torPreferences.bridgeLocationFrequent "常用位置"> +<!ENTITY torPreferences.bridgeLocationOther "其他位置"> +<!ENTITY torPreferences.bridgeChooseForMe "为我选择一个网桥..."> +<!ENTITY torPreferences.bridgeBadgeCurrent "当前网桥"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "可保存一个或多个网桥,连接时 Tor 将选择使用其中一个。需要时,Tor 可自动切换至其他网桥。"> +<!ENTITY torPreferences.bridgeId "#1 网桥:#2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "移除"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "禁用内置网桥"> +<!ENTITY torPreferences.bridgeShare "通过二维码或复制地址分享网桥:"> +<!ENTITY torPreferences.bridgeCopy "复制网桥地址"> +<!ENTITY torPreferences.copied "已复制!"> +<!ENTITY torPreferences.bridgeShowAll "显示所有网桥"> +<!ENTITY torPreferences.bridgeRemoveAll "移除所有网桥"> +<!ENTITY torPreferences.bridgeAdd "新增网桥"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "选择 Tor 浏览器内置网桥"> +<!ENTITY torPreferences.bridgeSelectBuiltin "选择内置网桥…"> +<!ENTITY torPreferences.bridgeRequest "请求网桥…"> +<!ENTITY torPreferences.bridgeEnterKnown "输入已知网桥"> +<!ENTITY torPreferences.bridgeAddManually "手动新增网桥..."> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "高级"> +<!ENTITY torPreferences.advancedDescription "配置 Tor 浏览器联网方式"> +<!ENTITY torPreferences.advancedButton "设置..."> +<!ENTITY torPreferences.viewTorLogs "查看 Tor 日志"> +<!ENTITY torPreferences.viewLogs "查看日志"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "移除所有网桥?"> +<!ENTITY torPreferences.removeBridgesWarning "此操作不可撤销。"> +<!ENTITY torPreferences.cancel "取消"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "扫描二维码"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "内置网桥"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor 浏览器包括一些特定类型的网桥,称为“可插拔传输”。"> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 是一种内置网桥,使您的 Tor 流量看起来很随机。它们也比它的前辈,即 obfs3 网桥,更不容易被阻止。"> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake 是一个内置的网桥,通过将您的网络连接路由到由志愿者运行的 Snowflake 代理服务器,来抵抗审查。"> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure 是一个内置的网桥,使您看起来像在使用微软的网站而不是使用 Tor。"> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "正在请求网桥"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "正在连接到 BridgeDB,请等待。"> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "请输入验证码以获取网桥。"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "输入错误,请重试。"> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "提供网桥"> +<!ENTITY torPreferences.provideBridgeHeader "输入可信来源提供的网桥"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "连接设置"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "配置 Tor 浏览器联网方式"> +<!ENTITY torPreferences.firewallPortsPlaceholder "逗号分隔值"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "Tor 日志"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "未连接"> +<!ENTITY torConnect.connectingConcise "正在连接…"> +<!ENTITY torConnect.tryingAgain "正在重试…"> +<!ENTITY torConnect.noInternet "Tor 浏览器无法连接网络"> +<!ENTITY torConnect.noInternetDescription "这可能是由连接问题,而非 Tor 被屏蔽导致的。请检查互联网连接,代理和防火墙设置,然后重试。"> +<!ENTITY torConnect.couldNotConnect "Tor 浏览器无法连接到 Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "配置连接"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "如果 Tor 在您的位置被封锁,尝试一个网桥可能会有帮助。连接助手可以利用您的位置为您选择一个,或者您可以 #1 手动选择。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "正在尝试网桥…"> +<!ENTITY torConnect.tryingBridgeAgain "再试一次…"> +<!ENTITY torConnect.errorLocation "Tor 浏览器不能定位您"> +<!ENTITY torConnect.errorLocationDescription "Tor 浏览器需要知道您的位置,以便为您选择合适的网桥。如果您不愿意分享您的位置,可以用#1手动代替。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "地点设置是否正确?"> +<!ENTITY torConnect.isLocationCorrectDescription "Tor 浏览器仍然无法连接到Tor。请检查您的位置设置是否正确并重试,或者用#1代替。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor 浏览器仍无法连接"> +<!ENTITY torConnect.finalErrorDescription "尽管作了努力,连接助手仍无法连接 Tor。请转而尝试排查连接问题,并手动添加网桥。"> +<!ENTITY torConnect.breadcrumbAssist "连接助手"> +<!ENTITY torConnect.breadcrumbLocation "地点设置"> +<!ENTITY torConnect.breadcrumbTryBridge "尝试网桥"> +<!ENTITY torConnect.automatic "自动"> +<!ENTITY torConnect.selectCountryRegion "选择国家或地区"> +<!ENTITY torConnect.frequentLocations "常用位置"> +<!ENTITY torConnect.otherLocations "其他位置"> +<!ENTITY torConnect.restartTorBrowser "重启 Tor 浏览器"> +<!ENTITY torConnect.configureConnection "配置连接…"> +<!ENTITY torConnect.viewLog "查看日志..."> +<!ENTITY torConnect.tryAgain "重试"> +<!ENTITY torConnect.offline "互联网未连接"> +<!ENTITY torConnect.connectMessage "在您连接之前对 Tor 设置的更改将不会生效"> +<!ENTITY torConnect.tryAgainMessage "Tor 浏览器未能与 Tor 网络建立连接"> +<!ENTITY torConnect.yourLocation "您的位置"> +<!ENTITY torConnect.tryBridge "尝试网桥"> +<!ENTITY torConnect.autoBootstrappingFailed "自动配置失败"> +<!ENTITY torConnect.autoBootstrappingFailed "自动配置失败"> +<!ENTITY torConnect.cannotDetermineCountry "无法获取用户所在地区"> +<!ENTITY torConnect.noSettingsForCountry "您的位置没有可用的设置"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/onboarding.properties b/toolkit/torbutton/chrome/locale/zh-CN/onboarding.properties new file mode 100644 index 000000000000..85caac7cd235 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=第一次用 %S?\n一起来上手吧。 +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=崭新的 %S 来了。\n看看有什么好用功能! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=关闭 +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=知道了 +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=完成 diff --git a/toolkit/torbutton/chrome/locale/zh-CN/torbutton.dtd b/toolkit/torbutton/chrome/locale/zh-CN/torbutton.dtd new file mode 100644 index 000000000000..37c54e3f5466 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "新身份"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "新建身份"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "此站点新建 Tor 线路"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "此站点新建 Tor 线路"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "Tor 网络设置…"> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "检查 Tor 浏览器的更新…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookie 保护…"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "点此初始化 Torbutton"> +<!ENTITY torbutton.prefs.security_settings "Tor 浏览器安全设置"> +<!ENTITY torbutton.cookiedialog.title "管理受保护的 Cookie"> +<!ENTITY torbutton.cookiedialog.lockCol "受保护"> +<!ENTITY torbutton.cookiedialog.domainCol "主机"> +<!ENTITY torbutton.cookiedialog.nameCol "名称"> +<!ENTITY torbutton.cookiedialog.pathCol "路径"> +<!ENTITY torbutton.cookiedialog.protectCookie "保护 Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "移除 Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "停止保护 Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "全部移除仅保留受保护的 Cookie"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "保护新的 Cookie"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "不保护新的 Cookie"> +<!ENTITY torbutton.prefs.sec_caption "安全级别"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "安全滑块可禁用某些浏览器功能,避免因这些功能导致的漏洞而受到攻击。"> +<!ENTITY torbutton.prefs.sec_standard_label "标准安全性"> +<!ENTITY torbutton.prefs.sec_standard_description "将启用 Tor 浏览器和网站的所有功能。"> +<!ENTITY torbutton.prefs.sec_safer_label "中等安全性"> +<!ENTITY torbutton.prefs.sec_safer_description "禁用网站功能通常是危险的,这会导致一些站不能正常运作。"> +<!ENTITY torbutton.prefs.sec_safer_list_label "在中等安全性设置下:"> +<!ENTITY torbutton.prefs.sec_safest_label "最高安全性"> +<!ENTITY torbutton.prefs.sec_safest_description "只允许网站请求静态网页与基本服务。这将会影响图片,媒体与脚本。"> +<!ENTITY torbutton.prefs.sec_safest_list_label "在最高安全性设置下:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "更多详情"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "在非HTTPS网站,JavaScripts被禁用。"> +<!ENTITY torbutton.prefs.sec_js_disabled "在所有网站上默认禁用JavaScript。"> +<!ENTITY torbutton.prefs.sec_limit_typography "一些字体与数学符号被禁用。"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "一些字体,图标,数学符号与图片被禁用。"> +<!ENTITY torbutton.prefs.sec_click_to_play_media "点击播放音频或视频(HTML5 媒体)和WebGL。"> +<!ENTITY torbutton.prefs.sec_custom_warning "自定义"> +<!ENTITY torbutton.prefs.sec_overview "禁用部分能影响你安全和匿名性的互联网功能。"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "安全级别:标准"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "安全级别:较安全"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "安全级别:最安全"> +<!ENTITY torbutton.prefs.sec_custom_summary "您自定义的浏览器设置导致了不安全的安全设置。出于安全和隐私考虑,我们建议您选择一个默认的安全级别。"> +<!ENTITY torbutton.prefs.sec_restore_defaults "恢复默认设置"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "高级安全选项…"> +<!ENTITY torbutton.prefs.sec_change "更改…"> +<!ENTITY torbutton.circuit_display.title "Tor 线路"> +<!ENTITY torbutton.circuit_display.new_circuit "此站点新建线路"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "打开洋葱服务客户端认证提示"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "记住此密钥"> diff --git a/toolkit/torbutton/chrome/locale/zh-CN/torbutton.properties b/toolkit/torbutton/chrome/locale/zh-CN/torbutton.properties new file mode 100644 index 000000000000..20293447be00 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = 互联网 +torbutton.circuit_display.ip_unknown = IP 未知 +torbutton.circuit_display.onion_site = 洋葱站点 +torbutton.circuit_display.this_browser = 本浏览器 +torbutton.circuit_display.relay = 中继 +torbutton.circuit_display.tor_bridge = 网桥 +torbutton.circuit_display.unknown_country = 未知国家 +torbutton.circuit_display.guard = 守卫 +torbutton.circuit_display.guard_note = 您的[守卫]节点似乎并未改变 +torbutton.circuit_display.learn_more = 详细了解 +torbutton.circuit_display.click_to_copy = 点击以复制 +torbutton.circuit_display.copied = 已复制! +torbutton.content_sizer.margin_tooltip = Tor 浏览器添加了一些边框,以降低窗口大小的独特性,令在线跟踪监控变得更加困难。 +extensions.torbutton@torproject.org.description = Torbutton 是一个按钮,可对“Tor 设置”进行修改,并可快速而方便地清除浏览器隐私数据。 +torbutton.popup.external.title = 下载一个外部文件类型? +torbutton.popup.external.app = Tor 浏览器无法显示此文件。您需要用其他应用程序打开它。\n\n +torbutton.popup.external.note = 部分文件类型可能会导致应用程序在不使用 Tor 的情况下连接互联网。\n\n +torbutton.popup.external.suggest = 为了安全起见,您应该只在离线状态下打开下载的文件,或者使用 Tor Live CD,例如 Tails。\n +torbutton.popup.launch = 下载文件 +torbutton.popup.cancel = 取消 +torbutton.popup.dontask = 以后自动下载文件 +torbutton.popup.no_newnym = Torbutton 无法安全地为您切换一个新身份。它无法访问 Tor 的控制端口。\n\n您目前正在使用 Tor 浏览器套件吗? +torbutton.security_settings.menu.title = 安全设置 +torbutton.title.prompt_torbrowser = Torbutton 重要信息 +torbutton.popup.prompt_torbrowser = Torbutton 工作方式有所改变:它不再能够关闭。\n\n做出这种改变是因为在非匿名浏览的浏览器中,同时使用 Torbutton 并不安全。有太多无法克服的错误。\n\n如果您希望正常使用 Firefox ,请卸载 Torbutton 插件,下载 Tor 浏览器套件。Tor 浏览器的隐私特性优于普通的 Firefox ,即使Firefox中使用了Torbutton。\n\n移除 Torbutton,请到 工具Tools->附加组件Addons->扩展Extensions 中,在 Torbutton 旁点击卸载。 +torbutton.popup.short_torbrowser = Torbutton 重要信息!\n\nTorbutton 目前已知处于启用状态。\n\n点击 Torbutton 获取更多信息。 + +torbutton.popup.confirm_plugins = Flash 之类的插件可对用户的隐私与匿名性造成危害。\n\n它们还可能绕过 Tor 而泄漏用户的当前位置和 IP 地址。\n\n是否确定启用插件?\n\n +torbutton.popup.never_ask_again = 不再询问 +torbutton.popup.confirm_newnym = Tor 浏览器将关闭全部窗口和标签页。所有网站会话都将丢失。\n\n是否马上重启 Tor 浏览器以重置身份标识?\n\n + +torbutton.maximize_warning = 最大化 Tor 浏览器窗口之后,网站可获取显示器尺寸信息,从而可跟踪用户。建议使用默认的 Tor 浏览器窗口大小。 + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=此网站(%S)试图获取 HTML5 Canva 图像数据,该数据可用作你所用计算机的唯一标识。\n\nTor 浏览器是否应允许此网站获取 HTML5 Canva 图像数据? +canvas.notNow=暂不 +canvas.notNowAccessKey=N +canvas.allow=以后一直允许 +canvas.allowAccessKey=A +canvas.never=永不允许此网站(推荐) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S 配置文件问题 +profileReadOnly=您不能在一个只读文件系统上运行 %S。请在尝试使用前复制 %S 到另一个位置。 +profileReadOnlyMac=您不能在一个只读文件系统上运行 %S。请在尝试使用它前复制 %S 到您的桌面或者应用程序文件夹。 +profileAccessDenied=%S 没有权限访问配置文件。请调整您的文件系统权限然后重试。 +profileMigrationFailed=转移您已有的配置文件 %S 失败。\n新设置将被使用。 + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=正下载 %S 更新 + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=连接已经被加密(洋葱服务,%1$S,%2$S 位密钥,%3$S) +pageInfo_OnionEncryption=连接已经被加密(洋葱服务) +pageInfo_OnionName=洋葱名称: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=更多详情 +onionServices.errorPage.browser=浏览器 +onionServices.errorPage.network=网络 +onionServices.errorPage.onionSite=洋葱站点 +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=洋葱站点加载问题 +onionServices.descNotFound.header=找不到洋葱站点 +onionServices.descNotFound=最有可能的原因是该洋葱站点已下线。请联系洋葱站点管理员。 +onionServices.descNotFound.longDescription=详情:%S — 请求的洋葱服务标识码未能在哈希算法内找到,因此客户端无法连接到服务。 +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=洋葱站点加载问题 +onionServices.descInvalid.header=洋葱站点不可达 +onionServices.descInvalid=洋葱站点由于内部错误无法浏览。 +onionServices.descInvalid.longDescription=详情:%S — 请求的洋葱服务标识码不能解析,或签名认证失败。 +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=洋葱站点加载问题 +onionServices.introFailed.header=洋葱站点已断开连接 +onionServices.introFailed=最有可能的原因是该洋葱站点已下线。联系洋葱站点管理员。 +onionServices.introFailed.longDescription=详情:%S — 引导失败,这意味着标识码已被找到,但是服务已不再连接到引导点。有可能服务已改变了标识码,或未运行。 +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=洋葱站点加载问题 +onionServices.rendezvousFailed.header=无法连接洋葱站点 +onionServices.rendezvousFailed=洋葱站点忙碌或过载。请稍后尝试。 +onionServices.rendezvousFailed.longDescription=详情:%S — 客户端未能与服务会合,这意味着客户端未能完成连接。 +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=需要验证 +onionServices.clientAuthMissing.header=洋葱站点需要验证 +onionServices.clientAuthMissing=访问洋葱站点需要一个密钥但未提供。 +onionServices.clientAuthMissing.longDescription=详情:%S — 客户端下载了请求的洋葱服务标识码,但因为客户端缺失授权信息,而不能解码它的内容。 +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=验证失败 +onionServices.clientAuthIncorrect.header=洋葱站点认证失败 +onionServices.clientAuthIncorrect=提供的密钥不正确或已被吊销。 请与洋葱网站管理员联系。 +onionServices.clientAuthIncorrect.longDescription=详情:%S — 客户端能下载请求的洋葱服务标识码,但不能用客户端提供的授权信息解码标识码的内容。这可能意味着访问已被撤销。 +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=洋葱站点加载问题 +onionServices.badAddress.header=无效洋葱站点地址 +onionServices.badAddress=提供的洋葱站点地址无效。请检查是否正确输入。 +onionServices.badAddress.longDescription=详情:%S — 提供的 .onion 地址失效了。返回该错误,是由于以下原因之一:地址的校验和不匹配、ed25519 公钥失效,或编码无效。 +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=洋葱站点加载问题 +onionServices.introTimedOut.header=洋葱站点链路创建超时 +onionServices.introTimedOut=洋葱站点连接失败,可能是由于网络连接较差。 +onionServices.introTimedOut.longDescription=详情:%S — 在试着建立会合回路时,请求的洋葱服务连接超时。 +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S请求您的验证。 +onionServices.authPrompt.keyPlaceholder=输入您的私钥来使用此洋葱服务 +onionServices.authPrompt.done=完成 +onionServices.authPrompt.doneAccessKey=天 +onionServices.authPrompt.invalidKey=请输入一个合法的密钥(52位 base32 字符或44位 base64 字符) +onionServices.authPrompt.failedToSetKey=无法使用您的密钥来配置 Tor +onionServices.authPreferences.header=洋葱服务认证 +onionServices.authPreferences.overview=某些洋葱服务需要您在使用前用密钥(一种密码)进行身份认证。 +onionServices.authPreferences.savedKeys=已保存密钥... +onionServices.authPreferences.dialogTitle=洋葱服务密钥 +onionServices.authPreferences.dialogIntro=接下来的洋葱网站的密钥储存在您的电脑上 +onionServices.authPreferences.onionSite=洋葱站 +onionServices.authPreferences.onionKey=线图 +onionServices.authPreferences.remove=移除 +onionServices.authPreferences.removeAll=移除全部 +onionServices.authPreferences.failedToGetKeys=无法从 Tor 获得密钥 +onionServices.authPreferences.failedToRemoveKey=无法移除密钥 +onionServices.v2Deprecated.pageTitle=版本 2 洋葱网站弃用警告 +onionServices.v2Deprecated.header=版本 2 洋葱网站将很快被弃用 +onionServices.v2Deprecated=该洋葱网站将很快无法访问。请联系站点管理员并呼吁他们升级。 +onionServices.v2Deprecated.longDescription=Tor 将从 2021 年 7 月开始终止对版本 2 洋葱服务的支持,此洋葱网站将无法再通过此地址访问。 如果您是站点管理员,请尽快升级到版本 3 的洋葱服务。 +onionServices.v2Deprecated.tryAgain=了解了 +onionServices.v2Deprecated.tooltip=该洋葱网站将很快无法访问 + +# Onion-Location strings. +onionLocation.alwaysPrioritize=始终优先选用洋葱服务 +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=暂不 +onionLocation.notNowAccessKey=n +onionLocation.description=该网站还有一个更私密、更安全的版本,可以通过洋葱服务通过 Tor 网络访问。洋葱服务帮助网站发布者和他们的访问者抵抗监控和审查。 +onionLocation.tryThis=尝试洋葱服务 +onionLocation.onionAvailable=.onion 可用 +onionLocation.learnMore=详细了解…… +onionLocation.always=始终 +onionLocation.askEverytime=每次询问 +onionLocation.prioritizeOnionsDescription=优先访问已知 .onion 站点。 +onionLocation.onionServicesTitle=洋葱服务 + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=从不安全的网站复制了加密地址(%S)。它可以被修改。 +cryptoSafetyPrompt.whatCanHeading=你能用它做什么? +cryptoSafetyPrompt.whatCanBody=您可以尝试使用新线路重新建立安全连接,或者接受风险并消除此警告。 +cryptoSafetyPrompt.learnMore=了解更多 +cryptoSafetyPrompt.primaryAction=使用新线路重新加载选项卡 +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=消除警告 +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=请小心操作 +rulesets.warningDescription=添加或修改规则集可导致攻击者劫持浏览器。仅在知道自己在做什么事情的情况下继续。 +rulesets.warningEnable=试图访问这些首选项时警告我 +rulesets.warningButton=接受风险并继续 +# Ruleset list +rulesets.rulesets=规则集 +rulesets.noRulesets=未找到规则集 +rulesets.noRulesetsDescr=当在 Tor 浏览器保存规则集时,将在此处显示。 +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=上次更新 %S +rulesets.neverUpdated=从未更新,或上次更新失败 +rulesets.enabled=启用 +rulesets.disabled=禁用 +# Ruleset details/edit ruleset +rulesets.edit=编辑 +rulesets.name=名称 +rulesets.jwk=JWK +rulesets.pathPrefix=路径前缀 +rulesets.scope=范围 +rulesets.enable=启用此规则集 +rulesets.checkUpdates=检查更新 +rulesets.jwkPlaceholder=该密钥用于在 JWK(JSON Web 密钥)格式签名此规则集 +rulesets.jwkInvalid=JWK 无法解析,或不是一个有效密钥 +rulesets.pathPrefixPlaceholder=含有规则集所需文件的 URL 前缀 +rulesets.pathPrefixInvalid=路径前缀不是一个有效 HTTP(S) 的 URL +rulesets.scopePlaceholder=规则范围的正则表达式 +rulesets.scopeInvalid=范围无法解析为一个正则表达式 +rulesets.save=保存 +rulesets.cancel=取消 diff --git a/toolkit/torbutton/chrome/locale/zh-CN/torlauncher.properties b/toolkit/torbutton/chrome/locale/zh-CN/torlauncher.properties new file mode 100644 index 000000000000..593bdfbfefbe --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-CN/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=Tor 启动器 + +torlauncher.tor_exited_during_startup=Tor 在启动期间退出。这可能是您的 torrc 文件存在错误,或者 Tor 或您的系统中的其他程序存在问题,或者硬件问题。在您解决此问题并重新启动 Tor 前,Tor 浏览器将不会启动。 +torlauncher.tor_exited=Tor 意外退出。这可能是由于 Tor 自身的故障或操作系统的其他程序或硬件故障。在重新启动 Tor 之前,Tor 浏览器将无法连接任何网站。如果问题持续发生,请将 Tor 日志发送至技术团队。 +torlauncher.tor_exited2=重启 Tor 不会关闭浏览器标签页。 +torlauncher.tor_controlconn_failed=无法连接 Tor 控制端口。 +torlauncher.tor_failed_to_start=Tor 无法启动。 +torlauncher.tor_control_failed=控制 Tor 失败。 +torlauncher.tor_bootstrap_failed=连接 Tor 网络失败。 +torlauncher.tor_bootstrap_failed_details=%1$S 失败(%2$S)。 + +torlauncher.unable_to_start_tor=无法启动 Tor。\n\n%S +torlauncher.tor_missing=缺少 Tor 可执行文件。 +torlauncher.torrc_missing=torrc 文件丢失且无法被创建。 +torlauncher.datadir_missing=Tor 数据目录不存在且无法被创建。 +torlauncher.onionauthdir_missing=Tor 的洋葱验证文件夹不存在,且无法被创建。 +torlauncher.password_hash_missing=无法获取哈希密码。 + +torlauncher.failed_to_get_settings=无法获取 Tor 设置。\n\n%S +torlauncher.failed_to_save_settings=无法保持 Tor 设置。\n\n%S +torlauncher.ensure_tor_is_running=请确保 Tor 正在运行。 + +torlauncher.error_proxy_addr_missing=为了将 Tor 配置为使用代理访问互联网,必须指定 IP 地址或主机名以及端口号。 +torlauncher.error_proxy_type_missing=必须选择代理类型。 +torlauncher.error_bridges_missing=必须指定一个或多个网桥。 +torlauncher.error_default_bridges_type_missing=必须指定网桥的传输类型。 +torlauncher.error_bridgedb_bridges_missing=请获取一个网桥。 +torlauncher.error_bridge_bad_default_type=没有传输类型为 %S 的可用网桥。请调整设置。 + +torlauncher.bridge_suffix.meek-amazon=(中国可用) +torlauncher.bridge_suffix.meek-azure=(中国可用) + +torlauncher.request_a_bridge=正在请求网桥…… +torlauncher.request_a_new_bridge=正在请求新网桥…… +torlauncher.contacting_bridgedb=正在连接到BridgeDB,请等待。 +torlauncher.captcha_prompt=请输入验证码以获取网桥。 +torlauncher.bad_captcha_solution=输入错误,请重试。 +torlauncher.unable_to_get_bridge=无法从BridgeDB获取网桥。\n\n%S +torlauncher.no_meek=这个浏览器未被配置为可以使用meek,获取网桥需要这个功能。 +torlauncher.no_bridges_available=抱歉,目前没有可供使用的网桥。 + +torlauncher.connect=连接 +torlauncher.restart_tor=重新启动 Tor +torlauncher.quit=退出 +torlauncher.quit_win=关闭 +torlauncher.done=完成 + +torlauncher.forAssistance=如需帮助,请联系 %S +torlauncher.forAssistance2=如需帮助,请访问 %S + +torlauncher.copiedNLogMessages=复制完成。%S 条 Tor 日志信息已准备好,可以将其粘贴到文本编辑器或电子邮件中。 + +torlauncher.bootstrapStatus.starting=正在启动 +torlauncher.bootstrapStatus.conn_pt=正在连接到网桥 +torlauncher.bootstrapStatus.conn_done_pt=已连接到网桥 +torlauncher.bootstrapStatus.conn_proxy=正在连接到代理服务器 +torlauncher.bootstrapStatus.conn_done_proxy=已连接到代理服务器 +torlauncher.bootstrapStatus.conn=正在连接到 Tor 中继 +torlauncher.bootstrapStatus.conn_done=已连接到 Tor 中继 +torlauncher.bootstrapStatus.handshake=与一个 Tor 中继交涉中 +torlauncher.bootstrapStatus.handshake_done=与一个 Tor 中继交涉完毕 +torlauncher.bootstrapStatus.onehop_create=正在建立加密的目录连接 +torlauncher.bootstrapStatus.requesting_status=正在检索网络状态 +torlauncher.bootstrapStatus.loading_status=正在载入网络状态 +torlauncher.bootstrapStatus.loading_keys=正在载入证书颁发机构证书 +torlauncher.bootstrapStatus.requesting_descriptors=正在请求中继信息 +torlauncher.bootstrapStatus.loading_descriptors=正在载入中继信息 +torlauncher.bootstrapStatus.enough_dirinfo=已加载中继信息 +torlauncher.bootstrapStatus.ap_conn_pt=建立链路:正在连接到网桥 +torlauncher.bootstrapStatus.ap_conn_done_pt=建立链路:已连接到网桥 +torlauncher.bootstrapStatus.ap_conn_proxy=建立链路:正在连接到代理服务器 +torlauncher.bootstrapStatus.ap_conn_done_proxy=建立链路:已连接到代理服务器 +torlauncher.bootstrapStatus.ap_conn=建立链路:正在连接到 Tor 中继 +torlauncher.bootstrapStatus.ap_conn_done=建立链路:已连接到 Tor 中继 +torlauncher.bootstrapStatus.ap_handshake=建立链路:与 Tor 中继交涉中 +torlauncher.bootstrapStatus.ap_handshake_done=建立链路:与一个 Tor 中继交涉完毕 +torlauncher.bootstrapStatus.circuit_create=建立链路:正在建立 Tor 链路 +torlauncher.bootstrapStatus.done=Tor 网络已经连接! + +torlauncher.bootstrapWarning.done=完成 +torlauncher.bootstrapWarning.connectrefused=连接被拒绝 +torlauncher.bootstrapWarning.misc=杂项 +torlauncher.bootstrapWarning.resourcelimit=资源不够 +torlauncher.bootstrapWarning.identity=标识不一致 +torlauncher.bootstrapWarning.timeout=连接超时 +torlauncher.bootstrapWarning.noroute=没有可用链路 +torlauncher.bootstrapWarning.ioerror=读写错误 +torlauncher.bootstrapWarning.pt_missing=缺少可插拔传输类型网桥 + +torlauncher.nsresult.NS_ERROR_NET_RESET=与服务器的连接已丢失... +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=无法连接到服务器。 +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=无法连接到代理。 + +torlauncher.copiedNLogMessagesShort=已复制 %S 条日志 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/aboutDialog.dtd b/toolkit/torbutton/chrome/locale/zh-TW/aboutDialog.dtd new file mode 100644 index 000000000000..049a8d6cf110 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/aboutDialog.dtd @@ -0,0 +1,19 @@ +<!ENTITY project.start "&brandShortName; 開發者"> +<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org --> +<!ENTITY project.tpoLink "the &vendorShortName;"> +<!ENTITY project.end "一個捍衛你的隱私與自由的非營利事業。"> + +<!ENTITY help.start "想要貢獻一己之力嗎?"> +<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en --> +<!ENTITY help.donateLink "捐助"> +<!ENTITY help.or "或"> +<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en --> +<!ENTITY help.getInvolvedLink "加入團隊"> +<!ENTITY help.end "!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en --> +<!ENTITY bottomLinks.questions "有什麼問題?"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays --> +<!ENTITY bottomLinks.grow "幫助洋蔥路由網路成長茁壯!"> +<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license --> +<!ENTITY bottomLinks.license "授權資訊"> +<!ENTITY tor.TrademarkStatement "「Tor」和「Onion Logo」皆是 Tor Project, Inc 的註冊商標。"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/aboutTBUpdate.dtd b/toolkit/torbutton/chrome/locale/zh-TW/aboutTBUpdate.dtd new file mode 100644 index 000000000000..2c9dd5fee8f9 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "洋蔥路由瀏覽器變更記錄"> +<!ENTITY aboutTBUpdate.updated "洋蔥路由瀏覽器已經更新完成"> +<!ENTITY aboutTBUpdate.linkPrefix "本次釋出更新的最新資訊"> +<!ENTITY aboutTBUpdate.linkLabel "參訪我們的網站"> +<!ENTITY aboutTBUpdate.linkSuffix "。"> +<!ENTITY aboutTBUpdate.version "版本"> +<!ENTITY aboutTBUpdate.releaseDate "釋出日期"> +<!ENTITY aboutTBUpdate.releaseNotes "版本說明"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd b/toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd new file mode 100644 index 000000000000..053ad5c07338 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/aboutTor.dtd @@ -0,0 +1,60 @@ +<!-- + - Copyright (c) 2019, The Tor Project, Inc. + - See LICENSE for licensing information. + - vim: set sw=2 sts=2 ts=8 et syntax=xml: + --> + +<!ENTITY aboutTor.title "關於 Tor"> + +<!ENTITY aboutTor.viewChangelog.label "檢視變更記錄"> + +<!ENTITY aboutTor.ready.label "探索。隱密。"> +<!ENTITY aboutTor.ready2.label "您已能夠體驗全世界最私密的網路瀏覽。"> +<!ENTITY aboutTor.failure.label "發生錯誤!"> +<!ENTITY aboutTor.failure2.label "Tor 無法在此瀏覽器中運作。"> + +<!ENTITY aboutTor.search.label "使用 DuckDuckGo 搜尋"> +<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com"> + +<!ENTITY aboutTor.torbrowser_user_manual_questions.label "有什麼問題?"> +<!ENTITY aboutTor.torbrowser_user_manual_link.label "查看我們的洋蔥路由瀏覽器手冊 »"> +<!-- The next two entities are used within the browser's Help menu. --> +<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M"> +<!ENTITY aboutTor.torbrowser_user_manual.label "洋蔥路由瀏覽器手冊"> + +<!ENTITY aboutTor.tor_mission.label "Tor Project 是一個美國 501(c)(3) 非營利組織,致力於透過開發和部署自由與開放原始碼的匿名和隱私技術,支援無限制的可用性和使用,以促進科學領域和大眾對相關技術的理解。"> +<!ENTITY aboutTor.getInvolved.label "加入我們 »"> + +<!ENTITY aboutTor.newsletter.tagline "將 Tor 的最新消息直接傳送到您的收件匣。"> +<!ENTITY aboutTor.newsletter.link_text "訂閱 Tor 的新資訊。"> +<!ENTITY aboutTor.donationBanner.freeToUse "由於有像您這樣的人捐款,洋蔥路由才得以免費使用。"> +<!ENTITY aboutTor.donationBanner.buttonA "立刻捐款"> + +<!ENTITY aboutTor.alpha.ready.label "測試。徹底地。"> +<!ENTITY aboutTor.alpha.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.alpha.bannerDescription "Tor Browser Alpha is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.alpha.bannerLink "Report a bug on the Tor Forum"> + +<!ENTITY aboutTor.nightly.ready.label "測試。徹底地。"> +<!ENTITY aboutTor.nightly.ready2.label "You’re ready to test the world’s most private browsing experience."> +<!ENTITY aboutTor.nightly.bannerDescription "Tor Browser Nightly is an unstable version of Tor Browser you can use to preview new features, test their performance and provide feedback before release."> +<!ENTITY aboutTor.nightly.bannerLink "Report a bug on the Tor Forum"> + +<!-- YEC 2022 campaign https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41303 --> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.powered_by_privacy): a header for a list of things which are powered by/enabled by/possible due to privacy (each item should have positive connotations/associations in the translated languages) --> +<!ENTITY aboutTor.yec2022.powered_by_privacy "POWERED BY PRIVACY:"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.resistance): resistance as in social/political resistance to opression, injustice, etc --> +<!ENTITY aboutTor.yec2022.resistance "RESISTANCE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.change): change as in the process of social/political progress toward a better/more equitable society --> +<!ENTITY aboutTor.yec2022.change "CHANGE"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.freedom): freedom as in liberty, protection against exploition, imprisonment, etc --> +<!ENTITY aboutTor.yec2022.freedom "FREEDOM"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donate_now): Label for a button directing user to donation page--> +<!ENTITY aboutTor.yec2022.donate_now "立刻贊助"> +<!-- LOCALIZATION NOTE (aboutTor.yec2022.donation_matching): Please translate the 'Friends of Tor' phrase, but +also format it like the name of an organization in whichever way that is appropriate for your locale. + +Please keep the currency in USD. +Thank you! +--> +<!ENTITY aboutTor.yec2022.donation_matching "洋蔥之友組織將會捐助與您所捐助的款項相同的金額,上限為$100,000美金。"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/brand.dtd b/toolkit/torbutton/chrome/locale/zh-TW/brand.dtd new file mode 100644 index 000000000000..2a6ac6693bb6 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/brand.dtd @@ -0,0 +1,19 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<!ENTITY brandShorterName "洋蔥路由瀏覽器"> +<!ENTITY brandShortName "洋蔥路由瀏覽器"> +<!ENTITY brandFullName "洋蔥路由瀏覽器"> +<!ENTITY vendorShortName "洋蔥路由專案"> +<!ENTITY trademarkInfo.part1 "「Tor」和「Onion Logo」皆是 Tor Project, Inc 的註冊商標。"> +<!-- LOCALIZATION NOTE (brandProductName): + This brand name can be used in messages where the product name needs to + remain unchanged across different versions (Nightly, Beta, etc.). --> +<!ENTITY brandProductName "Tor 瀏覽器"> + +<!-- The following strings are for bug #10280's UI. We place them here for our translators --> +<!ENTITY plugins.installed.find "點擊以載入已安裝的系統外掛"> +<!ENTITY plugins.installed.enable "啟用外掛"> +<!ENTITY plugins.installed.disable "停用外掛"> +<!ENTITY plugins.installed.disable.tip "點擊以阻止載入已安裝的系統外掛"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/brand.properties b/toolkit/torbutton/chrome/locale/zh-TW/brand.properties new file mode 100644 index 000000000000..91fb6df860ca --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/brand.properties @@ -0,0 +1,20 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +brandShorterName=洋蔥路由瀏覽器 +brandShortName=洋蔥路由瀏覽器 +brandFullName=洋蔥路由瀏覽器 +# LOCALIZATION NOTE(brandProductName): +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +brandProductName= 洋蔥路由瀏覽器 +vendorShortName=洋蔥路由專案計畫 + +homePageSingleStartMain=Firefox Start:包含內建搜尋的快速首頁 +homePageImport=從 %S 匯入您的首頁 + +homePageMigrationPageTitle=首頁選取 +homePageMigrationDescription=請選擇您想要使用的首頁: + +syncBrandShortName=同步 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/branding/brand.ftl b/toolkit/torbutton/chrome/locale/zh-TW/branding/brand.ftl new file mode 100644 index 000000000000..3975bebde209 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/branding/brand.ftl @@ -0,0 +1,12 @@ +# For Tor Browser, we use a new file (different than the brand.ftl file +# that is used by Firefox) to avoid picking up the -brand-short-name values +# that Mozilla includes in the Firefox language packs. + +-brand-shorter-name = 洋蔥路由瀏覽器 +-brand-short-name = 洋蔥路由瀏覽器 +-brand-full-name = 洋蔥路由瀏覽器 +# This brand name can be used in messages where the product name needs to +# remain unchanged across different versions (Nightly, Beta, etc.). +-brand-product-name = 洋蔥路由瀏覽器 +-vendor-short-name = 洋蔥路由專案計畫 +trademarkInfo = 「Tor」和「Onion Logo」皆是 Tor Project, Inc 的註冊商標。 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/browserOnboarding.properties b/toolkit/torbutton/chrome/locale/zh-TW/browserOnboarding.properties new file mode 100644 index 000000000000..21560144a1c3 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/browserOnboarding.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2019, The Tor Project, Inc. +# See LICENSE for licensing information. +# vim: set sw=2 sts=2 ts=8 et: + +onboarding.tour-tor-welcome=歡迎 +onboarding.tour-tor-welcome.title=您已經準備好了。 +onboarding.tour-tor-welcome.description=洋蔥路由瀏覽器在瀏覽網路時提供最高標準的隱私和安全性。您現在可以免受追蹤、監控和審查。這個快速導引將告訴你如何做。 +onboarding.tour-tor-welcome.next-button=前往隱私 + +onboarding.tour-tor-privacy=隱私 +onboarding.tour-tor-privacy.title=冷落追蹤器和窺探者。 +onboarding.tour-tor-privacy.description=洋蔥路由瀏覽器在您的工作階段後會隔離 cookies 並刪除您的瀏覽記錄,這些修改可以確保您的隱私與安全在瀏覽器中會受到保護,點擊「洋蔥路由網路」來了解我們如何在網路層級保護您。 +onboarding.tour-tor-privacy.button=前往洋蔥路由網路 + +onboarding.tour-tor-network=洋蔥路由網路 +onboarding.tour-tor-network.title=在去中心化的網路旅行。 +onboarding.tour-tor-network.description=洋蔥路由瀏覽器將您和世界上數千名志願者所架設維運的洋蔥路由網絡連上線,和虛擬私有網路不同的地方是,這裡不會有單點故障問題,您也不需要為了能夠私密地瀏覽網路,而必須去信任某個中心化的機構。 +onboarding.tour-tor-network.description-para2=新消息:洋蔥路由網路設定,包括了在洋蔥路由被封鎖的地區仍可以索取橋接中繼站的能力,此功能現在可以在偏好設定中被找到。 +onboarding.tour-tor-network.action-button=調整您的洋蔥路由網路設定。 +onboarding.tour-tor-network.button=前往迴路顯示 + +onboarding.tour-tor-circuit-display=迴路顯示 +onboarding.tour-tor-circuit-display.title=檢視您的路徑。 +onboarding.tour-tor-circuit-display.description=當你每次訪問一個網域的時候,您的網路流量會被加密並通過散落於世界各個不同角落的三個洋蔥路由中繼節點,因此網站完全無法得知你來自何方,您也可以在「迴路顯示」中點擊「建立新的迴路來連接上此網站」以重建一個新的迴路。 +onboarding.tour-tor-circuit-display.button=檢視我的路徑 +onboarding.tour-tor-circuit-display.next-button=前往安全性 + +onboarding.tour-tor-security=安全性 +onboarding.tour-tor-security.title=選擇您的使用者體驗。 +onboarding.tour-tor-security.description=我們也提供更多的選項來進一步強化瀏覽器安全性,安全性設定可以讓您封鎖可能會被用於攻擊您的電腦的元件,請點擊下方來了解不同選項的作用。 +onboarding.tour-tor-security.description-suffix=注意:預設情況下,NoScript 和 HTTPS Everywhere 不會在工具列上出現,但您可以自訂您的工具列來加入它們。 +onboarding.tour-tor-security-level.button=檢視您的安全等級 +onboarding.tour-tor-security-level.next-button=前往體驗秘訣 + +onboarding.tour-tor-expect-differences=體驗秘訣 +onboarding.tour-tor-expect-differences.title=預期一些差異。 +onboarding.tour-tor-expect-differences.description=在由洋蔥路由所提供的安全和隱私保護機制的加持下,你瀏覽網路的體驗可能會有些不同,例如網路傳輸速度會較慢,並且根據您的安全性等級設定的不同,網站上的某些元件可能無法正常載入運作,您也有可能會被要求證明您是人類而不是機器人。 +onboarding.tour-tor-expect-differences.button= 檢視常見問題 +onboarding.tour-tor-expect-differences.next-button=前往洋蔥服務 + +onboarding.tour-tor-onion-services=洋蔥服務 +onboarding.tour-tor-onion-services.title=受到額外保護。 +onboarding.tour-tor-onion-services.description=洋蔥服務是以 .onion 域名結尾的網站,可以為發布者和訪問者提供額外的保護,例如對抗網路審查過濾,洋蔥服務允許任何人以匿名的方式提供內容和服務,點擊下面的按鈕來造訪 DuckDuckGo 的洋蔥服務網站。 +onboarding.tour-tor-onion-services.button=造訪一個洋蔥 +onboarding.tour-tor-onion-services.next-button=完成 + +onboarding.overlay-icon-tooltip-updated2=看看有什麼新鮮事\n在 %S +onboarding.tour-tor-update.prefix-new=新增 +onboarding.tour-tor-update.prefix-updated=已更新 + +onboarding.tour-tor-toolbar=工具列 +onboarding.tour-tor-toolbar-update-9.0.title=再見了洋蔥按鈕。 +onboarding.tour-tor-toolbar-update-9.0.description=我們希望您使用洋蔥路由的體驗,可以與蔥路由瀏覽器融為一體。 +onboarding.tour-tor-toolbar-update-9.0.description-para2=那就是為什麼現在不須使用洋蔥按鈕,您就能通過URL欄裡的[i]查看您的洋蔥路由迴路,並且也可以通過使用工具列按鈕或者[≡]選單來索取一個新識別身份。 +onboarding.tour-tor-toolbar-update-9.0.button=如何請求一個新識別身份 +onboarding.tour-tor-toolbar-update-9.0.next-button=前往洋蔥路由網路 + +# Circuit Display onboarding. +onboarding.tor-circuit-display.next=下一個 +onboarding.tor-circuit-display.done=完成 +onboarding.tor-circuit-display.one-of-three=3之1 +onboarding.tor-circuit-display.two-of-three=3之2 +onboarding.tor-circuit-display.three-of-three=3之3 + +onboarding.tor-circuit-display.intro.title=迴路的運作原理為何? +onboarding.tor-circuit-display.intro.msg=迴路是由分散在世界各地的中繼節點隨機選定組成,用來轉送洋蔥路由的網路流量,使您不只能夠私密的瀏覽網路,也能連接上洋蔥服務。 + +onboarding.tor-circuit-display.diagram.title=迴路顯示 +onboarding.tor-circuit-display.diagram.msg=此圖展示了造訪此網站所使用的迴路上的中繼節點,為了防止您在不同網站上的活動被關連在一起,對於每個造訪的網站都會使用不同的迴路。 + +onboarding.tor-circuit-display.new-circuit.title=您需要新的迴路嗎? +onboarding.tor-circuit-display.new-circuit.msg=如果您無法連接到您想造訪的網站,或是網站內容載入不正確,您可以使用這個按鈕以透過不同的迴路重新載入網站。 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/network-settings.dtd b/toolkit/torbutton/chrome/locale/zh-TW/network-settings.dtd new file mode 100644 index 000000000000..b4da930250f0 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/network-settings.dtd @@ -0,0 +1,179 @@ +<!ENTITY torsettings.dialog.title "洋蔥路由網路設定"> +<!ENTITY torsettings.wizard.title.default "連線到洋蔥路由網路"> +<!ENTITY torsettings.wizard.title.configure "洋蔥路由網路設定"> +<!ENTITY torsettings.wizard.title.connecting "正在建立連線"> + +<!-- For locale picker: --> +<!ENTITY torlauncher.localePicker.title "洋蔥路由瀏覽器的語言"> +<!ENTITY torlauncher.localePicker.prompt "請選擇一種語言。"> + +<!-- For "first run" wizard: --> + +<!ENTITY torSettings.connectPrompt "點擊「連接」來連上洋蔥路由網路 "> +<!ENTITY torSettings.configurePrompt "如果您身處於會封鎖洋蔥路由網路的國家(例如埃及、中國、土耳其),或者您位於需要使用代理伺服器的私人網路中,請點擊「設定」來調整網路設定。"> +<!ENTITY torSettings.configure "設定"> +<!ENTITY torSettings.connect "連接"> + +<!-- Other: --> + +<!ENTITY torsettings.startingTor "正在等待洋蔥路由啟動…"> +<!ENTITY torsettings.restartTor "重新啟動洋蔥路由"> +<!ENTITY torsettings.reconfigTor "重新設定"> + +<!ENTITY torsettings.discardSettings.prompt "您已經有設定洋蔥路由的橋接中繼站或本地端代理伺服器。  若想要直接連上洋蔥路由網路的話,必須要先移除這部份的設定。"> +<!ENTITY torsettings.discardSettings.proceed "移除設定值並且連線"> + +<!ENTITY torsettings.optional "選用"> + +<!ENTITY torsettings.useProxy.checkbox "使用代理服務連線到網際網路"> +<!ENTITY torsettings.useProxy.type "代理伺服器類型"> +<!ENTITY torsettings.useProxy.type.placeholder "選擇代理伺服器類型"> +<!ENTITY torsettings.useProxy.address "地址"> +<!ENTITY torsettings.useProxy.address.placeholder "IP 位址或主機名稱"> +<!ENTITY torsettings.useProxy.port "埠"> +<!ENTITY torsettings.useProxy.username "使用者名稱"> +<!ENTITY torsettings.useProxy.password "密碼"> +<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4"> +<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5"> +<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS"> +<!ENTITY torsettings.firewall.checkbox "這台電腦只允許通過特定的防火牆連接埠來建立連線"> +<!ENTITY torsettings.firewall.allowedPorts "允許的連接埠"> +<!ENTITY torsettings.useBridges.checkbox "我所在的國家會封鎖洋蔥路由"> +<!ENTITY torsettings.useBridges.default "選擇內建的橋接中繼站"> +<!ENTITY torsettings.useBridges.default.placeholder "選擇橋接中繼站"> +<!ENTITY torsettings.useBridges.bridgeDB "從 torproject.org 索取一個橋接中繼站"> +<!ENTITY torsettings.useBridges.captchaSolution.placeholder "輸入圖片中的文字"> +<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "獲得新的挑戰"> +<!ENTITY torsettings.useBridges.captchaSubmit "提交"> +<!ENTITY torsettings.useBridges.custom "手動輸入一個橋接中繼站"> +<!ENTITY torsettings.useBridges.label "從信任的來源輸入橋接中繼站資訊"> +<!ENTITY torsettings.useBridges.placeholder "中繼站地址:連接埠 (一行一個)"> + +<!ENTITY torsettings.copyLog "將洋蔥路由的歷程記錄複製到剪貼簿"> + +<!ENTITY torsettings.proxyHelpTitle "代理協助"> +<!ENTITY torsettings.proxyHelp1 "當您透過公司、學校或者大學網路進行連線時,您可能需要一個本地代理伺服器,如果您不確定是否需要代理伺服器,請參考電腦中其他瀏覽器的網路設定或者系統網路設定。"> + +<!ENTITY torsettings.bridgeHelpTitle "橋接中繼站之說明"> +<!ENTITY torsettings.bridgeHelp1 "橋接中繼站是未被公開列出的中繼站,透過它們來連接洋蔥路由網路可以更容易突破封鎖。  不同類型的橋接中繼站會使用不同的方法來突破網路審查與封鎖。  obfs 使您的網路連線活動貌似隨機雜訊,而 meek 則會使您的網路連線活動看起來像是通往特定的網路服務而不是洋蔥路由。"> +<!ENTITY torsettings.bridgeHelp2 "因為某些國家會封鎖洋蔥路由網路的連線,某些橋接中繼站只能在特定的國家裡使用,到了其他地區則會失效。  如果您不確定哪些橋接中繼站可以在您的國家使用,請前往 torproject.org/about/contact.html#support"> + +<!-- Progress --> +<!ENTITY torprogress.pleaseWait "請耐心等候,我們正在建立洋蔥路由網路連線,  這個過程可能需要幾分鐘的時間。"> + +<!-- #31286 about:preferences strings --> +<!ENTITY torPreferences.categoryTitle "連線"> +<!ENTITY torPreferences.torSettings "洋蔥路由設定"> +<!ENTITY torPreferences.torSettingsDescription "洋蔥路由瀏覽器會透過洋蔥路由網路將您的網路連線資料進行繞徑,而洋蔥路由網路則是由全世界數千名志願者所自行架設維運的主機。" > +<!ENTITY torPreferences.learnMore "瞭解更多"> +<!-- Status --> +<!ENTITY torPreferences.statusInternetLabel "Internet:"> +<!ENTITY torPreferences.statusInternetTest "測試"> +<!ENTITY torPreferences.statusInternetOnline "上線"> +<!ENTITY torPreferences.statusInternetOffline "離線"> +<!ENTITY torPreferences.statusTorLabel "Tor Network:"> +<!ENTITY torPreferences.statusTorConnected "已連缐"> +<!ENTITY torPreferences.statusTorNotConnected "未連線"> +<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked"> +<!ENTITY torPreferences.learnMore "瞭解更多"> +<!-- Quickstart --> +<!ENTITY torPreferences.quickstart "快速啟動"> +<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."> +<!ENTITY torPreferences.quickstartCheckbox "總是自動建立連線"> +<!-- Bridge settings --> +<!ENTITY torPreferences.bridges "橋接中繼站"> +<!ENTITY torPreferences.bridgesDescription "橋接中繼站能夠幫助您突破網路封鎖連上洋蔥路由網路,隨著您所身處的地區不同,每個橋接中繼站的效果也會有所差異。"> +<!ENTITY torPreferences.bridgeLocation "你的位置"> +<!ENTITY torPreferences.bridgeLocationAutomatic "竹"> +<!ENTITY torPreferences.bridgeLocationFrequent "常用位置"> +<!ENTITY torPreferences.bridgeLocationOther "其它位置"> +<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…"> +<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges"> +<!ENTITY torPreferences.bridgeBadgeCurrentDescription "You can save one or more bridges, and Tor will choose which one to use when you connect. Tor will automatically switch to use another bridge when needed."> +<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id --> +<!ENTITY torPreferences.remove "移除"> +<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges"> +<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:"> +<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address"> +<!ENTITY torPreferences.copied "已複製!"> +<!ENTITY torPreferences.bridgeShowAll "Show All Bridges"> +<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges"> +<!ENTITY torPreferences.bridgeAdd "Add a New Bridge"> +<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges"> +<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…"> +<!ENTITY torPreferences.bridgeRequest "請求一個橋接中繼站..."> +<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know"> +<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…"> +<!-- Advanced settings --> +<!ENTITY torPreferences.advanced "進階的"> +<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet"> +<!ENTITY torPreferences.advancedButton "偏好設定..."> +<!ENTITY torPreferences.viewTorLogs "查看 Tor 日誌"> +<!ENTITY torPreferences.viewLogs "查看歷程紀錄…"> +<!-- Remove all bridges dialog --> +<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?"> +<!ENTITY torPreferences.removeBridgesWarning "這個動作無法復原"> +<!ENTITY torPreferences.cancel "取消"> +<!-- Scan bridge QR dialog --> +<!ENTITY torPreferences.scanQrTitle "掃描 QR code"> +<!-- Builtin bridges dialog --> +<!ENTITY torPreferences.builtinBridgeTitle "內建橋接"> +<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”."> +<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4"> +<!ENTITY torPreferences.builtinBridgeObfs4Description "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges."> +<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake"> +<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."> +<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure"> +<!ENTITY torPreferences.builtinBridgeMeekAzureDescription "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."> +<!-- Request bridges dialog --> +<!ENTITY torPreferences.requestBridgeDialogTitle "請求橋接中繼站"> +<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "正在連接到 BridgeDB,請稍候。"> +<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "解決驗證碼來請求橋接"> +<!ENTITY torPreferences.requestBridgeErrorBadSolution "解答不正確。請再試一次。"> +<!-- Provide bridge dialog --> +<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge"> +<!ENTITY torPreferences.provideBridgeHeader "從一個可信任的來源輸入橋接中繼站資訊"> +<!-- Connection settings dialog --> +<!ENTITY torPreferences.connectionSettingsDialogTitle "連線設定"> +<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet"> +<!ENTITY torPreferences.firewallPortsPlaceholder "逗號分隔值"> +<!-- Log dialog --> +<!ENTITY torPreferences.torLogsDialogTitle "洋蔥路由歷程紀錄"> + +<!-- #24746 about:torconnect strings --> +<!ENTITY torConnect.notConnectedConcise "未連線"> +<!ENTITY torConnect.connectingConcise "連線中…"> +<!ENTITY torConnect.tryingAgain "再試一次..."> +<!ENTITY torConnect.noInternet "洋蔥路由瀏覽器無法取得網際網路"> +<!ENTITY torConnect.noInternetDescription "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."> +<!ENTITY torConnect.couldNotConnect "洋蔥路由瀏覽器無法連線至 Tor"> +<!ENTITY torConnect.assistDescriptionConfigure "設定你的連線"> <!-- used as a text to insert as a link on several strings (#1) --> +<!ENTITY torConnect.assistDescription "If Tor is blocked in your location, trying a bridge may help. Connection assist can choose one for you using your location, or you can #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.tryingBridge "Trying a bridge…"> +<!ENTITY torConnect.tryingBridgeAgain "再試一次..."> +<!ENTITY torConnect.errorLocation "洋蔥路由瀏覽器無法定位你"> +<!ENTITY torConnect.errorLocationDescription "Tor Browser needs to know your location in order to choose the right bridge for you. If you’d rather not share your location, #1 manually instead."> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.isLocationCorrect "這些位置設定是否正確?"> +<!ENTITY torConnect.isLocationCorrectDescription "洋蔥路由瀏覽器依然無法連線至 Tor。請檢查你的位置設定是否正確並再試一次,或者#1。"> <!-- #1 = "configure your connection" link --> +<!ENTITY torConnect.finalError "Tor Browser still cannot connect"> +<!ENTITY torConnect.finalErrorDescription "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."> +<!ENTITY torConnect.breadcrumbAssist "Connection assist"> +<!ENTITY torConnect.breadcrumbLocation "地區設定"> +<!ENTITY torConnect.breadcrumbTryBridge "嘗試橋接"> +<!ENTITY torConnect.automatic "竹"> +<!ENTITY torConnect.selectCountryRegion "選擇國家或地區"> +<!ENTITY torConnect.frequentLocations "常用位置"> +<!ENTITY torConnect.otherLocations "其它位置"> +<!ENTITY torConnect.restartTorBrowser "重新啟動洋蔥路由瀏覽器"> +<!ENTITY torConnect.configureConnection "調整連線設定…"> +<!ENTITY torConnect.viewLog "查看日誌..."> +<!ENTITY torConnect.tryAgain "再試一次"> +<!ENTITY torConnect.offline "無法獲得網際網路"> +<!ENTITY torConnect.connectMessage "對於洋蔥路由設定所作的變更要到開始連線時才會生效"> +<!ENTITY torConnect.tryAgainMessage "洋蔥路由瀏覽器通往洋蔥路由網路的連線建立失敗"> +<!ENTITY torConnect.yourLocation "你的位置"> +<!ENTITY torConnect.tryBridge "試用一個橋接中繼站"> +<!ENTITY torConnect.autoBootstrappingFailed "自動設定失敗"> +<!ENTITY torConnect.autoBootstrappingFailed "自動設定失敗"> +<!ENTITY torConnect.cannotDetermineCountry "無法確定使用者國家"> +<!ENTITY torConnect.noSettingsForCountry "你的地區沒有可用的設定"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/onboarding.properties b/toolkit/torbutton/chrome/locale/zh-TW/onboarding.properties new file mode 100644 index 000000000000..481f8cd3952d --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/onboarding.properties @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used +# to show the tooltip alongside the notification icon in the overlay tour. %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip2=%S 新手?\n一起開始使用吧。 +# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is +# brandShortName. The tooltip is designed to show in two lines. Please use \n to +# do appropriate line breaking. +onboarding.overlay-icon-tooltip-updated2=%S 新登場。\n看看有什麼好用功能! +# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.overlay-close-button-tooltip=關閉 +# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. +onboarding.notification-close-button-tooltip=知道了 +# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an +# onboarding tour item that is complete. +onboarding.complete=完成 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/torbutton.dtd b/toolkit/torbutton/chrome/locale/zh-TW/torbutton.dtd new file mode 100644 index 000000000000..4665cb58fc99 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/torbutton.dtd @@ -0,0 +1,56 @@ +<!ENTITY torbutton.context_menu.new_identity "新識別身分"> +<!ENTITY torbutton.context_menu.new_identity_sentence_case "新識別身份"> +<!ENTITY torbutton.context_menu.new_identity_key "I"> +<!ENTITY torbutton.context_menu.new_circuit "建立新的洋蔥路由迴路來連接此網站"> +<!ENTITY torbutton.context_menu.new_circuit_sentence_case "以新的洋蔥路由迴路連接此網站"> +<!ENTITY torbutton.context_menu.new_circuit_key "C"> +<!ENTITY torbutton.context_menu.networksettings "洋蔥路由網路設定..."> +<!ENTITY torbutton.context_menu.networksettings.key "N"> +<!ENTITY torbutton.context_menu.downloadUpdate "檢查洋蔥路由瀏覽器更新…"> +<!ENTITY torbutton.context_menu.downloadUpdate.key "U"> +<!ENTITY torbutton.context_menu.cookieProtections "Cookie 保護"> +<!ENTITY torbutton.context_menu.cookieProtections.key "C"> +<!ENTITY torbutton.button.tooltip "按一下以初始化 Torbutton"> +<!ENTITY torbutton.prefs.security_settings "洋蔥路由瀏覽器之安全性設定"> +<!ENTITY torbutton.cookiedialog.title "管理 Cookie 的保護"> +<!ENTITY torbutton.cookiedialog.lockCol "受保護"> +<!ENTITY torbutton.cookiedialog.domainCol "主機"> +<!ENTITY torbutton.cookiedialog.nameCol "名稱"> +<!ENTITY torbutton.cookiedialog.pathCol "路徑"> +<!ENTITY torbutton.cookiedialog.protectCookie "保護 Cookie"> +<!ENTITY torbutton.cookiedialog.removeCookie "移除 Cookie"> +<!ENTITY torbutton.cookiedialog.unprotectCookie "取消保護 Cookie"> +<!ENTITY torbutton.cookiedialog.removeAllBut "全部刪除,但受保護"> +<!ENTITY torbutton.cookiedialog.saveAllCookies "保護新的 Cookie"> +<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "不保護新的 Cookie"> +<!ENTITY torbutton.prefs.sec_caption "安全等級"> +<!ENTITY torbutton.prefs.sec_caption_tooltip "此安全性調整滑棒會關閉某些瀏覽器的功能,導致您的瀏覽器更容易遭受駭客攻擊。"> +<!ENTITY torbutton.prefs.sec_standard_label "標準"> +<!ENTITY torbutton.prefs.sec_standard_description "所有洋蔥路由瀏覽器與網站的功能皆已啟用。"> +<!ENTITY torbutton.prefs.sec_safer_label "較安全"> +<!ENTITY torbutton.prefs.sec_safer_description "停用某些較危險的網站功能,可能會造成部份網站功能異常。"> +<!ENTITY torbutton.prefs.sec_safer_list_label "在較安全的設定:"> +<!ENTITY torbutton.prefs.sec_safest_label "最安全"> +<!ENTITY torbutton.prefs.sec_safest_description "只允許靜態網站和基本服務的網站功能,這些變動會影響圖片、媒體和腳本。"> +<!ENTITY torbutton.prefs.sec_safest_list_label "在最安全設定:"> +<!ENTITY torbutton.prefs.sec_learn_more_label "繼續閱讀"> +<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "所有非HTTPS網站會預設停用JavaScript "> +<!ENTITY torbutton.prefs.sec_js_disabled "所有網站會預設停用JavaScript "> +<!ENTITY torbutton.prefs.sec_limit_typography "有些字型與數學符號被停用。"> +<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "有些字型、圖示、數學符號與圖片被停用。"> +<!ENTITY torbutton.prefs.sec_click_to_play_media "聲音和影片(HTML5 媒體),和 WebGL 要點擊播放。"> +<!ENTITY torbutton.prefs.sec_custom_warning "自定義"> +<!ENTITY torbutton.prefs.sec_overview "停用特定的網頁功能,其可用以損害您的安全性及匿名性。"> +<!ENTITY torbutton.prefs.sec_standard_tooltip "安全性等級:標準"> +<!ENTITY torbutton.prefs.sec_safer_tooltip "安全性等級:更安全"> +<!ENTITY torbutton.prefs.sec_safest_tooltip "安全性等級:最安全"> +<!ENTITY torbutton.prefs.sec_custom_summary "您的瀏覽器個人化設定可能會造成安全性的疑慮。基於個人網路安全與隱私的考量,建議您選用預設的安全性層級選項。"> +<!ENTITY torbutton.prefs.sec_restore_defaults "恢復到預設值"> +<!ENTITY torbutton.prefs.sec_advanced_security_settings "進階安全性設定…"> +<!ENTITY torbutton.prefs.sec_change "變更..."> +<!ENTITY torbutton.circuit_display.title "洋蔥路由迴路"> +<!ENTITY torbutton.circuit_display.new_circuit "建立新的迴路來連接上此網站"> + +<!-- Onion services strings. Strings are kept here for ease of translation. --> +<!ENTITY torbutton.onionServices.authPrompt.tooltip "開啟洋蔥服務用戶端驗證提示"> +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "記住此金鑰"> diff --git a/toolkit/torbutton/chrome/locale/zh-TW/torbutton.properties b/toolkit/torbutton/chrome/locale/zh-TW/torbutton.properties new file mode 100644 index 000000000000..f020623d7415 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/torbutton.properties @@ -0,0 +1,187 @@ +torbutton.circuit_display.internet = 網際網路 +torbutton.circuit_display.ip_unknown = 未知的 IP +torbutton.circuit_display.onion_site = 洋蔥網站 +torbutton.circuit_display.this_browser = 此瀏覽器 +torbutton.circuit_display.relay = 中繼站 +torbutton.circuit_display.tor_bridge = 橋接中繼站 +torbutton.circuit_display.unknown_country = 未知的國家 +torbutton.circuit_display.guard = 護衛節點 +torbutton.circuit_display.guard_note = 你的[護衛]節點可能不會更換。 +torbutton.circuit_display.learn_more = 了解更多 +torbutton.circuit_display.click_to_copy = 按一下以複製 +torbutton.circuit_display.copied = 已複製! +torbutton.content_sizer.margin_tooltip = 洋蔥路由瀏覽器特意將視窗邊框的寬度及高度重新設置,以便讓您的瀏覽器狀態資訊看起來更為普通,如此可以減少您的網路活動被識別並追蹤的可能性。 +extensions.torbutton@torproject.org.description = Torbutton 提供一個按鈕來設定洋蔥路由,以及輕鬆便捷地清除私人瀏覽資料。 +torbutton.popup.external.title = 下載外部檔案類型? +torbutton.popup.external.app = 洋蔥路由瀏覽器無法顯示這個檔案,您需要使用其他應用程式來開啟它。\n\n +torbutton.popup.external.note = 部份類型的檔案可能會啟動某些應用程式,並且在不經過洋蔥路由的情況下,直接連上網際網路。\n +torbutton.popup.external.suggest = 為了安全起見,您應該只在離線狀態時才開啟已下載的檔案,或是使用像 Tails 的 Tor Live CD 之類的工具。\n +torbutton.popup.launch = 下載檔案 +torbutton.popup.cancel = 取消 +torbutton.popup.dontask = 從現在開始自動下載檔案 +torbutton.popup.no_newnym = Torbutton 無法安全地給你一個新的識別身份,它無法存取洋蔥路由的控制連接埠。\n\n您目前正在執行的是洋蔥路由瀏覽器嗎? +torbutton.security_settings.menu.title = 安全性設定 +torbutton.title.prompt_torbrowser = 重要的 Torbutton 資訊 +torbutton.popup.prompt_torbrowser = Torbutton 現在以不同的方式運作:您再也不能將其關閉。\n\n我們做了這樣的變更,因為若在同一個瀏覽器中,使用洋蔥路由造訪網站,又同時不經過洋蔥路由造訪其他網站,將會有安全上的疑慮。目前仍有太多我們無法修復的程式錯誤存在。\n\n如果您希望繼續正常使用火狐狸瀏覽器,您應解除安裝 Torbutton 並下載洋蔥路由瀏覽器套件。洋蔥路由瀏覽器的隱私性也優於普通的火狐狸瀏覽器,即使當火狐狸瀏覽器與 Torbutton 一起使用時也是。\n\n要移除 Torbutton,請前往 工具 -> 附加元件 -> 擴充套件 然後按一下 Torbutton 旁邊的 〔移除〕按鈕。 +torbutton.popup.short_torbrowser = 重要的 Torbutton 資訊!\n\nTorbutton 現在永遠啟用。\n\n按一下 Torbutton 獲取更多資訊。 + +torbutton.popup.confirm_plugins = 諸如 Flash 的瀏覽器外掛程式可能會危害您的隱私和匿名性。\n\n它們還可以繞過洋蔥路由,透露出您目前所在的位置和 IP 位址。\n\n您確定要啟用外掛程式嗎?\n +torbutton.popup.never_ask_again = 不要再問我 +torbutton.popup.confirm_newnym = 洋蔥路由瀏覽器將關閉所有視窗和分頁。所有已登入狀態中的網站資訊都將被清除。\n\n您確定現在要重新啟動洋蔥路由瀏覽器來重新設置您的識別身份?\n\n + +torbutton.maximize_warning = 若將洋蔥路由瀏覽器視窗最大化,可能會讓所造訪的網站能夠得知您的螢幕尺寸,此舉可能被利用來識別並追蹤您的網路活動。因此我們建議您讓洋蔥路由瀏覽器視窗保持原始的大小。 + +# Canvas permission prompt. Strings are kept here for ease of translation. +canvas.siteprompt=此網站 (%S) 試圖使用 HTML 5 畫布影像資料,此功能可能被用來標記識別您的電腦。\n\n是否要允許洋蔥路由瀏覽器執行處理 HTML 5 畫布影像資料? +canvas.notNow=稍後 +canvas.notNowAccessKey=N +canvas.allow=永遠允許 +canvas.allowAccessKey=A +canvas.never=此網站永不(建議) +canvas.neverAccessKey=e + +# Profile/startup error messages. Strings are kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +profileProblemTitle=%S 配置問題 +profileReadOnly=您不能在唯讀的檔案系統中執行 %S,請先將 %S 複製到其他位置下再行嘗試。 +profileReadOnlyMac=您不能在唯讀的檔案系統中執行 %S,請先將 %S 複製到您的電腦桌面或應用程式資料夾中,再行嘗試。 +profileAccessDenied=%S 沒有足夠的存取權限,請重新調整您的檔案系統權限後再行嘗試。 +profileMigrationFailed=無法轉移至您現存的%S資料夾。\n將使用新設定。 + +# "Downloading update" string for the hamburger menu (see #28885). +# This string is kept here for ease of translation. +# LOCALIZATION NOTE: %S is the application name. +updateDownloadingPanelUILabel=正在下載 %S 更新 + +# .Onion Page Info prompt. Strings are kept here for ease of translation. +pageInfo_OnionEncryptionWithBitsAndProtocol=連線已加密 (洋蔥服務, %1$S, %2$S 位元金鑰, %3$S) +pageInfo_OnionEncryption=連接加密(洋蔥服務) +pageInfo_OnionName=洋蔥名稱: + +# Onion services strings. Strings are kept here for ease of translation. +onionServices.learnMore=了解更多 +onionServices.errorPage.browser=瀏覧器 +onionServices.errorPage.network=網路 +onionServices.errorPage.onionSite=洋蔥站台 +# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with +# an error code, e.g., 0xF3. +# Tor SOCKS error 0xF0: +onionServices.descNotFound.pageTitle=載入洋蔥站台時發生問題 +onionServices.descNotFound.header=找不到洋蔥站台 +onionServices.descNotFound=最可能的原因是洋蔥站台已離線,請聯絡該網站的管理員。 +onionServices.descNotFound.longDescription=技術細節: %S — 該洋蔥服務之識別證不存在於雜湊環中,故無法與該服務建立連線。 +# Tor SOCKS error 0xF1: +onionServices.descInvalid.pageTitle=載入洋蔥站台發生問題 +onionServices.descInvalid.header=無法連上洋蔥站台 +onionServices.descInvalid=洋蔥站台由於內部錯誤無法連接。 +onionServices.descInvalid.longDescription=技術細節: %S — 該洋蔥服務知識別證無法被解析,或是其數位簽章驗證失敗。 +# Tor SOCKS error 0xF2: +onionServices.introFailed.pageTitle=載入洋蔥站台時發生問題 +onionServices.introFailed.header=洋蔥站台已斷線 +onionServices.introFailed=最有可能的原因是該洋蔥站台已離線,請聯絡該站台的管理員。 +onionServices.introFailed.longDescription=技術細節: %S — 該洋蔥服務之識別證已找到,但該服務與引見節點之連線已中斷,造成引見連線建立失敗。這通常是肇因於該服務更換識別證,或是已經不再提供服務。 +# Tor SOCKS error 0xF3: +onionServices.rendezvousFailed.pageTitle=載入洋蔥站台發生問題 +onionServices.rendezvousFailed.header=無法連線到洋蔥站台 +onionServices.rendezvousFailed=洋蔥站台過於忙碌或洋蔥路由網路之頻寬負載已滿,請稍後再試。 +onionServices.rendezvousFailed.longDescription=技術細節: %S — 與該服務之會見連線建立失敗,通往該服務之連線未果。 +# Tor SOCKS error 0xF4: +onionServices.clientAuthMissing.pageTitle=需要授權 +onionServices.clientAuthMissing.header=該洋蔥站台要求認證 +onionServices.clientAuthMissing=需要提供金鑰才能存取此洋蔥站台。 +onionServices.clientAuthMissing.longDescription=技術細節: %S — 已下載該洋蔥服務之識別證,但由於缺少認證資訊,故無法解密識別證之內容。 +# Tor SOCKS error 0xF5: +onionServices.clientAuthIncorrect.pageTitle=授權失敗 +onionServices.clientAuthIncorrect.header=洋蔥站台授權失敗 +onionServices.clientAuthIncorrect=您所提供的金鑰不正確或已被撤銷,請聯絡該洋蔥站台管理員。 +onionServices.clientAuthIncorrect.longDescription=技術細節: %S — 已成功下載該洋蔥服務之識別證,但無法使用客戶端認證資訊進行內容之解密,原因可能是存取權已被撤銷。 +# Tor SOCKS error 0xF6: +onionServices.badAddress.pageTitle=載入洋蔥站台時發生問題 +onionServices.badAddress.header=無效的洋蔥站台位址 +onionServices.badAddress=您所提供的洋蔥站台位址無效,請檢查您是否輸入正確。 +onionServices.badAddress.longDescription=技術細節: %S — 您所提供的洋蔥服務位址無效,可能的原因有:位址之總和檢查碼不符、ed25519公開金鑰無效、無效的編碼。 +# Tor SOCKS error 0xF7: +onionServices.introTimedOut.pageTitle=載入洋蔥站台時發生問題 +onionServices.introTimedOut.header=洋蔥站台之迴路建立逾時 +onionServices.introTimedOut=無法連線到洋蔥站台,可能是因為網路連線品質不佳。 +onionServices.introTimedOut.longDescription=技術細節: %S — 建立通往該洋蔥服務之會見節點迴路時,發生連線逾時。 +# +# LOCALIZATION NOTE: %S will be replaced with the .onion address. +onionServices.authPrompt.description2=%S 要求您驗證。 +onionServices.authPrompt.keyPlaceholder=請輸入您的私密金鑰以使用此洋蔥服務 +onionServices.authPrompt.done=完成 +onionServices.authPrompt.doneAccessKey=d +onionServices.authPrompt.invalidKey=請輸入有效金鑰(52 個 Base32 字元,或 44 個 Base64 字元) +onionServices.authPrompt.failedToSetKey=無法使用您的金鑰設定洋蔥路由 +onionServices.authPreferences.header=洋蔥服務驗證 +onionServices.authPreferences.overview=部分洋蔥服務要求您使用金鑰 (一種密碼) 進行身份識別後,才允許存取。 +onionServices.authPreferences.savedKeys=儲存的金鑰 +onionServices.authPreferences.dialogTitle=洋蔥服務金鑰 +onionServices.authPreferences.dialogIntro=下列洋蔥網站的金鑰已儲存於您的電腦 +onionServices.authPreferences.onionSite=洋蔥站台 +onionServices.authPreferences.onionKey=金鑰 +onionServices.authPreferences.remove=移除 +onionServices.authPreferences.removeAll=全部移除 +onionServices.authPreferences.failedToGetKeys=無法從洋蔥路由擷取金鑰 +onionServices.authPreferences.failedToRemoveKey=無法移除金鑰 +onionServices.v2Deprecated.pageTitle=V2 版洋蔥站台位址廢棄警告 +onionServices.v2Deprecated.header=第2版的洋蔥站台位址即將被廢棄不用 +onionServices.v2Deprecated=此洋蔥站台即將失效,請聯繫該站台管理員並鼓勵他們進行網站升級。 +onionServices.v2Deprecated.longDescription=洋蔥路由將在2021年七月起停止支援第2版的洋蔥服務,故此洋蔥站台目前所使用的位址也將失效。若您是此站台的管理員,請盡速將此洋蔥服務升級至第3版。 +onionServices.v2Deprecated.tryAgain=收到 +onionServices.v2Deprecated.tooltip=此洋蔥站台即將失效 + +# Onion-Location strings. +onionLocation.alwaysPrioritize=優先使用洋蔥服務 +onionLocation.alwaysPrioritizeAccessKey=a +onionLocation.notNow=稍後 +onionLocation.notNowAccessKey=n +onionLocation.description=此網站有透過洋蔥路由網路提供洋蔥服務,這是一個較安全且私密的連線方式,洋蔥服務可以幫助網站擁有者以及其訪客對抗網路監控審查與過濾。 +onionLocation.tryThis=試試洋蔥服務 +onionLocation.onionAvailable=.onion 可用 +onionLocation.learnMore=了解更多… +onionLocation.always=總是 +onionLocation.askEverytime=每次詢問 +onionLocation.prioritizeOnionsDescription=優先使用洋蔥網站。 +onionLocation.onionServicesTitle=洋蔥服務 + +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address. +cryptoSafetyPrompt.cryptoWarning=從某個不安全的網站上複製了一個加密貨幣的位址(%S),該位址可能已遭到竄改。 +cryptoSafetyPrompt.whatCanHeading=我能怎麼做? +cryptoSafetyPrompt.whatCanBody=您可以試著重新建立一條新的迴路來確保連線安全,或者是忽略此警告並接受風險。 +cryptoSafetyPrompt.learnMore=了解更多 +cryptoSafetyPrompt.primaryAction=用另一條新的迴路重新載入此分頁 +cryptoSafetyPrompt.primaryActionAccessKey=R +cryptoSafetyPrompt.secondaryAction=忽略警告 +cryptoSafetyPrompt.secondaryActionAccessKey=B + +# about:rulesets strings. +rulesets.warningTitle=三思而後行 +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets.warningEnable=Warn me when I attempt to access these preferences +rulesets.warningButton=接受風險並繼續 +# Ruleset list +rulesets.rulesets=Rulesets +rulesets.noRulesets=No rulesets found +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) +rulesets.lastUpdated=最近更新%S +rulesets.neverUpdated=從未更新或上次更新失敗 +rulesets.enabled=啟用 +rulesets.disabled=關閉 +# Ruleset details/edit ruleset +rulesets.edit=編輯 +rulesets.name=名字 +rulesets.jwk=JWK +rulesets.pathPrefix=Path Prefix +rulesets.scope=範圍 +rulesets.enable=Enable this ruleset +rulesets.checkUpdates=檢查更新 +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL +rulesets.scopePlaceholder=Regular expression for the scope of the rules +rulesets.scopeInvalid=The scope could not be parsed as a regular expression +rulesets.save=儲存 +rulesets.cancel=取消 diff --git a/toolkit/torbutton/chrome/locale/zh-TW/torlauncher.properties b/toolkit/torbutton/chrome/locale/zh-TW/torlauncher.properties new file mode 100644 index 000000000000..b220792c0a23 --- /dev/null +++ b/toolkit/torbutton/chrome/locale/zh-TW/torlauncher.properties @@ -0,0 +1,97 @@ +### Copyright (c) 2020, The Tor Project, Inc. +### See LICENSE for licensing information. + +torlauncher.error_title=洋蔥路由啟動工具 + +torlauncher.tor_exited_during_startup=洋蔥路由瀏覽器在啟動時意外終止。這可能是因為 torrc 設定檔的錯誤、洋蔥路由瀏覽器本身、您系統上其他程式的漏洞或是硬體故障所造成。必須先解決潛在的問題並重新啟動洋蔥路由瀏覽器,本程式才能正常運作。 +torlauncher.tor_exited=洋蔥路由瀏覽器意外終止了。這可能是因為洋蔥路由瀏覽器本身的程式錯誤、您系統上的其它程式或是硬體故障所造成。除非您重新啟動洋蔥路由瀏覽器,否則洋蔥路由瀏覽器將無法連線到任何網站。如果此問題持續發生,請寄送您的洋蔥路由瀏覽器錯誤報告給支援團隊。 +torlauncher.tor_exited2=重新啟動洋蔥路由將不會關閉您瀏覽器的分頁。 +torlauncher.tor_controlconn_failed=無法連接至洋蔥路由控制連接埠。 +torlauncher.tor_failed_to_start=洋蔥路由無法啟動。 +torlauncher.tor_control_failed=無法控制洋蔥路由。 +torlauncher.tor_bootstrap_failed=洋蔥路由系統無法建立起通往洋蔥路由網路的連線。 +torlauncher.tor_bootstrap_failed_details=%1$S 失敗 (%2$S)。 + +torlauncher.unable_to_start_tor=無法啟動洋蔥路由。\n\n%S +torlauncher.tor_missing=洋蔥路由可執行檔遺失。 +torlauncher.torrc_missing=洋蔥路由的配置文件遺失而且無法創建。 +torlauncher.datadir_missing=洋蔥路由的資料目錄不存在,且無法被建立。 +torlauncher.onionauthdir_missing=洋蔥路由的洋蔥驗證目錄不存在,且無法被建立。 +torlauncher.password_hash_missing=無法取得雜湊過的密碼。 + +torlauncher.failed_to_get_settings=無法擷取洋蔥路由設定。\n\n%S +torlauncher.failed_to_save_settings=無法儲存洋蔥路由的設定。\n\n%S +torlauncher.ensure_tor_is_running=請確定洋蔥路由正在執行。 + +torlauncher.error_proxy_addr_missing=您必須指定一個 IP 位址或主機名稱以及連接埠號碼,才能夠讓洋蔥路由使用代理伺服器來存取網路。 +torlauncher.error_proxy_type_missing=您必須選擇代理伺服器類型。 +torlauncher.error_bridges_missing=您必須指定一個或多個橋接中繼站。 +torlauncher.error_default_bridges_type_missing=您必須為該橋接中繼站選擇一種傳輸類型。 +torlauncher.error_bridgedb_bridges_missing=索取一個橋接中繼站 +torlauncher.error_bridge_bad_default_type=沒有提供傳輸類型為 %S 的橋接中繼站,請調整您的設定。 + +torlauncher.bridge_suffix.meek-amazon=(能在中國使用) +torlauncher.bridge_suffix.meek-azure=(能在中國使用) + +torlauncher.request_a_bridge=請求一個橋接中繼站... +torlauncher.request_a_new_bridge=請求一個新的橋接中繼站... +torlauncher.contacting_bridgedb=正在連接到 BridgeDB,請稍等。 +torlauncher.captcha_prompt=解決驗證碼來索取橋接中繼站。 +torlauncher.bad_captcha_solution=解答不正確。請再試一次。 +torlauncher.unable_to_get_bridge=無法從 BridgeDB 獲得橋接中繼站。\n\n%S +torlauncher.no_meek=此瀏覽器沒有設定好 meek,需要它才能夠取得橋接中繼站。 +torlauncher.no_bridges_available=抱歉,現在沒有可以使用的橋接中繼站。 + +torlauncher.connect=連線 +torlauncher.restart_tor=重新啟動洋蔥路由 +torlauncher.quit=離開 +torlauncher.quit_win=結束 +torlauncher.done=完成 + +torlauncher.forAssistance=如需協助,請聯絡 %S +torlauncher.forAssistance2=若需要協助的話,可以造訪 %S + +torlauncher.copiedNLogMessages=複製完成。%S 洋蔥路由紀錄訊息已準備好被貼到文字編輯器或是一封電子郵件訊息。 + +torlauncher.bootstrapStatus.starting=啟動中 +torlauncher.bootstrapStatus.conn_pt=正在連線到橋接中繼站 +torlauncher.bootstrapStatus.conn_done_pt=已連線到橋接中繼站 +torlauncher.bootstrapStatus.conn_proxy=正在連線到代理伺服器 +torlauncher.bootstrapStatus.conn_done_proxy=已連線到代理伺服器 +torlauncher.bootstrapStatus.conn=正在連線到洋蔥路由中繼站 +torlauncher.bootstrapStatus.conn_done=已連線到洋蔥路由中繼站 +torlauncher.bootstrapStatus.handshake=正在與洋蔥路由中繼站協商 +torlauncher.bootstrapStatus.handshake_done=已完成與洋蔥路由中繼站協商 +torlauncher.bootstrapStatus.onehop_create=正在建立加密的目錄連線 +torlauncher.bootstrapStatus.requesting_status=正在擷取網路狀態 +torlauncher.bootstrapStatus.loading_status=正在載入網路狀態 +torlauncher.bootstrapStatus.loading_keys=正在載入授權憑證 +torlauncher.bootstrapStatus.requesting_descriptors=正在索取中繼節點資訊 +torlauncher.bootstrapStatus.loading_descriptors=正在載入中繼節點資訊 +torlauncher.bootstrapStatus.enough_dirinfo=已完成載入中繼站資訊 +torlauncher.bootstrapStatus.ap_conn_pt=正在建立迴路:正在連線到橋接中繼站 +torlauncher.bootstrapStatus.ap_conn_done_pt=正在建立迴路:已連線到橋接中繼站 +torlauncher.bootstrapStatus.ap_conn_proxy=正在建立迴路:正在連線到代理伺服器 +torlauncher.bootstrapStatus.ap_conn_done_proxy=正在建立迴路:已連線到代理伺服器 +torlauncher.bootstrapStatus.ap_conn=正在建立迴路:正在連線到洋蔥路由中繼站 +torlauncher.bootstrapStatus.ap_conn_done=正在建立迴路:已連線到洋蔥路由中繼站 +torlauncher.bootstrapStatus.ap_handshake=正在建立迴路:正在與洋蔥路由中繼站進行協商 +torlauncher.bootstrapStatus.ap_handshake_done=正在建立迴路:已完成與洋蔥路由中繼站協商 +torlauncher.bootstrapStatus.circuit_create=正在建立迴路:已建立洋蔥路由迴路 +torlauncher.bootstrapStatus.done=已連接到洋蔥路由網路! + +torlauncher.bootstrapWarning.done=完成 +torlauncher.bootstrapWarning.connectrefused=連線遭到拒絕 +torlauncher.bootstrapWarning.misc=雜項 +torlauncher.bootstrapWarning.resourcelimit=資源不足 +torlauncher.bootstrapWarning.identity=識別身份不符 +torlauncher.bootstrapWarning.timeout=連線逾時 +torlauncher.bootstrapWarning.noroute=沒有通往主機的路徑 +torlauncher.bootstrapWarning.ioerror=讀取/寫入錯誤 +torlauncher.bootstrapWarning.pt_missing=缺少可插拔式傳輸工具 + +torlauncher.nsresult.NS_ERROR_NET_RESET=與伺服器連線中斷 +torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=無法連接至伺服器 +torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=無法連接至代理伺服器 + +torlauncher.copiedNLogMessagesShort=已複製 %S 歷程紀錄 diff --git a/toolkit/torbutton/import-translations.sh b/toolkit/torbutton/import-translations.sh new file mode 100755 index 000000000000..df3d45e38d69 --- /dev/null +++ b/toolkit/torbutton/import-translations.sh @@ -0,0 +1,121 @@ +#!/bin/bash -e + +# This var comes from the TBB locale list. +# XXX: Find some way to keep this and tor-browser-build in sync. +# IMPORTANT: Remember to also update jar.mn when modifying this list! +BUNDLE_LOCALES="ar ca cs da de el es-ES fa fr ga-IE he hu id is it ja ka ko lt mk ms my nb-NO nl pl pt-BR ro ru sq sv-SE th tr uk vi zh-CN zh-TW" + +LOCALE_DIR=./chrome/locale + +# FILEMAP is an array of "localeFile:translationBranch" strings. +FILEMAP=( "aboutDialog.dtd:torbutton-aboutdialogdtd" + "aboutTor.dtd:abouttor-homepage" + "aboutTBUpdate.dtd:torbutton-abouttbupdatedtd" + "brand.dtd:torbutton-branddtd" + "brand.properties:torbutton-brandproperties" + "browserOnboarding.properties:torbutton-browseronboardingproperties" + "torbutton.dtd:torbutton-torbuttondtd" + "torbutton.properties:torbutton-torbuttonproperties" + "network-settings.dtd:tor-launcher-network-settings" + "torlauncher.properties:tor-launcher-properties" + ) + +# Verify that the FILEMAP contains an entry for each Torbutton file. +FILES_ARE_MISSING=0 +for DEST_PATH in $LOCALE_DIR/en-US/*.dtd $LOCALE_DIR/en-US/*.properties; +do + IS_FILE_IN_MAP=0 + DEST_FILE=${DEST_PATH##*/} + for KEYVAL in "${FILEMAP[@]}"; + do + FILE="${KEYVAL%%:*}" + if [ $FILE = $DEST_FILE ]; + then + IS_FILE_IN_MAP=1 + break; + fi + done + + if [ $IS_FILE_IN_MAP -eq 0 -a $DEST_FILE != "onboarding.properties" ]; + then + echo "Please add $DEST_FILE to FILEMAP." 1>&2 + FILES_ARE_MISSING=1 + fi +done + +if [ $FILES_ARE_MISSING -ne 0 ]; +then + exit 1 +fi + +# Clone or update our translation repo. +if [ -d translation ]; +then + cd translation + git fetch origin + cd .. +else + git clone https://gitlab.torproject.org/tpo/translation.git +fi + +# Update each translated file for each locale. +( +echo "Locales: $BUNDLE_LOCALES" +cd translation +for KEYVAL in "${FILEMAP[@]}"; do + DEST_FILE="${KEYVAL%%:*}" + BRANCH="${KEYVAL##*:}" + echo "Updating ${DEST_FILE}..." + git checkout -q "$BRANCH" + git merge -q origin/"$BRANCH" + for i in $BUNDLE_LOCALES; + do + mkdir -p ../$LOCALE_DIR/$i/ +# Some file names are lowercase in Transifex. + if [ -f $i/"$DEST_FILE" ]; then + SRCFILE="$DEST_FILE" + else + SRCFILE="`echo $DEST_FILE | tr '[:upper:]' '[:lower:]'`" + fi +# Use sed to work around a Transifex "double entity" issue. + sed -e 's/&brandShortName;/&brandShortName;/g' \ + -e 's/&vendorShortName;/&vendorShortName;/g' \ + $i/"$SRCFILE" > ../$LOCALE_DIR/$i/"$DEST_FILE" + done +done +) + +# Autogenerate brand.ftl based on brand.properties +# and brand.dtd. +REGEX_ENTITY='<!ENTITY +([^" ]+) +"(.+)">'; +for LOCALE in $BUNDLE_LOCALES; +do + BRAND_PATH="$LOCALE_DIR/$LOCALE/brand.properties" + BRAND_DTD_PATH="$LOCALE_DIR/$LOCALE/brand.dtd" + TOR_BRAND_PATH="$(dirname "$BRAND_PATH")/branding/brand.ftl" + + BRAND_SHORTER_NAME="$(sed -n -e '/^brandShorterName/p' $BRAND_PATH | cut -d= -f2)" + BRAND_SHORT_NAME="$(sed -n -e '/^brandShortName/p' $BRAND_PATH | cut -d= -f2)" + BRAND_FULL_NAME="$(sed -n -e '/^brandFullName/p' $BRAND_PATH | cut -d= -f2)" + BRAND_PRODUCT_NAME="$(sed -n -e '/^brandProductName/p' $BRAND_PATH | cut -d= -f2)" + VENDOR_SHORT_NAME="$(sed -n -e '/^vendorShortName/p' $BRAND_PATH | cut -d= -f2)" + TRADEMARK_INFO='{ " " }' + if [[ "$(sed -n -e '/trademarkInfo/p' $BRAND_DTD_PATH)" =~ $REGEX_ENTITY ]] + then + # Replace some HTML entities (now just ") for brand.ftl. + TRADEMARK_INFO="${BASH_REMATCH[2]//"/'}" + fi + + echo "# For Tor Browser, we use a new file (different than the brand.ftl file" > $TOR_BRAND_PATH + echo "# that is used by Firefox) to avoid picking up the -brand-short-name values" >> $TOR_BRAND_PATH + echo "# that Mozilla includes in the Firefox language packs." >> $TOR_BRAND_PATH + echo "" >> $TOR_BRAND_PATH + echo "-brand-shorter-name = $BRAND_SHORTER_NAME" >> $TOR_BRAND_PATH + echo "-brand-short-name = $BRAND_SHORT_NAME" >> $TOR_BRAND_PATH + echo "-brand-full-name = $BRAND_FULL_NAME" >> $TOR_BRAND_PATH + echo "# This brand name can be used in messages where the product name needs to" >> $TOR_BRAND_PATH + echo "# remain unchanged across different versions (Nightly, Beta, etc.)." >> $TOR_BRAND_PATH + echo "-brand-product-name = $BRAND_PRODUCT_NAME" >> $TOR_BRAND_PATH + echo "-vendor-short-name = $VENDOR_SHORT_NAME" >> $TOR_BRAND_PATH + echo "trademarkInfo = $TRADEMARK_INFO" >> $TOR_BRAND_PATH +done diff --git a/toolkit/torbutton/jar.mn b/toolkit/torbutton/jar.mn index 5e7a11384cc4..0dda7443d139 100644 --- a/toolkit/torbutton/jar.mn +++ b/toolkit/torbutton/jar.mn @@ -20,6 +20,89 @@ torbutton.jar: % resource torbutton-abouttor resource://torbutton/content/aboutTor/resources/ contentaccessible=yes % resource torbutton-assets resource://torbutton/skin/ contentaccessible=yes
+# browser branding +% override chrome://branding/locale/brand.dtd chrome://torbutton/locale/brand.dtd +% override chrome://branding/locale/brand.properties chrome://torbutton/locale/brand.properties +% category l10n-registry torbutton resource://torbutton/locale/{locale}/ + +# Strings for the about:tbupdate page +% override chrome://browser/locale/aboutTBUpdate.dtd chrome://torbutton/locale/aboutTBUpdate.dtd + +% locale torbutton en-US %locale/en-US/ + locale/en-US/ (chrome/locale/en-US/*) +% locale torbutton ar %locale/ar/ + locale/ar (chrome/locale/ar/*) +% locale torbutton ca %locale/ca/ + locale/ca (chrome/locale/ca/*) +% locale torbutton cs %locale/cs/ + locale/cs (chrome/locale/cs/*) +% locale torbutton da %locale/da/ + locale/da (chrome/locale/da/*) +% locale torbutton de %locale/de/ + locale/de (chrome/locale/de/*) +% locale torbutton el %locale/el/ + locale/el (chrome/locale/el/*) +% locale torbutton es-ES %locale/es-ES/ + locale/es-ES (chrome/locale/es-ES/*) +% locale torbutton fa %locale/fa/ + locale/fa (chrome/locale/fa/*) +% locale torbutton fr %locale/fr/ + locale/fr (chrome/locale/fr/*) +% locale torbutton ga-IE %locale/ga-IE/ + locale/ga-IE (chrome/locale/ga-IE/*) +% locale torbutton he %locale/he/ + locale/he (chrome/locale/he/*) +% locale torbutton hu %locale/hu/ + locale/hu (chrome/locale/hu/*) +% locale torbutton id %locale/id/ + locale/id (chrome/locale/id/*) +% locale torbutton is %locale/is/ + locale/is (chrome/locale/is/*) +% locale torbutton it %locale/it/ + locale/it (chrome/locale/it/*) +% locale torbutton ja %locale/ja/ + locale/ja (chrome/locale/ja/*) +% locale torbutton ka %locale/ka/ + locale/ka (chrome/locale/ka/*) +% locale torbutton ko %locale/ko/ + locale/ko (chrome/locale/ko/*) +% locale torbutton lt %locale/lt/ + locale/lt (chrome/locale/lt/*) +% locale torbutton mk %locale/mk/ + locale/mk (chrome/locale/mk/*) +% locale torbutton ms %locale/ms/ + locale/ms (chrome/locale/ms/*) +% locale torbutton my %locale/my/ + locale/my (chrome/locale/my/*) +% locale torbutton nb-NO %locale/nb-NO/ + locale/nb-NO (chrome/locale/nb-NO/*) +% locale torbutton nl %locale/nl/ + locale/nl (chrome/locale/nl/*) +% locale torbutton pl %locale/pl/ + locale/pl (chrome/locale/pl/*) +% locale torbutton pt-BR %locale/pt-BR/ + locale/pt-BR (chrome/locale/pt-BR/*) +% locale torbutton ro %locale/ro/ + locale/ro (chrome/locale/ro/*) +% locale torbutton ru %locale/ru/ + locale/ru (chrome/locale/ru/*) +% locale torbutton sq %locale/sq/ + locale/sq (chrome/locale/sq/*) +% locale torbutton sv-SE %locale/sv-SE/ + locale/sv-SE (chrome/locale/sv-SE/*) +% locale torbutton th %locale/th/ + locale/th (chrome/locale/th/*) +% locale torbutton tr %locale/tr/ + locale/tr (chrome/locale/tr/*) +% locale torbutton uk %locale/uk/ + locale/uk (chrome/locale/uk/*) +% locale torbutton vi %locale/vi/ + locale/vi (chrome/locale/vi/*) +% locale torbutton zh-CN %locale/zh-CN/ + locale/zh-CN (chrome/locale/zh-CN/*) +% locale torbutton zh-TW %locale/zh-TW/ + locale/zh-TW (chrome/locale/zh-TW/*) + % skin torbutton classic/1.0 %skin/
# Firefox 4-style component registration
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit d7ae3a46b9c9956a714e99b778c036733b54cffb Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Tue Feb 24 13:50:23 2015 -0500
Bug 14631: Improve profile access error messages.
Instead of always reporting that the profile is locked, display specific messages for "access denied" and "read-only file system".
To allow for localization, get profile-related error strings from Torbutton. Use app display name ("Tor Browser") in profile-related error alerts. --- .../mozapps/profile/profileSelection.properties | 5 + toolkit/profile/nsToolkitProfileService.cpp | 57 +++++++- toolkit/profile/nsToolkitProfileService.h | 13 +- toolkit/xre/nsAppRunner.cpp | 157 ++++++++++++++++++--- 4 files changed, 208 insertions(+), 24 deletions(-)
diff --git a/toolkit/locales/en-US/chrome/mozapps/profile/profileSelection.properties b/toolkit/locales/en-US/chrome/mozapps/profile/profileSelection.properties index dbd3041cfb6e..afe54b5a481f 100644 --- a/toolkit/locales/en-US/chrome/mozapps/profile/profileSelection.properties +++ b/toolkit/locales/en-US/chrome/mozapps/profile/profileSelection.properties @@ -12,6 +12,11 @@ restartMessageUnlocker=%S is already running, but is not responding. The old %S restartMessageNoUnlockerMac=A copy of %S is already open. Only one copy of %S can be open at a time. restartMessageUnlockerMac=A copy of %S is already open. The running copy of %S will quit in order to open this one.
+# LOCALIZATION NOTE (profileProblemTitle, profileReadOnly, profileReadOnlyMac, profileAccessDenied): Messages displayed when the browser profile cannot be accessed or written to. %S is the application name. +profileProblemTitle=%S Profile Problem +profileReadOnly=You cannot run %S from a read-only file system. Please copy %S to another location before trying to use it. +profileReadOnlyMac=You cannot run %S from a read-only file system. Please copy %S to your Desktop or Applications folder before trying to use it. +profileAccessDenied=%S does not have permission to access the profile. Please adjust your file system permissions and try again. # Profile manager # LOCALIZATION NOTE (profileTooltip): First %S is the profile name, second %S is the path to the profile folder. profileTooltip=Profile: ‘%S’ — Path: ‘%S’ diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp index f1ea2aa51939..74a984a5e4e6 100644 --- a/toolkit/profile/nsToolkitProfileService.cpp +++ b/toolkit/profile/nsToolkitProfileService.cpp @@ -1251,9 +1251,10 @@ nsToolkitProfileService::SelectStartupProfile( }
bool wasDefault; + ProfileStatus profileStatus; nsresult rv = SelectStartupProfile(&argc, argv.get(), aIsResetting, aRootDir, aLocalDir, - aProfile, aDidCreate, &wasDefault); + aProfile, aDidCreate, &wasDefault, profileStatus);
// Since we were called outside of the normal startup path complete any // startup tasks. @@ -1286,7 +1287,8 @@ nsToolkitProfileService::SelectStartupProfile( nsresult nsToolkitProfileService::SelectStartupProfile( int* aArgc, char* aArgv[], bool aIsResetting, nsIFile** aRootDir, nsIFile** aLocalDir, nsIToolkitProfile** aProfile, bool* aDidCreate, - bool* aWasDefaultSelection) { + bool* aWasDefaultSelection, ProfileStatus& aProfileStatus) { + aProfileStatus = PROFILE_STATUS_OK; if (mStartupProfileSelected) { return NS_ERROR_ALREADY_INITIALIZED; } @@ -1379,6 +1381,13 @@ nsresult nsToolkitProfileService::SelectStartupProfile( rv = XRE_GetFileFromPath(arg, getter_AddRefs(lf)); NS_ENSURE_SUCCESS(rv, rv);
+ aProfileStatus = CheckProfileWriteAccess(lf); + if (PROFILE_STATUS_OK != aProfileStatus) { + NS_ADDREF(*aRootDir = lf); + NS_ADDREF(*aLocalDir = lf); + return NS_ERROR_FAILURE; + } + // Make sure that the profile path exists and it's a directory. bool exists; rv = lf->Exists(&exists); @@ -2145,3 +2154,47 @@ nsresult XRE_GetFileFromPath(const char* aPath, nsIFile** aResult) { # error Platform-specific logic needed here. #endif } + +// Check for write permission to the profile directory by trying to create a +// new file (after ensuring that no file with the same name exists). +ProfileStatus nsToolkitProfileService::CheckProfileWriteAccess( + nsIFile* aProfileDir) { +#if defined(XP_UNIX) + constexpr auto writeTestFileName = u".parentwritetest"_ns; +#else + constexpr auto writeTestFileName = u"parent.writetest"_ns; +#endif + + nsCOMPtr<nsIFile> writeTestFile; + nsresult rv = aProfileDir->Clone(getter_AddRefs(writeTestFile)); + if (NS_SUCCEEDED(rv)) rv = writeTestFile->Append(writeTestFileName); + + if (NS_SUCCEEDED(rv)) { + bool doesExist = false; + rv = writeTestFile->Exists(&doesExist); + if (NS_SUCCEEDED(rv) && doesExist) rv = writeTestFile->Remove(true); + } + + if (NS_SUCCEEDED(rv)) { + rv = writeTestFile->Create(nsIFile::NORMAL_FILE_TYPE, 0666); + (void)writeTestFile->Remove(true); + } + + ProfileStatus status = + NS_SUCCEEDED(rv) ? PROFILE_STATUS_OK : PROFILE_STATUS_OTHER_ERROR; + if (NS_ERROR_FILE_ACCESS_DENIED == rv) + status = PROFILE_STATUS_ACCESS_DENIED; + else if (NS_ERROR_FILE_READ_ONLY == rv) + status = PROFILE_STATUS_READ_ONLY; + + return status; +} + +ProfileStatus nsToolkitProfileService::CheckProfileWriteAccess( + nsIToolkitProfile* aProfile) { + nsCOMPtr<nsIFile> profileDir; + nsresult rv = aProfile->GetRootDir(getter_AddRefs(profileDir)); + if (NS_FAILED(rv)) return PROFILE_STATUS_OTHER_ERROR; + + return CheckProfileWriteAccess(profileDir); +} diff --git a/toolkit/profile/nsToolkitProfileService.h b/toolkit/profile/nsToolkitProfileService.h index d281d39ebe59..5c97c906df49 100644 --- a/toolkit/profile/nsToolkitProfileService.h +++ b/toolkit/profile/nsToolkitProfileService.h @@ -16,6 +16,14 @@ #include "nsProfileLock.h" #include "nsINIParser.h"
+enum ProfileStatus { + PROFILE_STATUS_OK, + PROFILE_STATUS_ACCESS_DENIED, + PROFILE_STATUS_READ_ONLY, + PROFILE_STATUS_IS_LOCKED, + PROFILE_STATUS_OTHER_ERROR +}; + class nsToolkitProfile final : public nsIToolkitProfile, public mozilla::LinkedListElement<RefPtr<nsToolkitProfile>> { @@ -80,10 +88,13 @@ class nsToolkitProfileService final : public nsIToolkitProfileService { nsresult SelectStartupProfile(int* aArgc, char* aArgv[], bool aIsResetting, nsIFile** aRootDir, nsIFile** aLocalDir, nsIToolkitProfile** aProfile, bool* aDidCreate, - bool* aWasDefaultSelection); + bool* aWasDefaultSelection, + ProfileStatus& aProfileStatus); nsresult CreateResetProfile(nsIToolkitProfile** aNewProfile); nsresult ApplyResetProfile(nsIToolkitProfile* aOldProfile); void CompleteStartup(); + static ProfileStatus CheckProfileWriteAccess(nsIToolkitProfile* aProfile); + static ProfileStatus CheckProfileWriteAccess(nsIFile* aProfileDir);
private: friend class nsToolkitProfile; diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 7b5752b4c20f..686d8dd985e6 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -2683,6 +2683,91 @@ nsresult LaunchChild(bool aBlankCommandLine, bool aTryExec) { return NS_ERROR_LAUNCHED_CHILD_PROCESS; }
+static nsresult GetOverrideStringBundleForLocale(nsIStringBundleService* aSBS, + const char* aTorbuttonURI, + const char* aLocale, + nsIStringBundle** aResult) { + NS_ENSURE_ARG(aSBS); + NS_ENSURE_ARG(aTorbuttonURI); + NS_ENSURE_ARG(aLocale); + NS_ENSURE_ARG(aResult); + + const char* kFormatStr = + "jar:%s!/chrome/torbutton/locale/%s/torbutton.properties"; + nsPrintfCString strBundleURL(kFormatStr, aTorbuttonURI, aLocale); + nsresult rv = aSBS->CreateBundle(strBundleURL.get(), aResult); + NS_ENSURE_SUCCESS(rv, rv); + + // To ensure that we have a valid string bundle, try to retrieve a string + // that we know exists. + nsAutoString val; + rv = (*aResult)->GetStringFromName("profileProblemTitle", val); + if (!NS_SUCCEEDED(rv)) *aResult = nullptr; // No good. Discard it. + + return rv; +} + +static void GetOverrideStringBundle(nsIStringBundleService* aSBS, + nsIStringBundle** aResult) { + if (!aSBS || !aResult) return; + + *aResult = nullptr; + + // Build Torbutton file URI string by starting from GREDir. + RefPtr<nsXREDirProvider> dirProvider = nsXREDirProvider::GetSingleton(); + if (!dirProvider) return; + + nsCOMPtr<nsIFile> greDir = dirProvider->GetGREDir(); + if (!greDir) return; + + // Create file URI, extract as string, and append omni.ja relative path. + nsCOMPtr<nsIURI> uri; + nsAutoCString uriString; + if (NS_FAILED(NS_NewFileURI(getter_AddRefs(uri), greDir)) || + NS_FAILED(uri->GetSpec(uriString))) { + return; + } + + uriString.Append("omni.ja"); + + nsAutoCString userAgentLocale; + if (!NS_SUCCEEDED( + Preferences::GetCString("intl.locale.requested", userAgentLocale))) { + return; + } + + nsresult rv = GetOverrideStringBundleForLocale( + aSBS, uriString.get(), userAgentLocale.get(), aResult); + if (NS_FAILED(rv)) { + // Try again using base locale, e.g., "en" vs. "en-US". + int16_t offset = userAgentLocale.FindChar('-', 1); + if (offset > 0) { + nsAutoCString shortLocale(Substring(userAgentLocale, 0, offset)); + rv = GetOverrideStringBundleForLocale(aSBS, uriString.get(), + shortLocale.get(), aResult); + } + } +} + +static nsresult GetFormattedString(nsIStringBundle* aOverrideBundle, + nsIStringBundle* aMainBundle, + const char* aName, + const nsTArray<nsString>& aParams, + nsAString& aResult) { + NS_ENSURE_ARG(aName); + + nsresult rv = NS_ERROR_FAILURE; + if (aOverrideBundle) { + rv = aOverrideBundle->FormatStringFromName(aName, aParams, aResult); + } + + // If string was not found in override bundle, use main (browser) bundle. + if (NS_FAILED(rv) && aMainBundle) + rv = aMainBundle->FormatStringFromName(aName, aParams, aResult); + + return rv; +} + static const char kProfileProperties[] = "chrome://mozapps/locale/profile/profileSelection.properties";
@@ -2756,7 +2841,7 @@ static nsresult ProfileMissingDialog(nsINativeAppSupport* aNative) { sbs->CreateBundle(kProfileProperties, getter_AddRefs(sb)); NS_ENSURE_TRUE_LOG(sbs, NS_ERROR_FAILURE);
- NS_ConvertUTF8toUTF16 appName(gAppData->name); + NS_ConvertUTF8toUTF16 appName(MOZ_APP_DISPLAYNAME); AutoTArray<nsString, 2> params = {appName, appName};
// profileMissing @@ -2781,11 +2866,12 @@ static nsresult ProfileMissingDialog(nsINativeAppSupport* aNative) {
// If aUnlocker is NULL, it is also OK for the following arguments to be NULL: // aProfileDir, aProfileLocalDir, aResult. -static ReturnAbortOnError ProfileLockedDialog(nsIFile* aProfileDir, - nsIFile* aProfileLocalDir, - nsIProfileUnlocker* aUnlocker, - nsINativeAppSupport* aNative, - nsIProfileLock** aResult) { +static ReturnAbortOnError ProfileErrorDialog(nsIFile* aProfileDir, + nsIFile* aProfileLocalDir, + ProfileStatus aStatus, + nsIProfileUnlocker* aUnlocker, + nsINativeAppSupport* aNative, + nsIProfileLock** aResult) { nsresult rv;
if (aProfileDir) { @@ -2815,24 +2901,39 @@ static ReturnAbortOnError ProfileLockedDialog(nsIFile* aProfileDir, sbs->CreateBundle(kProfileProperties, getter_AddRefs(sb)); NS_ENSURE_TRUE_LOG(sbs, NS_ERROR_FAILURE);
- NS_ConvertUTF8toUTF16 appName(gAppData->name); + nsCOMPtr<nsIStringBundle> overrideSB; + GetOverrideStringBundle(sbs, getter_AddRefs(overrideSB)); + + NS_ConvertUTF8toUTF16 appName(MOZ_APP_DISPLAYNAME); AutoTArray<nsString, 3> params = {appName, appName, appName};
nsAutoString killMessage; #ifndef XP_MACOSX - rv = sb->FormatStringFromName( - aUnlocker ? "restartMessageUnlocker" : "restartMessageNoUnlocker2", - params, killMessage); + static const char kRestartUnlocker[] = "restartMessageUnlocker"; + static const char kRestartNoUnlocker[] = "restartMessageNoUnlocker2"; + static const char kReadOnly[] = "profileReadOnly"; #else - rv = sb->FormatStringFromName( - aUnlocker ? "restartMessageUnlockerMac" : "restartMessageNoUnlockerMac", - params, killMessage); -#endif + static const char kRestartUnlocker[] = "restartMessageUnlockerMac"; + static const char kRestartNoUnlocker[] = "restartMessageNoUnlockerMac"; + static const char kReadOnly[] = "profileReadOnlyMac"; +#endif + static const char kAccessDenied[] = "profileAccessDenied"; + + const char* errorKey = aUnlocker ? kRestartUnlocker : kRestartNoUnlocker; + if (PROFILE_STATUS_READ_ONLY == aStatus) + errorKey = kReadOnly; + else if (PROFILE_STATUS_ACCESS_DENIED == aStatus) + errorKey = kAccessDenied; + rv = GetFormattedString(overrideSB, sb, errorKey, params, killMessage); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
+ const char* titleKey = ((PROFILE_STATUS_READ_ONLY == aStatus) || + (PROFILE_STATUS_ACCESS_DENIED == aStatus)) + ? "profileProblemTitle" + : "restartTitle"; params.SetLength(1); nsAutoString killTitle; - rv = sb->FormatStringFromName("restartTitle", params, killTitle); + rv = sb->FormatStringFromName(titleKey, params, killTitle); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
#ifdef MOZ_BACKGROUNDTASKS @@ -3018,6 +3119,13 @@ static nsCOMPtr<nsIToolkitProfile> gResetOldProfile; static nsresult LockProfile(nsINativeAppSupport* aNative, nsIFile* aRootDir, nsIFile* aLocalDir, nsIToolkitProfile* aProfile, nsIProfileLock** aResult) { + ProfileStatus status = + (aProfile ? nsToolkitProfileService::CheckProfileWriteAccess(aProfile) + : nsToolkitProfileService::CheckProfileWriteAccess(aRootDir)); + if (PROFILE_STATUS_OK != status) + return ProfileErrorDialog(aRootDir, aLocalDir, status, nullptr, aNative, + aResult); + // If you close Firefox and very quickly reopen it, the old Firefox may // still be closing down. Rather than immediately showing the // "Firefox is running but is not responding" message, we spend a few @@ -3044,7 +3152,8 @@ static nsresult LockProfile(nsINativeAppSupport* aNative, nsIFile* aRootDir, } while (TimeStamp::Now() - start < TimeDuration::FromSeconds(kLockRetrySeconds));
- return ProfileLockedDialog(aRootDir, aLocalDir, unlocker, aNative, aResult); + return ProfileErrorDialog(aRootDir, aLocalDir, PROFILE_STATUS_IS_LOCKED, + unlocker, aNative, aResult); }
// Pick a profile. We need to end up with a profile root dir, local dir and @@ -3059,7 +3168,8 @@ static nsresult LockProfile(nsINativeAppSupport* aNative, nsIFile* aRootDir, static nsresult SelectProfile(nsToolkitProfileService* aProfileSvc, nsINativeAppSupport* aNative, nsIFile** aRootDir, nsIFile** aLocalDir, nsIToolkitProfile** aProfile, - bool* aWasDefaultSelection) { + bool* aWasDefaultSelection, + nsIProfileLock** aResult) { StartupTimeline::Record(StartupTimeline::SELECT_PROFILE);
nsresult rv; @@ -3105,9 +3215,14 @@ static nsresult SelectProfile(nsToolkitProfileService* aProfileSvc,
// Ask the profile manager to select the profile directories to use. bool didCreate = false; - rv = aProfileSvc->SelectStartupProfile(&gArgc, gArgv, gDoProfileReset, - aRootDir, aLocalDir, aProfile, - &didCreate, aWasDefaultSelection); + ProfileStatus profileStatus = PROFILE_STATUS_OK; + rv = aProfileSvc->SelectStartupProfile( + &gArgc, gArgv, gDoProfileReset, aRootDir, aLocalDir, aProfile, &didCreate, + aWasDefaultSelection, profileStatus); + if (PROFILE_STATUS_OK != profileStatus) { + return ProfileErrorDialog(*aRootDir, *aLocalDir, profileStatus, nullptr, + aNative, aResult); + }
if (rv == NS_ERROR_SHOW_PROFILE_MANAGER) { return ShowProfileManager(aProfileSvc, aNative); @@ -5004,7 +5119,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { nsCOMPtr<nsIToolkitProfile> profile; rv = SelectProfile(mProfileSvc, mNativeApp, getter_AddRefs(mProfD), getter_AddRefs(mProfLD), getter_AddRefs(profile), - &wasDefaultSelection); + &wasDefaultSelection, getter_AddRefs(mProfileLock)); if (rv == NS_ERROR_LAUNCHED_CHILD_PROCESS || rv == NS_ERROR_ABORT) { *aExitFlag = true; return 0;
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 9311ed4f256bb55af5e44dfae26c06ccd4387ffa Author: sanketh me@snkth.com AuthorDate: Mon Feb 8 20:12:44 2021 -0500
Bug 40209: Implement Basic Crypto Safety
Adds a CryptoSafety actor which detects when you've copied a crypto address from a HTTP webpage and shows a warning.
Closes #40209.
Bug 40428: Fix string attribute names --- browser/actors/CryptoSafetyChild.jsm | 87 ++++++++++++++++ browser/actors/CryptoSafetyParent.jsm | 142 +++++++++++++++++++++++++++ browser/actors/moz.build | 2 + browser/base/content/popup-notifications.inc | 14 +++ browser/components/BrowserGlue.jsm | 18 ++++ browser/modules/TorStrings.jsm | 41 ++++++++ browser/themes/shared/browser-shared.css | 5 + toolkit/content/license.html | 32 ++++++ toolkit/modules/Bech32Decode.jsm | 103 +++++++++++++++++++ toolkit/modules/moz.build | 1 + 10 files changed, 445 insertions(+)
diff --git a/browser/actors/CryptoSafetyChild.jsm b/browser/actors/CryptoSafetyChild.jsm new file mode 100644 index 000000000000..87ff261d4915 --- /dev/null +++ b/browser/actors/CryptoSafetyChild.jsm @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Copyright (c) 2020, The Tor Project, Inc. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var EXPORTED_SYMBOLS = ["CryptoSafetyChild"]; + +const { Bech32Decode } = ChromeUtils.import( + "resource://gre/modules/Bech32Decode.jsm" +); + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +const kPrefCryptoSafety = "security.cryptoSafety"; + +XPCOMUtils.defineLazyPreferenceGetter( + this, + "isCryptoSafetyEnabled", + kPrefCryptoSafety, + true /* defaults to true */ +); + +function looksLikeCryptoAddress(s) { + // P2PKH and P2SH addresses + // https://stackoverflow.com/a/24205650 + const bitcoinAddr = /^[13][a-km-zA-HJ-NP-Z1-9]{25,39}$/; + if (bitcoinAddr.test(s)) { + return true; + } + + // Bech32 addresses + if (Bech32Decode(s) !== null) { + return true; + } + + // regular addresses + const etherAddr = /^0x[a-fA-F0-9]{40}$/; + if (etherAddr.test(s)) { + return true; + } + + // t-addresses + // https://www.reddit.com/r/zec/comments/8mxj6x/simple_regex_to_validate_a_zcas... + const zcashAddr = /^t1[a-zA-Z0-9]{33}$/; + if (zcashAddr.test(s)) { + return true; + } + + // Standard, Integrated, and 256-bit Integrated addresses + // https://monero.stackexchange.com/a/10627 + const moneroAddr = /^4(?:[0-9AB]|[1-9A-HJ-NP-Za-km-z]{12}(?:[1-9A-HJ-NP-Za-km-z]{30})?)[1-9A-HJ-NP-Za-km-z]{93}$/; + if (moneroAddr.test(s)) { + return true; + } + + return false; +} + +class CryptoSafetyChild extends JSWindowActorChild { + handleEvent(event) { + if (isCryptoSafetyEnabled) { + // Ignore non-HTTP addresses + if (!this.document.documentURIObject.schemeIs("http")) { + return; + } + // Ignore onion addresses + if (this.document.documentURIObject.host.endsWith(".onion")) { + return; + } + + if (event.type == "copy" || event.type == "cut") { + this.contentWindow.navigator.clipboard.readText().then(clipText => { + const selection = clipText.trim(); + if (looksLikeCryptoAddress(selection)) { + this.sendAsyncMessage("CryptoSafety:CopiedText", { + selection, + }); + } + }); + } + } + } +} diff --git a/browser/actors/CryptoSafetyParent.jsm b/browser/actors/CryptoSafetyParent.jsm new file mode 100644 index 000000000000..5e4696e446c6 --- /dev/null +++ b/browser/actors/CryptoSafetyParent.jsm @@ -0,0 +1,142 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Copyright (c) 2020, The Tor Project, Inc. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var EXPORTED_SYMBOLS = ["CryptoSafetyParent"]; + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + TorStrings: "resource:///modules/TorStrings.jsm", +}); + +const kPrefCryptoSafety = "security.cryptoSafety"; + +XPCOMUtils.defineLazyPreferenceGetter( + this, + "isCryptoSafetyEnabled", + kPrefCryptoSafety, + true /* defaults to true */ +); + +class CryptoSafetyParent extends JSWindowActorParent { + getBrowser() { + return this.browsingContext.top.embedderElement; + } + + receiveMessage(aMessage) { + if (isCryptoSafetyEnabled) { + if (aMessage.name == "CryptoSafety:CopiedText") { + showPopup(this.getBrowser(), aMessage.data.selection); + } + } + } +} + +function trimAddress(cryptoAddr) { + if (cryptoAddr.length <= 32) { + return cryptoAddr; + } + return cryptoAddr.substring(0, 32) + "..."; +} + +function showPopup(aBrowser, cryptoAddr) { + const chromeDoc = aBrowser.ownerDocument; + if (chromeDoc) { + const win = chromeDoc.defaultView; + const cryptoSafetyPrompt = new CryptoSafetyPrompt( + aBrowser, + win, + cryptoAddr + ); + cryptoSafetyPrompt.show(); + } +} + +class CryptoSafetyPrompt { + constructor(aBrowser, aWin, cryptoAddr) { + this._browser = aBrowser; + this._win = aWin; + this._cryptoAddr = cryptoAddr; + } + + show() { + const primaryAction = { + label: TorStrings.cryptoSafetyPrompt.primaryAction, + accessKey: TorStrings.cryptoSafetyPrompt.primaryActionAccessKey, + callback: () => { + this._win.torbutton_new_circuit(); + }, + }; + + const secondaryAction = { + label: TorStrings.cryptoSafetyPrompt.secondaryAction, + accessKey: TorStrings.cryptoSafetyPrompt.secondaryActionAccessKey, + callback: () => {}, + }; + + let _this = this; + const options = { + popupIconURL: "chrome://global/skin/icons/warning.svg", + eventCallback(aTopic) { + if (aTopic === "showing") { + _this._onPromptShowing(); + } + }, + }; + + const cryptoWarningText = TorStrings.cryptoSafetyPrompt.cryptoWarning.replace( + "%S", + trimAddress(this._cryptoAddr) + ); + + if (this._win.PopupNotifications) { + this._prompt = this._win.PopupNotifications.show( + this._browser, + "crypto-safety-warning", + cryptoWarningText, + null /* anchor ID */, + primaryAction, + [secondaryAction], + options + ); + } + } + + _onPromptShowing() { + let xulDoc = this._browser.ownerDocument; + + let whatCanHeading = xulDoc.getElementById( + "crypto-safety-warning-notification-what-can-heading" + ); + if (whatCanHeading) { + whatCanHeading.textContent = TorStrings.cryptoSafetyPrompt.whatCanHeading; + } + + let whatCanBody = xulDoc.getElementById( + "crypto-safety-warning-notification-what-can-body" + ); + if (whatCanBody) { + whatCanBody.textContent = TorStrings.cryptoSafetyPrompt.whatCanBody; + } + + let learnMoreElem = xulDoc.getElementById( + "crypto-safety-warning-notification-learnmore" + ); + if (learnMoreElem) { + learnMoreElem.setAttribute( + "value", + TorStrings.cryptoSafetyPrompt.learnMore + ); + learnMoreElem.setAttribute( + "href", + TorStrings.cryptoSafetyPrompt.learnMoreURL + ); + } + } +} diff --git a/browser/actors/moz.build b/browser/actors/moz.build index 87ba6ef0c2a8..5a2c1796fb5d 100644 --- a/browser/actors/moz.build +++ b/browser/actors/moz.build @@ -57,6 +57,8 @@ FINAL_TARGET_FILES.actors += [ "ContentSearchParent.jsm", "ContextMenuChild.jsm", "ContextMenuParent.jsm", + "CryptoSafetyChild.jsm", + "CryptoSafetyParent.jsm", "DecoderDoctorChild.jsm", "DecoderDoctorParent.jsm", "DOMFullscreenChild.jsm", diff --git a/browser/base/content/popup-notifications.inc b/browser/base/content/popup-notifications.inc index 69d53bdd7662..443441395a49 100644 --- a/browser/base/content/popup-notifications.inc +++ b/browser/base/content/popup-notifications.inc @@ -166,3 +166,17 @@ </vbox> </popupnotificationfooter> </popupnotification> + + <popupnotification id="crypto-safety-warning-notification" hidden="true"> + <popupnotificationcontent orient="vertical"> + <description id="crypto-safety-warning-notification-desc"/> + <html:div id="crypto-safety-warning-notification-what-can"> + <html:strong id="crypto-safety-warning-notification-what-can-heading" /> + html:br/ + <html:span id="crypto-safety-warning-notification-what-can-body" /> + </html:div> + <label id="crypto-safety-warning-notification-learnmore" + class="popup-notification-learnmore-link" + is="text-link"/> + </popupnotificationcontent> + </popupnotification> diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 6d0947a464ba..b1a0fc5ffe44 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -453,6 +453,24 @@ let JSWINDOWACTORS = { },
messageManagerGroups: ["browsers"], + + allFrames: true, + }, + + CryptoSafety: { + parent: { + moduleURI: "resource:///actors/CryptoSafetyParent.jsm", + }, + + child: { + moduleURI: "resource:///actors/CryptoSafetyChild.jsm", + group: "browsers", + events: { + copy: { mozSystemGroup: true }, + cut: { mozSystemGroup: true }, + }, + }, + allFrames: true, },
diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm index 0b2fc1eea11b..ca121b189a44 100644 --- a/browser/modules/TorStrings.jsm +++ b/browser/modules/TorStrings.jsm @@ -100,6 +100,40 @@ class TorPropertyStringBundle { }
const Loader = { + /* + CryptoSafetyPrompt Strings + */ + cryptoSafetyPrompt() { + const tsb = new TorPropertyStringBundle( + "chrome://torbutton/locale/torbutton.properties", + "cryptoSafetyPrompt." + ); + const getString = tsb.getString.bind(tsb); + + const retval = { + cryptoWarning: getString( + "cryptoWarning", + "A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified." + ), + whatCanHeading: getString("whatCanHeading", "What can you do about it?"), + whatCanBody: getString( + "whatCanBody", + "You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning." + ), + learnMore: getString("learnMore", "Learn more"), + learnMoreURL: `https://support.torproject.org/$%7BgetLocale()%7D/%60, + primaryAction: getString( + "primaryAction", + "Reload Tab with a New Circuit" + ), + primaryActionAccessKey: getString("primaryActionAccessKey", "R"), + secondaryAction: getString("secondaryAction", "Dismiss Warning"), + secondaryActionAccessKey: getString("secondaryActionAccessKey", "D"), + }; + + return retval; + } /* CryptoSafetyPrompt Strings */, + /* Tor about:preferences#connection Strings */ @@ -899,6 +933,13 @@ const Loader = { };
const TorStrings = { + get cryptoSafetyPrompt() { + if (!this._cryptoSafetyPrompt) { + this._cryptoSafetyPrompt = Loader.cryptoSafetyPrompt(); + } + return this._cryptoSafetyPrompt; + }, + get settings() { if (!this._settings) { this._settings = Loader.settings(); diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css index 946807ef8623..1a1bb759b8b4 100644 --- a/browser/themes/shared/browser-shared.css +++ b/browser/themes/shared/browser-shared.css @@ -829,3 +829,8 @@ popupnotificationcontent { #tab-notification-deck { display: block; } + +#crypto-safety-warning-notification-what-can { + display: block; + margin: 5px; +} diff --git a/toolkit/content/license.html b/toolkit/content/license.html index b213750f69d3..a1d9e137f150 100644 --- a/toolkit/content/license.html +++ b/toolkit/content/license.html @@ -71,6 +71,7 @@ <li><a href="about:license#arm">ARM License</a></li> <li><a href="about:license#babel">Babel License</a></li> <li><a href="about:license#babylon">Babylon License</a></li> + <li><a href="about:license#bech32">Bech32 License</a></li> <li><a href="about:license#bincode">bincode License</a></li> <li><a href="about:license#bsd2clause">BSD 2-Clause License</a></li> <li><a href="about:license#bsd3clause">BSD 3-Clause License</a></li> @@ -2106,6 +2107,37 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +</pre> + + + <hr> + + <h1><a id="bech32"></a>Bech32 License</h1> + + <p>This license applies to the file + <code>toolkit/modules/Bech32Decode.jsm</code>. + </p> + +<pre> +Copyright (c) 2017 Pieter Wuille + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/toolkit/modules/Bech32Decode.jsm b/toolkit/modules/Bech32Decode.jsm new file mode 100644 index 000000000000..c793a6282291 --- /dev/null +++ b/toolkit/modules/Bech32Decode.jsm @@ -0,0 +1,103 @@ +// Adapted from the reference implementation of Bech32 +// https://github.com/sipa/bech32 + +// Copyright (c) 2017 Pieter Wuille +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +"use strict"; + +/** + * JS module implementation of Bech32 decoding adapted from the reference + * implementation https://github.com/sipa/bech32. + */ + +var EXPORTED_SYMBOLS = ["Bech32Decode"]; + +var CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; +var GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]; + +function polymod(values) { + var chk = 1; + for (var p = 0; p < values.length; ++p) { + var top = chk >> 25; + chk = ((chk & 0x1ffffff) << 5) ^ values[p]; + for (var i = 0; i < 5; ++i) { + if ((top >> i) & 1) { + chk ^= GENERATOR[i]; + } + } + } + return chk; +} + +function hrpExpand(hrp) { + var ret = []; + var p; + for (p = 0; p < hrp.length; ++p) { + ret.push(hrp.charCodeAt(p) >> 5); + } + ret.push(0); + for (p = 0; p < hrp.length; ++p) { + ret.push(hrp.charCodeAt(p) & 31); + } + return ret; +} + +function verifyChecksum(hrp, data) { + return polymod(hrpExpand(hrp).concat(data)) === 1; +} + +function Bech32Decode(bechString) { + var p; + var has_lower = false; + var has_upper = false; + for (p = 0; p < bechString.length; ++p) { + if (bechString.charCodeAt(p) < 33 || bechString.charCodeAt(p) > 126) { + return null; + } + if (bechString.charCodeAt(p) >= 97 && bechString.charCodeAt(p) <= 122) { + has_lower = true; + } + if (bechString.charCodeAt(p) >= 65 && bechString.charCodeAt(p) <= 90) { + has_upper = true; + } + } + if (has_lower && has_upper) { + return null; + } + bechString = bechString.toLowerCase(); + var pos = bechString.lastIndexOf("1"); + if (pos < 1 || pos + 7 > bechString.length || bechString.length > 90) { + return null; + } + var hrp = bechString.substring(0, pos); + var data = []; + for (p = pos + 1; p < bechString.length; ++p) { + var d = CHARSET.indexOf(bechString.charAt(p)); + if (d === -1) { + return null; + } + data.push(d); + } + if (!verifyChecksum(hrp, data)) { + return null; + } + return { hrp, data: data.slice(0, data.length - 6) }; +} diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index a537997c78ee..47b386bcd507 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -155,6 +155,7 @@ EXTRA_JS_MODULES += [ "ActorManagerParent.jsm", "AppMenuNotifications.jsm", "AsyncPrefs.jsm", + "Bech32Decode.jsm", "BinarySearch.jsm", "BrowserTelemetryUtils.jsm", "BrowserUtils.jsm",
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 974692d9229399e4699761421ac8491e50a5da21 Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Tue Jun 28 15:13:05 2016 -0400
Bug 19273: Avoid JavaScript patching of the external app helper dialog.
When handling an external URI or downloading a file, invoke Torbutton's external app blocker component (which will present a download warning dialog unless the user has checked the "Automatically download files from now on" box).
For e10s compatibility, avoid using a modal dialog and instead use a callback interface (nsIHelperAppWarningLauncher) to allow Torbutton to indicate the user's desire to cancel or continue each request.
Other bugs fixed: Bug 21766: Crash with e10s enabled while trying to download a file Bug 21886: Download is stalled in non-e10s mode Bug 22471: Downloading files via the PDF viewer download button is broken Bug 22472: Fix FTP downloads when external helper app dialog is shown Bug 22610: Avoid crashes when canceling external helper app downloads Bug 22618: Downloading pdf file via file:/// is stalling --- .../exthandler/nsExternalHelperAppService.cpp | 192 +++++++++++++++++---- uriloader/exthandler/nsExternalHelperAppService.h | 3 + .../exthandler/nsIExternalHelperAppService.idl | 47 +++++ 3 files changed, 209 insertions(+), 33 deletions(-)
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index 68938edc0897..76361d2ab1a7 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -144,6 +144,9 @@ static const char NEVER_ASK_FOR_SAVE_TO_DISK_PREF[] = static const char NEVER_ASK_FOR_OPEN_FILE_PREF[] = "browser.helperApps.neverAsk.openFile";
+static const char WARNING_DIALOG_CONTRACT_ID[] = + "@torproject.org/torbutton-extAppBlocker;1"; + StaticRefPtr<nsIFile> sFallbackDownloadDir;
// Helper functions for Content-Disposition headers @@ -395,6 +398,22 @@ nsresult GenerateRandomName(nsACString& result) { return NS_OK; }
+static already_AddRefed<nsIInterfaceRequestor> GetDialogParentAux( + BrowsingContext* aBrowsingContext, nsIInterfaceRequestor* aWindowContext) { + nsCOMPtr<nsIInterfaceRequestor> dialogParent = aWindowContext; + + if (!dialogParent && aBrowsingContext) { + dialogParent = do_QueryInterface(aBrowsingContext->GetDOMWindow()); + } + if (!dialogParent && aBrowsingContext && XRE_IsParentProcess()) { + RefPtr<Element> element = aBrowsingContext->Top()->GetEmbedderElement(); + if (element) { + dialogParent = do_QueryInterface(element->OwnerDoc()->GetWindow()); + } + } + return dialogParent.forget(); +} + /** * Structure for storing extension->type mappings. * @see defaultMimeEntries @@ -592,6 +611,96 @@ static const char* descriptionOverwriteExtensions[] = { "avif", "jxl", "pdf", "svg", "webp", "xml", };
+////////////////////////////////////////////////////////////////////////////////////////////////////// +// begin nsExternalLoadURIHandler class definition and implementation +////////////////////////////////////////////////////////////////////////////////////////////////////// +class nsExternalLoadURIHandler final : public nsIHelperAppWarningLauncher { + public: + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIHELPERAPPWARNINGLAUNCHER + + nsExternalLoadURIHandler(nsIHandlerInfo* aHandlerInfo, nsIURI* aURI, + nsIPrincipal* aTriggeringPrincipal, + BrowsingContext* aBrowsingContext, + bool aTriggeredExternally); + + protected: + ~nsExternalLoadURIHandler(); + + nsCOMPtr<nsIHandlerInfo> mHandlerInfo; + nsCOMPtr<nsIURI> mURI; + nsCOMPtr<nsIPrincipal> mTriggeringPrincipal; + RefPtr<BrowsingContext> mBrowsingContext; + bool mTriggeredExternally; + nsCOMPtr<nsIHelperAppWarningDialog> mWarningDialog; +}; + +NS_IMPL_ADDREF(nsExternalLoadURIHandler) +NS_IMPL_RELEASE(nsExternalLoadURIHandler) + +NS_INTERFACE_MAP_BEGIN(nsExternalLoadURIHandler) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIHelperAppWarningLauncher) + NS_INTERFACE_MAP_ENTRY(nsIHelperAppWarningLauncher) +NS_INTERFACE_MAP_END + +nsExternalLoadURIHandler::nsExternalLoadURIHandler( + nsIHandlerInfo* aHandlerInfo, nsIURI* aURI, + nsIPrincipal* aTriggeringPrincipal, BrowsingContext* aBrowsingContext, + bool aTriggeredExternally) + : mHandlerInfo(aHandlerInfo), + mURI(aURI), + mTriggeringPrincipal(aTriggeringPrincipal), + mBrowsingContext(aBrowsingContext), + mTriggeredExternally(aTriggeredExternally) + +{ + nsresult rv = NS_OK; + mWarningDialog = do_CreateInstance(WARNING_DIALOG_CONTRACT_ID, &rv); + if (NS_SUCCEEDED(rv) && mWarningDialog) { + // This will create a reference cycle (the dialog holds a reference to us + // as nsIHelperAppWarningLauncher), which will be broken in ContinueRequest + // or CancelRequest. + nsCOMPtr<nsIInterfaceRequestor> dialogParent = + GetDialogParentAux(aBrowsingContext, nullptr); + rv = mWarningDialog->MaybeShow(this, dialogParent); + } + + if (NS_FAILED(rv)) { + // If for some reason we could not open the download warning prompt, + // continue with the request. + ContinueRequest(); + } +} + +nsExternalLoadURIHandler::~nsExternalLoadURIHandler() {} + +NS_IMETHODIMP nsExternalLoadURIHandler::ContinueRequest() { + MOZ_ASSERT(mURI); + MOZ_ASSERT(mHandlerInfo); + + // Break our reference cycle with the download warning dialog (set up in + // LoadURI). + mWarningDialog = nullptr; + + nsresult rv = NS_OK; + nsCOMPtr<nsIContentDispatchChooser> chooser = + do_CreateInstance("@mozilla.org/content-dispatch-chooser;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + + return chooser->HandleURI(mHandlerInfo, mURI, mTriggeringPrincipal, + mBrowsingContext, mTriggeredExternally); +} + +NS_IMETHODIMP nsExternalLoadURIHandler::CancelRequest(nsresult aReason) { + NS_ENSURE_ARG(NS_FAILED(aReason)); + + // Break our reference cycle with the download warning dialog (set up in + // LoadURI). + mWarningDialog = nullptr; + + return NS_OK; +} + static StaticRefPtr<nsExternalHelperAppService> sExtHelperAppSvcSingleton;
/** @@ -614,6 +723,9 @@ nsExternalHelperAppService::GetSingleton() { return do_AddRef(sExtHelperAppSvcSingleton); }
+////////////////////////////////////////////////////////////////////////////////////////////////////// +// nsExternalHelperAppService definition and implementation +////////////////////////////////////////////////////////////////////////////////////////////////////// NS_IMPL_ISUPPORTS(nsExternalHelperAppService, nsIExternalHelperAppService, nsPIExternalAppLauncher, nsIExternalProtocolService, nsIMIMEService, nsIObserver, nsISupportsWeakReference) @@ -1126,14 +1238,15 @@ nsExternalHelperAppService::LoadURI(nsIURI* aURI, rv = GetProtocolHandlerInfo(scheme, getter_AddRefs(handler)); NS_ENSURE_SUCCESS(rv, rv);
- nsCOMPtr<nsIContentDispatchChooser> chooser = - do_CreateInstance("@mozilla.org/content-dispatch-chooser;1", &rv); - NS_ENSURE_SUCCESS(rv, rv); - - return chooser->HandleURI( + RefPtr<nsExternalLoadURIHandler> h = new nsExternalLoadURIHandler( handler, escapedURI, aRedirectPrincipal ? aRedirectPrincipal : aTriggeringPrincipal, aBrowsingContext, aTriggeredExternally); + if (!h) { + return NS_ERROR_OUT_OF_MEMORY; + } + + return NS_OK; }
////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1278,6 +1391,7 @@ NS_INTERFACE_MAP_BEGIN(nsExternalAppHandler) NS_INTERFACE_MAP_ENTRY(nsIStreamListener) NS_INTERFACE_MAP_ENTRY(nsIRequestObserver) NS_INTERFACE_MAP_ENTRY(nsIHelperAppLauncher) + NS_INTERFACE_MAP_ENTRY(nsIHelperAppWarningLauncher) NS_INTERFACE_MAP_ENTRY(nsICancelable) NS_INTERFACE_MAP_ENTRY(nsIBackgroundFileSaverObserver) NS_INTERFACE_MAP_ENTRY(nsINamed) @@ -1533,18 +1647,7 @@ void nsExternalAppHandler::MaybeApplyDecodingForExtension(
already_AddRefed<nsIInterfaceRequestor> nsExternalAppHandler::GetDialogParent() { - nsCOMPtr<nsIInterfaceRequestor> dialogParent = mWindowContext; - - if (!dialogParent && mBrowsingContext) { - dialogParent = do_QueryInterface(mBrowsingContext->GetDOMWindow()); - } - if (!dialogParent && mBrowsingContext && XRE_IsParentProcess()) { - RefPtr<Element> element = mBrowsingContext->Top()->GetEmbedderElement(); - if (element) { - dialogParent = do_QueryInterface(element->OwnerDoc()->GetWindow()); - } - } - return dialogParent.forget(); + return GetDialogParentAux(mBrowsingContext, mWindowContext); }
NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { @@ -1692,6 +1795,34 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { loadInfo->SetForceAllowDataURI(true); }
+ mWarningDialog = do_CreateInstance(WARNING_DIALOG_CONTRACT_ID, &rv); + if (NS_SUCCEEDED(rv) && mWarningDialog) { + // This will create a reference cycle (the dialog holds a reference to us + // as nsIHelperAppWarningLauncher), which will be broken in ContinueRequest + // or CancelRequest. + nsCOMPtr<nsIInterfaceRequestor> dialogParent = GetDialogParent(); + rv = mWarningDialog->MaybeShow(this, dialogParent); + } + + if (NS_FAILED(rv)) { + // If for some reason we could not open the download warning prompt, + // continue with the request. + ContinueRequest(); + } + + return NS_OK; +} + +NS_IMETHODIMP nsExternalAppHandler::ContinueRequest() { + nsAutoCString MIMEType; + if (mMimeInfo) { + mMimeInfo->GetMIMEType(MIMEType); + } + + // Break our reference cycle with the download warning dialog (set up in + // OnStartRequest). + mWarningDialog = nullptr; + // now that the temp file is set up, find out if we need to invoke a dialog // asking the user what they want us to do with this content...
@@ -1837,7 +1968,7 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { GetTargetFile(getter_AddRefs(fileToTest)); if (fileToTest) { bool isExecutable; - rv = fileToTest->IsExecutable(&isExecutable); + nsresult rv = fileToTest->IsExecutable(&isExecutable); if (NS_FAILED(rv) || mTempFileIsExecutable || isExecutable) { // checking NS_FAILED, because paranoia is good alwaysAsk = true; @@ -1853,20 +1984,7 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { } #endif
- nsAutoCString actionTelem; - if (alwaysAsk) { - actionTelem.AssignLiteral("ask"); - } else if (shouldAutomaticallyHandleInternally) { - actionTelem.AssignLiteral("internal"); - } else if (action == nsIMIMEInfo::useHelperApp || - action == nsIMIMEInfo::useSystemDefault) { - actionTelem.AssignLiteral("external"); - } else { - actionTelem.AssignLiteral("save"); - } - - RecordDownloadTelemetry(aChannel, actionTelem.get()); - + nsresult rv = NS_OK; if (alwaysAsk) { // Display the dialog mDialog = do_CreateInstance(NS_HELPERAPPLAUNCHERDLG_CONTRACTID, &rv); @@ -1899,6 +2017,14 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { return NS_OK; }
+NS_IMETHODIMP nsExternalAppHandler::CancelRequest(nsresult aReason) { + // Break our reference cycle with the download warning dialog (set up in + // OnStartRequest). + mWarningDialog = nullptr; + + return Cancel(aReason); +} + void nsExternalAppHandler::RecordDownloadTelemetry(nsIChannel* aChannel, const char* aAction) { // Telemetry for helper app dialog @@ -2762,7 +2888,7 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) { }
// Break our reference cycle with the helper app dialog (set up in - // OnStartRequest) + // ContinueRequest) mDialog = nullptr; mDialogShowing = false;
diff --git a/uriloader/exthandler/nsExternalHelperAppService.h b/uriloader/exthandler/nsExternalHelperAppService.h index 1374d74255b3..873a2345bc77 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.h +++ b/uriloader/exthandler/nsExternalHelperAppService.h @@ -257,6 +257,7 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService, */ class nsExternalAppHandler final : public nsIStreamListener, public nsIHelperAppLauncher, + public nsIHelperAppWarningLauncher, public nsIBackgroundFileSaverObserver, public nsINamed { public: @@ -264,6 +265,7 @@ class nsExternalAppHandler final : public nsIStreamListener, NS_DECL_NSISTREAMLISTENER NS_DECL_NSIREQUESTOBSERVER NS_DECL_NSIHELPERAPPLAUNCHER + NS_DECL_NSIHELPERAPPWARNINGLAUNCHER NS_DECL_NSICANCELABLE NS_DECL_NSIBACKGROUNDFILESAVEROBSERVER NS_DECL_NSINAMED @@ -540,6 +542,7 @@ class nsExternalAppHandler final : public nsIStreamListener, nsCOMPtr<nsITransfer> mTransfer;
nsCOMPtr<nsIHelperAppLauncherDialog> mDialog; + nsCOMPtr<nsIHelperAppWarningDialog> mWarningDialog;
/**
diff --git a/uriloader/exthandler/nsIExternalHelperAppService.idl b/uriloader/exthandler/nsIExternalHelperAppService.idl index 307e6196a89d..632c6d585ffb 100644 --- a/uriloader/exthandler/nsIExternalHelperAppService.idl +++ b/uriloader/exthandler/nsIExternalHelperAppService.idl @@ -189,3 +189,50 @@ interface nsIHelperAppLauncher : nsICancelable */ readonly attribute uint64_t browsingContextId; }; + +/** + * nsIHelperAppWarningLauncher is implemented by two classes: + * nsExternalLoadURIHandler + * nsExternalAppHandler + */ +[scriptable, uuid(cffd508b-4aaf-43ad-99c6-671d35cbc558)] +interface nsIHelperAppWarningLauncher : nsISupports +{ + /** + * Callback invoked by the external app warning dialog to continue the + * request. + * NOTE: This will release the reference to the nsIHelperAppWarningDialog. + */ + void continueRequest(); + + /** + * Callback invoked by the external app warning dialog to cancel the request. + * NOTE: This will release the reference to the nsIHelperAppWarningDialog. + * + * @param aReason + * Pass a failure code to indicate the reason why this operation is + * being canceled. It is an error to pass a success code. + */ + void cancelRequest(in nsresult aReason); +}; + +/** + * nsIHelperAppWarningDialog is implemented by Torbutton's external app + * blocker (src/components/external-app-blocker.js). + */ +[scriptable, uuid(f4899a3f-0df3-42cc-9db8-bdf599e5a208)] +interface nsIHelperAppWarningDialog : nsISupports +{ + /** + * Possibly show a launch warning dialog (it will not be shown if the user + * has chosen to not see the warning again). + * + * @param aLauncher + * A nsIHelperAppWarningLauncher to be invoked after the user confirms + * or cancels the download. + * @param aWindowContext + * The window associated with the download. + */ + void maybeShow(in nsIHelperAppWarningLauncher aLauncher, + in nsISupports aWindowContext); +};
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 833c38192eb6673c4a91aa9fa7cb96d3f89a83d4 Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Thu Feb 17 12:17:25 2022 +0100
Bug 40807: Added QRCode.js to toolkit/modules --- toolkit/content/license.html | 33 ++ toolkit/modules/QRCode.jsm | 1241 ++++++++++++++++++++++++++++++++++++++++++ toolkit/modules/moz.build | 1 + 3 files changed, 1275 insertions(+)
diff --git a/toolkit/content/license.html b/toolkit/content/license.html index a1d9e137f150..4973c4b2747f 100644 --- a/toolkit/content/license.html +++ b/toolkit/content/license.html @@ -156,6 +156,7 @@ <li><a href="about:license#prop-types">prop-types License</a></li> <li><a href="about:license#qcms">qcms License</a></li> <li><a href="about:license#qrcode-generator">QR Code Generator License</a></li> + <li><a href="about:license#qrcode-js">QRCode.js License</a></li> <li><a href="about:license#raven-js">Raven.js License</a></li> <li><a href="about:license#react">React License</a></li> <li><a href="about:license#react-mit">React MIT License</a></li> @@ -5128,6 +5129,38 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +</pre> + + <hr> + + <h1><a id="qrcode-js"></a>QRCode.js License</h1> + + <p>This license applies to the file + <code>toolkit/modules/QRCode.jsm</code>.</p> +<pre> +The MIT License (MIT) +--------------------- +Copyright (c) 2009 Kazuhiko Arase +Copyright (c) 2012 davidshimjs +Copyright (c) 2018 ivan386 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/toolkit/modules/QRCode.jsm b/toolkit/modules/QRCode.jsm new file mode 100644 index 000000000000..a5970ed2b7b3 --- /dev/null +++ b/toolkit/modules/QRCode.jsm @@ -0,0 +1,1241 @@ +/** + * @fileoverview + * - Using the 'QRCode for Javascript library' + * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. + * - this library has no dependencies. + * + * Modified to be used as a module by the Tor Project + * + * @author Kazuhiko Arase, davidshimjs, ivan386 + * @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a> + * @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a> + */ + +var EXPORTED_SYMBOLS = ["QRCode"]; + +var QRCode; + +(function() { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + this.parsedData = []; + + // Added to support UTF-8 Characters + for (var i = 0, l = this.data.length; i < l; i++) { + var byteArray = []; + var code = this.data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xf0 | ((code & 0x1c0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3f000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xfc0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3f); + } else if (code > 0x800) { + byteArray[0] = 0xe0 | ((code & 0xf000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xfc0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3f); + } else if (code > 0x80) { + byteArray[0] = 0xc0 | ((code & 0x7c0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3f); + } else { + byteArray[0] = code; + } + + this.parsedData.push(byteArray); + } + + this.parsedData = Array.prototype.concat.apply([], this.parsedData); + + if (this.parsedData.length != this.data.length) { + this.parsedData.unshift(191); + this.parsedData.unshift(187); + this.parsedData.unshift(239); + } + } + + QR8bitByte.prototype = { + getLength(buffer) { + return this.parsedData.length; + }, + write(buffer) { + for (var i = 0, l = this.parsedData.length; i < l; i++) { + buffer.put(this.parsedData[i], 8); + } + }, + }; + + function QRCodeModel(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = []; + } + + QRCodeModel.prototype = { + addData(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + isDark(row, col) { + if ( + row < 0 || + this.moduleCount <= row || + col < 0 || + this.moduleCount <= col + ) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + getModuleCount() { + return this.moduleCount; + }, + make() { + this.makeImpl(false, this.getBestMaskPattern()); + }, + makeImpl(test, maskPattern) { + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + for (var row = 0; row < this.moduleCount; row++) { + this.modules[row] = new Array(this.moduleCount); + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null; + } + } + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + if (this.dataCache == null) { + this.dataCache = QRCodeModel.createData( + this.typeNumber, + this.errorCorrectLevel, + this.dataList + ); + } + this.mapData(this.dataCache, maskPattern); + }, + setupPositionProbePattern(row, col) { + for (var r = -1; r <= 7; r++) { + if (row + r <= -1 || this.moduleCount <= row + r) { + continue; + } + for (var c = -1; c <= 7; c++) { + if (col + c <= -1 || this.moduleCount <= col + c) { + continue; + } + if ( + (0 <= r && r <= 6 && (c == 0 || c == 6)) || + (0 <= c && c <= 6 && (r == 0 || r == 6)) || + (2 <= r && r <= 4 && 2 <= c && c <= 4) + ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + getBestMaskPattern() { + var minLostPoint = 0; + var pattern = 0; + for (var i = 0; i < 8; i++) { + this.makeImpl(true, i); + var lostPoint = QRUtil.getLostPoint(this); + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + return pattern; + }, + createMovieClip(target_mc, instance_name, depth) { + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + this.make(); + for (var row = 0; row < this.modules.length; row++) { + var y = row * cs; + for (var col = 0; col < this.modules[row].length; col++) { + var x = col * cs; + var dark = this.modules[row][col]; + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + return qr_mc; + }, + setupTimingPattern() { + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = r % 2 == 0; + } + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = c % 2 == 0; + } + }, + setupPositionAdjustPattern() { + var pos = QRUtil.getPatternPosition(this.typeNumber); + for (var i = 0; i < pos.length; i++) { + for (var j = 0; j < pos.length; j++) { + var row = pos[i]; + var col = pos[j]; + if (this.modules[row][col] != null) { + continue; + } + for (var r = -2; r <= 2; r++) { + for (var c = -2; c <= 2; c++) { + if ( + r == -2 || + r == 2 || + c == -2 || + c == 2 || + (r == 0 && c == 0) + ) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + setupTypeNumber(test) { + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + for (var i = 0; i < 18; i++) { + var mod = !test && ((bits >> i) & 1) == 1; + this.modules[Math.floor(i / 3)][ + (i % 3) + this.moduleCount - 8 - 3 + ] = mod; + } + for (var i = 0; i < 18; i++) { + var mod = !test && ((bits >> i) & 1) == 1; + this.modules[(i % 3) + this.moduleCount - 8 - 3][ + Math.floor(i / 3) + ] = mod; + } + }, + setupTypeInfo(test, maskPattern) { + var data = (this.errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + for (var i = 0; i < 15; i++) { + var mod = !test && ((bits >> i) & 1) == 1; + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + for (var i = 0; i < 15; i++) { + var mod = !test && ((bits >> i) & 1) == 1; + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + this.modules[this.moduleCount - 8][8] = !test; + }, + mapData(data, maskPattern) { + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + if (col == 6) { + col--; + } + while (true) { + for (var c = 0; c < 2; c++) { + if (this.modules[row][col - c] == null) { + var dark = false; + if (byteIndex < data.length) { + dark = ((data[byteIndex] >>> bitIndex) & 1) == 1; + } + var mask = QRUtil.getMask(maskPattern, row, col - c); + if (mask) { + dark = !dark; + } + this.modules[row][col - c] = dark; + bitIndex--; + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + row += inc; + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + }, + }; + QRCodeModel.PAD0 = 0xec; + QRCodeModel.PAD1 = 0x11; + QRCodeModel.createData = function(typeNumber, errorCorrectLevel, dataList) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + var buffer = new QRBitBuffer(); + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put( + data.getLength(), + QRUtil.getLengthInBits(data.mode, typeNumber) + ); + data.write(buffer); + } + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error( + "code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")" + ); + } + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + while (true) { + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCodeModel.PAD0, 8); + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCodeModel.PAD1, 8); + } + return QRCodeModel.createBytes(buffer, rsBlocks); + }; + QRCodeModel.createBytes = function(buffer, rsBlocks) { + var offset = 0; + var maxDcCount = 0; + var maxEcCount = 0; + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + for (var r = 0; r < rsBlocks.length; r++) { + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + dcdata[r] = new Array(dcCount); + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0; + } + } + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + var data = new Array(totalCodeCount); + var index = 0; + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + return data; + }; + var QRMode = { + MODE_NUMBER: 1 << 0, + MODE_ALPHA_NUM: 1 << 1, + MODE_8BIT_BYTE: 1 << 2, + MODE_KANJI: 1 << 3, + }; + var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 }; + var QRMaskPattern = { + PATTERN000: 0, + PATTERN001: 1, + PATTERN010: 2, + PATTERN011: 3, + PATTERN100: 4, + PATTERN101: 5, + PATTERN110: 6, + PATTERN111: 7, + }; + var QRUtil = { + PATTERN_POSITION_TABLE: [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170], + ], + G15: + (1 << 10) | + (1 << 8) | + (1 << 5) | + (1 << 4) | + (1 << 2) | + (1 << 1) | + (1 << 0), + G18: + (1 << 12) | + (1 << 11) | + (1 << 10) | + (1 << 9) | + (1 << 8) | + (1 << 5) | + (1 << 2) | + (1 << 0), + G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + getBCHTypeInfo(data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= + QRUtil.G15 << + (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)); + } + return ((data << 10) | d) ^ QRUtil.G15_MASK; + }, + getBCHTypeNumber(data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= + QRUtil.G18 << + (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)); + } + return (data << 12) | d; + }, + getBCHDigit(data) { + var digit = 0; + while (data != 0) { + digit++; + data >>>= 1; + } + return digit; + }, + getPatternPosition(typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + getMask(maskPattern, i, j) { + switch (maskPattern) { + case QRMaskPattern.PATTERN000: + return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001: + return i % 2 == 0; + case QRMaskPattern.PATTERN010: + return j % 3 == 0; + case QRMaskPattern.PATTERN011: + return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100: + return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; + case QRMaskPattern.PATTERN101: + return ((i * j) % 2) + ((i * j) % 3) == 0; + case QRMaskPattern.PATTERN110: + return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0; + case QRMaskPattern.PATTERN111: + return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0; + default: + throw new Error("bad maskPattern:" + maskPattern); + } + }, + getErrorCorrectPolynomial(errorCorrectLength) { + var a = new QRPolynomial([1], 0); + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); + } + return a; + }, + getLengthInBits(mode, type) { + if (1 <= type && type < 10) { + switch (mode) { + case QRMode.MODE_NUMBER: + return 10; + case QRMode.MODE_ALPHA_NUM: + return 9; + case QRMode.MODE_8BIT_BYTE: + return 8; + case QRMode.MODE_KANJI: + return 8; + default: + throw new Error("mode:" + mode); + } + } else if (type < 27) { + switch (mode) { + case QRMode.MODE_NUMBER: + return 12; + case QRMode.MODE_ALPHA_NUM: + return 11; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 10; + default: + throw new Error("mode:" + mode); + } + } else if (type < 41) { + switch (mode) { + case QRMode.MODE_NUMBER: + return 14; + case QRMode.MODE_ALPHA_NUM: + return 13; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 12; + default: + throw new Error("mode:" + mode); + } + } else { + throw new Error("type:" + type); + } + }, + getLostPoint(qrCode) { + var moduleCount = qrCode.getModuleCount(); + var lostPoint = 0; + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount; col++) { + var sameCount = 0; + var dark = qrCode.isDark(row, col); + for (var r = -1; r <= 1; r++) { + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + for (var c = -1; c <= 1; c++) { + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + if (r == 0 && c == 0) { + continue; + } + if (dark == qrCode.isDark(row + r, col + c)) { + sameCount++; + } + } + } + if (sameCount > 5) { + lostPoint += 3 + sameCount - 5; + } + } + } + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col)) { + count++; + } + if (qrCode.isDark(row + 1, col)) { + count++; + } + if (qrCode.isDark(row, col + 1)) { + count++; + } + if (qrCode.isDark(row + 1, col + 1)) { + count++; + } + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if ( + qrCode.isDark(row, col) && + !qrCode.isDark(row, col + 1) && + qrCode.isDark(row, col + 2) && + qrCode.isDark(row, col + 3) && + qrCode.isDark(row, col + 4) && + !qrCode.isDark(row, col + 5) && + qrCode.isDark(row, col + 6) + ) { + lostPoint += 40; + } + } + } + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if ( + qrCode.isDark(row, col) && + !qrCode.isDark(row + 1, col) && + qrCode.isDark(row + 2, col) && + qrCode.isDark(row + 3, col) && + qrCode.isDark(row + 4, col) && + !qrCode.isDark(row + 5, col) && + qrCode.isDark(row + 6, col) + ) { + lostPoint += 40; + } + } + } + var darkCount = 0; + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col)) { + darkCount++; + } + } + } + var ratio = + Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + return lostPoint; + }, + }; + var QRMath = { + glog(n) { + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + return QRMath.LOG_TABLE[n]; + }, + gexp(n) { + while (n < 0) { + n += 255; + } + while (n >= 256) { + n -= 255; + } + return QRMath.EXP_TABLE[n]; + }, + EXP_TABLE: new Array(256), + LOG_TABLE: new Array(256), + }; + for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = + QRMath.EXP_TABLE[i - 4] ^ + QRMath.EXP_TABLE[i - 5] ^ + QRMath.EXP_TABLE[i - 6] ^ + QRMath.EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; + } + function QRPolynomial(num, shift) { + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + var offset = 0; + while (offset < num.length && num[offset] == 0) { + offset++; + } + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } + } + QRPolynomial.prototype = { + get(index) { + return this.num[index]; + }, + getLength() { + return this.num.length; + }, + multiply(e) { + var num = new Array(this.getLength() + e.getLength() - 1); + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp( + QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)) + ); + } + } + return new QRPolynomial(num, 0); + }, + mod(e) { + if (this.getLength() - e.getLength() < 0) { + return this; + } + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); + var num = new Array(this.getLength()); + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + return new QRPolynomial(num, 0).mod(e); + }, + }; + function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; + } + QRRSBlock.RS_BLOCK_TABLE = [ + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16], + ]; + QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + if (rsBlock == undefined) { + throw new Error( + "bad rs block @ typeNumber:" + + typeNumber + + "/errorCorrectLevel:" + + errorCorrectLevel + ); + } + var length = rsBlock.length / 3; + var list = []; + for (var i = 0; i < length; i++) { + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount)); + } + } + return list; + }; + QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + switch (errorCorrectLevel) { + case QRErrorCorrectLevel.L: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default: + return undefined; + } + }; + function QRBitBuffer() { + this.buffer = []; + this.length = 0; + } + QRBitBuffer.prototype = { + get(index) { + var bufIndex = Math.floor(index / 8); + return ((this.buffer[bufIndex] >>> (7 - (index % 8))) & 1) == 1; + }, + put(num, length) { + for (var i = 0; i < length; i++) { + this.putBit(((num >>> (length - i - 1)) & 1) == 1); + } + }, + getLengthInBits() { + return this.length; + }, + putBit(bit) { + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + if (bit) { + this.buffer[bufIndex] |= 0x80 >>> this.length % 8; + } + this.length++; + }, + }; + var QRCodeLimitLength = [ + [17, 14, 11, 7], + [32, 26, 20, 14], + [53, 42, 32, 24], + [78, 62, 46, 34], + [106, 84, 60, 44], + [134, 106, 74, 58], + [154, 122, 86, 64], + [192, 152, 108, 84], + [230, 180, 130, 98], + [271, 213, 151, 119], + [321, 251, 177, 137], + [367, 287, 203, 155], + [425, 331, 241, 177], + [458, 362, 258, 194], + [520, 412, 292, 220], + [586, 450, 322, 250], + [644, 504, 364, 280], + [718, 560, 394, 310], + [792, 624, 442, 338], + [858, 666, 482, 382], + [929, 711, 509, 403], + [1003, 779, 565, 439], + [1091, 857, 611, 461], + [1171, 911, 661, 511], + [1273, 997, 715, 535], + [1367, 1059, 751, 593], + [1465, 1125, 805, 625], + [1528, 1190, 868, 658], + [1628, 1264, 908, 698], + [1732, 1370, 982, 742], + [1840, 1452, 1030, 790], + [1952, 1538, 1112, 842], + [2068, 1628, 1168, 898], + [2188, 1722, 1228, 958], + [2303, 1809, 1283, 983], + [2431, 1911, 1351, 1051], + [2563, 1989, 1423, 1093], + [2699, 2099, 1499, 1139], + [2809, 2213, 1579, 1219], + [2953, 2331, 1663, 1273], + ]; + + var svgDrawer = (function() { + var Drawing = function(el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + Drawing.prototype.draw = function(oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + + this.clear(); + + function makeSVG(tag, attrs) { + var el = _el.ownerDocument.createElementNS( + "http://www.w3.org/2000/svg", + tag + ); + for (var k in attrs) { + if (attrs.hasOwnProperty(k)) { + el.setAttribute(k, attrs[k]); + } + } + return el; + } + + var svg = makeSVG("svg", { + viewBox: "0 0 " + String(nCount) + " " + String(nCount), + width: "100%", + height: "100%", + fill: _htOption.colorLight, + "shape-rendering": "crispEdges", + }); + svg.setAttributeNS( + "http://www.w3.org/2000/xmlns/", + "xmlns", + "http://www.w3.org/2000/svg" + ); + _el.appendChild(svg); + + svg.appendChild( + makeSVG("rect", { + fill: _htOption.colorLight, + width: "100%", + height: "100%", + }) + ); + + var path = []; + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + var width = 0; + while (col + width < nCount && oQRCode.isDark(row, col + width)) { + width++; + } + + if (width > 0) { + path.push("M" + col + " " + row + "v1h" + width + "v-1z"); + col += width; + } + } + } + var child = makeSVG("path", { + d: path.join(""), + fill: _htOption.colorDark, + }); + svg.appendChild(child); + }; + Drawing.prototype.clear = function() { + while (this._el.hasChildNodes()) { + this._el.removeChild(this._el.lastChild); + } + }; + return Drawing; + })(); + + /** + * Get the type by string length + * + * @private + * @param {String} sText + * @param {Number} nCorrectLevel + * @return {Number} type + */ + function _getTypeNumber(sText, nCorrectLevel) { + var nType = 1; + var length = _getUTF8Length(sText); + + for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { + var nLimit = 0; + + switch (nCorrectLevel) { + case QRErrorCorrectLevel.L: + nLimit = QRCodeLimitLength[i][0]; + break; + case QRErrorCorrectLevel.M: + nLimit = QRCodeLimitLength[i][1]; + break; + case QRErrorCorrectLevel.Q: + nLimit = QRCodeLimitLength[i][2]; + break; + case QRErrorCorrectLevel.H: + nLimit = QRCodeLimitLength[i][3]; + break; + } + + if (length <= nLimit) { + break; + } else { + nType++; + } + } + + if (nType > QRCodeLimitLength.length) { + throw new Error("Too long data"); + } + + return nType; + } + + function _getUTF8Length(sText) { + var replacedText = encodeURI(sText) + .toString() + .replace(/%[0-9a-fA-F]{2}/g, "a"); + return replacedText.length + (replacedText.length != sText ? 3 : 0); + } + + /** + * @class QRCode + * @constructor + * @example + * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); + * + * @example + * var oQRCode = new QRCode("test", { + * text : "http://naver.com", + * width : 128, + * height : 128 + * }); + * + * oQRCode.clear(); // Clear the QRCode. + * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. + * + * @param {HTMLElement} el target element + * @param {Object|String} vOption + * @param {String} vOption.text QRCode link data + * @param {Number} [vOption.width=256] + * @param {Number} [vOption.height=256] + * @param {String} [vOption.colorDark="#000000"] + * @param {String} [vOption.colorLight="#ffffff"] + * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] + */ + QRCode = function(el, vOption) { + this._htOption = { + width: 256, + height: 256, + typeNumber: 4, + colorDark: "#000000", + colorLight: "#ffffff", + correctLevel: QRErrorCorrectLevel.H, + }; + + if (typeof vOption === "string") { + vOption = { + text: vOption, + }; + } + + // Overwrites options + if (vOption) { + for (var i in vOption) { + this._htOption[i] = vOption[i]; + } + } + + this._el = el; + this._oQRCode = null; + this._oDrawing = new svgDrawer(this._el, this._htOption); + + if (this._htOption.text) { + this.makeCode(this._htOption.text); + } + }; + + /** + * Make the QRCode + * + * @param {String} sText link data + */ + QRCode.prototype.makeCode = function(sText) { + this._oQRCode = new QRCodeModel( + _getTypeNumber(sText, this._htOption.correctLevel), + this._htOption.correctLevel + ); + this._oQRCode.addData(sText); + this._oQRCode.make(); + this._oDrawing.draw(this._oQRCode); + }; + + /** + * Clear the QRCode + */ + QRCode.prototype.clear = function() { + this._oDrawing.clear(); + }; + + /** + * @name QRCode.CorrectLevel + */ + QRCode.CorrectLevel = QRErrorCorrectLevel; +})(); diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index 47b386bcd507..c2baf6c8bbbc 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -204,6 +204,7 @@ EXTRA_JS_MODULES += [ "ProcessType.jsm", "ProfileAge.jsm", "PromiseUtils.jsm", + "QRCode.jsm", "Region.jsm", "RemotePageAccessManager.jsm", "ResetProfile.jsm",
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 748130a9e63f8682fb661dae502d7422ae03153e Author: Richard Pospesel richard@torproject.org AuthorDate: Mon Sep 16 15:25:39 2019 -0700
Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
This patch adds a new about:preferences#connection page which allows modifying bridge, proxy, and firewall settings from within Tor Browser. All of the functionality present in tor-launcher's Network Configuration panel is present:
- Setting built-in bridges - Requesting bridges from BridgeDB via moat - Using user-provided bridges - Configuring SOCKS4, SOCKS5, and HTTP/HTTPS proxies - Setting firewall ports - Viewing and Copying Tor's logs - The Networking Settings in General preferences has been removed
Bug 40774: Update about:preferences page to match new UI designs --- browser/components/moz.build | 1 + browser/components/preferences/main.inc.xhtml | 54 - browser/components/preferences/main.js | 14 - browser/components/preferences/preferences.js | 9 + browser/components/preferences/preferences.xhtml | 5 + .../torpreferences/content/bridgeQrDialog.jsm | 51 + .../torpreferences/content/bridgeQrDialog.xhtml | 25 + .../content/bridgemoji-annotations.json | 9032 ++++++++++++++++++++ .../torpreferences/content/bridgemoji/1f300.svg | 1 + .../torpreferences/content/bridgemoji/1f308.svg | 1 + .../torpreferences/content/bridgemoji/1f30a.svg | 1 + .../torpreferences/content/bridgemoji/1f30b.svg | 1 + .../torpreferences/content/bridgemoji/1f319.svg | 1 + .../torpreferences/content/bridgemoji/1f31f.svg | 1 + .../torpreferences/content/bridgemoji/1f321.svg | 1 + .../torpreferences/content/bridgemoji/1f32d.svg | 1 + .../torpreferences/content/bridgemoji/1f32e.svg | 1 + .../torpreferences/content/bridgemoji/1f332.svg | 1 + .../torpreferences/content/bridgemoji/1f333.svg | 1 + .../torpreferences/content/bridgemoji/1f334.svg | 1 + .../torpreferences/content/bridgemoji/1f335.svg | 1 + .../torpreferences/content/bridgemoji/1f336.svg | 1 + .../torpreferences/content/bridgemoji/1f337.svg | 1 + .../torpreferences/content/bridgemoji/1f339.svg | 1 + .../torpreferences/content/bridgemoji/1f33a.svg | 1 + .../torpreferences/content/bridgemoji/1f33b.svg | 1 + .../torpreferences/content/bridgemoji/1f33d.svg | 1 + .../torpreferences/content/bridgemoji/1f33f.svg | 1 + .../torpreferences/content/bridgemoji/1f341.svg | 1 + .../torpreferences/content/bridgemoji/1f344.svg | 1 + .../torpreferences/content/bridgemoji/1f345.svg | 1 + .../torpreferences/content/bridgemoji/1f346.svg | 1 + .../torpreferences/content/bridgemoji/1f347.svg | 1 + .../torpreferences/content/bridgemoji/1f348.svg | 1 + .../torpreferences/content/bridgemoji/1f349.svg | 1 + .../torpreferences/content/bridgemoji/1f34a.svg | 1 + .../torpreferences/content/bridgemoji/1f34b.svg | 1 + .../torpreferences/content/bridgemoji/1f34c.svg | 1 + .../torpreferences/content/bridgemoji/1f34d.svg | 1 + .../torpreferences/content/bridgemoji/1f34f.svg | 1 + .../torpreferences/content/bridgemoji/1f350.svg | 1 + .../torpreferences/content/bridgemoji/1f351.svg | 1 + .../torpreferences/content/bridgemoji/1f352.svg | 1 + .../torpreferences/content/bridgemoji/1f353.svg | 1 + .../torpreferences/content/bridgemoji/1f354.svg | 1 + .../torpreferences/content/bridgemoji/1f355.svg | 1 + .../torpreferences/content/bridgemoji/1f368.svg | 1 + .../torpreferences/content/bridgemoji/1f369.svg | 1 + .../torpreferences/content/bridgemoji/1f36a.svg | 1 + .../torpreferences/content/bridgemoji/1f36b.svg | 1 + .../torpreferences/content/bridgemoji/1f36c.svg | 1 + .../torpreferences/content/bridgemoji/1f36d.svg | 1 + .../torpreferences/content/bridgemoji/1f37f.svg | 1 + .../torpreferences/content/bridgemoji/1f380.svg | 1 + .../torpreferences/content/bridgemoji/1f381.svg | 1 + .../torpreferences/content/bridgemoji/1f382.svg | 1 + .../torpreferences/content/bridgemoji/1f383.svg | 1 + .../torpreferences/content/bridgemoji/1f388.svg | 1 + .../torpreferences/content/bridgemoji/1f389.svg | 1 + .../torpreferences/content/bridgemoji/1f38f.svg | 1 + .../torpreferences/content/bridgemoji/1f392.svg | 1 + .../torpreferences/content/bridgemoji/1f399.svg | 1 + .../torpreferences/content/bridgemoji/1f39f.svg | 1 + .../torpreferences/content/bridgemoji/1f3a0.svg | 1 + .../torpreferences/content/bridgemoji/1f3a1.svg | 1 + .../torpreferences/content/bridgemoji/1f3a2.svg | 1 + .../torpreferences/content/bridgemoji/1f3a8.svg | 1 + .../torpreferences/content/bridgemoji/1f3ac.svg | 1 + .../torpreferences/content/bridgemoji/1f3af.svg | 1 + .../torpreferences/content/bridgemoji/1f3b2.svg | 1 + .../torpreferences/content/bridgemoji/1f3b6.svg | 1 + .../torpreferences/content/bridgemoji/1f3b7.svg | 1 + .../torpreferences/content/bridgemoji/1f3b8.svg | 1 + .../torpreferences/content/bridgemoji/1f3ba.svg | 1 + .../torpreferences/content/bridgemoji/1f3bb.svg | 1 + .../torpreferences/content/bridgemoji/1f3be.svg | 1 + .../torpreferences/content/bridgemoji/1f3c0.svg | 1 + .../torpreferences/content/bridgemoji/1f3c6.svg | 1 + .../torpreferences/content/bridgemoji/1f3c8.svg | 1 + .../torpreferences/content/bridgemoji/1f3d3.svg | 1 + .../torpreferences/content/bridgemoji/1f3d4.svg | 1 + .../torpreferences/content/bridgemoji/1f3d5.svg | 1 + .../torpreferences/content/bridgemoji/1f3dd.svg | 1 + .../torpreferences/content/bridgemoji/1f3e1.svg | 1 + .../torpreferences/content/bridgemoji/1f3ee.svg | 1 + .../torpreferences/content/bridgemoji/1f3f7.svg | 1 + .../torpreferences/content/bridgemoji/1f3f8.svg | 1 + .../torpreferences/content/bridgemoji/1f3f9.svg | 1 + .../torpreferences/content/bridgemoji/1f40a.svg | 1 + .../torpreferences/content/bridgemoji/1f40c.svg | 1 + .../torpreferences/content/bridgemoji/1f40d.svg | 1 + .../torpreferences/content/bridgemoji/1f417.svg | 1 + .../torpreferences/content/bridgemoji/1f418.svg | 1 + .../torpreferences/content/bridgemoji/1f419.svg | 1 + .../torpreferences/content/bridgemoji/1f41a.svg | 1 + .../torpreferences/content/bridgemoji/1f41b.svg | 1 + .../torpreferences/content/bridgemoji/1f41d.svg | 1 + .../torpreferences/content/bridgemoji/1f41e.svg | 1 + .../torpreferences/content/bridgemoji/1f41f.svg | 1 + .../torpreferences/content/bridgemoji/1f420.svg | 1 + .../torpreferences/content/bridgemoji/1f422.svg | 1 + .../torpreferences/content/bridgemoji/1f425.svg | 1 + .../torpreferences/content/bridgemoji/1f426.svg | 1 + .../torpreferences/content/bridgemoji/1f428.svg | 1 + .../torpreferences/content/bridgemoji/1f42a.svg | 1 + .../torpreferences/content/bridgemoji/1f42c.svg | 1 + .../torpreferences/content/bridgemoji/1f42d.svg | 1 + .../torpreferences/content/bridgemoji/1f42e.svg | 1 + .../torpreferences/content/bridgemoji/1f42f.svg | 1 + .../torpreferences/content/bridgemoji/1f430.svg | 1 + .../torpreferences/content/bridgemoji/1f431.svg | 1 + .../torpreferences/content/bridgemoji/1f432.svg | 1 + .../torpreferences/content/bridgemoji/1f433.svg | 1 + .../torpreferences/content/bridgemoji/1f434.svg | 1 + .../torpreferences/content/bridgemoji/1f435.svg | 1 + .../torpreferences/content/bridgemoji/1f436.svg | 1 + .../torpreferences/content/bridgemoji/1f437.svg | 1 + .../torpreferences/content/bridgemoji/1f43a.svg | 1 + .../torpreferences/content/bridgemoji/1f43b.svg | 1 + .../torpreferences/content/bridgemoji/1f43f.svg | 1 + .../torpreferences/content/bridgemoji/1f441.svg | 1 + .../torpreferences/content/bridgemoji/1f451.svg | 1 + .../torpreferences/content/bridgemoji/1f455.svg | 1 + .../torpreferences/content/bridgemoji/1f457.svg | 1 + .../torpreferences/content/bridgemoji/1f45f.svg | 1 + .../torpreferences/content/bridgemoji/1f47d.svg | 1 + .../torpreferences/content/bridgemoji/1f484.svg | 1 + .../torpreferences/content/bridgemoji/1f488.svg | 1 + .../torpreferences/content/bridgemoji/1f48d.svg | 1 + .../torpreferences/content/bridgemoji/1f48e.svg | 1 + .../torpreferences/content/bridgemoji/1f490.svg | 1 + .../torpreferences/content/bridgemoji/1f4a1.svg | 1 + .../torpreferences/content/bridgemoji/1f4a7.svg | 1 + .../torpreferences/content/bridgemoji/1f4b3.svg | 1 + .../torpreferences/content/bridgemoji/1f4bf.svg | 1 + .../torpreferences/content/bridgemoji/1f4cc.svg | 1 + .../torpreferences/content/bridgemoji/1f4ce.svg | 1 + .../torpreferences/content/bridgemoji/1f4d5.svg | 1 + .../torpreferences/content/bridgemoji/1f4e1.svg | 1 + .../torpreferences/content/bridgemoji/1f4e2.svg | 1 + .../torpreferences/content/bridgemoji/1f4fb.svg | 1 + .../torpreferences/content/bridgemoji/1f50b.svg | 1 + .../torpreferences/content/bridgemoji/1f511.svg | 1 + .../torpreferences/content/bridgemoji/1f525.svg | 1 + .../torpreferences/content/bridgemoji/1f526.svg | 1 + .../torpreferences/content/bridgemoji/1f52c.svg | 1 + .../torpreferences/content/bridgemoji/1f52d.svg | 1 + .../torpreferences/content/bridgemoji/1f52e.svg | 1 + .../torpreferences/content/bridgemoji/1f54a.svg | 1 + .../torpreferences/content/bridgemoji/1f58c.svg | 1 + .../torpreferences/content/bridgemoji/1f58d.svg | 1 + .../torpreferences/content/bridgemoji/1f5ff.svg | 1 + .../torpreferences/content/bridgemoji/1f680.svg | 1 + .../torpreferences/content/bridgemoji/1f681.svg | 1 + .../torpreferences/content/bridgemoji/1f686.svg | 1 + .../torpreferences/content/bridgemoji/1f68b.svg | 1 + .../torpreferences/content/bridgemoji/1f68d.svg | 1 + .../torpreferences/content/bridgemoji/1f695.svg | 1 + .../torpreferences/content/bridgemoji/1f697.svg | 1 + .../torpreferences/content/bridgemoji/1f69a.svg | 1 + .../torpreferences/content/bridgemoji/1f69c.svg | 1 + .../torpreferences/content/bridgemoji/1f6a0.svg | 1 + .../torpreferences/content/bridgemoji/1f6a2.svg | 1 + .../torpreferences/content/bridgemoji/1f6a4.svg | 1 + .../torpreferences/content/bridgemoji/1f6f0.svg | 1 + .../torpreferences/content/bridgemoji/1f6f4.svg | 1 + .../torpreferences/content/bridgemoji/1f6f5.svg | 1 + .../torpreferences/content/bridgemoji/1f6f6.svg | 1 + .../torpreferences/content/bridgemoji/1f6f8.svg | 1 + .../torpreferences/content/bridgemoji/1f6f9.svg | 1 + .../torpreferences/content/bridgemoji/1f6fa.svg | 1 + .../torpreferences/content/bridgemoji/1f6fc.svg | 1 + .../torpreferences/content/bridgemoji/1f916.svg | 1 + .../torpreferences/content/bridgemoji/1f93f.svg | 1 + .../torpreferences/content/bridgemoji/1f941.svg | 1 + .../torpreferences/content/bridgemoji/1f94c.svg | 1 + .../torpreferences/content/bridgemoji/1f94f.svg | 1 + .../torpreferences/content/bridgemoji/1f950.svg | 1 + .../torpreferences/content/bridgemoji/1f951.svg | 1 + .../torpreferences/content/bridgemoji/1f955.svg | 1 + .../torpreferences/content/bridgemoji/1f956.svg | 1 + .../torpreferences/content/bridgemoji/1f95c.svg | 1 + .../torpreferences/content/bridgemoji/1f95d.svg | 1 + .../torpreferences/content/bridgemoji/1f95e.svg | 1 + .../torpreferences/content/bridgemoji/1f965.svg | 1 + .../torpreferences/content/bridgemoji/1f966.svg | 1 + .../torpreferences/content/bridgemoji/1f968.svg | 1 + .../torpreferences/content/bridgemoji/1f96c.svg | 1 + .../torpreferences/content/bridgemoji/1f96d.svg | 1 + .../torpreferences/content/bridgemoji/1f96f.svg | 1 + .../torpreferences/content/bridgemoji/1f980.svg | 1 + .../torpreferences/content/bridgemoji/1f981.svg | 1 + .../torpreferences/content/bridgemoji/1f984.svg | 1 + .../torpreferences/content/bridgemoji/1f986.svg | 1 + .../torpreferences/content/bridgemoji/1f987.svg | 1 + .../torpreferences/content/bridgemoji/1f988.svg | 1 + .../torpreferences/content/bridgemoji/1f989.svg | 1 + .../torpreferences/content/bridgemoji/1f98a.svg | 1 + .../torpreferences/content/bridgemoji/1f98b.svg | 1 + .../torpreferences/content/bridgemoji/1f98c.svg | 1 + .../torpreferences/content/bridgemoji/1f98e.svg | 1 + .../torpreferences/content/bridgemoji/1f98f.svg | 1 + .../torpreferences/content/bridgemoji/1f992.svg | 1 + .../torpreferences/content/bridgemoji/1f993.svg | 1 + .../torpreferences/content/bridgemoji/1f994.svg | 1 + .../torpreferences/content/bridgemoji/1f995.svg | 1 + .../torpreferences/content/bridgemoji/1f998.svg | 1 + .../torpreferences/content/bridgemoji/1f999.svg | 1 + .../torpreferences/content/bridgemoji/1f99a.svg | 1 + .../torpreferences/content/bridgemoji/1f99c.svg | 1 + .../torpreferences/content/bridgemoji/1f99d.svg | 1 + .../torpreferences/content/bridgemoji/1f99e.svg | 1 + .../torpreferences/content/bridgemoji/1f9a3.svg | 1 + .../torpreferences/content/bridgemoji/1f9a4.svg | 1 + .../torpreferences/content/bridgemoji/1f9a5.svg | 1 + .../torpreferences/content/bridgemoji/1f9a6.svg | 1 + .../torpreferences/content/bridgemoji/1f9a7.svg | 1 + .../torpreferences/content/bridgemoji/1f9a9.svg | 1 + .../torpreferences/content/bridgemoji/1f9ad.svg | 1 + .../torpreferences/content/bridgemoji/1f9c1.svg | 1 + .../torpreferences/content/bridgemoji/1f9c3.svg | 1 + .../torpreferences/content/bridgemoji/1f9c5.svg | 1 + .../torpreferences/content/bridgemoji/1f9c7.svg | 1 + .../torpreferences/content/bridgemoji/1f9c9.svg | 1 + .../torpreferences/content/bridgemoji/1f9d9.svg | 1 + .../torpreferences/content/bridgemoji/1f9da.svg | 1 + .../torpreferences/content/bridgemoji/1f9dc.svg | 1 + .../torpreferences/content/bridgemoji/1f9e0.svg | 1 + .../torpreferences/content/bridgemoji/1f9e2.svg | 1 + .../torpreferences/content/bridgemoji/1f9e6.svg | 1 + .../torpreferences/content/bridgemoji/1f9e9.svg | 1 + .../torpreferences/content/bridgemoji/1f9ea.svg | 1 + .../torpreferences/content/bridgemoji/1f9ec.svg | 1 + .../torpreferences/content/bridgemoji/1f9ed.svg | 1 + .../torpreferences/content/bridgemoji/1f9ee.svg | 1 + .../torpreferences/content/bridgemoji/1f9f2.svg | 1 + .../torpreferences/content/bridgemoji/1f9f5.svg | 1 + .../torpreferences/content/bridgemoji/1f9f9.svg | 1 + .../torpreferences/content/bridgemoji/1fa73.svg | 1 + .../torpreferences/content/bridgemoji/1fa80.svg | 1 + .../torpreferences/content/bridgemoji/1fa81.svg | 1 + .../torpreferences/content/bridgemoji/1fa83.svg | 1 + .../torpreferences/content/bridgemoji/1fa90.svg | 1 + .../torpreferences/content/bridgemoji/1fa91.svg | 1 + .../torpreferences/content/bridgemoji/1fa95.svg | 1 + .../torpreferences/content/bridgemoji/1fa97.svg | 1 + .../torpreferences/content/bridgemoji/1fab6.svg | 1 + .../torpreferences/content/bridgemoji/1fad0.svg | 1 + .../torpreferences/content/bridgemoji/1fad2.svg | 1 + .../torpreferences/content/bridgemoji/1fad6.svg | 1 + .../torpreferences/content/bridgemoji/23f0.svg | 1 + .../torpreferences/content/bridgemoji/2600.svg | 1 + .../torpreferences/content/bridgemoji/2602.svg | 1 + .../torpreferences/content/bridgemoji/2604.svg | 1 + .../torpreferences/content/bridgemoji/260e.svg | 1 + .../torpreferences/content/bridgemoji/2693.svg | 1 + .../torpreferences/content/bridgemoji/2696.svg | 1 + .../torpreferences/content/bridgemoji/26bd.svg | 1 + .../torpreferences/content/bridgemoji/26f2.svg | 1 + .../torpreferences/content/bridgemoji/26f5.svg | 1 + .../torpreferences/content/bridgemoji/2708.svg | 1 + .../torpreferences/content/bridgemoji/270f.svg | 1 + .../torpreferences/content/bridgemoji/2728.svg | 1 + .../torpreferences/content/bridgemoji/2744.svg | 1 + .../torpreferences/content/builtinBridgeDialog.jsm | 113 + .../content/builtinBridgeDialog.xhtml | 31 + .../components/torpreferences/content/check.svg | 3 + .../content/connectionCategory.inc.xhtml | 9 + .../torpreferences/content/connectionPane.js | 1157 +++ .../torpreferences/content/connectionPane.xhtml | 192 + .../content/connectionSettingsDialog.jsm | 397 + .../content/connectionSettingsDialog.xhtml | 60 + .../components/torpreferences/content/network.svg | 6 + .../torpreferences/content/provideBridgeDialog.jsm | 67 + .../content/provideBridgeDialog.xhtml | 21 + .../torpreferences/content/requestBridgeDialog.jsm | 206 + .../content/requestBridgeDialog.xhtml | 35 + .../torpreferences/content/torLogDialog.jsm | 84 + .../torpreferences/content/torLogDialog.xhtml | 23 + .../torpreferences/content/torPreferences.css | 704 ++ .../torpreferences/content/torPreferencesIcon.svg | 8 + browser/components/torpreferences/jar.mn | 22 + browser/components/torpreferences/moz.build | 1 + tools/torbrowser/update_bridgemoiji.py | 115 + 284 files changed, 12633 insertions(+), 68 deletions(-)
diff --git a/browser/components/moz.build b/browser/components/moz.build index 12a2187c638b..0fa76a0e7038 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -58,6 +58,7 @@ DIRS += [ "translation", "uitour", "urlbar", + "torpreferences", ]
DIRS += ["build"] diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml index d655ac37aed1..7c750203fb54 100644 --- a/browser/components/preferences/main.inc.xhtml +++ b/browser/components/preferences/main.inc.xhtml @@ -753,58 +753,4 @@ <label id="cfrFeaturesLearnMore" class="learnMore" data-l10n-id="browsing-cfr-recommendations-learn-more" is="text-link"/> </hbox> </groupbox> - -<hbox id="networkProxyCategory" - class="subcategory" - hidden="true" - data-category="paneGeneral"> - <html:h1 data-l10n-id="network-settings-title"/> -</hbox> - -<!-- Network Settings--> -<groupbox id="connectionGroup" data-category="paneGeneral" hidden="true"> - <label class="search-header" hidden="true"><html:h2 data-l10n-id="network-settings-title"/></label> - - <hbox align="center"> - <hbox align="center" flex="1"> - <description id="connectionSettingsDescription" control="connectionSettings"/> - <spacer width="5"/> - <label id="connectionSettingsLearnMore" class="learnMore" is="text-link" - data-l10n-id="network-proxy-connection-learn-more"> - </label> - <separator orient="vertical"/> - </hbox> - - <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. --> - <hbox> - <button id="connectionSettings" - is="highlightable-button" - class="accessory-button" - data-l10n-id="network-proxy-connection-settings" - searchkeywords="doh trr" - search-l10n-ids=" - connection-window.title, - connection-proxy-option-no.label, - connection-proxy-option-auto.label, - connection-proxy-option-system.label, - connection-proxy-option-manual.label, - connection-proxy-http, - connection-proxy-https, - connection-proxy-http-port, - connection-proxy-socks, - connection-proxy-socks4, - connection-proxy-socks5, - connection-proxy-noproxy, - connection-proxy-noproxy-desc, - connection-proxy-https-sharing.label, - connection-proxy-autotype.label, - connection-proxy-reload.label, - connection-proxy-autologin.label, - connection-proxy-socks-remote-dns.label, - connection-dns-over-https.label, - connection-dns-over-https-url-custom.label, - " /> - </hbox> - </hbox> -</groupbox> </html:template> diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js index 21cbb814b485..5bc5b720f3f2 100644 --- a/browser/components/preferences/main.js +++ b/browser/components/preferences/main.js @@ -329,15 +329,6 @@ var gMainPane = { }); this.updatePerformanceSettingsBox({ duringChangeEvent: false }); this.displayUseSystemLocale(); - let connectionSettingsLink = document.getElementById( - "connectionSettingsLearnMore" - ); - let connectionSettingsUrl = - Services.urlFormatter.formatURLPref("app.support.baseURL") + - "prefs-connection-settings"; - connectionSettingsLink.setAttribute("href", connectionSettingsUrl); - this.updateProxySettingsUI(); - initializeProxyUI(gMainPane);
if (Services.prefs.getBoolPref("intl.multilingual.enabled")) { gMainPane.initPrimaryBrowserLanguageUI(); @@ -490,11 +481,6 @@ var gMainPane = { "change", gMainPane.updateHardwareAcceleration.bind(gMainPane) ); - setEventListener( - "connectionSettings", - "command", - gMainPane.showConnections - ); setEventListener( "browserContainersCheckbox", "command", diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js index f3ae545d65cd..7aeb97f6a895 100644 --- a/browser/components/preferences/preferences.js +++ b/browser/components/preferences/preferences.js @@ -14,6 +14,7 @@ /* import-globals-from findInPage.js */ /* import-globals-from /browser/base/content/utilityOverlay.js */ /* import-globals-from /toolkit/content/preferencesBindings.js */ +/* import-globals-from ../torpreferences/content/connectionPane.js */
"use strict";
@@ -219,6 +220,14 @@ function init_all() { register_module("paneSync", gSyncPane); } register_module("paneSearchResults", gSearchResultsPane); + if (gConnectionPane.enabled) { + document.getElementById("category-connection").hidden = false; + register_module("paneConnection", gConnectionPane); + } else { + // Remove the pane from the DOM so it doesn't get incorrectly included in search results. + document.getElementById("template-paneConnection").remove(); + } + gSearchResultsPane.init(); gMainPane.preInit();
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml index f1a8115843a3..cb8716f48a50 100644 --- a/browser/components/preferences/preferences.xhtml +++ b/browser/components/preferences/preferences.xhtml @@ -14,6 +14,7 @@ <?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?> <?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?> <?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
<!DOCTYPE html [ <!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd"> @@ -166,6 +167,9 @@ <image class="category-icon"/> <label class="category-name" flex="1" data-l10n-id="more-from-moz-title"></label> </richlistitem> + +#include ../torpreferences/content/connectionCategory.inc.xhtml + </richlistbox>
<spacer flex="1"/> @@ -215,6 +219,7 @@ #include sync.inc.xhtml #include experimental.inc.xhtml #include moreFromMozilla.inc.xhtml +#include ../torpreferences/content/connectionPane.xhtml </vbox> </vbox> </vbox> diff --git a/browser/components/torpreferences/content/bridgeQrDialog.jsm b/browser/components/torpreferences/content/bridgeQrDialog.jsm new file mode 100644 index 000000000000..e63347742ea5 --- /dev/null +++ b/browser/components/torpreferences/content/bridgeQrDialog.jsm @@ -0,0 +1,51 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["BridgeQrDialog"]; + +const { QRCode } = ChromeUtils.import("resource://gre/modules/QRCode.jsm"); + +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +class BridgeQrDialog { + constructor() { + this._bridgeString = ""; + } + + static get selectors() { + return { + target: "#bridgeQr-target", + }; + } + + _populateXUL(window, dialog) { + dialog.parentElement.setAttribute("title", TorStrings.settings.scanQrTitle); + const target = dialog.querySelector(BridgeQrDialog.selectors.target); + const style = window.getComputedStyle(target); + const width = style.width.substr(0, style.width.length - 2); + const height = style.height.substr(0, style.height.length - 2); + new QRCode(target, { + text: this._bridgeString, + width, + height, + colorDark: style.color, + colorLight: style.backgroundColor, + document: window.document, + }); + } + + init(window, dialog) { + // Defer to later until Firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(window, dialog); + }, 0); + } + + openDialog(gSubDialog, bridgeString) { + this._bridgeString = bridgeString; + gSubDialog.open( + "chrome://browser/content/torpreferences/bridgeQrDialog.xhtml", + { features: "resizable=yes" }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/bridgeQrDialog.xhtml b/browser/components/torpreferences/content/bridgeQrDialog.xhtml new file mode 100644 index 000000000000..5411c963ba49 --- /dev/null +++ b/browser/components/torpreferences/content/bridgeQrDialog.xhtml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="bridgeQr-dialog" buttons="accept"> + html:div + <html:div id="bridgeQr"> + <html:div id="bridgeQr-target"/> + <html:div id="bridgeQr-onionBox"/> + <html:div id="bridgeQr-onion"/> + </html:div> + </html:div> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let dialogObject = window.arguments[0]; + let dialogElement = document.getElementById("bridgeQr-dialog"); + dialogObject.init(window, dialogElement); + ]]></script> +</dialog> +</window> diff --git a/browser/components/torpreferences/content/bridgemoji-annotations.json b/browser/components/torpreferences/content/bridgemoji-annotations.json new file mode 100644 index 000000000000..faccd10d8f2c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji-annotations.json @@ -0,0 +1,9032 @@ +{ + "ar": { + "👽️": "كائن فضائي", + "🤖": "وجه روبوت", + "🧠": "دماغ", + "👁️": "عين", + "🧙": "سحرة", + "🧚": "جنيّة خيالية", + "🧜": "مخلوق بحري بجسد بشري وذيل سمكة", + "🐵": "وجه قرد", + "🦧": "إنسان الغاب", + "🐶": "وجه كلب", + "🐺": "وجه ذئب", + "🦊": "وجه ثعلب", + "🦝": "راكون", + "🐱": "وجه قطة", + "🦁": "وجه أسد", + "🐯": "وجه نمر", + "🐴": "وجه حصان", + "🦄": "وجه أحادي قرن", + "🦓": "حمار وحشي", + "🦌": "غزال", + "🐮": "وجه بقرة", + "🐷": "وجه خنزير", + "🐗": "خنزير بري", + "🐪": "جمل وحيد السنام", + "🦙": "لاما", + "🦒": "زرافة", + "🐘": "فيل", + "🦣": "ماموث", + "🦏": "وحيد القرن", + "🐭": "وجه فأر", + "🐰": "وجه أرنب", + "🐿️": "سنجاب", + "🦔": "قنفد", + "🦇": "خفاش", + "🐻": "وجه دب", + "🐨": "دب كوالا", + "🦥": "كسلان", + "🦦": "قندس", + "🦘": "كنغر", + "🐥": "كتكوت صغير بوجه للأمام", + "🐦️": "طائر", + "🕊️": "حمامة", + "🦆": "بطة", + "🦉": "بومة", + "🦤": "طائر الدودو", + "🪶": "ريشة", + "🦩": "فلامينغو", + "🦚": "طاووس", + "🦜": "ببغاء", + "🐊": "تمساح", + "🐢": "سلحفاة", + "🦎": "سحلية", + "🐍": "ثعبان", + "🐲": "وجه تنين", + "🦕": "ديناصور صوروبودا", + "🐳": "حوت بنافورة", + "🐬": "دولفين", + "🦭": "فقمة", + "🐟️": "سمكة", + "🐠": "سمكة استوائية", + "🦈": "سمكة قرش", + "🐙": "أخطبوط", + "🐚": "صدفة حلزونية", + "🐌": "حلزون", + "🦋": "فراشة", + "🐛": "بق", + "🐝": "نحلة", + "🐞": "دعسوقة", + "💐": "باقة زهور", + "🌹": "وردة", + "🌺": "كركديه", + "🌻": "دوار الشمس", + "🌷": "زهرة التوليب", + "🌲": "شجرة دائمة الخضرة", + "🌳": "شجرة زائلة الخضرة", + "🌴": "نخلة", + "🌵": "صبار", + "🌿": "عشب", + "🍁": "ورقة شجر القيقب", + "🍇": "عنب", + "🍈": "شمام", + "🍉": "بطيخ", + "🍊": "يوسفي", + "🍋": "ليمون", + "🍌": "موز", + "🍍": "أناناس", + "🥭": "مانجو", + "🍏": "تفاح أخضر", + "🍐": "كمثرى", + "🍑": "خوخ", + "🍒": "كرز", + "🍓": "فراولة", + "🫐": "توت برّي", + "🥝": "كيوي", + "🍅": "طماطم", + "🫒": "زيتون", + "🥥": "جوز الهند", + "🥑": "أفوكادو", + "🍆": "باذنجان", + "🥕": "جزر", + "🌽": "ذرة", + "🌶️": "فلفل حار", + "🥬": "خضار ورقي", + "🥦": "بروكولي", + "🧅": "بصل", + "🍄": "عيش الغراب", + "🥜": "فول سوداني", + "🥐": "كرواسون", + "🥖": "الخبز الفرنسي", + "🥨": "بريتزل", + "🥯": "خبز البيغل", + "🥞": "فطائر", + "🧇": "وافل", + "🍔": "همبرغر", + "🍕": "بيتزا", + "🌭": "هوت دوغ", + "🌮": "تاكو", + "🍿": "فشار", + "🦀": "سرطان", + "🦞": "كركند", + "🍨": "آيس كريم", + "🍩": "كعكة محلاة", + "🍪": "كعكة", + "🎂": "كعكة عيد ميلاد", + "🧁": "كعكة صغيرة", + "🍫": "لوح شوكولاتة", + "🍬": "حلوى", + "🍭": "مصاصة", + "🫖": "إبريق شاي", + "🧃": "علبة عصير", + "🧉": "متة", + "🧭": "بوصلة", + "🏔️": "جبل بقمة ثلجية", + "🌋": "بركان", + "🏕️": "تخييم", + "🏝️": "جزيرة صحراوية", + "🏡": "منزل بحديقة", + "⛲️": "نافورة", + "🎠": "حصان الدوامة", + "🎡": "عجلة دوارة", + "🎢": "قطار ملاهي", + "💈": "محل حلاقة", + "🚆": "قطار", + "🚋": "سيارة ترام", + "🚍️": "حافلة مقتربة", + "🚕": "تاكسي", + "🚗": "سيارة", + "🚚": "شاحنة توصيل طلبات", + "🚜": "جرار", + "🛵": "سكوتر بمحرك", + "🛺": "توكتوك", + "🛴": "سكوتر بدون محرك", + "🛹": "لوح التزلج", + "🛼": "حذاء مع عجلات", + "⚓️": "مرساة", + "⛵️": "مركب شراعي", + "🛶": "زورق", + "🚤": "قارب سريع", + "🚢": "سفينة", + "✈️": "طائرة", + "🚁": "هليكوبتر", + "🚠": "قطار جبلي", + "🛰️": "قمر صناعي", + "🚀": "صاروخ", + "🛸": "صحن طائر", + "⏰": "ساعة منبه", + "🌙": "هلال", + "🌡️": "ترمومتر", + "☀️": "شمس", + "🪐": "كوكب داخل حلقة", + "🌟": "نجم ساطع", + "🌀": "عاصفة", + "🌈": "ألوان الطيف", + "☂️": "شمسية", + "❄️": "كتلة ثلج", + "☄️": "مذنّب", + "🔥": "حريق", + "💧": "قطرة", + "🌊": "موجة", + "🎃": "هالوين", + "✨": "ومضات", + "🎈": "بالون", + "🎉": "فرقعة حفلة", + "🎏": "قصاصات ملونة", + "🎀": "شريط", + "🎁": "هدية ملفوفة", + "🎟️": "تذكرتا دخول", + "🏆️": "كأس", + "⚽️": "كرة قدم", + "🏀": "كرة سلة", + "🏈": "كرة قدم أمريكية", + "🎾": "تنس", + "🥏": "قرص طائر", + "🏓": "تنس الطاولة", + "🏸": "تنس الريشة", + "🤿": "قناع غطس", + "🥌": "حجرة لعبة الكرلنغ", + "🎯": "نشان", + "🪀": "يويو", + "🪁": "طائرة ورقية", + "🔮": "كرة كريستال", + "🎲": "زهر", + "🧩": "أحجية الصور المقطوعة", + "🎨": "لوحة ألوان الرسام", + "🧵": "بكرة خيط", + "👕": "تي شيرت", + "🧦": "جورب", + "👗": "فستان", + "🩳": "شورت", + "🎒": "حقيبة مدرسة", + "👟": "حذاء رياضي", + "👑": "تاج", + "🧢": "قبعة رياضية", + "💄": "أحمر شفاه", + "💍": "خاتم", + "💎": "جوهرة", + "📢": "مكبر صوت", + "🎶": "نوتات موسيقية", + "🎙️": "ميكروفون استوديو", + "📻️": "راديو", + "🎷": "ساكسفون", + "🪗": "أكورديون", + "🎸": "غيتار", + "🎺": "آلة نفخ", + "🎻": "كمان", + "🪕": "آلة بانجو", + "🥁": "طبلة", + "☎️": "هاتف أرضي", + "🔋": "بطارية", + "💿️": "سي دي", + "🧮": "معداد", + "🎬️": "كلاكيت", + "💡": "مصباح مضاء", + "🔦": "ضوء فلاش", + "🏮": "فانوس بورق أحمر", + "📕": "كتاب مغلق", + "🏷️": "ملصق", + "💳️": "بطاقة ائتمان", + "✏️": "قلم رصاص", + "🖌️": "فرشاة ألوان", + "🖍️": "قلم شمع ملون", + "📌": "دبوس ضغط", + "📎": "مشبك ورق", + "🔑": "مفتاح", + "🪃": "خذوف مرتد", + "🏹": "قوس وسهم", + "⚖️": "ميزان", + "🧲": "مغناطيس", + "🧪": "أنبوب اختبار", + "🧬": "الحامض النووي", + "🔬": "ميكروسكوب", + "🔭": "تليسكوب", + "📡": "طبق قمر صناعي", + "🪑": "كرسي", + "🧹": "مكنسة", + "🗿": "تمثال" + }, + "ca": { + "👽️": "alienígena", + "🤖": "robot", + "🧠": "cervell", + "👁️": "ull", + "🧙": "mag", + "🧚": "fada", + "🧜": "persona sirena", + "🐵": "cara de mona", + "🦧": "orangutan", + "🐶": "cara de gos", + "🐺": "llop", + "🦊": "guineu", + "🦝": "os rentador", + "🐱": "cara de gat", + "🦁": "cara de lleó", + "🐯": "cara de tigre", + "🐴": "cara de cavall", + "🦄": "unicorn", + "🦓": "zebra", + "🦌": "cérvol", + "🐮": "cara de vaca", + "🐷": "cara de porc", + "🐗": "senglar", + "🐪": "dromedari", + "🦙": "llama", + "🦒": "girafa", + "🐘": "elefant", + "🦣": "mamut", + "🦏": "rinoceront", + "🐭": "cara de ratolí", + "🐰": "cara de conill", + "🐿️": "esquirol", + "🦔": "eriçó", + "🦇": "ratapinyada", + "🐻": "cara d’os", + "🐨": "coala", + "🦥": "peresós", + "🦦": "llúdria", + "🦘": "cangur", + "🐥": "pollet de cara", + "🐦️": "ocell", + "🕊️": "colom", + "🦆": "ànec", + "🦉": "mussol", + "🦤": "dodo", + "🪶": "ploma", + "🦩": "flamenc", + "🦚": "paó", + "🦜": "lloro", + "🐊": "cocodril", + "🐢": "tortuga", + "🦎": "llangardaix", + "🐍": "serp", + "🐲": "cara de drac", + "🦕": "sauròpode", + "🐳": "balena que treu aigua", + "🐬": "dofí", + "🦭": "foca", + "🐟️": "peix", + "🐠": "peix tropical", + "🦈": "tauró", + "🐙": "pop", + "🐚": "cargol de mar", + "🐌": "cargol", + "🦋": "papallona", + "🐛": "eruga", + "🐝": "abella", + "🐞": "marieta", + "💐": "ram de flors", + "🌹": "rosa", + "🌺": "hibisc", + "🌻": "gira-sol", + "🌷": "tulipa", + "🌲": "arbre de fulla perenne", + "🌳": "arbre de fulla caduca", + "🌴": "palmera", + "🌵": "cactus", + "🌿": "herba", + "🍁": "fulla d’auró", + "🍇": "raïm", + "🍈": "meló", + "🍉": "síndria", + "🍊": "mandarina", + "🍋": "llimona", + "🍌": "plàtan", + "🍍": "pinya", + "🥭": "mango", + "🍏": "poma verda", + "🍐": "pera", + "🍑": "préssec", + "🍒": "cireres", + "🍓": "maduixa", + "🫐": "nabius", + "🥝": "kiwi", + "🍅": "tomàquet", + "🫒": "oliva", + "🥥": "coco", + "🥑": "alvocat", + "🍆": "albergínia", + "🥕": "pastanaga", + "🌽": "panotxa", + "🌶️": "bitxo", + "🥬": "fulla verda", + "🥦": "bròcoli", + "🧅": "ceba", + "🍄": "bolet", + "🥜": "cacauets", + "🥐": "croissant", + "🥖": "baguet", + "🥨": "brètzel", + "🥯": "bagel", + "🥞": "creps americanes", + "🧇": "gofra", + "🍔": "hamburguesa", + "🍕": "pizza", + "🌭": "frankfurt", + "🌮": "taco", + "🍿": "crispetes", + "🦀": "cranc", + "🦞": "llagosta", + "🍨": "gelat", + "🍩": "dònut", + "🍪": "galeta", + "🎂": "pastís d’aniversari", + "🧁": "cupcake", + "🍫": "rajola de xocolata", + "🍬": "caramel", + "🍭": "piruleta", + "🫖": "tetera", + "🧃": "bric", + "🧉": "mate", + "🧭": "brúixola", + "🏔️": "muntanya amb neu al cim", + "🌋": "volcà", + "🏕️": "acampada", + "🏝️": "illa deserta", + "🏡": "casa amb jardí", + "⛲️": "font", + "🎠": "cavallets", + "🎡": "roda de fira", + "🎢": "muntanya russa", + "💈": "barberia", + "🚆": "tren", + "🚋": "vagó de tramvia", + "🚍️": "autobús que arriba", + "🚕": "taxi", + "🚗": "automòbil", + "🚚": "camió de repartiment", + "🚜": "tractor", + "🛵": "escúter", + "🛺": "bicitaxi amb motor", + "🛴": "patinet", + "🛹": "monopatí", + "🛼": "patí de rodes", + "⚓️": "àncora", + "⛵️": "veler", + "🛶": "canoa", + "🚤": "llanxa ràpida", + "🚢": "vaixell", + "✈️": "avió", + "🚁": "helicòpter", + "🚠": "telefèric de muntanya", + "🛰️": "satèl·lit", + "🚀": "coet", + "🛸": "plat volador", + "⏰": "despertador", + "🌙": "lluna creixent", + "🌡️": "termòmetre", + "☀️": "sol", + "🪐": "planeta amb anell", + "🌟": "estrella brillant", + "🌀": "cicló", + "🌈": "arc de Sant Martí", + "☂️": "paraigua", + "❄️": "floc de neu", + "☄️": "cometa", + "🔥": "foc", + "💧": "gota", + "🌊": "onada", + "🎃": "carabassa de Halloween", + "✨": "espurnes", + "🎈": "globus", + "🎉": "tub de confeti", + "🎏": "banderins de carpes", + "🎀": "llaç", + "🎁": "regal embolicat", + "🎟️": "bitllet d’entrada", + "🏆️": "trofeu", + "⚽️": "pilota de futbol", + "🏀": "pilota de bàsquet", + "🏈": "pilota de futbol americà", + "🎾": "tennis", + "🥏": "disc volador", + "🏓": "tennis de taula", + "🏸": "bàdminton", + "🤿": "ulleres de busseig", + "🥌": "pedra de cúrling", + "🎯": "dards", + "🪀": "io-io", + "🪁": "estel", + "🔮": "bola de vidre", + "🎲": "daus", + "🧩": "peces de trencaclosques", + "🎨": "paleta d’artista", + "🧵": "fil", + "👕": "samarreta", + "🧦": "mitjons", + "👗": "vestit", + "🩳": "pantalons curts", + "🎒": "motxilla d’escola", + "👟": "sabatilla de córrer", + "👑": "corona", + "🧢": "gorra", + "💄": "pintallavis", + "💍": "anell", + "💎": "gemma", + "📢": "altaveu de megafonia", + "🎶": "notes musicals", + "🎙️": "micròfon d’estudi", + "📻️": "ràdio", + "🎷": "saxofon", + "🪗": "acordió", + "🎸": "guitarra", + "🎺": "trompeta", + "🎻": "violí", + "🪕": "banjo", + "🥁": "tambor", + "☎️": "telèfon", + "🔋": "bateria", + "💿️": "disc òptic", + "🧮": "àbac", + "🎬️": "claqueta", + "💡": "bombeta", + "🔦": "llanterna", + "🏮": "fanal de paper vermell", + "📕": "llibre tancat", + "🏷️": "etiqueta", + "💳️": "targeta de crèdit", + "✏️": "llapis", + "🖌️": "pinzell", + "🖍️": "llapis de color", + "📌": "xinxeta", + "📎": "clip", + "🔑": "clau", + "🪃": "bumerang", + "🏹": "arc i fletxa", + "⚖️": "balança (aparell)", + "🧲": "imant", + "🧪": "tub d’assaig", + "🧬": "adn", + "🔬": "microscopi", + "🔭": "telescopi", + "📡": "antena de satèl·lit", + "🪑": "cadira", + "🧹": "escombra", + "🗿": "moai" + }, + "cs": { + "👽️": "mimozemšťan", + "🤖": "obličej robota", + "🧠": "mozek", + "👁️": "oko", + "🧙": "mág", + "🧚": "víla", + "🧜": "mořská bytost", + "🐵": "hlava opice", + "🦧": "orangutan", + "🐶": "hlava psa", + "🐺": "hlava vlka", + "🦊": "hlava lišky", + "🦝": "mýval", + "🐱": "hlava kočky", + "🦁": "hlava lva", + "🐯": "hlava tygra", + "🐴": "hlava koně", + "🦄": "hlava jednorožce", + "🦓": "zebra", + "🦌": "jelen", + "🐮": "hlava krávy", + "🐷": "hlava prasete", + "🐗": "kanec", + "🐪": "velbloud jednohrbý", + "🦙": "lama", + "🦒": "žirafa", + "🐘": "slon", + "🦣": "mamut", + "🦏": "nosorožec", + "🐭": "hlava myši", + "🐰": "hlava králíka", + "🐿️": "veverka", + "🦔": "ježek", + "🦇": "netopýr", + "🐻": "hlava medvěda", + "🐨": "koala", + "🦥": "lenochod", + "🦦": "vydra", + "🦘": "klokan", + "🐥": "kuřátko zepředu", + "🐦️": "pták", + "🕊️": "holubice", + "🦆": "kachna", + "🦉": "sova", + "🦤": "dodo", + "🪶": "pírko", + "🦩": "plameňák", + "🦚": "páv", + "🦜": "papoušek", + "🐊": "krokodýl", + "🐢": "želva", + "🦎": "ještěrka", + "🐍": "had", + "🐲": "hlava draka", + "🦕": "brontosaurus", + "🐳": "velryba stříkající vodu", + "🐬": "delfín", + "🦭": "tuleň", + "🐟️": "ryba", + "🐠": "tropická ryba", + "🦈": "žralok", + "🐙": "chobotnice", + "🐚": "ulita", + "🐌": "hlemýžď", + "🦋": "motýl", + "🐛": "housenka", + "🐝": "včela", + "🐞": "beruška", + "💐": "kytice", + "🌹": "růže", + "🌺": "ibišek", + "🌻": "slunečnice", + "🌷": "tulipán", + "🌲": "jehličnatý strom", + "🌳": "listnatý strom", + "🌴": "palma", + "🌵": "kaktus", + "🌿": "bylina", + "🍁": "javorový list", + "🍇": "hrozny", + "🍈": "cukrový meloun", + "🍉": "meloun", + "🍊": "mandarinka", + "🍋": "citron", + "🍌": "banán", + "🍍": "ananas", + "🥭": "mango", + "🍏": "zelené jablko", + "🍐": "hruška", + "🍑": "broskev", + "🍒": "třešně", + "🍓": "jahoda", + "🫐": "borůvky", + "🥝": "kiwi", + "🍅": "rajče", + "🫒": "oliva", + "🥥": "kokos", + "🥑": "avokádo", + "🍆": "lilek", + "🥕": "mrkev", + "🌽": "kukuřičný klas", + "🌶️": "feferonka", + "🥬": "salátové listy", + "🥦": "brokolice", + "🧅": "cibule", + "🍄": "houba", + "🥜": "arašídy", + "🥐": "croissant", + "🥖": "bageta", + "🥨": "preclík", + "🥯": "bagel", + "🥞": "palačinky", + "🧇": "vafle", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "párek v rohlíku", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "krab", + "🦞": "humr", + "🍨": "kopečková zmrzlina", + "🍩": "donut", + "🍪": "koláček", + "🎂": "narozeninový dort", + "🧁": "košíček", + "🍫": "tabulka čokolády", + "🍬": "bonbon", + "🍭": "lízátko", + "🫖": "čajová konvice", + "🧃": "nápoj v krabičce", + "🧉": "maté", + "🧭": "kompas", + "🏔️": "zasněžená hora", + "🌋": "sopka", + "🏕️": "tábor", + "🏝️": "pustý ostrov", + "🏡": "domek se zahradou", + "⛲️": "fontána", + "🎠": "kolotočový kůň", + "🎡": "ruské kolo", + "🎢": "horská dráha", + "💈": "značka holičství", + "🚆": "vlak", + "🚋": "vagón tramvaje", + "🚍️": "přijíždějící autobus", + "🚕": "taxík", + "🚗": "auto", + "🚚": "dodávka", + "🚜": "traktor", + "🛵": "skútr", + "🛺": "autorikša", + "🛴": "koloběžka", + "🛹": "skateboard", + "🛼": "kolečková brusle", + "⚓️": "kotva", + "⛵️": "plachetnice", + "🛶": "kánoe", + "🚤": "motorový člun", + "🚢": "loď", + "✈️": "letadlo", + "🚁": "vrtulník", + "🚠": "horská lanovka", + "🛰️": "satelit", + "🚀": "raketa", + "🛸": "létající talíř", + "⏰": "budík", + "🌙": "srpek měsíce", + "🌡️": "teploměr", + "☀️": "slunce", + "🪐": "planeta s prstencem", + "🌟": "zářící hvězda", + "🌀": "cyklóna", + "🌈": "duha", + "☂️": "deštník", + "❄️": "sněhová vločka", + "☄️": "kometa", + "🔥": "oheň", + "💧": "kapka", + "🌊": "vodní vlna", + "🎃": "dýňová lucerna", + "✨": "jiskry", + "🎈": "balónek", + "🎉": "vystřelovací konfety", + "🎏": "koinobori", + "🎀": "mašle", + "🎁": "zabalený dárek", + "🎟️": "vstupenky", + "🏆️": "trofejní pohár", + "⚽️": "fotbalový míč", + "🏀": "basketbalový míč", + "🏈": "míč na americký fotbal", + "🎾": "tenis", + "🥏": "frisbee", + "🏓": "stolní tenis", + "🏸": "badminton", + "🤿": "potápěčská maska", + "🥌": "curlingový kámen", + "🎯": "přesný zásah do terče", + "🪀": "jojo", + "🪁": "papírový drak", + "🔮": "křišťálová koule", + "🎲": "hrací kostka", + "🧩": "puzzle", + "🎨": "malířská paleta", + "🧵": "cívka nití", + "👕": "tričko", + "🧦": "ponožky", + "👗": "šaty", + "🩳": "šortky", + "🎒": "školní batoh", + "👟": "běžecká bota", + "👑": "koruna", + "🧢": "kšiltovka", + "💄": "rtěnka", + "💍": "prsten", + "💎": "drahokam", + "📢": "tlampač", + "🎶": "noty", + "🎙️": "studiový mikrofon", + "📻️": "rádio", + "🎷": "saxofon", + "🪗": "akordeon", + "🎸": "kytara", + "🎺": "trubka", + "🎻": "housle", + "🪕": "banjo", + "🥁": "buben", + "☎️": "telefon", + "🔋": "baterie", + "💿️": "optický disk", + "🧮": "počitadlo", + "🎬️": "filmová klapka", + "💡": "žárovka", + "🔦": "baterka", + "🏮": "červený lampion", + "📕": "zavřená kniha", + "🏷️": "visačka", + "💳️": "platební karta", + "✏️": "tužka", + "🖌️": "štětec", + "🖍️": "pastelka", + "📌": "připínáček", + "📎": "kancelářská sponka", + "🔑": "klíč", + "🪃": "bumerang", + "🏹": "luk a šíp", + "⚖️": "miskové váhy", + "🧲": "magnet", + "🧪": "zkumavka", + "🧬": "DNA", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "satelitní anténa", + "🪑": "židle", + "🧹": "koště", + "🗿": "socha moai" + }, + "da": { + "👽️": "rumvæsen", + "🤖": "robot", + "🧠": "hjerne", + "👁️": "øje", + "🧙": "magiker", + "🧚": "fe", + "🧜": "havvæsen", + "🐵": "abehoved", + "🦧": "orangutang", + "🐶": "hundehoved", + "🐺": "ulvehoved", + "🦊": "rævehoved", + "🦝": "vaskebjørn", + "🐱": "kattehoved", + "🦁": "løvehoved", + "🐯": "tigerhoved", + "🐴": "hestehoved", + "🦄": "enhjørningehoved", + "🦓": "zebra", + "🦌": "hjort", + "🐮": "kohoved", + "🐷": "grisehoved", + "🐗": "vildsvin", + "🐪": "dromedar", + "🦙": "lama", + "🦒": "giraf", + "🐘": "elefant", + "🦣": "mammut", + "🦏": "næsehorn", + "🐭": "musehoved", + "🐰": "kaninhoved", + "🐿️": "jordegern", + "🦔": "pindsvin", + "🦇": "flagermus", + "🐻": "bjørnehoved", + "🐨": "koala", + "🦥": "dovendyr", + "🦦": "odder", + "🦘": "kænguru", + "🐥": "kylling forfra", + "🐦️": "fugl", + "🕊️": "due", + "🦆": "and", + "🦉": "ugle", + "🦤": "dronte", + "🪶": "fjer", + "🦩": "flamingo", + "🦚": "påfugl", + "🦜": "papegøje", + "🐊": "krokodille", + "🐢": "skildpadde", + "🦎": "firben", + "🐍": "slange", + "🐲": "dragehoved", + "🦕": "sauropod", + "🐳": "hval med vandsprøjt", + "🐬": "delfin", + "🦭": "sæl", + "🐟️": "fisk", + "🐠": "tropisk fisk", + "🦈": "haj", + "🐙": "blæksprutte", + "🐚": "konkylie", + "🐌": "snegl", + "🦋": "sommerfugl", + "🐛": "larve", + "🐝": "honningbi", + "🐞": "mariehøne", + "💐": "blomsterbuket", + "🌹": "rose", + "🌺": "hibiscus", + "🌻": "solsikke", + "🌷": "tulipan", + "🌲": "nåletræ", + "🌳": "løvtræ", + "🌴": "palme", + "🌵": "kaktus", + "🌿": "urt", + "🍁": "ahornblad", + "🍇": "vindruer", + "🍈": "melon", + "🍉": "vandmelon", + "🍊": "appelsin", + "🍋": "citron", + "🍌": "banan", + "🍍": "ananas", + "🥭": "mango", + "🍏": "grønt æble", + "🍐": "pære", + "🍑": "fersken", + "🍒": "kirsebær", + "🍓": "jordbær", + "🫐": "blåbær", + "🥝": "kiwifrugt", + "🍅": "tomat", + "🫒": "oliven", + "🥥": "kokosnød", + "🥑": "avokado", + "🍆": "aubergine", + "🥕": "gulerod", + "🌽": "majs", + "🌶️": "chili", + "🥬": "bladgrønt", + "🥦": "broccoli", + "🧅": "løg", + "🍄": "svamp", + "🥜": "jordnødder", + "🥐": "croissant", + "🥖": "flute", + "🥨": "kringle", + "🥯": "bagel", + "🥞": "pandekager", + "🧇": "vaffel", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hotdog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "krabbe", + "🦞": "hummer", + "🍨": "is", + "🍩": "donut", + "🍪": "småkage", + "🎂": "fødselsdagskage", + "🧁": "cupcake", + "🍫": "chokolade", + "🍬": "bolsje", + "🍭": "slikkepind", + "🫖": "tekande", + "🧃": "brik", + "🧉": "mate", + "🧭": "kompas", + "🏔️": "sneklædt bjerg", + "🌋": "vulkan", + "🏕️": "camping", + "🏝️": "øde ø", + "🏡": "hus med have", + "⛲️": "springvand", + "🎠": "karrusel", + "🎡": "pariserhjul", + "🎢": "rutsjebane", + "💈": "barber", + "🚆": "tog", + "🚋": "vogn", + "🚍️": "bus forfra", + "🚕": "taxa", + "🚗": "bil", + "🚚": "lastbil", + "🚜": "traktor", + "🛵": "scooter", + "🛺": "motor-rickshaw", + "🛴": "løbehjul", + "🛹": "skateboard", + "🛼": "rulleskøjte", + "⚓️": "anker", + "⛵️": "sejlbåd", + "🛶": "kano", + "🚤": "speedbåd", + "🚢": "skib", + "✈️": "fly", + "🚁": "helikopter", + "🚠": "kabelbane", + "🛰️": "satellit", + "🚀": "raket", + "🛸": "ufo", + "⏰": "vækkeur", + "🌙": "halvmåne", + "🌡️": "termometer", + "☀️": "sol", + "🪐": "planet med ringe", + "🌟": "blinkende stjerne", + "🌀": "cyklon", + "🌈": "regnbue", + "☂️": "paraply", + "❄️": "snefnug", + "☄️": "komet", + "🔥": "ild", + "💧": "dråbe", + "🌊": "bølge", + "🎃": "græskarmand", + "✨": "stjerner", + "🎈": "ballon", + "🎉": "bordbombe", + "🎏": "karpevimpel", + "🎀": "sløjfe", + "🎁": "gave", + "🎟️": "adgangsbillet", + "🏆️": "pokal", + "⚽️": "fodbold", + "🏀": "basketball", + "🏈": "amerikansk fodbold", + "🎾": "tennis", + "🥏": "frisbee", + "🏓": "bordtennis", + "🏸": "badminton", + "🤿": "dykkermaske", + "🥌": "curlingsten", + "🎯": "pletskud", + "🪀": "yoyo", + "🪁": "legetøjsdrage", + "🔮": "krystalkugle", + "🎲": "terning", + "🧩": "brik til puslespil", + "🎨": "palet", + "🧵": "tråd", + "👕": "T-shirt", + "🧦": "sokker", + "👗": "kjole", + "🩳": "shorts", + "🎒": "rygsæk", + "👟": "løbesko", + "👑": "krone", + "🧢": "kasket", + "💄": "læbestift", + "💍": "ring", + "💎": "ædelsten", + "📢": "elektrisk megafon", + "🎶": "noder", + "🎙️": "studiemikrofon", + "📻️": "radio", + "🎷": "saxofon", + "🪗": "akkordeon", + "🎸": "guitar", + "🎺": "trompet", + "🎻": "violin", + "🪕": "banjo", + "🥁": "tromme", + "☎️": "telefon", + "🔋": "batteri", + "💿️": "cd", + "🧮": "kugleramme", + "🎬️": "klaptræ", + "💡": "elpære", + "🔦": "lommelygte", + "🏮": "papirlanterne", + "📕": "lukket bog", + "🏷️": "mærkat", + "💳️": "kreditkort", + "✏️": "blyant", + "🖌️": "malerpensel", + "🖍️": "farvekridt", + "📌": "tegnestift", + "📎": "papirclips", + "🔑": "nøgle", + "🪃": "boomerang", + "🏹": "bue og pil", + "⚖️": "vægt", + "🧲": "magnet", + "🧪": "reagensglas", + "🧬": "dna", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "parabolantenne", + "🪑": "stol", + "🧹": "kost", + "🗿": "statue" + }, + "de": { + "👽️": "Außerirdischer", + "🤖": "Roboter", + "🧠": "Gehirn", + "👁️": "Auge", + "🧙": "Magier(in)", + "🧚": "Märchenfee", + "🧜": "Wassermensch", + "🐵": "Affengesicht", + "🦧": "Orang-Utan", + "🐶": "Hundegesicht", + "🐺": "Wolf", + "🦊": "Fuchs", + "🦝": "Waschbär", + "🐱": "Katzengesicht", + "🦁": "Löwe", + "🐯": "Tigergesicht", + "🐴": "Pferdegesicht", + "🦄": "Einhorn", + "🦓": "Zebra", + "🦌": "Hirsch", + "🐮": "Kuhgesicht", + "🐷": "Schweinegesicht", + "🐗": "Wildschwein", + "🐪": "Dromedar", + "🦙": "Lama", + "🦒": "Giraffe", + "🐘": "Elefant", + "🦣": "Mammut", + "🦏": "Nashorn", + "🐭": "Mäusegesicht", + "🐰": "Hasengesicht", + "🐿️": "Streifenhörnchen", + "🦔": "Igel", + "🦇": "Fledermaus", + "🐻": "Bär", + "🐨": "Koala", + "🦥": "Faultier", + "🦦": "Otter", + "🦘": "Känguru", + "🐥": "Küken von vorne", + "🐦️": "Vogel", + "🕊️": "Taube", + "🦆": "Ente", + "🦉": "Eule", + "🦤": "Dodo", + "🪶": "Feder", + "🦩": "Flamingo", + "🦚": "Pfau", + "🦜": "Papagei", + "🐊": "Krokodil", + "🐢": "Schildkröte", + "🦎": "Eidechse", + "🐍": "Schlange", + "🐲": "Drachengesicht", + "🦕": "Sauropode", + "🐳": "blasender Wal", + "🐬": "Delfin", + "🦭": "Seehund", + "🐟️": "Fisch", + "🐠": "Tropenfisch", + "🦈": "Hai", + "🐙": "Oktopus", + "🐚": "Schneckenhaus", + "🐌": "Schnecke", + "🦋": "Schmetterling", + "🐛": "Raupe", + "🐝": "Biene", + "🐞": "Marienkäfer", + "💐": "Blumenstrauß", + "🌹": "Rose", + "🌺": "Hibiskus", + "🌻": "Sonnenblume", + "🌷": "Tulpe", + "🌲": "Nadelbaum", + "🌳": "Laubbaum", + "🌴": "Palme", + "🌵": "Kaktus", + "🌿": "Kräuter", + "🍁": "Ahornblatt", + "🍇": "Trauben", + "🍈": "Honigmelone", + "🍉": "Wassermelone", + "🍊": "Mandarine", + "🍋": "Zitrone", + "🍌": "Banane", + "🍍": "Ananas", + "🥭": "Mango", + "🍏": "grüner Apfel", + "🍐": "Birne", + "🍑": "Pfirsich", + "🍒": "Kirschen", + "🍓": "Erdbeere", + "🫐": "Blaubeeren", + "🥝": "Kiwi", + "🍅": "Tomate", + "🫒": "Olive", + "🥥": "Kokosnuss", + "🥑": "Avocado", + "🍆": "Aubergine", + "🥕": "Karotte", + "🌽": "Maiskolben", + "🌶️": "Peperoni", + "🥬": "Blattgemüse", + "🥦": "Brokkoli", + "🧅": "Zwiebel", + "🍄": "Fliegenpilz", + "🥜": "Erdnuss", + "🥐": "Croissant", + "🥖": "Baguette", + "🥨": "Brezel", + "🥯": "Bagel", + "🥞": "Pfannkuchen", + "🧇": "Waffel", + "🍔": "Hamburger", + "🍕": "Pizza", + "🌭": "Hotdog", + "🌮": "Taco", + "🍿": "Popcorn", + "🦀": "Krebs", + "🦞": "Hummer", + "🍨": "Eiscreme", + "🍩": "Donut", + "🍪": "Keks", + "🎂": "Geburtstagskuchen", + "🧁": "Cupcake", + "🍫": "Schokoladentafel", + "🍬": "Bonbon", + "🍭": "Lutscher", + "🫖": "Teekanne", + "🧃": "Trinkpäckchen", + "🧉": "Mate-Tee", + "🧭": "Kompass", + "🏔️": "schneebedeckter Berg", + "🌋": "Vulkan", + "🏕️": "Camping", + "🏝️": "einsame Insel", + "🏡": "Haus mit Garten", + "⛲️": "Springbrunnen", + "🎠": "Karussellpferd", + "🎡": "Riesenrad", + "🎢": "Achterbahn", + "💈": "Barbershop-Säule", + "🚆": "Zug", + "🚋": "Straßenbahnwagen", + "🚍️": "Bus von vorne", + "🚕": "Taxi", + "🚗": "Auto", + "🚚": "Lieferwagen", + "🚜": "Traktor", + "🛵": "Motorroller", + "🛺": "Autorikscha", + "🛴": "Tretroller", + "🛹": "Skateboard", + "🛼": "Rollschuh", + "⚓️": "Anker", + "⛵️": "Segelboot", + "🛶": "Kanu", + "🚤": "Schnellboot", + "🚢": "Schiff", + "✈️": "Flugzeug", + "🚁": "Hubschrauber", + "🚠": "Bergschwebebahn", + "🛰️": "Satellit", + "🚀": "Rakete", + "🛸": "fliegende Untertasse", + "⏰": "Wecker", + "🌙": "Mondsichel", + "🌡️": "Thermometer", + "☀️": "Sonne", + "🪐": "Ringplanet", + "🌟": "funkelnder Stern", + "🌀": "Wirbel", + "🌈": "Regenbogen", + "☂️": "Regenschirm", + "❄️": "Schneeflocke", + "☄️": "Komet", + "🔥": "Feuer", + "💧": "Tropfen", + "🌊": "Welle", + "🎃": "Halloweenkürbis", + "✨": "funkelnde Sterne", + "🎈": "Luftballon", + "🎉": "Konfettibombe", + "🎏": "traditionelle japanische Windsäcke", + "🎀": "pinke Schleife", + "🎁": "Geschenk", + "🎟️": "Eintrittskarten", + "🏆️": "Pokal", + "⚽️": "Fußball", + "🏀": "Basketball", + "🏈": "Football", + "🎾": "Tennisball", + "🥏": "Frisbee", + "🏓": "Tischtennis", + "🏸": "Badminton", + "🤿": "Tauchmaske", + "🥌": "Curlingstein", + "🎯": "Darts", + "🪀": "Jo-Jo", + "🪁": "Drachen", + "🔮": "Kristallkugel", + "🎲": "Spielwürfel", + "🧩": "Puzzleteil", + "🎨": "Mischpalette", + "🧵": "Faden", + "👕": "T-Shirt", + "🧦": "Socken", + "👗": "Kleid", + "🩳": "Shorts", + "🎒": "Schulranzen", + "👟": "Sportschuh", + "👑": "Krone", + "🧢": "Baseballmütze", + "💄": "Lippenstift", + "💍": "Ring", + "💎": "Edelstein", + "📢": "Lautsprecher", + "🎶": "Musiknoten", + "🎙️": "Studiomikrofon", + "📻️": "Radio", + "🎷": "Saxofon", + "🪗": "Akkordeon", + "🎸": "Gitarre", + "🎺": "Trompete", + "🎻": "Geige", + "🪕": "Banjo", + "🥁": "Trommel", + "☎️": "Telefon", + "🔋": "Batterie", + "💿️": "CD", + "🧮": "Abakus", + "🎬️": "Filmklappe", + "💡": "Glühbirne", + "🔦": "Taschenlampe", + "🏮": "rote Papierlaterne", + "📕": "geschlossenes Buch", + "🏷️": "Etikett", + "💳️": "Kreditkarte", + "✏️": "Bleistift", + "🖌️": "Pinsel", + "🖍️": "Wachsmalstift", + "📌": "Reißzwecke", + "📎": "Büroklammer", + "🔑": "Schlüssel", + "🪃": "Bumerang", + "🏹": "Pfeil und Bogen", + "⚖️": "Waage", + "🧲": "Magnet", + "🧪": "Reagenzglas", + "🧬": "DNA", + "🔬": "Mikroskop", + "🔭": "Teleskop", + "📡": "Satellitenschüssel", + "🪑": "Stuhl", + "🧹": "Besen", + "🗿": "Statue" + }, + "el": { + "👽️": "εξωγήινος", + "🤖": "ρομπότ", + "🧠": "μυαλό", + "👁️": "μάτι", + "🧙": "μάγος", + "🧚": "νεράιδα", + "🧜": "γοργόνα", + "🐵": "πρόσωπο μαϊμούς", + "🦧": "ουρακοτάγκος", + "🐶": "πρόσωπο σκύλου", + "🐺": "λύκος", + "🦊": "αλεπού", + "🦝": "ρακούν", + "🐱": "πρόσωπο γάτας", + "🦁": "λιοντάρι", + "🐯": "πρόσωπο τίγρης", + "🐴": "πρόσωπο αλόγου", + "🦄": "μονόκερος", + "🦓": "ζέβρα", + "🦌": "ελάφι", + "🐮": "πρόσωπο αγελάδας", + "🐷": "πρόσωπο γουρουνιού", + "🐗": "αγριογούρουνο", + "🐪": "καμήλα", + "🦙": "λάμα", + "🦒": "καμηλοπάρδαλη", + "🐘": "ελέφαντας", + "🦣": "μαμούθ", + "🦏": "ρινόκερος", + "🐭": "πρόσωπο ποντικιού", + "🐰": "πρόσωπο κουνελιού", + "🐿️": "σκιουράκι", + "🦔": "σκαντζόχοιρος", + "🦇": "νυχτερίδα", + "🐻": "αρκούδα", + "🐨": "κοάλα", + "🦥": "βραδύπους", + "🦦": "βίδρα", + "🦘": "καγκουρό", + "🐥": "κοτοπουλάκι που κοιτά μπροστά", + "🐦️": "πουλί", + "🕊️": "περιστέρι", + "🦆": "πάπια", + "🦉": "κουκουβάγια", + "🦤": "ντόντο", + "🪶": "πούπουλο", + "🦩": "φλαμίνγκο", + "🦚": "παγώνι", + "🦜": "παπαγάλος", + "🐊": "κροκόδειλος", + "🐢": "χελώνα", + "🦎": "σαύρα", + "🐍": "φίδι", + "🐲": "πρόσωπο δράκου", + "🦕": "σαυρόποδο", + "🐳": "φάλαινα που πετά νερό", + "🐬": "δελφίνι", + "🦭": "φώκια", + "🐟️": "ψάρι", + "🐠": "τροπικό ψάρι", + "🦈": "καρχαρίας", + "🐙": "χταπόδι", + "🐚": "σπειροειδές κοχύλι", + "🐌": "σαλιγκάρι", + "🦋": "πεταλούδα", + "🐛": "κάμπια", + "🐝": "μέλισσα", + "🐞": "πασχαλίτσα", + "💐": "μπουκέτο λουλούδια", + "🌹": "τριαντάφυλλο", + "🌺": "ιβίσκος", + "🌻": "ηλιοτρόπιο", + "🌷": "τουλίπα", + "🌲": "αειθαλές δέντρο", + "🌳": "φυλλοβόλο δέντρο", + "🌴": "φοίνικας", + "🌵": "κάκτος", + "🌿": "βότανο", + "🍁": "φύλλο σφενδάμου", + "🍇": "σταφύλι", + "🍈": "πεπόνι", + "🍉": "καρπούζι", + "🍊": "μανταρίνι", + "🍋": "λεμόνι", + "🍌": "μπανάνα", + "🍍": "ανανάς", + "🥭": "μάνγκο", + "🍏": "πράσινο μήλο", + "🍐": "αχλάδι", + "🍑": "ροδάκινο", + "🍒": "κεράσια", + "🍓": "φράουλα", + "🫐": "μύρτιλο", + "🥝": "ακτινίδιο", + "🍅": "ντομάτα", + "🫒": "ελιά", + "🥥": "καρύδα", + "🥑": "αβοκάντο", + "🍆": "μελιτζάνα", + "🥕": "καρότο", + "🌽": "καλαμπόκι", + "🌶️": "καυτερή πιπεριά", + "🥬": "πράσινο φυλλώδες", + "🥦": "μπρόκολο", + "🧅": "κρεμμύδι", + "🍄": "μανιτάρι", + "🥜": "φιστίκια", + "🥐": "κρουασάν", + "🥖": "μπαγκέτα", + "🥨": "πρέτσελ", + "🥯": "μπέιγκελ", + "🥞": "τηγανίτες", + "🧇": "βάφλα", + "🍔": "χάμπουργκερ", + "🍕": "πίτσα", + "🌭": "χοτ ντογκ", + "🌮": "τάκο", + "🍿": "ποπ-κορν", + "🦀": "κάβουρας", + "🦞": "αστακός", + "🍨": "παγωτό", + "🍩": "ντόνατ", + "🍪": "μπισκότο", + "🎂": "τούρτα γενεθλίων", + "🧁": "κεκάκι", + "🍫": "σοκολάτα", + "🍬": "καραμέλα", + "🍭": "γλειφιτζούρι", + "🫖": "τσαγιέρα", + "🧃": "κουτί ροφήματος", + "🧉": "μάτε", + "🧭": "πυξίδα", + "🏔️": "χιονισμένο βουνό", + "🌋": "ηφαίστειο", + "🏕️": "κατασκήνωση", + "🏝️": "ερημονήσι", + "🏡": "σπίτι με κήπο", + "⛲️": "σιντριβάνι", + "🎠": "αλογάκι καρουσέλ", + "🎡": "ρόδα λούνα-παρκ", + "🎢": "τρενάκι", + "💈": "σύμβολο κουρείου", + "🚆": "τρένο", + "🚋": "βαγόνι τραμ", + "🚍️": "διερχόμενο λεωφορείο", + "🚕": "ταξί", + "🚗": "αυτοκίνητο", + "🚚": "φορτηγό", + "🚜": "τρακτέρ", + "🛵": "σκουτεράκι", + "🛺": "ποδήλατο-ταξί", + "🛴": "πατίνι", + "🛹": "σκέιτμπορντ", + "🛼": "πατίνια", + "⚓️": "άγκυρα", + "⛵️": "ιστιοφόρο", + "🛶": "κανό", + "🚤": "ταχύπλοο", + "🚢": "πλοίο", + "✈️": "αεροπλάνο", + "🚁": "ελικόπτερο", + "🚠": "τελεφερίκ", + "🛰️": "δορυφόρος", + "🚀": "πύραυλος", + "🛸": "ιπτάμενος δίσκος", + "⏰": "ξυπνητήρι", + "🌙": "ημισέληνος", + "🌡️": "θερμόμετρο", + "☀️": "ήλιος", + "🪐": "πλανήτης με δακτύλιο", + "🌟": "λαμπερό αστέρι", + "🌀": "κυκλώνας", + "🌈": "ουράνιο τόξο", + "☂️": "ομπρέλα", + "❄️": "χιονονιφάδα", + "☄️": "κομήτης", + "🔥": "φωτιά", + "💧": "σταγόνα", + "🌊": "θαλάσσιο κύμα", + "🎃": "φανάρι από κολοκύθα", + "✨": "αστράκια", + "🎈": "μπαλόνι", + "🎉": "χαρτοπόλεμος", + "🎏": "διακοσμητικοί κυπρίνοι", + "🎀": "κορδέλα", + "🎁": "τυλιγμένο δώρο", + "🎟️": "κάρτες εισόδου", + "🏆️": "τρόπαιο", + "⚽️": "μπάλα ποδοσφαίρου", + "🏀": "μπάλα μπάσκετ", + "🏈": "μπάλα αμερικάνικου ποδοσφαίρου", + "🎾": "μπάλα τένις", + "🥏": "φρίσμπι", + "🏓": "πινγκ πονγκ", + "🏸": "μπάντμιντον", + "🤿": "μάσκα κατάδυσης", + "🥌": "πέτρα κέρλινγκ", + "🎯": "βελάκια", + "🪀": "γιογιό", + "🪁": "χαρταετός", + "🔮": "κρυστάλλινη σφαίρα", + "🎲": "ζάρι", + "🧩": "κομμάτι παζλ", + "🎨": "παλέτα ζωγράφου", + "🧵": "κλωστή", + "👕": "μπλουζάκι", + "🧦": "κάλτσες", + "👗": "φόρεμα", + "🩳": "σορτσάκι", + "🎒": "σχολική σάκα", + "👟": "αθλητικό παπούτσι", + "👑": "στέμμα", + "🧢": "καπελάκι", + "💄": "κραγιόν", + "💍": "δαχτυλίδι", + "💎": "διαμάντι", + "📢": "ντουντούκα", + "🎶": "νότες μουσικής", + "🎙️": "μικρόφωνο στούντιο", + "📻️": "ραδιόφωνο", + "🎷": "σαξόφωνο", + "🪗": "ακορντεόν", + "🎸": "κιθάρα", + "🎺": "τρομπέτα", + "🎻": "βιολί", + "🪕": "μπάντζο", + "🥁": "τύμπανο", + "☎️": "τηλέφωνο", + "🔋": "μπαταρία", + "💿️": "οπτικός δίσκος", + "🧮": "άβακας", + "🎬️": "κλακέτα φιλμ", + "💡": "λαμπτήρας", + "🔦": "φακός", + "🏮": "κόκκινο χάρτινο φανάρι", + "📕": "κλειστό βιβλίο", + "🏷️": "ετικέτα", + "💳️": "πιστωτική κάρτα", + "✏️": "μολύβι", + "🖌️": "πινέλο", + "🖍️": "κηρομπογιά", + "📌": "πινέζα", + "📎": "συνδετήρας", + "🔑": "κλειδί", + "🪃": "μπούμερανγκ", + "🏹": "τόξο και βέλος", + "⚖️": "ζυγαριά", + "🧲": "μαγνήτης", + "🧪": "δοκιμαστικός σωλήνας", + "🧬": "dna", + "🔬": "μικροσκόπιο", + "🔭": "τηλεσκόπιο", + "📡": "δορυφορική κεραία", + "🪑": "καρέκλα", + "🧹": "σκούπα", + "🗿": "μοάι" + }, + "en": { + "👽️": "alien", + "🤖": "robot", + "🧠": "brain", + "👁️": "eye", + "🧙": "mage", + "🧚": "fairy", + "🧜": "merperson", + "🐵": "monkey face", + "🦧": "orangutan", + "🐶": "dog face", + "🐺": "wolf", + "🦊": "fox", + "🦝": "raccoon", + "🐱": "cat face", + "🦁": "lion", + "🐯": "tiger face", + "🐴": "horse face", + "🦄": "unicorn", + "🦓": "zebra", + "🦌": "deer", + "🐮": "cow face", + "🐷": "pig face", + "🐗": "boar", + "🐪": "camel", + "🦙": "llama", + "🦒": "giraffe", + "🐘": "elephant", + "🦣": "mammoth", + "🦏": "rhinoceros", + "🐭": "mouse face", + "🐰": "rabbit face", + "🐿️": "chipmunk", + "🦔": "hedgehog", + "🦇": "bat", + "🐻": "bear", + "🐨": "koala", + "🦥": "sloth", + "🦦": "otter", + "🦘": "kangaroo", + "🐥": "front-facing baby chick", + "🐦️": "bird", + "🕊️": "dove", + "🦆": "duck", + "🦉": "owl", + "🦤": "dodo", + "🪶": "feather", + "🦩": "flamingo", + "🦚": "peacock", + "🦜": "parrot", + "🐊": "crocodile", + "🐢": "turtle", + "🦎": "lizard", + "🐍": "snake", + "🐲": "dragon face", + "🦕": "sauropod", + "🐳": "spouting whale", + "🐬": "dolphin", + "🦭": "seal", + "🐟️": "fish", + "🐠": "tropical fish", + "🦈": "shark", + "🐙": "octopus", + "🐚": "spiral shell", + "🐌": "snail", + "🦋": "butterfly", + "🐛": "bug", + "🐝": "honeybee", + "🐞": "lady beetle", + "💐": "bouquet", + "🌹": "rose", + "🌺": "hibiscus", + "🌻": "sunflower", + "🌷": "tulip", + "🌲": "evergreen tree", + "🌳": "deciduous tree", + "🌴": "palm tree", + "🌵": "cactus", + "🌿": "herb", + "🍁": "maple leaf", + "🍇": "grapes", + "🍈": "melon", + "🍉": "watermelon", + "🍊": "tangerine", + "🍋": "lemon", + "🍌": "banana", + "🍍": "pineapple", + "🥭": "mango", + "🍏": "green apple", + "🍐": "pear", + "🍑": "peach", + "🍒": "cherries", + "🍓": "strawberry", + "🫐": "blueberries", + "🥝": "kiwi fruit", + "🍅": "tomato", + "🫒": "olive", + "🥥": "coconut", + "🥑": "avocado", + "🍆": "eggplant", + "🥕": "carrot", + "🌽": "ear of corn", + "🌶️": "hot pepper", + "🥬": "leafy green", + "🥦": "broccoli", + "🧅": "onion", + "🍄": "mushroom", + "🥜": "peanuts", + "🥐": "croissant", + "🥖": "baguette bread", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "pancakes", + "🧇": "waffle", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "crab", + "🦞": "lobster", + "🍨": "ice cream", + "🍩": "doughnut", + "🍪": "cookie", + "🎂": "birthday cake", + "🧁": "cupcake", + "🍫": "chocolate bar", + "🍬": "candy", + "🍭": "lollipop", + "🫖": "teapot", + "🧃": "beverage box", + "🧉": "mate", + "🧭": "compass", + "🏔️": "snow-capped mountain", + "🌋": "volcano", + "🏕️": "camping", + "🏝️": "desert island", + "🏡": "house with garden", + "⛲️": "fountain", + "🎠": "carousel horse", + "🎡": "ferris wheel", + "🎢": "roller coaster", + "💈": "barber pole", + "🚆": "train", + "🚋": "tram car", + "🚍️": "oncoming bus", + "🚕": "taxi", + "🚗": "automobile", + "🚚": "delivery truck", + "🚜": "tractor", + "🛵": "motor scooter", + "🛺": "auto rickshaw", + "🛴": "kick scooter", + "🛹": "skateboard", + "🛼": "roller skate", + "⚓️": "anchor", + "⛵️": "sailboat", + "🛶": "canoe", + "🚤": "speedboat", + "🚢": "ship", + "✈️": "airplane", + "🚁": "helicopter", + "🚠": "mountain cableway", + "🛰️": "satellite", + "🚀": "rocket", + "🛸": "flying saucer", + "⏰": "alarm clock", + "🌙": "crescent moon", + "🌡️": "thermometer", + "☀️": "sun", + "🪐": "ringed planet", + "🌟": "glowing star", + "🌀": "cyclone", + "🌈": "rainbow", + "☂️": "umbrella", + "❄️": "snowflake", + "☄️": "comet", + "🔥": "fire", + "💧": "droplet", + "🌊": "water wave", + "🎃": "jack-o-lantern", + "✨": "sparkles", + "🎈": "balloon", + "🎉": "party popper", + "🎏": "carp streamer", + "🎀": "ribbon", + "🎁": "wrapped gift", + "🎟️": "admission tickets", + "🏆️": "trophy", + "⚽️": "soccer ball", + "🏀": "basketball", + "🏈": "american football", + "🎾": "tennis", + "🥏": "flying disc", + "🏓": "ping pong", + "🏸": "badminton", + "🤿": "diving mask", + "🥌": "curling stone", + "🎯": "bullseye", + "🪀": "yo-yo", + "🪁": "kite", + "🔮": "crystal ball", + "🎲": "game die", + "🧩": "puzzle piece", + "🎨": "artist palette", + "🧵": "thread", + "👕": "t-shirt", + "🧦": "socks", + "👗": "dress", + "🩳": "shorts", + "🎒": "backpack", + "👟": "running shoe", + "👑": "crown", + "🧢": "billed cap", + "💄": "lipstick", + "💍": "ring", + "💎": "gem stone", + "📢": "loudspeaker", + "🎶": "musical notes", + "🎙️": "studio microphone", + "📻️": "radio", + "🎷": "saxophone", + "🪗": "accordion", + "🎸": "guitar", + "🎺": "trumpet", + "🎻": "violin", + "🪕": "banjo", + "🥁": "drum", + "☎️": "telephone", + "🔋": "battery", + "💿️": "optical disk", + "🧮": "abacus", + "🎬️": "clapper board", + "💡": "light bulb", + "🔦": "flashlight", + "🏮": "red paper lantern", + "📕": "closed book", + "🏷️": "label", + "💳️": "credit card", + "✏️": "pencil", + "🖌️": "paintbrush", + "🖍️": "crayon", + "📌": "pushpin", + "📎": "paperclip", + "🔑": "key", + "🪃": "boomerang", + "🏹": "bow and arrow", + "⚖️": "balance scale", + "🧲": "magnet", + "🧪": "test tube", + "🧬": "dna", + "🔬": "microscope", + "🔭": "telescope", + "📡": "satellite antenna", + "🪑": "chair", + "🧹": "broom", + "🗿": "moai" + }, + "es": { + "👽️": "alienígena", + "🤖": "robot", + "🧠": "cerebro", + "👁️": "ojo", + "🧙": "persona maga", + "🧚": "hada", + "🧜": "persona sirena", + "🐵": "cara de mono", + "🦧": "orangután", + "🐶": "cara de perro", + "🐺": "lobo", + "🦊": "zorro", + "🦝": "mapache", + "🐱": "cara de gato", + "🦁": "león", + "🐯": "cara de tigre", + "🐴": "cara de caballo", + "🦄": "unicornio", + "🦓": "cebra", + "🦌": "ciervo", + "🐮": "cara de vaca", + "🐷": "cara de cerdo", + "🐗": "jabalí", + "🐪": "dromedario", + "🦙": "llama", + "🦒": "jirafa", + "🐘": "elefante", + "🦣": "mamut", + "🦏": "rinoceronte", + "🐭": "cara de ratón", + "🐰": "cara de conejo", + "🐿️": "ardilla", + "🦔": "erizo", + "🦇": "murciélago", + "🐻": "oso", + "🐨": "koala", + "🦥": "perezoso", + "🦦": "nutria", + "🦘": "canguro", + "🐥": "pollito de frente", + "🐦️": "pájaro", + "🕊️": "paloma", + "🦆": "pato", + "🦉": "búho", + "🦤": "dodo", + "🪶": "pluma", + "🦩": "flamenco", + "🦚": "pavo real", + "🦜": "loro", + "🐊": "cocodrilo", + "🐢": "tortuga", + "🦎": "lagarto", + "🐍": "serpiente", + "🐲": "cara de dragón", + "🦕": "saurópodo", + "🐳": "ballena soltando un chorro", + "🐬": "delfín", + "🦭": "foca", + "🐟️": "pez", + "🐠": "pez tropical", + "🦈": "tiburón", + "🐙": "pulpo", + "🐚": "concha de mar", + "🐌": "caracol", + "🦋": "mariposa", + "🐛": "bicho", + "🐝": "abeja", + "🐞": "mariquita", + "💐": "ramo de flores", + "🌹": "rosa", + "🌺": "flor de hibisco", + "🌻": "girasol", + "🌷": "tulipán", + "🌲": "árbol de hoja perenne", + "🌳": "árbol de hoja caduca", + "🌴": "palmera", + "🌵": "cactus", + "🌿": "hierba", + "🍁": "hoja de arce", + "🍇": "uvas", + "🍈": "melón", + "🍉": "sandía", + "🍊": "mandarina", + "🍋": "limón", + "🍌": "plátano", + "🍍": "piña", + "🥭": "mango", + "🍏": "manzana verde", + "🍐": "pera", + "🍑": "melocotón", + "🍒": "cerezas", + "🍓": "fresa", + "🫐": "arándanos", + "🥝": "kiwi", + "🍅": "tomate", + "🫒": "aceituna", + "🥥": "coco", + "🥑": "aguacate", + "🍆": "berenjena", + "🥕": "zanahoria", + "🌽": "espiga de maíz", + "🌶️": "chile picante", + "🥬": "verdura de hoja verde", + "🥦": "brócoli", + "🧅": "cebolla", + "🍄": "champiñón", + "🥜": "cacahuetes", + "🥐": "cruasán", + "🥖": "baguete", + "🥨": "bretzel", + "🥯": "bagel", + "🥞": "tortitas", + "🧇": "gofre", + "🍔": "hamburguesa", + "🍕": "pizza", + "🌭": "perrito caliente", + "🌮": "taco", + "🍿": "palomitas", + "🦀": "cangrejo", + "🦞": "bogavante", + "🍨": "helado", + "🍩": "dónut", + "🍪": "galleta", + "🎂": "tarta de cumpleaños", + "🧁": "magdalena", + "🍫": "tableta de chocolate", + "🍬": "caramelo", + "🍭": "piruleta", + "🫖": "tetera", + "🧃": "tetrabrik", + "🧉": "mate", + "🧭": "brújula", + "🏔️": "montaña con nieve", + "🌋": "volcán", + "🏕️": "camping", + "🏝️": "isla desierta", + "🏡": "casa con jardín", + "⛲️": "fuente", + "🎠": "caballo de tiovivo", + "🎡": "noria de feria", + "🎢": "montaña rusa", + "💈": "poste de barbero", + "🚆": "tren", + "🚋": "vagón de tranvía", + "🚍️": "autobús próximo", + "🚕": "taxi", + "🚗": "coche", + "🚚": "camión de reparto", + "🚜": "tractor", + "🛵": "scooter", + "🛺": "mototaxi", + "🛴": "patinete", + "🛹": "monopatín", + "🛼": "patines", + "⚓️": "ancla", + "⛵️": "velero", + "🛶": "canoa", + "🚤": "lancha motora", + "🚢": "barco", + "✈️": "avión", + "🚁": "helicóptero", + "🚠": "teleférico de montaña", + "🛰️": "satélite", + "🚀": "cohete", + "🛸": "platillo volante", + "⏰": "reloj despertador", + "🌙": "luna", + "🌡️": "termómetro", + "☀️": "sol", + "🪐": "planeta con anillos", + "🌟": "estrella brillante", + "🌀": "ciclón", + "🌈": "arcoíris", + "☂️": "paraguas", + "❄️": "copo de nieve", + "☄️": "meteorito", + "🔥": "fuego", + "💧": "gota", + "🌊": "ola de mar", + "🎃": "calabaza de Halloween", + "✨": "chispas", + "🎈": "globo", + "🎉": "cañón de confeti", + "🎏": "banderín de carpas", + "🎀": "lazo", + "🎁": "regalo", + "🎟️": "entradas", + "🏆️": "trofeo", + "⚽️": "balón de fútbol", + "🏀": "balón de baloncesto", + "🏈": "balón de fútbol americano", + "🎾": "pelota de tenis", + "🥏": "disco volador", + "🏓": "tenis de mesa", + "🏸": "bádminton", + "🤿": "máscara de buceo", + "🥌": "piedra de curling", + "🎯": "diana", + "🪀": "yoyó", + "🪁": "cometa", + "🔮": "bola de cristal", + "🎲": "dado", + "🧩": "pieza de puzle", + "🎨": "paleta de pintor", + "🧵": "hilo", + "👕": "camiseta", + "🧦": "calcetines", + "👗": "vestido", + "🩳": "pantalones cortos", + "🎒": "mochila escolar", + "👟": "zapatilla deportiva", + "👑": "corona", + "🧢": "gorra con visera", + "💄": "pintalabios", + "💍": "anillo", + "💎": "piedra preciosa", + "📢": "altavoz de mano", + "🎶": "notas musicales", + "🎙️": "micrófono de estudio", + "📻️": "radio", + "🎷": "saxofón", + "🪗": "acordeón", + "🎸": "guitarra", + "🎺": "trompeta", + "🎻": "violín", + "🪕": "banjo", + "🥁": "tambor", + "☎️": "teléfono", + "🔋": "pila", + "💿️": "disco óptico", + "🧮": "ábaco", + "🎬️": "claqueta", + "💡": "bombilla", + "🔦": "linterna", + "🏮": "lámpara japonesa", + "📕": "libro cerrado", + "🏷️": "etiqueta", + "💳️": "tarjeta de crédito", + "✏️": "lápiz", + "🖌️": "pincel", + "🖍️": "lápiz de cera", + "📌": "chincheta", + "📎": "clip", + "🔑": "llave", + "🪃": "bumerán", + "🏹": "arco y flecha", + "⚖️": "balanza", + "🧲": "imán", + "🧪": "tubo de ensayo", + "🧬": "adn", + "🔬": "microscopio", + "🔭": "telescopio", + "📡": "antena de satélite", + "🪑": "silla", + "🧹": "escoba", + "🗿": "estatua moái" + }, + "fa": { + "👽️": "موجود فضایی", + "🤖": "روبات", + "🧠": "مغز", + "👁️": "چشم", + "🧙": "ساحر", + "🧚": "پری", + "🧜": "دریامردمان", + "🐵": "صورت میمون", + "🦧": "اورانگوتان", + "🐶": "صورت سگ", + "🐺": "گرگ", + "🦊": "روباه", + "🦝": "راکون", + "🐱": "صورت گربه", + "🦁": "شیر", + "🐯": "صورت ببر", + "🐴": "صورت اسب", + "🦄": "تکشاخ", + "🦓": "گورخر", + "🦌": "گوزن", + "🐮": "صورت گاو", + "🐷": "صورت خوک", + "🐗": "گراز نر", + "🐪": "شتر", + "🦙": "لاما", + "🦒": "زرافه", + "🐘": "فیل", + "🦣": "ماموت", + "🦏": "کرگدن", + "🐭": "صورت موش", + "🐰": "صورت خرگوش", + "🐿️": "سنجاب راهراه", + "🦔": "جوجهتیغی", + "🦇": "خفاش", + "🐻": "خرس", + "🐨": "کوآلا", + "🦥": "تنبل", + "🦦": "سمور آبی", + "🦘": "کانگورو", + "🐥": "جوجه از روبرو", + "🐦️": "پرنده", + "🕊️": "کبوتر", + "🦆": "مرغابی", + "🦉": "جغد", + "🦤": "دودو", + "🪶": "پَر", + "🦩": "فلامینگو", + "🦚": "طاووس", + "🦜": "طوطی", + "🐊": "تمساح", + "🐢": "لاکپشت", + "🦎": "مارمولک", + "🐍": "مار", + "🐲": "صورت اژدها", + "🦕": "سوسمار", + "🐳": "نهنگ در حال آبفشانی", + "🐬": "دلفین", + "🦭": "فُک", + "🐟️": "ماهی", + "🐠": "ماهی استوایی", + "🦈": "کوسه", + "🐙": "هشتپا", + "🐚": "صدف مارپیچی", + "🐌": "حلزون", + "🦋": "پروانه", + "🐛": "حشره", + "🐝": "زنبور عسل", + "🐞": "کفشدوزک", + "💐": "دسته گل", + "🌹": "رز", + "🌺": "گل ختمی", + "🌻": "گل آفتابگردان", + "🌷": "لاله", + "🌲": "همیشهسبز", + "🌳": "درخت سبز", + "🌴": "نخل", + "🌵": "کاکتوس", + "🌿": "گیاه دارویی", + "🍁": "برگ افرا", + "🍇": "انگور", + "🍈": "طالبی", + "🍉": "هندوانه", + "🍊": "نارنگی", + "🍋": "لیمو ترش", + "🍌": "موز", + "🍍": "آناناس", + "🥭": "انبه", + "🍏": "سیب سبز", + "🍐": "گلابی", + "🍑": "هلو", + "🍒": "گیلاس", + "🍓": "توتفرنگی", + "🫐": "توت آبی", + "🥝": "کیوی", + "🍅": "گوجهفرنگی", + "🫒": "زیتون", + "🥥": "نارگیل", + "🥑": "آووکادو", + "🍆": "بادمجان", + "🥕": "هویج", + "🌽": "بلال ذرت", + "🌶️": "فلفل قرمز", + "🥬": "برگسبز", + "🥦": "بروکلی", + "🧅": "پیاز", + "🍄": "قارچ", + "🥜": "بادام زمینی", + "🥐": "کرواسان", + "🥖": "نان باگت", + "🥨": "چوبشور", + "🥯": "نان بیگل", + "🥞": "پنکیک", + "🧇": "وافل", + "🍔": "همبرگر", + "🍕": "پیتزا", + "🌭": "هات داگ", + "🌮": "تاکو", + "🍿": "ذرت بوداده", + "🦀": "خرچنگ", + "🦞": "لابستر", + "🍨": "بستنی", + "🍩": "دونات", + "🍪": "کلوچه", + "🎂": "کیک تولد", + "🧁": "کیک فنجانی", + "🍫": "تخته شکلات", + "🍬": "آبنبات", + "🍭": "آبنباتچوبی", + "🫖": "قوری", + "🧃": "پاکت نوشیدنی", + "🧉": "ماته", + "🧭": "قطبنما", + "🏔️": "قلهٔ برفی", + "🌋": "آتشفشان", + "🏕️": "چادرزنی", + "🏝️": "جزیرهٔ خالی از سکنه", + "🏡": "خانهٔ حیاطدار", + "⛲️": "فواره", + "🎠": "چرخوفلک اسبی", + "🎡": "چرخوفلک", + "🎢": "ترن هوایی", + "💈": "چراغ سلمانی", + "🚆": "قطار", + "🚋": "قطار خیابانی", + "🚍️": "اتوبوس روبهجلو", + "🚕": "تاکسی", + "🚗": "خودرو", + "🚚": "کامیون پخش", + "🚜": "تراکتور", + "🛵": "اسکوتر", + "🛺": "اتوریکشا", + "🛴": "چرخ پایی", + "🛹": "تختهٔ اسکیت", + "🛼": "کفش اسکیت", + "⚓️": "لنگر", + "⛵️": "قایق بادبانی", + "🛶": "بلم", + "🚤": "قایق تندرو", + "🚢": "کشتی", + "✈️": "هواپیما", + "🚁": "هلیکوپتر", + "🚠": "تلهکابین کوهستانی", + "🛰️": "ماهواره", + "🚀": "موشک", + "🛸": "بشقابپرنده", + "⏰": "ساعت رومیزی", + "🌙": "هلال ماه", + "🌡️": "دماسنج", + "☀️": "خورشید", + "🪐": "سیاره حلقهدار", + "🌟": "ستاره درخشان", + "🌀": "چرخند", + "🌈": "رنگین کمان", + "☂️": "چتر", + "❄️": "برفدانه", + "☄️": "ستاره دنبالهدار", + "🔥": "آتش", + "💧": "قطره", + "🌊": "موج آب", + "🎃": "فانوس کدو تنبل", + "✨": "درخشش", + "🎈": "بادکنک", + "🎉": "بمب کاغذ رنگی", + "🎏": "پرچمهای ماهی در باد", + "🎀": "روبان", + "🎁": "هدیهٔ کادوشده", + "🎟️": "بلیت ورود", + "🏆️": "جام ورزشی", + "⚽️": "توپ فوتبال", + "🏀": "بسکتبال", + "🏈": "فوتبال امریکایی", + "🎾": "تنیس", + "🥏": "فریزبی", + "🏓": "پینگپونگ", + "🏸": "بدمینتون", + "🤿": "ماسک غواصی", + "🥌": "سنگ کرلینگ", + "🎯": "پیکان در قلب هدف", + "🪀": "یویو", + "🪁": "بادبادک", + "🔮": "گوی", + "🎲": "تاس بازی", + "🧩": "قطعه پازل", + "🎨": "پالت نقاشی", + "🧵": "نخ", + "👕": "تیشرت", + "🧦": "جوراب", + "👗": "پیراهن زنانه", + "🩳": "شلوارک", + "🎒": "کولهپشتی", + "👟": "کفش دویدن", + "👑": "تاج", + "🧢": "کلاه لبهدار", + "💄": "رژلب", + "💍": "حلقه", + "💎": "جواهر", + "📢": "بلندگو", + "🎶": "نتهای موسیقی", + "🎙️": "میکروفون استودیویی", + "📻️": "رادیو", + "🎷": "ساکسیفون", + "🪗": "آکوردئون", + "🎸": "گیتار", + "🎺": "ترومپت", + "🎻": "ویولن", + "🪕": "بانجو", + "🥁": "طبل", + "☎️": "تلفن", + "🔋": "باتری", + "💿️": "سیدی", + "🧮": "چرتکه", + "🎬️": "کلاکت", + "💡": "لامپ", + "🔦": "چراغقوه", + "🏮": "فانوس کاغذی قرمز", + "📕": "کتاب بسته", + "🏷️": "برچسب", + "💳️": "کارت اعتباری", + "✏️": "مداد", + "🖌️": "قلممو", + "🖍️": "مدادشمعی", + "📌": "سنجاق", + "📎": "گیرهٔ کاغذ", + "🔑": "کلید", + "🪃": "بومرنگ", + "🏹": "تیر و کمان", + "⚖️": "ترازو", + "🧲": "آهنربا", + "🧪": "لولهٔ آزمایشگاه", + "🧬": "دیانای", + "🔬": "میکروسکوپ", + "🔭": "تلسکوپ", + "📡": "آنتن ماهواره", + "🪑": "صندلی", + "🧹": "جارو", + "🗿": "سردیس موآی" + }, + "fr": { + "👽️": "alien", + "🤖": "robot", + "🧠": "cerveau", + "👁️": "œil", + "🧙": "mage", + "🧚": "personnage féérique", + "🧜": "créature aquatique", + "🐵": "tête de singe", + "🦧": "orang-outan", + "🐶": "tête de chien", + "🐺": "loup", + "🦊": "renard", + "🦝": "raton laveur", + "🐱": "tête de chat", + "🦁": "tête de lion", + "🐯": "tête de tigre", + "🐴": "tête de cheval", + "🦄": "licorne", + "🦓": "zèbre", + "🦌": "cerf", + "🐮": "tête de vache", + "🐷": "tête de cochon", + "🐗": "sanglier", + "🐪": "dromadaire", + "🦙": "lama", + "🦒": "girafe", + "🐘": "éléphant", + "🦣": "mammouth", + "🦏": "rhinocéros", + "🐭": "tête de souris", + "🐰": "tête de lapin", + "🐿️": "écureuil", + "🦔": "hérisson", + "🦇": "chauve-souris", + "🐻": "ours", + "🐨": "koala", + "🦥": "paresseux", + "🦦": "loutre", + "🦘": "kangourou", + "🐥": "poussin de face", + "🐦️": "oiseau", + "🕊️": "colombe", + "🦆": "canard", + "🦉": "chouette", + "🦤": "dodo", + "🪶": "plume", + "🦩": "flamant", + "🦚": "paon", + "🦜": "perroquet", + "🐊": "crocodile", + "🐢": "tortue", + "🦎": "lézard", + "🐍": "serpent", + "🐲": "tête de dragon", + "🦕": "sauropode", + "🐳": "baleine soufflant par son évent", + "🐬": "dauphin", + "🦭": "phoque", + "🐟️": "poisson", + "🐠": "poisson tropical", + "🦈": "requin", + "🐙": "pieuvre", + "🐚": "coquille en spirale", + "🐌": "escargot", + "🦋": "papillon", + "🐛": "chenille", + "🐝": "abeille", + "🐞": "coccinelle", + "💐": "bouquet", + "🌹": "rose", + "🌺": "hibiscus", + "🌻": "tournesol", + "🌷": "tulipe", + "🌲": "conifère", + "🌳": "arbre à feuilles caduques", + "🌴": "palmier", + "🌵": "cactus", + "🌿": "feuille", + "🍁": "feuille d’érable", + "🍇": "raisin", + "🍈": "melon", + "🍉": "pastèque", + "🍊": "mandarine", + "🍋": "citron", + "🍌": "banane", + "🍍": "ananas", + "🥭": "mangue", + "🍏": "pomme verte", + "🍐": "poire", + "🍑": "pêche", + "🍒": "cerises", + "🍓": "fraise", + "🫐": "myrtilles", + "🥝": "kiwi", + "🍅": "tomate", + "🫒": "olive", + "🥥": "noix de coco", + "🥑": "avocat", + "🍆": "aubergine", + "🥕": "carotte", + "🌽": "épi de maïs", + "🌶️": "piment rouge", + "🥬": "légume à feuilles vertes", + "🥦": "brocoli", + "🧅": "oignon", + "🍄": "champignon", + "🥜": "cacahuètes", + "🥐": "croissant", + "🥖": "baguette", + "🥨": "bretzel", + "🥯": "bagel", + "🥞": "pancakes", + "🧇": "gaufre", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "pop-corn", + "🦀": "crabe", + "🦞": "homard", + "🍨": "glace", + "🍩": "doughnut", + "🍪": "cookie", + "🎂": "gâteau d’anniversaire", + "🧁": "cupcake", + "🍫": "barre chocolatée", + "🍬": "bonbon", + "🍭": "sucette", + "🫖": "théière", + "🧃": "briquette de jus", + "🧉": "maté", + "🧭": "boussole", + "🏔️": "montagne enneigée", + "🌋": "volcan", + "🏕️": "camping", + "🏝️": "île déserte", + "🏡": "maison avec jardin", + "⛲️": "fontaine", + "🎠": "cheval de manège", + "🎡": "grande roue", + "🎢": "montagnes russes", + "💈": "enseigne de barbier", + "🚆": "train", + "🚋": "wagon de tramway", + "🚍️": "bus de face", + "🚕": "taxi", + "🚗": "voiture", + "🚚": "camion de livraison", + "🚜": "tracteur", + "🛵": "scooter", + "🛺": "tuk tuk", + "🛴": "trottinette", + "🛹": "planche à roulettes", + "🛼": "patin à roulettes", + "⚓️": "ancre", + "⛵️": "voilier", + "🛶": "canoë", + "🚤": "hors-bord", + "🚢": "navire", + "✈️": "avion", + "🚁": "hélicoptère", + "🚠": "téléphérique", + "🛰️": "satellite", + "🚀": "fusée", + "🛸": "soucoupe volante", + "⏰": "réveil", + "🌙": "croissant de lune", + "🌡️": "thermomètre", + "☀️": "soleil", + "🪐": "planète à anneaux", + "🌟": "étoile brillante", + "🌀": "cyclone", + "🌈": "arc-en-ciel", + "☂️": "parapluie ouvert", + "❄️": "flocon", + "☄️": "comète", + "🔥": "feu", + "💧": "goutte d’eau", + "🌊": "vague", + "🎃": "citrouille", + "✨": "étincelles", + "🎈": "ballon gonflable", + "🎉": "cotillons", + "🎏": "koinobori", + "🎀": "ruban", + "🎁": "cadeau", + "🎟️": "billet d’entrée", + "🏆️": "trophée", + "⚽️": "ballon de football", + "🏀": "basket", + "🏈": "football américain", + "🎾": "tennis", + "🥏": "disque volant", + "🏓": "ping-pong", + "🏸": "badminton", + "🤿": "masque de plongée", + "🥌": "pierre de curling", + "🎯": "dans le mille", + "🪀": "yoyo", + "🪁": "cerf-volant", + "🔮": "boule de cristal", + "🎲": "dés", + "🧩": "pièce de puzzle", + "🎨": "palette de peinture", + "🧵": "bobine de fil", + "👕": "T-shirt", + "🧦": "chaussettes", + "👗": "robe", + "🩳": "short", + "🎒": "cartable", + "👟": "chaussure de sport", + "👑": "couronne", + "🧢": "casquette américaine", + "💄": "rouge à lèvres", + "💍": "bague", + "💎": "pierre précieuse", + "📢": "haut-parleur", + "🎶": "notes de musique", + "🎙️": "micro de studio", + "📻️": "radio", + "🎷": "saxophone", + "🪗": "accordéon", + "🎸": "guitare", + "🎺": "trompette", + "🎻": "violon", + "🪕": "banjo", + "🥁": "batterie", + "☎️": "téléphone", + "🔋": "pile", + "💿️": "CD", + "🧮": "abaque", + "🎬️": "clap", + "💡": "ampoule", + "🔦": "torche", + "🏮": "lampion rouge", + "📕": "livre fermé", + "🏷️": "étiquette", + "💳️": "carte bancaire", + "✏️": "crayon", + "🖌️": "pinceau", + "🖍️": "crayon pastel", + "📌": "punaise", + "📎": "trombone", + "🔑": "clé", + "🪃": "boomerang", + "🏹": "arc et flèche", + "⚖️": "balance à poids", + "🧲": "aimant", + "🧪": "tube à essai", + "🧬": "adn", + "🔬": "microscope", + "🔭": "télescope", + "📡": "antenne satellite", + "🪑": "chaise", + "🧹": "balai", + "🗿": "moai" + }, + "ga": { + "👽️": "eachtrán", + "🤖": "róbat", + "🧠": "inchinn", + "👁️": "súil", + "🧙": "duine draíochta", + "🧚": "síog", + "🧜": "duine murúch", + "🐵": "aghaidh moncaí", + "🦧": "órang-útan", + "🐶": "aghaidh madra", + "🐺": "aghaidh mic tíre", + "🦊": "aghaidh sionnaigh", + "🦝": "racún", + "🐱": "aghaidh cait", + "🦁": "aghaidh leoin", + "🐯": "aghaidh tíogair", + "🐴": "aghaidh capaill", + "🦄": "aghaidh aonbheannaigh", + "🦓": "séabra", + "🦌": "fia", + "🐮": "aghaidh bó", + "🐷": "aghaidh muice", + "🐗": "torc", + "🐪": "camall", + "🦙": "láma", + "🦒": "sioráf", + "🐘": "eilifint", + "🦣": "mamat", + "🦏": "srónbheannach", + "🐭": "aghaidh luiche", + "🐰": "aghaidh coinín", + "🐿️": "iora talún", + "🦔": "gráinneog", + "🦇": "ialtóg", + "🐻": "aghaidh béair", + "🐨": "cóála", + "🦥": "spadán", + "🦦": "madra uisce", + "🦘": "cangarú", + "🐥": "gearrshicín éadain", + "🐦️": "éan", + "🕊️": "colm", + "🦆": "lacha", + "🦉": "ulchabhán", + "🦤": "dódó", + "🪶": "cleite", + "🦩": "lasairéan", + "🦚": "péacóg", + "🦜": "pearóid", + "🐊": "crogall", + "🐢": "turtar", + "🦎": "earc luachra", + "🐍": "nathair", + "🐲": "aghaidh dragain", + "🦕": "sárapód", + "🐳": "míol mór ag séideadh", + "🐬": "deilf", + "🦭": "rón", + "🐟️": "iasc", + "🐠": "iasc teochreasa", + "🦈": "siorc", + "🐙": "ochtapas", + "🐚": "sliogán", + "🐌": "seilide", + "🦋": "féileacán", + "🐛": "míol", + "🐝": "beach mheala", + "🐞": "bóín", + "💐": "crobhaing bláthanna", + "🌹": "rós", + "🌺": "roiseog", + "🌻": "lus na gréine", + "🌷": "tiúilip", + "🌲": "crann síorghlas", + "🌳": "crann duillsilteach", + "🌴": "pailm", + "🌵": "cachtas", + "🌿": "luibh", + "🍁": "duilleog mhailpe", + "🍇": "caora fíniúna", + "🍈": "mealbhacán", + "🍉": "mealbhacán uisce", + "🍊": "táinséirín", + "🍋": "líomóid", + "🍌": "banana", + "🍍": "anann", + "🥭": "mangó", + "🍏": "úll glas", + "🍐": "piorra", + "🍑": "péitseog", + "🍒": "silíní", + "🍓": "sú talún", + "🫐": "fraochán", + "🥝": "cíobhaí", + "🍅": "tráta", + "🫒": "ológ", + "🥥": "cnó cócó", + "🥑": "abhacád", + "🍆": "ubhthoradh", + "🥕": "meacan dearg", + "🌽": "dias arbhair", + "🌶️": "píobar te", + "🥬": "glasra duilleach", + "🥦": "brocailí", + "🧅": "oiniún", + "🍄": "beacán", + "🥜": "pis talún", + "🥐": "croissant", + "🥖": "baguette", + "🥨": "preatsal", + "🥯": "béigeal", + "🥞": "pancóga", + "🧇": "vaifeal", + "🍔": "burgar", + "🍕": "píotsa", + "🌭": "brocaire te", + "🌮": "taco", + "🍿": "grán rósta", + "🦀": "portán", + "🦞": "gliomach", + "🍨": "uachtar reoite", + "🍩": "taoschnó", + "🍪": "briosca", + "🎂": "cáca breithe", + "🧁": "cístín cupa", + "🍫": "seacláid", + "🍬": "milseán", + "🍭": "líreacán", + "🫖": "taephota", + "🧃": "bosca dí", + "🧉": "maité", + "🧭": "compás", + "🏔️": "sliabh le sneachta", + "🌋": "bolcán", + "🏕️": "ag campáil", + "🏝️": "oileán díthreibhe", + "🏡": "teach le gairdín", + "⛲️": "scairdeán", + "🎠": "capall an roithleagáin ró", + "🎡": "roth Ferris", + "🎢": "rollchóstóir", + "💈": "cuaille bearbóra", + "🚆": "traein", + "🚋": "carráiste tram", + "🚍️": "bus atá ag teacht", + "🚕": "tacsaí", + "🚗": "gluaisteán", + "🚚": "trucail seachadta", + "🚜": "tarracóir", + "🛵": "scútar", + "🛺": "ricseá uathoibríoch", + "🛴": "scútar gan inneall", + "🛹": "clár scátála", + "🛼": "scáta rothach", + "⚓️": "ancaire", + "⛵️": "bád seoil", + "🛶": "canú", + "🚤": "luasbhád", + "🚢": "long", + "✈️": "eitleán", + "🚁": "héileacaptar", + "🚠": "cáblabhealach sléibhe", + "🛰️": "satailít", + "🚀": "roicéad", + "🛸": "sásar eitilte", + "⏰": "clog aláraim", + "🌙": "corrán gealaí", + "🌡️": "teirmiméadar", + "☀️": "grian", + "🪐": "pláinéad le fáinne", + "🌟": "réalta ag lonrú", + "🌀": "cioclón", + "🌈": "bogha báistí", + "☂️": "scáth báistí", + "❄️": "calóg shneachta", + "☄️": "cóiméad", + "🔥": "tine", + "💧": "braoinín", + "🌊": "tonn san uisce", + "🎃": "Seán na gealaí", + "✨": "drithlí", + "🎈": "balún", + "🎉": "pléiscín cóisire", + "🎏": "sraoilleán éisc", + "🎀": "ribín", + "🎁": "bronntanas", + "🎟️": "ticéid cead isteach", + "🏆️": "corn", + "⚽️": "liathróid sacair", + "🏀": "cispheil", + "🏈": "peil Mheiriceánach", + "🎾": "leadóg", + "🥏": "diosca eitilte", + "🏓": "ping pang", + "🏸": "badmantan", + "🤿": "masc tumadóireachta", + "🥌": "cloch churlála", + "🎯": "buille díreach", + "🪀": "yó-yó", + "🪁": "eitleog", + "🔮": "cruinneog chriostail", + "🎲": "dísle", + "🧩": "mír mearaí", + "🎨": "pailéad dathanna", + "🧵": "snáth", + "👕": "t-léine", + "🧦": "stocaí", + "👗": "gúna", + "🩳": "brístí gearra", + "🎒": "mála scoile", + "👟": "bróg reatha", + "👑": "coróin", + "🧢": "caipín speiceach", + "💄": "béaldath", + "💍": "fáinne", + "💎": "geamchloch", + "📢": "callaire", + "🎶": "nótaí ceoil", + "🎙️": "micreafón stiúideo", + "📻️": "raidió", + "🎷": "sacsafón", + "🪗": "bosca ceoil", + "🎸": "giotár", + "🎺": "trumpa", + "🎻": "veidhlín", + "🪕": "bainseó", + "🥁": "druma", + "☎️": "teileafón", + "🔋": "ceallra", + "💿️": "diosca optúil", + "🧮": "abacas", + "🎬️": "clabaire", + "💡": "bolgán solais", + "🔦": "tóirse", + "🏮": "laindéar dearg", + "📕": "leabhar dúnta", + "🏷️": "lipéad", + "💳️": "cárta creidmheasa", + "✏️": "peann luaidhe", + "🖌️": "scuab phéinteála", + "🖍️": "crián", + "📌": "tacóid ordóige", + "📎": "fáiscín páipéir", + "🔑": "eochair", + "🪃": "búmarang", + "🏹": "saighead is bogha", + "⚖️": "scála", + "🧲": "maighnéad", + "🧪": "triaileadán", + "🧬": "ADN", + "🔬": "micreascóp", + "🔭": "teileascóp", + "📡": "aeróg satailíte", + "🪑": "cathaoir", + "🧹": "scruab", + "🗿": "dealbh Oileán na Cásca" + }, + "he": { + "👽️": "חייזר", + "🤖": "רובוט", + "🧠": "מוח", + "👁️": "עין", + "🧙": "קוסם", + "🧚": "פיה", + "🧜": "בתולת ים", + "🐵": "פני קוף", + "🦧": "אורנגאוטן", + "🐶": "פני כלב", + "🐺": "זאב", + "🦊": "שועל", + "🦝": "רקון", + "🐱": "פני חתול", + "🦁": "אריה", + "🐯": "פני טיגריס", + "🐴": "פני סוס", + "🦄": "חד קרן", + "🦓": "זברה", + "🦌": "אייל", + "🐮": "פני פרה", + "🐷": "פני חזיר", + "🐗": "חזיר בר", + "🐪": "גמל", + "🦙": "למה", + "🦒": "ג׳ירף", + "🐘": "פיל", + "🦣": "ממותה", + "🦏": "קרנף", + "🐭": "פני עכבר", + "🐰": "פני ארנב", + "🐿️": "סנאי", + "🦔": "קיפוד", + "🦇": "עטלף", + "🐻": "דוב", + "🐨": "קואלה", + "🦥": "עצלן", + "🦦": "לוטרה", + "🦘": "קנגורו", + "🐥": "אפרוח מלפנים", + "🐦️": "ציפור", + "🕊️": "יונה", + "🦆": "ברווז", + "🦉": "ינשוף", + "🦤": "ציפור דודו", + "🪶": "נוצה", + "🦩": "פלמינגו", + "🦚": "טווס", + "🦜": "תוכי", + "🐊": "תנין", + "🐢": "צב", + "🦎": "לטאה", + "🐍": "נחש", + "🐲": "פני דרקון", + "🦕": "סרופוד", + "🐳": "לווייתן מתיז סילון מים", + "🐬": "דולפין", + "🦭": "כלב ים", + "🐟️": "דג", + "🐠": "דג טרופי", + "🦈": "כריש", + "🐙": "תמנון", + "🐚": "צדף מסולסל", + "🐌": "חלזון", + "🦋": "פרפר", + "🐛": "זחל", + "🐝": "דבורה", + "🐞": "פרת משה רבנו", + "💐": "זר פרחים", + "🌹": "ורד", + "🌺": "היביסקוס", + "🌻": "חמניה", + "🌷": "צבעוני", + "🌲": "עץ ירוק-עד", + "🌳": "עץ נשיר", + "🌴": "עץ דקל", + "🌵": "קקטוס", + "🌿": "צמח תבלין", + "🍁": "עלה מייפל", + "🍇": "ענבים", + "🍈": "מלון", + "🍉": "אבטיח", + "🍊": "קלמנטינה", + "🍋": "לימון", + "🍌": "בננה", + "🍍": "אננס", + "🥭": "מנגו", + "🍏": "תפוח ירוק", + "🍐": "אגס", + "🍑": "אפרסק", + "🍒": "דובדבנים", + "🍓": "תות שדה", + "🫐": "אוכמניות", + "🥝": "קיווי", + "🍅": "עגבנייה", + "🫒": "זית", + "🥥": "קוקוס", + "🥑": "אבוקדו", + "🍆": "חציל", + "🥕": "גזר", + "🌽": "קלח תירס", + "🌶️": "פלפל חריף", + "🥬": "עלים ירוקים", + "🥦": "ברוקולי", + "🧅": "בצל", + "🍄": "פטריה", + "🥜": "בוטנים", + "🥐": "קרואסון", + "🥖": "באגט", + "🥨": "בייגלה", + "🥯": "בייגל", + "🥞": "פנקייקס", + "🧇": "וופל", + "🍔": "המבורגר", + "🍕": "פיצה", + "🌭": "נקניקייה בלחמניה", + "🌮": "טאקו", + "🍿": "פופקורן", + "🦀": "סרטן", + "🦞": "לובסטר", + "🍨": "גלידה", + "🍩": "סופגניה", + "🍪": "עוגיה", + "🎂": "עוגת יום הולדת", + "🧁": "קפקייק", + "🍫": "חפיסת שוקולד", + "🍬": "סוכריה", + "🍭": "סוכריה על מקל", + "🫖": "קנקן תה", + "🧃": "קופסת מיץ", + "🧉": "מאטה", + "🧭": "מצפן", + "🏔️": "הר עם פסגה מושלגת", + "🌋": "הר געש", + "🏕️": "מחנאות", + "🏝️": "אי בודד", + "🏡": "בית עם גינה", + "⛲️": "מזרקה", + "🎠": "סוס בקרוסלה", + "🎡": "גלגל ענק", + "🎢": "רכבת הרים", + "💈": "עמוד מספרה", + "🚆": "רכבת", + "🚋": "קרון חשמלית", + "🚍️": "אוטובוס מלפנים", + "🚕": "מונית", + "🚗": "מכונית", + "🚚": "משאית", + "🚜": "טרקטור", + "🛵": "קטנוע", + "🛺": "ריקשה ממונעת", + "🛴": "קורקינט", + "🛹": "סקייטבורד", + "🛼": "גלגיליות", + "⚓️": "עוגן", + "⛵️": "סירת מפרש", + "🛶": "קאנו", + "🚤": "סירת מירוץ", + "🚢": "ספינה", + "✈️": "מטוס", + "🚁": "מסוק", + "🚠": "קרון רכבל", + "🛰️": "לוויין", + "🚀": "טיל", + "🛸": "צלחת מעופפת", + "⏰": "שעון מעורר", + "🌙": "סהר", + "🌡️": "מדחום", + "☀️": "שמש", + "🪐": "כוכב לכת עם טבעות", + "🌟": "כוכב זוהר", + "🌀": "הוריקן", + "🌈": "קשת בענן", + "☂️": "מטריה", + "❄️": "פתית שלג", + "☄️": "שביט", + "🔥": "אש", + "💧": "טיפה", + "🌊": "גל", + "🎃": "מנורת דלעת", + "✨": "נצנוץ", + "🎈": "בלון", + "🎉": "פצצת קונפטי", + "🎏": "דגלים בצורת דגי קוי", + "🎀": "סרט מתנה", + "🎁": "קופסת מתנה", + "🎟️": "כרטיס כניסה", + "🏆️": "גביע", + "⚽️": "כדורגל", + "🏀": "כדור סל", + "🏈": "פוטבול אמריקאי", + "🎾": "כדור טניס", + "🥏": "פריזבי", + "🏓": "פינג פונג", + "🏸": "בדמינטון", + "🤿": "מסיכת צלילה", + "🥌": "אבן קרלינג", + "🎯": "פגיעה בול", + "🪀": "יו-יו", + "🪁": "עפיפון", + "🔮": "כדור בדולח", + "🎲": "קוביית משחק", + "🧩": "חלק בפאזל", + "🎨": "פלטת צבעים", + "🧵": "חוט", + "👕": "חולצת טי", + "🧦": "גרביים", + "👗": "שמלה", + "🩳": "מכנסיים קצרים", + "🎒": "ילקוט", + "👟": "נעל ריצה", + "👑": "כתר", + "🧢": "כובע מצחייה", + "💄": "שפתון", + "💍": "טבעת", + "💎": "יהלום", + "📢": "מגפון", + "🎶": "תווים מוזיקליים", + "🎙️": "מיקרופון אולפן", + "📻️": "רדיו", + "🎷": "סקסופון", + "🪗": "אקורדיון", + "🎸": "גיטרה", + "🎺": "חצוצרה", + "🎻": "כינור", + "🪕": "בנג׳ו", + "🥁": "תוף", + "☎️": "טלפון רגיל", + "🔋": "סוללה", + "💿️": "דיסק אופטי", + "🧮": "חשבונייה", + "🎬️": "קלאפר", + "💡": "נורה", + "🔦": "פנס", + "🏮": "פנס נייר אדום", + "📕": "ספר סגור", + "🏷️": "תווית", + "💳️": "כרטיס אשראי", + "✏️": "עיפרון", + "🖌️": "מכחול", + "🖍️": "צבע פנדה", + "📌": "נעץ", + "📎": "אטב נייר", + "🔑": "מפתח", + "🪃": "בומרנג", + "🏹": "חץ וקשת", + "⚖️": "מאזניים", + "🧲": "מגנט", + "🧪": "מבחנה", + "🧬": "די אנ איי", + "🔬": "מיקרוסקופ", + "🔭": "טלסקופ", + "📡": "צלחת לוויין", + "🪑": "כיסא", + "🧹": "מטאטא", + "🗿": "פסל מאיי הפסחא" + }, + "hu": { + "👽️": "földönkívüli", + "🤖": "robot", + "🧠": "agy", + "👁️": "szem", + "🧙": "varázsló", + "🧚": "tündér", + "🧜": "sellő", + "🐵": "majomfej", + "🦧": "orangután", + "🐶": "kutyafej", + "🐺": "farkasfej", + "🦊": "rókafej", + "🦝": "mosómedve", + "🐱": "macskafej", + "🦁": "oroszlánfej", + "🐯": "tigrisfej", + "🐴": "lófej", + "🦄": "unikornisfej", + "🦓": "zebra", + "🦌": "szarvas", + "🐮": "tehénfej", + "🐷": "malacfej", + "🐗": "vaddisznó", + "🐪": "teve", + "🦙": "láma", + "🦒": "zsiráf", + "🐘": "elefánt", + "🦣": "mamut", + "🦏": "orrszarvú", + "🐭": "egérfej", + "🐰": "nyúlfej", + "🐿️": "mókus", + "🦔": "sün", + "🦇": "denevér", + "🐻": "medvefej", + "🐨": "koala", + "🦥": "lajhár", + "🦦": "vidra", + "🦘": "kenguru", + "🐥": "előre néző kiscsibe", + "🐦️": "madár", + "🕊️": "galamb", + "🦆": "kacsa", + "🦉": "bagoly", + "🦤": "dodó", + "🪶": "madártoll", + "🦩": "flamingó", + "🦚": "páva", + "🦜": "papagáj", + "🐊": "krokodil", + "🐢": "teknős", + "🦎": "gyík", + "🐍": "kígyó", + "🐲": "sárkányfej", + "🦕": "sauropoda", + "🐳": "fröcskölő bálna", + "🐬": "delfin", + "🦭": "fóka", + "🐟️": "hal", + "🐠": "trópusi hal", + "🦈": "cápa", + "🐙": "polip", + "🐚": "tengeri csiga", + "🐌": "csiga", + "🦋": "pillangó", + "🐛": "rovar", + "🐝": "méh", + "🐞": "katica", + "💐": "csokor", + "🌹": "rózsa", + "🌺": "hibiszkusz", + "🌻": "napraforgó", + "🌷": "tulipán", + "🌲": "örökzöld", + "🌳": "lombhullató fa", + "🌴": "pálmafa", + "🌵": "kaktusz", + "🌿": "gyógynövény", + "🍁": "juharlevél", + "🍇": "szőlő", + "🍈": "sárgadinnye", + "🍉": "görögdinnye", + "🍊": "mandarin", + "🍋": "citrom", + "🍌": "banán", + "🍍": "ananász", + "🥭": "mangó", + "🍏": "zöld alma", + "🍐": "körte", + "🍑": "őszibarack", + "🍒": "cseresznye", + "🍓": "eper", + "🫐": "áfonya", + "🥝": "kivi", + "🍅": "paradicsom", + "🫒": "olajbogyó", + "🥥": "kókuszdió", + "🥑": "avokádó", + "🍆": "padlizsán", + "🥕": "sárgarépa", + "🌽": "kukoricacső", + "🌶️": "erőspaprika", + "🥬": "leveles zöldség", + "🥦": "brokkoli", + "🧅": "hagyma", + "🍄": "gomba", + "🥜": "földimogyoró", + "🥐": "croissant", + "🥖": "bagett", + "🥨": "perec", + "🥯": "bagel", + "🥞": "palacsinta", + "🧇": "gofri", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "pattogatott kukorica", + "🦀": "rák", + "🦞": "homár", + "🍨": "fagylalt", + "🍩": "fánk", + "🍪": "sütemény", + "🎂": "születésnapi torta", + "🧁": "cupcake", + "🍫": "csokoládé", + "🍬": "cukorka", + "🍭": "nyalóka", + "🫖": "teáskanna", + "🧃": "italos doboz", + "🧉": "maté", + "🧭": "iránytű", + "🏔️": "hegy hótakaróval", + "🌋": "vulkán", + "🏕️": "sátorozás", + "🏝️": "lakatlan sziget", + "🏡": "ház kerttel", + "⛲️": "szökőkút", + "🎠": "ló a körhintáról", + "🎡": "óriáskerék", + "🎢": "hullámvasút", + "💈": "fodrászcégér", + "🚆": "vonat", + "🚋": "villamoskocsi", + "🚍️": "érkező busz", + "🚕": "taxi", + "🚗": "autó", + "🚚": "teherautó", + "🚜": "traktor", + "🛵": "robogó", + "🛺": "motoros riksa", + "🛴": "roller", + "🛹": "gördeszka", + "🛼": "görkorcsolya", + "⚓️": "vasmacska", + "⛵️": "vitorlás hajó", + "🛶": "kenu", + "🚤": "motoros siklócsónak", + "🚢": "hajó", + "✈️": "repülőgép", + "🚁": "helikopter", + "🚠": "hegyi felvonó", + "🛰️": "műhold", + "🚀": "rakéta", + "🛸": "repülő csészealj", + "⏰": "ébresztőóra", + "🌙": "növekvő hold", + "🌡️": "hőmérő", + "☀️": "nap", + "🪐": "gyűrűs bolygó", + "🌟": "fénylő csillag", + "🌀": "ciklon", + "🌈": "szivárvány", + "☂️": "esernyő", + "❄️": "hópehely", + "☄️": "üstökös", + "🔥": "tűz", + "💧": "csepp", + "🌊": "vízhullám", + "🎃": "töklámpás", + "✨": "szikrák", + "🎈": "léggömb", + "🎉": "partikellékek", + "🎏": "rizspapír pontyok", + "🎀": "szalag", + "🎁": "becsomagolt ajándék", + "🎟️": "belépőjegyek", + "🏆️": "kupa", + "⚽️": "foci", + "🏀": "kosárlabda", + "🏈": "amerikai foci", + "🎾": "tenisz", + "🥏": "frizbi", + "🏓": "pingpong", + "🏸": "tollaslabda", + "🤿": "búvármaszk", + "🥌": "curlingkő", + "🎯": "telitalálat", + "🪀": "jojó", + "🪁": "papírsárkány", + "🔮": "kristálygömb", + "🎲": "dobókocka", + "🧩": "kirakó", + "🎨": "festőpaletta", + "🧵": "cérna", + "👕": "póló", + "🧦": "zokni", + "👗": "ruha", + "🩳": "rövidnadrág", + "🎒": "iskolatáska", + "👟": "futócipő", + "👑": "korona", + "🧢": "sildes sapka", + "💄": "ajakrúzs", + "💍": "gyűrű", + "💎": "ékkő", + "📢": "hangosbeszélő", + "🎶": "hangjegyek", + "🎙️": "stúdiómikrofon", + "📻️": "rádió", + "🎷": "szaxofon", + "🪗": "harmonika", + "🎸": "gitár", + "🎺": "trombita", + "🎻": "hegedű", + "🪕": "bendzsó", + "🥁": "dob", + "☎️": "telefon", + "🔋": "elem", + "💿️": "optikai lemez", + "🧮": "abakusz", + "🎬️": "csapó", + "💡": "villanykörte", + "🔦": "zseblámpa", + "🏮": "piros papírlámpa", + "📕": "becsukott könyv", + "🏷️": "címke", + "💳️": "hitelkártya", + "✏️": "ceruza", + "🖌️": "ecset", + "🖍️": "zsírkréta", + "📌": "rajzszög", + "📎": "gemkapocs", + "🔑": "kulcs", + "🪃": "bumeráng", + "🏹": "íj és nyíl", + "⚖️": "kétkarú mérleg", + "🧲": "mágnes", + "🧪": "kémcső", + "🧬": "DNS", + "🔬": "mikroszkóp", + "🔭": "távcső", + "📡": "parabolaantenna", + "🪑": "szék", + "🧹": "seprű", + "🗿": "moai" + }, + "id": { + "👽️": "alien", + "🤖": "robot", + "🧠": "otak", + "👁️": "satu mata", + "🧙": "magi", + "🧚": "peri", + "🧜": "orang duyung", + "🐵": "wajah monyet", + "🦧": "orangutan", + "🐶": "wajah anjing", + "🐺": "serigala", + "🦊": "rubah", + "🦝": "rakun", + "🐱": "wajah kucing", + "🦁": "singa", + "🐯": "wajah harimau", + "🐴": "wajah kuda", + "🦄": "unicorn", + "🦓": "zebra", + "🦌": "rusa", + "🐮": "wajah sapi", + "🐷": "wajah babi", + "🐗": "babi hutan", + "🐪": "unta", + "🦙": "llama", + "🦒": "jerapah", + "🐘": "gajah", + "🦣": "mamut", + "🦏": "badak", + "🐭": "wajah tikus", + "🐰": "wajah kelinci", + "🐿️": "tupai", + "🦔": "landak", + "🦇": "kelelawar", + "🐻": "beruang", + "🐨": "koala", + "🦥": "kungkang", + "🦦": "berang-berang", + "🦘": "kanguru", + "🐥": "itik bayi menghadap ke depan", + "🐦️": "burung", + "🕊️": "merpati", + "🦆": "bebek", + "🦉": "burung hantu", + "🦤": "dodo", + "🪶": "bulu", + "🦩": "flamingo", + "🦚": "merak", + "🦜": "nuri", + "🐊": "buaya", + "🐢": "kura-kura", + "🦎": "kadal", + "🐍": "ular", + "🐲": "wajah naga", + "🦕": "sauropod", + "🐳": "ikan paus menyembur", + "🐬": "lumba-lumba", + "🦭": "anjing laut", + "🐟️": "ikan", + "🐠": "ikan tropis", + "🦈": "hiu", + "🐙": "gurita", + "🐚": "cangkang spiral", + "🐌": "siput", + "🦋": "kupu-kupu", + "🐛": "serangga kecil", + "🐝": "lebah madu", + "🐞": "kumbang betina", + "💐": "karangan bunga", + "🌹": "mawar", + "🌺": "kembang sepatu", + "🌻": "bunga matahari", + "🌷": "tulip", + "🌲": "pohon hijau abadi", + "🌳": "pohon meranggas", + "🌴": "pohon palem", + "🌵": "kaktus", + "🌿": "herba", + "🍁": "daun maple", + "🍇": "anggur", + "🍈": "melon", + "🍉": "semangka", + "🍊": "buah jeruk", + "🍋": "lemon", + "🍌": "pisang", + "🍍": "nanas", + "🥭": "mangga", + "🍏": "apel hijau", + "🍐": "pir", + "🍑": "persik", + "🍒": "ceri", + "🍓": "stroberi", + "🫐": "blueberry", + "🥝": "buah kiwi", + "🍅": "tomat", + "🫒": "zaitun", + "🥥": "kelapa", + "🥑": "alpukat", + "🍆": "terung", + "🥕": "wortel", + "🌽": "bonggol jagung", + "🌶️": "cabai pedas", + "🥬": "selada hijau", + "🥦": "brokoli", + "🧅": "bawang bombay", + "🍄": "jamur", + "🥜": "kacang tanah", + "🥐": "croissant", + "🥖": "roti baguette", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "panekuk", + "🧇": "wafel", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "kepiting", + "🦞": "lobster", + "🍨": "es krim", + "🍩": "donat", + "🍪": "biskuit", + "🎂": "kue ulang tahun", + "🧁": "kue mangkuk", + "🍫": "sebatang cokelat", + "🍬": "permen", + "🍭": "permen lolipop", + "🫖": "teko", + "🧃": "kotak minuman", + "🧉": "teh mate", + "🧭": "kompas", + "🏔️": "gunung dengan puncak bersalju", + "🌋": "gunung berapi", + "🏕️": "berkemah", + "🏝️": "pulau terpencil", + "🏡": "rumah dengan taman", + "⛲️": "air mancur", + "🎠": "komidi putar", + "🎡": "kincir ria", + "🎢": "roller coaster", + "💈": "tanda salon", + "🚆": "kereta", + "🚋": "gerbong trem", + "🚍️": "bus datang", + "🚕": "taksi", + "🚗": "mobil", + "🚚": "truk pengiriman", + "🚜": "traktor", + "🛵": "motor skuter", + "🛺": "bajaj", + "🛴": "otoped", + "🛹": "papan luncur", + "🛼": "sepatu roda", + "⚓️": "jangkar", + "⛵️": "perahu layar", + "🛶": "kano", + "🚤": "perahu cepat", + "🚢": "kapal", + "✈️": "pesawat", + "🚁": "helikopter", + "🚠": "kereta gantung", + "🛰️": "satelit", + "🚀": "roket", + "🛸": "piring terbang", + "⏰": "jam weker", + "🌙": "bulan sabit", + "🌡️": "termometer", + "☀️": "matahari", + "🪐": "planet bercincin", + "🌟": "bintang bersinar", + "🌀": "topan", + "🌈": "pelangi", + "☂️": "payung", + "❄️": "serpihan salju", + "☄️": "komet", + "🔥": "api", + "💧": "tetesan air", + "🌊": "ombak", + "🎃": "jack-o-lantern", + "✨": "berkilau", + "🎈": "balon", + "🎉": "party popper", + "🎏": "bendera ikan koi", + "🎀": "pita", + "🎁": "kado", + "🎟️": "tiket masuk", + "🏆️": "piala", + "⚽️": "bola sepak", + "🏀": "bola basket", + "🏈": "American football", + "🎾": "tenis", + "🥏": "lempar cakram", + "🏓": "ping pong", + "🏸": "bulu tangkis", + "🤿": "kacamata selam", + "🥌": "batu curling", + "🎯": "dart", + "🪀": "yo-yo", + "🪁": "layang-layang", + "🔮": "bola kristal", + "🎲": "dadu", + "🧩": "keping puzzle", + "🎨": "palet pelukis", + "🧵": "benang", + "👕": "kaos", + "🧦": "kaus kaki", + "👗": "gaun", + "🩳": "celana pendek", + "🎒": "tas sekolah", + "👟": "sepatu lari", + "👑": "mahkota", + "🧢": "topi berlidah", + "💄": "lipstik", + "💍": "cincin", + "💎": "batu permata", + "📢": "pengeras suara", + "🎶": "not-not musik", + "🎙️": "mikrofon studio", + "📻️": "radio", + "🎷": "saksofon", + "🪗": "akordeon", + "🎸": "gitar", + "🎺": "trompet", + "🎻": "biola", + "🪕": "banjo", + "🥁": "drum", + "☎️": "telepon", + "🔋": "baterai", + "💿️": "disk optik", + "🧮": "sempoa", + "🎬️": "papan sutradara", + "💡": "bohlam", + "🔦": "lampu senter", + "🏮": "lampion merah", + "📕": "buku tertutup", + "🏷️": "label", + "💳️": "kartu kredit", + "✏️": "pensil", + "🖌️": "kuas", + "🖍️": "krayon", + "📌": "paku penanda", + "📎": "klip kertas", + "🔑": "kunci", + "🪃": "bumerang", + "🏹": "busur dan panah", + "⚖️": "timbangan gantung", + "🧲": "magnet", + "🧪": "tabung uji", + "🧬": "dna", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "antena satelit", + "🪑": "bangku", + "🧹": "sapu", + "🗿": "moai" + }, + "is": { + "👽️": "geimvera", + "🤖": "vélmennisandlit", + "🧠": "heili", + "👁️": "auga", + "🧙": "galdramaður", + "🧚": "álfur", + "🧜": "sæbúi", + "🐵": "apahöfuð", + "🦧": "órangútan", + "🐶": "hundshöfuð", + "🐺": "úlfur", + "🦊": "refur", + "🦝": "þvottabjörn", + "🐱": "kattarhöfuð", + "🦁": "ljón", + "🐯": "tígrisdýrshöfuð", + "🐴": "hestshöfuð", + "🦄": "einhyrningur", + "🦓": "sebrahestur", + "🦌": "hjartardýr", + "🐮": "kýrhöfuð", + "🐷": "svínshöfuð", + "🐗": "villisvín", + "🐪": "drómedari", + "🦙": "lamadýr", + "🦒": "gíraffi", + "🐘": "fíll", + "🦣": "loðfíll", + "🦏": "nashyrningur", + "🐭": "músarhöfuð", + "🐰": "kanínuhöfuð", + "🐿️": "jarðíkorni", + "🦔": "broddgöltur", + "🦇": "leðurblaka", + "🐻": "björn", + "🐨": "kóalabjörn", + "🦥": "letidýr", + "🦦": "otur", + "🦘": "kengúra", + "🐥": "framhlið hænuunga", + "🐦️": "fugl", + "🕊️": "dúfa", + "🦆": "önd", + "🦉": "ugla", + "🦤": "dúdúfugl", + "🪶": "fjöður", + "🦩": "flamingói", + "🦚": "páfugl", + "🦜": "páfagaukur", + "🐊": "krókódíll", + "🐢": "skjaldbaka", + "🦎": "eðla", + "🐍": "snákur", + "🐲": "drekahöfuð", + "🦕": "graseðla", + "🐳": "blásandi hvalur", + "🐬": "höfrungur", + "🦭": "selur", + "🐟️": "fiskur", + "🐠": "hitabeltisfiskur", + "🦈": "hákarl", + "🐙": "kolkrabbi", + "🐚": "kuðungur", + "🐌": "snigill", + "🦋": "fiðrildi", + "🐛": "skordýr", + "🐝": "hunangsfluga", + "🐞": "maríuhæna", + "💐": "blómvöndur", + "🌹": "rós", + "🌺": "Havaírós", + "🌻": "sólblóm", + "🌷": "túlípani", + "🌲": "sígrænt tré", + "🌳": "sumargrænt tré", + "🌴": "pálmatré", + "🌵": "kaktus", + "🌿": "kryddjurt", + "🍁": "hlynslauf", + "🍇": "vínber", + "🍈": "melóna", + "🍉": "vatnsmelóna", + "🍊": "mandarína", + "🍋": "sítróna", + "🍌": "banani", + "🍍": "ananas", + "🥭": "mangó", + "🍏": "grænt epli", + "🍐": "pera", + "🍑": "ferskja", + "🍒": "kirsuber", + "🍓": "jarðarber", + "🫐": "bláber", + "🥝": "kíví", + "🍅": "tómatur", + "🫒": "ólífa", + "🥥": "kókoshneta", + "🥑": "avókadó", + "🍆": "eggaldin", + "🥕": "gulrót", + "🌽": "maís", + "🌶️": "chilipipar", + "🥬": "kál", + "🥦": "brokkólí", + "🧅": "laukur", + "🍄": "sveppur", + "🥜": "jarðhneta", + "🥐": "Croissant", + "🥖": "fransbrauð", + "🥨": "saltkringla", + "🥯": "beygla", + "🥞": "pönnukökur", + "🧇": "vaffla", + "🍔": "hamborgari", + "🍕": "pítsusneið", + "🌭": "pylsa í brauði", + "🌮": "takó", + "🍿": "popp", + "🦀": "krabbi", + "🦞": "humar", + "🍨": "kúluís", + "🍩": "kleinuhringur", + "🍪": "smákaka", + "🎂": "afmæliskaka", + "🧁": "bollakaka", + "🍫": "súkkulaði", + "🍬": "nammi", + "🍭": "sleikibrjóstsykur", + "🫖": "tekanna", + "🧃": "ferna", + "🧉": "mate", + "🧭": "áttaviti", + "🏔️": "snæviþakinn fjallstindur", + "🌋": "eldfjall", + "🏕️": "tjaldstæði", + "🏝️": "eyðieyja", + "🏡": "hús með garði", + "⛲️": "gosbrunnur", + "🎠": "hringekjuhestur", + "🎡": "parísarhjól", + "🎢": "rússíbani", + "💈": "rakarastofa", + "🚆": "lest", + "🚋": "sporvagn", + "🚍️": "strætó á móti", + "🚕": "leigubíll", + "🚗": "bíll", + "🚚": "flutningabíll", + "🚜": "dráttarvél", + "🛵": "vespa", + "🛺": "vélknúinn léttvagn", + "🛴": "hlaupahjól", + "🛹": "hjólabretti", + "🛼": "hjólaskautar", + "⚓️": "akkeri", + "⛵️": "seglskúta", + "🛶": "kanó", + "🚤": "hraðbátur", + "🚢": "skip", + "✈️": "flugvél", + "🚁": "þyrla", + "🚠": "kláfferja í fjalli", + "🛰️": "gervihnöttur", + "🚀": "eldflaug", + "🛸": "fljúgandi diskur", + "⏰": "vekjaraklukka", + "🌙": "hálfmáni", + "🌡️": "hitamælir", + "☀️": "sól", + "🪐": "pláneta með hringi", + "🌟": "skínandi stjarna", + "🌀": "fellibylur", + "🌈": "regnbogi", + "☂️": "regnhlíf", + "❄️": "snjókorn", + "☄️": "halastjarna", + "🔥": "eldur", + "💧": "dropi", + "🌊": "alda", + "🎃": "hrekkjavökugrasker", + "✨": "stjörnur", + "🎈": "blaðra", + "🎉": "knall", + "🎏": "fiskveifur", + "🎀": "borði", + "🎁": "gjöf", + "🎟️": "aðgöngumiðar", + "🏆️": "verðlaunabikar", + "⚽️": "fótbolti", + "🏀": "körfubolti", + "🏈": "amerískur fótbolti", + "🎾": "tennis", + "🥏": "frisbídiskur", + "🏓": "borðtennis", + "🏸": "badminton", + "🤿": "köfunargríma", + "🥌": "krullusteinn", + "🎯": "skotmark", + "🪀": "jójó", + "🪁": "flugdreki", + "🔮": "kristalskúla", + "🎲": "teningur", + "🧩": "púsl", + "🎨": "litapalletta", + "🧵": "tvinni", + "👕": "stuttermabolur", + "🧦": "sokkar", + "👗": "kjóll", + "🩳": "stuttbuxur", + "🎒": "skólataska", + "👟": "íþróttaskór", + "👑": "kóróna", + "🧢": "derhúfa", + "💄": "varalitur", + "💍": "hringur", + "💎": "gimsteinn", + "📢": "Almannavarnahátalari", + "🎶": "nótur", + "🎙️": "hljóðnemi í hljóðveri", + "📻️": "útvarp", + "🎷": "saxófónn", + "🪗": "harmonika", + "🎸": "gítar", + "🎺": "trompet", + "🎻": "fiðla", + "🪕": "banjó", + "🥁": "tromma", + "☎️": "sími", + "🔋": "rafhlaða", + "💿️": "blu-ray", + "🧮": "talnagrind", + "🎬️": "klapptré", + "💡": "ljósapera", + "🔦": "vasaljós", + "🏮": "rauður lampi", + "📕": "lokuð bók", + "🏷️": "merkimiði", + "💳️": "kreditkort", + "✏️": "blýantur", + "🖌️": "málningarpensill", + "🖍️": "vaxlitur", + "📌": "teiknibóla", + "📎": "bréfaklemma", + "🔑": "lykill", + "🪃": "búmerang", + "🏹": "bogi og ör", + "⚖️": "vog", + "🧲": "segull", + "🧪": "tilraunaglas", + "🧬": "dna", + "🔬": "smásjá", + "🔭": "sjónauki", + "📡": "gervihnattaloftnet", + "🪑": "stóll", + "🧹": "kústur", + "🗿": "moyai-stytta" + }, + "it": { + "👽️": "alieno", + "🤖": "faccina di robot", + "🧠": "cervello", + "👁️": "occhio", + "🧙": "mago", + "🧚": "fata", + "🧜": "sirena", + "🐵": "muso di scimmia", + "🦧": "orangotango", + "🐶": "muso di cane", + "🐺": "lupo", + "🦊": "volpe", + "🦝": "procione", + "🐱": "muso di gatto", + "🦁": "leone", + "🐯": "muso di tigre", + "🐴": "muso di cavallo", + "🦄": "unicorno", + "🦓": "zebra", + "🦌": "cervo", + "🐮": "muso di mucca", + "🐷": "muso di maiale", + "🐗": "cinghiale", + "🐪": "dromedario", + "🦙": "lama", + "🦒": "giraffa", + "🐘": "elefante", + "🦣": "mammut", + "🦏": "rinoceronte", + "🐭": "muso di topo", + "🐰": "muso di coniglio", + "🐿️": "scoiattolo", + "🦔": "riccio", + "🦇": "pipistrello", + "🐻": "orso", + "🐨": "koala", + "🦥": "bradipo", + "🦦": "lontra", + "🦘": "canguro", + "🐥": "pulcino visto di fronte", + "🐦️": "uccello", + "🕊️": "colomba", + "🦆": "anatra", + "🦉": "gufo", + "🦤": "dodo", + "🪶": "piuma", + "🦩": "fenicottero", + "🦚": "pavone", + "🦜": "pappagallo", + "🐊": "coccodrillo", + "🐢": "tartaruga", + "🦎": "lucertola", + "🐍": "serpente", + "🐲": "testa di drago", + "🦕": "sauropode", + "🐳": "balena che spruzza acqua", + "🐬": "delfino", + "🦭": "foca", + "🐟️": "pesce", + "🐠": "pesce tropicale", + "🦈": "squalo", + "🐙": "polpo", + "🐚": "conchiglia", + "🐌": "lumaca", + "🦋": "farfalla", + "🐛": "insetto", + "🐝": "ape", + "🐞": "coccinella", + "💐": "mazzo di fiori", + "🌹": "rosa", + "🌺": "ibisco", + "🌻": "girasole", + "🌷": "tulipano", + "🌲": "albero sempreverde", + "🌳": "albero deciduo", + "🌴": "palma", + "🌵": "cactus", + "🌿": "pianta", + "🍁": "foglia d’acero", + "🍇": "uva", + "🍈": "melone", + "🍉": "anguria", + "🍊": "mandarino", + "🍋": "limone", + "🍌": "banana", + "🍍": "ananas", + "🥭": "mango", + "🍏": "mela verde", + "🍐": "pera", + "🍑": "pesca", + "🍒": "ciliegie", + "🍓": "fragola", + "🫐": "mirtilli", + "🥝": "kiwi", + "🍅": "pomodoro", + "🫒": "oliva", + "🥥": "cocco", + "🥑": "avocado", + "🍆": "melanzana", + "🥕": "carota", + "🌽": "pannocchia", + "🌶️": "peperoncino", + "🥬": "verdure a foglia", + "🥦": "broccoli", + "🧅": "cipolla", + "🍄": "fungo", + "🥜": "arachidi", + "🥐": "croissant", + "🥖": "baguette", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "pancake", + "🧇": "waffle", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "granchio", + "🦞": "aragosta", + "🍨": "coppa di gelato", + "🍩": "ciambella", + "🍪": "biscotto", + "🎂": "torta di compleanno", + "🧁": "cupcake", + "🍫": "cioccolato", + "🍬": "caramella", + "🍭": "lecca lecca", + "🫖": "teiera", + "🧃": "bevanda monodose", + "🧉": "mate", + "🧭": "bussola", + "🏔️": "montagna innevata", + "🌋": "vulcano", + "🏕️": "campeggio", + "🏝️": "isola deserta", + "🏡": "casa con giardino", + "⛲️": "fontana", + "🎠": "cavallo da giostra", + "🎡": "ruota panoramica", + "🎢": "montagne russe", + "💈": "barbiere", + "🚆": "treno", + "🚋": "vagone del tram", + "🚍️": "bus in arrivo", + "🚕": "taxi", + "🚗": "auto", + "🚚": "camion", + "🚜": "trattore", + "🛵": "scooter", + "🛺": "risciò a motore", + "🛴": "monopattino", + "🛹": "skateboard", + "🛼": "pattini a rotelle", + "⚓️": "ancora", + "⛵️": "barca a vela", + "🛶": "canoa", + "🚤": "motoscafo", + "🚢": "nave", + "✈️": "aeroplano", + "🚁": "elicottero", + "🚠": "funivia", + "🛰️": "satellite", + "🚀": "razzo", + "🛸": "disco volante", + "⏰": "sveglia", + "🌙": "spicchio di luna", + "🌡️": "termometro", + "☀️": "sole", + "🪐": "pianeta con satellite", + "🌟": "stella che brilla", + "🌀": "ciclone", + "🌈": "arcobaleno", + "☂️": "ombrello", + "❄️": "fiocco di neve", + "☄️": "cometa", + "🔥": "fuoco", + "💧": "goccia", + "🌊": "onda", + "🎃": "zucca di Halloween", + "✨": "stelline", + "🎈": "palloncino", + "🎉": "spara coriandoli", + "🎏": "aquilone a forma di carpa", + "🎀": "fiocco", + "🎁": "regalo", + "🎟️": "biglietto d’ingresso", + "🏆️": "coppa", + "⚽️": "pallone da calcio", + "🏀": "palla da pallacanestro", + "🏈": "football americano", + "🎾": "tennis", + "🥏": "frisbee", + "🏓": "ping pong", + "🏸": "badminton", + "🤿": "maschera da sub", + "🥌": "stone da curling", + "🎯": "bersaglio", + "🪀": "yo-yo", + "🪁": "aquilone", + "🔮": "sfera di cristallo", + "🎲": "dado", + "🧩": "pezzo di puzzle", + "🎨": "tavolozza", + "🧵": "filo", + "👕": "t-shirt", + "🧦": "calzini", + "👗": "vestito", + "🩳": "pantaloncini", + "🎒": "zaino", + "👟": "scarpa sportiva", + "👑": "corona", + "🧢": "cappello con visiera", + "💄": "rossetto", + "💍": "anello", + "💎": "gemma", + "📢": "altoparlante", + "🎶": "note musicali", + "🎙️": "microfono radiofonico", + "📻️": "radio", + "🎷": "sassofono", + "🪗": "fisarmonica", + "🎸": "chitarra", + "🎺": "tromba", + "🎻": "violino", + "🪕": "banjo", + "🥁": "tamburo", + "☎️": "telefono fisso", + "🔋": "batteria", + "💿️": "disco ottico", + "🧮": "abaco", + "🎬️": "ciak", + "💡": "lampadina", + "🔦": "torcia", + "🏮": "lanterna rossa", + "📕": "libro chiuso", + "🏷️": "etichetta", + "💳️": "carta di credito", + "✏️": "matita", + "🖌️": "pennello", + "🖍️": "pastello a cera", + "📌": "puntina", + "📎": "graffetta", + "🔑": "chiave", + "🪃": "boomerang", + "🏹": "arco e freccia", + "⚖️": "bilancia a doppio piatto", + "🧲": "calamita", + "🧪": "provetta", + "🧬": "dna", + "🔬": "microscopio", + "🔭": "telescopio", + "📡": "antenna satellitare", + "🪑": "sedia", + "🧹": "scopa", + "🗿": "Moai" + }, + "ja": { + "👽️": "エイリアン", + "🤖": "ロボット", + "🧠": "脳", + "👁️": "片目", + "🧙": "魔法使い", + "🧚": "妖精", + "🧜": "人魚", + "🐵": "サルの顔", + "🦧": "オランウータン", + "🐶": "イヌの顔", + "🐺": "オオカミの顔", + "🦊": "キツネの顔", + "🦝": "アライグマ", + "🐱": "ネコの顔", + "🦁": "ライオンの顔", + "🐯": "トラの顔", + "🐴": "馬の顔", + "🦄": "ユニコーンの顔", + "🦓": "シマウマ", + "🦌": "シカ", + "🐮": "牛の顔", + "🐷": "ブタの顔", + "🐗": "イノシシ", + "🐪": "ラクダ", + "🦙": "ラマ", + "🦒": "キリン", + "🐘": "ゾウ", + "🦣": "マンモス", + "🦏": "サイ", + "🐭": "ネズミの顔", + "🐰": "ウサギの顔", + "🐿️": "リス", + "🦔": "ハリネズミ", + "🦇": "コウモリ", + "🐻": "クマの顔", + "🐨": "コアラ", + "🦥": "ナマケモノ", + "🦦": "カワウソ", + "🦘": "カンガルー", + "🐥": "前を向いているひよこ", + "🐦️": "鳥", + "🕊️": "ハト", + "🦆": "カモ", + "🦉": "フクロウ", + "🦤": "ドードー", + "🪶": "羽", + "🦩": "フラミンゴ", + "🦚": "クジャク", + "🦜": "オウム", + "🐊": "ワニ", + "🐢": "カメ", + "🦎": "トカゲ", + "🐍": "ヘビ", + "🐲": "ドラゴンの顔", + "🦕": "草食恐竜", + "🐳": "潮吹きクジラ", + "🐬": "イルカ", + "🦭": "アザラシ", + "🐟️": "魚", + "🐠": "熱帯魚", + "🦈": "サメ", + "🐙": "タコ", + "🐚": "巻き貝", + "🐌": "かたつむり", + "🦋": "チョウ", + "🐛": "毛虫", + "🐝": "ミツバチ", + "🐞": "テントウムシ", + "💐": "花束", + "🌹": "バラ", + "🌺": "ハイビスカス", + "🌻": "ヒマワリ", + "🌷": "チューリップ", + "🌲": "常緑樹", + "🌳": "落葉樹", + "🌴": "ヤシの木", + "🌵": "サボテン", + "🌿": "ハーブ", + "🍁": "かえで", + "🍇": "ぶどう", + "🍈": "メロン", + "🍉": "スイカ", + "🍊": "みかん", + "🍋": "レモン", + "🍌": "バナナ", + "🍍": "パイナップル", + "🥭": "マンゴー", + "🍏": "青リンゴ", + "🍐": "洋ナシ", + "🍑": "桃", + "🍒": "さくらんぼ", + "🍓": "いちご", + "🫐": "ブルーベリー", + "🥝": "キウイフルーツ", + "🍅": "トマト", + "🫒": "オリーブ", + "🥥": "ココナツ", + "🥑": "アボカド", + "🍆": "ナス", + "🥕": "人参", + "🌽": "とうもろこし", + "🌶️": "とうがらし", + "🥬": "葉野菜", + "🥦": "ブロッコリー", + "🧅": "タマネギ", + "🍄": "キノコ", + "🥜": "ピーナッツ", + "🥐": "クロワッサン", + "🥖": "バゲット", + "🥨": "プレッツェル", + "🥯": "ベーグル", + "🥞": "パンケーキ", + "🧇": "ワッフル", + "🍔": "ハンバーガー", + "🍕": "ピザ", + "🌭": "ホットドッグ", + "🌮": "タコス", + "🍿": "ポップコーン", + "🦀": "カニ", + "🦞": "ザリガニ", + "🍨": "アイスクリーム", + "🍩": "ドーナツ", + "🍪": "クッキー", + "🎂": "バースデーケーキ", + "🧁": "カップケーキ", + "🍫": "チョコレート", + "🍬": "キャンディ", + "🍭": "ぺろぺろキャンディ", + "🫖": "ティーポット", + "🧃": "紙パック飲料", + "🧉": "マテ茶", + "🧭": "コンパス", + "🏔️": "雪山", + "🌋": "火山", + "🏕️": "キャンプ", + "🏝️": "無人島", + "🏡": "庭付きの家", + "⛲️": "噴水", + "🎠": "メリーゴーランド", + "🎡": "観覧車", + "🎢": "ジェットコースター", + "💈": "床屋", + "🚆": "電車正面", + "🚋": "路面電車", + "🚍️": "バス正面", + "🚕": "タクシー", + "🚗": "自動車", + "🚚": "トラック", + "🚜": "トラクター", + "🛵": "スクーター", + "🛺": "三輪タクシー", + "🛴": "キックボード", + "🛹": "スケートボード", + "🛼": "ローラースケート", + "⚓️": "錨", + "⛵️": "ヨット", + "🛶": "カヌー", + "🚤": "スピードボート", + "🚢": "船", + "✈️": "飛行機", + "🚁": "ヘリコプター", + "🚠": "ケーブルカー", + "🛰️": "人工衛星", + "🚀": "ロケット", + "🛸": "空飛ぶ円盤", + "⏰": "目覚まし時計", + "🌙": "三日月", + "🌡️": "温度計", + "☀️": "太陽", + "🪐": "環のある惑星", + "🌟": "きらきら星", + "🌀": "渦巻き", + "🌈": "虹", + "☂️": "傘", + "❄️": "雪の結晶", + "☄️": "彗星", + "🔥": "火", + "💧": "水滴", + "🌊": "波", + "🎃": "ハロウィンかぼちゃ", + "✨": "きらきら", + "🎈": "風船", + "🎉": "クラッカー", + "🎏": "こいのぼり", + "🎀": "リボン", + "🎁": "プレゼント", + "🎟️": "入場券", + "🏆️": "トロフィー", + "⚽️": "サッカー", + "🏀": "バスケットボール", + "🏈": "アメフト", + "🎾": "テニス", + "🥏": "フリスビー", + "🏓": "卓球", + "🏸": "バドミントン", + "🤿": "ダイビング マスク", + "🥌": "カーリング", + "🎯": "的", + "🪀": "ヨーヨー", + "🪁": "たこ", + "🔮": "水晶玉", + "🎲": "サイコロ", + "🧩": "ジグソーパズル", + "🎨": "絵の具パレット", + "🧵": "糸", + "👕": "Tシャツ", + "🧦": "ソックス", + "👗": "ワンピース", + "🩳": "ショーツ", + "🎒": "バックパック", + "👟": "スニーカー", + "👑": "王冠", + "🧢": "キャップ", + "💄": "口紅", + "💍": "指輪", + "💎": "宝石", + "📢": "拡声器", + "🎶": "複数の音符", + "🎙️": "スタジオマイク", + "📻️": "ラジオ", + "🎷": "サックス", + "🪗": "アコーディオン", + "🎸": "ギター", + "🎺": "トランペット", + "🎻": "バイオリン", + "🪕": "バンジョー", + "🥁": "ドラム", + "☎️": "固定電話", + "🔋": "電池", + "💿️": "CD", + "🧮": "そろばん", + "🎬️": "カチンコ", + "💡": "電球", + "🔦": "懐中電灯", + "🏮": "赤ちょうちん", + "📕": "閉じた本", + "🏷️": "荷札", + "💳️": "クレジットカード", + "✏️": "鉛筆", + "🖌️": "絵筆", + "🖍️": "クレヨン", + "📌": "押しピン", + "📎": "クリップ", + "🔑": "鍵", + "🪃": "ブーメラン", + "🏹": "弓矢", + "⚖️": "天秤", + "🧲": "U字型磁石", + "🧪": "試験管", + "🧬": "DNA", + "🔬": "顕微鏡", + "🔭": "望遠鏡", + "📡": "パラボラアンテナ", + "🪑": "椅子", + "🧹": "ほうき", + "🗿": "モアイ" + }, + "ka": { + "👽️": "უცხოპლანეტელი", + "🤖": "რობოტის სახე", + "🧠": "ტვინი", + "👁️": "თვალი", + "🧙": "ჯადოქარი", + "🧚": "ფერია", + "🧜": "ადამიანთევზა", + "🐵": "მაიმუნის სახე", + "🦧": "ორანგუტანი", + "🐶": "ძაღლის სახე", + "🐺": "მგლის სახე", + "🦊": "მელიის თავი", + "🦝": "ენოტი", + "🐱": "კატის სახე", + "🦁": "ლომის სახე", + "🐯": "ვეფხვის სახე", + "🐴": "ცხენის სახე", + "🦄": "ზღაპრული მარტორქის სახე", + "🦓": "ზებრა", + "🦌": "ირემი", + "🐮": "ძროხის სახე", + "🐷": "ღორის სახე", + "🐗": "ტახი", + "🐪": "აქლემი", + "🦙": "ლამა", + "🦒": "ჟირაფი", + "🐘": "სპილო", + "🦣": "მამონტი", + "🦏": "მარტორქა", + "🐭": "თაგვის სახე", + "🐰": "კურდღლის სახე", + "🐿️": "ციყვი", + "🦔": "ზღარბი", + "🦇": "ღამურა", + "🐻": "დათვის სახე", + "🐨": "კოალა", + "🦥": "ზარმაცა", + "🦦": "წავი", + "🦘": "კენგურუ", + "🐥": "პატარა წიწილა წინიდან", + "🐦️": "ჩიტი", + "🕊️": "მტრედი", + "🦆": "იხვი", + "🦉": "ბუ", + "🦤": "დოდო", + "🪶": "ბუმბული", + "🦩": "ფლამინგო", + "🦚": "ფარშევანგი", + "🦜": "თუთიყუში", + "🐊": "ნიანგი", + "🐢": "კუ", + "🦎": "ხვლიკი", + "🐍": "გველი", + "🐲": "დრაკონის სახე", + "🦕": "ზაუროპოდი", + "🐳": "ვეშაპი ჭავლით", + "🐬": "დელფინი", + "🦭": "სელაპი", + "🐟️": "თევზი", + "🐠": "ტროპიკული თევზი", + "🦈": "ზვიგენი", + "🐙": "რვაფეხა", + "🐚": "სპირალური ნიჟარა", + "🐌": "ლოკოკინა", + "🦋": "პეპელა", + "🐛": "ბაღლინჯო", + "🐝": "ფუტკარი", + "🐞": "ჭიამაია", + "💐": "თაიგული", + "🌹": "ვარდი", + "🌺": "ჰიბისკუსი", + "🌻": "მზესუმზირა", + "🌷": "ტიტა", + "🌲": "მარადმწვანე", + "🌳": "ფოთლოვანი ხე", + "🌴": "პალმა", + "🌵": "კაქტუსი", + "🌿": "სამკურნალო მცენარე", + "🍁": "ნეკერჩხლის ფოთოლი", + "🍇": "ყურძენი", + "🍈": "ნესვი", + "🍉": "საზამთრო", + "🍊": "მანდარინი", + "🍋": "ლიმონი", + "🍌": "ბანანი", + "🍍": "ანანასი", + "🥭": "მანგო", + "🍏": "მწვანე ვაშლი", + "🍐": "მსხალი", + "🍑": "ატამი", + "🍒": "ალუბალი", + "🍓": "მარწყვი", + "🫐": "მოცვი", + "🥝": "კივი", + "🍅": "პამიდორი", + "🫒": "ზეითუნი", + "🥥": "ქოქოსი", + "🥑": "ავოკადო", + "🍆": "ბადრიჯანი", + "🥕": "სტაფილო", + "🌽": "სიმინდის ტარო", + "🌶️": "ცხარე წიწაკა", + "🥬": "სალათის ფოთოლი", + "🥦": "ბროკოლი", + "🧅": "ხახვი", + "🍄": "სოკო", + "🥜": "მიწის თხილი", + "🥐": "კრუასანი", + "🥖": "ბაგეტი", + "🥨": "პრეცელი", + "🥯": "ბეიგელი", + "🥞": "ბლინები", + "🧇": "ვაფლი", + "🍔": "ჰამბურგერი", + "🍕": "პიცა", + "🌭": "ჰოთდოგი", + "🌮": "ტაკო", + "🍿": "ბატი-ბუტი", + "🦀": "კიბორჩხალა", + "🦞": "კიბო", + "🍨": "ნაყინი", + "🍩": "დონატი", + "🍪": "ფხვიერი ნამცხვარი", + "🎂": "დაბადების დღის ტორტი", + "🧁": "ქაფქეიქი", + "🍫": "შოკოლადის ფილა", + "🍬": "კანფეტი", + "🍭": "კანფეტი ჯოხზე", + "🫖": "ჩაიდანი", + "🧃": "წვენი პაკეტში", + "🧉": "მატე", + "🧭": "კომპასი", + "🏔️": "თოვლით დაფარული მთა", + "🌋": "ვულკანი", + "🏕️": "კემპინგი", + "🏝️": "უკაცრიელი კუნძული", + "🏡": "სახლი ბაღით", + "⛲️": "შადრევანი", + "🎠": "კარუსელის ცხენი", + "🎡": "ეშმაკის ბორბალი", + "🎢": "ამერიკული გორაკები", + "💈": "დალაქის სვეტი", + "🚆": "მატარებელი", + "🚋": "ტრამვაის ვაგონი", + "🚍️": "მომავალი ავტობუსი", + "🚕": "ტაქსი", + "🚗": "ავტომობილი", + "🚚": "მიმწოდებელი სატვირთო მანქანა", + "🚜": "ტრაქტორი", + "🛵": "სკუტერი ძრავით", + "🛺": "ავტორიქშა", + "🛴": "ფეხის სკუტერი", + "🛹": "სკეიტბორდი", + "🛼": "გორგოლაჭიანი ციგურები", + "⚓️": "ღუზა", + "⛵️": "იალქნიანი ნავი", + "🛶": "კანოე", + "🚤": "გლისერი", + "🚢": "გემი", + "✈️": "თვითმფრინავი", + "🚁": "ვერტმფრენი", + "🚠": "მთის საბაგირო", + "🛰️": "თანამგზავრი", + "🚀": "რაკეტა", + "🛸": "მფრინავი თეფში", + "⏰": "მაღვიძარა", + "🌙": "ნამგალა მთვარე", + "🌡️": "თერმომეტრი", + "☀️": "მზე", + "🪐": "პლანეტა სარტყელით", + "🌟": "მბრწყინავი ვარსკვლავი", + "🌀": "ციკლონი", + "🌈": "ცისარტყელა", + "☂️": "ქოლგა", + "❄️": "თოვლის ფანტელი", + "☄️": "კომეტა", + "🔥": "ცეცხლი", + "💧": "წვეთი", + "🌊": "წყლის ტალღა", + "🎃": "ჰელოუინის გოგრა", + "✨": "ნაპერწკლები", + "🎈": "ბუშტი", + "🎉": "ტკაცუნა", + "🎏": "კობრებიანი ალამი", + "🎀": "ლენტი", + "🎁": "შეფუთული საჩუქარი", + "🎟️": "ბილეთები", + "🏆️": "პრიზი", + "⚽️": "ფეხბურთი", + "🏀": "კალათბურთი", + "🏈": "ამერიკული ფეხბურთი", + "🎾": "ჩოგბურთი", + "🥏": "მფრინავი დისკი", + "🏓": "მაგიდის ჩოგბურთი", + "🏸": "ბადმინტონი", + "🤿": "წყლის ნიღაბი", + "🥌": "კერლინგის ქვა", + "🎯": "პირდაპირი მოხვედრა", + "🪀": "იო-იო", + "🪁": "ფრანი", + "🔮": "კრისტალის ბურთი", + "🎲": "კამათელი", + "🧩": "პაზლი", + "🎨": "მხატვრის პალიტრა", + "🧵": "ძაფის კოჭა", + "👕": "მაისური", + "🧦": "წინდები", + "👗": "კაბა", + "🩳": "შორტები", + "🎒": "სკოლის ზურგჩანთა", + "👟": "ბოტასი", + "👑": "გვირგვინი", + "🧢": "ბეისბოლის კეპი", + "💄": "ტუჩის პომადა", + "💍": "ბეჭედი", + "💎": "ძვირფასი ქვა", + "📢": "რუპორი", + "🎶": "მუსიკალური ნოტები", + "🎙️": "სტუდიური მიკროფონი", + "📻️": "რადიო", + "🎷": "საქსოფონი", + "🪗": "აკორდეონი", + "🎸": "გიტარა", + "🎺": "საყვირი", + "🎻": "ვიოლინო", + "🪕": "ბანჯო", + "🥁": "ბარაბანი", + "☎️": "ტელეფონი", + "🔋": "ბატარეა", + "💿️": "ოპტიკური დისკი", + "🧮": "საანგარიშო დაფა", + "🎬️": "ნუმერატორი ტკაცუნათი", + "💡": "ნათურა", + "🔦": "ფანარი", + "🏮": "ქაღალდის წითელი ფარანი", + "📕": "დახურული წიგნი", + "🏷️": "იარლიყი", + "💳️": "საკრედიტო ბარათი", + "✏️": "ფანქარი", + "🖌️": "სახატავი ფუნჯი", + "🖍️": "ფერადი ფანქარი", + "📌": "ჭიკარტი", + "📎": "ქაღალდის სამაგრი", + "🔑": "გასაღები", + "🪃": "ბუმერანგი", + "🏹": "მშვილდ-ისარი", + "⚖️": "ბერკეტიანი სასწორი", + "🧲": "მაგნიტი", + "🧪": "სინჯარა", + "🧬": "დნმ", + "🔬": "მიკროსკოპი", + "🔭": "ტელესკოპი", + "📡": "თანამგზავრული ანტენა", + "🪑": "სკამი", + "🧹": "ცოცხი", + "🗿": "მოაი" + }, + "ko": { + "👽️": "외계인", + "🤖": "로봇 얼굴", + "🧠": "뇌", + "👁️": "눈", + "🧙": "마법사", + "🧚": "요정", + "🧜": "인어", + "🐵": "원숭이 얼굴", + "🦧": "오랑우탄", + "🐶": "강아지 얼굴", + "🐺": "늑대 얼굴", + "🦊": "여우 얼굴", + "🦝": "너구리", + "🐱": "고양이 얼굴", + "🦁": "사자 얼굴", + "🐯": "호랑이 얼굴", + "🐴": "말 얼굴", + "🦄": "유니콘 얼굴", + "🦓": "얼룩말", + "🦌": "사슴", + "🐮": "소 얼굴", + "🐷": "돼지 얼굴", + "🐗": "멧돼지", + "🐪": "낙타", + "🦙": "라마", + "🦒": "기린", + "🐘": "코끼리", + "🦣": "매머드", + "🦏": "코뿔소", + "🐭": "쥐 얼굴", + "🐰": "토끼 얼굴", + "🐿️": "얼룩다람쥐", + "🦔": "고슴도치", + "🦇": "박쥐", + "🐻": "곰 얼굴", + "🐨": "코알라", + "🦥": "나무늘보", + "🦦": "수달", + "🦘": "캥거루", + "🐥": "정면을 향해 날개를 편 병아리", + "🐦️": "새", + "🕊️": "비둘기", + "🦆": "오리", + "🦉": "부엉이", + "🦤": "도도새", + "🪶": "깃털", + "🦩": "홍학", + "🦚": "공작", + "🦜": "앵무새", + "🐊": "악어", + "🐢": "거북이", + "🦎": "도마뱀", + "🐍": "뱀", + "🐲": "용 얼굴", + "🦕": "초식 공룡", + "🐳": "물 뿜는 고래", + "🐬": "돌고래", + "🦭": "물개", + "🐟️": "물고기", + "🐠": "열대어", + "🦈": "상어", + "🐙": "문어", + "🐚": "달팽이집", + "🐌": "달팽이", + "🦋": "나비", + "🐛": "송충이", + "🐝": "꿀벌", + "🐞": "무당벌레", + "💐": "꽃다발", + "🌹": "장미꽃", + "🌺": "무궁화", + "🌻": "해바라기", + "🌷": "튤립", + "🌲": "소나무", + "🌳": "나무", + "🌴": "야자수", + "🌵": "선인장", + "🌿": "풀", + "🍁": "단풍잎", + "🍇": "포도", + "🍈": "멜론", + "🍉": "수박", + "🍊": "귤", + "🍋": "레몬", + "🍌": "바나나", + "🍍": "파인애플", + "🥭": "망고", + "🍏": "초록 사과", + "🍐": "배", + "🍑": "복숭아", + "🍒": "체리", + "🍓": "딸기", + "🫐": "블루베리", + "🥝": "키위", + "🍅": "토마토", + "🫒": "올리브", + "🥥": "코코넛", + "🥑": "아보카도", + "🍆": "가지", + "🥕": "당근", + "🌽": "옥수수", + "🌶️": "홍고추", + "🥬": "녹색 채소", + "🥦": "브로콜리", + "🧅": "양파", + "🍄": "버섯", + "🥜": "땅콩", + "🥐": "크루아상", + "🥖": "바게트", + "🥨": "프레첼", + "🥯": "베이글", + "🥞": "팬케이크", + "🧇": "와플", + "🍔": "햄버거", + "🍕": "피자", + "🌭": "핫도그", + "🌮": "타코", + "🍿": "팝콘", + "🦀": "꽃게", + "🦞": "바닷가재", + "🍨": "아이스크림", + "🍩": "도넛", + "🍪": "쿠키", + "🎂": "생일 케이크", + "🧁": "컵케이크", + "🍫": "초콜렛", + "🍬": "사탕", + "🍭": "롤리팝", + "🫖": "찻주전자", + "🧃": "음료 팩", + "🧉": "마테차", + "🧭": "나침반", + "🏔️": "눈 덮인 산", + "🌋": "화산", + "🏕️": "캠핑", + "🏝️": "사막 섬", + "🏡": "정원이 있는 집", + "⛲️": "분수", + "🎠": "회전 목마", + "🎡": "관람차", + "🎢": "롤러코스터", + "💈": "이발소", + "🚆": "기차", + "🚋": "트램 차량", + "🚍️": "오고 있는 버스", + "🚕": "택시", + "🚗": "자동차", + "🚚": "운송 트럭", + "🚜": "트랙터", + "🛵": "스쿠터", + "🛺": "경삼륜차", + "🛴": "킥보드", + "🛹": "스케이트보드", + "🛼": "롤러스케이트", + "⚓️": "닻", + "⛵️": "돛단배", + "🛶": "카누", + "🚤": "쾌속정", + "🚢": "선박", + "✈️": "비행기", + "🚁": "헬리콥터", + "🚠": "산악 케이블카", + "🛰️": "인공위성", + "🚀": "로켓", + "🛸": "비행접시", + "⏰": "알람 시계", + "🌙": "초승달", + "🌡️": "온도계", + "☀️": "태양", + "🪐": "고리가 있는 행성", + "🌟": "반짝이는 별", + "🌀": "태풍", + "🌈": "무지개", + "☂️": "우산", + "❄️": "눈송이", + "☄️": "혜성", + "🔥": "불", + "💧": "물방울", + "🌊": "파도", + "🎃": "할로윈", + "✨": "블링블링", + "🎈": "풍선", + "🎉": "파티", + "🎏": "물고기 깃발", + "🎀": "리본", + "🎁": "선물", + "🎟️": "입장 티켓", + "🏆️": "트로피", + "⚽️": "축구공", + "🏀": "농구", + "🏈": "미식축구공", + "🎾": "테니스", + "🥏": "원반", + "🏓": "탁구", + "🏸": "배드민턴", + "🤿": "다이빙 마스크", + "🥌": "컬링 스톤", + "🎯": "과녁 명중", + "🪀": "요요", + "🪁": "연", + "🔮": "수정 구슬", + "🎲": "주사위", + "🧩": "퍼즐", + "🎨": "팔레트", + "🧵": "실타래", + "👕": "티셔츠", + "🧦": "양말", + "👗": "원피스", + "🩳": "반바지", + "🎒": "학교 가방", + "👟": "운동화", + "👑": "왕관", + "🧢": "야구모자", + "💄": "립스틱", + "💍": "반지", + "💎": "원석", + "📢": "확성기", + "🎶": "노래 음표", + "🎙️": "스튜디오 마이크", + "📻️": "라디오", + "🎷": "색소폰", + "🪗": "아코디언", + "🎸": "기타", + "🎺": "트럼펫", + "🎻": "바이올린", + "🪕": "밴조", + "🥁": "드럼", + "☎️": "전화기", + "🔋": "배터리", + "💿️": "씨디", + "🧮": "주판", + "🎬️": "슬레이트", + "💡": "전구", + "🔦": "손전등", + "🏮": "일본식 등", + "📕": "펼치지 않은 책", + "🏷️": "라벨", + "💳️": "신용카드", + "✏️": "연필", + "🖌️": "붓", + "🖍️": "크레용", + "📌": "압정", + "📎": "클립", + "🔑": "열쇠", + "🪃": "부메랑", + "🏹": "활과 화살", + "⚖️": "접시저울", + "🧲": "자석", + "🧪": "시험관", + "🧬": "DNA", + "🔬": "현미경", + "🔭": "망원경", + "📡": "위성 안테나", + "🪑": "의자", + "🧹": "빗자루", + "🗿": "모아이" + }, + "lt": { + "👽️": "ateivis", + "🤖": "roboto veidas", + "🧠": "smegenys", + "👁️": "akis", + "🧙": "magas", + "🧚": "fėja", + "🧜": "undinius", + "🐵": "beždžionės snukutis", + "🦧": "orangutangas", + "🐶": "šuns snukutis", + "🐺": "vilko snukis", + "🦊": "lapės snukis", + "🦝": "meškėnas", + "🐱": "katės snukutis", + "🦁": "liūto snukis", + "🐯": "tigro snukis", + "🐴": "arklio snukis", + "🦄": "vienaragio snukis", + "🦓": "zebras", + "🦌": "elnias", + "🐮": "karvės snukis", + "🐷": "kiaulės snukis", + "🐗": "šernas", + "🐪": "kupranugaris", + "🦙": "lama", + "🦒": "žirafa", + "🐘": "dramblys", + "🦣": "mamutas", + "🦏": "raganosis", + "🐭": "pelės snukutis", + "🐰": "triušio snukutis", + "🐿️": "voverė", + "🦔": "ežys", + "🦇": "šikšnosparnis", + "🐻": "meškos snukis", + "🐨": "koala", + "🦥": "tinginys", + "🦦": "ūdra", + "🦘": "kengūra", + "🐥": "atsisukęs snapu viščiukas", + "🐦️": "paukštis", + "🕊️": "balandis", + "🦆": "antis", + "🦉": "pelėda", + "🦤": "drontas", + "🪶": "plunksna", + "🦩": "flamingas", + "🦚": "povas", + "🦜": "papūga", + "🐊": "krokodilas", + "🐢": "vėžlys", + "🦎": "driežas", + "🐍": "gyvatė", + "🐲": "drakono snukis", + "🦕": "sauropodas", + "🐳": "purškiantis banginis", + "🐬": "delfinas", + "🦭": "ruonis", + "🐟️": "žuvis", + "🐠": "tropinė žuvis", + "🦈": "ryklys", + "🐙": "aštuonkojis", + "🐚": "susisukusi kriauklė", + "🐌": "sraigė", + "🦋": "drugelis", + "🐛": "vabalas", + "🐝": "bitė", + "🐞": "boružė", + "💐": "puokštė", + "🌹": "rožė", + "🌺": "kinrožė", + "🌻": "saulėgrąža", + "🌷": "tulpė", + "🌲": "amžinai žaliuojantis medis", + "🌳": "lapuotis", + "🌴": "palmė", + "🌵": "kaktusas", + "🌿": "žolelė", + "🍁": "klevo lapas", + "🍇": "vynuogės", + "🍈": "melionas", + "🍉": "arbūzas", + "🍊": "mandarinas", + "🍋": "citrina", + "🍌": "bananas", + "🍍": "ananasas", + "🥭": "mangas", + "🍏": "žalias obuolys", + "🍐": "kriaušė", + "🍑": "persikas", + "🍒": "vyšnios", + "🍓": "braškė", + "🫐": "mėlynės", + "🥝": "kivis", + "🍅": "pomidoras", + "🫒": "alyvuogė", + "🥥": "kokosas", + "🥑": "avokadas", + "🍆": "baklažanas", + "🥕": "morka", + "🌽": "kukurūzo burbuolė", + "🌶️": "aštrusis pipiras", + "🥬": "lapinė daržovė", + "🥦": "brokolis", + "🧅": "svogūnas", + "🍄": "grybas", + "🥜": "žemės riešutas", + "🥐": "raguolis", + "🥖": "ilgas batonas", + "🥨": "riestainis", + "🥯": "apvalus riestainis", + "🥞": "blynai", + "🧇": "vaflis", + "🍔": "mėsainis", + "🍕": "pica", + "🌭": "dešrainis", + "🌮": "meksikietiškas paplotėlis", + "🍿": "spragėsiai", + "🦀": "krabas", + "🦞": "omaras", + "🍨": "ledai", + "🍩": "spurga", + "🍪": "sausainis", + "🎂": "gimtadienio tortas", + "🧁": "keksiukas", + "🍫": "šokolado batonėlis", + "🍬": "saldainis", + "🍭": "ledinukas ant pagaliuko", + "🫖": "arbatinukas", + "🧃": "gėrimo pakelis", + "🧉": "matė", + "🧭": "kompasas", + "🏔️": "kalnas su snieguota viršūne", + "🌋": "ugnikalnis", + "🏕️": "stovyklavimas", + "🏝️": "atoki sala", + "🏡": "namas su sodu", + "⛲️": "fontanas", + "🎠": "karuselės arkliukas", + "🎡": "apžvalgos ratas", + "🎢": "linksmieji kalneliai", + "💈": "kirpėjo suktukas", + "🚆": "traukinys", + "🚋": "tramvajaus vagonas", + "🚍️": "artėjantis autobusas", + "🚕": "taksi", + "🚗": "automobilis", + "🚚": "krovininis sunkvežimis", + "🚜": "traktorius", + "🛵": "motoroleris", + "🛺": "autorikša", + "🛴": "paspirtukas", + "🛹": "riedlentė", + "🛼": "riedučiai", + "⚓️": "inkaras", + "⛵️": "burlaivis", + "🛶": "kanoja", + "🚤": "motorinis kateris", + "🚢": "laivas", + "✈️": "lėktuvas", + "🚁": "sraigstasparnis", + "🚠": "kalnų keltuvas", + "🛰️": "palydovas", + "🚀": "raketa", + "🛸": "skraidanti lėkštė", + "⏰": "žadintuvas", + "🌙": "pusmėnulis", + "🌡️": "termometras", + "☀️": "saulė", + "🪐": "planeta su žiedu", + "🌟": "žėrinti žvaigždė", + "🌀": "ciklonas", + "🌈": "vaivorykštė", + "☂️": "skėtis", + "❄️": "snaigė", + "☄️": "kometa", + "🔥": "ugnis", + "💧": "lašas", + "🌊": "vandens banga", + "🎃": "žibintas iš moliūgo", + "✨": "kibirkštėlės", + "🎈": "balionas", + "🎉": "konfeti šaudyklė", + "🎏": "karpio vėtrungė", + "🎀": "kaspinas", + "🎁": "supakuota dovana", + "🎟️": "įėjimo bilietai", + "🏆️": "trofėjus", + "⚽️": "futbolo kamuolys", + "🏀": "krepšinio kamuolys", + "🏈": "amerikietiškojo futbolo kamuolys", + "🎾": "teniso kamuoliukas", + "🥏": "skraidantis diskas", + "🏓": "stalo tenisas", + "🏸": "badmintonas", + "🤿": "nardymo kaukė", + "🥌": "akmenslydis", + "🎯": "smūgis tiesiai į taikinį", + "🪀": "jo-jo", + "🪁": "aitvaras", + "🔮": "krištolinis rutulys", + "🎲": "kauliukas", + "🧩": "dėlionė", + "🎨": "dailininko paletė", + "🧵": "siūlas", + "👕": "marškinėliai", + "🧦": "kojinės", + "👗": "suknelė", + "🩳": "šortai", + "🎒": "mokyklinė kuprinė", + "👟": "bėgimo batelis", + "👑": "karūna", + "🧢": "reklaminė kepurė", + "💄": "lūpų dažai", + "💍": "žiedas", + "💎": "brangakmenis", + "📢": "garsiakalbio simbolis", + "🎶": "muzikos natos", + "🎙️": "studijos mikrofonas", + "📻️": "radijas", + "🎷": "saksofonas", + "🪗": "akordeonas", + "🎸": "gitara", + "🎺": "trimitas", + "🎻": "smuikas", + "🪕": "bandža", + "🥁": "būgnas", + "☎️": "telefonas", + "🔋": "baterija", + "💿️": "optinis diskas", + "🧮": "skaitytuvai", + "🎬️": "pliauškė", + "💡": "lemputė", + "🔦": "žibintuvėlis", + "🏮": "raudonas popierinis žibintas", + "📕": "užversta knyga", + "🏷️": "etiketė", + "💳️": "kredito kortelė", + "✏️": "pieštukas", + "🖌️": "teptukas", + "🖍️": "kreidelė", + "📌": "smeigtukas", + "📎": "sąvaržėlė", + "🔑": "raktas", + "🪃": "bumerangas", + "🏹": "lankas ir strėlė", + "⚖️": "svarstyklės su lėkštėmis", + "🧲": "magnetas", + "🧪": "mėgintuvėlis", + "🧬": "DNR", + "🔬": "mikroskopas", + "🔭": "teleskopas", + "📡": "palydovinė antena", + "🪑": "kėdė", + "🧹": "šluota", + "🗿": "moai" + }, + "mk": { + "👽️": "вонземјанин", + "🤖": "робот", + "🧠": "мозок", + "👁️": "око", + "🧙": "магичар", + "🧚": "самовила", + "🧜": "морско лице", + "🐵": "глава на мајмун", + "🦧": "орангутан", + "🐶": "глава на куче", + "🐺": "волк", + "🦊": "лисица", + "🦝": "ракун", + "🐱": "глава на мачка", + "🦁": "лав", + "🐯": "глава на тигар", + "🐴": "глава на коњ", + "🦄": "еднорог", + "🦓": "зебра", + "🦌": "елен", + "🐮": "глава на крава", + "🐷": "глава на прасе", + "🐗": "дива свиња", + "🐪": "камила", + "🦙": "лама", + "🦒": "жирафа", + "🐘": "слон", + "🦣": "мамут", + "🦏": "носорог", + "🐭": "глава на глушец", + "🐰": "глава на зајак", + "🐿️": "верверица", + "🦔": "еж", + "🦇": "лилјак", + "🐻": "мечка", + "🐨": "коала", + "🦥": "мрзливец", + "🦦": "видра", + "🦘": "кенгур", + "🐥": "пиле свртено нанапред", + "🐦️": "птица", + "🕊️": "гулабица", + "🦆": "патка", + "🦉": "був", + "🦤": "додо", + "🪶": "пердув", + "🦩": "фламинго", + "🦚": "паун", + "🦜": "папагал", + "🐊": "крокодил", + "🐢": "желка", + "🦎": "гуштер", + "🐍": "змија", + "🐲": "глава на змеј", + "🦕": "сауропод", + "🐳": "кит што прска вода", + "🐬": "делфин", + "🦭": "фока", + "🐟️": "риба", + "🐠": "тропска риба", + "🦈": "ајкула", + "🐙": "октопод", + "🐚": "спирална школка", + "🐌": "полжав", + "🦋": "пеперутка", + "🐛": "бубачка", + "🐝": "пчела", + "🐞": "бубамара", + "💐": "букет", + "🌹": "роза", + "🌺": "хибискус", + "🌻": "сончоглед", + "🌷": "лале", + "🌲": "зимзелено дрво", + "🌳": "листопадно дрво", + "🌴": "палма", + "🌵": "кактус", + "🌿": "билка", + "🍁": "јаворов лист", + "🍇": "грозје", + "🍈": "диња", + "🍉": "лубеница", + "🍊": "мандарина", + "🍋": "лимон", + "🍌": "банана", + "🍍": "ананас", + "🥭": "манго", + "🍏": "зелено јаболко", + "🍐": "круша", + "🍑": "праска", + "🍒": "цреши", + "🍓": "јагода", + "🫐": "боровинки", + "🥝": "киви", + "🍅": "домат", + "🫒": "маслинка", + "🥥": "кокосов орев", + "🥑": "авокадо", + "🍆": "модар патлиџан", + "🥕": "морков", + "🌽": "клас пченка", + "🌶️": "лута пиперка", + "🥬": "зелени листови", + "🥦": "брокола", + "🧅": "кромид", + "🍄": "печурка", + "🥜": "кикиритки", + "🥐": "кроасан", + "🥖": "багет", + "🥨": "перек", + "🥯": "ѓеврек", + "🥞": "палачинки", + "🧇": "вафла", + "🍔": "хамбургер", + "🍕": "пица", + "🌭": "хот дог", + "🌮": "тако", + "🍿": "пуканки", + "🦀": "рак", + "🦞": "јастог", + "🍨": "сладолед", + "🍩": "крофна", + "🍪": "колаче", + "🎂": "роденденска торта", + "🧁": "тортичка", + "🍫": "чоколадо", + "🍬": "бонбона", + "🍭": "лижалче", + "🫖": "чајник", + "🧃": "сокче во тетрапак", + "🧉": "мате", + "🧭": "компас", + "🏔️": "планина со снежен врв", + "🌋": "вулкан", + "🏕️": "кампување", + "🏝️": "пуст остров", + "🏡": "куќа со градина", + "⛲️": "фонтана", + "🎠": "коњче од вртелешка", + "🎡": "панорамско тркало", + "🎢": "тобоган", + "💈": "столб пред берберница", + "🚆": "воз", + "🚋": "вагон на трамвај", + "🚍️": "автобус што пристигнува", + "🚕": "такси", + "🚗": "автомобил", + "🚚": "камион за испорака", + "🚜": "трактор", + "🛵": "скутер", + "🛺": "авто-рикша", + "🛴": "тротинет", + "🛹": "скејтборд", + "🛼": "ролшуи", + "⚓️": "сидро", + "⛵️": "едреник", + "🛶": "кајак", + "🚤": "глисер", + "🚢": "брод", + "✈️": "авион", + "🚁": "хеликоптер", + "🚠": "планинска жичарница", + "🛰️": "сателит", + "🚀": "ракета", + "🛸": "летечка чинија", + "⏰": "часовник со аларм", + "🌙": "месечев срп", + "🌡️": "термометар", + "☀️": "сонце", + "🪐": "планета со прстени", + "🌟": "светлечка ѕвезда", + "🌀": "циклон", + "🌈": "виножито", + "☂️": "чадор", + "❄️": "снегулка", + "☄️": "комета", + "🔥": "оган", + "💧": "капка", + "🌊": "бран", + "🎃": "фенер од тиква", + "✨": "светки", + "🎈": "балон", + "🎉": "прскалка со конфети", + "🎏": "летало со крапови", + "🎀": "панделка", + "🎁": "завиткан подарок", + "🎟️": "влезни билети", + "🏆️": "трофеј", + "⚽️": "фудбалска топка", + "🏀": "баскет", + "🏈": "топка за американски фудбал", + "🎾": "тениско топче", + "🥏": "летечки диск", + "🏓": "пинг понг", + "🏸": "бадминтон", + "🤿": "нуркачка маска", + "🥌": "камен за карлинг", + "🎯": "пикадо", + "🪀": "јојо", + "🪁": "летечки змеј", + "🔮": "кристална топка", + "🎲": "коцка", + "🧩": "сложувалка", + "🎨": "сликарска палета", + "🧵": "конец", + "👕": "маица", + "🧦": "чорапи", + "👗": "фустан", + "🩳": "шорцеви", + "🎒": "училишен ранец", + "👟": "патика", + "👑": "круна", + "🧢": "капче", + "💄": "кармин", + "💍": "прстен", + "💎": "скапоцен камен", + "📢": "разглас", + "🎶": "музички ноти", + "🎙️": "студиски микрофон", + "📻️": "радио", + "🎷": "саксофон", + "🪗": "хармоника", + "🎸": "гитара", + "🎺": "труба", + "🎻": "виолина", + "🪕": "бенџо", + "🥁": "тапан", + "☎️": "телефон", + "🔋": "батерија", + "💿️": "цд", + "🧮": "сметалка", + "🎬️": "филмска клапа", + "💡": "светилка", + "🔦": "батериска ламба", + "🏮": "црвен фенер", + "📕": "затворена книга", + "🏷️": "етикета", + "💳️": "кредитна картичка", + "✏️": "молив", + "🖌️": "четка за боење", + "🖍️": "креон", + "📌": "притискач", + "📎": "спојувалка", + "🔑": "клуч", + "🪃": "бумеранг", + "🏹": "лак и стрела", + "⚖️": "механичка вага", + "🧲": "магнет", + "🧪": "епрувета", + "🧬": "днк", + "🔬": "микроскоп", + "🔭": "телескоп", + "📡": "сателитска антена", + "🪑": "стол", + "🧹": "метла", + "🗿": "монолитни статуи" + }, + "ms": { + "👽️": "makhluk asing", + "🤖": "robot", + "🧠": "otak", + "👁️": "mata", + "🧙": "ahli silap mata", + "🧚": "pari-pari", + "🧜": "manusia duyung", + "🐵": "muka monyet", + "🦧": "orang utan", + "🐶": "muka anjing", + "🐺": "serigala", + "🦊": "rubah", + "🦝": "rakun", + "🐱": "muka kucing", + "🦁": "singa", + "🐯": "muka harimau", + "🐴": "muka kuda", + "🦄": "unikorn", + "🦓": "zebra", + "🦌": "rusa", + "🐮": "muka lembu", + "🐷": "muka khinzir", + "🐗": "babi hutan", + "🐪": "unta", + "🦙": "llama", + "🦒": "zirafah", + "🐘": "gajah", + "🦣": "mamot", + "🦏": "badak sumbu", + "🐭": "muka tikus", + "🐰": "muka arnab", + "🐿️": "tupai tanah", + "🦔": "landak kecil", + "🦇": "kelawar", + "🐻": "beruang", + "🐨": "koala", + "🦥": "sloth", + "🦦": "memerang", + "🦘": "kanggaru", + "🐥": "anak ayam menghadap depan", + "🐦️": "burung", + "🕊️": "burung merpati", + "🦆": "itik", + "🦉": "burung hantu", + "🦤": "dodo", + "🪶": "bulu pelepah", + "🦩": "flamingo", + "🦚": "merak", + "🦜": "kakak tua", + "🐊": "buaya", + "🐢": "penyu", + "🦎": "cicak", + "🐍": "ular", + "🐲": "muka naga", + "🦕": "sauropod", + "🐳": "ikan paus memancutkan air", + "🐬": "ikan lumba-lumba", + "🦭": "anjing laut", + "🐟️": "ikan", + "🐠": "ikan tropika", + "🦈": "jerung", + "🐙": "sotong kurita", + "🐚": "kulit kerang berpilin", + "🐌": "siput", + "🦋": "rama-rama", + "🐛": "ulat", + "🐝": "lebah madu", + "🐞": "kumbang kura-kura", + "💐": "sejambak bunga", + "🌹": "bunga mawar", + "🌺": "bunga raya", + "🌻": "bunga matahari", + "🌷": "bunga tulip", + "🌲": "malar hijau", + "🌳": "pokok daun luruh", + "🌴": "pokok palma", + "🌵": "kaktus", + "🌿": "herba", + "🍁": "daun mapel", + "🍇": "anggur", + "🍈": "tembikai susu", + "🍉": "tembikai", + "🍊": "limau tangerin", + "🍋": "lemon", + "🍌": "pisang", + "🍍": "nanas", + "🥭": "mangga", + "🍏": "epal hijau", + "🍐": "buah pear", + "🍑": "buah pic", + "🍒": "buah ceri", + "🍓": "buah strawberi", + "🫐": "beri biru", + "🥝": "buah kiwi", + "🍅": "tomato", + "🫒": "buah zaitun", + "🥥": "kelapa", + "🥑": "avokado", + "🍆": "terung", + "🥕": "lobak merah", + "🌽": "tongkol jagung", + "🌶️": "cili api", + "🥬": "sayuran hijau", + "🥦": "brokoli", + "🧅": "bawang", + "🍄": "cendawan", + "🥜": "kacang tanah", + "🥐": "kroisan", + "🥖": "roti baguette", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "penkek", + "🧇": "wafel", + "🍔": "hamburger", + "🍕": "piza", + "🌭": "hot dog", + "🌮": "tako", + "🍿": "bertih jagung", + "🦀": "ketam", + "🦞": "udang karang", + "🍨": "ais krim", + "🍩": "donat", + "🍪": "biskut", + "🎂": "kek hari jadi", + "🧁": "kek cawan", + "🍫": "sekeping coklat", + "🍬": "gula-gula", + "🍭": "lolipop", + "🫖": "teko teh", + "🧃": "minuman air kotak", + "🧉": "mate", + "🧭": "kompas", + "🏔️": "gunung dengan puncak bersalji", + "🌋": "gunung berapi", + "🏕️": "berkhemah", + "🏝️": "pulau padang pasir", + "🏡": "rumah dengan taman", + "⛲️": "air pancut", + "🎠": "kuda karusel", + "🎡": "roda ferris", + "🎢": "roller coaster", + "💈": "jalur kedai gunting rambut", + "🚆": "kereta api", + "🚋": "gerabak trem", + "🚍️": "bas dari arah depan", + "🚕": "teksi", + "🚗": "kereta", + "🚚": "trak penghantaran", + "🚜": "traktor", + "🛵": "skuter bermotor", + "🛺": "lanca auto", + "🛴": "skuter tolak", + "🛹": "papan luncur", + "🛼": "kasut roda", + "⚓️": "sauh", + "⛵️": "perahu layar", + "🛶": "kanu", + "🚤": "bot laju", + "🚢": "kapal", + "✈️": "kapal terbang", + "🚁": "helikopter", + "🚠": "jalan kabel gunung", + "🛰️": "satelit", + "🚀": "roket", + "🛸": "piring terbang", + "⏰": "jam loceng", + "🌙": "bulan sabit", + "🌡️": "termometer", + "☀️": "matahari", + "🪐": "planet bergelang", + "🌟": "bintang bersinar", + "🌀": "taufan", + "🌈": "pelangi", + "☂️": "payung", + "❄️": "emping salji", + "☄️": "komet", + "🔥": "api", + "💧": "titisan air", + "🌊": "ombak laut", + "🎃": "tanglung labu", + "✨": "berkilauan", + "🎈": "belon", + "🎉": "pencetus bunyi parti", + "🎏": "panji-panji kap", + "🎀": "reben", + "🎁": "bungkusan hadiah", + "🎟️": "tiket masuk", + "🏆️": "piala", + "⚽️": "bola sepak", + "🏀": "bola keranjang", + "🏈": "bola sepak amerika", + "🎾": "tenis", + "🥏": "cakera terbang", + "🏓": "ping pong", + "🏸": "badminton", + "🤿": "topeng menyelam", + "🥌": "batu curling", + "🎯": "balingan tepat", + "🪀": "yo-yo", + "🪁": "layang-layang", + "🔮": "bola kristal", + "🎲": "dadu permainan", + "🧩": "kepingan suai gambar", + "🎨": "palet artis", + "🧵": "benang", + "👕": "kemeja-t", + "🧦": "stoking", + "👗": "gaun", + "🩳": "seluar pendek", + "🎒": "beg galas sekolah", + "👟": "kasut lari", + "👑": "mahkota", + "🧢": "kep berbil", + "💄": "gincu", + "💍": "cincin", + "💎": "batu permata", + "📢": "corong pembesar suara", + "🎶": "nota-nota muzik", + "🎙️": "mikrofon studio", + "📻️": "radio", + "🎷": "saksofon", + "🪗": "akordion", + "🎸": "gitar", + "🎺": "trompet", + "🎻": "biola", + "🪕": "banjo", + "🥁": "dram", + "☎️": "telefon", + "🔋": "bateri", + "💿️": "cakera optik", + "🧮": "sempua", + "🎬️": "papan pengetap", + "💡": "mentol lampu", + "🔦": "lampu suluh", + "🏮": "tanglung kertas merah", + "📕": "buku tertutup", + "🏷️": "label", + "💳️": "kad kredit", + "✏️": "pensel", + "🖌️": "berus cat", + "🖍️": "krayon", + "📌": "paku tekan", + "📎": "klip kertas", + "🔑": "kunci", + "🪃": "bumerang", + "🏹": "panah dan busur", + "⚖️": "neraca timbang", + "🧲": "magnet", + "🧪": "tabung uji", + "🧬": "dna", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "antena satelit", + "🪑": "kerusi", + "🧹": "penyapu", + "🗿": "moyai" + }, + "my": { + "👽️": "ဂြိုဟ်သား", + "🤖": "စက်ရုပ် မျက်နှာ", + "🧠": "ဦးနှောက်", + "👁️": "မျက်လုံး", + "🧙": "မှော်ဆရာ", + "🧚": "နတ်သမီး", + "🧜": "ရေလူ", + "🐵": "မျောက်ရုပ်", + "🦧": "အိုရန်အူတန်", + "🐶": "ခွေးရုပ်", + "🐺": "ဝံပုလွေရုပ်", + "🦊": "မြေခွေးရုပ်", + "🦝": "ရက်ကွန်းဝံ", + "🐱": "ကြောင်ရုပ်", + "🦁": "ခြင်္သေ့ရုပ်", + "🐯": "ကျားရုပ်", + "🐴": "မြင်းရုပ်", + "🦄": "ချိုတစ်ချောင်းမြင်းရုပ်", + "🦓": "မြင်းကျား", + "🦌": "သမင်", + "🐮": "နွားမရုပ်", + "🐷": "ဝက်ရုပ်", + "🐗": "တောဝက်", + "🐪": "ကုလားအုတ်", + "🦙": "လာမာ ကုလားအုတ်", + "🦒": "သစ်ကုလားအုတ်", + "🐘": "ဆင်", + "🦣": "ရှေးဆင်", + "🦏": "ကြံ့", + "🐭": "ကြွက် မျက်နှာ", + "🐰": "ယုန်ရုပ်", + "🐿️": "ကျောရိုးတွင် အဖြူအနက်စင်းပါ ရှဥ့်ငယ်တမျိုး", + "🦔": "ဖြူငယ်", + "🦇": "လင်းနို့", + "🐻": "ဝက်ဝံရုပ်", + "🐨": "ကိုအာလာ", + "🦥": "မျောက်မောင်းမ", + "🦦": "ဖျံ", + "🦘": "သားပိုက်ကောင်", + "🐥": "ရှေ့သို့မျက်နှာမူထားသည့် ကြက်ပေါက်စ", + "🐦️": "ငှက်", + "🕊️": "ချိုးငှက်", + "🦆": "ဘဲ", + "🦉": "ဇီးကွက်", + "🦤": "ဒိုဒို", + "🪶": "အတောင်", + "🦩": "ကြိုးကြာနီ", + "🦚": "ဒေါင်း", + "🦜": "ကြက်တူရွေး", + "🐊": "မိကျောင်း", + "🐢": "လိပ်", + "🦎": "အိမ်မြှောင်", + "🐍": "မြွေ", + "🐲": "နဂါးရုပ်", + "🦕": "ဆော်ရိုပေါ့ဒ်", + "🐳": "ရေမှုတ်ထုတ်နေသည့် ဝေလငါး", + "🐬": "လင်းပိုင်", + "🦭": "ပင်လယ်ဖျံ", + "🐟️": "ငါး", + "🐠": "အပူပိုင်း ငါး", + "🦈": "ငါးမန်း", + "🐙": "ဘဝဲ", + "🐚": "ခရုခွံ", + "🐌": "ခရု", + "🦋": "လိပ်ပြာ", + "🐛": "ပိုးကောင်ကလေး", + "🐝": "ပျား", + "🐞": "ပိုးတောင်မာ", + "💐": "ပန်းစည်း", + "🌹": "နှင်းဆီပန်း", + "🌺": "ခေါင်ရန်းပန်း", + "🌻": "နေကြာပန်း", + "🌷": "ကျူးလစ်ပန်း", + "🌲": "အမြဲစိမ်း သစ်ပင်", + "🌳": "ရွက်ပြတ်ပင်", + "🌴": "ထန်းပင်", + "🌵": "ရှားစောင်းပင်", + "🌿": "ဆေးဖက်ဝင်အပင်", + "🍁": "မေပယ်ရွက်", + "🍇": "စပျစ်သီး", + "🍈": "သခွားမွှေး", + "🍉": "ဖရဲသီး", + "🍊": "အခွံပွလိမ္မော်သီး", + "🍋": "ရှောက်သီး", + "🍌": "ငှက်ပျောသီး", + "🍍": "နာနတ်သီး", + "🥭": "သရက်သီး", + "🍏": "ပန်းသီးစိမ်း", + "🍐": "သစ်တော်သီး", + "🍑": "မက်မွန်သီး", + "🍒": "ချယ်ရီသီးများ", + "🍓": "စတော်ဘယ်ရီ", + "🫐": "ဘလူးဘယ်ရီ", + "🥝": "ကီဝီသီး", + "🍅": "ခရမ်းချဉ်သီး", + "🫒": "သံလွင်", + "🥥": "အုန်းသီး", + "🥑": "ထောပတ်သီး", + "🍆": "ခရမ်းသီး", + "🥕": "မုန်လာဥ", + "🌽": "ပြောင်းနှံ", + "🌶️": "ငရုတ်သီး", + "🥬": "အရွက်ဖားဖား သစ်ရွက်စိမ်း", + "🥦": "ပန်းဂေါ်ဖီစိမ်း", + "🧅": "ကြက်သွန်နီ", + "🍄": "မှို", + "🥜": "မြေပဲ", + "🥐": "လခြမ်းကွေးပေါင်မုန့်", + "🥖": "ပြင်သစ်ပေါင်မုန့်", + "🥨": "မုန့်ကြိုးလိမ်", + "🥯": "ပေါင်မုန့်အကွင်း", + "🥞": "မုန့်အိုးကင်းကြော်", + "🧇": "ဒေါင်းဖန်ဝါ မုန့်", + "🍔": "ဟမ်ဘာဂါ", + "🍕": "ပီဇာ", + "🌭": "ဟော့ဒေါ့", + "🌮": "တာကို", + "🍿": "ပြောင်းဖူးပေါက်ပေါက်", + "🦀": "ကဏန်း", + "🦞": "ကျောက်ပုစွန်", + "🍨": "ရေခဲမုန့်", + "🍩": "ဒိုးနတ်", + "🍪": "ကွတ်ကီး", + "🎂": "မွေးနေ့ ကိတ်မုန့်", + "🧁": "ကြက်ဥမုန့်", + "🍫": "ချောကလက် အချောင်း", + "🍬": "သကြားလုံး", + "🍭": "ချိုချဉ်ပလုတ်တုတ်", + "🫖": "ခရား", + "🧃": "အဖျော်ရေ ဘူး", + "🧉": "ချီမာရအို", + "🧭": "သံလိုက်အိမ်မြှောင်", + "🏔️": "ဆီးနှင်းဖုံးနေသည့် တောင်", + "🌋": "မီးတောင်", + "🏕️": "စခန်းချနေခြင်း", + "🏝️": "လူသူမဲ့ကျွန်း", + "🏡": "ပန်းခြံနှင့် အိမ်", + "⛲️": "အလှပြ ရေပန်း", + "🎠": "ချားရဟတ် မြင်း", + "🎡": "ချားရဟတ်", + "🎢": "သည်းဖိုရထား", + "💈": "ဆံပင်ညှပ်ဆိုင် တိုင်", + "🚆": "ရထား", + "🚋": "ဓာတ်ရထားတွဲ", + "🚍️": "လာနေသည့် ဘတ်စ်ကား", + "🚕": "တက်ကစီ", + "🚗": "မော်တော်ကား", + "🚚": "ပစ္စည်းပို့သည့် ထရပ်ကား", + "🚜": "လယ်ထွန်စက်", + "🛵": "မော်တာစက်တပ် စကူတာ", + "🛺": "သုံးဘီး", + "🛴": "စကူတာ", + "🛹": "စကိတ်လျှောပြား", + "🛼": "ရိုလာ စကိတ်", + "⚓️": "ကျောက်ဆူး", + "⛵️": "ရွက်လှေ", + "🛶": "ကနူး", + "🚤": "အမြန်စက်လှေ", + "🚢": "သင်္ဘော", + "✈️": "လေယာဉ်", + "🚁": "ရဟတ်ယာဉ်", + "🚠": "တောင်တက် ဓာတ်ကြိုးရထားလမ်း", + "🛰️": "ဂြိုဟ်တု", + "🚀": "ဒုံးယာဉ်", + "🛸": "ပန်းကန်ပြားပျံ", + "⏰": "နှိုးစက်နာရီ", + "🌙": "လခြမ်း", + "🌡️": "သာမိုမီတာ", + "☀️": "နေ", + "🪐": "ကွင်းပါရှိသည့် ဂြိုဟ်", + "🌟": "တောက်ပသည့် ကြယ်", + "🌀": "ဆိုင်ကလုန်း", + "🌈": "သက်တံ", + "☂️": "ထီး", + "❄️": "နှင်းပွင့်", + "☄️": "ကြယ်တံခွန်", + "🔥": "မီး", + "💧": "အစက်ကလေး", + "🌊": "ရေလှိုင်း", + "🎃": "ဖရုံသီး မီးအိမ်", + "✨": "မီးပွင့်များ", + "🎈": "လေပူဖောင်း", + "🎉": "ပါတီဗြောက်အိုး", + "🎏": "ငါးကြင်း တံခွန်", + "🎀": "ဖဲကြိုး", + "🎁": "ထုပ်ပိုးထားသည့် လက်ဆောင်", + "🎟️": "ဝင်ခွင့် လက်မှတ်များ", + "🏆️": "ဖလားဆု", + "⚽️": "ဘောလုံး", + "🏀": "ဘတ်စကက်ဘော", + "🏈": "အမေရိကန် ဘောလုံး", + "🎾": "တင်းနစ်", + "🥏": "ချပ်ပြားဝိုင်း ပစ်", + "🏓": "စားပွဲတင် တင်းနစ်", + "🏸": "ကြက်တောင်ရိုက်ခြင်း", + "🤿": "ရေငုပ် မျက်နှာဖုံး", + "🥌": "ရေခဲပြင်ကျောက်ပြားဝိုင်း", + "🎯": "ဗဟိုချက်ထိမှန်ခြင်း", + "🪀": "ယိုယို", + "🪁": "စွန်", + "🔮": "ကသိုဏ်းဖန်လုံး", + "🎲": "အန်စာတုံး", + "🧩": "ဂျစ်စော အပိုင်းအစ", + "🎨": "ဆေးစပ်ရာ အပြား", + "🧵": "အပ်ချည်", + "👕": "တီရှပ်", + "🧦": "ခြေအိတ်", + "👗": "ဝတ်စုံ", + "🩳": "ဘောင်းဘီတို", + "🎒": "ကျောင်းသား ကျောပိုးအိတ်", + "👟": "အပြေး ဖိနပ်", + "👑": "သရဖူ", + "🧢": "ကက်ဦးထုတ်", + "💄": "နှုတ်ခမ်းနီ", + "💍": "လက်စွပ်", + "💎": "ကျောက်မျက် ရတနာ", + "📢": "အသံချဲ့စက်", + "🎶": "ဂီတ သင်္ကေတများ", + "🎙️": "စတူဒီယို မိုက်ကရိုဖုန်း", + "📻️": "ရေဒီယို", + "🎷": "ဆက်ဆိုဖုန်း", + "🪗": "အကော်ဒီယံ", + "🎸": "ဂစ်တာ", + "🎺": "ခရာ", + "🎻": "တယော", + "🪕": "ဘင်ဂျို", + "🥁": "ဗုံ", + "☎️": "တယ်လီဖုန်း", + "🔋": "ဘက်ထရီ", + "💿️": "အလင်းသုံးဒစ်", + "🧮": "ပေသီးတွက်ခုံ", + "🎬️": "ရုပ်ရှင် ကလက်ဘုတ်", + "💡": "မီးလုံး", + "🔦": "ဓာတ်မီး", + "🏮": "စက္ကူမီးအိမ် အနီ", + "📕": "ပိတ်ထားသည့် စာအုပ်", + "🏷️": "တံဆိပ်", + "💳️": "ခရက်ဒစ်ကတ်", + "✏️": "ခဲတံ", + "🖌️": "စုတ်တံ", + "🖍️": "ရောင်စုံဖယောင်းခဲတံ", + "📌": "ဖိထိုးရသည့် ပင်အပ်", + "📎": "စက္ကူညှပ်", + "🔑": "သော့", + "🪃": "ထိကပြန်", + "🏹": "လေးနှင့် မြား", + "⚖️": "ချိန်ခွင်", + "🧲": "သံလိုက်", + "🧪": "ဖန်ပြွန်", + "🧬": "မျိုးရိုးဗီဇ", + "🔬": "အဏုကြည့်မှန်ပြောင်း", + "🔭": "အဝေးကြည့်မှန်ပြောင်း", + "📡": "ဂြိုဟ်တု စလောင်း", + "🪑": "ကုလားထိုင်", + "🧹": "တံမြက်စည်း", + "🗿": "မိုအိုင်" + }, + "nl": { + "👽️": "buitenaards wezen", + "🤖": "robot", + "🧠": "brein", + "👁️": "oog", + "🧙": "magiër", + "🧚": "elfje", + "🧜": "zeemeermin", + "🐵": "apengezicht", + "🦧": "orang-oetang", + "🐶": "hondengezicht", + "🐺": "wolf", + "🦊": "vos", + "🦝": "wasbeer", + "🐱": "kattengezicht", + "🦁": "leeuw", + "🐯": "tijgergezicht", + "🐴": "paardengezicht", + "🦄": "eenhoorn", + "🦓": "zebra", + "🦌": "hert", + "🐮": "koeiengezicht", + "🐷": "varkensgezicht", + "🐗": "zwijn", + "🐪": "dromedaris", + "🦙": "lama", + "🦒": "giraffe", + "🐘": "olifant", + "🦣": "mammoet", + "🦏": "neushoorn", + "🐭": "muizengezicht", + "🐰": "konijnengezicht", + "🐿️": "eekhoorn", + "🦔": "egel", + "🦇": "vleermuis", + "🐻": "beer", + "🐨": "koala", + "🦥": "luiaard", + "🦦": "otter", + "🦘": "kangoeroe", + "🐥": "naar voren kijkend kuikentje", + "🐦️": "vogel", + "🕊️": "duif", + "🦆": "eend", + "🦉": "uil", + "🦤": "dodo", + "🪶": "veer", + "🦩": "flamingo", + "🦚": "pauw", + "🦜": "papegaai", + "🐊": "krokodil", + "🐢": "schildpad", + "🦎": "hagedis", + "🐍": "slang", + "🐲": "drakengezicht", + "🦕": "sauropode", + "🐳": "spuitende walvis", + "🐬": "dolfijn", + "🦭": "zeehond", + "🐟️": "vis", + "🐠": "tropische vis", + "🦈": "haai", + "🐙": "octopus", + "🐚": "schelp", + "🐌": "slak", + "🦋": "vlinder", + "🐛": "insect", + "🐝": "honingbij", + "🐞": "lieveheersbeestje", + "💐": "boeket", + "🌹": "roos", + "🌺": "hibiscus", + "🌻": "zonnebloem", + "🌷": "tulp", + "🌲": "naaldboom", + "🌳": "loofboom", + "🌴": "palmboom", + "🌵": "cactus", + "🌿": "kruid", + "🍁": "esdoornblad", + "🍇": "druiven", + "🍈": "meloen", + "🍉": "watermeloen", + "🍊": "mandarijn", + "🍋": "citroen", + "🍌": "banaan", + "🍍": "ananas", + "🥭": "mango", + "🍏": "groene appel", + "🍐": "peer", + "🍑": "perzik", + "🍒": "kersen", + "🍓": "aardbei", + "🫐": "bosbessen", + "🥝": "kiwi", + "🍅": "tomaat", + "🫒": "olijf", + "🥥": "kokosnoot", + "🥑": "avocado", + "🍆": "aubergine", + "🥕": "wortel", + "🌽": "maïskolf", + "🌶️": "hete peper", + "🥬": "bladgroente", + "🥦": "broccoli", + "🧅": "ui", + "🍄": "paddenstoel", + "🥜": "pinda’s", + "🥐": "croissant", + "🥖": "stokbrood", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "pannenkoeken", + "🧇": "wafel", + "🍔": "hamburger", + "🍕": "pizzapunt", + "🌭": "hotdog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "krab", + "🦞": "kreeft", + "🍨": "ijs", + "🍩": "donut", + "🍪": "koekje", + "🎂": "verjaardagstaart", + "🧁": "cupcake", + "🍫": "chocoladereep", + "🍬": "snoep", + "🍭": "lolly", + "🫖": "theepot", + "🧃": "pakje drinken", + "🧉": "maté", + "🧭": "kompas", + "🏔️": "berg met besneeuwde toppen", + "🌋": "vulkaan", + "🏕️": "kamperen", + "🏝️": "onbewoond eiland", + "🏡": "huis met tuin", + "⛲️": "fontein", + "🎠": "draaimolenpaard", + "🎡": "reuzenrad", + "🎢": "achtbaan", + "💈": "kapperspaal", + "🚆": "trein", + "🚋": "tramwagon", + "🚍️": "naderende bus", + "🚕": "taxi", + "🚗": "auto", + "🚚": "bestelbus", + "🚜": "tractor", + "🛵": "scooter", + "🛺": "riksja", + "🛴": "step", + "🛹": "skateboard", + "🛼": "rolschaats", + "⚓️": "anker", + "⛵️": "zeilboot", + "🛶": "kano", + "🚤": "speedboot", + "🚢": "schip", + "✈️": "vliegtuig", + "🚁": "helikopter", + "🚠": "bergkabelbaan", + "🛰️": "satelliet", + "🚀": "raket", + "🛸": "vliegende schotel", + "⏰": "wekker", + "🌙": "maansikkel", + "🌡️": "thermometer", + "☀️": "zon", + "🪐": "planeet met ringen", + "🌟": "stralende ster", + "🌀": "cycloon", + "🌈": "regenboog", + "☂️": "paraplu", + "❄️": "sneeuwvlok", + "☄️": "komeet", + "🔥": "vuur", + "💧": "druppel", + "🌊": "golf", + "🎃": "halloweenlantaarn", + "✨": "sterretjes", + "🎈": "ballon", + "🎉": "feestknaller", + "🎏": "karperslinger", + "🎀": "strik", + "🎁": "ingepakt cadeau", + "🎟️": "entreekaartjes", + "🏆️": "trofee", + "⚽️": "voetbal", + "🏀": "basketbal", + "🏈": "american football", + "🎾": "tennis", + "🥏": "frisbee", + "🏓": "pingpong", + "🏸": "badminton", + "🤿": "duikbril", + "🥌": "curlingsteen", + "🎯": "directe treffer", + "🪀": "jojo", + "🪁": "vlieger", + "🔮": "kristallen bol", + "🎲": "dobbelsteen", + "🧩": "puzzelstukje", + "🎨": "schilderspalet", + "🧵": "garen", + "👕": "T-shirt", + "🧦": "sokken", + "👗": "jurk", + "🩳": "korte broek", + "🎒": "schooltas", + "👟": "sportschoen", + "👑": "kroon", + "🧢": "pet", + "💄": "lippenstift", + "💍": "ring", + "💎": "edelsteen", + "📢": "luidspreker", + "🎶": "muzieknoten", + "🎙️": "studiomicrofoon", + "📻️": "radio", + "🎷": "saxofoon", + "🪗": "accordeon", + "🎸": "gitaar", + "🎺": "trompet", + "🎻": "viool", + "🪕": "banjo", + "🥁": "trommel", + "☎️": "telefoon", + "🔋": "batterij", + "💿️": "optische schijf", + "🧮": "abacus", + "🎬️": "klapbord", + "💡": "gloeilamp", + "🔦": "zaklamp", + "🏮": "rode papieren lantaarn", + "📕": "gesloten boek", + "🏷️": "label", + "💳️": "creditcard", + "✏️": "potlood", + "🖌️": "kwast", + "🖍️": "krijtje", + "📌": "punaise", + "📎": "paperclip", + "🔑": "sleutel", + "🪃": "boemerang", + "🏹": "pijl en boog", + "⚖️": "weegschaal", + "🧲": "magneet", + "🧪": "reageerbuis", + "🧬": "DNA", + "🔬": "microscoop", + "🔭": "telescoop", + "📡": "satellietschotel", + "🪑": "hoge stoel", + "🧹": "bezem", + "🗿": "moai-beeld" + }, + "pl": { + "👽️": "ufoludek", + "🤖": "głowa robota", + "🧠": "mózg", + "👁️": "oko", + "🧙": "mag", + "🧚": "wróżka", + "🧜": "syrena", + "🐵": "głowa małpy", + "🦧": "orangutan", + "🐶": "głowa psa", + "🐺": "głowa wilka", + "🦊": "głowa lisa", + "🦝": "szop", + "🐱": "głowa kota", + "🦁": "głowa lwa", + "🐯": "głowa tygrysa", + "🐴": "głowa konia", + "🦄": "głowa jednorożca", + "🦓": "zebra", + "🦌": "jeleń", + "🐮": "głowa krowy", + "🐷": "głowa świni", + "🐗": "dzik", + "🐪": "wielbłąd", + "🦙": "lama", + "🦒": "żyrafa", + "🐘": "słoń", + "🦣": "mamut", + "🦏": "nosorożec", + "🐭": "głowa myszy", + "🐰": "głowa królika", + "🐿️": "pręgowiec", + "🦔": "jeż", + "🦇": "nietoperz", + "🐻": "głowa niedźwiedzia", + "🐨": "koala", + "🦥": "leniwiec", + "🦦": "wydra", + "🦘": "kangur", + "🐥": "kurczątko od przodu", + "🐦️": "ptak", + "🕊️": "gołąb", + "🦆": "kaczka", + "🦉": "sowa", + "🦤": "dodo", + "🪶": "pióro", + "🦩": "flaming", + "🦚": "paw", + "🦜": "papuga", + "🐊": "krokodyl", + "🐢": "żółw", + "🦎": "jaszczurka", + "🐍": "wąż", + "🐲": "głowa smoka", + "🦕": "zauropod", + "🐳": "wieloryb tryskający wodą", + "🐬": "delfin", + "🦭": "foka", + "🐟️": "ryba", + "🐠": "ryba tropikalna", + "🦈": "rekin", + "🐙": "ośmiornica", + "🐚": "muszla spiralna", + "🐌": "ślimak", + "🦋": "motyl", + "🐛": "gąsienica", + "🐝": "pszczoła", + "🐞": "biedronka", + "💐": "bukiet kwiatów", + "🌹": "róża", + "🌺": "kwiat hibiskusa", + "🌻": "słonecznik", + "🌷": "tulipan", + "🌲": "wiecznie zielone drzewo", + "🌳": "drzewo liściaste", + "🌴": "palma", + "🌵": "kaktus", + "🌿": "zioło", + "🍁": "liść klonowy", + "🍇": "winogrona", + "🍈": "melon", + "🍉": "arbuz", + "🍊": "mandarynka", + "🍋": "cytryna", + "🍌": "banan", + "🍍": "ananas", + "🥭": "mango", + "🍏": "zielone jabłko", + "🍐": "gruszka", + "🍑": "brzoskwinia", + "🍒": "wiśnie", + "🍓": "truskawka", + "🫐": "borówka amerykańska", + "🥝": "owoc kiwi", + "🍅": "pomidor", + "🫒": "oliwka", + "🥥": "kokos", + "🥑": "awokado", + "🍆": "bakłażan", + "🥕": "marchew", + "🌽": "kolba kukurydzy", + "🌶️": "ostra papryka", + "🥬": "zielenina liściasta", + "🥦": "brokuł", + "🧅": "cebula", + "🍄": "grzyb", + "🥜": "orzeszki ziemne", + "🥐": "rogalik", + "🥖": "bagietka", + "🥨": "precel", + "🥯": "bajgiel", + "🥞": "naleśniki", + "🧇": "gofr", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "krab", + "🦞": "homar", + "🍨": "lody", + "🍩": "pączek z dziurką", + "🍪": "ciastko", + "🎂": "tort urodzinowy", + "🧁": "babeczka", + "🍫": "tabliczka czekolady", + "🍬": "cukierek", + "🍭": "lizak", + "🫖": "czajniczek", + "🧃": "napój w kartoniku", + "🧉": "yerba mate", + "🧭": "kompas", + "🏔️": "góra z czapą lodową", + "🌋": "wulkan", + "🏕️": "kemping", + "🏝️": "bezludna wyspa", + "🏡": "dom z ogrodem", + "⛲️": "fontanna", + "🎠": "koń z karuzeli", + "🎡": "diabelski młyn", + "🎢": "kolejka górska", + "💈": "słup fryzjerski", + "🚆": "pociąg", + "🚋": "wagon tramwajowy", + "🚍️": "nadjeżdżający autobus", + "🚕": "taksówka", + "🚗": "samochód", + "🚚": "samochód dostawczy", + "🚜": "ciągnik", + "🛵": "skuter", + "🛺": "autoriksza", + "🛴": "hulajnoga", + "🛹": "deskorolka", + "🛼": "wrotka", + "⚓️": "kotwica", + "⛵️": "żaglówka", + "🛶": "kajak", + "🚤": "ścigacz wodny", + "🚢": "statek", + "✈️": "samolot", + "🚁": "helikopter", + "🚠": "górska kolej linowa", + "🛰️": "satelita", + "🚀": "rakieta", + "🛸": "latający talerz", + "⏰": "budzik", + "🌙": "półksiężyc", + "🌡️": "termometr", + "☀️": "słońce", + "🪐": "planeta z pierścieniami", + "🌟": "błyszcząca gwiazda", + "🌀": "cyklon", + "🌈": "tęcza", + "☂️": "parasol", + "❄️": "płatek śniegu", + "☄️": "kometa", + "🔥": "ogień", + "💧": "kropla", + "🌊": "fala", + "🎃": "dynia na halloween", + "✨": "gwiazdki", + "🎈": "balon", + "🎉": "tuba z konfetti", + "🎏": "flaga w kształcie karpia", + "🎀": "wstążka", + "🎁": "zapakowany prezent", + "🎟️": "bilety wstępu", + "🏆️": "puchar", + "⚽️": "piłka nożna", + "🏀": "koszykówka", + "🏈": "futbol amerykański", + "🎾": "tenis", + "🥏": "frisbee", + "🏓": "tenis stołowy", + "🏸": "badminton", + "🤿": "maska do nurkowania", + "🥌": "kamień do curlingu", + "🎯": "strzał w 10", + "🪀": "jojo", + "🪁": "latawiec", + "🔮": "kryształowa kula", + "🎲": "kostka do gry", + "🧩": "element układanki", + "🎨": "paleta malarska", + "🧵": "nić", + "👕": "koszulka", + "🧦": "skarpetki", + "👗": "sukienka", + "🩳": "szorty", + "🎒": "tornister", + "👟": "but do biegania", + "👑": "korona", + "🧢": "bejsbolówka", + "💄": "szminka", + "💍": "pierścionek", + "💎": "kamień szlachetny", + "📢": "głośnik", + "🎶": "nuty", + "🎙️": "mikrofon studyjny", + "📻️": "radio", + "🎷": "saksofon", + "🪗": "akordeon", + "🎸": "gitara", + "🎺": "trąbka", + "🎻": "skrzypce", + "🪕": "banjo", + "🥁": "bęben", + "☎️": "telefon", + "🔋": "bateria", + "💿️": "dysk optyczny", + "🧮": "liczydło", + "🎬️": "klaps", + "💡": "żarówka", + "🔦": "latarka", + "🏮": "czerwony lampion", + "📕": "zamknięta książka", + "🏷️": "przywieszka do kluczy", + "💳️": "karta kredytowa", + "✏️": "ołówek", + "🖌️": "pędzel", + "🖍️": "kredka", + "📌": "pinezka", + "📎": "spinacz", + "🔑": "klucz", + "🪃": "bumerang", + "🏹": "łuk i strzała", + "⚖️": "waga szalkowa", + "🧲": "magnes", + "🧪": "probówka", + "🧬": "dna", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "antena satelitarna", + "🪑": "krzesło", + "🧹": "miotła", + "🗿": "moai" + }, + "pt": { + "👽️": "alienígena", + "🤖": "rosto de robô", + "🧠": "cérebro", + "👁️": "olho", + "🧙": "mago", + "🧚": "fada", + "🧜": "pessoa sereia", + "🐵": "rosto de macaco", + "🦧": "orangotango", + "🐶": "rosto de cachorro", + "🐺": "rosto de lobo", + "🦊": "rosto de raposa", + "🦝": "guaxinim", + "🐱": "rosto de gato", + "🦁": "rosto de leão", + "🐯": "rosto de tigre", + "🐴": "rosto de cavalo", + "🦄": "rosto de unicórnio", + "🦓": "zebra", + "🦌": "cervo", + "🐮": "rosto de vaca", + "🐷": "rosto de porco", + "🐗": "javali", + "🐪": "camelo", + "🦙": "lhama", + "🦒": "girafa", + "🐘": "elefante", + "🦣": "mamute", + "🦏": "rinoceronte", + "🐭": "rosto de camundongo", + "🐰": "rosto de coelho", + "🐿️": "esquilo", + "🦔": "porco-espinho", + "🦇": "morcego", + "🐻": "rosto de urso", + "🐨": "coala", + "🦥": "preguiça", + "🦦": "lontra", + "🦘": "canguru", + "🐥": "pintinho de frente", + "🐦️": "pássaro", + "🕊️": "pomba branca", + "🦆": "pato", + "🦉": "coruja", + "🦤": "dodô", + "🪶": "pena", + "🦩": "flamingo", + "🦚": "pavão", + "🦜": "papagaio", + "🐊": "crocodilo", + "🐢": "tartaruga", + "🦎": "lagartixa", + "🐍": "cobra", + "🐲": "rosto de dragão", + "🦕": "saurópode", + "🐳": "baleia esguichando água", + "🐬": "golfinho", + "🦭": "foca", + "🐟️": "peixe", + "🐠": "peixe tropical", + "🦈": "tubarão", + "🐙": "polvo", + "🐚": "caramujo", + "🐌": "caracol", + "🦋": "borboleta", + "🐛": "inseto", + "🐝": "abelha", + "🐞": "joaninha", + "💐": "buquê", + "🌹": "rosa", + "🌺": "hibisco", + "🌻": "girassol", + "🌷": "tulipa", + "🌲": "conífera", + "🌳": "árvore caidiça", + "🌴": "palmeira", + "🌵": "cacto", + "🌿": "erva", + "🍁": "folha de bordo", + "🍇": "uvas", + "🍈": "melão", + "🍉": "melancia", + "🍊": "tangerina", + "🍋": "limão", + "🍌": "banana", + "🍍": "abacaxi", + "🥭": "manga", + "🍏": "maçã verde", + "🍐": "pera", + "🍑": "pêssego", + "🍒": "cereja", + "🍓": "morango", + "🫐": "mirtilos", + "🥝": "kiwi", + "🍅": "tomate", + "🫒": "azeitona", + "🥥": "coco", + "🥑": "abacate", + "🍆": "berinjela", + "🥕": "cenoura", + "🌽": "milho", + "🌶️": "pimenta", + "🥬": "verdura", + "🥦": "brócolis", + "🧅": "cebola", + "🍄": "cogumelo", + "🥜": "amendoim", + "🥐": "croissant", + "🥖": "baguete", + "🥨": "pretzel", + "🥯": "rosca", + "🥞": "panquecas", + "🧇": "waffle", + "🍔": "hambúrguer", + "🍕": "pizza", + "🌭": "cachorro-quente", + "🌮": "taco", + "🍿": "pipoca", + "🦀": "caranguejo", + "🦞": "lagosta", + "🍨": "sorvete", + "🍩": "donut", + "🍪": "biscoito", + "🎂": "bolo de aniversário", + "🧁": "cupcake", + "🍫": "chocolate", + "🍬": "bala", + "🍭": "pirulito", + "🫖": "bule", + "🧃": "suco de caixa", + "🧉": "mate", + "🧭": "bússola", + "🏔️": "montanha com neve", + "🌋": "vulcão", + "🏕️": "acampamento", + "🏝️": "ilha deserta", + "🏡": "casa com jardim", + "⛲️": "fonte", + "🎠": "carrossel", + "🎡": "roda gigante", + "🎢": "montanha russa", + "💈": "barbearia", + "🚆": "trem", + "🚋": "bonde", + "🚍️": "ônibus se aproximando", + "🚕": "táxi", + "🚗": "carro", + "🚚": "caminhão de entrega", + "🚜": "trator", + "🛵": "scooter", + "🛺": "automóvel riquixá", + "🛴": "patinete", + "🛹": "skate", + "🛼": "patins de rodas", + "⚓️": "âncora", + "⛵️": "barco a vela", + "🛶": "canoa", + "🚤": "lancha", + "🚢": "navio", + "✈️": "avião", + "🚁": "helicóptero", + "🚠": "cabo suspenso usado em teleféricos nas montanhas", + "🛰️": "satélite", + "🚀": "foguete", + "🛸": "disco voador", + "⏰": "despertador", + "🌙": "lua crescente", + "🌡️": "termômetro", + "☀️": "sol", + "🪐": "planeta com anéis", + "🌟": "estrela brilhante", + "🌀": "ciclone", + "🌈": "arco-íris", + "☂️": "guarda-chuva", + "❄️": "floco de neve", + "☄️": "cometa", + "🔥": "fogo", + "💧": "gota", + "🌊": "onda", + "🎃": "abóbora de halloween", + "✨": "brilhos", + "🎈": "balão", + "🎉": "cone de festa", + "🎏": "bandeira de carpas", + "🎀": "laço de fita", + "🎁": "presente", + "🎟️": "ingresso de cinema", + "🏆️": "troféu", + "⚽️": "bola de futebol", + "🏀": "bola de basquete", + "🏈": "bola de futebol americano", + "🎾": "tênis", + "🥏": "frisbee", + "🏓": "pingue-pongue", + "🏸": "badminton", + "🤿": "máscara de mergulho", + "🥌": "pedra de curling", + "🎯": "no alvo", + "🪀": "ioiô", + "🪁": "pipa", + "🔮": "bola de cristal", + "🎲": "jogo de dado", + "🧩": "quebra-cabeça", + "🎨": "paleta de tintas", + "🧵": "carretel", + "👕": "camiseta", + "🧦": "meias", + "👗": "vestido", + "🩳": "shorts", + "🎒": "mochila", + "👟": "tênis de corrida", + "👑": "coroa", + "🧢": "boné", + "💄": "batom", + "💍": "anel", + "💎": "pedra preciosa", + "📢": "buzina", + "🎶": "notas musicais", + "🎙️": "microfone de estúdio", + "📻️": "rádio", + "🎷": "saxofone", + "🪗": "acordeão", + "🎸": "guitarra", + "🎺": "trompete", + "🎻": "violino", + "🪕": "banjo", + "🥁": "tambor", + "☎️": "telefone no gancho", + "🔋": "pilha", + "💿️": "cd", + "🧮": "ábaco", + "🎬️": "claquete", + "💡": "lâmpada", + "🔦": "lanterna", + "🏮": "lanterna vermelha de papel", + "📕": "livro fechado", + "🏷️": "etiqueta", + "💳️": "cartão de crédito", + "✏️": "lápis", + "🖌️": "pincel", + "🖍️": "giz de cera", + "📌": "tacha", + "📎": "clipe de papel", + "🔑": "chave", + "🪃": "bumerangue", + "🏹": "arco e flecha", + "⚖️": "balança", + "🧲": "ímã", + "🧪": "tubo de ensaio", + "🧬": "dna", + "🔬": "microscópio", + "🔭": "telescópio", + "📡": "antena parabólica", + "🪑": "cadeira", + "🧹": "vassoura", + "🗿": "moai" + }, + "ro": { + "👽️": "extraterestru", + "🤖": "robot", + "🧠": "creier", + "👁️": "un ochi", + "🧙": "mag", + "🧚": "zână", + "🧜": "persoană sirenă", + "🐵": "față de maimuță", + "🦧": "urangutan", + "🐶": "față de câine", + "🐺": "lup", + "🦊": "vulpe", + "🦝": "raton", + "🐱": "față de pisică", + "🦁": "leu", + "🐯": "față de tigru", + "🐴": "față de cal", + "🦄": "unicorn", + "🦓": "zebră", + "🦌": "cerb", + "🐮": "cap de vacă", + "🐷": "cap de porc", + "🐗": "mistreț", + "🐪": "dromader", + "🦙": "lamă", + "🦒": "girafă", + "🐘": "elefant", + "🦣": "mamut", + "🦏": "rinocer", + "🐭": "față de șoarece", + "🐰": "față de iepure", + "🐿️": "veveriță", + "🦔": "arici", + "🦇": "liliac", + "🐻": "urs", + "🐨": "koala", + "🦥": "leneș", + "🦦": "vidră", + "🦘": "cangur", + "🐥": "pui de găină din față", + "🐦️": "pasăre", + "🕊️": "porumbiță", + "🦆": "rață", + "🦉": "bufniță", + "🦤": "dodo", + "🪶": "pană", + "🦩": "flamingo", + "🦚": "păun", + "🦜": "papagal mare", + "🐊": "crocodil", + "🐢": "broască țestoasă", + "🦎": "șopârlă", + "🐍": "șarpe", + "🐲": "față de dragon", + "🦕": "sauropod", + "🐳": "balenă împroșcând apă", + "🐬": "delfin", + "🦭": "focă", + "🐟️": "pește", + "🐠": "pește tropical", + "🦈": "rechin", + "🐙": "caracatiță", + "🐚": "cochilie spiralată", + "🐌": "melc", + "🦋": "fluture", + "🐛": "gândac", + "🐝": "albină", + "🐞": "buburuză", + "💐": "buchet de flori", + "🌹": "trandafir", + "🌺": "hibiscus", + "🌻": "floarea soarelui", + "🌷": "lalea", + "🌲": "arbore conifer", + "🌳": "arbore foios", + "🌴": "palmier", + "🌵": "cactus", + "🌿": "plantă aromatică", + "🍁": "frunză de arțar", + "🍇": "struguri", + "🍈": "pepene galben", + "🍉": "pepene verde", + "🍊": "mandarină", + "🍋": "lămâie", + "🍌": "banană", + "🍍": "ananas", + "🥭": "mango", + "🍏": "măr verde", + "🍐": "pară", + "🍑": "piersică", + "🍒": "cireșe", + "🍓": "căpșună", + "🫐": "afine", + "🥝": "kiwi", + "🍅": "roșie", + "🫒": "măslină", + "🥥": "nucă de cocos", + "🥑": "avocado", + "🍆": "vânătă", + "🥕": "morcov", + "🌽": "știulete de porumb", + "🌶️": "ardei iute", + "🥬": "verdețuri", + "🥦": "broccoli", + "🧅": "ceapă", + "🍄": "ciupercă", + "🥜": "arahide", + "🥐": "croasant", + "🥖": "baghetă de pâine", + "🥨": "covrig", + "🥯": "bagel", + "🥞": "clătite", + "🧇": "gofră", + "🍔": "hamburger", + "🍕": "pizza", + "🌭": "hot dog", + "🌮": "taco", + "🍿": "floricele de porumb", + "🦀": "rac", + "🦞": "homar", + "🍨": "înghețată", + "🍩": "gogoașă americană", + "🍪": "fursec", + "🎂": "tort aniversar", + "🧁": "brioșă", + "🍫": "baton de ciocolată", + "🍬": "bomboană", + "🍭": "acadea", + "🫖": "ceainic", + "🧃": "cutie de băutură", + "🧉": "mate", + "🧭": "busolă", + "🏔️": "vârf de munte înzăpezit", + "🌋": "vulcan", + "🏕️": "camping", + "🏝️": "insulă pustie", + "🏡": "casă cu grădină", + "⛲️": "fântână arteziană", + "🎠": "căluț de carusel", + "🎡": "roata mare", + "🎢": "montagne russe", + "💈": "semn de frizerie", + "🚆": "tren", + "🚋": "vagon de tramvai", + "🚍️": "autobuz care se apropie", + "🚕": "taxi", + "🚗": "automobil", + "🚚": "camion de marfă", + "🚜": "tractor", + "🛵": "scuter", + "🛺": "autoricșă", + "🛴": "trotinetă", + "🛹": "skateboard", + "🛼": "patină cu rotile", + "⚓️": "ancoră", + "⛵️": "barcă cu pânze", + "🛶": "canoe", + "🚤": "barcă de viteză", + "🚢": "vapor", + "✈️": "avion", + "🚁": "elicopter", + "🚠": "telecabină montană", + "🛰️": "satelit", + "🚀": "rachetă", + "🛸": "farfurie zburătoare", + "⏰": "ceas deșteptător", + "🌙": "semilună", + "🌡️": "termometru", + "☀️": "soare", + "🪐": "planetă cu inele", + "🌟": "stea strălucitoare", + "🌀": "ciclon", + "🌈": "curcubeu", + "☂️": "umbrelă", + "❄️": "fulg de nea", + "☄️": "cometă", + "🔥": "foc", + "💧": "picătură", + "🌊": "val", + "🎃": "dovleac cu felinar", + "✨": "steluțe", + "🎈": "balon", + "🎉": "tun cu confetti", + "🎏": "crap decorativ în vânt", + "🎀": "fundă", + "🎁": "cadou împachetat", + "🎟️": "bilete de intrare", + "🏆️": "trofeu", + "⚽️": "minge de fotbal", + "🏀": "baschet", + "🏈": "fotbal american", + "🎾": "tenis", + "🥏": "disc zburător", + "🏓": "ping pong", + "🏸": "badminton", + "🤿": "mască de scufundări", + "🥌": "piatră de curling", + "🎯": "fix la țintă", + "🪀": "yo-yo", + "🪁": "zmeu", + "🔮": "glob de cristal", + "🎲": "zar", + "🧩": "piesă de puzzle", + "🎨": "paletă de pictor", + "🧵": "ață", + "👕": "tricou", + "🧦": "șosete", + "👗": "rochie", + "🩳": "șort", + "🎒": "rucsac", + "👟": "pantof sport", + "👑": "coroană", + "🧢": "șapcă", + "💄": "ruj", + "💍": "inel", + "💎": "piatră prețioasă", + "📢": "portavoce", + "🎶": "note muzicale", + "🎙️": "microfon de studio", + "📻️": "radio", + "🎷": "saxofon", + "🪗": "acordeon", + "🎸": "chitară", + "🎺": "trompetă", + "🎻": "vioară", + "🪕": "banjo", + "🥁": "tobă", + "☎️": "telefon", + "🔋": "baterie", + "💿️": "cd", + "🧮": "abac", + "🎬️": "clachetă", + "💡": "bec", + "🔦": "lanternă", + "🏮": "felinar din hârtie roșie", + "📕": "carte închisă", + "🏷️": "etichetă", + "💳️": "card de credit", + "✏️": "creion", + "🖌️": "pensulă", + "🖍️": "creion colorat", + "📌": "piuneză", + "📎": "agrafă de hârtie", + "🔑": "cheie", + "🪃": "bumerang", + "🏹": "arc și săgeată", + "⚖️": "balanță", + "🧲": "magnet", + "🧪": "eprubetă", + "🧬": "ADN", + "🔬": "microscop", + "🔭": "telescop", + "📡": "antenă satelit", + "🪑": "scaun", + "🧹": "mătură", + "🗿": "statuie moai" + }, + "ru": { + "👽️": "инопланетянин", + "🤖": "робот", + "🧠": "мозг", + "👁️": "глаз", + "🧙": "маг", + "🧚": "фея", + "🧜": "русалка", + "🐵": "морда обезьяны", + "🦧": "орангутан", + "🐶": "морда собаки", + "🐺": "морда волка", + "🦊": "морда лисицы", + "🦝": "морда енота", + "🐱": "морда кошки", + "🦁": "морда льва", + "🐯": "морда тигра", + "🐴": "морда лошади", + "🦄": "голова единорога", + "🦓": "зебра", + "🦌": "олень", + "🐮": "морда коровы", + "🐷": "морда свиньи", + "🐗": "кабан", + "🐪": "одногорбый верблюд", + "🦙": "лама", + "🦒": "жираф", + "🐘": "слон", + "🦣": "мамонт", + "🦏": "носорог", + "🐭": "морда мыши", + "🐰": "морда кролика", + "🐿️": "бурундук", + "🦔": "еж", + "🦇": "летучая мышь", + "🐻": "морда медведя", + "🐨": "морда коалы", + "🦥": "ленивец", + "🦦": "выдра", + "🦘": "кенгуру", + "🐥": "цыпленок", + "🐦️": "птица", + "🕊️": "голубь", + "🦆": "утка", + "🦉": "сова", + "🦤": "дронт", + "🪶": "перо", + "🦩": "фламинго", + "🦚": "павлин", + "🦜": "попугай", + "🐊": "крокодил", + "🐢": "черепаха", + "🦎": "ящерица", + "🐍": "змея", + "🐲": "голова дракона", + "🦕": "зауропод", + "🐳": "кит с фонтанчиком", + "🐬": "дельфин", + "🦭": "тюлень", + "🐟️": "рыба", + "🐠": "тропическая рыба", + "🦈": "акула", + "🐙": "осьминог", + "🐚": "раковина", + "🐌": "улитка", + "🦋": "бабочка", + "🐛": "гусеница", + "🐝": "пчела", + "🐞": "божья коровка", + "💐": "букет", + "🌹": "роза", + "🌺": "гибискус", + "🌻": "подсолнух", + "🌷": "тюльпан", + "🌲": "елка", + "🌳": "дерево", + "🌴": "пальма", + "🌵": "кактус", + "🌿": "веточка", + "🍁": "кленовый лист", + "🍇": "виноград", + "🍈": "дыня", + "🍉": "арбуз", + "🍊": "мандарин", + "🍋": "лимон", + "🍌": "банан", + "🍍": "ананас", + "🥭": "манго", + "🍏": "зеленое яблоко", + "🍐": "груша", + "🍑": "персик", + "🍒": "вишня", + "🍓": "клубника", + "🫐": "голубика", + "🥝": "киви", + "🍅": "помидор", + "🫒": "оливка", + "🥥": "кокос", + "🥑": "авокадо", + "🍆": "баклажан", + "🥕": "морковь", + "🌽": "кукурузный початок", + "🌶️": "острый перец", + "🥬": "зеленый салат", + "🥦": "брокколи", + "🧅": "лук", + "🍄": "гриб", + "🥜": "арахис", + "🥐": "круассан", + "🥖": "багет", + "🥨": "крендель", + "🥯": "бублик", + "🥞": "блины", + "🧇": "вафля", + "🍔": "гамбургер", + "🍕": "пицца", + "🌭": "хот-дог", + "🌮": "тако", + "🍿": "попкорн", + "🦀": "краб", + "🦞": "омар", + "🍨": "мороженое", + "🍩": "пончик", + "🍪": "печенье", + "🎂": "торт ко дню рождения", + "🧁": "капкейк", + "🍫": "шоколад", + "🍬": "конфета", + "🍭": "леденец", + "🫖": "чайник", + "🧃": "пакетик сока", + "🧉": "мате", + "🧭": "компас", + "🏔️": "гора со снежной шапкой", + "🌋": "вулкан", + "🏕️": "кемпинг", + "🏝️": "остров", + "🏡": "дом с садом", + "⛲️": "фонтан", + "🎠": "лошадь на карусели", + "🎡": "колесо обозрения", + "🎢": "американские горки", + "💈": "парикмахерская", + "🚆": "поезд", + "🚋": "трамвайный вагон", + "🚍️": "автобус спереди", + "🚕": "такси", + "🚗": "автомобиль", + "🚚": "грузовик", + "🚜": "трактор", + "🛵": "скутер", + "🛺": "авторикша", + "🛴": "самокат", + "🛹": "скейтборд", + "🛼": "роликовые коньки", + "⚓️": "якорь", + "⛵️": "парусник", + "🛶": "каноэ", + "🚤": "катер", + "🚢": "корабль", + "✈️": "самолет", + "🚁": "вертолет", + "🚠": "вагон фуникулера", + "🛰️": "спутник", + "🚀": "ракета", + "🛸": "летающая тарелка", + "⏰": "будильник", + "🌙": "полумесяц", + "🌡️": "термометр", + "☀️": "солнце", + "🪐": "планета с кольцом", + "🌟": "сияющая звезда", + "🌀": "циклон", + "🌈": "радуга", + "☂️": "зонт", + "❄️": "снежинка", + "☄️": "комета", + "🔥": "огонь", + "💧": "капля", + "🌊": "волна", + "🎃": "тыква-фонарь", + "✨": "блестки", + "🎈": "воздушный шарик", + "🎉": "хлопушка", + "🎏": "вымпелы в виде карпов", + "🎀": "бантик", + "🎁": "подарок", + "🎟️": "билеты", + "🏆️": "кубок", + "⚽️": "футбол", + "🏀": "баскетбол", + "🏈": "американский футбол", + "🎾": "теннис", + "🥏": "летающий диск", + "🏓": "настольный теннис", + "🏸": "бадминтон", + "🤿": "маска с трубкой", + "🥌": "керлинг", + "🎯": "мишень", + "🪀": "йо-йо", + "🪁": "воздушный змей", + "🔮": "хрустальный шар", + "🎲": "игральная кость", + "🧩": "пазл", + "🎨": "палитра с красками", + "🧵": "катушка ниток", + "👕": "футболка", + "🧦": "носки", + "👗": "платье", + "🩳": "шорты", + "🎒": "ранец", + "👟": "кроссовки", + "👑": "корона", + "🧢": "бейсболка", + "💄": "помада", + "💍": "кольцо", + "💎": "драгоценный камень", + "📢": "громкоговоритель", + "🎶": "ноты", + "🎙️": "студийный микрофон", + "📻️": "радио", + "🎷": "саксофон", + "🪗": "аккордеон", + "🎸": "гитара", + "🎺": "труба", + "🎻": "скрипка", + "🪕": "банджо", + "🥁": "барабан", + "☎️": "телефон", + "🔋": "батарейка", + "💿️": "CD", + "🧮": "счеты", + "🎬️": "хлопушка-нумератор", + "💡": "лампочка", + "🔦": "фонарик", + "🏮": "красный бумажный фонарик", + "📕": "закрытая книга", + "🏷️": "бирка", + "💳️": "кредитная карта", + "✏️": "карандаш", + "🖌️": "кисточка", + "🖍️": "восковой мелок", + "📌": "канцелярская кнопка", + "📎": "скрепка", + "🔑": "ключ", + "🪃": "бумеранг", + "🏹": "лук со стрелой", + "⚖️": "весы", + "🧲": "магнит", + "🧪": "пробирка", + "🧬": "ДНК", + "🔬": "микроскоп", + "🔭": "телескоп", + "📡": "спутниковая антенна", + "🪑": "стул", + "🧹": "метла", + "🗿": "истукан" + }, + "sv": { + "👽️": "utomjording", + "🤖": "robotansikte", + "🧠": "hjärna", + "👁️": "öga", + "🧙": "magiker", + "🧚": "fé", + "🧜": "vattenväsen", + "🐵": "apansikte", + "🦧": "orangutang", + "🐶": "hundansikte", + "🐺": "vargansikte", + "🦊": "rävansikte", + "🦝": "tvättbjörn", + "🐱": "kattansikte", + "🦁": "lejonansikte", + "🐯": "tigeransikte", + "🐴": "hästansikte", + "🦄": "enhörningsansikte", + "🦓": "zebra", + "🦌": "hjort", + "🐮": "koansikte", + "🐷": "grisansikte", + "🐗": "vildsvin", + "🐪": "dromedar", + "🦙": "lama", + "🦒": "giraff", + "🐘": "elefant", + "🦣": "mammut", + "🦏": "noshörning", + "🐭": "musansikte", + "🐰": "kaninansikte", + "🐿️": "jordekorre", + "🦔": "igelkott", + "🦇": "fladdermus", + "🐻": "björnansikte", + "🐨": "koala", + "🦥": "sengångare", + "🦦": "utter", + "🦘": "känguru", + "🐥": "kyckling framifrån", + "🐦️": "fågel", + "🕊️": "duva", + "🦆": "and", + "🦉": "uggla", + "🦤": "dront", + "🪶": "fågelfjäder", + "🦩": "flamingo", + "🦚": "påfågel", + "🦜": "papegoja", + "🐊": "krokodil", + "🐢": "sköldpadda", + "🦎": "ödla", + "🐍": "orm", + "🐲": "drakansikte", + "🦕": "sauropod", + "🐳": "val som sprutar vatten", + "🐬": "delfin", + "🦭": "säl", + "🐟️": "fisk", + "🐠": "tropisk fisk", + "🦈": "haj", + "🐙": "bläckfisk", + "🐚": "snäcka", + "🐌": "snigel", + "🦋": "fjäril", + "🐛": "tusenfoting", + "🐝": "bi", + "🐞": "nyckelpiga", + "💐": "blombukett", + "🌹": "ros", + "🌺": "hibiskus", + "🌻": "solros", + "🌷": "tulpan", + "🌲": "barrträd", + "🌳": "lövträd", + "🌴": "palm", + "🌵": "kaktus", + "🌿": "ört", + "🍁": "lönnlöv", + "🍇": "vindruvor", + "🍈": "melon", + "🍉": "vattenmelon", + "🍊": "mandarin", + "🍋": "citron", + "🍌": "banan", + "🍍": "ananas", + "🥭": "mango", + "🍏": "grönt äpple", + "🍐": "päron", + "🍑": "persika", + "🍒": "körsbär", + "🍓": "jordgubbe", + "🫐": "blåbär", + "🥝": "kiwifrukt", + "🍅": "tomat", + "🫒": "oliv", + "🥥": "kokosnöt", + "🥑": "avokado", + "🍆": "aubergine", + "🥕": "morot", + "🌽": "majskolv", + "🌶️": "chili", + "🥬": "sallat", + "🥦": "broccoli", + "🧅": "lök", + "🍄": "svamp", + "🥜": "jordnötter", + "🥐": "croissant", + "🥖": "baguette", + "🥨": "pretzel", + "🥯": "bagel", + "🥞": "pannkakor", + "🧇": "våffla", + "🍔": "hamburgare", + "🍕": "pizzabit", + "🌭": "varmkorv", + "🌮": "taco", + "🍿": "popcorn", + "🦀": "krabba", + "🦞": "hummer", + "🍨": "glass", + "🍩": "munk", + "🍪": "kaka", + "🎂": "födelsedagstårta", + "🧁": "muffin", + "🍫": "chokladkaka", + "🍬": "godis", + "🍭": "klubba", + "🫖": "tekanna", + "🧃": "dryckeskartong", + "🧉": "mate-te", + "🧭": "kompass", + "🏔️": "snöklätt berg", + "🌋": "vulkan", + "🏕️": "camping", + "🏝️": "öde ö", + "🏡": "hus med trädgård", + "⛲️": "fontän", + "🎠": "karusellhäst", + "🎡": "pariserhjul", + "🎢": "berg- och dalbana", + "💈": "barberarstolpe", + "🚆": "tåg", + "🚋": "spårvagnsvagn", + "🚍️": "mötande buss", + "🚕": "taxi", + "🚗": "bil", + "🚚": "budbil", + "🚜": "traktor", + "🛵": "skoter", + "🛺": "automatisk riksha", + "🛴": "sparkcykel", + "🛹": "skateboard", + "🛼": "rullskridsko", + "⚓️": "ankare", + "⛵️": "segelbåt", + "🛶": "kanot", + "🚤": "racerbåt", + "🚢": "fartyg", + "✈️": "flygplan", + "🚁": "helikopter", + "🚠": "linbana", + "🛰️": "satellit", + "🚀": "raket", + "🛸": "flygande tefat", + "⏰": "väckarklocka", + "🌙": "månskära", + "🌡️": "termometer", + "☀️": "sol", + "🪐": "planet med ringar", + "🌟": "blänkande stjärna", + "🌀": "cyklon", + "🌈": "regnbåge", + "☂️": "paraply", + "❄️": "snöflinga", + "☄️": "komet", + "🔥": "eld", + "💧": "droppe", + "🌊": "våg", + "🎃": "lyktgubbe", + "✨": "gnistrande stjärnor", + "🎈": "ballong", + "🎉": "konfettismällare", + "🎏": "karpvindstrut", + "🎀": "rosett", + "🎁": "inslagen present", + "🎟️": "inträdesbiljetter", + "🏆️": "pokal", + "⚽️": "fotboll", + "🏀": "basketboll", + "🏈": "amerikansk fotboll", + "🎾": "tennis", + "🥏": "frisbee", + "🏓": "bordtennis", + "🏸": "badminton", + "🤿": "dykmask", + "🥌": "curlingsten", + "🎯": "mitt i prick", + "🪀": "jojo", + "🪁": "flygande drake", + "🔮": "kristallkula", + "🎲": "speltärning", + "🧩": "pusselbit", + "🎨": "färgpalett", + "🧵": "tråd", + "👕": "t-shirt", + "🧦": "sockor", + "👗": "klänning", + "🩳": "shorts", + "🎒": "ryggsäck", + "👟": "gympasko", + "👑": "krona", + "🧢": "skärmmössa", + "💄": "läppstift", + "💍": "ring", + "💎": "ädelsten", + "📢": "handhögtalare", + "🎶": "musiknoter", + "🎙️": "studiomikrofon", + "📻️": "radio", + "🎷": "saxofon", + "🪗": "dragspel", + "🎸": "gitarr", + "🎺": "trumpet", + "🎻": "fiol", + "🪕": "banjo", + "🥁": "trumma", + "☎️": "telefon", + "🔋": "batteri", + "💿️": "optisk skiva", + "🧮": "kulram", + "🎬️": "filmklappa", + "💡": "glödlampa", + "🔦": "ficklampa", + "🏮": "röd papperslykta", + "📕": "stängd bok", + "🏷️": "etikett", + "💳️": "kreditkort", + "✏️": "blyertspenna", + "🖌️": "målarpensel", + "🖍️": "krita", + "📌": "kartnål", + "📎": "gem", + "🔑": "nyckel", + "🪃": "boomerang", + "🏹": "pil och båge", + "⚖️": "balansvåg", + "🧲": "magnet", + "🧪": "provrör", + "🧬": "DNA", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "tv-satellit", + "🪑": "stol", + "🧹": "kvast", + "🗿": "staty" + }, + "th": { + "👽️": "เอเลี่ยน", + "🤖": "หุ่นยนต์", + "🧠": "สมอง", + "👁️": "ตาข้างเดียว", + "🧙": "นักเวทย์", + "🧚": "นางฟ้า", + "🧜": "ครึ่งคนครึ่งปลา", + "🐵": "หน้าลิง", + "🦧": "อุรังอุตัง", + "🐶": "หน้าสุนัข", + "🐺": "หมาป่า", + "🦊": "จิ้งจอก", + "🦝": "แรคคูน", + "🐱": "หน้าแมว", + "🦁": "สิงโต", + "🐯": "หน้าเสือ", + "🐴": "หน้าม้า", + "🦄": "ยูนิคอร์น", + "🦓": "ม้าลาย", + "🦌": "กวาง", + "🐮": "หน้าวัว", + "🐷": "หน้าหมู", + "🐗": "หมูป่าตัวผู้", + "🐪": "อูฐโหนกเดียว", + "🦙": "ลามะ", + "🦒": "ยีราฟ", + "🐘": "ช้าง", + "🦣": "ช้างแมมมอธ", + "🦏": "แรด", + "🐭": "หน้าหนู", + "🐰": "หน้ากระต่าย", + "🐿️": "ชิปมังก์", + "🦔": "เฮดจ์ฮ็อก", + "🦇": "ค้างคาว", + "🐻": "หมี", + "🐨": "โคอาล่า", + "🦥": "สลอธ", + "🦦": "ตัวนาก", + "🦘": "จิงโจ้", + "🐥": "ลูกเจี๊ยบยืนหันหน้า", + "🐦️": "นก", + "🕊️": "นกพิราบขาว", + "🦆": "เป็ด", + "🦉": "นกฮูก", + "🦤": "นกโดโด", + "🪶": "ขนนก", + "🦩": "นกฟลามิงโก", + "🦚": "นกยูง", + "🦜": "นกแก้ว", + "🐊": "จระเข้", + "🐢": "เต่า", + "🦎": "จิ้งจก", + "🐍": "งู", + "🐲": "หน้ามังกร", + "🦕": "ไดโนเสาร์", + "🐳": "ปลาวาฬพ่นน้ำ", + "🐬": "ปลาโลมา", + "🦭": "แมวน้ำ", + "🐟️": "ปลา", + "🐠": "ปลาเขตร้อน", + "🦈": "ฉลาม", + "🐙": "ปลาหมึกยักษ์", + "🐚": "หอย", + "🐌": "หอยทาก", + "🦋": "ผีเสื้อ", + "🐛": "แมลง", + "🐝": "ผึ้ง", + "🐞": "เต่าทอง", + "💐": "ช่อดอกไม้", + "🌹": "ดอกกุหลาบ", + "🌺": "ดอกชบา", + "🌻": "ดอกทานตะวัน", + "🌷": "ทิวลิป", + "🌲": "ต้นสน", + "🌳": "ต้นไม้ร่มรื่น", + "🌴": "ต้นมะพร้าว", + "🌵": "ตะบองเพชร", + "🌿": "สมุนไพร", + "🍁": "ใบเมเปิ้ล", + "🍇": "องุ่น", + "🍈": "เมลอน", + "🍉": "แตงโม", + "🍊": "ส้ม", + "🍋": "เลมอน", + "🍌": "กล้วย", + "🍍": "สับปะรด", + "🥭": "มะม่วง", + "🍏": "แอปเปิ้ลเขียว", + "🍐": "ลูกแพร์", + "🍑": "ลูกพีช", + "🍒": "เชอร์รี่", + "🍓": "สตรอว์เบอร์รี่", + "🫐": "บลูเบอร์รี่", + "🥝": "กีวี", + "🍅": "มะเขือเทศ", + "🫒": "มะกอก", + "🥥": "มะพร้าว", + "🥑": "อาโวคาโด", + "🍆": "มะเขือยาว", + "🥕": "แครอท", + "🌽": "ข้าวโพด", + "🌶️": "พริก", + "🥬": "ผักใบเขียว", + "🥦": "บรอกโคลี", + "🧅": "หอมหัวใหญ่", + "🍄": "เห็ด", + "🥜": "ถั่ว", + "🥐": "ครัวซอง", + "🥖": "ขนมปังฝรั่งเศส", + "🥨": "เพรตเซล", + "🥯": "เบเกิล", + "🥞": "แพนเค้ก", + "🧇": "วาฟเฟิล", + "🍔": "แฮมเบอร์เกอร์", + "🍕": "พิซซ่า 1 ชิ้น", + "🌭": "ฮอทด็อก", + "🌮": "ทาโก้", + "🍿": "ป๊อปคอร์น", + "🦀": "ปู", + "🦞": "กุ้งมังกร", + "🍨": "ไอศกรีม", + "🍩": "โดนัท", + "🍪": "คุกกี้", + "🎂": "เค้กวันเกิด", + "🧁": "คัพเค้ก", + "🍫": "ช็อกโกแลต", + "🍬": "ลูกอม", + "🍭": "อมยิ้ม", + "🫖": "กาน้ำชา", + "🧃": "เครื่องดื่มแบบกล่อง", + "🧉": "ชามาเต", + "🧭": "เข็มทิศ", + "🏔️": "ภูเขามีหิมะ", + "🌋": "ภูเขาไฟ", + "🏕️": "ตั้งแคมป์", + "🏝️": "เกาะ", + "🏡": "บ้านพร้อมสวน", + "⛲️": "น้ำพุ", + "🎠": "ม้าหมุน", + "🎡": "ชิงช้าสวรรค์", + "🎢": "รถไฟเหาะ", + "💈": "ร้านตัดผม", + "🚆": "รถไฟ", + "🚋": "ตู้รถราง", + "🚍️": "รถบัสกำลังมา", + "🚕": "แท็กซี่", + "🚗": "รถ", + "🚚": "รถขนส่ง", + "🚜": "แทร็กเตอร์", + "🛵": "รถสกู๊ตเตอร์", + "🛺": "รถสามล้อ", + "🛴": "สกู๊ตเตอร์", + "🛹": "สเก็ตบอร์ด", + "🛼": "รองเท้าสเก็ต", + "⚓️": "สมอเรือ", + "⛵️": "เรือใบ", + "🛶": "แคนู", + "🚤": "เรือด่วน", + "🚢": "เรือ", + "✈️": "เครื่องบิน", + "🚁": "เฮลิคอปเตอร์", + "🚠": "เคเบิลคาร์", + "🛰️": "ดาวเทียม", + "🚀": "จรวด", + "🛸": "จานบิน", + "⏰": "นาฬิกาปลุก", + "🌙": "พระจันทร์เสี้ยว", + "🌡️": "เครื่องวัดอุณหภูมิ", + "☀️": "พระอาทิตย์", + "🪐": "ดาวเคราะห์ที่มีวงแหวน", + "🌟": "ดาวส่องแสง", + "🌀": "ไซโคลน", + "🌈": "รุ้ง", + "☂️": "ร่ม", + "❄️": "เกล็ดหิมะ", + "☄️": "ดาวหาง", + "🔥": "ไฟ", + "💧": "หยดน้ำ", + "🌊": "คลื่น", + "🎃": "ฟักทองฮาโลวีน", + "✨": "ประกายวิบวับ", + "🎈": "ลูกโป่ง", + "🎉": "ปาร์ตี้", + "🎏": "ธงปลาคาร์พ", + "🎀": "ริบบิ้น", + "🎁": "ของขวัญ", + "🎟️": "ตั๋วเข้าชม", + "🏆️": "ถ้วยรางวัล", + "⚽️": "ลูกฟุตบอล", + "🏀": "บาสเกตบอล", + "🏈": "อเมริกันฟุตบอล", + "🎾": "เทนนิส", + "🥏": "จานร่อน", + "🏓": "ปิงปอง", + "🏸": "แบดมินตัน", + "🤿": "หน้ากากดำน้ำ", + "🥌": "ลูกกลิ้งหิน", + "🎯": "กลางเป้า", + "🪀": "โยโย่", + "🪁": "ว่าว", + "🔮": "ลูกแก้ววิเศษ", + "🎲": "ลูกเต๋า", + "🧩": "จิ๊กซอว์", + "🎨": "จานสีวาดรูป", + "🧵": "ด้าย", + "👕": "เสื้อยืด", + "🧦": "ถุงเท้า", + "👗": "ชุดกระโปรง", + "🩳": "กางเกงขาสั้น", + "🎒": "เป้นักเรียน", + "👟": "รองเท้ากีฬา", + "👑": "มงกุฎ", + "🧢": "หมวกแก๊ป", + "💄": "ลิปสติก", + "💍": "แหวน", + "💎": "อัญมณี", + "📢": "เครื่องขยายเสียง", + "🎶": "โน้ตดนตรีหลายตัว", + "🎙️": "ไมค์สตูดิโอ", + "📻️": "วิทยุ", + "🎷": "แซ็กโซโฟน", + "🪗": "แอคคอร์เดียน", + "🎸": "กีต้าร์", + "🎺": "ทรัมเป็ต", + "🎻": "ไวโอลิน", + "🪕": "แบนโจ", + "🥁": "กลอง", + "☎️": "โทรศัพท์", + "🔋": "แบตเตอรี่", + "💿️": "บลูเรย์", + "🧮": "ลูกคิด", + "🎬️": "สเลท", + "💡": "หลอดไฟ", + "🔦": "ไฟฉาย", + "🏮": "โคมไฟแดง", + "📕": "หนังสือปิด", + "🏷️": "ป้าย", + "💳️": "บัตรเครดิต", + "✏️": "ดินสอ", + "🖌️": "แปรงทาสี", + "🖍️": "ดินสอสี", + "📌": "หมุดปัก", + "📎": "คลิปหนีบกระดาษ", + "🔑": "กุญแจ", + "🪃": "บูมเมอแรง", + "🏹": "ธนูและลูกศร", + "⚖️": "ตราชั่ง", + "🧲": "แม่เหล็ก", + "🧪": "หลอดทดลอง", + "🧬": "ดีเอ็นเอ", + "🔬": "กล้องจุลทรรศน์", + "🔭": "กล้องโทรทรรศน์", + "📡": "จานดาวเทียม", + "🪑": "เก้าอี้", + "🧹": "ไม้กวาด", + "🗿": "รูปปั้นโมไอ" + }, + "tr": { + "👽️": "uzaylı", + "🤖": "robot", + "🧠": "beyin", + "👁️": "göz", + "🧙": "büyücü", + "🧚": "peri", + "🧜": "balık insan", + "🐵": "maymun yüzü", + "🦧": "orangutan", + "🐶": "köpek yüzü", + "🐺": "kurt", + "🦊": "tilki", + "🦝": "rakun", + "🐱": "kedi yüzü", + "🦁": "aslan", + "🐯": "kaplan yüzü", + "🐴": "at yüzü", + "🦄": "tek boynuzlu at", + "🦓": "zebra", + "🦌": "geyik", + "🐮": "inek yüzü", + "🐷": "domuz yüzü", + "🐗": "yaban domuzu", + "🐪": "deve", + "🦙": "lama", + "🦒": "zürafa", + "🐘": "fil", + "🦣": "mamut", + "🦏": "gergedan", + "🐭": "fare yüzü", + "🐰": "tavşan yüzü", + "🐿️": "sincap", + "🦔": "kirpi", + "🦇": "yarasa", + "🐻": "ayı", + "🐨": "koala", + "🦥": "tembel hayvan", + "🦦": "su samuru", + "🦘": "kanguru", + "🐥": "önden civciv", + "🐦️": "kuş", + "🕊️": "güvercin", + "🦆": "ördek", + "🦉": "baykuş", + "🦤": "dodo kuşu", + "🪶": "kuş tüyü", + "🦩": "flamingo", + "🦚": "tavus kuşu", + "🦜": "papağan", + "🐊": "timsah", + "🐢": "kaplumbağa", + "🦎": "kertenkele", + "🐍": "yılan", + "🐲": "ejderha yüzü", + "🦕": "soropod", + "🐳": "su püskürten balina", + "🐬": "yunus", + "🦭": "fok", + "🐟️": "balık", + "🐠": "tropikal balık", + "🦈": "köpek balığı", + "🐙": "ahtapot", + "🐚": "deniz kabuğu", + "🐌": "salyangoz", + "🦋": "kelebek", + "🐛": "tırtıl", + "🐝": "bal arısı", + "🐞": "uğur böceği", + "💐": "buket", + "🌹": "gül", + "🌺": "çingülü", + "🌻": "ayçiçeği", + "🌷": "lale", + "🌲": "yaprak dökmeyen ağaç", + "🌳": "yaprak döken ağaç", + "🌴": "palmiye ağacı", + "🌵": "kaktüs", + "🌿": "ot", + "🍁": "akçaağaç yaprağı", + "🍇": "üzüm", + "🍈": "kavun", + "🍉": "karpuz", + "🍊": "mandalina", + "🍋": "limon", + "🍌": "muz", + "🍍": "ananas", + "🥭": "mango", + "🍏": "yeşil elma", + "🍐": "armut", + "🍑": "şeftali", + "🍒": "kiraz", + "🍓": "çilek", + "🫐": "yaban mersini", + "🥝": "kivi", + "🍅": "domates", + "🫒": "zeytin", + "🥥": "Hindistan cevizi", + "🥑": "avokado", + "🍆": "patlıcan", + "🥕": "havuç", + "🌽": "mısır koçanı", + "🌶️": "acı biber", + "🥬": "yeşil yapraklı sebze", + "🥦": "brokoli", + "🧅": "soğan", + "🍄": "mantar", + "🥜": "yer fıstığı", + "🥐": "kruvasan", + "🥖": "baget ekmek", + "🥨": "pretzel", + "🥯": "simit", + "🥞": "krep", + "🧇": "waffle", + "🍔": "hamburger", + "🍕": "pizza dilimi", + "🌭": "sosisli sandviç", + "🌮": "tako", + "🍿": "patlamış mısır", + "🦀": "yengeç", + "🦞": "ıstakoz", + "🍨": "dondurma", + "🍩": "donut", + "🍪": "kurabiye", + "🎂": "doğum günü pastası", + "🧁": "cupcake", + "🍫": "çikolata", + "🍬": "şekerleme", + "🍭": "lolipop", + "🫖": "demlik", + "🧃": "içecek kutusu", + "🧉": "mate çayı", + "🧭": "pusula", + "🏔️": "karla kaplı dağ", + "🌋": "yanardağ", + "🏕️": "kamp", + "🏝️": "ıssız ada", + "🏡": "bahçeli ev", + "⛲️": "fıskiye", + "🎠": "atlıkarınca", + "🎡": "dönme dolap", + "🎢": "hız treni", + "💈": "berber dükkanı", + "🚆": "tren", + "🚋": "tramvay vagonu", + "🚍️": "yaklaşan otobüs", + "🚕": "taksi", + "🚗": "araba", + "🚚": "nakliye kamyonu", + "🚜": "traktör", + "🛵": "motorlu skuter", + "🛺": "elektrikli çekçek", + "🛴": "ayakla sürülen skuter", + "🛹": "kaykay", + "🛼": "paten", + "⚓️": "çıpa", + "⛵️": "yelkenli tekne", + "🛶": "kano", + "🚤": "sürat teknesi", + "🚢": "gemi", + "✈️": "uçak", + "🚁": "helikopter", + "🚠": "dağ teleferik hattı", + "🛰️": "uydu", + "🚀": "roket", + "🛸": "uçan daire", + "⏰": "çalar saat", + "🌙": "hilal", + "🌡️": "termometre", + "☀️": "güneş", + "🪐": "halkalı gezegen", + "🌟": "parıldayan yıldız", + "🌀": "siklon", + "🌈": "gökkuşağı", + "☂️": "şemsiye", + "❄️": "kar tanesi", + "☄️": "kuyruklu yıldız", + "🔥": "ateş", + "💧": "damlacık", + "🌊": "dalga", + "🎃": "kabak fener", + "✨": "parıltılar", + "🎈": "balon", + "🎉": "parti konfetisi", + "🎏": "sazan şekilli flama", + "🎀": "kurdele", + "🎁": "paketlenmiş hediye", + "🎟️": "giriş bileti", + "🏆️": "zafer kupası", + "⚽️": "futbol topu", + "🏀": "basketbol", + "🏈": "amerikan futbolu", + "🎾": "tenis", + "🥏": "frizbi", + "🏓": "masa tenisi", + "🏸": "badminton", + "🤿": "dalgıç maskesi", + "🥌": "curling taşı", + "🎯": "tam isabet", + "🪀": "yoyo", + "🪁": "uçurtma", + "🔮": "kristal küre", + "🎲": "oyun zarı", + "🧩": "yapboz parçası", + "🎨": "boya paleti", + "🧵": "iplik", + "👕": "tişört", + "🧦": "çorap", + "👗": "elbise", + "🩳": "şort", + "🎒": "okul çantası", + "👟": "koşu ayakkabısı", + "👑": "taç", + "🧢": "siperli şapka", + "💄": "ruj", + "💍": "yüzük", + "💎": "mücevher", + "📢": "hoparlör", + "🎶": "müzik notaları", + "🎙️": "stüdyo mikrofonu", + "📻️": "radyo", + "🎷": "saksafon", + "🪗": "akordiyon", + "🎸": "gitar", + "🎺": "trompet", + "🎻": "keman", + "🪕": "banjo", + "🥁": "davul", + "☎️": "telefon", + "🔋": "pil", + "💿️": "optik disk", + "🧮": "abaküs", + "🎬️": "film tahtası", + "💡": "ampul", + "🔦": "el feneri", + "🏮": "kırmızı kağıt fener", + "📕": "kapalı kitap", + "🏷️": "etiket", + "💳️": "kredi kartı", + "✏️": "kurşun kalem", + "🖌️": "boya fırçası", + "🖍️": "pastel boya", + "📌": "raptiye", + "📎": "ataş", + "🔑": "anahtar", + "🪃": "bumerang", + "🏹": "ok ve yay", + "⚖️": "terazi", + "🧲": "mıknatıs", + "🧪": "deney tüpü", + "🧬": "dna", + "🔬": "mikroskop", + "🔭": "teleskop", + "📡": "uydu anteni", + "🪑": "sandalye", + "🧹": "süpürge", + "🗿": "moyai heykeli" + }, + "uk": { + "👽️": "прибулець", + "🤖": "робот", + "🧠": "мозок", + "👁️": "око", + "🧙": "маг", + "🧚": "фея", + "🧜": "казкова водяна істота", + "🐵": "морда мавпи", + "🦧": "орангутанг", + "🐶": "морда собаки", + "🐺": "вовк", + "🦊": "лис", + "🦝": "єнот", + "🐱": "морда кота", + "🦁": "лев", + "🐯": "морда тигра", + "🐴": "голова коня", + "🦄": "єдиноріг", + "🦓": "зебра", + "🦌": "олень", + "🐮": "морда корови", + "🐷": "рило свині", + "🐗": "вепр", + "🐪": "одногорбий верблюд", + "🦙": "лама", + "🦒": "жирафа", + "🐘": "слон", + "🦣": "мамонт", + "🦏": "носоріг", + "🐭": "морда миші", + "🐰": "морда кроля", + "🐿️": "бурундук", + "🦔": "їжак", + "🦇": "кажан", + "🐻": "ведмідь", + "🐨": "коала", + "🦥": "лінивець", + "🦦": "видра", + "🦘": "кенгуру", + "🐥": "курча, що стоїть", + "🐦️": "птах", + "🕊️": "голуб", + "🦆": "качка", + "🦉": "сова", + "🦤": "дронт", + "🪶": "пір’їна", + "🦩": "фламінго", + "🦚": "павич", + "🦜": "папуга", + "🐊": "крокодил", + "🐢": "черепаха", + "🦎": "ящірка", + "🐍": "змія", + "🐲": "голова дракона", + "🦕": "завропод", + "🐳": "кит, що пускає фонтан", + "🐬": "дельфін", + "🦭": "тюлень", + "🐟️": "риба", + "🐠": "тропічна риба", + "🦈": "акула", + "🐙": "восьминіг", + "🐚": "морська мушля", + "🐌": "равлик", + "🦋": "метелик", + "🐛": "комаха", + "🐝": "бджола", + "🐞": "сонечко", + "💐": "букет", + "🌹": "троянда", + "🌺": "гібіскус", + "🌻": "соняшник", + "🌷": "тюльпан", + "🌲": "вічнозелене дерево", + "🌳": "листяне дерево", + "🌴": "пальма", + "🌵": "кактус", + "🌿": "лікарська рослина", + "🍁": "кленовий листок", + "🍇": "виноград", + "🍈": "диня", + "🍉": "кавун", + "🍊": "танжерин", + "🍋": "лимон", + "🍌": "банан", + "🍍": "ананас", + "🥭": "манго", + "🍏": "зелене яблуко", + "🍐": "груша", + "🍑": "персик", + "🍒": "вишні", + "🍓": "полуниця", + "🫐": "лохина", + "🥝": "ківі", + "🍅": "томат", + "🫒": "оливка", + "🥥": "кокос", + "🥑": "авокадо", + "🍆": "баклажан", + "🥕": "морква", + "🌽": "качан кукурудзи", + "🌶️": "гострий перець", + "🥬": "листя салату", + "🥦": "броколі", + "🧅": "цибуля", + "🍄": "гриб", + "🥜": "арахіс", + "🥐": "круасан", + "🥖": "багет", + "🥨": "крендель", + "🥯": "бейгл", + "🥞": "млинці", + "🧇": "вафля", + "🍔": "гамбургер", + "🍕": "піца", + "🌭": "хот-дог", + "🌮": "тако", + "🍿": "попкорн", + "🦀": "краб", + "🦞": "омар", + "🍨": "морозиво", + "🍩": "пончик", + "🍪": "печиво", + "🎂": "торт на день народження", + "🧁": "капкейк", + "🍫": "плитка шоколаду", + "🍬": "цукерка", + "🍭": "льодяник", + "🫖": "чайник", + "🧃": "пакетик із напоєм", + "🧉": "мате", + "🧭": "компас", + "🏔️": "гора із засніженою верхівкою", + "🌋": "вулкан", + "🏕️": "кемпінг", + "🏝️": "безлюдний острів", + "🏡": "будинок із садом", + "⛲️": "фонтан", + "🎠": "коник на каруселі", + "🎡": "чортове колесо", + "🎢": "американські гірки", + "💈": "вивіска перукаря (смугастий стовп)", + "🚆": "потяг", + "🚋": "вагон трамвая", + "🚍️": "автобус, що наближається", + "🚕": "таксі", + "🚗": "автомобіль", + "🚚": "вантажівка для доставки", + "🚜": "трактор", + "🛵": "мопед", + "🛺": "авторикша", + "🛴": "самокат", + "🛹": "скейтборд", + "🛼": "роликовий ковзан", + "⚓️": "якір", + "⛵️": "вітрильник", + "🛶": "каное", + "🚤": "швидкохідний катер", + "🚢": "корабель", + "✈️": "літак", + "🚁": "гелікоптер", + "🚠": "канатна дорога в горах", + "🛰️": "супутник", + "🚀": "ракета", + "🛸": "летюча тарілка", + "⏰": "будильник", + "🌙": "серп місяця", + "🌡️": "термометр", + "☀️": "сонце", + "🪐": "планета з кільцем", + "🌟": "сяйна зірка", + "🌀": "циклон", + "🌈": "веселка", + "☂️": "парасолька", + "❄️": "сніжинка", + "☄️": "комета", + "🔥": "вогонь", + "💧": "крапля", + "🌊": "хвиля", + "🎃": "ліхтар-гарбуз", + "✨": "блискітки", + "🎈": "повітряна кулька", + "🎉": "хлопавка", + "🎏": "вітровказ у формі коропів", + "🎀": "бант зі стрічки", + "🎁": "подарунок", + "🎟️": "вхідні квитки", + "🏆️": "приз", + "⚽️": "футбольний м’яч", + "🏀": "баскетбольний м’яч", + "🏈": "мʼяч для американського футболу", + "🎾": "тенісний м’яч", + "🥏": "літаючий диск", + "🏓": "ракетка і кулька для пінг-понгу", + "🏸": "ракетка і волан для бадмінтону", + "🤿": "маска з трубкою", + "🥌": "камʼяна шайба для керлінгу", + "🎯": "мішень із прямим влученням", + "🪀": "йо-йо", + "🪁": "повітряний змій", + "🔮": "кришталева куля", + "🎲": "гральна кість", + "🧩": "елемент пазла", + "🎨": "палітра художника", + "🧵": "нитка", + "👕": "теніска поло", + "🧦": "шкарпетки", + "👗": "сукня", + "🩳": "шорти", + "🎒": "шкільний рюкзак", + "👟": "кросівка", + "👑": "корона", + "🧢": "бейсболка", + "💄": "помада", + "💍": "каблучка", + "💎": "коштовний камінь", + "📢": "гучномовець", + "🎶": "музичні ноти", + "🎙️": "студійний мікрофон", + "📻️": "радіоприймач", + "🎷": "саксофон", + "🪗": "акордеон", + "🎸": "гітара", + "🎺": "труба", + "🎻": "скрипка", + "🪕": "банджо", + "🥁": "барабан", + "☎️": "телефон", + "🔋": "батарея", + "💿️": "компакт-диск", + "🧮": "рахівниця", + "🎬️": "кінохлопавка", + "💡": "лампочка", + "🔦": "ліхтарик", + "🏮": "червоний паперовий ліхтар", + "📕": "закрита книга", + "🏷️": "бирка", + "💳️": "кредитна картка", + "✏️": "олівець", + "🖌️": "пензель", + "🖍️": "пастель", + "📌": "канцелярська кнопка", + "📎": "скріпка", + "🔑": "ключ", + "🪃": "бумеранг", + "🏹": "лук і стріла", + "⚖️": "ваги", + "🧲": "магніт", + "🧪": "пробірка", + "🧬": "ДНК", + "🔬": "мікроскоп", + "🔭": "телескоп", + "📡": "супутникова антена", + "🪑": "стілець", + "🧹": "мітла", + "🗿": "статуя з Острова Пасхи" + }, + "vi": { + "👽️": "người ngoài hành tinh", + "🤖": "mặt rô-bốt", + "🧠": "não", + "👁️": "mắt", + "🧙": "pháp sư", + "🧚": "tiên", + "🧜": "người cá", + "🐵": "mặt khỉ", + "🦧": "đười ươi", + "🐶": "mặt cún", + "🐺": "mặt chó sói", + "🦊": "mặt cáo", + "🦝": "gấu trúc", + "🐱": "mặt mèo", + "🦁": "mặt sư tử", + "🐯": "mặt hổ", + "🐴": "mặt ngựa", + "🦄": "mặt kỳ lân", + "🦓": "ngựa vằn", + "🦌": "hươu", + "🐮": "mặt bò", + "🐷": "mặt lợn", + "🐗": "lợn rừng", + "🐪": "lạc đà", + "🦙": "lạc đà không bướu", + "🦒": "hươu cao cổ", + "🐘": "voi", + "🦣": "voi ma mút", + "🦏": "tê giác", + "🐭": "mặt chuột", + "🐰": "mặt thỏ", + "🐿️": "sóc chuột", + "🦔": "nhím", + "🦇": "dơi", + "🐻": "mặt gấu", + "🐨": "gấu túi", + "🦥": "con lười", + "🦦": "rái cá", + "🦘": "chuột túi", + "🐥": "mặt trước gà con", + "🐦️": "chim", + "🕊️": "bồ câu", + "🦆": "vịt", + "🦉": "cú", + "🦤": "chim cưu", + "🪶": "lông chim", + "🦩": "hồng hạc", + "🦚": "con công", + "🦜": "con vẹt", + "🐊": "cá sấu", + "🐢": "rùa", + "🦎": "thằn lằn", + "🐍": "rắn", + "🐲": "mặt rồng", + "🦕": "khủng long chân thằn lằn", + "🐳": "cá voi đang phun nước", + "🐬": "cá heo", + "🦭": "chó biển", + "🐟️": "cá", + "🐠": "cá nhiệt đới", + "🦈": "cá mập", + "🐙": "bạch tuộc", + "🐚": "vỏ xoắn ốc", + "🐌": "ốc sên", + "🦋": "bướm", + "🐛": "con bọ", + "🐝": "ong mật", + "🐞": "bọ rùa", + "💐": "bó hoa", + "🌹": "hoa hồng", + "🌺": "hoa dâm bụt", + "🌻": "hoa hướng dương", + "🌷": "hoa tulip", + "🌲": "cây thường xanh", + "🌳": "cây rụng lá", + "🌴": "cây cọ", + "🌵": "cây xương rồng", + "🌿": "thảo mộc", + "🍁": "lá phong", + "🍇": "chùm nho", + "🍈": "dưa", + "🍉": "dưa hấu", + "🍊": "quýt", + "🍋": "chanh", + "🍌": "chuối", + "🍍": "dứa", + "🥭": "xoài", + "🍏": "táo xanh", + "🍐": "lê", + "🍑": "đào", + "🍒": "anh đào", + "🍓": "dâu tây", + "🫐": "quả việt quất", + "🥝": "quả kiwi", + "🍅": "cà chua", + "🫒": "ôliu", + "🥥": "dừa", + "🥑": "quả bơ", + "🍆": "cà tím", + "🥕": "cà rốt", + "🌽": "bắp ngô", + "🌶️": "quả ớt", + "🥬": "xanh lá", + "🥦": "xúp lơ xanh", + "🧅": "hành", + "🍄": "nấm", + "🥜": "đậu phộng", + "🥐": "bánh sừng bò", + "🥖": "bánh mì que", + "🥨": "bánh quy xoắn", + "🥯": "bánh mỳ vòng", + "🥞": "bánh kếp", + "🧇": "bánh quế", + "🍔": "bánh hamburger", + "🍕": "bánh pizza", + "🌭": "bánh mì xúc xích", + "🌮": "bánh taco", + "🍿": "bỏng ngô", + "🦀": "cua", + "🦞": "tôm hùm", + "🍨": "kem", + "🍩": "bánh rán vòng", + "🍪": "bánh quy", + "🎂": "bánh sinh nhật", + "🧁": "bánh nướng nhỏ", + "🍫": "thanh sô cô la", + "🍬": "kẹo", + "🍭": "kẹo mút", + "🫖": "ấm trà", + "🧃": "hộp đồ uống", + "🧉": "trà nhựa ruồi", + "🧭": "la bàn", + "🏔️": "đỉnh núi phủ tuyết", + "🌋": "núi lửa", + "🏕️": "cắm trại", + "🏝️": "đảo hoang", + "🏡": "nhà có vườn", + "⛲️": "đài phun nước", + "🎠": "ngựa đu quay", + "🎡": "vòng đu quay", + "🎢": "tàu lượn siêu tốc", + "💈": "biển hiệu của thợ cắt tóc", + "🚆": "tàu hỏa", + "🚋": "tàu điện", + "🚍️": "xe buýt đang tới", + "🚕": "taxi", + "🚗": "ô tô", + "🚚": "xe tải giao hàng", + "🚜": "máy kéo", + "🛵": "xe tay ga", + "🛺": "xe lam", + "🛴": "xe hẩy", + "🛹": "ván trượt", + "🛼": "giày trượt patin", + "⚓️": "mỏ neo", + "⛵️": "thuyền buồm", + "🛶": "xuồng", + "🚤": "xuồng cao tốc", + "🚢": "tàu thủy", + "✈️": "máy bay", + "🚁": "máy bay trực thăng", + "🚠": "cáp treo trên núi", + "🛰️": "vệ tinh", + "🚀": "tên lửa", + "🛸": "đĩa bay", + "⏰": "đồng hồ báo thức", + "🌙": "trăng lưỡi liềm", + "🌡️": "nhiệt kế", + "☀️": "mặt trời", + "🪐": "hành tinh có vành đai bao quanh", + "🌟": "ngôi sao lấp lánh", + "🌀": "hình lốc xoáy", + "🌈": "cầu vồng", + "☂️": "cái ô", + "❄️": "bông tuyết", + "☄️": "sao chổi", + "🔥": "lửa", + "💧": "giọt nước", + "🌊": "sóng nước", + "🎃": "đèn lồng bí ngô", + "✨": "ánh lấp lánh", + "🎈": "bóng bay", + "🎉": "pháo giấy buổi tiệc", + "🎏": "cờ cá chép", + "🎀": "ruy băng", + "🎁": "gói quà", + "🎟️": "vé vào cửa", + "🏆️": "cúp", + "⚽️": "bóng đá", + "🏀": "bóng rổ", + "🏈": "bóng bầu dục Mỹ", + "🎾": "quần vợt", + "🥏": "đĩa bay trò chơi", + "🏓": "bóng bàn", + "🏸": "cầu lông", + "🤿": "mặt nạ lặn", + "🥌": "bi đá trên băng", + "🎯": "trúng đích", + "🪀": "yo-yo", + "🪁": "diều", + "🔮": "quả cầu pha lê", + "🎲": "trò xúc xắc", + "🧩": "ghép hình", + "🎨": "bảng màu", + "🧵": "sợi chỉ", + "👕": "áo phông", + "🧦": "tất", + "👗": "váy", + "🩳": "quần soóc", + "🎒": "ba lô đi học", + "👟": "giày chạy", + "👑": "vương miện", + "🧢": "mũ lưỡi trai", + "💄": "son môi", + "💍": "nhẫn", + "💎": "đá quý", + "📢": "loa phát thanh", + "🎶": "các nốt nhạc", + "🎙️": "micrô phòng thu âm", + "📻️": "radio", + "🎷": "kèn saxophone", + "🪗": "phong cầm", + "🎸": "đàn ghi-ta", + "🎺": "kèn trumpet", + "🎻": "đàn violin", + "🪕": "đàn banjo", + "🥁": "trống", + "☎️": "điện thoại bàn", + "🔋": "pin", + "💿️": "đĩa quang", + "🧮": "bàn tính", + "🎬️": "bảng clapper", + "💡": "bóng đèn", + "🔦": "đèn pin", + "🏮": "đèn lồng giấy màu đỏ", + "📕": "sách đóng", + "🏷️": "nhãn", + "💳️": "thẻ tín dụng", + "✏️": "bút chì", + "🖌️": "cọ vẽ tranh", + "🖍️": "bút sáp màu", + "📌": "đinh ghim", + "📎": "kẹp giấy", + "🔑": "chìa khóa", + "🪃": "bumơrang", + "🏹": "cung tên", + "⚖️": "cân thăng bằng", + "🧲": "nam châm", + "🧪": "ống nghiệm", + "🧬": "adn", + "🔬": "kính hiển vi", + "🔭": "kính viễn vọng", + "📡": "ăng-ten vệ tinh", + "🪑": "ghế", + "🧹": "cây chổi", + "🗿": "tượng moai" + }, + "zh-CN": { + "👽️": "外星人", + "🤖": "机器人", + "🧠": "脑", + "👁️": "眼睛", + "🧙": "法师", + "🧚": "精灵", + "🧜": "人鱼", + "🐵": "猴头", + "🦧": "红毛猩猩", + "🐶": "狗脸", + "🐺": "狼", + "🦊": "狐狸", + "🦝": "浣熊", + "🐱": "猫脸", + "🦁": "狮子", + "🐯": "老虎头", + "🐴": "马头", + "🦄": "独角兽", + "🦓": "斑马", + "🦌": "鹿", + "🐮": "奶牛头", + "🐷": "猪头", + "🐗": "野猪", + "🐪": "骆驼", + "🦙": "美洲鸵", + "🦒": "长颈鹿", + "🐘": "大象", + "🦣": "猛犸", + "🦏": "犀牛", + "🐭": "老鼠头", + "🐰": "兔子头", + "🐿️": "松鼠", + "🦔": "刺猬", + "🦇": "蝙蝠", + "🐻": "熊", + "🐨": "考拉", + "🦥": "树懒", + "🦦": "水獭", + "🦘": "袋鼠", + "🐥": "正面朝向的小鸡", + "🐦️": "鸟", + "🕊️": "鸽", + "🦆": "鸭子", + "🦉": "猫头鹰", + "🦤": "渡渡鸟", + "🪶": "羽毛", + "🦩": "火烈鸟", + "🦚": "孔雀", + "🦜": "鹦鹉", + "🐊": "鳄鱼", + "🐢": "龟", + "🦎": "蜥蜴", + "🐍": "蛇", + "🐲": "龙头", + "🦕": "蜥蜴类", + "🐳": "喷水的鲸", + "🐬": "海豚", + "🦭": "海豹", + "🐟️": "鱼", + "🐠": "热带鱼", + "🦈": "鲨鱼", + "🐙": "章鱼", + "🐚": "海螺", + "🐌": "蜗牛", + "🦋": "蝴蝶", + "🐛": "毛毛虫", + "🐝": "蜜蜂", + "🐞": "瓢虫", + "💐": "花束", + "🌹": "玫瑰", + "🌺": "芙蓉", + "🌻": "向日葵", + "🌷": "郁金香", + "🌲": "松树", + "🌳": "落叶树", + "🌴": "棕榈树", + "🌵": "仙人掌", + "🌿": "药草", + "🍁": "枫叶", + "🍇": "葡萄", + "🍈": "甜瓜", + "🍉": "西瓜", + "🍊": "橘子", + "🍋": "柠檬", + "🍌": "香蕉", + "🍍": "菠萝", + "🥭": "芒果", + "🍏": "青苹果", + "🍐": "梨", + "🍑": "桃", + "🍒": "樱桃", + "🍓": "草莓", + "🫐": "蓝莓", + "🥝": "猕猴桃", + "🍅": "西红柿", + "🫒": "橄榄", + "🥥": "椰子", + "🥑": "鳄梨", + "🍆": "茄子", + "🥕": "胡萝卜", + "🌽": "玉米", + "🌶️": "红辣椒", + "🥬": "绿叶蔬菜", + "🥦": "西兰花", + "🧅": "洋葱", + "🍄": "蘑菇", + "🥜": "花生", + "🥐": "羊角面包", + "🥖": "法式长棍面包", + "🥨": "椒盐卷饼", + "🥯": "面包圈", + "🥞": "烙饼", + "🧇": "华夫饼", + "🍔": "汉堡", + "🍕": "披萨", + "🌭": "热狗", + "🌮": "墨西哥卷饼", + "🍿": "爆米花", + "🦀": "蟹", + "🦞": "龙虾", + "🍨": "冰淇淋", + "🍩": "甜甜圈", + "🍪": "饼干", + "🎂": "生日蛋糕", + "🧁": "纸杯蛋糕", + "🍫": "巧克力", + "🍬": "糖", + "🍭": "棒棒糖", + "🫖": "茶壶", + "🧃": "饮料盒", + "🧉": "马黛茶", + "🧭": "指南针", + "🏔️": "雪山", + "🌋": "火山", + "🏕️": "露营", + "🏝️": "无人荒岛", + "🏡": "别墅", + "⛲️": "喷泉", + "🎠": "旋转木马", + "🎡": "摩天轮", + "🎢": "过山车", + "💈": "理发店", + "🚆": "火车", + "🚋": "有轨电车", + "🚍️": "迎面驶来的公交车", + "🚕": "出租车", + "🚗": "汽车", + "🚚": "货车", + "🚜": "拖拉机", + "🛵": "小型摩托车", + "🛺": "三轮摩托车", + "🛴": "滑板车", + "🛹": "滑板", + "🛼": "四轮滑冰鞋", + "⚓️": "锚", + "⛵️": "帆船", + "🛶": "独木舟", + "🚤": "快艇", + "🚢": "船", + "✈️": "飞机", + "🚁": "直升机", + "🚠": "缆车", + "🛰️": "卫星", + "🚀": "火箭", + "🛸": "飞碟", + "⏰": "闹钟", + "🌙": "弯月", + "🌡️": "温度计", + "☀️": "太阳", + "🪐": "有环行星", + "🌟": "闪亮的星星", + "🌀": "台风", + "🌈": "彩虹", + "☂️": "伞", + "❄️": "雪花", + "☄️": "彗星", + "🔥": "火焰", + "💧": "水滴", + "🌊": "浪花", + "🎃": "南瓜灯", + "✨": "闪亮", + "🎈": "气球", + "🎉": "拉炮彩带", + "🎏": "鲤鱼旗", + "🎀": "蝴蝶结", + "🎁": "礼物", + "🎟️": "入场券", + "🏆️": "奖杯", + "⚽️": "足球", + "🏀": "篮球", + "🏈": "美式橄榄球", + "🎾": "网球", + "🥏": "飞盘", + "🏓": "乒乓球", + "🏸": "羽毛球", + "🤿": "潜水面罩", + "🥌": "冰壶", + "🎯": "正中靶心的飞镖", + "🪀": "悠悠球", + "🪁": "风筝", + "🔮": "水晶球", + "🎲": "骰子", + "🧩": "拼图", + "🎨": "调色盘", + "🧵": "线", + "👕": "T恤", + "🧦": "袜子", + "👗": "连衣裙", + "🩳": "短裤", + "🎒": "书包", + "👟": "跑鞋", + "👑": "皇冠", + "🧢": "鸭舌帽", + "💄": "唇膏", + "💍": "戒指", + "💎": "宝石", + "📢": "喇叭", + "🎶": "多个音符", + "🎙️": "录音室麦克风", + "📻️": "收音机", + "🎷": "萨克斯管", + "🪗": "手风琴", + "🎸": "吉他", + "🎺": "小号", + "🎻": "小提琴", + "🪕": "班卓琴", + "🥁": "鼓", + "☎️": "电话", + "🔋": "电池", + "💿️": "光盘", + "🧮": "算盘", + "🎬️": "场记板", + "💡": "灯泡", + "🔦": "手电筒", + "🏮": "红灯笼", + "📕": "合上的书本", + "🏷️": "标签", + "💳️": "信用卡", + "✏️": "铅笔", + "🖌️": "画笔", + "🖍️": "蜡笔", + "📌": "图钉", + "📎": "回形针", + "🔑": "钥匙", + "🪃": "回旋镖", + "🏹": "弓和箭", + "⚖️": "天平", + "🧲": "磁铁", + "🧪": "试管", + "🧬": "DNA", + "🔬": "显微镜", + "🔭": "望远镜", + "📡": "卫星天线", + "🪑": "椅子", + "🧹": "扫帚", + "🗿": "摩埃" + }, + "zh-TW": { + "👽️": "外星人", + "🤖": "機器人", + "🧠": "腦", + "👁️": "眼睛", + "🧙": "魔術師", + "🧚": "仙女", + "🧜": "人魚", + "🐵": "猴子頭", + "🦧": "猩猩", + "🐶": "狗頭", + "🐺": "狼", + "🦊": "狐狸", + "🦝": "浣熊", + "🐱": "貓頭", + "🦁": "獅子", + "🐯": "老虎頭", + "🐴": "馬頭", + "🦄": "獨角獸", + "🦓": "斑馬", + "🦌": "鹿", + "🐮": "牛頭", + "🐷": "豬頭", + "🐗": "野豬", + "🐪": "單峰駱駝", + "🦙": "羊駝", + "🦒": "長頸鹿", + "🐘": "大象", + "🦣": "毛象", + "🦏": "犀牛", + "🐭": "老鼠頭", + "🐰": "兔子頭", + "🐿️": "松鼠", + "🦔": "刺蝟", + "🦇": "蝙蝠", + "🐻": "熊", + "🐨": "無尾熊", + "🦥": "樹懶", + "🦦": "水獺", + "🦘": "袋鼠", + "🐥": "小雞", + "🐦️": "鳥", + "🕊️": "飛鳥", + "🦆": "鴨子", + "🦉": "貓頭鷹", + "🦤": "渡渡鳥", + "🪶": "羽毛", + "🦩": "紅鶴", + "🦚": "孔雀", + "🦜": "鸚鵡", + "🐊": "鱷魚", + "🐢": "烏龜", + "🦎": "蜥蜴", + "🐍": "蛇", + "🐲": "龍頭", + "🦕": "蜥腳類恐龍", + "🐳": "鯨魚", + "🐬": "海豚", + "🦭": "海豹", + "🐟️": "魚", + "🐠": "熱帶魚", + "🦈": "鯊魚", + "🐙": "章魚", + "🐚": "海螺", + "🐌": "蝸牛", + "🦋": "蝴蝶", + "🐛": "毛毛蟲", + "🐝": "蜜蜂", + "🐞": "瓢蟲", + "💐": "花束", + "🌹": "玫瑰", + "🌺": "芙蓉", + "🌻": "向日葵", + "🌷": "鬱金香", + "🌲": "常青樹", + "🌳": "落葉樹", + "🌴": "棕櫚樹", + "🌵": "仙人掌", + "🌿": "草藥", + "🍁": "楓葉", + "🍇": "葡萄", + "🍈": "瓜", + "🍉": "西瓜", + "🍊": "橘子", + "🍋": "檸檬", + "🍌": "香蕉", + "🍍": "鳳梨", + "🥭": "芒果", + "🍏": "青蘋果", + "🍐": "梨子", + "🍑": "桃子", + "🍒": "櫻桃", + "🍓": "草莓", + "🫐": "藍莓", + "🥝": "奇異果", + "🍅": "番茄", + "🫒": "橄欖", + "🥥": "椰子", + "🥑": "酪梨", + "🍆": "茄子", + "🥕": "胡蘿蔔", + "🌽": "玉米", + "🌶️": "辣椒", + "🥬": "綠葉蔬菜", + "🥦": "花椰菜", + "🧅": "洋蔥", + "🍄": "蘑菇", + "🥜": "花生", + "🥐": "可頌", + "🥖": "法國麵包", + "🥨": "蝴蝶餅", + "🥯": "貝果", + "🥞": "鬆餅", + "🧇": "格子鬆餅", + "🍔": "漢堡", + "🍕": "披薩", + "🌭": "熱狗", + "🌮": "夾餅", + "🍿": "爆米花", + "🦀": "螃蟹", + "🦞": "龍蝦", + "🍨": "冰淇淋", + "🍩": "甜甜圈", + "🍪": "餅乾", + "🎂": "生日蛋糕", + "🧁": "杯子蛋糕", + "🍫": "巧克力", + "🍬": "糖", + "🍭": "棒棒糖", + "🫖": "茶壺", + "🧃": "鋁箔包", + "🧉": "瑪黛茶", + "🧭": "指南針", + "🏔️": "雪山", + "🌋": "火山", + "🏕️": "露營", + "🏝️": "熱帶小島", + "🏡": "別墅", + "⛲️": "噴泉", + "🎠": "旋轉木馬", + "🎡": "摩天輪", + "🎢": "雲霄飛車", + "💈": "理髮店", + "🚆": "火車", + "🚋": "電纜車", + "🚍️": "公共汽車", + "🚕": "計程車", + "🚗": "汽車", + "🚚": "貨車", + "🚜": "拖弋機", + "🛵": "摩托車", + "🛺": "嘟嘟車", + "🛴": "滑板車", + "🛹": "滑板", + "🛼": "輪式溜冰鞋", + "⚓️": "錨", + "⛵️": "帆船", + "🛶": "獨木舟", + "🚤": "快艇", + "🚢": "船", + "✈️": "飛機", + "🚁": "直升機", + "🚠": "纜車", + "🛰️": "衛星", + "🚀": "火箭", + "🛸": "飛碟", + "⏰": "鬧鐘", + "🌙": "彎月", + "🌡️": "溫度計", + "☀️": "太陽", + "🪐": "帶行星環的行星", + "🌟": "閃爍的星星", + "🌀": "颱風", + "🌈": "彩虹", + "☂️": "雨傘", + "❄️": "雪花", + "☄️": "慧星", + "🔥": "火", + "💧": "水滴", + "🌊": "波浪", + "🎃": "南瓜燈", + "✨": "閃爍", + "🎈": "氣球", + "🎉": "拉炮", + "🎏": "鯉魚旗", + "🎀": "蝴蝶結", + "🎁": "禮物", + "🎟️": "入場券", + "🏆️": "獎盃", + "⚽️": "足球", + "🏀": "籃球", + "🏈": "美式足球", + "🎾": "網球", + "🥏": "飛盤", + "🏓": "桌球", + "🏸": "羽毛球", + "🤿": "潛水面罩", + "🥌": "冰石壺", + "🎯": "命中", + "🪀": "溜溜球", + "🪁": "風箏", + "🔮": "水晶球", + "🎲": "骰子", + "🧩": "拼圖", + "🎨": "調色板", + "🧵": "線", + "👕": "T卹", + "🧦": "襪子", + "👗": "洋裝", + "🩳": "短泳褲", + "🎒": "書包", + "👟": "運動鞋", + "👑": "皇冠", + "🧢": "鴨舌帽", + "💄": "口紅", + "💍": "戒指", + "💎": "鑽石", + "📢": "大聲公", + "🎶": "樂符", + "🎙️": "錄音室麥克風", + "📻️": "收音機", + "🎷": "薩克斯風", + "🪗": "手風琴", + "🎸": "吉他", + "🎺": "小號", + "🎻": "小提琴", + "🪕": "斑鳩琴", + "🥁": "鼓", + "☎️": "電話", + "🔋": "電池", + "💿️": "光碟", + "🧮": "算盤", + "🎬️": "場記板", + "💡": "燈泡", + "🔦": "手電筒", + "🏮": "燈籠", + "📕": "合起來的書本", + "🏷️": "吊牌", + "💳️": "信用卡", + "✏️": "鉛筆", + "🖌️": "畫筆", + "🖍️": "蠟筆", + "📌": "圖釘", + "📎": "迴紋針", + "🔑": "鑰匙", + "🪃": "迴力鏢", + "🏹": "弓箭", + "⚖️": "天平", + "🧲": "磁鐵", + "🧪": "試管", + "🧬": "DNA", + "🔬": "顯微鏡", + "🔭": "望遠鏡", + "📡": "衛星天線", + "🪑": "椅子", + "🧹": "掃帚", + "🗿": "復活節島" + } +} \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f300.svg b/browser/components/torpreferences/content/bridgemoji/1f300.svg new file mode 100644 index 000000000000..1de6f256cb52 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f300.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M35.782 24.518c-.13-.438-.422-.799-.821-1.016-.802-.436-1.879-.116-2.316.683-1.797 3.296-4.771 5.695-8.372 6.757-3.563 1.051-7.437.634-10.698-1.144-2.558-1.394-4.419-3.699-5.242-6.493-.74-2.514-.495-5.016.552-7.033-.363 1.605-.313 3.285.164 4.908.737 2.507 2.407 4.575 4.701 5.823 2.733 1.492 5.989 1.841 8.979.961 3.025-.892 5.521-2.906 7.026-5.672 1.832-3.358 2.246-7.228 1.165-10.898-1.08-3.669-3.524-6.69 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f308.svg b/browser/components/torpreferences/content/bridgemoji/1f308.svg new file mode 100644 index 000000000000..ffe6a12398cf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f308.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8767AC" d="M36 1C16.118 1 1 16.118 1 36h17.042c0-9.917 8.042-17.958 17.958-17.958V1z"/><path fill="#EB2027" d="M0 35.999h3.042c0-18.189 14.734-32.935 32.917-32.957V0C16.095.023 0 16.131 0 35.999z"/><path fill="#F19020" d="M3.083 36h3C6.083 19.468 19.473 6.065 36 6.043v-3C17.817 3.065 3.083 17.811 3.083 36z"/><path fill="#FFCB4C" d="M6.083 36h3C9.083 21.125 21.13 9.065 36 9.043v-3C19.473 6.065 6.083 19.468 6.083 36z" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f30a.svg b/browser/components/torpreferences/content/bridgemoji/1f30a.svg new file mode 100644 index 000000000000..0e68ec3614f8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f30a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M33.398 23.678c-7.562 4.875-20.062-.438-18.375-8.062 1.479-6.684 9.419-4.763 11.225-3.861 1.806.902.713-3.889-3.475-5.327C17.1 4.48 10.156 4.893 7.961 14.678c-1.5 6.687 1.438 16.062 12.719 16.187 11.281.125 12.718-7.187 12.718-7.187z"/><path fill="#55ACEE" d="M35.988 25.193c0-2.146-2.754-2.334-4-1.119-2.994 2.919-7.402 4.012-13.298 2.861-10.25-2-10.341-14.014-3.333-17.441 3.791-1.854 8.289.341 9.999 1.655 1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f30b.svg b/browser/components/torpreferences/content/bridgemoji/1f30b.svg new file mode 100644 index 000000000000..88d989d73c53 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f30b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M12 36V16s-1.17 1.053-2.354 1.929c-.313.231-1.977.79-2.312 1.04-1.762 1.315-2.552 3.841-2.792 4.167C4.083 23.76 0 36 0 36h12z"/><path fill="#4B545D" d="M32 36l-5.5-17.75-8.5-5.656-6.458 2.208C11.135 15.583 10 18.25 10 18.25L8.75 22 0 36h32z"/><path fill="#292F33" d="M18.135 25.726c-.145-.513-.026-.97-.177-1.476-.148-.499-.566-1.047-.693-1.478-.265-.899-.454-1.583-.445-1.772.024-.469.894-.401 1.102.469.293 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f319.svg b/browser/components/torpreferences/content/bridgemoji/1f319.svg new file mode 100644 index 000000000000..d98dc2f9f42f --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f319.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M30.312.776C32 19 20 32 .776 30.312c8.199 7.717 21.091 7.588 29.107-.429C37.9 21.867 38.03 8.975 30.312.776z"/><path d="M30.705 15.915c-.453.454-.453 1.189 0 1.644.454.453 1.189.453 1.643 0 .454-.455.455-1.19 0-1.644-.453-.454-1.189-.454-1.643 0zm-16.022 14.38c-.682.681-.682 1.783 0 2.465.68.682 1.784.682 2.464 0 .681-.682.681-1.784 0-2.465-.68-.682-1.784-.682-2.464 0zm13.968-2.147c-1.135 1.135-2.974 1.13 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f31f.svg b/browser/components/torpreferences/content/bridgemoji/1f31f.svg new file mode 100644 index 000000000000..a4695dd6df57 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f31f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M28.84 17.638c-.987 1.044-1.633 3.067-1.438 4.493l.892 6.441c.197 1.427-.701 2.087-1.996 1.469l-5.851-2.796c-1.295-.62-3.408-.611-4.7.018l-5.826 2.842c-1.291.629-2.193-.026-2.007-1.452l.843-6.449c.186-1.427-.475-3.444-1.47-4.481l-4.494-4.688c-.996-1.037-.655-2.102.755-2.365l6.37-1.188c1.41-.263 3.116-1.518 3.793-2.789L16.762.956c.675-1.271 1.789-1.274 2.473-.009L22.33 6.66c.686 1.265 2.4 2.507 3.814 2.758 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f321.svg b/browser/components/torpreferences/content/bridgemoji/1f321.svg new file mode 100644 index 000000000000..95a75984e1ff --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f321.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M33.536 2.464c-1.953-1.953-5.118-1.953-7.071 0l-1.197 1.199 2.842 2.843c.391.391.391 1.024 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.841-2.842-2.11 2.112 2.841 2.84c.391.39.391 1.023 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.84-2.839-2.12 2.122 2.837 2.838c.391.391.391 1.024 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.837-2.837-2.12 2.123 2.836 2.836c.391.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f32d.svg b/browser/components/torpreferences/content/bridgemoji/1f32d.svg new file mode 100644 index 000000000000..a450dbba085e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f32d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M31.42 31.471c-3.515 3.515-9.213 3.515-12.728 0L4.55 17.328c-3.515-3.515-3.515-9.213 0-12.728 3.515-3.515 9.213-3.515 12.728 0L31.42 18.743c3.515 3.514 3.515 9.213 0 12.728z"/><path fill="#F7BBA6" d="M29.335 20.9c3.515 3.515 4.609 8.119 2.475 10.253-2.135 2.134-6.739 1.039-10.253-2.475L7.414 14.536c-3.515-3.515-4.609-8.12-2.475-10.253 2.134-2.134 6.738-1.04 10.253 2.475L29.335 20.9z"/><path fill="#DD2E44" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f32e.svg b/browser/components/torpreferences/content/bridgemoji/1f32e.svg new file mode 100644 index 000000000000..5b08f1f7d199 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f32e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M12 7C5.374 7 0 14.164 0 23h6v6h17.119c.564-1.854.881-3.877.881-6 0-8.836-5.373-16-12-16z"/><path fill="#FFE8B6" d="M29 21h4.896C33.156 13.11 28.118 7 22 7c-6.627 0-12 7.164-12 16 0 2.123.317 4.146.88 6H29v-8z"/><path fill="#FFAC33" d="M36 23c0-8.836-5.373-16-12-16-6.626 0-12 7.164-12 16 0 2.123.317 4.146.88 6H30c3.314 0 6-2.685 6-6z"/><path fill="#FFAC33" d="M6 23h10v6H6z"/><path fill="#FFE8B6" d="M0 23c [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f332.svg b/browser/components/torpreferences/content/bridgemoji/1f332.svg new file mode 100644 index 000000000000..540f1860cc16 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f332.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M22 33c0 2.209-1.791 3-4 3s-4-.791-4-3l1-9c0-2.209.791-2 3-2s3-.209 3 2l1 9z"/><path fill="#5C913B" d="M31.406 27.297C24.443 21.332 21.623 12.791 18 12.791c-3.623 0-6.443 8.541-13.405 14.506-2.926 2.507-1.532 3.957 2.479 3.667 3.576-.258 6.919-1.069 10.926-1.069s7.352.812 10.926 1.069c4.012.29 5.405-1.16 2.48-3.667z"/><path fill="#3E721D" d="M29.145 24.934C23.794 20.027 20.787 13 18 13c-2.785 0-5.793 7.02 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f333.svg b/browser/components/torpreferences/content/bridgemoji/1f333.svg new file mode 100644 index 000000000000..3937fc499f8b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f333.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M22 33c0 2.209-1.791 3-4 3s-4-.791-4-3l1-9c0-2.209.791-2 3-2s3-.209 3 2l1 9z"/><path fill="#5C913B" d="M34 17c0 8.837-7.163 12-16 12-8.836 0-16-3.163-16-12C2 8.164 11 0 18 0s16 8.164 16 17z"/><g fill="#3E721D"><ellipse cx="6" cy="21" rx="2" ry="1"/><ellipse cx="30" cy="21" rx="2" ry="1"/><ellipse cx="10" cy="25" rx="2" ry="1"/><ellipse cx="14" cy="22" rx="2" ry="1"/><ellipse cx="10" cy="16" rx="2" ry="1"/ [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f334.svg b/browser/components/torpreferences/content/bridgemoji/1f334.svg new file mode 100644 index 000000000000..55d246a2fe7a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f334.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M21.978 20.424c-.054-.804-.137-1.582-.247-2.325-.133-.89-.299-1.728-.485-2.513-.171-.723-.356-1.397-.548-2.017-.288-.931-.584-1.738-.852-2.4-.527-1.299-.943-2.043-.943-2.043l-3.613.466s.417.87.868 2.575c.183.692.371 1.524.54 2.495.086.49.166 1.012.238 1.573.1.781.183 1.632.242 2.549.034.518.058 1.058.074 1.619.006.204.015.401.018.611.01.656-.036 1.323-.118 1.989-.074.6-.182 1.197-.311 1.789-.185.848-.413 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f335.svg b/browser/components/torpreferences/content/bridgemoji/1f335.svg new file mode 100644 index 000000000000..097dc13c440e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f335.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M30 4c-2.209 0-4 1.791-4 4v9.125c0 1.086-.887 1.96-2 2.448V6c0-3.313-2.687-6-6-6s-6 2.687-6 6v17.629c-1.122-.475-2-1.371-2-2.504V16c0-2.209-1.791-4-4-4s-4 1.791-4 4v7c0 2.209 1.75 3.875 3.375 4.812 1.244.718 4.731 1.6 6.625 1.651V33c0 3.313 12 3.313 12 0v-7.549c1.981-.119 5.291-.953 6.479-1.639C32.104 22.875 34 21.209 34 19V8c0-2.209-1.791-4-4-4z"/><g fill="#3E721D"><circle cx="12" cy="6" r="1"/><circle c [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f336.svg b/browser/components/torpreferences/content/bridgemoji/1f336.svg new file mode 100644 index 000000000000..eaeef864dc48 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f336.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DA2F47" d="M4.042 27.916c4.89.551 9.458-1.625 13.471-5.946 4.812-5.182 5-13 5-14s11.31-3.056 11 5c-.43 11.196-7.43 20.946-19.917 21.916-5.982.465-9.679-.928-11.387-2.345-2.69-2.231-.751-4.916 1.833-4.625z"/><path fill="#77B255" d="M30.545 6.246c.204-1.644.079-3.754-.747-4.853-1.111-1.479-4.431-.765-3.569.113.96.979 2.455 2.254 2.401 4.151-.044-.01-.085-.022-.13-.032-3.856-.869-6.721 1.405-7.167 2.958-.782 2.722 4.06 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f337.svg b/browser/components/torpreferences/content/bridgemoji/1f337.svg new file mode 100644 index 000000000000..86a1a36f99db --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f337.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M34.751 22c-3.382 0-11.9 3.549-15.751 7.158V17c0-.553-.447-1-1-1-.552 0-1 .447-1 1v12.341C13.247 25.669 4.491 22 1.052 22 .123 22 11.913 35.992 17 34.599V35c0 .553.448 1 1 1 .553 0 1-.447 1-1v-.356C24.188 35.638 35.668 22 34.751 22z"/><path fill="#EA596E" d="M25 13.417C25 19.768 23.293 23 18 23s-7-3.232-7-9.583S16 0 18 0s7 7.066 7 13.417z"/><path fill="#F4ABBA" d="M22.795 2c-.48 0-4.106 14.271-4.803 19.27 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f339.svg b/browser/components/torpreferences/content/bridgemoji/1f339.svg new file mode 100644 index 000000000000..500d9257cece --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f339.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M19.32 25.358c-.113 0-.217.003-.32.005v-.415c4.805-.479 8.548-4.264 8.548-7.301 0-3.249 0 1.47-9.562 1.47-9.558 0-9.558-4.719-9.558-1.47 0 3.043 3.757 6.838 8.572 7.305v.411c-.104-.002-.207-.005-.321-.005-2.553 0-6.603-2.05-6.603-1.32 0 .646 4.187 4.017 6.924 4.796V35c0 .553.447 1 1 1s1-.447 1-1v-6.166c2.738-.779 6.924-4.15 6.924-4.796 0-.729-4.05 1.32-6.604 1.32z"/><path fill="#A0041E" d="M26.527 7.353c- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f33a.svg b/browser/components/torpreferences/content/bridgemoji/1f33a.svg new file mode 100644 index 000000000000..19c2f896020e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f33a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M19.602 32.329c6.509 6.506 17.254-7.669 15.72-7.669-7.669 0-22.227 1.161-15.72 7.669z"/><path fill="#77B255" d="M15.644 33.372C9.612 39.404-.07 26.263 1.352 26.263c3.81 0 9.374-.348 12.79.867 2.958 1.052 4.304 3.442 1.502 6.242z"/><path fill="#F4ABBA" d="M34.613 15.754c-.052-.901-.175-2.585-1.398-4.227-1.16-1.549-3.805-3.371-5.534-2.585.516-1.676-.264-4.125-1.191-5.49-1.179-1.736-4.262-3.843-8.146-3.026-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f33b.svg b/browser/components/torpreferences/content/bridgemoji/1f33b.svg new file mode 100644 index 000000000000..413e6fcbf87b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f33b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M28 27c-8 0-8 6-8 6V22h-4v11s0-6-8-6c-4 0-7-2-7-2s0 9 9 9h6s0 2 2 2 2-2 2-2h6c9 0 9-9 9-9s-3 2-7 2z"/><path fill="#FFAC33" d="M21.125 27.662c-.328 0-.651-.097-.927-.283l-2.323-1.575-2.322 1.575c-.277.186-.601.283-.929.283-.143 0-.287-.018-.429-.057-.462-.123-.851-.441-1.06-.874l-1.225-2.527-2.797.204c-.04.002-.079.004-.119.004-.438 0-.86-.174-1.17-.484-.34-.342-.516-.81-.481-1.288l.201-2.8-2.523-1.225c-.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f33d.svg b/browser/components/torpreferences/content/bridgemoji/1f33d.svg new file mode 100644 index 000000000000..6c4ae3bf53b0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f33d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M15.373 1.022C13.71 2.686 8.718 9.34 11.214 15.164c2.495 5.823 5.909 2.239 7.486-2.495.832-2.496.832-5.824-.831-10.815-.832-2.496-2.496-.832-2.496-.832zm19.304 19.304c-1.663 1.663-8.319 6.655-14.142 4.159-5.824-2.496-2.241-5.909 2.495-7.486 2.497-.832 5.823-.833 10.814.832 2.496.831.833 2.495.833 2.495z"/><path fill="#F4900C" d="M32.314 6.317s-.145-1.727-.781-2.253c-.435-.546-2.018-.546-2.018-.546-1.664 0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f33f.svg b/browser/components/torpreferences/content/bridgemoji/1f33f.svg new file mode 100644 index 000000000000..9243e96857bf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f33f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M20.917 22.502c-2.706-.331-3.895-1.852-6.273-4.889 3.039-2.376 4.559-3.565 7.266-3.235 2.71.332 5.25 2.016 6.273 4.889-1.683 2.543-4.557 3.563-7.266 3.235zm-5.959 8.814c-2.549-.187-3.733-1.553-6.098-4.288 2.735-2.364 4.102-3.547 6.652-3.364 2.551.185 5.009 1.644 6.098 4.287-1.459 2.458-4.1 3.548-6.652 3.365zm-6.22-15.707c1.338 1.631 1.191 3.117.898 6.088-2.97-.294-4.456-.44-5.795-2.071-1.339-1.634-1.861-3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f341.svg b/browser/components/torpreferences/content/bridgemoji/1f341.svg new file mode 100644 index 000000000000..7cd7ad977b13 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f341.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 20.917c0-.688-2.895-.5-3.125-1s3.208-4.584 2.708-5.5-5.086 1.167-5.375.708c-.288-.458.292-3.5-.208-3.875s-5.25 4.916-5.917 4.292c-.666-.625 1.542-10.5 1.086-10.698-.456-.198-3.419 1.365-3.793 1.282C21.002 6.042 18.682 0 18 0s-3.002 6.042-3.376 6.125c-.374.083-3.337-1.48-3.793-1.282-.456.198 1.752 10.073 1.085 10.698C11.25 16.166 6.5 10.875 6 11.25s.08 3.417-.208 3.875c-.289.458-4.875-1.625-5.375-.708s [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f344.svg b/browser/components/torpreferences/content/bridgemoji/1f344.svg new file mode 100644 index 000000000000..0cf7a7914240 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f344.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M27 33c0 2.209-1.791 3-4 3H13c-2.209 0-4-.791-4-3s3-7 3-13 12-6 12 0 3 10.791 3 13z"/><path fill="#DD2E44" d="M34.666 11.189l-.001-.002c-.96-2.357-2.404-4.453-4.208-6.182h-.003C27.222 1.904 22.839 0 18 0 13.638 0 9.639 1.541 6.524 4.115c-2.19 1.809-3.941 4.13-5.076 6.785C.518 13.075 0 15.473 0 18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4 0-2.417-.48-4.713-1.334-6.811z"/><g fill="#F4ABBA"><path d="M7.708 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f345.svg b/browser/components/torpreferences/content/bridgemoji/1f345.svg new file mode 100644 index 000000000000..411c2a50e38b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f345.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M22.494 5.344c-.687 0-1.352.066-1.991.177-.819-.104-2.74-.231-3.591-.231-8.473 0-15.886 3.177-15.886 14.298 0 9.036 7.049 16.361 16.976 16.361s17.974-7.325 17.974-16.361C35.975 8.339 26.59 5.344 22.494 5.344z"/><path fill="#77B255" d="M8.439.091c1.637 1.636 2.77 2.266 3.274 4.91.298 1.564 2.266 1.51 2.266 1.51s-3.903 1.763-5.54 3.4c0 0 4.91-1.637 6.547-1.637 0 0 3.273 1.637 3.273 3.273 0 0 0-3.273-1.636-3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f346.svg b/browser/components/torpreferences/content/bridgemoji/1f346.svg new file mode 100644 index 000000000000..14688a6dd5fa --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f346.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#744EAA" d="M6 4c3 0 5 2 8 6s7.957 7.191 12 8c5 1 9 5 9 11 0 4.897-3.846 7-9 7-5 0-9-3-14-8S2 14 2 10s1-6 4-6z"/><path fill="#77B255" d="M3.515 0c1.248 0 1.248 1.248 1.248 2.495 0 1.764 1.248 1.129 2.496 1.129C8.505 3.624 11 6 11 6H7.258c-1.248 0 0 2.614-1.248 2.614S4.762 7.426 3.515 7.426 2 11 2 11s-1.604-4.153.267-6.024C3.515 3.728 1.02 0 3.515 0z"/></svg> \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f347.svg b/browser/components/torpreferences/content/bridgemoji/1f347.svg new file mode 100644 index 000000000000..e52e2f851970 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f347.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M9.999 12c-.15 0-.303-.034-.446-.106-4.38-2.19-7.484-7.526-8.501-10.578C.876.792 1.16.226 1.684.051c.525-.176 1.091.109 1.265.632.877 2.632 3.688 7.517 7.499 9.422.494.247.694.848.447 1.342-.176.351-.529.553-.896.553z"/><circle fill="#553788" cx="19" cy="29" r="7"/><circle fill="#9266CC" cx="10" cy="15" r="7"/><circle fill="#AA8DD8" cx="19" cy="12" r="7"/><circle fill="#744EAA" cx="27" cy="18" r="7"/><cir [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f348.svg b/browser/components/torpreferences/content/bridgemoji/1f348.svg new file mode 100644 index 000000000000..f3482735105c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f348.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A6D388" d="M31.924 10.982c4.418 7.652 1.99 17.326-5.424 21.607-7.414 4.28-16.505 2.413-20.924-5.241C.577 18.688 3.086 9.156 10.5 4.876c7.414-4.28 17.924.044 21.424 6.106z"/><path fill="#77B255" d="M24 6c3 1 6 4 8 7 .836 1.254.729-.078-.294-2.348C28.02 4.768 17.777.675 10.5 4.876c-3.01 1.738-5.194 4.349-6.413 7.408C4.808 11.471 5.52 11 6 11c1 0-1.896 3.279 1 11 3 8 3 4 3 4s-2-9-1-12 2-5 3-4 5 9 7 14c2.259 5.647 2-1-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f349.svg b/browser/components/torpreferences/content/bridgemoji/1f349.svg new file mode 100644 index 000000000000..0f5ec06a4d40 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f349.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M2.472 6.572C1.528 8.698 1 11.038 1 13.5 1 23.165 9.059 31 19 31c7.746 0 14.33-4.767 16.868-11.44L2.472 6.572z"/><path fill="#FFE8B6" d="M4.332 7.295C3.479 9.197 3 11.293 3 13.5c0 8.591 7.164 15.556 16 15.556 6.904 0 12.77-4.26 15.013-10.218L4.332 7.295z"/><path fill="#DD2E44" d="M6.191 8.019C5.43 9.697 5 11.548 5 13.5c0 7.518 6.268 13.611 14 13.611 6.062 0 11.21-3.753 13.156-8.995L6.191 8.019z"/><path d= [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f34a.svg b/browser/components/torpreferences/content/bridgemoji/1f34a.svg new file mode 100644 index 000000000000..82c0c52b1d0d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f34a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M3 19.5C3 10.388 10.387 3 19.499 3c9.113 0 16.5 7.387 16.5 16.5S28.612 36 19.499 36C10.387 36 3 28.613 3 19.5z"/><path fill="#662113" d="M11.414 7.585c-.267-.267-.797-.197-1.355.12-3.3-2.732-8.653-3.652-8.895-3.692-.546-.089-1.059.277-1.15.821-.091.544.276 1.06.821 1.151.053.009 4.934.854 7.821 3.16-.275.525-.324 1.015-.07 1.268.39.391 1.34.074 2.121-.707.781-.78 1.097-1.73.707-2.121z"/><path fill="#5C913 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f34b.svg b/browser/components/torpreferences/content/bridgemoji/1f34b.svg new file mode 100644 index 000000000000..ffbdc0886c9e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f34b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M11.405 3.339c6.48-1.275 8.453 1.265 11.655.084 3.202-1.181.093 2.82-.745 3.508-.84.688-8.141 4.809-11.307 3.298-3.166-1.511-3.182-6.186.397-6.89z"/><path fill="#77B255" d="M15.001 16c-.304 0-.605-.138-.801-.4-.687-.916-1.308-1.955-1.965-3.056C9.967 8.749 7.396 4.446.783 2.976c-.539-.12-.879-.654-.759-1.193.12-.54.654-.878 1.193-.759C8.671 2.68 11.599 7.581 13.952 11.519c.63 1.054 1.224 2.049 1.848 2.881. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f34c.svg b/browser/components/torpreferences/content/bridgemoji/1f34c.svg new file mode 100644 index 000000000000..b4120ba34cbf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f34c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M28 2c2.684-1.342 5 4 3 13-1.106 4.977-5 9-9 12s-11-1-7-5 8-7 10-13c1.304-3.912 1-6 3-7z"/><path fill="#FFD983" d="M31 8c0 3-1 9-4 13s-7 5-4 1 5-7 6-11 2-7 2-3z"/><path fill="#FFCC4D" d="M22 20c-.296.592 1.167-3.833-3-6-1.984-1.032-10 1-4 1 3 0 4 2 2 4-.291.292-.489.603-.622.912-.417.346-.873.709-1.378 1.088-2.263 1.697-5.84 4.227-10 7-3 2-4 3-4 4 0 3 9 3 14 1s10-7 10-7l4-4c-3-4-7-2-7-2z"/><path fill="#FF [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f34d.svg b/browser/components/torpreferences/content/bridgemoji/1f34d.svg new file mode 100644 index 000000000000..e96999db7a0e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f34d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M18.241 9.633c-.277-3.307 2.17-4.72 2.17-4.72-3.199.113-4.894 2.826-4.894 2.826-.752-1.3.946-4.012 2.169-4.719-3.198.113-3.67 2.12-3.67 2.12-1.503-2.601-1.03-4.607-1.03-4.607-1.121.647-1.767 2.113-2.141 3.512l-2.318-2.67c-.23 1.044.157 3.174.573 4.959-3.055-1.79-5.903-.15-5.903-.15 3.95 1.188 5.45 3.788 5.45 3.788s-3.948-1.187-5.646 1.526c2.597-.092 4.5.499 5.856 1.23-1.163.289-3.145-.236-4.355 1.371 0 0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f34f.svg b/browser/components/torpreferences/content/bridgemoji/1f34f.svg new file mode 100644 index 000000000000..1423d8aa8e2c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f34f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M24 7c-3 0-3 1-6 1s-3-1-6-1c-4 0-9 2-9 9 0 11 6 20 10 20 3 0 3-1 5-1s2 1 5 1c4 0 10-9 10-20 0-7.001-5-9-9-9z"/><path fill="#3E721D" d="M17.311 7.88s-1.775-4.674-6.58-6.06c-3.843-1.108-6.318.26-6.318.26s3.012 3.991 5.895 4.822c2.882.83 7.003.978 7.003.978z"/><path fill="#662113" d="M18 10c-.552 0-1-.448-1-1 0-3.441 1.2-6.615 3.293-8.707.391-.391 1.023-.391 1.414 0s.391 1.024 0 1.414C19.986 3.427 19 6.085 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f350.svg b/browser/components/torpreferences/content/bridgemoji/1f350.svg new file mode 100644 index 000000000000..2888963f457a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f350.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A6D388" d="M7.681 9.097c1.587-3.151 7.698-1.916 11.958 2.171 2.697 2.586 8.056 1.498 11.498 4.804 3.493 3.354 3.259 9.361-3.053 15.767C23 37 16 37 11.835 33.384c-4.388-3.811-2.476-8.61-4.412-13.585C5.487 14.823 3.1 9.375 7.681 9.097z"/><path fill="#662113" d="M8.178 9.534c-.43.448-1.114.489-1.527.093-3.208-3.079-3.918-7.544-3.946-7.776-.074-.586.348-1.157.939-1.278.592-.121 1.131.257 1.205.842.006.05.657 3.997 3.359 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f351.svg b/browser/components/torpreferences/content/bridgemoji/1f351.svg new file mode 100644 index 000000000000..84e81f5e6ee2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f351.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M1.062 5.125s4.875-5 10-5C17.188.125 19 5.062 19 5.062s.625-4 5-4 6.938 3.125 6.938 3.125-3.562 2.125-4.625 2.562c-2.801 1.153-11.375 3.562-15.375 2.562S1.062 5.125 1.062 5.125z"/><path fill="#FF886C" d="M18 6s1.042-.896 6-.896c6.542 0 12 4.812 12 12.927 0 11.531-14.958 17.881-14.958 17.881S1 34.833 1 17.977C1 8.018 7.75 5 12 5c4.958 0 6 1 6 1z"/><path fill="#77B255" d="M1.062 5.125s4.875-5 10-5C17.188.12 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f352.svg b/browser/components/torpreferences/content/bridgemoji/1f352.svg new file mode 100644 index 000000000000..bdba6bd679c5 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f352.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M25.999 24c-.198 0-.397-.059-.572-.181-6.543-4.58-12.166-12.366-15.397-17.439 1.699 10.528.997 16.458.962 16.744-.068.548-.562.93-1.115.868-.548-.068-.937-.567-.869-1.115.009-.079.936-8.033-1.986-21.668-.105-.487.166-.978.634-1.148.466-.172.991.028 1.226.468.079.148 8.007 14.873 17.691 21.652.453.316.562.94.246 1.392-.194.279-.504.427-.82.427z"/><path fill="#5C913B" d="M26.547 8.818c-3.476.96-5.051 2.546- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f353.svg b/browser/components/torpreferences/content/bridgemoji/1f353.svg new file mode 100644 index 000000000000..26a41ee246bf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f353.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M22.614 34.845c3.462-1.154 6.117-3.034 6.12-9.373C28.736 21.461 33 17 32.999 12.921 32.998 9 28.384 2.537 17.899 3.635 7.122 4.764 3 8 2.999 15.073c0 4.927 5.304 8.381 8.127 13.518C13 32 18.551 38.187 22.614 34.845z"/><path fill="#77B255" d="M26.252 3.572c-1.278-1.044-3.28-1.55-5.35-1.677.273-.037.542-.076.82-.094.973-.063 3.614-1.232 1.4-1.087-.969.063-1.901.259-2.837.423.237-.154.479-.306.74-.442C21 0 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f354.svg b/browser/components/torpreferences/content/bridgemoji/1f354.svg new file mode 100644 index 000000000000..a129dccb3ba4 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f354.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M18 20.411c-9.371 0-16.967-.225-16.967 6.427C1.033 33.487 8.629 35 18 35c9.371 0 16.967-1.513 16.967-8.162 0-6.651-7.596-6.427-16.967-6.427z"/><path fill="#662113" d="M34.47 20.916S26.251 19.932 18 19.89c-8.251.042-16.47 1.026-16.47 1.026C.717 27.39 7.467 30.057 18 30.057s17.283-2.667 16.47-9.141z"/><path fill="#FFCC4D" d="M33.886 18.328l-31.855.646c-1.1 0-2.021 2.229-.854 2.812 8.708 2.708 15.708 5.448 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f355.svg b/browser/components/torpreferences/content/bridgemoji/1f355.svg new file mode 100644 index 000000000000..3a44bba9a045 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f355.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M18 4c7.257 0 13 4 14.699 2 .197-.323.301-.657.301-1 0-2-6.716-5-15-5C9.716 0 3 3 3 5c0 .343.104.677.301 1C5 8 10.743 4 18 4z"/><path fill="#FFCC4D" d="M18 3C11.787 3 7.384 4.81 5.727 5.618c-.477.233-.539.84-.415 1.278S16 34 16 34s.896 2 2 2 2-2 2-2L30.704 6.779s.213-.842-.569-1.229C28.392 4.689 24.047 3 18 3z"/><g fill="#BE1931"><path d="M18 31c0-2.208-1.791-4-4-4-.254 0-.5.029-.741.075L16 34s.071.14.19. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f368.svg b/browser/components/torpreferences/content/bridgemoji/1f368.svg new file mode 100644 index 000000000000..187b2f4c9a41 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f368.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M20 28.625S30.661 25.9 33.356 15.72c.396-1.495-1.518-2.72-3.868-2.72H5.999c-1.175 0-3.74.493-3.072 2.894C5.711 25.9 16 28.625 16 28.625v1.173s-4.634 2.443-5.588 3.01c-1.027.588-.268 1.526.144 1.689.684.269 2.39 1.15 7.116 1.15 4.847 0 7.497-.954 8.083-1.15.226-.075 1.197-.973-.198-1.799-2.484-1.47-5.557-2.9-5.557-2.9v-1.173z"/><path fill="#3B88C3" d="M33.291 15.248c0 1.692-6.835 3.064-15.269 3.064-8.432 0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f369.svg b/browser/components/torpreferences/content/bridgemoji/1f369.svg new file mode 100644 index 000000000000..3c2aa5826ec6 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f369.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M35.337 23.549C34.291 29.819 27.615 34 18.092 34S1.894 29.819.849 23.549c-.247-1.479.156-8.12 1.054-9.406 2.559-3.664 3.474 10.365 16.189 10.365 13.847 0 13.64-14.028 16.199-10.365.898 1.286 1.292 7.927 1.046 9.406z"/><path fill="#8A4B38" d="M18.092 5.995c-9.331 0-16.895 4.584-16.895 10.239 0 5.655 7.564 10.24 16.895 10.24 9.33 0 16.895-4.585 16.895-10.24S27.422 5.995 18.092 5.995zm0 13.374c-3.174 0-5.748 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f36a.svg b/browser/components/torpreferences/content/bridgemoji/1f36a.svg new file mode 100644 index 000000000000..4f5368a41dd2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f36a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DA9F83" d="M34.966 17.87c.414 4.649-2.082 8.731-4.831 12.206-2.304 2.554-5.602 3.631-8.901 4.285-3.198 1.089-6.766.739-9.716-.895-1.034-.43-2.248-.559-3.167-1.176-2.879-1.846-4.524-4.927-5.779-8.029-1.627-2.916-1.74-6.483-1.414-9.742.219-1.107.967-2.032 1.388-3.051.729-2.127 1.916-3.963 3.569-5.475.786-.787 1.377-1.823 2.303-2.444.919-.617 2.103-.758 3.137-1.188 1.016-.422 1.968-1.08 3.072-1.299 1.072-.213 2.201.106 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f36b.svg b/browser/components/torpreferences/content/bridgemoji/1f36b.svg new file mode 100644 index 000000000000..a993c9b4b7f8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f36b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M26.339 33.496c-1.562 1.561-4.095 1.561-5.657 0L1.59 14.404c-1.562-1.562-1.562-2.681 0-4.243l8.485-8.485c1.562-1.562 2.681-1.562 4.243 0L33.41 20.768c1.562 1.562 1.562 4.095 0 5.657l-7.071 7.071z"/><path fill="#8A4B38" d="M16.582 15.253l-4.885-4.885 5.657-5.657-1.415-1.414-5.656 5.657L6.54 5.211 5.126 6.626l3.743 3.742-5.657 5.657 1.414 1.414 5.657-5.657 4.885 4.885z"/><path fill="#DD2E44" d="M26.339 34.9 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f36c.svg b/browser/components/torpreferences/content/bridgemoji/1f36c.svg new file mode 100644 index 000000000000..f6fbf3b70bba --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f36c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M13.298 3.538c-.531-4.075-5.627-4.3-6.248-2.125l-.933 4.041-4.041.933c-2.175.621-1.949 5.717 2.125 6.248l3.054.399c4.074.531 6.973-2.367 6.441-6.441l-.398-3.055zm18.993 18.991c4.074.531 4.299 5.629 2.125 6.249l-4.041.933-.934 4.042c-.62 2.174-5.717 1.948-6.248-2.126l-.398-3.055c-.531-4.074 2.367-6.973 6.441-6.441l3.055.398z"/><path fill="#BE1931" d="M30.49 22.294l-1.254-.164c-4.074-.531-6.973 2.367-6.441 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f36d.svg b/browser/components/torpreferences/content/bridgemoji/1f36d.svg new file mode 100644 index 000000000000..e13447edec3c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f36d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M35.066 35.066c-.766.766-2.006.766-2.771 0L12.198 14.97c-.766-.766-.766-2.007 0-2.773.766-.765 2.007-.765 2.772 0l20.096 20.098c.766.764.766 2.006 0 2.771z"/><path fill="#DD2E44" d="M27.8 14.08c0 7.576-6.142 13.72-13.72 13.72C6.503 27.8.36 21.656.36 14.08.36 6.502 6.503.36 14.08.36c7.578 0 13.72 6.142 13.72 13.72z"/><path fill="#F4900C" d="M17.411 27.376c-1.459.092-2.938-.066-4.379-.503-3.156-.961-5.748-3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f37f.svg b/browser/components/torpreferences/content/bridgemoji/1f37f.svg new file mode 100644 index 000000000000..ddbff6d95f16 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f37f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M31.301 11H4.668c-1.657 0-3 1.343-3 3s1.343 3 3 3c.182 0 .357-.023.53-.053L5.182 17l.637 14.004C5.918 33.202 7.8 35 10 35h16c2.2 0 4.082-1.798 4.182-3.996L30.818 17l-.015-.05c.163.027.327.05.498.05 1.657 0 3-1.343 3-3s-1.344-3-3-3z"/><path d="M28.668 17v16.989c.863-.734 1.444-1.796 1.492-2.986L30.84 17h-2.172zm-6 0h3v18h-3zm-6 18V17h3v18zm-6-18h3v18h-3zM5.16 17l.68 14.003c.054 1.342.776 2.528 1.828 3.254V [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f380.svg b/browser/components/torpreferences/content/bridgemoji/1f380.svg new file mode 100644 index 000000000000..03d4a7510652 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f380.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M19.281 6.392c0 .405-2.37.405-2.37 0 0-.9-14.911-9.899-14.911-2.7v13.499c0 2.487 3.476 1.947 7.193.361-1.429 3.525-4.498 9.68-7.05 13.934-.229.382-.178.868.124 1.194.303.325.783.415 1.181.215l5.258-2.629c.441.726.931 1.868 1.376 2.906.333.778.678 1.582 1.024 2.275.144.287.417.488.734.54.053.009.107.013.16.013.263 0 .518-.104.707-.293 1.42-1.419 3.429-8.395 4.793-14.093 1.364 5.698 3.373 12.674 4.793 14.09 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f381.svg b/browser/components/torpreferences/content/bridgemoji/1f381.svg new file mode 100644 index 000000000000..1ab82981c057 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f381.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FDD888" d="M33 31c0 2.2-1.8 4-4 4H7c-2.2 0-4-1.8-4-4V14c0-2.2 1.8-4 4-4h22c2.2 0 4 1.8 4 4v17z"/><path fill="#FDD888" d="M36 11c0 2.2-1.8 4-4 4H4c-2.2 0-4-1.8-4-4s1.8-4 4-4h28c2.2 0 4 1.8 4 4z"/><path fill="#FCAB40" d="M3 15h30v2H3z"/><path fill="#DA2F47" d="M19 3h-2c-1.657 0-3 1.343-3 3v29h8V6c0-1.656-1.343-3-3-3z"/><path fill="#DA2F47" d="M16 7c1.1 0 1.263-.516.361-1.147L9.639 1.147c-.902-.631-2.085-.366-2.631.589 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f382.svg b/browser/components/torpreferences/content/bridgemoji/1f382.svg new file mode 100644 index 000000000000..35f9a002a9a7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f382.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#8899A6" cx="18" cy="26" rx="18" ry="10"/><ellipse fill="#CCD6DD" cx="18" cy="24.25" rx="18" ry="10"/><path fill="#DD2E44" d="M32.675 23.685c0 4.26-6.57 7.712-14.675 7.712S3.325 27.945 3.325 23.685c0-4.258 6.57-7.711 14.675-7.711 8.104 0 14.675 3.453 14.675 7.711z"/><path fill="#F4ABBA" d="M32.233 22.543c0 9.854-28.466 9.854-28.466 0v-8.759h28.466v8.759z"/><path fill="#DD2E44" d="M17.984 18.166c-8.984 0-14.218-4.1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f383.svg b/browser/components/torpreferences/content/bridgemoji/1f383.svg new file mode 100644 index 000000000000..591fc66a439d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f383.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M32.664 8.519C29.364 5.134 23.42 4.75 18 4.75S6.636 5.134 3.336 8.519C.582 11.344 0 15.751 0 19.791c0 5.263 1.982 11.311 6.357 14.244C9.364 36.051 13.95 35.871 18 35.871s8.636.18 11.643-1.836C34.018 31.101 36 25.054 36 19.791c0-4.04-.582-8.447-3.336-11.272z"/><path fill="#3F7123" d="M20.783 5.444c.069.42-.222.764-.647.764h-4.451c-.426 0-.717-.344-.647-.764l.745-4.472c.07-.421.476-.764.902-.764h2.451c.426 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f388.svg b/browser/components/torpreferences/content/bridgemoji/1f388.svg new file mode 100644 index 000000000000..6d431bc8568d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f388.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FCAB40" d="M27.999 36c-.448 0-.855-.303-.969-.758-.036-.136-.926-3.436-4.273-4.272C18.054 29.794 18 23.277 18 23c0-.552.447-.998.998-.999.554.034 1 .445 1.002.997 0 .053.054 5.234 3.242 6.032 4.53 1.132 5.682 5.54 5.727 5.728.135.535-.191 1.078-.727 1.212-.081.02-.163.03-.243.03z"/><path fill="#BB1A34" d="M18 25c-1.1 0-1.598-.805-1.105-1.789l1.211-2.422c.492-.984 1.297-.984 1.789 0l1.211 2.422C21.598 24.195 21.1 25 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f389.svg b/browser/components/torpreferences/content/bridgemoji/1f389.svg new file mode 100644 index 000000000000..a4b8305af6be --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f389.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M11.626 7.488c-.112.112-.197.247-.268.395l-.008-.008L.134 33.141l.011.011c-.208.403.14 1.223.853 1.937.713.713 1.533 1.061 1.936.853l.01.01L28.21 24.735l-.008-.009c.147-.07.282-.155.395-.269 1.562-1.562-.971-6.627-5.656-11.313-4.687-4.686-9.752-7.218-11.315-5.656z"/><path fill="#EA596E" d="M13 12L.416 32.506l-.282.635.011.011c-.208.403.14 1.223.853 1.937.232.232.473.408.709.557L17 17l-4-5z"/><path fill="# [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f38f.svg b/browser/components/torpreferences/content/bridgemoji/1f38f.svg new file mode 100644 index 000000000000..5457d1e8d5f1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f38f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M3 3h2v33H3z"/><circle fill="#F4900C" cx="4" cy="3" r="3"/><path fill="#66757F" d="M9 28H4c-.552 0-1-.447-1-1s.448-1 1-1h5c.552 0 1 .447 1 1s-.448 1-1 1z"/><path fill="#DD2E44" d="M31 27c0-2.209 6.209-6 4-6h-8.447c-1.203-1.464-4.595-3-7.053-3-2.459 0-3.23 1.536-3.435 3H10c-2.209 0-3 1.791-3 4v4c0 2.209.791 4 3 4h25c2.209 0-4-3.791-4-6z"/><circle fill="#FFF" cx="12" cy="25" r="3"/><circle cx="11.5" cy="24. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f392.svg b/browser/components/torpreferences/content/bridgemoji/1f392.svg new file mode 100644 index 000000000000..f44d568064f5 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f392.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M11.946 27C-1.036 7.876 7.524 2.752 9.114 2c.149-.07.242-.105.245-.107.418-.209.638-.675.529-1.125C9.779.318 9.372 0 8.903 0H4.847C1.054 0-4.282 11 5.859 28c.151.253 5.073 0 5.073 0 .559 0 1.324-.541 1.014-1zM31.229 0h-4c-.462 0-.863.318-.971.768-.107.45.109.916.521 1.125.004.002.095.037.242.107 1.568.752 10.01 5.876-2.792 25-.307.459.448 1 1 1 0 0 4.854.253 5.002 0 10-17 4.739-28 .998-28z" fill="#C1694F"/><path d="M6.8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f399.svg b/browser/components/torpreferences/content/bridgemoji/1f399.svg new file mode 100644 index 000000000000..07881e4aabe6 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f399.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M6 15h24v2H6zm15 15c0 2.208-.792 4-3 4-2.209 0-3-1.792-3-4s.791-2 3-2c2.208 0 3-.208 3 2z"/><path fill="#66757F" d="M18 31c-6.627 0-10 1.343-10 3v2h20v-2c0-1.657-3.373-3-10-3z"/><path fill="#99AAB5" d="M18 0c-4.971 0-9 4.029-9 9v7h18V9c0-4.971-4.029-9-9-9z"/><g fill="#292F33"><circle cx="15.5" cy="2.5" r="1.5"/><circle cx="20.5" cy="2.5" r="1.5"/><circle cx="17.5" cy="6.5" r="1.5"/><circle cx="22.5" cy="6 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f39f.svg b/browser/components/torpreferences/content/bridgemoji/1f39f.svg new file mode 100644 index 000000000000..984f27064942 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f39f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M26.751 8.007c1.364 1.365 3.364 1.708 5.046 1.032l3.613 3.611c.737.74.738 1.938-.004 2.68L15.319 35.405c-.743.739-1.94.737-2.681 0l-3.606-3.612c.672-1.684.33-3.682-1.032-5.047-1.367-1.365-3.364-1.707-5.047-1.032l-2.359-2.36c-.74-.737-.742-1.938 0-2.68L20.678.596c.739-.74 1.936-.741 2.679.002l2.361 2.361c-.677 1.683-.331 3.681 1.033 5.048z"/><path fill="#BE1931" d="M5.42 18.527l-2.149 2.148c-.739.739-.741 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a0.svg b/browser/components/torpreferences/content/bridgemoji/1f3a0.svg new file mode 100644 index 000000000000..35c75b697034 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3a0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M24.357 16.337s2.248-3.959 4.805-4.169c2.557-.21 3.929.934 4.144 3.432.287 3.334-.878 3.802-.033 7.53 0 0-3.546-2.414-2.421-6.07 1.172-3.806-4.81-3.095-3.835.316l-2.66-1.039z"/><path fill="#FFCC4D" d="M14.31 20.375c-.553 0-1 .448-1 1v13.563c0 .552.447 1 1 1s1-.448 1-1V21.375c0-.552-.448-1-1-1z"/><path fill="#F4900C" d="M15.31 25.77l-2 1.047v2.257l2-1.047zm-2 8.054l2-1.047V30.52l-2 1.047z"/><path fill="#88 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a1.svg b/browser/components/torpreferences/content/bridgemoji/1f3a1.svg new file mode 100644 index 000000000000..c35744ab8c82 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3a1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M30.806 15.347H19.201l8.205-8.205-.707-.707-8.205 8.205V3.036h-1V14.64L9.288 6.435l-.707.707 8.206 8.205H5.182v1h11.605l-8.206 8.206.707.707 8.206-8.206v11.605h1V17.055l8.205 8.205.707-.707-8.205-8.206h11.605z"/><path fill="#AAB8C2" d="M17.994 1.394c-7.982 0-14.453 6.471-14.453 14.453 0 7.982 6.471 14.453 14.453 14.453 7.983 0 14.454-6.471 14.454-14.453-.001-7.982-6.472-14.453-14.454-14.453zm0 26.683c-6.7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a2.svg b/browser/components/torpreferences/content/bridgemoji/1f3a2.svg new file mode 100644 index 000000000000..256d8afb7df4 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3a2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M32.612 16.645v-1h-4.083V8.333h-1v7.312h-3.11v1h3.11v4H18.55v-4.604h-1v4.604H12.8v1h4.75v4H8.612v-3.208h-1v3.208H2.205v1h5.407v4H2.205v1h5.407V36h1v-4.355h8.938V36h1v-4.355h8.979V36h1v-4.355h4.083v-1h-4.083v-4h4.083v-1h-4.083v-4h4.083v-1h-4.083v-4h4.083zm-24 14v-4h8.938v4H8.612zm18.917 0H18.55v-4h8.979v4zm0-5H18.55v-4h8.979v4z"/><path fill="#CCD6DD" d="M31.05 6.595h4V36h-4z"/><path fill="#8899A6" d="M34.0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a8.svg b/browser/components/torpreferences/content/bridgemoji/1f3a8.svg new file mode 100644 index 000000000000..3bfdea0c95bf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3a8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M18 3.143c-9.941 0-18 6.908-18 15.428 0 1.066.126 2.107.367 3.112C2.146 24.744 3.377 22.812 9 20c5.727-2.864 0 4-2 8-.615 1.23-.282 2.271.56 3.124C10.506 32.928 14.104 34 18 34c9.941 0 18-6.907 18-15.429 0-8.52-8.059-15.428-18-15.428zm2.849 24.447c-.395 1.346-2.46 1.924-4.613 1.291-2.153-.632-3.578-2.234-3.183-3.581.395-1.346 2.46-1.924 4.613-1.29 2.153.631 3.578 2.233 3.183 3.58z"/><circle fill="#5C913B" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ac.svg b/browser/components/torpreferences/content/bridgemoji/1f3ac.svg new file mode 100644 index 000000000000..3a326766110e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3ac.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3F7123" d="M35.845 32c0 2.2-1.8 4-4 4h-26c-2.2 0-4-1.8-4-4V19c0-2.2 1.8-4 4-4h26c2.2 0 4 1.8 4 4v13z"/><path fill="#3F7123" d="M1.845 15h34v6h-34z"/><path fill="#CCD6DD" d="M1.845 15h34v7h-34z"/><path fill="#292F33" d="M1.845 15h4l-4 7v-7zm11 0l-4 7h7l4-7h-7zm14 0l-4 7h7l4-7h-7z"/><path fill="#CCD6DD" d="M.155 8.207L33.148 0l1.69 6.792L1.845 15z"/><path fill="#292F33" d="M.155 8.207l5.572 5.827L1.845 15 .155 8.207zm [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3af.svg b/browser/components/torpreferences/content/bridgemoji/1f3af.svg new file mode 100644 index 000000000000..073817f2f316 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#DD2E44" cx="18" cy="18" r="18"/><circle fill="#FFF" cx="18" cy="18" r="13.5"/><circle fill="#DD2E44" cx="18" cy="18" r="10"/><circle fill="#FFF" cx="18" cy="18" r="6"/><circle fill="#DD2E44" cx="18" cy="18" r="3"/><path opacity=".2" d="M18.24 18.282l13.144 11.754s-2.647 3.376-7.89 5.109L17.579 18.42l.661-.138z"/><path fill="#FFAC33" d="M18.294 19c-.255 0-.509-.097-.704-.292-.389-.389-.389-1.018 0-1.407l.563-.563c. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b2.svg b/browser/components/torpreferences/content/bridgemoji/1f3b2.svg new file mode 100644 index 000000000000..408f2f9206f7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3b2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M4 11v.137c0-.042.011-.084.015-.126L4 11zm13 11.137c-.146-.067-.287-.145-.412-.246L4.565 12.245C4.188 11.94 4 11.539 4 11.137v12.238c0 2.042 1.093 2.484 1.093 2.484l11.574 9.099c.205.161.377.259.528.318-.114-.174-.195-.375-.195-.604V22.137zm-8.773.363c-.994 0-2.033-1.007-2.319-2.25-.287-1.242.287-2.249 1.28-2.249.994 0 2.033 1.007 2.319 2.249.287 1.243-.286 2.25-1.28 2.25zM13.81 30c-.994 0-2.033-1.008-2.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b6.svg b/browser/components/torpreferences/content/bridgemoji/1f3b6.svg new file mode 100644 index 000000000000..f13b3b8bfb9a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3b6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M14.182.168L7.818 1.469C7.368 1.561 7 2.012 7 2.471v15.857C6.387 18.12 5.712 18 5 18c-2.762 0-5 1.741-5 3.889 0 2.147 2.238 3.889 5 3.889 2.713 0 4.908-1.683 4.985-3.777H10V6.477l4.182-.855c.45-.092.818-.543.818-1.002V.835c0-.459-.368-.76-.818-.667zm21 4l-6.363 1.301c-.451.092-.819.543-.819 1.002v15.857c-.613-.209-1.288-.328-2-.328-2.762 0-5 1.741-5 3.889 0 2.147 2.238 3.889 5 3.889 2.713 0 4.908-1.683 4. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b7.svg b/browser/components/torpreferences/content/bridgemoji/1f3b7.svg new file mode 100644 index 000000000000..ed0f849e0d99 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3b7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-rule="evenodd" clip-rule="evenodd" fill="#FCAB40" d="M14 16L9 26s-1 2 1 2c1 0 2-2 2-2L26 7s2-4 8-1v2c-3-1-4 1-4 1L15 33s-2 3-7 3c-6 0-7-5-7-8 0-2 1-4 2-6s-2-6-2-6h13z"/><path fill="#FDCB58" d="M7.5 20C4.04 20 0 18.952 0 16c0-2.953 4.04-4 7.5-4s7.5 1.047 7.5 4c0 2.952-4.04 4-7.5 4z"/><circle fill="#CCD6DD" cx="19" cy="17" r="2"/><circle fill="#CCD6DD" cx="22" cy="13" r="2"/><circle fill="#CCD6DD" cx="25" cy="9" r="2"/> [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b8.svg b/browser/components/torpreferences/content/bridgemoji/1f3b8.svg new file mode 100644 index 000000000000..22074a11f3f0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3b8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BB1A34" d="M21.828 20.559C19.707 21.266 19 17.731 19 17.731s.965-.968.235-1.829c1.138-1.137.473-1.707.473-1.707-1.954-1.953-5.119-1.953-7.071 0-.246.246-.414.467-.553.678-.061.086-.115.174-.17.262l-.014.027c-.285.475-.491.982-.605 1.509-.156.319-.379.659-.779 1.06-1.414 1.414-4.949-.707-7.778 2.121-.029.029-.045.069-.069.104-.094.084-.193.158-.284.25-3.319 3.319-3.003 9.018.708 12.728 3.524 3.525 8.84 3.979 12.209 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ba.svg b/browser/components/torpreferences/content/bridgemoji/1f3ba.svg new file mode 100644 index 000000000000..454ab7818ac2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3ba.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FCAB40" d="M5.622 33.051l-2.674-2.673L23.337 9.987c3.344-3.343 1.337-8.021 2.007-8.689.666-.67 1.335-.002 1.335-.002l8.023 8.023c.668.668 0 1.336 0 1.336-.669.67-5.778-.908-8.692 2.006L5.622 33.051z"/><path fill="#CCD6DD" d="M5.457 33.891c.925-.925.925-2.424 0-3.35-.924-.924-2.424-.924-3.349 0l.087.087c-.371-.334-.938-.331-1.296.027-.369.368-.369.968 0 1.336L4.008 35.1c.37.369.968.369 1.337 0 .355-.356.36-.919.032-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3bb.svg b/browser/components/torpreferences/content/bridgemoji/1f3bb.svg new file mode 100644 index 000000000000..efb7d5da7eeb --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3bb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M23.912 12.087C22.219 10.394 20.318 9.5 18.415 9.5c-1.626 0-3.189.667-4.402 1.88-1.519 1.519-1.727 2.39-1.865 2.966-.071.295-.106.421-.255.57-.106.106-.155.256-.14.406.015.149.1.286.225.369.013.009.324.22.368.651.039.394-.13 1.08-1.16 2.11-.629.629-1.252.948-1.85.948-.981 0-1.649-.87-1.654-.877-.11-.15-.295-.226-.48-.197-.185.029-.337.159-.396.335-.221.663-.251.668-.535.709-.59.086-1.578.229-3.624 2.275C. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3be.svg b/browser/components/torpreferences/content/bridgemoji/1f3be.svg new file mode 100644 index 000000000000..323e5c462ecf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3be.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#77B255" cx="18" cy="18" r="18"/><path fill="#A6D388" d="M26 18c0 6.048 2.792 10.221 5.802 11.546C34.42 26.42 36 22.396 36 18c0-4.396-1.58-8.42-4.198-11.546C28.792 7.779 26 11.952 26 18z"/><path fill="#FFF" d="M27 18c0-6.048 1.792-10.221 4.802-11.546-.445-.531-.926-1.028-1.428-1.504C27.406 6.605 25 10.578 25 18c0 7.421 2.406 11.395 5.374 13.05.502-.476.984-.973 1.428-1.504C28.792 28.221 27 24.048 27 18z"/><path fil [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c0.svg b/browser/components/torpreferences/content/bridgemoji/1f3c0.svg new file mode 100644 index 000000000000..24693956f6f9 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3c0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F4900C" cx="18" cy="18" r="18"/><path fill="#231F20" d="M36 17h-8.981c.188-5.506 1.943-9.295 4.784-10.546-.445-.531-.926-1.027-1.428-1.504-2.83 1.578-5.145 5.273-5.354 12.049H19V0h-2v17h-6.021c-.208-6.776-2.523-10.471-5.353-12.049-.502.476-.984.972-1.428 1.503C7.039 7.705 8.793 11.494 8.981 17H0v2h8.981c-.188 5.506-1.942 9.295-4.783 10.546.445.531.926 1.027 1.428 1.504 2.831-1.578 5.145-5.273 5.353-12.05H17v17h2V1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c6.svg b/browser/components/torpreferences/content/bridgemoji/1f3c6.svg new file mode 100644 index 000000000000..00457c31ea30 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3c6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M5.123 5h6C12.227 5 13 4.896 13 6V4c0-1.104-.773-2-1.877-2h-8c-2 0-3.583 2.125-3 5 0 0 1.791 9.375 1.917 9.958C2.373 18.5 4.164 20 6.081 20h6.958c1.105 0-.039-1.896-.039-3v-2c0 1.104-.773 2-1.877 2h-4c-1.104 0-1.833-1.042-2-2S3.539 7.667 3.539 7.667C3.206 5.75 4.018 5 5.123 5zm25.812 0h-6C23.831 5 22 4.896 22 6V4c0-1.104 1.831-2 2.935-2h8c2 0 3.584 2.125 3 5 0 0-1.633 9.419-1.771 10-.354 1.5-2.042 3-4 3h- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c8.svg b/browser/components/torpreferences/content/bridgemoji/1f3c8.svg new file mode 100644 index 000000000000..4f5530d29087 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3c8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M7.754 7.754C4.068 11.44 1.64 16.37.843 21.335l13.822 13.822c4.965-.797 9.895-3.225 13.581-6.911s6.114-8.616 6.911-13.581L21.335.843C16.37 1.64 11.44 4.068 7.754 7.754zm25.615-5.123C30.707 1.152 27.634.51 24.472.564l10.965 10.964c.053-3.162-.589-6.235-2.068-8.897zM2.631 33.369c2.662 1.479 5.736 2.121 8.898 2.067L.564 24.472c-.054 3.161.588 6.235 2.067 8.897z"/><path fill="#E1E8ED" d="M22.828 11.757l-2.414 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d3.svg b/browser/components/torpreferences/content/bridgemoji/1f3d3.svg new file mode 100644 index 000000000000..6201ef5ae20b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3d3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M23.106 5.971C17.615.48 8.384-.521 3.307 4.557-1.77 9.634-.77 18.865 4.721 24.356c3.554 3.554 7.785 4.323 11.707 3.058l-.015.013.13-.052c.264-.088.527-.179.788-.284.698-.238 1.734-.558 2.942-.806 1.848-.38 3.541 1.606 4.955 3.021 1.414 1.414 4.242 5.657 4.949 6.364.707.707 1.414 0 2.122-.707l.707-.707.707-.707c.707-.708 1.414-1.415.707-2.122-.707-.707-4.95-3.535-6.364-4.949-1.414-1.414-3.4-3.107-3.021-4.9 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d4.svg b/browser/components/torpreferences/content/bridgemoji/1f3d4.svg new file mode 100644 index 000000000000..8b78f31e4c64 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3d4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19.083 35.5L12.25 12.292s-1.42.761-2.604 1.637c-.313.231-1.977 2.79-2.312 3.04-1.762 1.315-3.552 2.841-3.792 3.167C3.083 20.76 0 36 0 36l19.083-.5z"/><path fill="#4B545D" d="M32 35l-5.5-19.75L18 4.542l-5.373 4.193-.971 1.172C11.25 10.688 10 15.25 10 15.25L8.75 20 3.252 30.054.917 34.791 32 35z"/><path fill="#FFF" d="M3.252 30.054s7.873-10.783 7.894-11.388C11.167 18.062 10 15.25 10 15.25L8.75 20 3.252 30. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d5.svg b/browser/components/torpreferences/content/bridgemoji/1f3d5.svg new file mode 100644 index 000000000000..7a2fb80eddb7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3d5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M18 25.18C3.438 25.18 0 29.844 0 32s1.791 4 4 4h28c2.209 0 4-1.851 4-4s-3.438-6.82-18-6.82z"/><path fill="#662113" d="M28.804 28.15c0 1.531-1.242 2.08-2.773 2.08-1.531 0-2.773-.548-2.773-2.08l.693-6.239c0-1.531.548-1.387 2.08-1.387 1.531 0 2.08-.145 2.08 1.387l.693 6.239z"/><path fill="#5C913B" d="M34.868 19.717c-4.59-4.135-6.449-10.056-8.837-10.056s-4.247 5.921-8.836 10.056c-1.929 1.738-1.01 2.743 1.634 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3dd.svg b/browser/components/torpreferences/content/bridgemoji/1f3dd.svg new file mode 100644 index 000000000000..d66d8d477b43 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3dd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#3B88C3" cx="18" cy="30.54" rx="18" ry="5.36"/><path fill="#88C9F9" d="M33.812 28.538c0 1.616-2.5 2.587-14.482 2.587-10.925 0-13.612-.971-13.612-2.587s5.683-2.926 13.612-2.926 14.482 1.31 14.482 2.926z"/><path fill="#F4900C" d="M7 28.25c0-1 1-5 11-5 12 0 15 4 15 5s0 2-14 2c-12 0-12-1-12-2z"/><circle fill="#FFCC4D" cx="7" cy="6.25" r="5"/><circle fill="#FFAC33" cx="7" cy="6.25" r="4"/><path fill="#C1694F" d="M26.94 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3e1.svg b/browser/components/torpreferences/content/bridgemoji/1f3e1.svg new file mode 100644 index 000000000000..b44b7288b1d6 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3e1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M36 33.5c0 .828-.672 1.5-1.5 1.5h-33C.672 35 0 34.328 0 33.5S.672 32 1.5 32h33c.828 0 1.5.672 1.5 1.5z"/><path fill="#A0041E" d="M12.344 14.702h-2c-.276 0-.5-.224-.5-.5v-7c0-.276.224-.5.5-.5h2c.276 0 .5.224.5.5v7c0 .276-.224.5-.5.5z"/><path fill="#FFCC4D" d="M5.942 32c-.137-4.657-.506-8-.942-8-.435 0-.804 3.343-.941 8h1.883z"/><path fill="#77B255" d="M10 18.731C10 24.306 7.762 26 5 26c-2.761 0-5-1.694-5-7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ee.svg b/browser/components/torpreferences/content/bridgemoji/1f3ee.svg new file mode 100644 index 000000000000..a825f2b79b1c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3ee.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M29 34c0 1.104-.896 2-2 2H9c-1.104 0-2-.896-2-2V2c0-1.104.896-2 2-2h18c1.104 0 2 .896 2 2v32z"/><path fill="#BE1931" d="M6.699 32h22.602C33.383 28.7 35 23.658 35 18c0-5.658-1.616-10.7-5.698-14H6.698C2.615 7.3 1 12.342 1 18c0 5.658 1.616 10.7 5.699 14z"/><path d="M1.301 22c.108.682.245 1.35.415 2h32.568c.17-.65.307-1.318.415-2H1.301zm-.229-2h33.855c.049-.657.073-1.324.073-2H1c0 .676.024 1.343.072 2zm31.605 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f7.svg b/browser/components/torpreferences/content/bridgemoji/1f3f7.svg new file mode 100644 index 000000000000..60462664ebd6 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3f7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M32.017 20.181L17.345 5.746C16.687 5.087 15.823 5 14.96 5H4.883C3.029 5 2 6.029 2 7.883v10.082c0 .861.089 1.723.746 2.38L17.3 35.017c1.311 1.31 3.378 1.31 4.688 0l10.059-10.088c1.31-1.312 1.28-3.438-.03-4.748zm-23.596-8.76c-.585.585-1.533.585-2.118 0s-.586-1.533 0-2.118c.585-.586 1.533-.585 2.118 0 .585.586.586 1.533 0 2.118z"/><path fill="#D99E82" d="M9.952 7.772c-1.43-1.431-3.749-1.431-5.179 0-1.431 1.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f8.svg b/browser/components/torpreferences/content/bridgemoji/1f3f8.svg new file mode 100644 index 000000000000..143f8eaedb2d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3f8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M30.385 29c.382.382.382 1.002 0 1.385-.383.382-1.003.382-1.385 0L15.5 16.884c-.382-.382-.382-1.002 0-1.384.382-.382 1.001-.382 1.384 0L30.385 29z"/><path fill="#292F33" d="M35.561 33.439c.586.586.586 1.536 0 2.121-.585.586-1.535.586-2.121 0l-5.656-5.656c-.586-.586-.586-1.536 0-2.121.585-.586 1.535-.586 2.121 0l5.656 5.656z"/><g fill="#99AAB5"><path d="M2.447 5.2l.707-.707L15.178 16.51l-.707.707zm1.417-2.8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f9.svg b/browser/components/torpreferences/content/bridgemoji/1f3f9.svg new file mode 100644 index 000000000000..37922127ee96 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f3f9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M21.279 4.28c-9 0-10.5 1.5-13 4s-4 4-4 13c0 11.181-2 14-1 14s3-2 3-4-2-13 5-20h-.001c7-6.999 18-5 20-5s4-2 4-3-2.818 1-13.999 1z"/><path fill="#D99E82" d="M29.5 29.779c0 .276-.224.5-.5.5H3.78c-.276 0-.5-.224-.5-.5s.224-.5.5-.5H29c.276 0 .5.224.5.5zm.279-.279c-.277 0-.5-.225-.5-.5V3.779c0-.276.223-.5.5-.5.275 0 .5.224.5.5V29c0 .275-.224.5-.5.5z"/><path fill="#99AAB5" d="M0 0l2.793 8.52L4.93 4.955l3.52-2.09 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f40a.svg b/browser/components/torpreferences/content/bridgemoji/1f40a.svg new file mode 100644 index 000000000000..a9a6debcc432 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f40a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M19 32c0 1-1.723 3-3.334 3C14.056 35 14 33.657 14 32s1.306-3 2.916-3C18.527 29 19 30.343 19 32zm11 0c0 1-1.723 3-3.334 3C25.056 35 25 33.657 25 32s1.306-3 2.916-3C29.527 29 30 30.343 30 32z"/><path fill="#5C913B" d="M36 25c0-6-3.172-9.171-6-12-1-1-1.399.321-1 1 .508.862 3 8-2 8h-2c-5 0-6.172-1.172-9-4-4.5-4.5-7 0-9 0-6 0-7-1.812-7 2 0 3 3 4 6 4s3 1 5 4c1.071 1.606 2.836 3.211 5.023 4.155.232 1.119 2.774 3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f40c.svg b/browser/components/torpreferences/content/bridgemoji/1f40c.svg new file mode 100644 index 000000000000..2c63658289ae --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f40c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9266CC" d="M9 15.561c0-4 2-8 0-10s-3 2-2 2c1.414 0 2 2 1 5s1 3.999 1 3zm-3.875 0c0-4 2-8 0-10s-3 2-2 2c1.414 0 2 2 1 5s1 3.999 1 3z"/><path fill="#AA8DD8" d="M36 34.936c0 1-1 1-2 1H11c-5 0-7.272-3.09-8-6-1-4 2-11 0-12s-3-1-3-3 4.47-5.265 7-4c4 2 2.767 6.932 2 10-.88 3.522 1.115 3.594 5 5 4.94 1.787 12.32 4.44 14 5 3 1 8 3 8 4z"/><path fill="#FFCC4D" d="M10.925 24.935c2.887 1 3.849 9 13.472 9 6.377 0 8.66-5.479 8.66- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f40d.svg b/browser/components/torpreferences/content/bridgemoji/1f40d.svg new file mode 100644 index 000000000000..17531783ba93 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f40d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M11.84 7.634c-.719 0-2.295 2.243-3.567 1.029-.44-.419 1.818-1.278 1.727-2.017-.075-.607-2.842-1.52-1.875-2.099.967-.578 2.418.841 3.513.866 2.382.055 4.212-.853 4.238-.866.541-.274 1.195-.052 1.464.496.27.547.051 1.213-.488 1.486-.131.066-2.225 1.105-5.012 1.105z"/><path fill="#77B255" d="M27.818 36c-3.967 0-8.182-2.912-8.182-8.308 0-1.374-.89-1.661-1.637-1.661-.746 0-1.636.287-1.636 1.661 0 5.396-4.216 8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f417.svg b/browser/components/torpreferences/content/bridgemoji/1f417.svg new file mode 100644 index 000000000000..ad7a77db82d7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f417.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M33.359 13.254c1.434-3.462 2.06-11.534 1.262-12.004-.704-.416-5.641 1.084-8.34 3.205C23.883 2.909 21.085 2 18 2c-3.085 0-5.883.91-8.281 2.455C7.02 2.334 2.082.834 1.378 1.25c-.797.47-.171 8.543 1.263 12.004C1.59 15.818 1 18.623 1 21.479 1 31.468 2 36 18 36s17-4.532 17-14.521c0-2.856-.59-5.662-1.641-8.225z"/><path fill="#662113" d="M32.878 12.157c.929-3.252 1.081-7.708.524-8.037-.411-.243-2.78.633-5.009 1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f418.svg b/browser/components/torpreferences/content/bridgemoji/1f418.svg new file mode 100644 index 000000000000..fb9656cd18f0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f418.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M34.453 15.573c-.864-7.3-5.729-10.447-13.93-10.447-.391 0-.763.017-1.139.031-.013-.01-.022-.021-.035-.031C14.655 1.605 4.091 2.779 1.745 6.3c-3.255 4.883-1.174 22.3 0 24.646 1.173 2.35 4.694 3.521 5.868 2.35 1.174-1.176 0-1.176-1.173-3.521-.85-1.701-.466-5.859.255-8.471.028.168.068.322.1.486.39 2.871 1.993 7.412 1.993 9.744 0 3.564 2.102 4.107 4.694 4.107 2.593 0 4.695-.543 4.695-4.107 0-.24-.008-.463-.01 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f419.svg b/browser/components/torpreferences/content/bridgemoji/1f419.svg new file mode 100644 index 000000000000..d915a8fd2e6b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f419.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#553788" d="M10 12c3 5 0 10.692-3 9.692s-4 2-1 3 9.465-.465 13-4c1-1 2-1 2-1L10 12z"/><path fill="#553788" d="M26 12c-3 5 0 10.692 3 9.692s4 2 1 3-9.465-.465-13-4c-1-1-2-1-2-1L26 12z"/><path fill="#744EAA" d="M30.188 16c-3 5 0 10.692 3 9.692s4 2 1 3-9.465-.465-13-4c-1-1-2-1-2-1l11-7.692zM5.812 16c3 5 0 10.692-3 9.692s-4 2-1 3 9.465-.465 13-4c1-1 2-1 2-1L5.812 16z"/><path fill="#9266CC" d="M33.188 31.375c-2.729.91-6.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f41a.svg b/browser/components/torpreferences/content/bridgemoji/1f41a.svg new file mode 100644 index 000000000000..804ece8811a3 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f41a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M29.049 7.033c-.07-.07-.141-.126-.211-.188-1.08-1.087-2.497-1.564-4.008-1.373l-3.812.483c-.382-3.003-2.25-4.446-4.351-4.181l-4.24.536C12.075.767 11.011.034 9.827.185L5.033.79C3.71.958 2.773 2.438 2.94 4.097l.606 6.007c.152 1.501 1.425 2.591 2.403 2.693l.514 5.093c.258 2.553 2.509 4.365 4.117 4.38l.498 4.926c.164 1.622.928 3.027 1.917 4.063.23.339.471.656.737.922 4.423 4.423 12.183 5.064 16.607.64 4.42-4.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f41b.svg b/browser/components/torpreferences/content/bridgemoji/1f41b.svg new file mode 100644 index 000000000000..f8986dd7818b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f41b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8DD8" d="M7.415 4c1-1 .25-4-1.438-4s-1.562 2-.562 2 1 2 1 3 1-1 1-1zM3.232 5.72c1-1 .25-4-1.438-4s-1.562 2-.562 2 1 2 1 3 1-1 1-1z"/><path fill="#744EAA" d="M29.607 32.856c.189.808 1.227 2.28 2.032 2.091.806-.19 1.077-1.971.888-2.777-.189-.808-.998-1.307-1.804-1.117-.805.19-1.306.997-1.116 1.803zm-5.434.649c.003.83.681 2.498 1.509 2.495.828-.004 1.494-1.677 1.491-2.506-.003-.829-.677-1.497-1.505-1.495-.828.004-1.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f41d.svg b/browser/components/torpreferences/content/bridgemoji/1f41d.svg new file mode 100644 index 000000000000..31e78828044a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f41d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M27.816 23.464c.299-1.148.465-2.318.465-3.464 0-4.161-2.122-6.779-5.258-8.035.417-1.008.665-2.108.665-3.2 0-1.581-.495-2.498-1.315-3.032 1.091-.482 2.517-1.5 3.027-2.011.781-.781.94-1.889.354-2.475-.586-.586-1.693-.428-2.475.354-.611.611-1.948 2.53-2.223 3.619C20.172 5.025 19.126 5 18 5c-1.125 0-2.172.025-3.055.219-.275-1.089-1.612-3.007-2.223-3.619-.781-.781-1.889-.94-2.475-.354-.585.587-.427 1.694.354 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f41e.svg b/browser/components/torpreferences/content/bridgemoji/1f41e.svg new file mode 100644 index 000000000000..f314ca9a208e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f41e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M35 21H1c-.552 0-1-.447-1-1s.448-1 1-1h34c.553 0 1 .447 1 1s-.447 1-1 1zm-22.177-2l-.069-.002c-.092-.007-9.214-.714-10.734-8.235-.109-.542.241-1.069.782-1.178.543-.113 1.069.241 1.178.782 1.221 6.044 8.833 6.631 8.91 6.636.551.038.967.515.93 1.066-.036.527-.476.931-.997.931zM3 31c-.142 0-.286-.03-.423-.094-.5-.234-.716-.829-.482-1.33 3.166-6.77 11.038-7.721 11.372-7.758.548-.056 1.042.334 1.103.882.062.548-.332 1.043-.8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f41f.svg b/browser/components/torpreferences/content/bridgemoji/1f41f.svg new file mode 100644 index 000000000000..7d9ef4108b41 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f41f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M32.153 24c0-1 1.523-6.212 3.047-7.735 1.522-1.523 0-3.166-1.523-3.166-3.405 0-9.139 6.901-9.139 10.901 0 5 5.733 10.424 9.139 10.424 1.523 0 3.046-1.404 1.523-2.928C33.677 29.974 32.153 26 32.153 24z"/><path fill="#3B88C3" d="M9.021 14.384c0-3.046 1.497-6.093 3.02-6.093 4.569 0 13.322 4.823 14.845 12.439 1.524 7.616-17.865-6.346-17.865-6.346zm4.854 18.278c1.523 1.523 4.57 3.047 7.617 3.047 3.046 0-3.111- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f420.svg b/browser/components/torpreferences/content/bridgemoji/1f420.svg new file mode 100644 index 000000000000..ccc11c48d024 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f420.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M8.231 10c6-8 14-10 18-10 1 0 1 1 0 1s-6 2-7 9-11 0-11 0zm-1 18c4 3 13 8 18 8 3 0 2-1 1-1s-9-3-10-7-9 0-9 0z"/><path fill="#FFCC4D" d="M35 9c-1.611 0-4.059 2.972-5.268 6.294-1.475-5.62-6.166-10.739-12.945-10.739-8.273 0-12.061 10.216-14.524 14.479-.629 1.091-4.091 1.034-.989 3.103-3.103 2.068.449 2.243 1.222 3.103 2.625 2.92 8.997 6.205 14.291 6.205 5.655 0 11.12-3.786 12.863-8.958C30.828 25.896 33.353 29 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f422.svg b/browser/components/torpreferences/content/bridgemoji/1f422.svg new file mode 100644 index 000000000000..fe4b659ee0fc --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f422.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M9.842 19.922c0 9.842 6.575 9.673 5.158 10.078-7 2-8.803-7.618-9.464-7.618-2.378 0-5.536-.423-5.536-2.46C0 17.883 2.46 15 6.151 15c2.379 0 3.691 2.883 3.691 4.922zM36 28.638c0 1.104-3.518-.741-5 0-2 1-2-.896-2-2s1.343-1 3-1 4 1.895 4 3z"/><path fill="#77B255" d="M16.715 33.143c0 2.761-1.279 2.857-2.857 2.857S11 35.903 11 33.143c0-.489.085-1.029.234-1.587.69-2.59 2.754-5.556 4.052-5.556 1.578 0 1.429 4.382 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f425.svg b/browser/components/torpreferences/content/bridgemoji/1f425.svg new file mode 100644 index 000000000000..bcbd2181bb0a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f425.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M17.38 33.098c-.097-.18-.25-.302-.417-.391C15.366 31.001 16.5 29 16.5 29c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1s.447 1 1 1h1.108l-.222.12c-.486.263-.667.869-.404 1.355s.869.667 1.356.404l2.639-1.427c.485-.262.666-.868.403-1.354zM23.5 32h-2s0-3-1-4l-1-1c-1 0 0 1.447 0 2 0 0 1.135 2.001-.462 3.707-.168.089-.32.211-.418.391-.263.486-.082 1.093.404 1.355l2.639 1.427c.486.263 1.093.082 1.356-.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f426.svg b/browser/components/torpreferences/content/bridgemoji/1f426.svg new file mode 100644 index 000000000000..06d93a9162da --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f426.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M8.916 12.88c-.111 1.652 1.768 3.126-.712 2.959-2.48-.167-7.836-2.533-7.768-3.53s3.708-2.757 6.188-2.59c2.48.166 2.404 1.508 2.292 3.161zm20.122 16.049c-.202-.032-.392.015-.564.095-2.325.232-3.225-1.885-3.225-1.885-.439-.336-.981-2.009-1.589-1.215l.187 1.402c.187 1.402 2.57 3.224 2.57 3.224l-1.215 1.589c-.336.439-.252 1.066.187 1.402.439.336 1.066.252 1.402-.187l.673-.88-.039.249c-.087.546.285 1.058.831 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f428.svg b/browser/components/torpreferences/content/bridgemoji/1f428.svg new file mode 100644 index 000000000000..1da7190a6813 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f428.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M36 13.533C36 8.867 32.866 7 29 7c-1.621 0-3.285.354-4.676 1.027C22.523 6.798 20.405 6.062 18 6.062s-4.523.736-6.324 1.965C10.285 7.354 8.621 7 7 7c-3.866 0-7 1.867-7 6.533 0 3.844 2.128 6.417 5.038 7.206-.043.536-.068 1.073-.068 1.611 0 5.729 4.52 7.675 8.581 8.326C14.649 31.487 16.232 32 18 32s3.351-.513 4.449-1.323c4.062-.651 8.581-2.597 8.581-8.326 0-.538-.025-1.075-.068-1.611 2.91-.79 5.038-3.363 5.0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f42a.svg b/browser/components/torpreferences/content/bridgemoji/1f42a.svg new file mode 100644 index 000000000000..278e144ffd3d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f42a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M31.595 15.007c-1.75-3.623-5.934-9.053-9.531-9.053-4.071 0-8.228 7.259-10.071 10.378-.176.299-.321.578-.464.857-3.371-1.182-.536-6.631-.536-10.463 0-.957-.138-1.637-.44-2.119.489-.606.586-1.347.192-1.699-.413-.367-1.195-.163-1.745.456-.08.089-.129.186-.189.28-.424-.067-.903-.102-1.472-.102-.565 0-2.916.266-4.229.791C-.007 5.582.993 9 1.993 9h4c1 0 .756 2.31 0 4.726-.83 2.654-1.439 5.145-1 6.606.808 2.687 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f42c.svg b/browser/components/torpreferences/content/bridgemoji/1f42c.svg new file mode 100644 index 000000000000..ee782f2f20e2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f42c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4292E0" d="M30.584 7.854c.27-1.729 1.028-3.908 2.975-5.854.704-.704.25-2-1-2 0 0-6.061.007-9.893 3.327C21.663 3.115 20.625 3 19.559 3c-8 0-12 4-14 12-.444 1.778-.865 1.399-3 3-1.195.896-2.117 3 1 3 3 0 5 .954 9 1 3.629.042 9.504-3.229 11.087-1.292 2.211 2.706 1.396 5.438.597 6.666-2.904 3.396-5.939.541-8.685-.374-3-1-1 1 0 2s1.312 4 0 6 3 0 5-3c.011-.017.022-.028.032-.045C28.392 31.5 34.559 25.936 34.559 18c0-3.918- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f42d.svg b/browser/components/torpreferences/content/bridgemoji/1f42d.svg new file mode 100644 index 000000000000..91e126242bda --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f42d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#99AAB5" cx="8.5" cy="9.5" r="8.5"/><circle fill="#99AAB5" cx="27.5" cy="9.5" r="8.5"/><path fill="#F4ABBA" d="M13.812 10.031c0 3.228-2.617 5.844-5.844 5.844s-5.844-2.616-5.844-5.844c0-3.227 2.617-5.844 5.844-5.844s5.844 2.617 5.844 5.844zm20.063 0c0 3.228-2.617 5.844-5.844 5.844-3.227 0-5.844-2.616-5.844-5.844 0-3.227 2.617-5.844 5.844-5.844 3.227.001 5.844 2.617 5.844 5.844z"/><path fill="#99AAB5" d="M30 18c0 7.1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f42e.svg b/browser/components/torpreferences/content/bridgemoji/1f42e.svg new file mode 100644 index 000000000000..40fede032f58 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f42e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M4 8s-4 2-4 11c0 0 6-1 7-3 0 0 2-12.25-3-8zm27.995.043s4 2 4 11c0 0-6-.999-7-2.999 0 0-2-12.251 3-8.001z"/><path fill="#FFE8B6" d="M1 1c-1.01.99 1 8 5 9s4-5 3-5C5 5 3.042-1 1 1zm34.297 0c1.011.99-1 8-5 9s-4-5-3-5c4 0 5.959-6 8-4z"/><path fill="#CCD6DD" d="M21.976 31h-7.951C8.488 31 4 26.512 4 20.976v-8.951C4 6.488 8.488 2 14.025 2h7.951C27.512 2 32 6.488 32 12.025v8.951C32 26.512 27.512 31 21.976 31z"/><p [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f42f.svg b/browser/components/torpreferences/content/bridgemoji/1f42f.svg new file mode 100644 index 000000000000..5ecd980c5130 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f42f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="7" cy="6" r="6"/><circle fill="#FFCC4D" cx="18" cy="30" r="6"/><circle fill="#DD2E44" cx="18" cy="30" r="4"/><circle fill="#FFCC4D" cx="29" cy="6" r="6"/><circle fill="#E6AAAA" cx="7" cy="6" r="4"/><circle fill="#E6AAAA" cx="29" cy="6" r="4"/><path fill="#FFCC4D" d="M34 22c0 7-4.923 7-4.923 7H6.923S2 29 2 22C2 22 3.231 0 18 0c14.77 0 16 22 16 22z"/><path fill="#272B2B" d="M11 17s0-2 2-2 2 2 2 2v2s0 2-2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f430.svg b/browser/components/torpreferences/content/bridgemoji/1f430.svg new file mode 100644 index 000000000000..2f70f9669ff7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f430.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M33.799.005c-.467-.178-7.998 3.971-9.969 9.131-1.166 3.052-1.686 6.058-1.652 8.112C20.709 16.459 19.257 16 18 16s-2.709.458-4.178 1.249c.033-2.055-.486-5.061-1.652-8.112C10.2 3.977 2.668-.173 2.201.005c-.455.174 4.268 16.044 7.025 20.838C6.805 23.405 5 26.661 5 29.828c0 3.234 1.635 5.14 4 5.94 2.531.857 5-.94 9-.94s6.469 1.798 9 .94c2.365-.801 4-2.706 4-5.94 0-3.166-1.805-6.423-4.225-8.984C29.53 16.049 34 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f431.svg b/browser/components/torpreferences/content/bridgemoji/1f431.svg new file mode 100644 index 000000000000..cc75dcc68f5a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f431.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M32.348 13.999s3.445-8.812 1.651-11.998c-.604-1.073-8 1.998-10.723 5.442 0 0-2.586-.86-5.276-.86s-5.276.86-5.276.86C10.001 3.999 2.605.928 2.001 2.001.207 5.187 3.652 13.999 3.652 13.999c-.897 1.722-1.233 4.345-1.555 7.16-.354 3.086.35 5.546.658 6.089.35.617 2.123 2.605 4.484 4.306 3.587 2.583 8.967 3.445 10.761 3.445s7.174-.861 10.761-3.445c2.361-1.701 4.134-3.689 4.484-4.306.308-.543 1.012-3.003.659-6.0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f432.svg b/browser/components/torpreferences/content/bridgemoji/1f432.svg new file mode 100644 index 000000000000..1c1b4347daa1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f432.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35.125 13.344c0-1 .771-2.327.771-2.635 0-.656-1.553-.421-1.626-1.046-.209-1.794 1.887-3.318-1.745-3.312-1.352.002-.274-1.768-.274-2.725 0-.957-2.596-.145-3.552-.145-.957 0-.957-2.87-1.913-2.87-2.87 0-3.827 2.87-4.783 2.87-.957 0-1.744-3.621-2.87-2.87-2.87 1.913-3.826 7.653-3.826 7.653s4.783-3.826 10.522-2.87c5.345.891 4.79 10.821 5.641 16.888L24.609 36h3.359c.344-1.5 1.939-.529 2.375-1.688.381-1.016-.67- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f433.svg b/browser/components/torpreferences/content/bridgemoji/1f433.svg new file mode 100644 index 000000000000..f00ea1033e02 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f433.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M32 12c2.122-2.122 5 14.312-3 21-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-7.18 0-8-4.925-8-11s.82-11 8-11c6 0 10 2 13 3.996 4.977 3.312 5.992 3.861 8 2.004 3.213-2.97 1-6 3-8z"/><path fill="#55ACEE" d="M34.003 23c-.465 3.727-2.041 7.523-5.003 10-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-4.035 0-6.062-1.555-7.062-3.996C.157 30.102 4 33 15 33c14 0 17-5 19.003-10z"/><path fill="#3B [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f434.svg b/browser/components/torpreferences/content/bridgemoji/1f434.svg new file mode 100644 index 000000000000..9aa7d69356ae --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f434.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M23.283 23.275s1.374 1.635 2.733 10.047c.143.883.201 1.775.217 2.678H36V7.448C31.613 3.975 25.601 3.259 18.322 5.69c0 0-5.408-3-6.147-3.739-.719-.72-1.857-1.556-1.235.35.364 1.112.764 2.373 2.358 4.862-3.436 2.036-4.513 4.68-8.558 13.341C1.652 27.12.08 29.269.937 31.797c1.13 3.337 5.316 5.595 8.844 3.021 1.919-1.4 2.246-3.913 6.225-6.223 3.653-.065 7.277-1.604 7.277-5.32z"/><path fill="#292F33" d="M36 6.0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f435.svg b/browser/components/torpreferences/content/bridgemoji/1f435.svg new file mode 100644 index 000000000000..ee6c57cf9e41 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f435.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse transform="rotate(-14.999 5.05 17.456)" fill="#D79E84" cx="5.05" cy="17.455" rx="3.818" ry="5.455"/><ellipse transform="rotate(-75.001 31.05 17.455)" fill="#D79E84" cx="31.05" cy="17.455" rx="5.455" ry="3.818"/><path fill="#BF6952" d="M19.018 36h-2.036C10.264 36 3.75 30.848 3.75 23.636c0-4.121 1.527-6.182 1.527-6.182s-.509-2.061-.509-4.121C4.768 7.152 11.282 2 18 2c6.718 0 13.232 6.182 13.232 11.333 0 2.061-.509 4.121-. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f436.svg b/browser/components/torpreferences/content/bridgemoji/1f436.svg new file mode 100644 index 000000000000..8b2e685804d9 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f436.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M15 27v6s0 3 3 3 3-3 3-3v-6h-6z"/><path fill="#BE1931" d="M15 33l.001.037c1.041-.035 2.016-.274 2.632-1.286.171-.281.563-.281.735 0 .616 1.011 1.591 1.251 2.632 1.286V27h-6v6z"/><path fill="#D99E82" d="M31.954 21.619c0 6.276-5 6.276-5 6.276h-18s-5 0-5-6.276c0-6.724 5-18.619 14-18.619s14 12.895 14 18.619z"/><path fill="#F4C7B5" d="M18 20c-7 0-10 3.527-10 6.395 0 3.037 2.462 5.5 5.5 5.5 1.605 0 3.042-.664 4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f437.svg b/browser/components/torpreferences/content/bridgemoji/1f437.svg new file mode 100644 index 000000000000..49175ea42aa2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f437.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4ABBA" d="M34.193 13.329c.387-.371.733-.795 1.019-1.28 1.686-2.854.27-10.292-.592-10.8-.695-.411-5.529 1.05-8.246 3.132C23.876 2.884 21.031 2 18 2c-3.021 0-5.856.879-8.349 2.367C6.93 2.293 2.119.839 1.424 1.249c-.861.508-2.276 7.947-.592 10.8.278.471.615.884.989 1.249C.666 15.85 0 18.64 0 21.479 0 31.468 8.011 34 18 34s18-2.532 18-12.521c0-2.828-.66-5.606-1.807-8.15z"/><path fill="#EA596E" d="M7.398 5.965c-2.166-1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f43a.svg b/browser/components/torpreferences/content/bridgemoji/1f43a.svg new file mode 100644 index 000000000000..af402057ef41 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f43a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M14.858 9.497c.475 2.326-.182 4.236-2.921 4.638-2.741.403-6.7 3.898-8.848-1.798C1.844 9.038 1.092 2.234 2.628 2.009c1.537-.226 11.756 5.162 12.23 7.488z"/><path fill="#CCD6DD" d="M12.784 9.851c.865 1.392-2.205 3.833-3.844 4.568-1.639.736-2.915-.66-4.173-4.1-.55-1.503-1.234-5.532-.634-5.802.599-.268 7.785 3.942 8.651 5.334z"/><path fill="#66757F" d="M21.372 9.497c-.458 2.326.176 4.236 2.818 4.638 2.644.403 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f43b.svg b/browser/components/torpreferences/content/bridgemoji/1f43b.svg new file mode 100644 index 000000000000..50224417b0ce --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f43b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#C1694F" cx="7" cy="6" r="6"/><circle fill="#C1694F" cx="29" cy="6" r="6"/><circle fill="#E6AAAA" cx="7" cy="6" r="4"/><circle fill="#E6AAAA" cx="29" cy="6" r="4"/><path fill="#C1694F" d="M35 22S33.692 0 18 0 1 22 1 22c0 5.872 4.499 10.323 12.216 11.61C14.311 35.06 16.044 36 18 36s3.688-.94 4.784-2.39C30.501 32.323 35 27.872 35 22z"/><circle fill="#DD2E44" cx="18" cy="30" r="4"/><path fill="#D99E82" d="M18 20S7 23. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f43f.svg b/browser/components/torpreferences/content/bridgemoji/1f43f.svg new file mode 100644 index 000000000000..367687490170 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f43f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AD743D" d="M35.432 22.773c-.195.858-.638 1.773-1.022 2.159 1.399-4.418 1.399-9.111-2.25-11.167.112 1.107-.11 1.691-.265 2.153-.21-2.219-.578-3.744-2.158-4.927-1.82-1.363-2.611-.452-.736 3.765 2.2 4.945 1.475 8.603.827 11.216-.038.154-.08.29-.12.439.804-5.765-.989-11.722-6.825-14.915-2.989-1.636-5.211-1.852-5.329-3.037-.135-1.377-1.218-3.698-3.811-5.327.444-1.309-.485-2.787-1.117-2.841-.631-.054-2.024 1.039-2.16 2.52 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f441.svg b/browser/components/torpreferences/content/bridgemoji/1f441.svg new file mode 100644 index 000000000000..bd1a45e4e6e4 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f441.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M35.059 18c0 3.304-7.642 11-17.067 11C8.566 29 .925 22.249.925 18c0-3.314 34.134-3.314 34.134 0z"/><path fill="#292F33" d="M35.059 18H.925c0-3.313 7.642-11 17.067-11s17.067 7.686 17.067 11z"/><path fill="#F5F8FA" d="M33.817 18c0 2.904-7.087 9.667-15.826 9.667-8.74 0-15.825-5.935-15.825-9.667 0-2.912 7.085-9.666 15.825-9.666C26.73 8.333 33.817 15.088 33.817 18z"/><circle fill="#8B5E3C" cx="18" cy="18" r="8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f451.svg b/browser/components/torpreferences/content/bridgemoji/1f451.svg new file mode 100644 index 000000000000..4db8d2bc357e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f451.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M14.174 17.075L6.75 7.594l-3.722 9.481z"/><path fill="#F4900C" d="M17.938 5.534l-6.563 12.389H24.5z"/><path fill="#F4900C" d="M21.826 17.075l7.424-9.481 3.722 9.481z"/><path fill="#FFCC4D" d="M28.669 15.19L23.887 3.523l-5.88 11.668-.007.003-.007-.004-5.88-11.668L7.331 15.19C4.197 10.833 1.28 8.042 1.28 8.042S3 20.75 3 33h30c0-12.25 1.72-24.958 1.72-24.958s-2.917 2.791-6.051 7.148z"/><circle fill="#5C913B" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f455.svg b/browser/components/torpreferences/content/bridgemoji/1f455.svg new file mode 100644 index 000000000000..1db482028323 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f455.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M11 2C8 2 0 4 0 6s1 7 2 9 8 0 9-1 2-12 0-12z"/><path fill="#55ACEE" d="M1 4.717C.352 5.088 0 5.565 0 6c0 2 1 7 2 9 .281.562 1.039.777 2 .85C3 13 2 9 1 4.717z"/><path fill="#3B88C3" d="M25 2c3 0 11 2 11 4s-1 7-2 9-8 0-9-1-2-12 0-12z"/><path fill="#55ACEE" d="M35 4.717c.648.371 1 .848 1 1.283 0 2-1 7-2 9-.281.562-1.039.777-2 .85C33 13 34 9 35 4.717z"/><path fill="#3B88C3" d="M25 2h-1.068C23.515 3.695 21.021 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f457.svg b/browser/components/torpreferences/content/bridgemoji/1f457.svg new file mode 100644 index 000000000000..29cc45c742cf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f457.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M22.42 11.847L26 2s-.398.002-1 .034V0h-2v2.219c-2.271.302-5 1.028-5 2.781 0-1.753-2.729-2.479-5-2.781V0h-2v2.034C10.398 2.002 10 2 10 2l3.581 9.847L1 25.643S7 36 18 36s17-10.357 17-10.357L22.42 11.847z"/><path fill="#BBDDF5" d="M13 11h10v2H13z"/><path fill="#3B88C3" d="M15 13s-6.734 8.106-5.051 9.006C11.633 22.907 15 13 15 13zm6.096 0s6.734 8.105 5.051 9.007c-1.684.9-5.051-9.007-5.051-9.007zM18 13s-2 11 0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f45f.svg b/browser/components/torpreferences/content/bridgemoji/1f45f.svg new file mode 100644 index 000000000000..f0c998c63135 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f45f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M24.161 10.166l-.676-2.034c-.134-.302-.49-.43-.781-.275-.918.487-2.944 1.318-3.684 1.575 1.419.505 3.499 1.503 4.511 1.396.384-.04.787-.308.63-.662zm10.21 24.574c-.399.225-6.509 1.692-18.621-8.906C12.083 22.625 1.2 12.879 1.341 12.547c0 0-.329.36-.602.736-.197.271-.319.559-.274.848.31 1.967 3.112 3.819 6.962 6.781l.549.422.363.279c.588.452 2.316 1.815 4.329 3.403 2.753 2.171 8.284 6.49 8.445 6.61 2.12 1.5 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f47d.svg b/browser/components/torpreferences/content/bridgemoji/1f47d.svg new file mode 100644 index 000000000000..f6e98d1c1403 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f47d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M35 17c0 9.389-13.223 19-17 19-3.778 0-17-9.611-17-19S8.611 0 18 0s17 7.611 17 17z"/><path fill="#292F33" d="M13.503 14.845c3.124 3.124 4.39 6.923 2.828 8.485-1.562 1.562-5.361.297-8.485-2.828-3.125-3.124-4.391-6.923-2.828-8.485s5.361-.296 8.485 2.828zm8.994 0c-3.124 3.124-4.39 6.923-2.828 8.485 1.562 1.562 5.361.297 8.485-2.828 3.125-3.125 4.391-6.923 2.828-8.485-1.562-1.562-5.361-.297-8.485 2.828zM18 31 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f484.svg b/browser/components/torpreferences/content/bridgemoji/1f484.svg new file mode 100644 index 000000000000..af7e86169328 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f484.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M16.522.232c2.246 0 4.832 1.375 6.703 3.249C25.098 5.355 27 7.408 27 9.479v17.204l-15.974.031V9.582c-.093-1.506 1.075-9.35 5.496-9.35"/><path fill="#DD2E44" d="M19 11.378V28c0 1.104.896 0 2 0v2c1.104 0 2-.896 2-2V12.333c-1.258-.104-2.65-.262-4-.955z"/><path fill="#F4ABBA" d="M22.072 3.455c2.664 2.391 4.277 5.236 2.961 6.699-1.314 1.463-5.06.991-7.721-1.4-2.661-2.39-3.753-5.516-2.439-6.979 1.316-1.463 4.53 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f488.svg b/browser/components/torpreferences/content/bridgemoji/1f488.svg new file mode 100644 index 000000000000..33ed332874dd --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f488.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#CCD6DD" cx="18" cy="6" r="6"/><path fill="#FFF" d="M11 12h14v21H11z"/><path fill="#DD2E44" d="M11 28.487L20.251 33H25v-2.134l-14-6.83z"/><path fill="#55ACEE" d="M11 19.585l14 6.83v-4.45l-14-6.831z"/><path fill="#DD2E44" d="M13.697 12L25 17.514V12z"/><path fill="#99AAB5" d="M27 11c0 1.104-.896 2-2 2H11c-1.104 0-2-.896-2-2s.896-2 2-2h14c1.104 0 2 .896 2 2zm0 23c0 1.104-.896 2-2 2H11c-1.104 0-2-.896-2-2s.896-2 2-2h14 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f48d.svg b/browser/components/torpreferences/content/bridgemoji/1f48d.svg new file mode 100644 index 000000000000..0834165960a7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f48d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9AAAB4" d="M18 12c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm0 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"/><path fill="#5DADEC" d="M29 5l-4-5H11L7 5l11 9z"/><path fill="#8CCAF7" d="M29 5l-4-5H11L7 5h11z"/><path fill="#5DADEC" d="M29 5l-4-5h-7v5h1z"/><path fill="#8CCAF7" d="M18 5h11l-11 9z"/><path fill="#9AAAB4" d="M25 13c0 1.657-1.343 3-3 3h-8c-1.657 0-3-1.343-3-3s1.343- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f48e.svg b/browser/components/torpreferences/content/bridgemoji/1f48e.svg new file mode 100644 index 000000000000..a379f7195f97 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f48e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BDDDF4" d="M13 3H7l-7 9h10z"/><path fill="#5DADEC" d="M36 12l-7-9h-6l3 9z"/><path fill="#4289C1" d="M26 12h10L18 33z"/><path fill="#8CCAF7" d="M10 12H0l18 21zm3-9l-3 9h16l-3-9z"/><path fill="#5DADEC" d="M18 33l-8-21h16z"/></svg> \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f490.svg b/browser/components/torpreferences/content/bridgemoji/1f490.svg new file mode 100644 index 000000000000..f080ef7f1593 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f490.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35.01 30.967c-1.385-2.226-3.34-5.001-5.265-7.888-5.141-8.772-1.513-18.411-2.893-21.511-.56-1.259-3.879.966-5.555 4.563-.356-.106-.747-.156-1.17-.148.155-2.397.293-4.31-.193-5.403-.71-1.599-5.867 2.418-6.463 7.729-1.848 1.006-3.223 1.957-3.223 1.957s-.95 1.375-1.954 3.223c-5.312.594-9.331 5.753-7.732 6.464 1.097.488 3.015.349 5.421.192-.006.42.046.807.154 1.159-3.61 1.674-5.848 5.006-4.586 5.567 3.282 1.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4a1.svg b/browser/components/torpreferences/content/bridgemoji/1f4a1.svg new file mode 100644 index 000000000000..88b62e387aea --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4a1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M29 11.06c0 6.439-5 7.439-5 13.44 0 3.098-3.123 3.359-5.5 3.359-2.053 0-6.586-.779-6.586-3.361C11.914 18.5 7 17.5 7 11.06 7 5.029 12.285.14 18.083.14 23.883.14 29 5.029 29 11.06z"/><path fill="#CCD6DD" d="M22.167 32.5c0 .828-2.234 2.5-4.167 2.5-1.933 0-4.167-1.672-4.167-2.5 0-.828 2.233-.5 4.167-.5 1.933 0 4.167-.328 4.167.5z"/><path fill="#FFCC4D" d="M22.707 10.293c-.391-.391-1.023-.391-1.414 0L18 13.586 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4a7.svg b/browser/components/torpreferences/content/bridgemoji/1f4a7.svg new file mode 100644 index 000000000000..3116ec31793c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4a7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M28.344 17.768L18.148 1.09 8.7 17.654c-2.2 3.51-2.392 8.074-.081 11.854 3.285 5.373 10.363 7.098 15.811 3.857 5.446-3.24 7.199-10.22 3.914-15.597z"/></svg> \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4b3.svg b/browser/components/torpreferences/content/bridgemoji/1f4b3.svg new file mode 100644 index 000000000000..97641af46a3e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4b3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9s0-4-4-4H4z"/><path fill="#292F33" d="M0 10h36v5H0z"/><path fill="#F4F7F9" d="M4 19h28v6H4z"/><path fill="#8899A6" d="M19 24c-1.703 0-2.341-1.21-2.469-1.801-.547.041-1.08.303-1.805.764C13.961 23.449 13.094 24 12 24c-1.197 0-1.924-.675-2-2-.003-.056.038-.188.021-.188-1.858 0-3.202 1.761-3.215 1.779-.195.267-.499.409-.806.409-.206 0-.41 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4bf.svg b/browser/components/torpreferences/content/bridgemoji/1f4bf.svg new file mode 100644 index 000000000000..6824a06417d6 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4bf.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18zm-18-3c-1.657 0-3 1.343-3 3s1.343 3 3 3 3-1.343 3-3-1.343-3-3-3z"/><path fill="#CCD6DD" d="M13.288 17.476c.122-1.104.598-2.101 1.343-2.846L6.686 6.686C4.182 9.19 2.51 12.521 2.102 16.233l11.186 1.243zm9.425 1.048c-.122 1.104-.598 2.101-1.343 2.846l7.944 7.944c2.504-2.504 4.176-5.835 4.584-9.547l-11.185-1.243z"/><path fill="#F5F8FA" d= [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4cc.svg b/browser/components/torpreferences/content/bridgemoji/1f4cc.svg new file mode 100644 index 000000000000..2ab6da3e1472 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4cc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M23.651 23.297L12.702 12.348l9.386-7.821 9.385 9.385z"/><path fill="#DD2E44" d="M34.6 13.912c-1.727 1.729-4.528 1.729-6.255 0l-6.257-6.256c-1.729-1.727-1.729-4.53 0-6.258 1.726-1.727 4.528-1.727 6.257 0L34.6 7.656c1.728 1.727 1.728 4.529 0 6.256z"/><path fill="#99AAB5" d="M14 17.823S-.593 35.029.188 35.813C.97 36.596 18.177 22 18.177 22L14 17.823z"/><path fill="#DD2E44" d="M25.215 27.991c-1.726 1.729-4.52 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4ce.svg b/browser/components/torpreferences/content/bridgemoji/1f4ce.svg new file mode 100644 index 000000000000..284cf6674b65 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4ce.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M35.354 25.254c.217-2.391-.513-4.558-2.057-6.102L17.033 2.89c-.391-.391-1.024-.391-1.414 0-.391.391-.391 1.024 0 1.414l16.264 16.263c1.116 1.117 1.642 2.717 1.479 4.506-.159 1.748-.957 3.456-2.188 4.686-1.23 1.23-2.938 2.027-4.685 2.187-1.781.161-3.39-.362-4.506-1.479L3.598 12.082c-.98-.98-1.059-2.204-.953-3.058.15-1.196.755-2.401 1.66-3.307 1.7-1.7 4.616-2.453 6.364-.707l14.85 14.849c1.119 1.12.026 2.803 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4d5.svg b/browser/components/torpreferences/content/bridgemoji/1f4d5.svg new file mode 100644 index 000000000000..701ff017c504 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4d5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M35 26c0 2.209-1.791 4-4 4H5c-2.209 0-4-1.791-4-4V6.313C1 4.104 6.791 0 9 0h20.625C32.719 0 35 2.312 35 5.375V26z"/><path fill="#CCD6DD" d="M33 30c0 2.209-1.791 4-4 4H7c-2.209 0-4-1.791-4-4V6c0-4.119-.021-4 5-4h21c2.209 0 4 1.791 4 4v24z"/><path fill="#E1E8ED" d="M31 31c0 1.657-1.343 3-3 3H4c-1.657 0-3-1.343-3-3V7c0-1.657 1.343-3 3-3h24c1.657 0 3 1.343 3 3v24z"/><path fill="#BE1931" d="M31 32c0 2.209-1.79 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4e1.svg b/browser/components/torpreferences/content/bridgemoji/1f4e1.svg new file mode 100644 index 000000000000..dcb02946d303 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4e1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.746 21.521c1.668 0 7.43 4.345 7.427 9.701.003 5.358-14.853 5.358-14.854-.001.001-5.356 5.759-9.7 7.427-9.7z"/><path fill="#CCD6DD" d="M8.541 25.182c8.839 8.84 17.337 5.163 20.033 2.469 2.695-2.696-.158-9.916-6.371-16.129C15.988 5.308 8.767 2.455 6.072 5.15 3.377 7.845-.299 16.343 8.541 25.182z"/><path fill="#66757F" d="M12.443 21.278c6.214 6.214 13.434 9.066 16.13 6.372 2.695-2.696-.158-9.916-6.371-16 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4e2.svg b/browser/components/torpreferences/content/bridgemoji/1f4e2.svg new file mode 100644 index 000000000000..8bd0c94fb602 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4e2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M12.908 30.75c-.276 2.209-2.291 3-4.5 3s-3.776-1.791-3.5-4l1-9c.276-2.209 2.291-4 4.5-4s6.468 0 3.5 4-1 10-1 10z"/><path fill="#CCD6DD" d="M35.825 14.75c0 6.902-1.544 12.5-3.45 12.5-1.905 0-20.45-5.598-20.45-12.5 0-6.903 18.545-12.5 20.45-12.5 1.906 0 3.45 5.597 3.45 12.5z"/><ellipse fill="#66757F" cx="32.375" cy="14.75" rx="3.45" ry="12.5"/><path fill="#DD2E44" d="M17.925 21.75l-14-1c-5 0-5-12 0-12l14-1c [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f4fb.svg b/browser/components/torpreferences/content/bridgemoji/1f4fb.svg new file mode 100644 index 000000000000..33808ad72ba8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f4fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M2.697 12.389c-.391.391-.391 1.023 0 1.414s1.023.391 1.414 0l9.192-9.192c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0l-9.192 9.192z"/><path fill="#99AAB5" d="M36 32c0 4-4 4-4 4H4s-4 0-4-4V14s0-4 4-4h28c4 0 4 4 4 4v18z"/><path fill="#292F33" d="M15.561 3.061c-.391.391-1.023.391-1.414 0l-.707-.707c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l.707.707c.39.39.39 1.023 0 1.414z"/><circle fill="#292F33" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f50b.svg b/browser/components/torpreferences/content/bridgemoji/1f50b.svg new file mode 100644 index 000000000000..66d420fc301e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f50b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M24 4c0 2.209-1.791 4-4 4h-4c-2.209 0-4-1.791-4-4s1.791-4 4-4h4c2.209 0 4 1.791 4 4z"/><path fill="#E1E8ED" d="M30 32c0 2.209-1.791 4-4 4H10c-2.209 0-4-1.791-4-4V8c0-2.209 1.791-4 4-4h16c2.209 0 4 1.791 4 4v24z"/><path fill="#77B255" d="M6 8h24v24H6z"/><path fill="#F5F8FA" d="M23 14h-3v-3c0-.552-.447-1-1-1h-2c-.552 0-1 .448-1 1v3h-3c-.553 0-1 .448-1 1v2c0 .553.447 1 1 1h3v3c0 .553.448 1 1 1h2c.553 0 1-.44 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f511.svg b/browser/components/torpreferences/content/bridgemoji/1f511.svg new file mode 100644 index 000000000000..7b4dc2a73dc7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f511.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M32.614 3.414C28.31-.89 21.332-.89 17.027 3.414c-3.391 3.392-4.098 8.439-2.144 12.535l-3.916 3.915c-.64.641-.841 1.543-.625 2.359l-1.973 1.972c-.479-.48-1.252-.48-1.731 0l-1.731 1.732c-.479.479-.479 1.253 0 1.732l-.867.864c-.479-.478-1.253-.478-1.731 0l-.866.867c-.479.479-.479 1.253 0 1.732.015.016.036.02.051.033-.794 1.189-.668 2.812.382 3.863 1.195 1.195 3.134 1.195 4.329 0L20.08 21.144c4.097 1.955 9.14 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f525.svg b/browser/components/torpreferences/content/bridgemoji/1f525.svg new file mode 100644 index 000000000000..e7dee6dd270b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f525.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 19c0-2.062-.367-4.039-1.04-5.868-.46 5.389-3.333 8.157-6.335 6.868-2.812-1.208-.917-5.917-.777-8.164.236-3.809-.012-8.169-6.931-11.794 2.875 5.5.333 8.917-2.333 9.125-2.958.231-5.667-2.542-4.667-7.042-3.238 2.386-3.332 6.402-2.333 9 1.042 2.708-.042 4.958-2.583 5.208-2.84.28-4.418-3.041-2.963-8.333C2.52 10.965 1 14.805 1 19c0 9.389 7.611 17 17 17s17-7.611 17-17z"/><path fill="#FFCC4D" d="M28.394 23.99 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f526.svg b/browser/components/torpreferences/content/bridgemoji/1f526.svg new file mode 100644 index 000000000000..1aff8ae2c0d7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f526.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M23 17l1-1s1-1 2 0l2 2s1 1 0 2l-1 1-4-4z"/><path fill="#8899A6" d="M34.879 27.879c1.166 1.166 1.166 3.076 0 4.242l-2.758 2.758c-1.166 1.166-3.076 1.166-4.242 0L9.121 16.121c-1.167-1.166-1.167-3.076 0-4.242l2.758-2.758c1.167-1.167 3.076-1.167 4.242 0l18.758 18.758z"/><path fill="#66757F" d="M20.879 10.879c1.166 1.167 1.166 3.076 0 4.242l-5.758 5.758c-1.167 1.166-3.076 1.166-4.242 0L6 16s-1-1 0-2l8-8c1-1 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f52c.svg b/browser/components/torpreferences/content/bridgemoji/1f52c.svg new file mode 100644 index 000000000000..e910ee894e4a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f52c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#66757F"><path d="M19.78 21.345l-6.341-6.342-.389 4.38 2.35 2.351z"/><path d="M15.4 22.233c-.132 0-.259-.053-.354-.146l-2.351-2.351c-.104-.104-.158-.25-.145-.397l.389-4.38c.017-.193.145-.359.327-.425.182-.067.388-.021.524.116l6.341 6.342c.138.138.183.342.116.524s-.232.31-.426.327l-4.379.389-.042.001zm-1.832-3.039l2.021 2.021 3.081-.273-4.828-4.828-.274 3.08z"/></g><path fill="#8899A6" d="M31 32h-3c0-3.314-2.63-6-5.875-6 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f52d.svg b/browser/components/torpreferences/content/bridgemoji/1f52d.svg new file mode 100644 index 000000000000..113c0330a8f3 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f52d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#9AAAB4" cx="17" cy="20" r="3"/><path fill="#DA2F47" d="M19.235 17.059c-.259.485-.868.671-1.353.412L5.529 10.883c-.485-.259-.67-.868-.412-1.353L7.94 4.235c.259-.485.868-.67 1.353-.412l12.353 6.588c.485.259.671.868.412 1.353l-2.823 5.295z"/><path fill="#DA2F47" d="M31.177 22.293c-.259.485-.868.671-1.354.412l-9.705-5.176c-.485-.259-.671-.868-.412-1.354l1.882-3.529c.259-.485.868-.67 1.354-.412l9.705 5.176c.485.259.671 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f52e.svg b/browser/components/torpreferences/content/bridgemoji/1f52e.svg new file mode 100644 index 000000000000..d7e09232d7e8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f52e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BF6952" d="M28.736 28.767l-21.458.076-1.649 4.835c-.062.187-.101.387-.073.582.145.984.993 1.74 2.017 1.74h20.894c1.024 0 1.872-.756 2.017-1.74.029-.195-.01-.395-.073-.582l-1.675-4.911z"/><path fill="#854836" d="M28.736 28.767l-.19-.556c-.199-.598-.759-1.001-1.389-1.001H8.883c-.63 0-1.19.403-1.389 1.001l-.216.632c2.928 2.344 6.636 3.754 10.678 3.754 4.088 0 7.837-1.438 10.78-3.83z"/><circle fill="#AA8DD8" cx="17.956" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f54a.svg b/browser/components/torpreferences/content/bridgemoji/1f54a.svg new file mode 100644 index 000000000000..613e4956d71d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f54a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M.794 16.112c1 0 5.875 1.344 6.5 2.312L6.013 18.3s-3.906-1.25-4.906-1.25c-1.001 0-.313-.938-.313-.938z"/><path fill="#99AAB5" d="M11 2c1 1 3 7 3 10s-2 6 2 8 5.001-1 5.001-5S20 7 19 5s-2 0-2 0-1-4-2-4-1 2-1 2-2-2-3-2 0 1 0 1z"/><path fill="#CCD6DD" d="M10 15c3 0 4 4 6 4s1-3 3-3 10-5 10-11 3-3 3-1c1 0 2 1.586 2 3 0 1 0 2-1 3 1 0 2 2 1 3 1 3-1 6-3 7 0 1-2 3-4 2 0 0-1 3-3 2 0 0 3.052 1.684 4 2 3 1 7 1 7 1s0 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f58c.svg b/browser/components/torpreferences/content/bridgemoji/1f58c.svg new file mode 100644 index 000000000000..b39bcbc9dd7e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f58c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M14.57 27.673c2.814-1.692 6.635-3.807 9.899-7.071 7.03-7.029 12.729-16.97 11.314-18.385C34.369.803 24.428 6.502 17.398 13.531c-3.265 3.265-5.379 7.085-7.071 9.899l4.243 4.243z"/><path fill="#C1694F" d="M.428 34.744s7.071 1.414 12.021-3.536c2.121-2.121 2.121-4.949 2.121-4.949l-2.829-2.829s-3.535.708-4.95 2.122c-1.414 1.414-2.518 4.232-2.888 5.598-.676 2.502-3.475 3.594-3.475 3.594z"/><path fill="#CCD6DD" d [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f58d.svg b/browser/components/torpreferences/content/bridgemoji/1f58d.svg new file mode 100644 index 000000000000..5a4cbe8e1a8c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f58d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M35.702 7.477L28.522.298c-.396-.397-1.038-.397-1.436 0L3.395 23.989c-.397.397-.397 1.038 0 1.437.72.719-3.14 7.959-3.395 8.496L2.068 36c.536-.255 7.785-4.115 8.506-3.395.397.397 1.039.397 1.436 0L35.702 8.913c.397-.396.397-1.039 0-1.436z"/><path fill="#EA596E" d="M4.139 23.24L26.407.972l8.62 8.62L12.759 31.86z"/><path fill="#292F33" d="M23.534 3.846l1.437-1.436 8.62 8.62-1.437 1.436zM5.576 21.803l1.436-1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f5ff.svg b/browser/components/torpreferences/content/bridgemoji/1f5ff.svg new file mode 100644 index 000000000000..5ba18be1f934 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f5ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M8 27s-2 4-2 6 4 3 12 3 12-1 12-3-2-6-2-6H8zM9 6C6 6 6 7 5 16c-.994 8.945 0 10 4 10 2 0 2-20 0-20zm18 0c3 0 3 1 4 10 .994 8.945 0 10-4 10-2 0-2-20 0-20z"/><path fill="#CCD6DD" d="M8 3s1-3 10-3 10 3 10 3 1 6 1 14-1 14-1 14-1 2-10 2-10-2-10-2-1-3-1-14S8 3 8 3z"/><path fill="#66757F" d="M28 8c0-1-3-4-10-4S8 7 8 8c0 .807 4.548 1.612 6.311 1.894C14.999 12.548 15 18 15 18c.805-3.218.315-7.079.093-8.467C15.295 8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f680.svg b/browser/components/torpreferences/content/bridgemoji/1f680.svg new file mode 100644 index 000000000000..8658d4397b8c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f680.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M1 17l8-7 16 1 1 16-7 8s.001-5.999-6-12-12-6-12-6z"/><path fill="#FFAC33" d="M.973 35s-.036-7.979 2.985-11S15 21.187 15 21.187 14.999 29 11.999 32c-3 3-11.026 3-11.026 3z"/><circle fill="#FFCC4D" cx="8.999" cy="27" r="4"/><path fill="#55ACEE" d="M35.999 0s-10 0-22 10c-6 5-6 14-4 16s11 2 16-4c10-12 10-22 10-22z"/><path d="M26.999 5c-1.623 0-3.013.971-3.641 2.36.502-.227 1.055-.36 1.641-.36 2.209 0 4 1.791 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f681.svg b/browser/components/torpreferences/content/bridgemoji/1f681.svg new file mode 100644 index 000000000000..8b7a40320cb3 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f681.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M16.26 26h2v5h-2zm-8 0h2v5h-2z"/><ellipse fill="#99AAB5" cx="6.259" cy="3" rx="6" ry="1"/><ellipse fill="#99AAB5" cx="20.259" cy="3" rx="6" ry="1"/><path fill="#99AAB5" d="M12.26 3h2v6h-2z"/><ellipse fill="#66757F" cx="13.259" cy="3" rx="2" ry="1"/><path fill="#FFCC4D" d="M34.259 10c0-3 0-7-1-7s-3 4-4 6 5 1 5 1z"/><path fill="#FFCC4D" d="M34.259 10c0-2.209-8-3-19-3h-2C6.632 7 .509 12.451.509 18.25S4.259 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f686.svg b/browser/components/torpreferences/content/bridgemoji/1f686.svg new file mode 100644 index 000000000000..3f5f5b85617c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f686.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A7A9AC" d="M2 36h32L23 19H13z"/><path fill="#58595B" d="M5 36h26L21 19h-6z"/><path fill="#808285" d="M8 36h20l-9-17h-2z"/><path fill="#A7A9AC" d="M28 35c0 .553-.447 1-1 1H9c-.552 0-1-.447-1-1 0-.553.448-1 1-1h18c.553 0 1 .447 1 1zm-2-4c0 .553-.447 1-1 1H11c-.552 0-1-.447-1-1 0-.553.448-1 1-1h14c.553 0 1 .447 1 1z"/><path fill="#58595B" d="M27.076 25.3L23 19H13l-4.076 6.3c1.889 2.517 4.798 4.699 9.076 4.699 4.277 0 7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f68b.svg b/browser/components/torpreferences/content/bridgemoji/1f68b.svg new file mode 100644 index 000000000000..da204b81a3b0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f68b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#939598" d="M0 34h36v2H0z"/><path fill="#58595B" d="M10 32c0-1.657-1.344-3-3-3s-3 1.343-3 3 1.343 3 3 3 3-1.343 3-3z"/><path fill="#292F33" d="M9 32c0-1.105-.896-2-2-2s-2 .895-2 2 .896 2 2 2 2-.895 2-2z"/><circle fill="#58595B" cx="29" cy="32" r="3"/><circle fill="#292F33" cx="29" cy="32" r="2"/><path fill="#E6E7E8" d="M34 2H2c-.552 0-1-.448-1-1s.448-1 1-1h32c.553 0 1 .448 1 1s-.447 1-1 1z"/><path fill="#66757F" d="M [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f68d.svg b/browser/components/torpreferences/content/bridgemoji/1f68d.svg new file mode 100644 index 000000000000..68ca65faa073 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f68d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 34c0 1.104-.896 2-2 2H7c-1.104 0-2-.896-2-2v-7c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v7zm20 0c0 1.104-.896 2-2 2h-2c-1.104 0-2-.896-2-2v-7c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v7z"/><path fill="#99AAB5" d="M3 17c0 .553-.448 1-1 1H1c-.552 0-1-.447-1-1v-7c0-.552.448-1 1-1h1c.552 0 1 .448 1 1v7zm33 0c0 .553-.447 1-1 1h-1c-.553 0-1-.447-1-1v-7c0-.552.447-1 1-1h1c.553 0 1 .448 1 1v7z"/><path fill="#99AAB5 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f695.svg b/browser/components/torpreferences/content/bridgemoji/1f695.svg new file mode 100644 index 000000000000..5446414a2544 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f695.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M21.377 15.449c.089.816-.83 1.495-2.053 1.515-1.223.02-2.095-.635-1.947-1.463l.356-2c.147-.829.938-1.5 1.767-1.5.828 0 1.572.662 1.661 1.478l.216 1.97z"/><path fill="#FFCC4D" d="M32.246 21h-.135l-.444-3c-.327-2.209-1.864-4-3.433-4H16.162c-1.569 0-3.574 1.791-4.478 4l-1.228 3H6.911c-2.073 0-4.104 1.791-4.538 4l-.588 3c-.001.008 0 .015-.002.021C.782 28.132 0 28.97 0 30c0 1.104.896 2 2 2h30c2.209 0 4-1.791 4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f697.svg b/browser/components/torpreferences/content/bridgemoji/1f697.svg new file mode 100644 index 000000000000..97b5f10d4c5a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f697.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M13 32h20s3 0 3-4c0-2 0-6-1-7s-8-7-11-7h-6c-3 0-10 7-10 7l-4 1s-3 1-3 3v3s-1 .338-1 1.957C0 32 2 32 2 32h11z"/><path fill="#BBDDF5" d="M20 16h-2c-2 0-8 6-8 6s4.997-.263 10-.519V16zm10 3c-1-1-5-3-7-3h-1v5.379c4.011-.204 7.582-.379 8-.379 1 0 1-1 0-2z"/><circle fill="#292F33" cx="10" cy="31" r="4"/><circle fill="#CCD6DD" cx="10" cy="31" r="2"/><circle fill="#292F33" cx="27" cy="31" r="4"/><circle fill="#CCD [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f69a.svg b/browser/components/torpreferences/content/bridgemoji/1f69a.svg new file mode 100644 index 000000000000..7441d1bba804 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f69a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4v-3c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v3z"/><path fill="#FFCC4D" d="M19 13l-.979-1H7.146C4 12 3 14 3 14l-3 5.959V25h19V13z"/><path fill="#55ACEE" d="M9 20H2l2-4s1-2 3-2h2v6z"/><circle fill="#292F33" cx="9" cy="31" r="4"/><circle fill="#CCD6DD" cx="9" cy="31" r="2"/><circle fill="#292F33" cx="27" cy="31" r="4"/><circle fill="#CCD6DD" cx="27" cy="31" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f69c.svg b/browser/components/torpreferences/content/bridgemoji/1f69c.svg new file mode 100644 index 000000000000..014ca11d340a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f69c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M11 11h3v9h-3z"/><path fill="#77B255" d="M24 26.157C24 28.832 22.354 31 20.325 31H4.709c-2.029 0-3.488-1.565-3.258-3.494l.625-5.241c.23-1.93 1.992-3.808 3.928-4.199l14.628-3.21C22.496 14.413 24 16.219 24 18.893v7.264z"/><path fill="#292F33" d="M16.535 24.167C16.239 26.283 17.791 28 20 28h9c2.209 0 4-1.717 4-3.833V8.833C33 6.716 31.547 5 29.755 5h-7.303c-1.792 0-3.484 1.716-3.78 3.833l-2.137 15.334z"/><pat [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a0.svg b/browser/components/torpreferences/content/bridgemoji/1f6a0.svg new file mode 100644 index 000000000000..8510956dc2af --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6a0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#58595B" d="M19 12V5h-2v7h-5v5h12v-5z"/><path fill="#FFD983" d="M34 28V18c0-2.209-1.791-4-4-4H6c-2.209 0-4 1.791-4 4v10h32z"/><path fill="#269" d="M2 22v6c0 4.418 3.582 8 8 8h16c4.418 0 8-3.582 8-8v-6H2z"/><path fill="#88C9F9" d="M2 18h6v9H2zm8 0h7v9h-7zm9 0h7v9h-7zm9 0h6v9h-6z"/><path fill="#6D6E71" d="M33.213 10.977L3.27 2.954c-.533-.144-.85-.691-.707-1.226.143-.533.691-.85 1.225-.707L33.73 9.045c.534.144.851.691.7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a2.svg b/browser/components/torpreferences/content/bridgemoji/1f6a2.svg new file mode 100644 index 000000000000..79077f00a46c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6a2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M16 0h4v5h-4z"/><path fill="#D1D3D4" d="M16 2h4v4h-4z"/><path fill="#A7A9AC" d="M18 2h2v4h-2z"/><path fill="#66757F" d="M18 19H5s1.355 8 4.875 14C13.394 39 18 33 18 33s4.606 6 8.125 0C29.645 27 31 19 31 19H18z"/><path fill="#99AAB5" d="M18 19H5s1.355 8 4.875 14C13.394 39 18 33 18 33V19z"/><path fill="#55ACEE" d="M0 30h36v6H0z"/><path fill="#E6E7E8" d="M30 9h-2.45l-.242-4H8.692l-.241 4H6v6h2.088l-.242 4h20 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a4.svg b/browser/components/torpreferences/content/bridgemoji/1f6a4.svg new file mode 100644 index 000000000000..7dfe5a6b81b2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6a4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M33 27h-2l1-8h2z"/><path fill="#DD2E44" d="M1 14c9.055.053 11 1 17 2 2.959.493 7 1 11 1 2 0 4 1 4 4 0 2 .534 3.187-5.433 3.815C23.59 25.233 13 23 9 21c-6-3-9-7.005-8-7z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFCC4D" d="M5 13c4 0 11 0 18 1s10 1 10 3v3c0 1.414-6.869.447-10 0-7-1-14-3-18-4-4.047-1.011-7-3 0-3z"/><path fill="#A0041E" d="M30.592 24.322c2.122-.539 2.403-1.307 2.418-2.361-1.263. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f0.svg b/browser/components/torpreferences/content/bridgemoji/1f6f0.svg new file mode 100644 index 000000000000..6d9bb3d2eaf1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M8.514 19.828L19.122 9.223l2.121 2.121L10.635 21.95z"/><path fill="#55ACEE" d="M8.515 29.728c-.781.781-2.047.781-2.828 0l-4.95-4.949c-.781-.781-.781-2.048 0-2.828L5.687 17c.781-.781 2.047-.781 2.828 0l4.95 4.95c.781.78.781 2.047 0 2.828l-4.95 4.95zm16.262-16.263c-.78.781-2.047.781-2.827 0L17 8.515c-.781-.781-.781-2.047 0-2.828l4.951-4.95c.781-.781 2.047-.781 2.828 0l4.949 4.95c.781.781.781 2.047.001 2.828 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f4.svg b/browser/components/torpreferences/content/bridgemoji/1f6f4.svg new file mode 100644 index 000000000000..e217dc436402 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#292F33" cx="4.5" cy="31.5" r="4.5"/><circle fill="#DD2E44" cx="4.5" cy="31.5" r="3"/><circle fill="#292F33" cx="31.5" cy="31.5" r="4.5"/><circle fill="#DD2E44" cx="31.5" cy="31.5" r="3"/><path fill="#55ACEE" d="M31.5 33h-20c-.825 0-1.5-.675-1.5-1.5s.675-1.5 1.5-1.5h20c.825 0 1.5.675 1.5 1.5s-.675 1.5-1.5 1.5z"/><path fill="#55ACEE" d="M26.012 31.746c-.003-.082-.012-.163-.012-.246 0-3.038 2.462-5.5 5.5-5.5 1.21 0 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f5.svg b/browser/components/torpreferences/content/bridgemoji/1f6f5.svg new file mode 100644 index 000000000000..a1e0f4b99e20 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M32 24h-1c-.55 0-1-.45-1-1s.45-1 1-1h1c.55 0 1 .45 1 1s-.45 1-1 1"/><path fill="#292F33" d="M10 31.5c0 2.485-2.015 4.5-4.5 4.5S1 33.985 1 31.5 3.015 27 5.5 27s4.5 2.015 4.5 4.5m24 0c0 2.485-2.015 4.5-4.5 4.5S25 33.985 25 31.5s2.015-4.5 4.5-4.5 4.5 2.015 4.5 4.5"/><path fill="#99AAB5" d="M8 31.5C8 32.881 6.881 34 5.5 34S3 32.881 3 31.5 4.119 29 5.5 29 8 30.119 8 31.5m24 0c0 1.381-1.119 2.5-2.5 2.5S27 32.88 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f6.svg b/browser/components/torpreferences/content/bridgemoji/1f6f6.svg new file mode 100644 index 000000000000..b6a2165254a3 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M33.793 17S32.476 20 18 20C3.523 20 1.973 17 1.973 17S-1 22.117 4.802 25c4.238 2.105 10.916-.131 12.723-.814 1.991.683 9.274 2.824 13.557.814 5.862-2.751 2.711-8 2.711-8z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M27.005 25.389c.206 0 .412-.079.569-.236.315-.315.315-.824 0-1.139l-8.861-8.86c-.315-.315-.824-.315-1.139 0-.315.315-.315.824 0 1.139l8.861 8.86c.158.157.364.236.57.236z" [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f8.svg b/browser/components/torpreferences/content/bridgemoji/1f6f8.svg new file mode 100644 index 000000000000..5f015fe792bb --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M32.831 20.425c-.689 3.241-9.21 6.221-17.314 4.499S.841 17.013 1.53 13.772s8.587-3.287 16.69-1.564 15.3 4.976 14.611 8.217z"/><path fill="#FFD983" d="M27 36l-2-14-17-5-8 19z"/><ellipse transform="rotate(-78 17.482 15.686)" fill="#67757F" cx="17.481" cy="15.685" rx="7.556" ry="17"/><path fill="#67757F" d="M.414 10.977l.414 2.315 32.866 6.986 1.412-2.126z"/><ellipse transform="rotate(-78 18.013 13.186)" fil [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f9.svg b/browser/components/torpreferences/content/bridgemoji/1f6f9.svg new file mode 100644 index 000000000000..1ee4bfec4ac7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6f9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M32.436 2.821c1.801 1.799 3.779 2.737 0 6.517L12.884 28.889c-4.594 4.595-5.463 7.571-11.405 1.63-3.258-3.258.284-3.543 4.888-8.148l19.552-19.55c1.8-1.8 4.718-1.8 6.517 0z"/><path fill="#DD2E44" d="M33.936 4.321c1.801 1.799 1.801 4.717 0 6.517L14.385 30.389c-4.073 4.073-8.342 4.693-11.405 1.63-3.258-3.258.284-3.543 4.888-8.148L27.42 4.321c1.799-1.8 4.717-1.8 6.516 0z"/><path fill="#3B88C3" d="M15.301 33.18 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6fa.svg b/browser/components/torpreferences/content/bridgemoji/1f6fa.svg new file mode 100644 index 000000000000..aae4e94ac5a0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6fa.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M19 9h2v11h-2z"/><path fill="#55ACEE" d="M10 9c-2 2-4 5-4 7 0 4 5 1 5 1V9h-1z"/><circle fill="#292F33" cx="5" cy="32" r="4"/><circle fill="#99AAB5" cx="5" cy="32" r="2"/><path fill="#1E5200" d="M29 23h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2zm-10 0h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2z"/><path fill="#5C913B" d="M [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f6fc.svg b/browser/components/torpreferences/content/bridgemoji/1f6fc.svg new file mode 100644 index 000000000000..091d51ef63eb --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f6fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M10 27.5c0 1.381-2.567 3.5-4.5 3.5S1 28.881 1 27.5 3.567 26 5.5 26s4.5.119 4.5 1.5zm19 0c0 1.381-2.567 3.5-4.5 3.5S20 28.881 20 27.5s2.567-1.5 4.5-1.5 4.5.119 4.5 1.5zm0-.5c0 1 0 2 2 3s2-3 2-3h-4z"/><path fill="#F4900C" d="M34.787 28.795c1.332 1.332.729 1.683-.603 3.016-1.332 1.332-1.683 1.935-3.016.603-1.332-1.332-1.935-2.889-.603-4.222 1.332-1.333 2.889-.73 4.222.603z"/><path fill="#662113" d="M33.299 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f916.svg b/browser/components/torpreferences/content/bridgemoji/1f916.svg new file mode 100644 index 000000000000..1dbe6d68de79 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f916.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F4900C" cx="33.5" cy="14.5" rx="2.5" ry="3.5"/><ellipse fill="#F4900C" cx="2.5" cy="14.5" rx="2.5" ry="3.5"/><path fill="#FFAC33" d="M34 19c0 .553-.447 1-1 1h-3c-.553 0-1-.447-1-1v-9c0-.552.447-1 1-1h3c.553 0 1 .448 1 1v9zM7 19c0 .553-.448 1-1 1H3c-.552 0-1-.447-1-1v-9c0-.552.448-1 1-1h3c.552 0 1 .448 1 1v9z"/><path fill="#FFCC4D" d="M28 5c0 2.761-4.478 4-10 4C12.477 9 8 7.761 8 5s4.477-5 10-5c5.522 0 10 2.239 10 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f93f.svg b/browser/components/torpreferences/content/bridgemoji/1f93f.svg new file mode 100644 index 000000000000..01239db87846 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f93f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11.557 25 9 25c-4.551 0-7.923-3.033-8.784-7.619C-.804 11.955 3.589 7 9.11 7h11.78c5.521 0 9.914 4.955 8.894 10.381C28.923 21.967 25.551 25 21 25z"/><path fill="#292F33" d="M18 22l-3-3-3 3-2 2c2 0 3 3 5 3s3-3 5-3l-2-2z"/><path fill="#4E9322" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f941.svg b/browser/components/torpreferences/content/bridgemoji/1f941.svg new file mode 100644 index 000000000000..e197d16c3e09 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f941.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M0 18h36v9H0z"/><ellipse fill="#F18F26" cx="18" cy="26" rx="18" ry="9"/><ellipse fill="#F18F26" cx="18" cy="27" rx="18" ry="9"/><path fill="#9D0522" d="M0 10v16h.117c.996 4.499 8.619 8 17.883 8s16.887-3.501 17.883-8H36V10H0z"/><ellipse fill="#F18F26" cx="18" cy="11" rx="18" ry="9"/><ellipse fill="#F18F26" cx="18" cy="12" rx="18" ry="9"/><path fill="#F18F26" d="M0 10h1v2H0zm35 0h1v2h-1z"/><ellipse fill="#F [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f94c.svg b/browser/components/torpreferences/content/bridgemoji/1f94c.svg new file mode 100644 index 000000000000..9bc8f8a58d42 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f94c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M28 12H13V8c0-.552.448-1 1-1h11c1.104 0 2-.896 2-2s-.896-2-2-2H14c-2.761 0-5 2.239-5 5v4H8c-1.104 0-2 .896-2 2s.896 2 2 2h20c1.104 0 2-.896 2-2s-.896-2-2-2z"/><path fill="#66757F" d="M36 25c0 3.313-2.687 6-6 6H6c-3.313 0-6-2.687-6-6v-5c0-3.313 2.687-6 6-6h24c3.313 0 6 2.687 6 6v5z"/><path fill="#99AAB5" d="M0 20h36v5H0z"/></svg> \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f94f.svg b/browser/components/torpreferences/content/bridgemoji/1f94f.svg new file mode 100644 index 000000000000..84fdba474f0a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f94f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 21.526C35 26.758 27.389 31 18 31S1 26.758 1 21.526 7.625 11 18 11s17 5.294 17 10.526z"/><ellipse fill="#FFAC33" cx="18" cy="19.502" rx="16" ry="8.5"/><path fill="#FFD983" d="M18 11.331c-6.449 0-11.5 2.491-11.5 5.672 0 3.18 5.051 5.671 11.5 5.671 6.448 0 11.5-2.491 11.5-5.671 0-3.181-5.052-5.672-11.5-5.672z"/><ellipse fill="#FFAC33" cx="18" cy="18.002" rx="12" ry="6"/><path fill="#F4900C" d="M29 18.002 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f950.svg b/browser/components/torpreferences/content/bridgemoji/1f950.svg new file mode 100644 index 000000000000..eef4358d88ee --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f950.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M11.569 35.41c-2.223-.63-5.362-4.11-6.86-7.331-.183-.391-1.101-.673-1.265-1.084C.953 20.775.637 12.54 6.342 6.834 12.751.425 20.537-.295 26.817 1.757c.45.147.837 1.114 1.286 1.199 5.917 1.115 8.322 7.549 5.759 6.816-1.199-.342-2.657-.557-3.814-.428-.437.049-1.051.892-1.544.962-.767.11-2.64.212-3.564.305-9.159.916-12.395 6.971-12.811 14.256-.046.808-.617.623-.73 1.283-.344 1.992 1.089 4.884 1.772 6.939.594 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f951.svg b/browser/components/torpreferences/content/bridgemoji/1f951.svg new file mode 100644 index 000000000000..ed1d9f9f633c --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f951.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35 5.904c2.394 6.042-1.438 20.543-10.5 26.5-9.06 5.957-20.395 3.573-23.097-6.443-1.669-6.186 2.79-10.721 11.851-16.677C22.315 3.327 32.64-.053 35 5.904z"/><path fill="#3E721D" d="M20.605 26.03c-6.523 4.546-15.287 5.15-18.469.582-3.183-4.566.418-12.578 6.943-17.124 6.522-4.545 21.951-9.796 25.134-5.23 3.183 4.57-7.085 17.226-13.608 21.772"/><path fill="#A6D388" d="M19.815 26.578c-5.757 4.013-13.482 3.097- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f955.svg b/browser/components/torpreferences/content/bridgemoji/1f955.svg new file mode 100644 index 000000000000..b949554ff7a1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f955.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M31.096 8.933c3.535-2.122 4.408-8.32 3.701-7.613.707-.707-5.657 0-7.778 3.536 0-1.414-1.414-7.071-3.535-2.121-2.122 4.95-1.415 5.657-1.415 7.071 0 1.414 2.829 1.414 2.829 1.414s-.125 2.704 1.29 2.704c1.414 0 1.997.583 6.946-1.538 4.95-2.122-.624-3.453-2.038-3.453z"/><path fill="#F4900C" d="M22.422 23.594C14.807 31.209 2.27 36.675.502 34.907c-1.768-1.768 3.699-14.305 11.313-21.92 7.615-7.615 11.53-7.562 14 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f956.svg b/browser/components/torpreferences/content/bridgemoji/1f956.svg new file mode 100644 index 000000000000..8da10427ff0f --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f956.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EDB980" d="M12.697 31.165c-3.785 3.785-8.273 3.838-9.841 2.271-1.568-1.568-1.514-6.056 2.271-9.841L24.052 4.67c3.785-3.784 8.271-3.838 9.84-2.271 1.567 1.568 1.515 6.056-2.271 9.841L12.697 31.165z"/><path d="M24.322 7.969c1.568 1.568 2.758 2.917 3.595 2.082.152-.152.241-.349.301-.565-.018-.043-.036-.087-.041-.136-.128-1.148-2.41-3.641-4.08-4.721l-.045.042-1.474 1.474c.438.539 1.064 1.144 1.744 1.824zm-4.543 4.542c1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f95c.svg b/browser/components/torpreferences/content/bridgemoji/1f95c.svg new file mode 100644 index 000000000000..c809689a0536 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f95c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M17.256 31.519c-4.754 4.754-11.207 5.573-14.683 2.097C-.902 30.141.056 23.55 4.672 18.934c3.355-3.356 6.711-3.356 9.228-5.873 2.517-2.516 1.678-5.033 5.454-8.809C23.968-.361 29.84-1.201 33.616 2.574c3.774 3.776 2.832 9.754-1.678 14.263-3.775 3.775-6.292 2.936-8.809 5.452-2.518 2.518-2.518 5.873-5.873 9.23z"/><path fill="#C1694F" d="M8.211 21.397c-.324 0-.643-.157-.835-.448-.305-.46-.179-1.081.282-1.386.68 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f95d.svg b/browser/components/torpreferences/content/bridgemoji/1f95d.svg new file mode 100644 index 000000000000..4007a720a280 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f95d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M25.94 15.188c2.045 8.239-1.642 16.246-8.235 17.881-6.592 1.636-13.593-3.719-15.638-11.958-2.044-8.24 1.642-16.246 8.236-17.882 6.59-1.636 13.593 3.718 15.637 11.959z"/><path fill="#C1694F" d="M34.146 13.151c2.391 9.635-6.295 17.402-14.948 19.548-8.653 2.146-14.34-3.532-16.385-11.773-2.044-8.24.328-15.92 8.98-18.066 8.652-2.148 19.801.005 22.353 10.291z"/><path fill="#77B255" d="M24.448 15.558c1.789 7.211 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f95e.svg b/browser/components/torpreferences/content/bridgemoji/1f95e.svg new file mode 100644 index 000000000000..795fb134113d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f95e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#929497" cx="18" cy="23.949" rx="18" ry="10"/><ellipse fill="#CCD6DC" cx="18" cy="22.199" rx="18" ry="10"/><path fill="#F19020" d="M32 20.393c0 4.295-6.268 7.778-14 7.778S4 24.688 4 20.393s6.268-7.778 14-7.778 14 3.483 14 7.778z"/><path fill="#FAAA35" d="M32 18.239c0 4.295-6.268 7.778-14 7.778S4 22.534 4 18.239s6.268-7.778 14-7.778 14 3.483 14 7.778z"/><path fill="#F19020" d="M32 16.085c0 4.295-6.268 7.778-14 7.77 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f965.svg b/browser/components/torpreferences/content/bridgemoji/1f965.svg new file mode 100644 index 000000000000..7f1692794b5e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f965.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8B5E3C" d="M5.506 30.167c-7.03-7.029-6.397-19.059 1.414-26.87l25.456 25.456c-7.811 7.811-19.841 8.443-26.87 1.414z"/><path fill="#603913" d="M6.92 3.297c-3.905 3.905-1.373 12.77 5.656 19.8 7.031 7.029 15.895 9.561 19.799 5.656 3.905-3.904 1.374-12.769-5.657-19.799C19.69 1.924 10.825-.607 6.92 3.297z"/><path fill="#F5F8FA" d="M31.591 24.217c.229.229.56.336.887.276.387-.071.696-.362.79-.745.067-.269 1.575-6.67-3.013-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f966.svg b/browser/components/torpreferences/content/bridgemoji/1f966.svg new file mode 100644 index 000000000000..ee2bc1cb1092 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f966.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M23.013 24.322l-5.546-5.546-5.547-5.546S12.375 24.413.737 27.323c0 0 1.032 2.487 3.364 4.819s4.819 3.364 4.819 3.364c2.91-11.639 14.093-11.184 14.093-11.184z"/><path fill="#5C913B" d="M13.83 16.594c-.727 3.637-5.092 9.456-5.092 9.456l8.728-8.728c2.909-2.909-3.636-.728-3.636-.728zm12.365 6.546s-10.91.727-17.457 5.819c8.001-8.001 11.638-8.728 11.638-8.728l5.819 2.909z"/><path fill="#3E721D" d="M30.156 28.19 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f968.svg b/browser/components/torpreferences/content/bridgemoji/1f968.svg new file mode 100644 index 000000000000..10bd682b6834 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f968.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 16c0-8-6-11-12-11-1.738 0-3.472.371-5 1.097C16.472 5.371 14.738 5 13 5 7 5 1 8 1 16c0 3 1.314 5.662 3 8 .434.602.903 1.146 1.4 1.647-.357.603-.616 1.091-.779 1.353C4 28 5 29 6 29c.69 0 1.205-.617 1.745-1.482C10.552 29.273 14.023 30 18 30s7.448-.727 10.255-2.482C28.795 28.383 29.31 29 30 29c1 0 2-1 1.379-2-.163-.262-.422-.75-.779-1.353.497-.501.967-1.046 1.4-1.647 1.686-2.338 3-5 3-8zm-17 1.207C16.578 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f96c.svg b/browser/components/torpreferences/content/bridgemoji/1f96c.svg new file mode 100644 index 000000000000..6ef36cb221f1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f96c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M29.866 24.625c2.522-.841 5.884-4.203 5.884-5.884s-2.522-.841-1.681-3.362 1.681-5.043 0-6.724-3.362 0-5.043-1.681 0-3.362-1.681-5.043-4.203-.841-6.724 0S18.939.25 17.258.25s-5.043 3.362-5.884 5.884-2.521.84-3.361 3.362c-.78 2.341.177 4.823-1.972 9.748-1.026 1.621-1.995 3.178-2.899 4.543C-.836 29.792.449 35.552.449 35.552s5.76 1.285 11.765-2.693c1.365-.904 2.922-1.873 4.543-2.899 4.925-2.15 7.407-1.192 9.7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f96d.svg b/browser/components/torpreferences/content/bridgemoji/1f96d.svg new file mode 100644 index 000000000000..b5607c107cc4 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f96d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M26.38 3.539c.483-.039 1.259-.655 1.664-.595.405.06 1.573 1.078 1.67 1.283.097.205-.637 1.178-.746 1.48-.109.302-.64.239-1.51-.543-.869-.782-1.078-1.625-1.078-1.625z"/><path fill="#EA564B" d="M12.3 3.139c4.545-2.66 11.267-2.611 13.685-.58 1.617 1.358 2.942 2.401 4.474 3.011 2.022.804 3.692 3.154 4.415 5.384.981 3.023 1.68 12.579-8.029 18.516-6.233 3.812-17.656 5.363-18.961 4.723-.984-.483-4.621-2.09-6.675 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f96f.svg b/browser/components/torpreferences/content/bridgemoji/1f96f.svg new file mode 100644 index 000000000000..6a65f4c19330 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f96f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M18.09 9.295C7.847 9.295.573 13.188.573 18.053c0 7.569 5.839 15.57 17.517 15.57 11.678 0 17.517-8.001 17.517-15.57 0-4.865-7.274-8.758-17.517-8.758z"/><path fill="#D99E82" d="M18.09 8.322C7.847 8.322.573 11.961.573 17.927c0 5.966 7.273 9.858 17.517 9.858 10.243 0 17.517-4.146 17.517-9.858S28.333 8.322 18.09 8.322z"/><path fill="#CCD6DD" d="M2.519 20.973c-.973.973 4.866 6.812 7.785 3.893 2.919-2.919 5.942 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f980.svg b/browser/components/torpreferences/content/bridgemoji/1f980.svg new file mode 100644 index 000000000000..8f45b53dd4f9 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f980.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M6.96 20.637c.068.639-.543 1.228-1.368 1.315-.824.089-1.547-.357-1.615-.995-.068-.639.544-1.227 1.368-1.314.824-.089 1.547.356 1.615.994zm2.087 2.717c.125.818-1.756 2.544-2.576 2.669-.819.125-1.584-.438-1.708-1.257-.125-.818.58-1.14 1.398-1.265.819-.124 2.761-.965 2.886-.147zm1.783 2.104c.173.81-1.628 3.927-2.438 4.1-.811.173-1.645.146-1.817-.665-.173-.81.306-1.688 1.116-1.861.81-.174 2.966-2.384 3.139-1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f981.svg b/browser/components/torpreferences/content/bridgemoji/1f981.svg new file mode 100644 index 000000000000..674ff24e628a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f981.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M32.325 10.958s2.315.024 3.511 1.177c-.336-4.971-2.104-8.249-5.944-10.13-3.141-1.119-6.066 1.453-6.066 1.453s.862-1.99 2.19-2.746C23.789.236 21.146 0 18 0c-3.136 0-5.785.227-8.006.701 1.341.745 2.215 2.758 2.215 2.758S9.194.803 6 2.053C2.221 3.949.481 7.223.158 12.174c1.183-1.19 3.55-1.215 3.55-1.215S-.105 13.267.282 16.614c.387 2.947 1.394 5.967 2.879 8.722C3.039 22.15 5.917 20 5.917 20s-2.492 5.96-.581 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f984.svg b/browser/components/torpreferences/content/bridgemoji/1f984.svg new file mode 100644 index 000000000000..19d9ff1613d2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f984.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1CDD5" d="M36 19.854C33.518 9.923 25.006 1.909 16.031 6.832c0 0-4.522-1.496-5.174-1.948-.635-.44-1.635-.904-.912.436.423.782.875 1.672 2.403 3.317C8 12.958 9.279 18.262 7.743 21.75c-1.304 2.962-2.577 4.733-1.31 6.976 1.317 2.33 4.729 3.462 7.018 1.06 1.244-1.307.471-1.937 3.132-4.202 2.723-.543 4.394-1.791 4.394-4.375 0 0 .795-.382 1.826 6.009.456 2.818-.157 5.632-.039 8.783H36V19.854z"/><path fill="#60379A" d="M31 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f986.svg b/browser/components/torpreferences/content/bridgemoji/1f986.svg new file mode 100644 index 000000000000..085c90063468 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f986.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M12.75 17.75c1.226 2.195 1.856-1.361 9.312-2.625s13.729 4.454 13.859 5.413c.132.958-4.447 9.462-9.462 9.462H10.75c-4.143 0-7.022-7.224-4-11.438 0 0 4.5-3.5 6-.812z"/><path fill="#C1694F" d="M13.008 18.136C8.02 25.073 6.969 30 10.75 30c-4.143 0-6.578-6.188-4.468-11.031.463-1.064 1.758-2.492 1.758-2.492l4.179-.008c.162.32.599 1.365.789 1.667z"/><path fill="#E1E8ED" d="M20.062 22.75c6.672-2.682 15.729-3.171 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f987.svg b/browser/components/torpreferences/content/bridgemoji/1f987.svg new file mode 100644 index 000000000000..4ebb5ad4c15f --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f987.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M23 21c0 6.352-3 10-5 10s-5-3.648-5-10 2.239-7 5-7c2.762 0 5 .648 5 7z"/><circle fill="#66757F" cx="18" cy="11" r="4"/><path fill="#66757F" d="M14 11c-2-5 1-7 1-7s2 1 2 4-3 3-3 3z"/><path fill="#546066" d="M14.668 9.904c-.776-2.457-.119-3.896.403-4.58C15.486 5.773 16 6.608 16 8c0 1.268-.739 1.734-1.332 1.904z"/><path fill="#66757F" d="M22 11c2-5-1-7-1-7s-2 1-2 4 3 3 3 3zm-5.984 3c-1.62 1.157-10 2-9-5 .142 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f988.svg b/browser/components/torpreferences/content/bridgemoji/1f988.svg new file mode 100644 index 000000000000..f6381c521eaf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f988.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M36 21c0 5-3 9-11 11-7.062 1.766-21-.934-21-2 0-1.129 2.503-1.371 6.812-1.125 10.938.625 13.75-3.857 12-5.25-3.062-2.437-6.437.375-12.062-.125C3.782 22.881 0 17.472 0 16c0-2 11.716-8 20-8s16 4.25 16 13z"/><path fill="#292F33" d="M15 12.5c0 .829-.671 1.5-1.5 1.5s-1.5-.671-1.5-1.5.671-.5 1.5-.5 1.5-.329 1.5.5z"/><path fill="#66757F" d="M14 9c2-5 5.291-9 7.958-9S21 2 26 10 14 9 14 9zM3 30c0-4-1.04-6 .146-6s6 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f989.svg b/browser/components/torpreferences/content/bridgemoji/1f989.svg new file mode 100644 index 000000000000..bb0d461ab47a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f989.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M7.317 11c-5.723 9.083.958 18 .958 18s2.874-.442 6.875-5.2c4-4.758-7.833-12.8-7.833-12.8zm21.342 0c5.723 9.083-.958 18-.958 18s-2.874-.442-6.875-5.2C16.825 19.042 28.659 11 28.659 11z"/><path fill="#FFAC33" d="M15.203 31.557c-.123-.229-.317-.384-.531-.496-2.032-2.172-.589-4.717-.589-4.717 0-.703 1.271-2.544 0-2.544l-1.272 1.272c-1.272 1.271-1.272 5.089-1.272 5.089H8.995c-.703 0-1.272.568-1.272 1.272 0 .70 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f98a.svg b/browser/components/torpreferences/content/bridgemoji/1f98a.svg new file mode 100644 index 000000000000..2cb2f986dfa2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f98a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M13.431 9.802c.658 2.638-8.673 10.489-11.244 4.098C.696 10.197-.606 2.434.874 2.065c1.48-.368 11.9 5.098 12.557 7.737z"/><path fill="#A0041E" d="M11.437 10.355c.96 1.538-1.831 4.561-3.368 5.522-1.538.961-2.899-.552-4.414-4.414-.662-1.689-1.666-6.27-1.103-6.622.562-.351 7.924 3.976 8.885 5.514z"/><path fill="#F4900C" d="M22.557 9.802C21.9 12.441 31.23 20.291 33.802 13.9c1.49-3.703 2.792-11.466 1.312-11.835 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f98b.svg b/browser/components/torpreferences/content/bridgemoji/1f98b.svg new file mode 100644 index 000000000000..22c6ead8ffcf --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f98b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M20.004 20.243c-.426 0-.858.01-1.294.031-.436 1.268-.468 2.747 0 5.097.328 1.646 2.659 6.299 4.584 7.933.683.58 1.638.884 2.69.884 2.144 0 4.691-1.265 6.157-4.034 3.001-5.671-3.474-9.911-12.137-9.911z"/><path fill="#1C6399" d="M33.666 1.973c-.204 0-.425.021-.663.066-3.182.601-9.302 5.126-14.287 11.771 0 0-.789 5.16-.789 6.194 0 .336 1.264.5 3.058.5 3.717 0 9.709-.705 11.424-2.041 1.898-1.479 3.65-9.804 3. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f98c.svg b/browser/components/torpreferences/content/bridgemoji/1f98c.svg new file mode 100644 index 000000000000..86623680c243 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f98c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M15.971 15.083c-1.458-2.333-.667-7.708 0-8.958s-.542-2.458-1.5-.458-.996 3-3.162 2.458-1.088-3.292-.379-5.625c.729-2.4-.917-1.959-1.667-.458-.75 1.5-1.254 5.693-2.901 5.984-1.647.291-6.099.599-2.851-5.651C4.818-.139 2.773-.656 1.68 1.459.361 4.007-.404 7.25.221 8.625c1.113 2.448 3.483 2.95 6.983 2.284s6.101-.634 6.101 1.133c0 1.872.208 3.458 1.042 3.625s1.624-.584 1.624-.584zm4.057 0c1.458-2.333.667-7.708 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f98e.svg b/browser/components/torpreferences/content/bridgemoji/1f98e.svg new file mode 100644 index 000000000000..1164a73b64f1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f98e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M15.66 6.844c.485-2.03.384-3.139-.553-3.677-.936-.537.337-2.666 1.977-.793 1.641 1.873 1.428 3.618.662 4.853-.767 1.234-2.336.66-2.086-.383zm-.48 2.951c-.916 1.877-1.699 2.668-2.764 2.487-1.064-.18-1.435 2.272 1.023 1.869 2.457-.403 3.401-1.886 3.595-3.326.193-1.44-1.383-1.994-1.854-1.03zm11.336 6.261c-2.072-1.377-5.382 1.43-5.699 2.28-.317.85 1.721 3.461 1.146 4.94-.577 1.477 1.142 1.768 1.92.491.778-1.2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f98f.svg b/browser/components/torpreferences/content/bridgemoji/1f98f.svg new file mode 100644 index 000000000000..0d07017ab4fd --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f98f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M27.295 7.526c-1.152-3.054-2.65-6.8-8.299-6.915-1.759-.036-1.52.539-.347 1.02 2.248.922-2.474 5.438 4.759 7.4 5.648 1.531 5.039 1.549 3.887-1.505z"/><path fill="#99AAB5" d="M36.004 3.903c-7.737 0-14.411 2.514-18.105 5.757-4.875 4.28-5.38 10.306-14.034 15.66-2.847 1.761-.423 7.517 1.153 9.618 1.908 2.544 28.617.238 30.987-8.777l-.001-22.258z"/><path fill="#66757F" d="M8.676 29.652c1.011.507 1.787 1.051 1.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f992.svg b/browser/components/torpreferences/content/bridgemoji/1f992.svg new file mode 100644 index 000000000000..233e3c989dc0 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f992.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M22.217 35.615h-.002c-.804-.142-1.34-.908-1.198-1.712l.59-3.344s.68-3.165-1.076-5.449c1.259-1.171 5.024.085 5.024.085l-1.626 9.221c-.142.804-.908 1.34-1.712 1.199zm-12.692-.021h-.002c-.804-.142-1.34-.908-1.198-1.712l1.312-7.025s.503-2.419.503-4.439c1.142-.439 2.723 2.757 2.723 2.757l-1.626 9.221c-.143.803-.909 1.339-1.712 1.198zm21.277-9.823c-.537 0-.977-.431-.985-.969-.012-.723-.304-4.326-4.925-4.326-.545 0-.985-.441-. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f993.svg b/browser/components/torpreferences/content/bridgemoji/1f993.svg new file mode 100644 index 000000000000..2cb4b9eb2e8b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f993.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M23.283 23.275s1.374 1.635 2.733 10.047c.143.883.201 1.775.217 2.678H36V7.448C31.613 3.975 25.601 3.259 18.322 5.69c0 0-5.408-3-6.147-3.739-.719-.72-1.857-1.556-1.235.35.364 1.112.764 2.373 2.358 4.862-3.436 2.036-4.513 4.68-8.558 13.341C1.652 27.12.08 29.269.937 31.797c1.13 3.337 5.316 5.595 8.844 3.021 1.919-1.4 2.246-3.913 6.225-6.223 3.653-.065 7.277-1.604 7.277-5.32z"/><path fill="#292F33" d="M36 6.0 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f994.svg b/browser/components/torpreferences/content/bridgemoji/1f994.svg new file mode 100644 index 000000000000..ebbfc2ad25cd --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f994.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#6D6E71" d="M28.688 20.312C28.688 26.217 23.904 31 18 31c-5.903 0-10.688-4.783-10.688-10.688 0-5.903 4.786-10.689 10.688-10.689 5.904.001 10.688 4.786 10.688 10.689z"/><path fill="#662113" d="M26 33.5H10c-1.665 0-2.479-1.339-2.763-2.31l-2.664-.056c-.153-.003-.297-.077-.389-.2-.092-.122-.123-.281-.083-.43l.594-2.216-2.446-.651c-.152-.041-.276-.15-.335-.296s-.046-.311.035-.445l1.199-1.993-2.156-1.192c-.139-.077-.233-.2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f995.svg b/browser/components/torpreferences/content/bridgemoji/1f995.svg new file mode 100644 index 000000000000..fb046c69c7bc --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f995.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M17.68 22s1.937 7.873 1.187 9.373c-2.373 4.746-1.187 4.627 0 4.627h2.373c2.373 0-1.187-14-1.187-14H17.68zM5.255 19.387s-.436 7.993-1.187 9.493C1.695 33.626 1.695 36 2.882 36h2.373c1.186 0 1.187-4.154 1.187-5.34 0-1.187 1.187-8.603 1.187-8.603l-2.374-2.67z"/><path fill="#77B255" d="M12.374 5.251c-2.068.017-4.209-.435-5.523 2.099-1.404 2.709-2.065 8.579.776 9.664 2.479.947 7.933-1.187 13.866 1.187 5.933 2.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f998.svg b/browser/components/torpreferences/content/bridgemoji/1f998.svg new file mode 100644 index 000000000000..8a72b40a7af2 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f998.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BF6952" d="M6.513.886c0 .984.649 3.926 1.153 5.047s-.505.35-1.442-.771-1.657-2.244-1.225-3.435S6.513-.446 6.513.886z"/><path fill="#D99E82" d="M.314 10.699c-.004.961 1.22 2.097 2.883 1.682 1.333-.332 3.234-1.359 3.316-.561.082.798-1.179 3.471-.629 6.276.93 4.74 2.379 8.873 7.201 10.095 0 0 .723 2.775 1.479 3.986.694 1.111 1.029 2.022.45 2.215-.579.193-3.472.386-4.694.579C9.099 35.164 8.906 36 10.256 36H17.2c.707 0 . [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f999.svg b/browser/components/torpreferences/content/bridgemoji/1f999.svg new file mode 100644 index 000000000000..b505faf82d7a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f999.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M6.755 2.246c-.443-.368-1.05-.976-1.629-1.299-.497-.277-.247.918.173 1.391.421.473 1.824 1.342 2.455 1.815.631.473.936.398.315-.473-.649-.911-1.314-1.434-1.314-1.434z"/><path fill="#D99E82" d="M8.191.736c.328.339.735 2.394.735 2.394s1.282.092 2.407.786c4.5 2.776 2.542 9.542 3.944 11.102.432.48 9.681-1.643 14.222.544 3.844 1.852 3.083 4.646 4.083 5.271.758.474-2 1.25-2.578-2.313-.506 11.147-1.072 13.867-1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f99a.svg b/browser/components/torpreferences/content/bridgemoji/1f99a.svg new file mode 100644 index 000000000000..7606d382ac63 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f99a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M14.5 36c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L16 33.293V31.5c0-.276.224-.5.5-.5s.5.224.5.5v2.207l-2.146 2.146c-.098.098-.226.147-.354.147z"/><path fill="#292F33" d="M16.5 34h-3c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h3c.276 0 .5.224.5.5s-.224.5-.5.5zm5 2c-.128 0-.256-.049-.354-.146L19 33.707V31.5c0-.276.224-.5.5-.5s.5.224.5.5v1.793l1.854 1.854c.195.195.195.512 0 .707-.098.097-.226.146-.354.14 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f99c.svg b/browser/components/torpreferences/content/bridgemoji/1f99c.svg new file mode 100644 index 000000000000..f7f743c52258 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f99c.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M17.5 35c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L19 32.293V29.5c0-.276.224-.5.5-.5s.5.224.5.5v3.207l-2.146 2.146c-.098.098-.226.147-.354.147z"/><path fill="#66757F" d="M19.5 33h-3c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h3c.276 0 .5.224.5.5s-.224.5-.5.5zm3 2c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L24 32.293V29.5c0-.276.224-.5.5-.5s.5.224.5.5v3.207l-2.146 2.146c-.098.098-.226.147-.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f99d.svg b/browser/components/torpreferences/content/bridgemoji/1f99d.svg new file mode 100644 index 000000000000..30c88720fb80 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f99d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.668 5.616C9.032 2.479 4.439 1.005 3.584 2.298s.707 10.152 1.757 9.967c1.051-.185 5.327-6.649 5.327-6.649z"/><path fill="#292F33" d="M9.841 7.674c-1.27-2.68-4.696-4.82-5.304-3.745-.435.771.122 5.263.757 7.696l4.547-3.951z"/><path fill="#99AAB5" d="M25.284 5.616c1.636-3.137 6.228-4.611 7.084-3.318s-.708 10.152-1.758 9.967c-1.051-.185-5.326-6.649-5.326-6.649z"/><path fill="#292F33" d="M26.36 7.674c1.231- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f99e.svg b/browser/components/torpreferences/content/bridgemoji/1f99e.svg new file mode 100644 index 000000000000..8df2a7467606 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f99e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#BE1931"><path d="M14.847 22.402h-.064c-2.117-.069-4.919-1.006-6.246-5.077-.135-.413.089-.864.503-.999.414-.135.857.085.992.499l.003.011c.312.959 1.263 3.876 4.8 3.991.435.015.776.378.762.812-.014.415-.344.743-.75.763zm-5.348 5.637c.151-.221.411-.359.698-.342 3.034.181 4.578-1.938 5.086-2.634.256-.352.749-.429 1.1-.173.352.256.414.747.173 1.1-1.698 2.33-3.869 3.434-6.453 3.28-.434-.026-.766-.399-.74-.834.01-.148.059-.28 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a3.svg b/browser/components/torpreferences/content/bridgemoji/1f9a3.svg new file mode 100644 index 000000000000..1aa87190b9ea --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M9.396 20.496s2.053 6.29 2.053 8.144.023 3.271-.374 4.463c-.397 1.192-.066 1.523 1.523 1.589 1.589.066 3.774 0 3.973-1.192.199-1.192-.156-1.55-.089-2.742.066-1.192.331-4.37.53-4.701.199-.331 3.906.662 4.635.927s3.046.265 3.112 1.059c.066.795.487 4.86.288 5.655-.199.795.397.993 2.251.927 1.986-.071 3.112-.463 2.979-1.324-.132-.861-.222-2.146.043-3.139s1.258-3.84 1.324-4.767c0 0 .927-2.053.861-3.575-.066-1. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a4.svg b/browser/components/torpreferences/content/bridgemoji/1f9a4.svg new file mode 100644 index 000000000000..1dbac1e3177b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E08110" d="M17.338 26.109c0 1.515-.032 2.456-.771 2.813-.739.357-3.354.065-3.805.339-.45.274-.845.792-.42.78.425-.012 1.004.13 1.004.13s-.821.222-1.127.531-.464.961-.148.923c.316-.038 1.869-.427 2.177-.429 0 0-.386.482-.429.816-.043.335.229.478.229.478s1.118-.495 1.551-.697c.433-.202 1.161-.83 1.504-.977.343-.147.768-.158 2.126.249 0 0 .016-.655-.51-.859-.526-.205-.915-.058-.802-.847.134-.936.436-2.834.713-3.342.278 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a5.svg b/browser/components/torpreferences/content/bridgemoji/1f9a5.svg new file mode 100644 index 000000000000..7371a8ed19f1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7A5C44" d="M6 21c-1.105 0-2-.895-2-2V4c0-1.105.895-1 2-1s2-.105 2 1c0 0-.606 6.424 0 11.997C8.54 20.971 12 22 12 22c0 1.105-4.895-1-6-1zm14 4.999c-1.105 0-2-.895-2-2v-21c0-1.105.895-1 2-1s2-.105 2 1c0 0-.446 5.108-.125 9.297.32 4.187.125 11.703.125 11.703 0 1.104-.895 2-2 2z"/><path fill="#662113" d="M36 4L0 8V4l36-2z"/><path fill="#A78E81" d="M22.644 18.406c-.633 1.126-1.363 1.809-2.16 2.193-.402.041-1.132-.085-1.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a6.svg b/browser/components/torpreferences/content/bridgemoji/1f9a6.svg new file mode 100644 index 000000000000..5ea0173a5008 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A78E81" d="M2.381 8.671c-1.573 0-2.359.786-1.573 1.573 1.573 1.573 3.145 1.573 3.931.786L2.381 8.671zm6.29-6.29c0-1.573.786-2.359 1.573-1.573 1.573 1.573 1.573 3.145.786 3.931L8.671 2.381zm-4.717 9.435s8.547 14.433 14.939 16.512c3.344 1.087 5.692.599 7.863-1.573s2.406-4.447 1.573-7.863C26.937 13.188 11.816 3.954 11.816 3.954l-7.862 7.862z"/><path fill="#A78E81" d="M16.129 26.852c4.231 5.36 8.793 7.807 10.465 6.519 1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a7.svg b/browser/components/torpreferences/content/bridgemoji/1f9a7.svg new file mode 100644 index 000000000000..038284558534 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E26000" d="M36 32c0-12-2-28-18-28S0 20 0 32h8v-5c0-1 1-1 1 0 0 7 4 6 4 6l2 2 1-1c0-.552 1.448-1 2-1s2 .448 2 1l1 1 2-2s4 1 4-6c0-1 1-1 1 0v5h8z"/><circle fill="#E26000" cx="18" cy="13.5" r="11.5"/><path fill="#D9B981" d="M32 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1v-1s-1-1-4-1zM4 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 . [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a9.svg b/browser/components/torpreferences/content/bridgemoji/1f9a9.svg new file mode 100644 index 000000000000..aaa5cfa26d38 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9a9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M22.903 27.55c1.218-.812 2.232-.783 3.073-.058-.435-1.131-2.348-3.624-2.348-3.624l-.725 3.682z"/><path fill="#F4ABBA" d="M22.949 27.679c-.03 0-.06-.002-.091-.006-.401-.05-.686-.415-.637-.816l.426-3.448c.023-.188.117-.358.264-.478l4.448-3.624-7.108-3.833c-.356-.192-.488-.636-.296-.992.193-.356.636-.489.992-.297l8.072 4.353c.214.116.357.332.381.575.023.244-.077.482-.267.636l-5.07 4.13-.39 3.156c-.044.373-.3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ad.svg b/browser/components/torpreferences/content/bridgemoji/1f9ad.svg new file mode 100644 index 000000000000..6904e81a5733 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9ad.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#99AAB5"><path d="M3.016 5.201c-.062 0-.116-.043-.128-.105-.105-.555-.092-1.586.168-1.875.047-.053.129-.058.184-.01.053.048.058.13.01.184-.159.176-.216 1.072-.106 1.652.013.071-.033.139-.104.152-.008.002-.016.002-.024.002zm.517.9c-.057 0-.109-.038-.125-.096-.203-.74-.075-1.858-.008-2.097.019-.068.093-.107.16-.09.069.019.109.091.09.16-.069.246-.172 1.299.008 1.959.019.069-.022.141-.091.16-.011.003-.023.004-.034.004z"/><p [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c1.svg b/browser/components/torpreferences/content/bridgemoji/1f9c1.svg new file mode 100644 index 000000000000..1f966c363b0f --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9c1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BBDDF5" d="M5 21.875s1.589 5.727 2 8.482c.464 3.111 3.571 5.571 11 5.571s10.536-2.461 11-5.571c.411-2.755 2-8.482 2-8.482H5z"/><path fill="#662113" d="M5.094 21.969c.25 1.219.694 1.994 1.344 1.594.65-.4 1.65-.193 1.344.625-.281.75.969 1.094 1.5.656.509-.419 1.555-.881 1.656.062.094.875 1.168 1.11 1.656.469.5-.656 1.875-.394 2.125.406s1.594.688 1.969.125c.355-.533.713-.885 1.312-.885V25c.6 0 .957.373 1.312.906.375.56 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c3.svg b/browser/components/torpreferences/content/bridgemoji/1f9c3.svg new file mode 100644 index 000000000000..51a3f26d4d9d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9c3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E3A919" d="M28.337 32.563l-2.579 3.082c-.552.553-1.758.007-1.758-.545V12.001c0-.552 2.372-4.501 5-4.501l-.028 23.007c0 1.134-.093 1.308-.635 2.056z"/><path fill="#FFD983" d="M26 10.454H9l.194-.348L12.74 7.5c.486-.379.831-.5 1.383-.5h14.363c.188 0 .514.277.344.47L26 10.454z"/><path fill="#FFCC4D" d="M25 36H10c-.552 0-1-.448-1-1V10.454S9.448 10 10 10h15c.552 0 1 .454 1 .454V35c0 .552-.448 1-1 1z"/><circle fill="#F4900 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c5.svg b/browser/components/torpreferences/content/bridgemoji/1f9c5.svg new file mode 100644 index 000000000000..ab68cb1d6c19 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9c5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D39954" d="M26.617 32.441c-.02-.039-.373-.678-1.025-1.172.103-.421.056-.835-.307-1.103-.9-.662-8.82.226-9.386 3.057-.234 1.171.588 1.171 1.038.809-.137.499-.212 1.011-.169 1.49.024.269.261.467.531.444.029-.002.057-.007.084-.015.225-.06.381-.275.36-.516-.03-.334.022-.694.111-1.051.201.18.424.327.686.269.312-.07.51-.378.64-.712.015.212.046.348.05.363.069.259.333.411.593.345l.006-.002c.257-.069.411-.333.348-.591-.004-. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c7.svg b/browser/components/torpreferences/content/bridgemoji/1f9c7.svg new file mode 100644 index 000000000000..cc92a9d18792 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9c7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#939598" cx="18" cy="26" rx="18" ry="10"/><ellipse fill="#CCD6DD" cx="18" cy="24" rx="18" ry="10"/><path fill="#F4900C" d="M15.714 32.54L2.575 24.857c-1.262-.738-.929-3.558-.929-4.785l14.069-6.657c1.262-.738 3.308-.738 4.57 0L34.37 20.26c0 1.689.316 3.859-.947 4.597L20.285 32.54c-1.262.738-3.309.738-4.571 0z"/><path fill="#FFAC33" d="M15.714 29.279L2.575 21.596c-1.262-.738-1.262-1.934 0-2.672l13.139-7.683c1.262-.7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c9.svg b/browser/components/torpreferences/content/bridgemoji/1f9c9.svg new file mode 100644 index 000000000000..16b0db823d27 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9c9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8A4B38" d="M26.875 14.6C25.1 12.778 21.55 12.778 18 12.778s-7.1 0-8.875 1.822c-2.663 2.733-5.325 9.72-3.55 15.186C7.35 35.252 15.132 35.814 18 35.814s10.65-.562 12.425-6.028c1.775-5.465-.887-12.453-3.55-15.186z"/><path fill="#A5503C" d="M25.58 14.412c-1.516-1.556-4.548-1.556-7.58-1.556s-6.064 0-7.58 1.556c-2.274 2.334-4.548 8.302-3.032 12.969C8.904 32.049 15.55 32.529 18 32.529s9.096-.48 10.611-5.148c1.516-4.668-.75 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9d9.svg b/browser/components/torpreferences/content/bridgemoji/1f9d9.svg new file mode 100644 index 000000000000..553708315577 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9d9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#C63900" cx="18" cy="19.024" rx="15" ry="3.529"/><path fill="#FA743E" d="M26.276 28.276h-16c-2.486 0-4.774 1.443-5.762 3.449-.368-.415-.907-.619-1.514-.619-1.1 0-2 .935-2 1.998V36h31v-1.931c0-3.199-2.411-5.793-5.724-5.793z"/><path fill="#FFDC5D" d="M14 25v3.234c0 .004.011.007.015.011.132.237 3.737 6.739 3.989 6.739.253 0 3.854-6.502 3.985-6.739.004-.004.01-.007.01-.011V25H14z"/><path fill="#F9CA55" d="M14 27.598c1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9da.svg b/browser/components/torpreferences/content/bridgemoji/1f9da.svg new file mode 100644 index 000000000000..5c9ea3625c0a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9da.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#ABDFFF" d="M20.769 20.273c-4.558 6.089-5.676 12.675-2.497 14.71 3.179 2.035 9.451-1.252 14.008-7.341 4.558-6.089 2.752-17.029 2.497-16.631-1.777 2.774-9.45 3.173-14.008 9.262z"/><path fill="#ABDFFF" d="M15.255 20.273c4.558 6.089 5.676 12.675 2.498 14.71-3.179 2.035-9.451-1.252-14.009-7.341S.904 10.673 1.247 11.011C5 14.71 10.698 14.184 15.255 20.273z"/><path fill="#55ACEE" d="M4.598 17.829c-.484-.808-1.158-1.652-.77 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9dc.svg b/browser/components/torpreferences/content/bridgemoji/1f9dc.svg new file mode 100644 index 000000000000..52f120c41f49 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9dc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e0.svg b/browser/components/torpreferences/content/bridgemoji/1f9e0.svg new file mode 100644 index 000000000000..653427da92a8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9e0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M29.896 26.667c.003.283-.07.653-.146.958-.531 2.145-2.889 4.552-6.208 4.333-3.008-.198-5.458-1.642-5.458-3.667s2.444-3.667 5.458-3.667 6.335.018 6.354 2.043z"/><path fill="#DD2E44" d="M23.542 24.964c-1.619 0-5.314.448-6.162.448-1.498 0-2.713.94-2.713 2.1 0 .558.286 1.062.744 1.438 0 0 1.006 1.009 2.818.525.793-.212 2.083-1.786 4.354-2.036 1.131-.125 3.25.75 6.974.771.16-.344.193-.583.193-.583 0-2.027-3.19 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e2.svg b/browser/components/torpreferences/content/bridgemoji/1f9e2.svg new file mode 100644 index 000000000000..c2dd6c6f2f1e --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9e2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse transform="rotate(-87.495 21.25 5.018)" fill="#2B7BB9" cx="21.249" cy="5.018" rx=".944" ry="1.565"/><path fill="#292F33" d="M29.831 27.74s3.523 1.385 5.185.088c.125-1.17-3.311-2.035-3.311-2.035l-1.874 1.947zM7.527 25.549S2.271 33.375.77 32.031c0 0-.425-1.397 1.23-4.218 1.656-2.822 5.527-2.264 5.527-2.264z"/><path fill="#1C6399" d="M19.766 4.82s-8.537.43-13.735 16.348c7.494 0 16.785.555 16.785.555s7.799 3.982 8.889 4.469 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e6.svg b/browser/components/torpreferences/content/bridgemoji/1f9e6.svg new file mode 100644 index 000000000000..44fc31080aaa --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9e6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M27 19.276c-.983 0-1.893.294-2.667.784v4.549h-2.3c.175 2.603 2.319 4.667 4.966 4.667 2.761 0 5-2.239 5-5v-5H27z"/><path fill="#1C6399" d="M22.995 22.999l.005-16 9 .003-.005 16z"/><path fill="#1C6399" d="M24.202 21.451l6.354 6.354-6.878 6.878-6.354-6.354z"/><path fill="#55ACEE" d="M30 4h-5c-1.1 0-2 .9-2 2v2h9V6c0-1.1-.9-2-2-2zM15 15.276c-.983 0-1.893.294-2.667.784v4.549h-2.3c.175 2.603 2.319 4.667 4.966 4. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e9.svg b/browser/components/torpreferences/content/bridgemoji/1f9e9.svg new file mode 100644 index 000000000000..ae4bf566814b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9e9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M26.093 4.612c-.498.498-.629.839-.728 1.029-.66 1.266-1.455 1.676-2.78.351-.13-.13-4.087-4.267-4.741-5.017-.427-.49-1.081-.64-1.584-.262-.38.286-4.035 3.273-5.035 4.507-.774.955-.8 2.134-.079 2.856.326.326.727.449 1.151.578.552.169 1.763.068 2.47.775 1.133 1.133.54 2.924-.917 4.421-1.497 1.457-3.288 2.05-4.421.917-.708-.708-.606-1.918-.775-2.47-.129-.424-.252-.824-.578-1.151-.721-.721-1.9-.694-2.856.079-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ea.svg b/browser/components/torpreferences/content/bridgemoji/1f9ea.svg new file mode 100644 index 000000000000..8116cfa1ca01 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9ea.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M14.563 14.414L25.47 3.505l6.961 6.962-10.908 10.908z"/><path fill="#68E090" d="M8.103 34.399C2.5 34 1.5 30.062 1.635 27.932c.322-5.07 15.601-16.551 15.601-16.551l12.517 1.93c.001 0-17.389 21.392-21.65 21.088z"/><path fill="#8899A6" d="M32.326 3.708C29.405.787 26.104-.649 24.954.502c-.013.013-.022.031-.034.044-.006.006-.015.008-.021.014L2.295 23.164c-1.412 1.412-2.19 3.29-2.19 5.288 0 1.997.778 3.875 2.19 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ec.svg b/browser/components/torpreferences/content/bridgemoji/1f9ec.svg new file mode 100644 index 000000000000..689cc3e440fa --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9ec.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M3.019 26.246l3.432 3.432-.923.922-3.432-3.431z"/><path fill="#FFD983" d="M6.362 29.587l3.431 3.432-.923.923-3.43-3.432z"/><path fill="#FFAC33" d="M6.273 24.237l3.432 3.432-.923.923L5.35 25.16z"/><path fill="#EA596E" d="M8.998 26.962l3.432 3.432-.923.923-3.431-3.432zm3.909-9.359l3.431 3.432-.923.923-3.431-3.432z"/><path fill="#FFAC33" d="M15.631 20.329l3.432 3.431-.923.923-3.432-3.431z"/><path fill="#77B2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ed.svg b/browser/components/torpreferences/content/bridgemoji/1f9ed.svg new file mode 100644 index 000000000000..fd3d583e58a9 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9ed.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F4900C" cx="18" cy="18" r="18"/><circle fill="#FFD983" cx="18" cy="18" r="14.5"/><circle fill="#F5F8FA" cx="18" cy="18" r="13"/><path fill="#CCD6DD" d="M18 8l1.531 6.304 5.54-3.375-3.375 5.54L28 18l-6.304 1.531 3.375 5.54-5.54-3.375L18 28l-1.531-6.304-5.54 3.375 3.375-5.54L8 18l6.304-1.531-3.375-5.54 5.54 3.375z"/><path fill="#292F33" d="M17.343 20.748l8.777 5.381-5.379-8.778z"/><path fill="#DD2E44" d="M18.657 15. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ee.svg b/browser/components/torpreferences/content/bridgemoji/1f9ee.svg new file mode 100644 index 000000000000..c619bb0eb5e7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9ee.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M3 16v-2h30v2zm0 7v-2h30v2zm0 7v-2h30v2zM3 9V7h30v2z"/><path fill="#D5AB88" d="M35 33V1c0-.552-.448-1-1-1h-1c-.552 0-1 .448-1 1H4c0-.552-.448-1-1-1H2c-.552 0-1 .448-1 1v32h34zM4 4h28v29H4V4z"/><path fill="#3B94D9" d="M19 5.5c-.829 0-1.5.671-1.5 1.5 0-.829-.671-1.5-1.5-1.5s-1.5.671-1.5 1.5c0-.829-.671-1.5-1.5-1.5s-1.5.671-1.5 1.5c0-.829-.671-1.5-1.5-1.5S8.5 6.171 8.5 7c0-.829-.671-1.5-1.5-1.5S5.5 6.171 5.5 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f2.svg b/browser/components/torpreferences/content/bridgemoji/1f9f2.svg new file mode 100644 index 000000000000..e81b4644e293 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9f2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M19.469 8.319l-3.854-4.671c-.355-.43-.991-.491-1.421-.136l-3.376 2.785 5.138 6.228 3.376-2.785c.431-.355.492-.991.137-1.421z"/><path fill="#BE1931" d="M29.543 25.021l-6.228-5.138s-2.395 3.132-5.006 6.152c-1.986 2.298-6.093 2.215-8.406-.098s-2.395-6.42-.098-8.406c3.02-2.611 6.152-5.006 6.152-5.006l-5.138-6.228s-5.122 3.928-6.613 5.43c-5.468 5.508-5.487 14.418.001 19.906s14.398 5.468 19.906.001c1.502-1.491 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f5.svg b/browser/components/torpreferences/content/bridgemoji/1f9f5.svg new file mode 100644 index 000000000000..3210fbeb543a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9f5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#553788" d="M35 36c-.419 0-.809-.265-.948-.684C33.388 33.326 31.595 32 25 32c-.553 0-1-.447-1-1s.447-1 1-1c5.635 0 9.653.797 10.948 4.684.175.524-.108 1.091-.632 1.265-.105.034-.212.051-.316.051z"/><path fill="#553788" d="M3 3h22v30H3z"/><path fill="#C1694F" d="M26 4H2c-.55 0-2-3-2-3 0-.55.45-1 1-1h26c.55 0 1 .45 1 1 0 0-1.45 3-2 3zm0 28H2c-.55 0-2 3-2 3 0 .55.45 1 1 1h26c.55 0 1-.45 1-1 0 0-1.45-3-2-3z"/><path fill= [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f9.svg b/browser/components/torpreferences/content/bridgemoji/1f9f9.svg new file mode 100644 index 000000000000..2bcbda87e3e8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1f9f9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M19.175 16.825c-.706-.706-.706-1.861 0-2.567L32.433 1C33.139.294 34.294.294 35 1c.706.706.706 1.861 0 2.567L21.742 16.825c-.706.706-1.861.706-2.567 0z"/><path fill="#66757F" d="M8.839 27.365l-.204-.204c-.941-.941-.941-2.48 0-3.42l8.35-8.35c.941-.941 2.48-.941 3.42 0l.204.204c.941.941.941 2.48 0 3.42l-8.35 8.35c-.94.941-2.48.941-3.42 0z"/><path fill="#FFCC4D" d="M19.389 26.341c1.688-1.688.671-5.441-1.809-7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa73.svg b/browser/components/torpreferences/content/bridgemoji/1fa73.svg new file mode 100644 index 000000000000..03e70ca89e71 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa73.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M31 6V1.955c0-.527-.428-.955-.955-.955H5.955C5.428 1 5 1.428 5 1.955V6L0 31l14 4 4-10.545L22 35l14-4-5-25z"/><g fill="#5D9040"><path d="M5 4h26v2H5zm8.782 2h-2.074c-1.378 4.107-5.46 5.399-7.87 5.807l-.421 2.107c3.606-.408 8.9-2.403 10.365-7.914z"/><path d="M32.583 13.914l-.421-2.107c-2.41-.408-6.491-1.701-7.87-5.807h-2.074c1.464 5.511 6.759 7.506 10.365 7.914zM17 6v21.091l1-2.636 1 2.636V6z"/><path d="M18 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa80.svg b/browser/components/torpreferences/content/bridgemoji/1fa80.svg new file mode 100644 index 000000000000..fc9af9be9d2d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa80.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#BE1931" cx="17.722" cy="21.507" rx="12.917" ry="13.993"/><ellipse fill="#A0041E" cx="15.569" cy="21.507" rx="12.917" ry="13.993"/><path fill="#99AAB5" d="M28.298 13.741c-1.643 0-3.457-.825-5.227-1.629-2.124-.966-4.322-1.966-5.46-1.113l-1.167-1.555c2.06-1.544 4.79-.303 7.431.898 2.023.92 4.117 1.868 5.327 1.263.664-.331 1.155-1.195 1.459-2.566l1.899.422c-.444 2-1.259 3.27-2.49 3.885-.558.278-1.153.395-1.772.395z"/ [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa81.svg b/browser/components/torpreferences/content/bridgemoji/1fa81.svg new file mode 100644 index 000000000000..fd8605e46847 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa81.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M22.45 32.289L.592 18.752 6.55.711l18.042 5.958z"/><path fill="#269" d="M20.543 29.5c-.366 0-.719-.201-.895-.551L6.929 3.687c-.249-.493-.05-1.095.443-1.343.494-.249 1.095-.05 1.343.443l12.72 25.264c.248.493.05 1.094-.444 1.343-.143.072-.297.106-.448.106z"/><path fill="#269" d="M3.12 18.48c-.366 0-.718-.201-.894-.55-.249-.493-.05-1.095.443-1.343l18.947-9.54c.49-.25 1.094-.05 1.343.443.248.493.05 1.095-.443 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa83.svg b/browser/components/torpreferences/content/bridgemoji/1fa83.svg new file mode 100644 index 000000000000..3de58a8f2cc5 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa83.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M31.497 6.06s.244-4.293-6.702-3.83c-8.617.574-18.599 9.155-18.95 17.159-.267 6.089 8.109 1.203 11.139-1.96-.045-.045 3.282 1.426 4.752 4.545-3.267 2.733-8.047 4.803-11.644 5.109-6.282.535-8.546-2.727-7.557-9.15C3.758 10 13.588.858 24.604.795c8.377-.048 6.893 5.265 6.893 5.265z"/><path fill="#662113" d="M32.19 32.317c.351-1.768-.27-19.086-4.411-22.615S5.541 7.73 3.881 8.435c-2.24.95-1.352 3.835.184 3.93 5. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa90.svg b/browser/components/torpreferences/content/bridgemoji/1fa90.svg new file mode 100644 index 000000000000..46a0c53cea53 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa90.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="10.694"/><path fill="#F4900C" d="M10.229 22.751c-.985.067-1.689-.308-2.203-.917.214.557.487 1.081.788 1.588.771.289 1.591.41 2.54-.272-.463-.227-.88-.415-1.125-.399zM23.086 8.608c.045.328-.187.5-.75.363-.955-.232-1.793.776-2.274 1.619-.947 1.657-4.854 3.524-4.857 2.087-.001-.679-3.452.843-3.893.161-.417-.644-1.663-.396-1.921-1.168-1.135 1.544-1.869 3.402-2.04 5.422.377.718.864 1.282 1.35 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa91.svg b/browser/components/torpreferences/content/bridgemoji/1fa91.svg new file mode 100644 index 000000000000..8db580193f88 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa91.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A4523A" d="M12 20c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2zm18 0c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M13 2h16v8H13z"/><path fill="#C1694F" d="M16 9h2v13h-2zm4 0h2v13h-2zm4 0h2v13h-2zM7 23c-1.1 0-2 .9-2 2v9c0 1.1.9 2 2 2s2-.9 2-2v-9c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M25 21c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2s2-.9 2-2V23c0-1.1-.9-2-2-2zM12 0c-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa95.svg b/browser/components/torpreferences/content/bridgemoji/1fa95.svg new file mode 100644 index 000000000000..da6e25d06b84 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa95.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#67757F" cx="10.047" cy="16.953" r="1"/><circle fill="#67757F" cx="1.047" cy="25.953" r="1"/><circle fill="#67757F" cx="19.047" cy="25.953" r="1"/><circle fill="#67757F" cx="10.047" cy="34.953" r="1"/><circle fill="#67757F" cx="3.547" cy="19.828" r="1"/><circle fill="#67757F" cx="16.214" cy="32.495" r="1"/><path fill="#292F33" d="M32.339 5.338l-15.45 17.334-3.561-3.56L30.66 3.66z"/><ellipse transform="rotate(-52.01 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fa97.svg b/browser/components/torpreferences/content/bridgemoji/1fa97.svg new file mode 100644 index 000000000000..c9c21ca2a296 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fa97.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M17.483 30.971c-.574.051-1.099-.36-1.168-.93L13.427 5.136c-.069-.57.676-1.133 1.657-1.22.981-.087 1.811.336 1.844.909l1.541 25.024c.031.574-.412 1.07-.986 1.122zm4.199-.146c-.574-.011-1.051-.476-1.058-1.051l-.192-25.071c-.007-.574.791-1.054 1.773-1.034.982.019 1.76.528 1.731 1.102l-1.157 25.045c-.029.574-.522 1.02-1.097 1.009zm4.185.306c-.57-.073-.993-.586-.939-1.158l2.501-24.947c.054-.572.899-.963 1.873- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fab6.svg b/browser/components/torpreferences/content/bridgemoji/1fab6.svg new file mode 100644 index 000000000000..8e70d6cd5c39 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fab6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M4.048 29.644c-.811-.558-1.541-4.073-.936-4.404.738-.402.686.835 2.255 2.362 1.569 1.528 6.47.913 7.708 1.326 1.363.455-6.385 2.533-9.027.716z"/><path fill="#D99E82" d="M5.367 27.603C4 22 4.655 18.919 5.433 16.861 6.8 13.24 16.699 5.169 23.8 2.637 25.678 1.967 31.62 1 35 1c.589 2.332-1.174 6.717-1.62 7.518-1.009 1.81-3.564 4.273-8.646 9.482-.252.258-5.119-.46-5.376-.191-.283.296 4.044 1.579 3.755 1.889-.7 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fad0.svg b/browser/components/torpreferences/content/bridgemoji/1fad0.svg new file mode 100644 index 000000000000..34e68d6b49b1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fad0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M8.089 1s5.858.616 8.54 4.06c3.206 4.117.891 7.962.891 7.962s-4.825-.425-7.03-3.157C7.287 5.896 8.089 1 8.089 1z"/><path fill="#77B255" d="M21.901 1s.913 4.617-1.006 7.47c-2.293 3.41-5.676 2.54-5.676 2.54s-.813-3.784.691-6.106C18.096 1.53 21.901 1 21.901 1z"/><ellipse fill="#5864B7" cx="23.737" cy="11.536" rx="6.916" ry="6.027"/><path fill="#334372" d="M19.34 16.996c0-.851-.124-1.64-.34-2.373 1.231-.409 2 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fad2.svg b/browser/components/torpreferences/content/bridgemoji/1fad2.svg new file mode 100644 index 000000000000..b84ce6a1f480 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fad2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#909B50" d="M13.241 23.993c1.274-1.617 4.455-.891 6.416.535s3.089 4.337 1.901 5.941-4.158 1.96-6.416.416c-2.258-1.545-3.446-4.931-1.901-6.892zm4.455-20.792c2.802.342 3.208 2.97 2.792 5.703-.416 2.733-2.436 5.347-4.693 5.228-2.257-.119-3.149-3.446-2.792-6.238s2.258-4.99 4.693-4.693z"/><path fill="#C1694F" d="M1.3 32.876c-.08 0-.161-.016-.239-.048-.319-.133-.47-.498-.337-.817 2.393-5.756 6.062-8.645 8.72-10.055 1.57-.8 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/1fad6.svg b/browser/components/torpreferences/content/bridgemoji/1fad6.svg new file mode 100644 index 000000000000..9e6894dafeee --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/1fad6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#269" cx="17.5" cy="31.5" rx="8" ry="2"/><path fill="#3B88C3" d="M11.173 31.777s3.297.757 6.371.668c2.539-.074 5.614-.356 6.505-.757 0 0-1.069 1.381-6.416 1.381s-6.46-1.292-6.46-1.292z"/><ellipse fill="#269" cx="17.5" cy="15.25" rx="8.5" ry="2.25"/><path fill="#3B88C3" d="M33.582 16.654c3.518-.202 2.185 1.133 1.072 1.712-.505.262-1.515 1.738-2.098 4.234-.455 1.948-.847 5.658-5.213 5.391-2.994-.183-.045-7.084-.045- [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/23f0.svg b/browser/components/torpreferences/content/bridgemoji/23f0.svg new file mode 100644 index 000000000000..ea9ad1431661 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/23f0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M20 6.042c0 1.112-.903 2.014-2 2.014s-2-.902-2-2.014V2.014C16 .901 16.903 0 18 0s2 .901 2 2.014v4.028z"/><path fill="#FFAC33" d="M9.18 36c-.224 0-.452-.052-.666-.159-.736-.374-1.035-1.28-.667-2.027l8.94-18.127c.252-.512.768-.835 1.333-.835s1.081.323 1.333.835l8.941 18.127c.368.747.07 1.653-.666 2.027-.736.372-1.631.07-1.999-.676L18.121 19.74l-7.607 15.425c-.262.529-.788.835-1.334.835z"/><path fill="#58595 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2600.svg b/browser/components/torpreferences/content/bridgemoji/2600.svg new file mode 100644 index 000000000000..8602baef7e5a --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2600.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M16 2s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2V2zm18 14s2 0 2 2-2 2-2 2h-2s-2 0-2-2 2-2 2-2h2zM4 16s2 0 2 2-2 2-2 2H2s-2 0-2-2 2-2 2-2h2zm5.121-8.707s1.414 1.414 0 2.828-2.828 0-2.828 0L4.878 8.708s-1.414-1.414 0-2.829c1.415-1.414 2.829 0 2.829 0l1.414 1.414zm21 21s1.414 1.414 0 2.828-2.828 0-2.828 0l-1.414-1.414s-1.414-1.414 0-2.828 2.828 0 2.828 0l1.414 1.414zm-.413-18.172s-1.414 1.414-2.828 0 0-2.828 0-2.828l [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2602.svg b/browser/components/torpreferences/content/bridgemoji/2602.svg new file mode 100644 index 000000000000..7c633302e7e8 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2602.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M9 28.5c0-.828.672-1.5 1.5-1.5s1.5.672 1.5 1.5v.5s0 3 3 3 3-3 3-3V3.5c0-.829.671-1.5 1.5-1.5s1.5.671 1.5 1.5V29s0 6-6 6-6-6-6-6v-.5z"/><path fill="#744EAA" d="M19.5 4C28.612 4 36 9.82 36 17c0 0 0 2-1 2s-3-2-3-2H7s-2 2-3 2-1-2-1-2C3 9.82 10.387 4 19.5 4z"/><path fill="#9266CC" d="M19.5 4C26.403 4 32 9.82 32 17c0 0 0 2-2 2s-5-2-5-2H14s-3 2-5 2-2-2-2-2C7 9.82 12.596 4 19.5 4z"/><path fill="#744EAA" d="M19.5 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2604.svg b/browser/components/torpreferences/content/bridgemoji/2604.svg new file mode 100644 index 000000000000..07df915c4f9b --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2604.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M33.662.049c-1.148-.077-5.869-.75-17.522 6.665C4.488 14.129-1.646 26.609 3.604 33.329c1.104 1.413 5.518 4.283 10.682.53 3.247-2.359 4.242-7.52 7.15-14.434 1.986-4.723 6.444-13.594 12.668-17.611 1.942-.97.22-1.72-.442-1.765z"/><path fill="#8CCAF7" d="M16.625 13.651c-.265-1.059.971-4.281 1.324-5.164-6.437 2.929-12.509 11.616-12.47 13.18.006.227.139.305.42.193 5.398-2.166 8.882 1.07 9.807 3.751.095.274.214.4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/260e.svg b/browser/components/torpreferences/content/bridgemoji/260e.svg new file mode 100644 index 000000000000..e65124faa548 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/260e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M36 11.5C36 8.462 33 4 18 4S0 8.462 0 11.5c0 .045.019.076.022.119-.012.196-.022.402-.022.631C0 14.873 2.239 16 5 16s5-1.127 5-3.75c0-.218-.021-.412-.051-.597C12.374 11.302 15.102 11 18 11s5.626.302 8.051.653c-.03.185-.051.379-.051.597 0 2.623 2.238 3.75 5 3.75s5-1.127 5-3.75c0-.225-.009-.429-.024-.621.004-.046.024-.08.024-.129z"/><path fill="#DD2E44" d="M34.934 23c-.482-1.031-2.31-4.19-3.968-7.007C29.408 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2693.svg b/browser/components/torpreferences/content/bridgemoji/2693.svg new file mode 100644 index 000000000000..09f3fe4162e1 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2693.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M30.5 18.572L26 25h2.575c-1.13 3.988-4.445 7.05-8.575 7.81V17h3c1.104 0 2-.896 2-2s-.896-2-2-2h-3v-1.349h-4V13h-3c-1.104 0-2 .896-2 2s.896 2 2 2h3v15.81c-4.13-.76-7.445-3.821-8.575-7.81H10l-4.5-6.428L1 25h3.33C5.705 31.289 11.299 36 18 36s12.295-4.711 13.67-11H35l-4.5-6.428z"/><path fill="#269" d="M18 0c-3.314 0-6 2.686-6 6s2.686 6 6 6 6-2.686 6-6-2.686-6-6-6zm0 9c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2696.svg b/browser/components/torpreferences/content/bridgemoji/2696.svg new file mode 100644 index 000000000000..61af8441c5a7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2696.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M3.923 22.923c-.212.511-.798.751-1.308.539-.51-.213-.751-.798-.539-1.308L6.693 9.616c.212-.51.798-.751 1.307-.539.51.213.751.798.539 1.308L3.923 22.923z"/><path fill="#66757F" d="M13.923 22.154c.212.51-.029 1.095-.539 1.308-.51.212-1.095-.028-1.308-.539L7.461 10.385c-.212-.51.029-1.095.539-1.308.51-.212 1.095.029 1.308.539l4.615 12.538zm10.001.769c-.213.511-.799.751-1.309.539-.51-.213-.75-.798-.538-1.308l [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/26bd.svg b/browser/components/torpreferences/content/bridgemoji/26bd.svg new file mode 100644 index 000000000000..f24749cb5eab --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/26bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F5F8FA" cx="18" cy="18" r="18"/><path d="M18 11c-.552 0-1-.448-1-1V3c0-.552.448-1 1-1s1 .448 1 1v7c0 .552-.448 1-1 1zm-6.583 4.5c-.1 0-.202-.015-.302-.047l-8.041-2.542c-.527-.167-.819-.728-.652-1.255.166-.527.73-.818 1.255-.652l8.042 2.542c.527.167.819.729.652 1.255-.136.426-.53.699-.954.699zm13.625-.291c-.434 0-.833-.285-.96-.722-.154-.531.151-1.085.682-1.239l6.75-1.958c.531-.153 1.085.153 1.238.682.154.531-.151 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/26f2.svg b/browser/components/torpreferences/content/bridgemoji/26f2.svg new file mode 100644 index 000000000000..659c22850c5d --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/26f2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M1 22.923v6.538C1 33.073 8.611 36 18 36s17-2.927 17-6.538v-6.538H1z"/><ellipse fill="#E1E8ED" cx="18" cy="22.923" rx="17" ry="6.538"/><path fill="#AAB8C2" d="M18 20.308c6.7 0 12.314 1.668 13.913 3.923.297-.419.472-.855.472-1.308 0-2.889-6.44-5.231-14.385-5.231S3.615 20.034 3.615 22.923c0 .452.175.889.472 1.308C5.686 21.976 11.3 20.308 18 20.308z"/><ellipse fill="#3B88C3" cx="18" cy="24.231" rx="13.913" ry [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/26f5.svg b/browser/components/torpreferences/content/bridgemoji/26f5.svg new file mode 100644 index 000000000000..c76c0dedfb1f --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/26f5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A7A9AC" d="M20 26c0 .553-.447 1-1 1-.552 0-1-.447-1-1V1c0-.552.448-1 1-1 .553 0 1 .448 1 1v25z"/><path fill="#D1D3D4" d="M3 24h31v8H12c-6 0-9-8-9-8z"/><path fill="#55ACEE" d="M0 30h36v6H0z"/><path fill="#FFAC33" d="M5 22s2-5 5-9 8-8 8-8-1 11-1 16v1s-3-1-6-1-6 1-6 1z"/><path fill="#F4900C" d="M20 2s6 6 9 11c2.771 4.618 4 9 4 9s-3-1-6-1-6 1-6 1v-1c0-9-1-19-1-19z"/><path fill="#E6E7E8" d="M2 24c-.552 0-1 .447-1 1s.448 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2708.svg b/browser/components/torpreferences/content/bridgemoji/2708.svg new file mode 100644 index 000000000000..ebce3afbc783 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2708.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30 23.828c-.391.392-1.023.392-1.414 0l-1.414-1.414c-.392-.391-.392-1.024 0-1.414L30 18.172c.391-.391 1.023-.391 1.414 0l1.414 1.414c.392.391.392 1.024 0 1.414L30 23.828zm-15-15c-.391.392-1.023.392-1.414 0l-1.414-1.414c-.392-.391-.392-1.023 0-1.414L15 3.172c.391-.391 1.023-.391 1.414 0l1.414 1.414c.392.391.392 1.023 0 1.414L15 8.828z"/><path fill="#55ACEE" d="M2 22c2 0 11 1 11 1s1 9 1 11-2 2-3 1-4-6-4-6-5 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/270f.svg b/browser/components/torpreferences/content/bridgemoji/270f.svg new file mode 100644 index 000000000000..a9b69e1b2952 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/270f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M35.222 33.598c-.647-2.101-1.705-6.059-2.325-7.566-.501-1.216-.969-2.438-1.544-3.014-.575-.575-1.553-.53-2.143.058 0 0-2.469 1.675-3.354 2.783-1.108.882-2.785 3.357-2.785 3.357-.59.59-.635 1.567-.06 2.143.576.575 1.798 1.043 3.015 1.544 1.506.62 5.465 1.676 7.566 2.325.359.11 1.74-1.271 1.63-1.63z"/><path fill="#EA596E" d="M13.643 5.308c1.151 1.151 1.151 3.016 0 4.167l-4.167 4.168c-1.151 1.15-3.018 1.15-4 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2728.svg b/browser/components/torpreferences/content/bridgemoji/2728.svg new file mode 100644 index 000000000000..347ad12abbd7 --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2728.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M34.347 16.893l-8.899-3.294-3.323-10.891c-.128-.42-.517-.708-.956-.708-.439 0-.828.288-.956.708l-3.322 10.891-8.9 3.294c-.393.146-.653.519-.653.938 0 .418.26.793.653.938l8.895 3.293 3.324 11.223c.126.424.516.715.959.715.442 0 .833-.291.959-.716l3.324-11.223 8.896-3.293c.391-.144.652-.518.652-.937 0-.418-.261-.792-.653-.938z"/><path fill="#FFCC4D" d="M14.347 27.894l-2.314-.856-.9-3.3c-.118-.436-.513-.738-. [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/bridgemoji/2744.svg b/browser/components/torpreferences/content/bridgemoji/2744.svg new file mode 100644 index 000000000000..258c161bb9bb --- /dev/null +++ b/browser/components/torpreferences/content/bridgemoji/2744.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#88C9F9" d="M19 27.586V8.415l4.828-4.829s.707-.707 0-1.415c-.707-.707-1.414 0-1.414 0L19 5.586V1s0-1-1-1-1 1-1 1v4.586l-3.414-3.415s-.707-.707-1.414 0c-.707.708 0 1.415 0 1.415L17 8.415v19.171l-4.828 4.828s-.707.707 0 1.414 1.414 0 1.414 0L17 30.414V35s0 1 1 1 1-1 1-1v-4.586l3.414 3.414s.707.707 1.414 0 0-1.414 0-1.414L19 27.586z"/><path fill="#88C9F9" d="M34.622 20.866c-.259-.966-1.225-.707-1.225-.707l-6.595 1.767-1 [...] \ No newline at end of file diff --git a/browser/components/torpreferences/content/builtinBridgeDialog.jsm b/browser/components/torpreferences/content/builtinBridgeDialog.jsm new file mode 100644 index 000000000000..6eed194eedf6 --- /dev/null +++ b/browser/components/torpreferences/content/builtinBridgeDialog.jsm @@ -0,0 +1,113 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["BuiltinBridgeDialog"]; + +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +const { + TorSettings, + TorBridgeSource, + TorBuiltinBridgeTypes, +} = ChromeUtils.import("resource:///modules/TorSettings.jsm"); + +class BuiltinBridgeDialog { + constructor(onSubmit) { + this.onSubmit = onSubmit; + this._dialog = null; + } + + static get selectors() { + return { + header: "#torPreferences-builtinBridge-header", + description: "#torPreferences-builtinBridge-description", + radiogroup: "#torPreferences-builtinBridge-typeSelection", + obfsRadio: "#torPreferences-builtinBridges-radioObfs", + obfsDescr: "#torPreferences-builtinBridges-descrObfs", + snowflakeRadio: "#torPreferences-builtinBridges-radioSnowflake", + snowflakeDescr: "#torPreferences-builtinBridges-descrSnowflake", + meekAzureRadio: "#torPreferences-builtinBridges-radioMeekAzure", + meekAzureDescr: "#torPreferences-builtinBridges-descrMeekAzure", + }; + } + + _populateXUL(window, aDialog) { + const selectors = BuiltinBridgeDialog.selectors; + + this._dialog = aDialog; + const dialogWin = this._dialog.parentElement; + dialogWin.setAttribute("title", TorStrings.settings.builtinBridgeTitle); + + this._dialog.querySelector(selectors.header).textContent = + TorStrings.settings.builtinBridgeHeader; + this._dialog.querySelector(selectors.description).textContent = + TorStrings.settings.builtinBridgeDescription; + let radioGroup = this._dialog.querySelector(selectors.radiogroup); + + let types = { + obfs4: { + elemRadio: this._dialog.querySelector(selectors.obfsRadio), + elemDescr: this._dialog.querySelector(selectors.obfsDescr), + label: TorStrings.settings.builtinBridgeObfs4, + descr: TorStrings.settings.builtinBridgeObfs4Description, + }, + snowflake: { + elemRadio: this._dialog.querySelector(selectors.snowflakeRadio), + elemDescr: this._dialog.querySelector(selectors.snowflakeDescr), + label: TorStrings.settings.builtinBridgeSnowflake, + descr: TorStrings.settings.builtinBridgeSnowflakeDescription, + }, + "meek-azure": { + elemRadio: this._dialog.querySelector(selectors.meekAzureRadio), + elemDescr: this._dialog.querySelector(selectors.meekAzureDescr), + label: TorStrings.settings.builtinBridgeMeekAzure, + descr: TorStrings.settings.builtinBridgeMeekAzureDescription, + }, + }; + + TorBuiltinBridgeTypes.forEach(type => { + types[type].elemRadio.setAttribute("label", types[type].label); + types[type].elemRadio.setAttribute("hidden", "false"); + types[type].elemDescr.textContent = types[type].descr; + types[type].elemDescr.removeAttribute("hidden"); + }); + + if ( + TorSettings.bridges.enabled && + TorSettings.bridges.source == TorBridgeSource.BuiltIn + ) { + radioGroup.selectedItem = + types[TorSettings.bridges.builtin_type]?.elemRadio; + } else { + radioGroup.selectedItem = null; + } + + this._dialog.addEventListener("dialogaccept", e => { + this.onSubmit(radioGroup.value); + }); + this._dialog.addEventListener("dialoghelp", e => { + window.top.openTrustedLinkIn( + TorStrings.settings.learnMoreCircumventionURL, + "tab" + ); + }); + + // Hack: see the CSS + this._dialog.style.minWidth = "0"; + this._dialog.style.minHeight = "0"; + } + + init(window, aDialog) { + // defer to later until firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(window, aDialog); + }, 0); + } + + openDialog(gSubDialog) { + gSubDialog.open( + "chrome://browser/content/torpreferences/builtinBridgeDialog.xhtml", + { features: "resizable=yes" }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/builtinBridgeDialog.xhtml b/browser/components/torpreferences/content/builtinBridgeDialog.xhtml new file mode 100644 index 000000000000..61c6110f327a --- /dev/null +++ b/browser/components/torpreferences/content/builtinBridgeDialog.xhtml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="torPreferences-builtinBridge-dialog" + buttons="help,accept,cancel"> + <html:h3 id="torPreferences-builtinBridge-header">​</html:h3> + <description> + <html:div id="torPreferences-builtinBridge-description">​<br/>​</html:div> + </description> + <radiogroup id="torPreferences-builtinBridge-typeSelection"> + <radio id="torPreferences-builtinBridges-radioObfs" value="obfs4" hidden="true"/> + <html:div id="torPreferences-builtinBridges-descrObfs" class="indent" hidden="true">​</html:div> + <radio id="torPreferences-builtinBridges-radioSnowflake" value="snowflake" hidden="true"/> + <html:div id="torPreferences-builtinBridges-descrSnowflake" class="indent" hidden="true">​</html:div> + <radio id="torPreferences-builtinBridges-radioMeekAzure" value="meek-azure" hidden="true"/> + <html:div id="torPreferences-builtinBridges-descrMeekAzure" class="indent" hidden="true">​</html:div> + </radiogroup> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let builtinBridgeDialog = window.arguments[0]; + let dialog = document.getElementById("torPreferences-builtinBridge-dialog"); + builtinBridgeDialog.init(window, dialog); + ]]></script> +</dialog> +</window> diff --git a/browser/components/torpreferences/content/check.svg b/browser/components/torpreferences/content/check.svg new file mode 100644 index 000000000000..34b90800c71b --- /dev/null +++ b/browser/components/torpreferences/content/check.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M6.02301 13L1.18301 8.16099C1.07063 8.04262 1.00892 7.88505 1.01104 7.72185C1.01316 7.55865 1.07893 7.40273 1.19434 7.28732C1.30975 7.17191 1.46567 7.10613 1.62887 7.10402C1.79207 7.1019 1.94964 7.16361 2.06801 7.27599L6.37501 11.584L13.934 4.02299C14.0517 3.90617 14.2107 3.84061 14.3765 3.84061C14.5423 3.84061 14.7014 3.90617 14.819 4.02299C14.9358 4.14063 15.0014 4.29969 15.0014 4.46549C15.0014 4.63128 14.9358 4.79034 14.819 4.90799L6.72901 12.998L6.02301 13Z" fill="context-fill"/> +</svg> diff --git a/browser/components/torpreferences/content/connectionCategory.inc.xhtml b/browser/components/torpreferences/content/connectionCategory.inc.xhtml new file mode 100644 index 000000000000..15cf24cfe695 --- /dev/null +++ b/browser/components/torpreferences/content/connectionCategory.inc.xhtml @@ -0,0 +1,9 @@ +<richlistitem id="category-connection" + class="category" + value="paneConnection" + helpTopic="prefs-connection" + align="center" + hidden="true"> + <image class="category-icon"/> + <label id="torPreferences-labelCategory" class="category-name" flex="1" value="Connection"/> +</richlistitem> diff --git a/browser/components/torpreferences/content/connectionPane.js b/browser/components/torpreferences/content/connectionPane.js new file mode 100644 index 000000000000..c1a069c8cd49 --- /dev/null +++ b/browser/components/torpreferences/content/connectionPane.js @@ -0,0 +1,1157 @@ +"use strict"; + +/* global Services, gSubDialog */ + +const { setTimeout, clearTimeout } = ChromeUtils.import( + "resource://gre/modules/Timer.jsm" +); + +const { + TorSettings, + TorSettingsTopics, + TorSettingsData, + TorBridgeSource, +} = ChromeUtils.import("resource:///modules/TorSettings.jsm"); + +const { TorMonitorService } = ChromeUtils.import( + "resource://gre/modules/TorMonitorService.jsm" +); +const { TorProtocolService } = ChromeUtils.import( + "resource://gre/modules/TorProtocolService.jsm" +); + +const { + TorConnect, + TorConnectTopics, + TorConnectState, + TorCensorshipLevel, +} = ChromeUtils.import("resource:///modules/TorConnect.jsm"); + +const { TorLogDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/torLogDialog.jsm" +); + +const { ConnectionSettingsDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/connectionSettingsDialog.jsm" +); + +const { BridgeQrDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/bridgeQrDialog.jsm" +); + +const { BuiltinBridgeDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/builtinBridgeDialog.jsm" +); + +const { RequestBridgeDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/requestBridgeDialog.jsm" +); + +const { ProvideBridgeDialog } = ChromeUtils.import( + "chrome://browser/content/torpreferences/provideBridgeDialog.jsm" +); + +const { MoatRPC } = ChromeUtils.import("resource:///modules/Moat.jsm"); + +const { QRCode } = ChromeUtils.import("resource://gre/modules/QRCode.jsm"); + +ChromeUtils.defineModuleGetter( + this, + "TorStrings", + "resource:///modules/TorStrings.jsm" +); + +const InternetStatus = Object.freeze({ + Unknown: 0, + Online: 1, + Offline: -1, +}); + +/* + Connection Pane + + Code for populating the XUL in about:preferences#connection, handling input events, interfacing with tor-launcher +*/ +const gConnectionPane = (function() { + /* CSS selectors for all of the Tor Network DOM elements we need to access */ + const selectors = { + category: { + title: "label#torPreferences-labelCategory", + }, + messageBox: { + box: "div#torPreferences-connectMessageBox", + message: "td#torPreferences-connectMessageBox-message", + button: "button#torPreferences-connectMessageBox-button", + }, + torPreferences: { + header: "h1#torPreferences-header", + description: "span#torPreferences-description", + learnMore: "label#torPreferences-learnMore", + }, + status: { + internetLabel: "#torPreferences-status-internet-label", + internetTest: "#torPreferences-status-internet-test", + internetIcon: "#torPreferences-status-internet-statusIcon", + internetStatus: "#torPreferences-status-internet-status", + torLabel: "#torPreferences-status-tor-label", + torIcon: "#torPreferences-status-tor-statusIcon", + torStatus: "#torPreferences-status-tor-status", + }, + quickstart: { + header: "h2#torPreferences-quickstart-header", + description: "span#torPreferences-quickstart-description", + enableQuickstartCheckbox: "checkbox#torPreferences-quickstart-toggle", + }, + bridges: { + header: "h1#torPreferences-bridges-header", + description: "span#torPreferences-bridges-description", + learnMore: "label#torPreferences-bridges-learnMore", + locationGroup: "#torPreferences-bridges-locationGroup", + locationLabel: "#torPreferences-bridges-locationLabel", + location: "#torPreferences-bridges-location", + locationEntries: "#torPreferences-bridges-locationEntries", + chooseForMe: "#torPreferences-bridges-buttonChooseBridgeForMe", + currentHeader: "#torPreferences-currentBridges-header", + currentHeaderText: "#torPreferences-currentBridges-headerText", + currentDescription: "#torPreferences-currentBridges-description", + currentDescriptionText: "#torPreferences-currentBridges-descriptionText", + switch: "#torPreferences-currentBridges-switch", + cards: "#torPreferences-currentBridges-cards", + cardTemplate: "#torPreferences-bridgeCard-template", + card: ".torPreferences-bridgeCard", + cardId: ".torPreferences-bridgeCard-id", + cardHeadingAddr: ".torPreferences-bridgeCard-headingAddr", + cardConnectedLabel: ".torPreferences-bridgeCard-connectedLabel", + cardOptions: ".torPreferences-bridgeCard-options", + cardMenu: "#torPreferences-bridgeCard-menu", + cardQrGrid: ".torPreferences-bridgeCard-grid", + cardQrContainer: ".torPreferences-bridgeCard-qr", + cardQr: ".torPreferences-bridgeCard-qrCode", + cardShare: ".torPreferences-bridgeCard-share", + cardAddr: ".torPreferences-bridgeCard-addr", + cardLearnMore: ".torPreferences-bridgeCard-learnMore", + cardCopy: ".torPreferences-bridgeCard-copyButton", + showAll: "#torPreferences-currentBridges-showAll", + removeAll: "#torPreferences-currentBridges-removeAll", + addHeader: "#torPreferences-addBridge-header", + addBuiltinLabel: "#torPreferences-addBridge-labelBuiltinBridge", + addBuiltinButton: "#torPreferences-addBridge-buttonBuiltinBridge", + requestLabel: "#torPreferences-addBridge-labelRequestBridge", + requestButton: "#torPreferences-addBridge-buttonRequestBridge", + enterLabel: "#torPreferences-addBridge-labelEnterBridge", + enterButton: "#torPreferences-addBridge-buttonEnterBridge", + removeOverlay: "#bridge-remove-overlay", + removeModal: "#bridge-remove-modal", + removeDismiss: "#bridge-remove-dismiss", + removeQuestion: "#bridge-remove-question", + removeWarning: "#bridge-remove-warning", + removeConfirm: "#bridge-remove-confirm", + removeCancel: "#bridge-remove-cancel", + }, + advanced: { + header: "h1#torPreferences-advanced-header", + label: "#torPreferences-advanced-label", + button: "#torPreferences-advanced-button", + torLogsLabel: "label#torPreferences-torLogs", + torLogsButton: "button#torPreferences-buttonTorLogs", + }, + }; /* selectors */ + + const retval = { + // cached frequently accessed DOM elements + _enableQuickstartCheckbox: null, + + _internetStatus: InternetStatus.Unknown, + + _controller: null, + + _currentBridge: "", + + // populate xul with strings and cache the relevant elements + _populateXUL() { + // saves tor settings to disk when navigate away from about:preferences + window.addEventListener("blur", val => { + TorProtocolService.flushSettings(); + }); + + document + .querySelector(selectors.category.title) + .setAttribute("value", TorStrings.settings.categoryTitle); + + const prefpane = document.getElementById("mainPrefPane"); + + // 'Connect to Tor' Message Bar + + const messageBox = prefpane.querySelector(selectors.messageBox.box); + const messageBoxMessage = prefpane.querySelector( + selectors.messageBox.message + ); + const messageBoxButton = prefpane.querySelector( + selectors.messageBox.button + ); + // wire up connect button + messageBoxButton.addEventListener("click", () => { + TorConnect.beginBootstrap(); + TorConnect.openTorConnect(); + }); + + this._populateMessagebox = () => { + if ( + TorConnect.shouldShowTorConnect && + TorConnect.state === TorConnectState.Configuring + ) { + // set messagebox style and text + if (TorMonitorService.bootstrapErrorOccurred) { + messageBox.parentNode.style.display = null; + messageBox.className = "error"; + messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage; + messageBoxButton.innerText = TorStrings.torConnect.tryAgain; + } else { + messageBox.parentNode.style.display = null; + messageBox.className = "warning"; + messageBoxMessage.innerText = TorStrings.torConnect.connectMessage; + messageBoxButton.innerText = TorStrings.torConnect.torConnectButton; + } + } else { + // we need to explicitly hide the groupbox, as switching between + // the tor pane and other panes will 'unhide' (via the 'hidden' + // attribute) the groupbox, offsetting all of the content down + // by the groupbox's margin (even if content is 0 height) + messageBox.parentNode.style.display = "none"; + messageBox.className = "hidden"; + messageBoxMessage.innerText = ""; + messageBoxButton.innerText = ""; + } + }; + this._populateMessagebox(); + + // Heading + prefpane.querySelector(selectors.torPreferences.header).innerText = + TorStrings.settings.categoryTitle; + prefpane.querySelector(selectors.torPreferences.description).textContent = + TorStrings.settings.torPreferencesDescription; + { + const learnMore = prefpane.querySelector( + selectors.torPreferences.learnMore + ); + learnMore.setAttribute("value", TorStrings.settings.learnMore); + learnMore.setAttribute( + "href", + TorStrings.settings.learnMoreTorBrowserURL + ); + if (TorStrings.settings.learnMoreTorBrowserURL.startsWith("about:")) { + learnMore.setAttribute("useoriginprincipal", "true"); + } + } + + // Internet and Tor status + prefpane.querySelector(selectors.status.internetLabel).textContent = + TorStrings.settings.statusInternetLabel; + prefpane.querySelector(selectors.status.torLabel).textContent = + TorStrings.settings.statusTorLabel; + const internetTest = prefpane.querySelector( + selectors.status.internetTest + ); + internetTest.setAttribute( + "label", + TorStrings.settings.statusInternetTest + ); + internetTest.addEventListener("command", () => { + this.onInternetTest(); + }); + const internetIcon = prefpane.querySelector( + selectors.status.internetIcon + ); + const internetStatus = prefpane.querySelector( + selectors.status.internetStatus + ); + const torIcon = prefpane.querySelector(selectors.status.torIcon); + const torStatus = prefpane.querySelector(selectors.status.torStatus); + this._populateStatus = () => { + switch (this._internetStatus) { + case InternetStatus.Unknown: + internetTest.removeAttribute("hidden"); + break; + case InternetStatus.Online: + internetTest.setAttribute("hidden", "true"); + internetIcon.className = "online"; + internetStatus.textContent = + TorStrings.settings.statusInternetOnline; + break; + case InternetStatus.Offline: + internetTest.setAttribute("hidden", "true"); + internetIcon.className = "offline"; + internetStatus.textContent = + TorStrings.settings.statusInternetOffline; + break; + } + if (TorConnect.state === TorConnectState.Bootstrapped) { + torIcon.className = "connected"; + torStatus.textContent = TorStrings.settings.statusTorConnected; + } else if (TorConnect.hasBootstrapEverFailed) { + torIcon.className = "blocked"; + torStatus.textContent = TorStrings.settings.statusTorBlocked; + } else { + torIcon.className = ""; + torStatus.textContent = TorStrings.settings.statusTorNotConnected; + } + }; + this._populateStatus(); + + // Quickstart + prefpane.querySelector(selectors.quickstart.header).innerText = + TorStrings.settings.quickstartHeading; + prefpane.querySelector(selectors.quickstart.description).textContent = + TorStrings.settings.quickstartDescription; + + this._enableQuickstartCheckbox = prefpane.querySelector( + selectors.quickstart.enableQuickstartCheckbox + ); + this._enableQuickstartCheckbox.setAttribute( + "label", + TorStrings.settings.quickstartCheckbox + ); + this._enableQuickstartCheckbox.addEventListener("command", e => { + const checked = this._enableQuickstartCheckbox.checked; + TorSettings.quickstart.enabled = checked; + TorSettings.saveToPrefs().applySettings(); + }); + this._enableQuickstartCheckbox.checked = TorSettings.quickstart.enabled; + Services.obs.addObserver(this, TorSettingsTopics.SettingChanged); + + // Bridge setup + prefpane.querySelector(selectors.bridges.header).innerText = + TorStrings.settings.bridgesHeading; + prefpane.querySelector(selectors.bridges.description).textContent = + TorStrings.settings.bridgesDescription; + { + const learnMore = prefpane.querySelector(selectors.bridges.learnMore); + learnMore.setAttribute("value", TorStrings.settings.learnMore); + learnMore.setAttribute("href", TorStrings.settings.learnMoreBridgesURL); + if (TorStrings.settings.learnMoreBridgesURL.startsWith("about:")) { + learnMore.setAttribute("useoriginprincipal", "true"); + } + } + + // Location + { + const locationGroup = prefpane.querySelector( + selectors.bridges.locationGroup + ); + prefpane.querySelector(selectors.bridges.locationLabel).textContent = + TorStrings.settings.bridgeLocation; + const location = prefpane.querySelector(selectors.bridges.location); + const locationEntries = prefpane.querySelector( + selectors.bridges.locationEntries + ); + const chooseForMe = prefpane.querySelector( + selectors.bridges.chooseForMe + ); + chooseForMe.setAttribute( + "label", + TorStrings.settings.bridgeChooseForMe + ); + chooseForMe.addEventListener("command", e => { + TorConnect.beginAutoBootstrap(location.value); + }); + this._populateLocations = () => { + const currentValue = location.value; + locationEntries.textContent = ""; + const createItem = (value, label, disabled) => { + const item = document.createXULElement("menuitem"); + item.setAttribute("value", value); + item.setAttribute("label", label); + if (disabled) { + item.setAttribute("disabled", "true"); + } + return item; + }; + const addLocations = codes => { + const items = []; + for (const code of codes) { + items.push( + createItem( + code, + TorConnect.countryNames[code] + ? TorConnect.countryNames[code] + : code + ) + ); + } + items.sort((left, right) => left.label.localeCompare(right.label)); + locationEntries.append(...items); + }; + locationEntries.append( + createItem("", TorStrings.settings.bridgeLocationAutomatic) + ); + if (TorConnect.countryCodes.length) { + locationEntries.append( + createItem("", TorStrings.settings.bridgeLocationFrequent, true) + ); + addLocations(TorConnect.countryCodes); + locationEntries.append( + createItem("", TorStrings.settings.bridgeLocationOther, true) + ); + } + addLocations(Object.keys(TorConnect.countryNames)); + location.value = currentValue; + }; + this._showAutoconfiguration = () => { + if ( + !TorConnect.shouldShowTorConnect || + !TorMonitorService.bootstrapErrorOccurred + ) { + locationGroup.setAttribute("hidden", "true"); + return; + } + // Populate locations, even though we will show only the automatic + // item for a moment. In my opinion showing the button immediately is + // better then waiting for the Moat query to finish (after a while) + // and showing the controls only after that. + this._populateLocations(); + locationGroup.removeAttribute("hidden"); + if (!TorConnect.countryCodes.length) { + TorConnect.getCountryCodes().then(() => this._populateLocations()); + } + }; + this._showAutoconfiguration(); + } + + // Bridge cards + const bridgeHeader = prefpane.querySelector( + selectors.bridges.currentHeader + ); + bridgeHeader.querySelector( + selectors.bridges.currentHeaderText + ).textContent = TorStrings.settings.bridgeCurrent; + const bridgeSwitch = bridgeHeader.querySelector(selectors.bridges.switch); + bridgeSwitch.addEventListener("change", () => { + TorSettings.bridges.enabled = bridgeSwitch.checked; + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + }); + const bridgeDescription = prefpane.querySelector( + selectors.bridges.currentDescription + ); + bridgeDescription.querySelector( + selectors.bridges.currentDescriptionText + ).textContent = TorStrings.settings.bridgeCurrentDescription; + const bridgeTemplate = prefpane.querySelector( + selectors.bridges.cardTemplate + ); + { + const learnMore = bridgeTemplate.querySelector( + selectors.bridges.cardLearnMore + ); + learnMore.setAttribute("value", TorStrings.settings.learnMore); + learnMore.setAttribute( + "href", + TorStrings.settings.learnMoreBridgesCardURL + ); + if (TorStrings.settings.learnMoreBridgesCardURL.startsWith("about:")) { + learnMore.setAttribute("useoriginprincipal", "true"); + } + } + bridgeTemplate.querySelector( + selectors.bridges.cardConnectedLabel + ).textContent = TorStrings.settings.statusTorConnected; + bridgeTemplate + .querySelector(selectors.bridges.cardCopy) + .setAttribute("label", TorStrings.settings.bridgeCopy); + bridgeTemplate.querySelector(selectors.bridges.cardShare).textContent = + TorStrings.settings.bridgeShare; + const bridgeCards = prefpane.querySelector(selectors.bridges.cards); + const bridgeMenu = prefpane.querySelector(selectors.bridges.cardMenu); + + let emojiAnnotations; + this._addBridgeCard = bridgeString => { + const card = bridgeTemplate.cloneNode(true); + card.removeAttribute("id"); + const grid = card.querySelector(selectors.bridges.cardQrGrid); + card.addEventListener("click", e => { + if ( + card.classList.contains("currently-connected") || + bridgeCards.classList.contains("single-card") + ) { + return; + } + let target = e.target; + let apply = true; + while (target !== null && target !== card && apply) { + // Deal with mixture of "command" and "click" events + apply = !target.classList?.contains("stop-click"); + target = target.parentElement; + } + if (apply) { + if (card.classList.toggle("expanded")) { + grid.classList.add("to-animate"); + grid.style.height = `${grid.scrollHeight}px`; + } else { + // Be sure we still have the to-animate class + grid.classList.add("to-animate"); + grid.style.height = ""; + } + } + }); + const emojis = makeBridgeId(bridgeString).map(e => { + const img = document.createElement("img"); + const cp = e.codePointAt(0).toString(16); + img.setAttribute( + "src", + `chrome://browser/content/torpreferences/bridgemoji/${cp}.svg` + ); + img.setAttribute("alt", e); + img.setAttribute("title", emojiAnnotations[e]); + img.className = "emoji"; + return img; + }); + const idString = TorStrings.settings.bridgeId; + const id = card.querySelector(selectors.bridges.cardId); + const details = parseBridgeLine(bridgeString); + if (details && details.id !== undefined) { + card.setAttribute("data-bridge-id", details.id); + } + // TODO: properly handle "vanilla" bridges? + const type = + details && details.transport !== undefined + ? details.transport + : "vanilla"; + for (const piece of idString.split(/(#[12])/)) { + if (piece == "#1") { + id.append(type); + } else if (piece == "#2") { + id.append(...emojis); + } else { + id.append(piece); + } + } + card.querySelector( + selectors.bridges.cardHeadingAddr + ).textContent = bridgeString; + const optionsButton = card.querySelector(selectors.bridges.cardOptions); + if (TorSettings.bridges.source === TorBridgeSource.BuiltIn) { + optionsButton.setAttribute("hidden", "true"); + } else { + // Cloning the menupopup element does not work as expected. + // Therefore, we use only one, and just before opening it, we remove + // its previous items, and add the ones relative to the bridge whose + // button has been pressed. + optionsButton.addEventListener("click", () => { + const menuItem = document.createXULElement("menuitem"); + menuItem.setAttribute("label", TorStrings.settings.remove); + menuItem.classList.add("menuitem-iconic"); + menuItem.image = "chrome://global/skin/icons/delete.svg"; + menuItem.addEventListener("command", e => { + const strings = TorSettings.bridges.bridge_strings; + const index = strings.indexOf(bridgeString); + if (index !== -1) { + strings.splice(index, 1); + } + TorSettings.bridges.enabled = + bridgeSwitch.checked && !!strings.length; + TorSettings.bridges.bridge_strings = strings.join("\n"); + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + }); + if (bridgeMenu.firstChild) { + bridgeMenu.firstChild.remove(); + } + bridgeMenu.append(menuItem); + bridgeMenu.openPopup(optionsButton, { + position: "bottomleft topleft", + }); + }); + } + const bridgeAddr = card.querySelector(selectors.bridges.cardAddr); + bridgeAddr.setAttribute("value", bridgeString); + const bridgeCopy = card.querySelector(selectors.bridges.cardCopy); + let restoreTimeout = null; + bridgeCopy.addEventListener("command", e => { + this.onCopyBridgeAddress(bridgeAddr); + const label = bridgeCopy.querySelector("label"); + label.setAttribute("value", TorStrings.settings.copied); + bridgeCopy.classList.add("primary"); + + const RESTORE_TIME = 1200; + if (restoreTimeout !== null) { + clearTimeout(restoreTimeout); + } + restoreTimeout = setTimeout(() => { + label.setAttribute("value", TorStrings.settings.bridgeCopy); + bridgeCopy.classList.remove("primary"); + restoreTimeout = null; + }, RESTORE_TIME); + }); + if (details && details.id === this._currentBridge) { + card.classList.add("currently-connected"); + bridgeCards.prepend(card); + } else { + bridgeCards.append(card); + } + // Add the QR only after appending the card, to have the computed style + try { + const container = card.querySelector(selectors.bridges.cardQr); + const style = getComputedStyle(container); + const width = style.width.substring(0, style.width.length - 2); + const height = style.height.substring(0, style.height.length - 2); + new QRCode(container, { + text: bridgeString, + width, + height, + colorDark: style.color, + colorLight: style.backgroundColor, + document, + }); + container.parentElement.addEventListener("click", () => { + this.onShowQr(bridgeString); + }); + } catch (err) { + // TODO: Add a generic image in case of errors such as code overflow. + // It should never happen with correct codes, but after all this + // content can be generated by users... + console.error("Could not generate the QR code for the bridge:", err); + } + }; + this._checkBridgeCardsHeight = () => { + for (const card of bridgeCards.children) { + // Expanded cards have the height set manually to their details for + // the CSS animation. However, when resizing the window, we may need + // to adjust their height. + if ( + card.classList.contains("expanded") || + card.classList.contains("currently-connected") + ) { + const grid = card.querySelector(selectors.bridges.cardQrGrid); + // Reset it first, to avoid having a height that is higher than + // strictly needed. Also, remove the to-animate class, because the + // animation interferes with this process! + grid.classList.remove("to-animate"); + grid.style.height = ""; + grid.style.height = `${grid.scrollHeight}px`; + } + } + }; + this._currentBridgesExpanded = false; + const showAll = prefpane.querySelector(selectors.bridges.showAll); + showAll.setAttribute("label", TorStrings.settings.bridgeShowAll); + showAll.addEventListener("command", () => { + this._currentBridgesExpanded = true; + this._populateBridgeCards(); + }); + const removeAll = prefpane.querySelector(selectors.bridges.removeAll); + removeAll.setAttribute("label", TorStrings.settings.bridgeRemoveAll); + removeAll.addEventListener("command", () => { + this._confirmBridgeRemoval(); + }); + this._populateBridgeCards = () => { + const collapseThreshold = 4; + + const newStrings = new Set(TorSettings.bridges.bridge_strings); + const numBridges = newStrings.size; + if (!newStrings.size) { + bridgeHeader.setAttribute("hidden", "true"); + bridgeDescription.setAttribute("hidden", "true"); + bridgeCards.setAttribute("hidden", "true"); + showAll.setAttribute("hidden", "true"); + removeAll.setAttribute("hidden", "true"); + bridgeCards.textContent = ""; + return; + } + bridgeHeader.removeAttribute("hidden"); + bridgeDescription.removeAttribute("hidden"); + bridgeCards.removeAttribute("hidden"); + bridgeSwitch.checked = TorSettings.bridges.enabled; + bridgeCards.classList.toggle("disabled", !TorSettings.bridges.enabled); + bridgeCards.classList.toggle("single-card", numBridges === 1); + + let shownCards = 0; + const toShow = this._currentBridgesExpanded + ? numBridges + : collapseThreshold; + + // Do not remove all the old cards, because it makes scrollbar "jump" + const currentCards = bridgeCards.querySelectorAll( + selectors.bridges.card + ); + for (const card of currentCards) { + const string = card.querySelector(selectors.bridges.cardAddr).value; + const hadString = newStrings.delete(string); + if (!hadString || shownCards == toShow) { + card.remove(); + } else { + shownCards++; + } + } + + // Add only the new strings that remained in the set + for (const bridge of newStrings) { + if (shownCards >= toShow) { + if (this._currentBridge === "") { + break; + } else if (!bridge.includes(this._currentBridge)) { + continue; + } + } + this._addBridgeCard(bridge); + shownCards++; + } + + // If we know the connected bridge, we may have added more than the ones + // we should actually show (but the connected ones have been prepended, + // if needed). So, remove any exceeding ones. + while (shownCards > toShow) { + bridgeCards.lastElementChild.remove(); + shownCards--; + } + + // And finally update the buttons + if (numBridges > collapseThreshold && !this._currentBridgesExpanded) { + showAll.removeAttribute("hidden"); + if (TorSettings.bridges.enabled) { + showAll.classList.add("primary"); + } else { + showAll.classList.remove("primary"); + } + removeAll.setAttribute("hidden", "true"); + if (TorSettings.bridges.enabled) { + // We do not want both collapsed and disabled at the same time, + // because we use collapsed only to display a gradient on the list. + bridgeCards.classList.add("list-collapsed"); + } + } else { + showAll.setAttribute("hidden", "true"); + removeAll.removeAttribute("hidden"); + bridgeCards.classList.remove("list-collapsed"); + } + }; + // Use a promise to avoid blocking the population of the page + // FIXME: Stop using a JSON file, and switch to properties + fetch( + "chrome://browser/content/torpreferences/bridgemoji-annotations.json" + ).then(async res => { + const annotations = await res.json(); + const bcp47 = Services.locale.appLocaleAsBCP47; + const dash = bcp47.indexOf("-"); + const lang = dash !== -1 ? bcp47.substring(dash) : bcp47; + if (bcp47 in annotations) { + emojiAnnotations = annotations[bcp47]; + } else if (lang in annotations) { + emojiAnnotations = annotations[lang]; + } else { + // At the moment, nb does not have annotations! + emojiAnnotations = annotations.en; + } + this._populateBridgeCards(); + }); + this._updateConnectedBridges = () => { + for (const card of bridgeCards.querySelectorAll( + ".currently-connected" + )) { + card.classList.remove("currently-connected"); + } + if (this._currentBridge === "") { + return; + } + // Make sure we have the connected bridge in the list + this._populateBridgeCards(); + // At the moment, IDs do not have to be unique (and it is a concrete + // case also with built-in bridges!). E.g., one line for the IPv4 + // address and one for the IPv6 address, so use querySelectorAll + const cards = bridgeCards.querySelectorAll( + `[data-bridge-id="${this._currentBridge}"]` + ); + for (const card of cards) { + card.classList.add("currently-connected"); + } + const placeholder = document.createElement("span"); + bridgeCards.prepend(placeholder); + placeholder.replaceWith(...cards); + this._checkBridgeCardsHeight(); + }; + try { + const { controller } = ChromeUtils.import( + "resource://torbutton/modules/tor-control-port.js" + ); + // Avoid the cache because we set our custom event watcher, and at the + // moment, watchers cannot be removed from a controller. + controller(true).then(aController => { + this._controller = aController; + // Getting the circuits may be enough, if we have bootstrapped for a + // while, but at the beginning it gives many bridges as connected, + // because tor pokes all the bridges to find the best one. + // Also, watching circuit events does not work, at the moment, but in + // any case, checking the stream has the advantage that we can see if + // it really used for a connection, rather than tor having created + // this circuit to check if the bridge can be used. We do this by + // checking if the stream has SOCKS username, which actually contains + // the destination of the stream. + this._controller.watchEvent( + "STREAM", + event => + event.StreamStatus === "SUCCEEDED" && "SOCKS_USERNAME" in event, + async event => { + const circuitStatuses = await this._controller.getInfo( + "circuit-status" + ); + if (!circuitStatuses) { + return; + } + for (const status of circuitStatuses) { + if (status.id === event.CircuitID && status.circuit.length) { + // The id in the circuit begins with a $ sign + const bridgeId = status.circuit[0][0].substring(1); + if (bridgeId !== this._currentBridge) { + this._currentBridge = bridgeId; + this._updateConnectedBridges(); + } + break; + } + } + } + ); + }); + } catch (err) { + console.warn( + "We could not load torbutton, bridge statuses will not be updated", + err + ); + } + + // Add a new bridge + prefpane.querySelector(selectors.bridges.addHeader).textContent = + TorStrings.settings.bridgeAdd; + prefpane.querySelector(selectors.bridges.addBuiltinLabel).textContent = + TorStrings.settings.bridgeSelectBrowserBuiltin; + { + const button = prefpane.querySelector( + selectors.bridges.addBuiltinButton + ); + button.setAttribute("label", TorStrings.settings.bridgeSelectBuiltin); + button.addEventListener("command", e => { + this.onAddBuiltinBridge(); + }); + } + prefpane.querySelector(selectors.bridges.requestLabel).textContent = + TorStrings.settings.bridgeRequestFromTorProject; + { + const button = prefpane.querySelector(selectors.bridges.requestButton); + button.setAttribute("label", TorStrings.settings.bridgeRequest); + button.addEventListener("command", e => { + this.onRequestBridge(); + }); + } + prefpane.querySelector(selectors.bridges.enterLabel).textContent = + TorStrings.settings.bridgeEnterKnown; + { + const button = prefpane.querySelector(selectors.bridges.enterButton); + button.setAttribute("label", TorStrings.settings.bridgeAddManually); + button.addEventListener("command", e => { + this.onAddBridgeManually(); + }); + } + + { + const overlay = prefpane.querySelector(selectors.bridges.removeOverlay); + this._confirmBridgeRemoval = () => { + overlay.classList.remove("hidden"); + }; + const closeDialog = () => { + overlay.classList.add("hidden"); + }; + overlay.addEventListener("click", closeDialog); + const modal = prefpane.querySelector(selectors.bridges.removeModal); + modal.addEventListener("click", e => { + e.stopPropagation(); + }); + const dismiss = prefpane.querySelector(selectors.bridges.removeDismiss); + dismiss.addEventListener("click", closeDialog); + const question = prefpane.querySelector( + selectors.bridges.removeQuestion + ); + question.textContent = TorStrings.settings.removeBridgesQuestion; + const warning = prefpane.querySelector(selectors.bridges.removeWarning); + warning.textContent = TorStrings.settings.removeBridgesWarning; + const confirm = prefpane.querySelector(selectors.bridges.removeConfirm); + confirm.setAttribute("label", TorStrings.settings.remove); + confirm.addEventListener("command", () => { + this.onRemoveAllBridges(); + closeDialog(); + }); + const cancel = prefpane.querySelector(selectors.bridges.removeCancel); + cancel.setAttribute("label", TorStrings.settings.cancel); + cancel.addEventListener("command", closeDialog); + } + + // Advanced setup + prefpane.querySelector(selectors.advanced.header).innerText = + TorStrings.settings.advancedHeading; + prefpane.querySelector(selectors.advanced.label).textContent = + TorStrings.settings.advancedLabel; + { + const settingsButton = prefpane.querySelector( + selectors.advanced.button + ); + settingsButton.setAttribute( + "label", + TorStrings.settings.advancedButton + ); + settingsButton.addEventListener("command", () => { + this.onAdvancedSettings(); + }); + } + + // Tor logs + prefpane.querySelector(selectors.advanced.torLogsLabel).textContent = + TorStrings.settings.showTorDaemonLogs; + const torLogsButton = prefpane.querySelector( + selectors.advanced.torLogsButton + ); + torLogsButton.setAttribute("label", TorStrings.settings.showLogs); + torLogsButton.addEventListener("command", () => { + this.onViewTorLogs(); + }); + + Services.obs.addObserver(this, TorConnectTopics.StateChange); + }, + + init() { + this._populateXUL(); + + const onUnload = () => { + window.removeEventListener("unload", onUnload); + gConnectionPane.uninit(); + }; + window.addEventListener("unload", onUnload); + + window.addEventListener("resize", () => { + this._checkBridgeCardsHeight(); + }); + window.addEventListener("hashchange", () => { + this._checkBridgeCardsHeight(); + }); + }, + + uninit() { + // unregister our observer topics + Services.obs.removeObserver(this, TorSettingsTopics.SettingChanged); + Services.obs.removeObserver(this, TorConnectTopics.StateChange); + + if (this._controller !== null) { + this._controller.close(); + this._controller = null; + } + }, + + // whether the page should be present in about:preferences + get enabled() { + return TorMonitorService.ownsTorDaemon; + }, + + // + // Callbacks + // + + observe(subject, topic, data) { + switch (topic) { + // triggered when a TorSettings param has changed + case TorSettingsTopics.SettingChanged: { + const obj = subject?.wrappedJSObject; + switch (data) { + case TorSettingsData.QuickStartEnabled: { + this._enableQuickstartCheckbox.checked = obj.value; + break; + } + } + break; + } + // triggered when tor connect state changes and we may + // need to update the messagebox + case TorConnectTopics.StateChange: { + this.onStateChange(); + break; + } + } + }, + + async onInternetTest() { + const mrpc = new MoatRPC(); + let status = null; + try { + await mrpc.init(); + status = await mrpc.testInternetConnection(); + } catch (err) { + console.log("Error while checking the Internet connection", err); + } finally { + mrpc.uninit(); + } + if (status) { + this._internetStatus = status.successful + ? InternetStatus.Online + : InternetStatus.Offline; + this._populateStatus(); + } + }, + + onStateChange() { + this._populateMessagebox(); + this._populateStatus(); + this._showAutoconfiguration(); + this._populateBridgeCards(); + }, + + onShowQr(bridgeString) { + const dialog = new BridgeQrDialog(); + dialog.openDialog(gSubDialog, bridgeString); + }, + + onCopyBridgeAddress(addressElem) { + const clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService( + Ci.nsIClipboardHelper + ); + clipboard.copyString(addressElem.value); + }, + + onRemoveAllBridges() { + TorSettings.bridges.enabled = false; + TorSettings.bridges.bridge_strings = ""; + if (TorSettings.bridges.source == TorBridgeSource.BuiltIn) { + TorSettings.bridges.builtin_type = ""; + } + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + }, + + onAddBuiltinBridge() { + const builtinBridgeDialog = new BuiltinBridgeDialog(aBridgeType => { + if (!aBridgeType) { + TorSettings.bridges.enabled = false; + TorSettings.bridges.builtin_type = ""; + } else { + TorSettings.bridges.enabled = true; + TorSettings.bridges.source = TorBridgeSource.BuiltIn; + TorSettings.bridges.builtin_type = aBridgeType; + } + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + }); + builtinBridgeDialog.openDialog(gSubDialog); + }, + + // called when the request bridge button is activated + onRequestBridge() { + const requestBridgeDialog = new RequestBridgeDialog(aBridges => { + if (aBridges.length) { + const bridgeStrings = aBridges.join("\n"); + TorSettings.bridges.enabled = true; + TorSettings.bridges.source = TorBridgeSource.BridgeDB; + TorSettings.bridges.bridge_strings = bridgeStrings; + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + } + }); + requestBridgeDialog.openDialog(gSubDialog); + }, + + onAddBridgeManually() { + const provideBridgeDialog = new ProvideBridgeDialog(aBridgeString => { + if (aBridgeString.length) { + TorSettings.bridges.enabled = true; + TorSettings.bridges.source = TorBridgeSource.UserProvided; + TorSettings.bridges.bridge_strings = aBridgeString; + } else { + TorSettings.bridges.enabled = false; + TorSettings.bridges.source = TorBridgeSource.Invalid; + TorSettings.bridges.bridge_strings = ""; + } + TorSettings.saveToPrefs(); + TorSettings.applySettings().then(result => { + this._populateBridgeCards(); + }); + }); + provideBridgeDialog.openDialog(gSubDialog); + }, + + onAdvancedSettings() { + const connectionSettingsDialog = new ConnectionSettingsDialog(); + connectionSettingsDialog.openDialog(gSubDialog); + }, + + onViewTorLogs() { + const torLogDialog = new TorLogDialog(); + torLogDialog.openDialog(gSubDialog); + }, + }; + return retval; +})(); /* gConnectionPane */ + +function makeBridgeId(bridgeString) { + // JS uses UTF-16. While most of these emojis are surrogate pairs, a few + // ones fit one UTF-16 character. So we could not use neither indices, + // nor substr, nor some function to split the string. + /* eslint-disable */ + const emojis = [ + "👽️", "🤖", "🧠", "👁️", "🧙", "🧚", "🧜", "🐵", "🦧", "🐶", "🐺", "🦊", "🦝", "🐱", "🦁", "🐯", + "🐴", "🦄", "🦓", "🦌", "🐮", "🐷", "🐗", "🐪", "🦙", "🦒", "🐘", "🦣", "🦏", "🐭", "🐰", "🐿️", + "🦔", "🦇", "🐻", "🐨", "🦥", "🦦", "🦘", "🐥", "🐦️", "🕊️", "🦆", "🦉", "🦤", "🪶", "🦩", "🦚", + "🦜", "🐊", "🐢", "🦎", "🐍", "🐲", "🦕", "🐳", "🐬", "🦭", "🐟️", "🐠", "🦈", "🐙", "🐚", "🐌", + "🦋", "🐛", "🐝", "🐞", "💐", "🌹", "🌺", "🌻", "🌷", "🌲", "🌳", "🌴", "🌵", "🌿", "🍁", "🍇", + "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🥭", "🍏", "🍐", "🍑", "🍒", "🍓", "🫐", "🥝", "🍅", "🫒", + "🥥", "🥑", "🍆", "🥕", "🌽", "🌶️", "🥬", "🥦", "🧅", "🍄", "🥜", "🥐", "🥖", "🥨", "🥯", "🥞", + "🧇", "🍔", "🍕", "🌭", "🌮", "🍿", "🦀", "🦞", "🍨", "🍩", "🍪", "🎂", "🧁", "🍫", "🍬", "🍭", + "🫖", "🧃", "🧉", "🧭", "🏔️", "🌋", "🏕️", "🏝️", "🏡", "⛲️", "🎠", "🎡", "🎢", "💈", "🚆", "🚋", + "🚍️", "🚕", "🚗", "🚚", "🚜", "🛵", "🛺", "🛴", "🛹", "🛼", "⚓️", "⛵️", "🛶", "🚤", "🚢", "✈️", + "🚁", "🚠", "🛰️", "🚀", "🛸", "⏰", "🌙", "🌡️", "☀️", "🪐", "🌟", "🌀", "🌈", "☂️", "❄️", "☄️", + "🔥", "💧", "🌊", "🎃", "✨", "🎈", "🎉", "🎏", "🎀", "🎁", "🎟️", "🏆️", "⚽️", "🏀", "🏈", "🎾", + "🥏", "🏓", "🏸", "🤿", "🥌", "🎯", "🪀", "🪁", "🔮", "🎲", "🧩", "🎨", "🧵", "👕", "🧦", "👗", + "🩳", "🎒", "👟", "👑", "🧢", "💄", "💍", "💎", "📢", "🎶", "🎙️", "📻️", "🎷", "🪗", "🎸", "🎺", + "🎻", "🪕", "🥁", "☎️", "🔋", "💿️", "🧮", "🎬️", "💡", "🔦", "🏮", "📕", "🏷️", "💳️", "✏️", "🖌️", + "🖍️", "📌", "📎", "🔑", "🪃", "🏹", "⚖️", "🧲", "🧪", "🧬", "🔬", "🔭", "📡", "🪑", "🧹", "🗿", + ]; + /* eslint-enable */ + + // FNV-1a implementation that is compatible with other languages + const prime = 0x01000193; + const offset = 0x811c9dc5; + let hash = offset; + const encoder = new TextEncoder(); + for (const byte of encoder.encode(bridgeString)) { + hash = Math.imul(hash ^ byte, prime); + } + + const hashBytes = [ + ((hash & 0x7f000000) >> 24) | (hash < 0 ? 0x80 : 0), + (hash & 0x00ff0000) >> 16, + (hash & 0x0000ff00) >> 8, + hash & 0x000000ff, + ]; + return hashBytes.map(b => emojis[b]); +} + +function parseBridgeLine(line) { + const re = /^([^\s]+\s+)?([0-9a-fA-F.[]:]+:[0-9]{1,5})\s*([0-9a-fA-F]{40})(\s+.+)?/; + const matches = line.match(re); + if (!matches) { + return null; + } + let bridge = { addr: matches[2] }; + if (matches[1] !== undefined) { + bridge.transport = matches[1].trim(); + } + if (matches[3] !== undefined) { + bridge.id = matches[3].toUpperCase(); + } + if (matches[4] !== undefined) { + bridge.args = matches[4].trim(); + } + return bridge; +} diff --git a/browser/components/torpreferences/content/connectionPane.xhtml b/browser/components/torpreferences/content/connectionPane.xhtml new file mode 100644 index 000000000000..dded590fe0e7 --- /dev/null +++ b/browser/components/torpreferences/content/connectionPane.xhtml @@ -0,0 +1,192 @@ +<!-- Tor panel --> + +<script type="application/javascript" + src="chrome://browser/content/torpreferences/connectionPane.js"/> +<html:template id="template-paneConnection"> + +<!-- Tor Connect Message Box --> +<groupbox data-category="paneConnection" hidden="true"> + <html:div id="torPreferences-connectMessageBox" + class="subcategory" + data-category="paneConnection" + hidden="true"> + html:table + html:tr + html:td + <html:div id="torPreferences-connectMessageBox-icon"/> + </html:td> + <html:td id="torPreferences-connectMessageBox-message"> + </html:td> + html:td + <html:button id="torPreferences-connectMessageBox-button"> + </html:button> + </html:td> + </html:tr> + </html:table> + </html:div> +</groupbox> + +<hbox id="torPreferencesCategory" + class="subcategory" + data-category="paneConnection" + hidden="true"> + <html:h1 id="torPreferences-header"/> +</hbox> + +<groupbox data-category="paneConnection" + hidden="true"> + <description flex="1"> + <html:span id="torPreferences-description" class="tail-with-learn-more"/> + <label id="torPreferences-learnMore" class="learnMore text-link" is="text-link"/> + </description> +</groupbox> + +<groupbox id="torPreferences-status-group" + data-category="paneConnection" + hidden="true"> + <hbox id="torPreferences-status-box"> + <image id="torPreferences-status-internet-icon"/> + <html:span id="torPreferences-status-internet-label"/> + <button id="torPreferences-status-internet-test"/> + <image id="torPreferences-status-internet-statusIcon"/> + <html:span id="torPreferences-status-internet-status"/> + <image id="torPreferences-status-tor-icon"/> + <html:span id="torPreferences-status-tor-label"/> + <image id="torPreferences-status-tor-statusIcon"/> + <html:span id="torPreferences-status-tor-status"/> + </hbox> +</groupbox> + +<!-- Quickstart --> +<groupbox id="torPreferences-quickstart-group" + data-category="paneConnection" + hidden="true"> + <html:h2 id="torPreferences-quickstart-header"/> + <description flex="1"> + <html:span id="torPreferences-quickstart-description"/> + </description> + <checkbox id="torPreferences-quickstart-toggle"/> +</groupbox> + +<!-- Bridges --> +<hbox class="subcategory" + data-category="paneConnection" + hidden="true"> + <html:h1 id="torPreferences-bridges-header"/> +</hbox> +<groupbox id="torPreferences-bridges-group" + data-category="paneConnection" + hidden="true"> + <description flex="1"> + <html:span id="torPreferences-bridges-description" class="tail-with-learn-more"/> + <label id="torPreferences-bridges-learnMore" class="learnMore text-link" is="text-link"/> + </description> + <hbox align="center" id="torPreferences-bridges-locationGroup" hidden="true"> + <label id="torPreferences-bridges-locationLabel" + control="torPreferences-bridges-location"/> + <spacer flex="1"/> + <menulist id="torPreferences-bridges-location"> + <menupopup id="torPreferences-bridges-locationEntries"/> + </menulist> + <button id="torPreferences-bridges-buttonChooseBridgeForMe" class="primary"/> + </hbox> + <html:h2 id="torPreferences-currentBridges-header"> + <html:span id="torPreferences-currentBridges-headerText"/> + <html:input type="checkbox" id="torPreferences-currentBridges-switch" class="toggle-button"/> + </html:h2> + <description flex="1" id="torPreferences-currentBridges-description"> + <html:span id="torPreferences-currentBridges-descriptionText"/> + </description> + <menupopup id="torPreferences-bridgeCard-menu"/> + <vbox id="torPreferences-bridgeCard-template" class="torPreferences-bridgeCard"> + <hbox class="torPreferences-bridgeCard-heading"> + <html:div class="torPreferences-bridgeCard-id"/> + <html:div class="torPreferences-bridgeCard-headingAddr"/> + <html:div class="torPreferences-bridgeCard-buttons"> + <html:span class="torPreferences-bridgeCard-connectedBadge"> + <image class="torPreferences-bridgeCard-connectedIcon"/> + <html:span class="torPreferences-bridgeCard-connectedLabel"/> + </html:span> + <html:button class="torPreferences-bridgeCard-options stop-click"/> + </html:div> + </hbox> + <box class="torPreferences-bridgeCard-grid"> + <box class="torPreferences-bridgeCard-qrWrapper"> + <html:div class="torPreferences-bridgeCard-qr stop-click"> + <html:div class="torPreferences-bridgeCard-qrCode"/> + <html:div class="torPreferences-bridgeCard-qrOnionBox"/> + <html:div class="torPreferences-bridgeCard-qrOnion"/> + </html:div> + </box> + <description class="torPreferences-bridgeCard-share"></description> + <hbox class="torPreferences-bridgeCard-addrBox"> + <html:input class="torPreferences-bridgeCard-addr stop-click" type="text" readonly="readonly"/> + </hbox> + <hbox class="torPreferences-bridgeCard-learnMoreBox" align="center"> + <label class="torPreferences-bridgeCard-learnMore learnMore text-link stop-click" is="text-link"/> + </hbox> + <hbox class="torPreferences-bridgeCard-copy" align="center"> + <button class="torPreferences-bridgeCard-copyButton stop-click"/> + </hbox> + </box> + </vbox> + <vbox id="torPreferences-currentBridges-cards"></vbox> + <vbox align="center"> + <button id="torPreferences-currentBridges-showAll"/> + <button id="torPreferences-currentBridges-removeAll" class="primary danger-button"/> + </vbox> + <html:h2 id="torPreferences-addBridge-header"></html:h2> + <hbox align="center"> + <label id="torPreferences-addBridge-labelBuiltinBridge" flex="1"/> + <button id="torPreferences-addBridge-buttonBuiltinBridge" + class="accessory-button"/> + </hbox> + <hbox align="center"> + <label id="torPreferences-addBridge-labelRequestBridge" flex="1"/> + <button id="torPreferences-addBridge-buttonRequestBridge" + class="accessory-button"/> + </hbox> + <hbox align="center"> + <label id="torPreferences-addBridge-labelEnterBridge" flex="1"/> + <button id="torPreferences-addBridge-buttonEnterBridge" + class="accessory-button"/> + </hbox> +</groupbox> + +<!-- Advanced --> +<hbox class="subcategory" + data-category="paneConnection" + hidden="true"> + <html:h1 id="torPreferences-advanced-header"/> +</hbox> +<groupbox id="torPreferences-advanced-group" + data-category="paneConnection" + hidden="true"> + <hbox align="center"> + <label id="torPreferences-advanced-label" flex="1"/> + <button id="torPreferences-advanced-button" + class="accessory-button"/> + </hbox> + <hbox align="center"> + <label id="torPreferences-torLogs" flex="1"/> + <vbox data-subcategory="viewlogs"> + <button id="torPreferences-buttonTorLogs" + class="accessory-button"/> + </vbox> + </hbox> +</groupbox> + +<html:div id="bridge-remove-overlay" class="hidden"> + <html:div id="bridge-remove-modal"> + <html:img id="bridge-remove-dismiss" src="chrome://global/skin/icons/close.svg"/> + <html:div id="bridge-remove-icon"/> + <html:p id="bridge-remove-question"/> + <html:p id="bridge-remove-warning"/> + <html:div id="bridge-remove-buttonbar"> + <button id="bridge-remove-cancel"/> + <button id="bridge-remove-confirm"/> + </html:div> + </html:div> +</html:div> + +</html:template> diff --git a/browser/components/torpreferences/content/connectionSettingsDialog.jsm b/browser/components/torpreferences/content/connectionSettingsDialog.jsm new file mode 100644 index 000000000000..dd7180678e98 --- /dev/null +++ b/browser/components/torpreferences/content/connectionSettingsDialog.jsm @@ -0,0 +1,397 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["ConnectionSettingsDialog"]; + +const { TorSettings, TorProxyType } = ChromeUtils.import( + "resource:///modules/TorSettings.jsm" +); + +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +class ConnectionSettingsDialog { + constructor() { + this._dialog = null; + this._useProxyCheckbox = null; + this._proxyTypeLabel = null; + this._proxyTypeMenulist = null; + this._proxyAddressLabel = null; + this._proxyAddressTextbox = null; + this._proxyPortLabel = null; + this._proxyPortTextbox = null; + this._proxyUsernameLabel = null; + this._proxyUsernameTextbox = null; + this._proxyPasswordLabel = null; + this._proxyPasswordTextbox = null; + this._useFirewallCheckbox = null; + this._allowedPortsLabel = null; + this._allowedPortsTextbox = null; + } + + static get selectors() { + return { + header: "#torPreferences-connection-header", + useProxyCheckbox: "checkbox#torPreferences-connection-toggleProxy", + proxyTypeLabel: "label#torPreferences-localProxy-type", + proxyTypeList: "menulist#torPreferences-localProxy-builtinList", + proxyAddressLabel: "label#torPreferences-localProxy-address", + proxyAddressTextbox: "input#torPreferences-localProxy-textboxAddress", + proxyPortLabel: "label#torPreferences-localProxy-port", + proxyPortTextbox: "input#torPreferences-localProxy-textboxPort", + proxyUsernameLabel: "label#torPreferences-localProxy-username", + proxyUsernameTextbox: "input#torPreferences-localProxy-textboxUsername", + proxyPasswordLabel: "label#torPreferences-localProxy-password", + proxyPasswordTextbox: "input#torPreferences-localProxy-textboxPassword", + useFirewallCheckbox: "checkbox#torPreferences-connection-toggleFirewall", + firewallAllowedPortsLabel: "label#torPreferences-connection-allowedPorts", + firewallAllowedPortsTextbox: + "input#torPreferences-connection-textboxAllowedPorts", + }; + } + + // disables the provided list of elements + _setElementsDisabled(elements, disabled) { + for (let currentElement of elements) { + currentElement.disabled = disabled; + } + } + + _populateXUL(window, aDialog) { + const selectors = ConnectionSettingsDialog.selectors; + + this._dialog = aDialog; + const dialogWin = this._dialog.parentElement; + dialogWin.setAttribute( + "title", + TorStrings.settings.connectionSettingsDialogTitle + ); + this._dialog.querySelector(selectors.header).textContent = + TorStrings.settings.connectionSettingsDialogHeader; + + // Local Proxy + this._useProxyCheckbox = this._dialog.querySelector( + selectors.useProxyCheckbox + ); + this._useProxyCheckbox.setAttribute( + "label", + TorStrings.settings.useLocalProxy + ); + this._useProxyCheckbox.addEventListener("command", e => { + const checked = this._useProxyCheckbox.checked; + this.onToggleProxy(checked); + }); + this._proxyTypeLabel = this._dialog.querySelector(selectors.proxyTypeLabel); + this._proxyTypeLabel.setAttribute("value", TorStrings.settings.proxyType); + + let mockProxies = [ + { + value: TorProxyType.Socks4, + label: TorStrings.settings.proxyTypeSOCKS4, + }, + { + value: TorProxyType.Socks5, + label: TorStrings.settings.proxyTypeSOCKS5, + }, + { value: TorProxyType.HTTPS, label: TorStrings.settings.proxyTypeHTTP }, + ]; + this._proxyTypeMenulist = this._dialog.querySelector( + selectors.proxyTypeList + ); + this._proxyTypeMenulist.addEventListener("command", e => { + const value = this._proxyTypeMenulist.value; + this.onSelectProxyType(value); + }); + for (let currentProxy of mockProxies) { + let menuEntry = window.document.createXULElement("menuitem"); + menuEntry.setAttribute("value", currentProxy.value); + menuEntry.setAttribute("label", currentProxy.label); + this._proxyTypeMenulist.querySelector("menupopup").appendChild(menuEntry); + } + + this._proxyAddressLabel = this._dialog.querySelector( + selectors.proxyAddressLabel + ); + this._proxyAddressLabel.setAttribute( + "value", + TorStrings.settings.proxyAddress + ); + this._proxyAddressTextbox = this._dialog.querySelector( + selectors.proxyAddressTextbox + ); + this._proxyAddressTextbox.setAttribute( + "placeholder", + TorStrings.settings.proxyAddressPlaceholder + ); + this._proxyAddressTextbox.addEventListener("blur", e => { + let value = this._proxyAddressTextbox.value.trim(); + let colon = value.lastIndexOf(":"); + if (colon != -1) { + let maybePort = parseInt(value.substr(colon + 1)); + if (!isNaN(maybePort) && maybePort > 0 && maybePort < 65536) { + this._proxyAddressTextbox.value = value.substr(0, colon); + this._proxyPortTextbox.value = maybePort; + } + } + }); + this._proxyPortLabel = this._dialog.querySelector(selectors.proxyPortLabel); + this._proxyPortLabel.setAttribute("value", TorStrings.settings.proxyPort); + this._proxyPortTextbox = this._dialog.querySelector( + selectors.proxyPortTextbox + ); + this._proxyUsernameLabel = this._dialog.querySelector( + selectors.proxyUsernameLabel + ); + this._proxyUsernameLabel.setAttribute( + "value", + TorStrings.settings.proxyUsername + ); + this._proxyUsernameTextbox = this._dialog.querySelector( + selectors.proxyUsernameTextbox + ); + this._proxyUsernameTextbox.setAttribute( + "placeholder", + TorStrings.settings.proxyUsernamePasswordPlaceholder + ); + this._proxyPasswordLabel = this._dialog.querySelector( + selectors.proxyPasswordLabel + ); + this._proxyPasswordLabel.setAttribute( + "value", + TorStrings.settings.proxyPassword + ); + this._proxyPasswordTextbox = this._dialog.querySelector( + selectors.proxyPasswordTextbox + ); + this._proxyPasswordTextbox.setAttribute( + "placeholder", + TorStrings.settings.proxyUsernamePasswordPlaceholder + ); + + this.onToggleProxy(false); + if (TorSettings.proxy.enabled) { + this.onToggleProxy(true); + this.onSelectProxyType(TorSettings.proxy.type); + this._proxyAddressTextbox.value = TorSettings.proxy.address; + this._proxyPortTextbox.value = TorSettings.proxy.port; + this._proxyUsernameTextbox.value = TorSettings.proxy.username; + this._proxyPasswordTextbox.value = TorSettings.proxy.password; + } + + // Local firewall + this._useFirewallCheckbox = this._dialog.querySelector( + selectors.useFirewallCheckbox + ); + this._useFirewallCheckbox.setAttribute( + "label", + TorStrings.settings.useFirewall + ); + this._useFirewallCheckbox.addEventListener("command", e => { + const checked = this._useFirewallCheckbox.checked; + this.onToggleFirewall(checked); + }); + this._allowedPortsLabel = this._dialog.querySelector( + selectors.firewallAllowedPortsLabel + ); + this._allowedPortsLabel.setAttribute( + "value", + TorStrings.settings.allowedPorts + ); + this._allowedPortsTextbox = this._dialog.querySelector( + selectors.firewallAllowedPortsTextbox + ); + this._allowedPortsTextbox.setAttribute( + "placeholder", + TorStrings.settings.allowedPortsPlaceholder + ); + + this.onToggleFirewall(false); + if (TorSettings.firewall.enabled) { + this.onToggleFirewall(true); + this._allowedPortsTextbox.value = TorSettings.firewall.allowed_ports.join( + ", " + ); + } + + this._dialog.addEventListener("dialogaccept", e => { + this._applySettings(); + }); + + // Hack: see the CSS + this._dialog.style.minWidth = "0"; + this._dialog.style.minHeight = "0"; + } + + // callback when proxy is toggled + onToggleProxy(enabled) { + this._useProxyCheckbox.checked = enabled; + let disabled = !enabled; + + this._setElementsDisabled( + [ + this._proxyTypeLabel, + this._proxyTypeMenulist, + this._proxyAddressLabel, + this._proxyAddressTextbox, + this._proxyPortLabel, + this._proxyPortTextbox, + this._proxyUsernameLabel, + this._proxyUsernameTextbox, + this._proxyPasswordLabel, + this._proxyPasswordTextbox, + ], + disabled + ); + if (enabled) { + this.onSelectProxyType(this._proxyTypeMenulist.value); + } + } + + // callback when proxy type is changed + onSelectProxyType(value) { + if (typeof value === "string") { + value = parseInt(value); + } + + this._proxyTypeMenulist.value = value; + switch (value) { + case TorProxyType.Invalid: { + this._setElementsDisabled( + [ + this._proxyAddressLabel, + this._proxyAddressTextbox, + this._proxyPortLabel, + this._proxyPortTextbox, + this._proxyUsernameLabel, + this._proxyUsernameTextbox, + this._proxyPasswordLabel, + this._proxyPasswordTextbox, + ], + true + ); // DISABLE + + this._proxyAddressTextbox.value = ""; + this._proxyPortTextbox.value = ""; + this._proxyUsernameTextbox.value = ""; + this._proxyPasswordTextbox.value = ""; + break; + } + case TorProxyType.Socks4: { + this._setElementsDisabled( + [ + this._proxyAddressLabel, + this._proxyAddressTextbox, + this._proxyPortLabel, + this._proxyPortTextbox, + ], + false + ); // ENABLE + this._setElementsDisabled( + [ + this._proxyUsernameLabel, + this._proxyUsernameTextbox, + this._proxyPasswordLabel, + this._proxyPasswordTextbox, + ], + true + ); // DISABLE + + this._proxyUsernameTextbox.value = ""; + this._proxyPasswordTextbox.value = ""; + break; + } + case TorProxyType.Socks5: + case TorProxyType.HTTPS: { + this._setElementsDisabled( + [ + this._proxyAddressLabel, + this._proxyAddressTextbox, + this._proxyPortLabel, + this._proxyPortTextbox, + this._proxyUsernameLabel, + this._proxyUsernameTextbox, + this._proxyPasswordLabel, + this._proxyPasswordTextbox, + ], + false + ); // ENABLE + break; + } + } + } + + // callback when firewall proxy is toggled + onToggleFirewall(enabled) { + this._useFirewallCheckbox.checked = enabled; + let disabled = !enabled; + + this._setElementsDisabled( + [this._allowedPortsLabel, this._allowedPortsTextbox], + disabled + ); + } + + // pushes settings from UI to tor + _applySettings() { + const type = this._useProxyCheckbox.checked + ? parseInt(this._proxyTypeMenulist.value) + : TorProxyType.Invalid; + const address = this._proxyAddressTextbox.value; + const port = this._proxyPortTextbox.value; + const username = this._proxyUsernameTextbox.value; + const password = this._proxyPasswordTextbox.value; + switch (type) { + case TorProxyType.Invalid: + TorSettings.proxy.enabled = false; + break; + case TorProxyType.Socks4: + TorSettings.proxy.enabled = true; + TorSettings.proxy.type = type; + TorSettings.proxy.address = address; + TorSettings.proxy.port = port; + break; + case TorProxyType.Socks5: + TorSettings.proxy.enabled = true; + TorSettings.proxy.type = type; + TorSettings.proxy.address = address; + TorSettings.proxy.port = port; + TorSettings.proxy.username = username; + TorSettings.proxy.password = password; + break; + case TorProxyType.HTTPS: + TorSettings.proxy.enabled = true; + TorSettings.proxy.type = type; + TorSettings.proxy.address = address; + TorSettings.proxy.port = port; + TorSettings.proxy.username = username; + TorSettings.proxy.password = password; + break; + } + + let portListString = this._useFirewallCheckbox.checked + ? this._allowedPortsTextbox.value + : ""; + if (portListString) { + TorSettings.firewall.enabled = true; + TorSettings.firewall.allowed_ports = portListString; + } else { + TorSettings.firewall.enabled = false; + } + + TorSettings.saveToPrefs(); + TorSettings.applySettings(); + } + + init(window, aDialog) { + // defer to later until firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(window, aDialog); + }, 0); + } + + openDialog(gSubDialog) { + gSubDialog.open( + "chrome://browser/content/torpreferences/connectionSettingsDialog.xhtml", + { features: "resizable=yes" }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/connectionSettingsDialog.xhtml b/browser/components/torpreferences/content/connectionSettingsDialog.xhtml new file mode 100644 index 000000000000..8265cdd71c2f --- /dev/null +++ b/browser/components/torpreferences/content/connectionSettingsDialog.xhtml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="torPreferences-connection-dialog" + buttons="accept,cancel"> + <html:h3 id="torPreferences-connection-header">​</html:h3> + <!-- Local Proxy --> + <checkbox id="torPreferences-connection-toggleProxy" label="​"/> + <box id="torPreferences-connection-grid"> + <hbox class="indent" align="center"> + <label id="torPreferences-localProxy-type"/> + </hbox> + <hbox align="center"> + <spacer flex="1"/> + <menulist id="torPreferences-localProxy-builtinList" class="torMarginFix"> + <menupopup/> + </menulist> + </hbox> + <hbox class="indent" align="center"> + <label id="torPreferences-localProxy-address"/> + </hbox> + <hbox align="center"> + <html:input id="torPreferences-localProxy-textboxAddress" type="text" class="torMarginFix"/> + <label id="torPreferences-localProxy-port"/> + <!-- proxy-port-input class style pulled from preferences.css and used in the vanilla proxy setup menu --> + <html:input id="torPreferences-localProxy-textboxPort" class="proxy-port-input torMarginFix" hidespinbuttons="true" type="number" min="0" max="65535" maxlength="5"/> + </hbox> + <hbox class="indent" align="center"> + <label id="torPreferences-localProxy-username"/> + </hbox> + <hbox align="center"> + <html:input id="torPreferences-localProxy-textboxUsername" type="text" class="torMarginFix"/> + <label id="torPreferences-localProxy-password"/> + <html:input id="torPreferences-localProxy-textboxPassword" class="torMarginFix" type="password"/> + </hbox> + </box> + <!-- Firewall --> + <checkbox id="torPreferences-connection-toggleFirewall" label="​"/> + <box id="torPreferences-connection-firewall"> + <hbox class="indent" align="center"> + <label id="torPreferences-connection-allowedPorts"/> + </hbox> + <hbox id="torPreferences-connection-hboxAllowedPorts" align="center"> + <html:input id="torPreferences-connection-textboxAllowedPorts" type="text" class="torMarginFix" value="80,443"/> + </hbox> + </box> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let connectionSettingsDialog = window.arguments[0]; + let dialog = document.getElementById("torPreferences-connection-dialog"); + connectionSettingsDialog.init(window, dialog); + ]]></script> +</dialog> +</window> diff --git a/browser/components/torpreferences/content/network.svg b/browser/components/torpreferences/content/network.svg new file mode 100644 index 000000000000..e1689b5e6d64 --- /dev/null +++ b/browser/components/torpreferences/content/network.svg @@ -0,0 +1,6 @@ +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity"> + <path d="M8.5 1a7.5 7.5 0 1 0 0 15 7.5 7.5 0 0 0 0-15zm2.447 1.75a6.255 6.255 0 0 1 3.756 5.125l-2.229 0A9.426 9.426 0 0 0 10.54 2.75l.407 0zm-2.049 0a8.211 8.211 0 0 1 2.321 5.125l-5.438 0A8.211 8.211 0 0 1 8.102 2.75l.796 0zm-2.846 0 .408 0a9.434 9.434 0 0 0-1.934 5.125l-2.229 0A6.254 6.254 0 0 1 6.052 2.75zm0 11.5a6.252 6.252 0 0 1-3.755-5.125l2.229 0A9.426 9.426 0 0 0 6.46 14.25l-.408 0zm2.05 0a8.211 8.211 0 0 1-2.321-5.125l5.437 0a8.211 8.211 0 0 1-2.321 5.125l-.795 0zm2.846 0-.40 [...] +</svg> diff --git a/browser/components/torpreferences/content/provideBridgeDialog.jsm b/browser/components/torpreferences/content/provideBridgeDialog.jsm new file mode 100644 index 000000000000..33ee8e023bfd --- /dev/null +++ b/browser/components/torpreferences/content/provideBridgeDialog.jsm @@ -0,0 +1,67 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["ProvideBridgeDialog"]; + +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +const { TorSettings, TorBridgeSource } = ChromeUtils.import( + "resource:///modules/TorSettings.jsm" +); + +class ProvideBridgeDialog { + constructor(onSubmit) { + this.onSubmit = onSubmit; + this._dialog = null; + this._textarea = null; + } + + static get selectors() { + return { + header: "#torPreferences-provideBridge-header", + textarea: "#torPreferences-provideBridge-textarea", + }; + } + + _populateXUL(window, aDialog) { + const selectors = ProvideBridgeDialog.selectors; + + this._dialog = aDialog; + const dialogWin = this._dialog.parentElement; + dialogWin.setAttribute("title", TorStrings.settings.provideBridgeTitle); + this._dialog.querySelector(selectors.header).textContent = + TorStrings.settings.provideBridgeHeader; + this._textarea = this._dialog.querySelector(selectors.textarea); + this._textarea.setAttribute( + "placeholder", + TorStrings.settings.provideBridgePlaceholder + ); + if (TorSettings.bridges.source == TorBridgeSource.UserProvided) { + this._textarea.value = TorSettings.bridges.bridge_strings.join("\n"); + } + + this._dialog.addEventListener("dialogaccept", e => { + this.onSubmit(this._textarea.value); + }); + this._dialog.addEventListener("dialoghelp", e => { + window.top.openTrustedLinkIn( + TorStrings.settings.learnMoreBridgesURL, + "tab" + ); + }); + } + + init(window, aDialog) { + // defer to later until firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(window, aDialog); + }, 0); + } + + openDialog(gSubDialog) { + gSubDialog.open( + "chrome://browser/content/torpreferences/provideBridgeDialog.xhtml", + { features: "resizable=yes" }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/provideBridgeDialog.xhtml b/browser/components/torpreferences/content/provideBridgeDialog.xhtml new file mode 100644 index 000000000000..28d19cadaf9c --- /dev/null +++ b/browser/components/torpreferences/content/provideBridgeDialog.xhtml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="torPreferences-provideBridge-dialog" + buttons="help,accept,cancel"> + <html:h3 id="torPreferences-provideBridge-header">​</html:h3> + <html:textarea id="torPreferences-provideBridge-textarea" multiline="true" rows="3"/> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let provideBridgeDialog = window.arguments[0]; + let dialog = document.getElementById("torPreferences-provideBridge-dialog"); + provideBridgeDialog.init(window, dialog); + ]]></script> +</dialog> +</window> diff --git a/browser/components/torpreferences/content/requestBridgeDialog.jsm b/browser/components/torpreferences/content/requestBridgeDialog.jsm new file mode 100644 index 000000000000..eff4c2c083ef --- /dev/null +++ b/browser/components/torpreferences/content/requestBridgeDialog.jsm @@ -0,0 +1,206 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["RequestBridgeDialog"]; + +const { BridgeDB } = ChromeUtils.import("resource:///modules/BridgeDB.jsm"); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +class RequestBridgeDialog { + constructor(onSubmit) { + this.onSubmit = onSubmit; + this._dialog = null; + this._submitButton = null; + this._dialogHeader = null; + this._captchaImage = null; + this._captchaEntryTextbox = null; + this._captchaRefreshButton = null; + this._incorrectCaptchaHbox = null; + this._incorrectCaptchaLabel = null; + } + + static get selectors() { + return { + submitButton: + "accept" /* not really a selector but a key for dialog's getButton */, + dialogHeader: "h3#torPreferences-requestBridge-header", + captchaImage: "image#torPreferences-requestBridge-captchaImage", + captchaEntryTextbox: "input#torPreferences-requestBridge-captchaTextbox", + refreshCaptchaButton: + "button#torPreferences-requestBridge-refreshCaptchaButton", + incorrectCaptchaHbox: + "hbox#torPreferences-requestBridge-incorrectCaptchaHbox", + incorrectCaptchaLabel: + "label#torPreferences-requestBridge-incorrectCaptchaError", + }; + } + + _populateXUL(window, dialog) { + const selectors = RequestBridgeDialog.selectors; + + this._dialog = dialog; + const dialogWin = dialog.parentElement; + dialogWin.setAttribute( + "title", + TorStrings.settings.requestBridgeDialogTitle + ); + // user may have opened a Request Bridge dialog in another tab, so update the + // CAPTCHA image or close out the dialog if we have a bridge list + this._dialog.addEventListener("focusin", () => { + const uri = BridgeDB.currentCaptchaImage; + const bridges = BridgeDB.currentBridges; + + // new captcha image + if (uri) { + this._setcaptchaImage(uri); + } else if (bridges) { + this._dialog.cancelDialog(); + } + }); + + this._submitButton = this._dialog.getButton(selectors.submitButton); + this._submitButton.setAttribute("label", TorStrings.settings.submitCaptcha); + this._submitButton.disabled = true; + this._dialog.addEventListener("dialogaccept", e => { + e.preventDefault(); + this.onSubmitCaptcha(); + }); + this._dialog.addEventListener("dialoghelp", e => { + window.top.openTrustedLinkIn( + TorStrings.settings.learnMoreBridgesURL, + "tab" + ); + }); + + this._dialogHeader = this._dialog.querySelector(selectors.dialogHeader); + this._dialogHeader.textContent = TorStrings.settings.contactingBridgeDB; + + this._captchaImage = this._dialog.querySelector(selectors.captchaImage); + + // request captcha from bridge db + BridgeDB.requestNewCaptchaImage().then(uri => { + this._setcaptchaImage(uri); + }); + + this._captchaEntryTextbox = this._dialog.querySelector( + selectors.captchaEntryTextbox + ); + this._captchaEntryTextbox.setAttribute( + "placeholder", + TorStrings.settings.captchaTextboxPlaceholder + ); + this._captchaEntryTextbox.disabled = true; + // disable submit if entry textbox is empty + this._captchaEntryTextbox.oninput = () => { + this._submitButton.disabled = this._captchaEntryTextbox.value == ""; + }; + + this._captchaRefreshButton = this._dialog.querySelector( + selectors.refreshCaptchaButton + ); + this._captchaRefreshButton.disabled = true; + + this._incorrectCaptchaHbox = this._dialog.querySelector( + selectors.incorrectCaptchaHbox + ); + this._incorrectCaptchaLabel = this._dialog.querySelector( + selectors.incorrectCaptchaLabel + ); + this._incorrectCaptchaLabel.setAttribute( + "value", + TorStrings.settings.incorrectCaptcha + ); + + return true; + } + + _setcaptchaImage(uri) { + if (uri != this._captchaImage.src) { + this._captchaImage.src = uri; + this._dialogHeader.textContent = TorStrings.settings.solveTheCaptcha; + this._setUIDisabled(false); + this._captchaEntryTextbox.focus(); + this._captchaEntryTextbox.select(); + } + } + + _setUIDisabled(disabled) { + this._submitButton.disabled = this._captchaGuessIsEmpty() || disabled; + this._captchaEntryTextbox.disabled = disabled; + this._captchaRefreshButton.disabled = disabled; + } + + _captchaGuessIsEmpty() { + return this._captchaEntryTextbox.value == ""; + } + + init(window, dialog) { + // defer to later until firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(window, dialog); + }, 0); + } + + close() { + BridgeDB.close(); + } + + /* + Event Handlers + */ + onSubmitCaptcha() { + let captchaText = this._captchaEntryTextbox.value.trim(); + // noop if the field is empty + if (captchaText == "") { + return; + } + + // freeze ui while we make request + this._setUIDisabled(true); + this._incorrectCaptchaHbox.style.visibility = "hidden"; + + BridgeDB.submitCaptchaGuess(captchaText) + .then(aBridges => { + if (aBridges) { + this.onSubmit(aBridges); + this._submitButton.disabled = false; + // This was successful, but use cancelDialog() to close, since + // we intercept the `dialogaccept` event. + this._dialog.cancelDialog(); + } else { + this._setUIDisabled(false); + this._incorrectCaptchaHbox.style.visibility = "visible"; + } + }) + .catch(aError => { + // TODO: handle other errors properly here when we do the bridge settings re-design + this._setUIDisabled(false); + this._incorrectCaptchaHbox.style.visibility = "visible"; + console.log(aError); + }); + } + + onRefreshCaptcha() { + this._setUIDisabled(true); + this._captchaImage.src = ""; + this._dialogHeader.textContent = TorStrings.settings.contactingBridgeDB; + this._captchaEntryTextbox.value = ""; + this._incorrectCaptchaHbox.style.visibility = "hidden"; + + BridgeDB.requestNewCaptchaImage().then(uri => { + this._setcaptchaImage(uri); + }); + } + + openDialog(gSubDialog) { + gSubDialog.open( + "chrome://browser/content/torpreferences/requestBridgeDialog.xhtml", + { + features: "resizable=yes", + closingCallback: () => { + this.close(); + }, + }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/requestBridgeDialog.xhtml b/browser/components/torpreferences/content/requestBridgeDialog.xhtml new file mode 100644 index 000000000000..be9d310008d7 --- /dev/null +++ b/browser/components/torpreferences/content/requestBridgeDialog.xhtml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="torPreferences-requestBridge-dialog" + buttons="help,accept,cancel"> + <!-- ok, so ​ is a zero-width space. We need to have *something* in the innerText so that XUL knows how tall the + title node is so that it can determine how large to make the dialog element's inner draw area. If we have nothing + in the innerText, then it collapse to 0 height, and the contents of the dialog ends up partially hidden >:( --> + <html:h3 id="torPreferences-requestBridge-header">​</html:h3> + <!-- init to transparent 400x125 png --> + <image id="torPreferences-requestBridge-captchaImage" flex="1"/> + <hbox id="torPreferences-requestBridge-inputHbox"> + <html:input id="torPreferences-requestBridge-captchaTextbox" type="text" style="-moz-box-flex: 1;"/> + <button id="torPreferences-requestBridge-refreshCaptchaButton" + image="chrome://global/skin/icons/reload.svg" + oncommand="requestBridgeDialog.onRefreshCaptcha();"/> + </hbox> + <hbox id="torPreferences-requestBridge-incorrectCaptchaHbox" align="center"> + <image id="torPreferences-requestBridge-errorIcon" /> + <label id="torPreferences-requestBridge-incorrectCaptchaError" flex="1"/> + </hbox> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let requestBridgeDialog = window.arguments[0]; + let dialog = document.getElementById("torPreferences-requestBridge-dialog"); + requestBridgeDialog.init(window, dialog); + ]]></script> +</dialog> +</window> diff --git a/browser/components/torpreferences/content/torLogDialog.jsm b/browser/components/torpreferences/content/torLogDialog.jsm new file mode 100644 index 000000000000..bf50cb801e10 --- /dev/null +++ b/browser/components/torpreferences/content/torLogDialog.jsm @@ -0,0 +1,84 @@ +"use strict"; + +var EXPORTED_SYMBOLS = ["TorLogDialog"]; + +const { setTimeout, clearTimeout } = ChromeUtils.import( + "resource://gre/modules/Timer.jsm" +); + +const { TorMonitorService } = ChromeUtils.import( + "resource://gre/modules/TorMonitorService.jsm" +); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +class TorLogDialog { + constructor() { + this._dialog = null; + this._logTextarea = null; + this._copyLogButton = null; + this._restoreButtonTimeout = null; + } + + static get selectors() { + return { + copyLogButton: "extra1", + logTextarea: "textarea#torPreferences-torDialog-textarea", + }; + } + + _populateXUL(aDialog) { + this._dialog = aDialog; + const dialogWin = this._dialog.parentElement; + dialogWin.setAttribute("title", TorStrings.settings.torLogDialogTitle); + + this._logTextarea = this._dialog.querySelector( + TorLogDialog.selectors.logTextarea + ); + + this._copyLogButton = this._dialog.getButton( + TorLogDialog.selectors.copyLogButton + ); + this._copyLogButton.setAttribute("label", TorStrings.settings.copyLog); + this._copyLogButton.addEventListener("command", () => { + this.copyTorLog(); + const label = this._copyLogButton.querySelector("label"); + label.setAttribute("value", TorStrings.settings.copied); + this._copyLogButton.classList.add("primary"); + + const RESTORE_TIME = 1200; + if (this._restoreButtonTimeout !== null) { + clearTimeout(this._restoreButtonTimeout); + } + this._restoreButtonTimeout = setTimeout(() => { + label.setAttribute("value", TorStrings.settings.copyLog); + this._copyLogButton.classList.remove("primary"); + this._restoreButtonTimeout = null; + }, RESTORE_TIME); + }); + + this._logTextarea.value = TorMonitorService.getLog(); + } + + init(window, aDialog) { + // defer to later until firefox has populated the dialog with all our elements + window.setTimeout(() => { + this._populateXUL(aDialog); + }, 0); + } + + copyTorLog() { + // Copy tor log messages to the system clipboard. + let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService( + Ci.nsIClipboardHelper + ); + clipboard.copyString(this._logTextarea.value); + } + + openDialog(gSubDialog) { + gSubDialog.open( + "chrome://browser/content/torpreferences/torLogDialog.xhtml", + { features: "resizable=yes" }, + this + ); + } +} diff --git a/browser/components/torpreferences/content/torLogDialog.xhtml b/browser/components/torpreferences/content/torLogDialog.xhtml new file mode 100644 index 000000000000..9c17f8132978 --- /dev/null +++ b/browser/components/torpreferences/content/torLogDialog.xhtml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?> +<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> + +<window type="child" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:html="http://www.w3.org/1999/xhtml%22%3E +<dialog id="torPreferences-torLog-dialog" + buttons="accept,extra1"> + <html:textarea + id="torPreferences-torDialog-textarea" + multiline="true" + readonly="true"/> + <script type="application/javascript"><![CDATA[ + "use strict"; + + let torLogDialog = window.arguments[0]; + let dialog = document.getElementById("torPreferences-torLog-dialog"); + torLogDialog.init(window, dialog); + ]]></script> +</dialog> +</window> \ No newline at end of file diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css new file mode 100644 index 000000000000..ec709a5823c1 --- /dev/null +++ b/browser/components/torpreferences/content/torPreferences.css @@ -0,0 +1,704 @@ +@import url("chrome://branding/content/tor-styles.css"); + +#category-connection > .category-icon { + list-style-image: url("chrome://browser/content/torpreferences/torPreferencesIcon.svg"); +} + +html:dir(rtl) input[type="checkbox"].toggle-button::before { + /* For some reason, the rule from toggle-button.css is not applied... */ + scale: -1; +} + +/* Connect Message Box */ + +#torPreferences-connectMessageBox { + display: block; + position: relative; + + width: auto; + min-height: 32px; + border-radius: 4px; + padding: 8px; +} + +#torPreferences-connectMessageBox.hidden { + display: none; +} + +#torPreferences-connectMessageBox.error { + background-color: var(--red-60); + color: white; +} + +#torPreferences-connectMessageBox.warning { + background-color: var(--purple-50); + color: white; +} + +#torPreferences-connectMessageBox table { + border-collapse: collapse; +} + +#torPreferences-connectMessageBox td { + vertical-align: middle; +} + +#torPreferences-connectMessageBox td:first-child { + width: 16px; +} + +#torPreferences-connectMessageBox-icon { + width: 16px; + height: 16px; + + mask-repeat: no-repeat !important; + mask-size: 16px !important; +} + +#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-icon +{ + mask: url("chrome://browser/skin/onion-slash.svg"); + background-color: white; +} + +#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-icon +{ + mask: url("chrome://browser/skin/onion.svg"); + background-color: white; +} + +#torPreferences-connectMessageBox-message { + line-height: 16px; + padding-inline-start: 8px; +} + +#torPreferences-connectMessageBox-button { + display: block; + width: auto; + + border-radius: 4px; + border: 0; + + padding-inline: 18px; + padding-block: 8px; + margin-block: 0px; + margin-inline-start: 8px; + margin-inline-end: 0px; + + font-size: 1.0em; + font-weight: 600; + white-space: nowrap; + + color: white; +} + +#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button { + background-color: var(--red-70); +} + +#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:hover { + background-color: var(--red-80); +} + +#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:active { + background-color: var(--red-90); +} + +#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button { + background-color: var(--purple-70); +} + +#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:hover { + background-color: var(--purple-80); +} + +#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:active { + background-color: var(--purple-90); +} + +/* Status */ +#torPreferences-status-box { + display: flex; + align-items: center; +} + +#torPreferences-status-internet-icon, #torPreferences-status-tor-icon { + width: 18px; + height: 18px; + margin-inline-end: 8px; + -moz-context-properties: fill; + fill: var(--in-content-text-color); +} + +#torPreferences-status-internet-icon { + list-style-image: url("chrome://browser/content/torpreferences/network.svg"); +} + +#torPreferences-status-tor-icon { + list-style-image: url("chrome://browser/skin/onion.svg"); +} + +#torPreferences-status-internet-label, #torPreferences-status-tor-label { + font-weight: bold; +} + +#torPreferences-status-internet-status { + margin-inline-end: 32px; +} + +#torPreferences-status-internet-statusIcon.online, +#torPreferences-status-internet-statusIcon.offline, +#torPreferences-status-tor-statusIcon { + margin-inline-start: 12px; + margin-inline-end: 9px; +} + +#torPreferences-status-internet-statusIcon, #torPreferences-status-tor-statusIcon { + -moz-context-properties: fill; +} + +#torPreferences-status-internet-statusIcon.online, #torPreferences-status-tor-statusIcon.connected { + list-style-image: url("chrome://browser/content/torpreferences/check.svg"); + fill: var(--purple-60); +} + +@media (prefers-color-scheme: dark) { + #torPreferences-status-internet-statusIcon.online, #torPreferences-status-tor-statusIcon.connected { + fill: var(--purple-30); + } +} + +#torPreferences-status-internet-statusIcon.offline, #torPreferences-status-tor-statusIcon:not(.connected) { + list-style-image: url("chrome://global/skin/icons/warning.svg"); + fill: var(--torbrowser-warning); +} + +#torPreferences-status-tor-statusIcon.blocked { + fill: var(--in-content-danger-button-background); +} + +/* Bridge settings */ +#torPreferences-bridges-location { + width: 280px; +} + +#torPreferences-bridges-location menuitem[disabled="true"] { + color: var(--in-content-button-text-color, inherit); + font-weight: 700; +} + +/* Bridge cards */ +:root { + --bridgeCard-animation-time: 0.25s; +} + +#torPreferences-currentBridges-cards { + /* The padding is needed because the mask-image creates an unexpected result + otherwise... */ + padding: 24px 4px; +} + +#torPreferences-currentBridges-cards.list-collapsed { + mask-image: linear-gradient(rgb(0, 0, 0) 0% 75%, rgba(0, 0, 0, 0.1)); +} + +#torPreferences-currentBridges-cards.disabled { + opacity: 0.4; +} + +.torPreferences-bridgeCard { + padding: 16px 12px; + /* define border-radius here because of the transition */ + border-radius: 4px; + transition: margin var(--bridgeCard-animation-time), box-shadow 150ms; + cursor: pointer; +} + +.torPreferences-bridgeCard.expanded, +.torPreferences-bridgeCard.currently-connected, +.single-card .torPreferences-bridgeCard { + margin: 12px 0; + background: var(--in-content-box-background); + box-shadow: var(--card-shadow); +} + +.torPreferences-bridgeCard:hover { + background: var(--in-content-box-background); + box-shadow: var(--card-shadow-hover); +} + +.single-card .torPreferences-bridgeCard, +.torPreferences-bridgeCard.currently-connected { + cursor: default; +} + +.torPreferences-bridgeCard-heading { + display: flex; + align-items: center; +} + +.torPreferences-bridgeCard-id { + display: flex; + align-items: center; + font-weight: 700; +} + +.torPreferences-bridgeCard-id .emoji { + width: 20px; + height: 20px; + margin-inline-start: 4px; + padding: 4px; + font-size: 20px; + border-radius: 4px; + background: var(--in-content-box-background-odd); +} + +.torPreferences-bridgeCard-headingAddr { + /* flex extends the element when needed, but without setting a width (any) the + overflow + ellipses does not work. */ + width: 20px; + flex: 1; + margin: 0 8px; + overflow: hidden; + color: var(--in-content-deemphasized-text); + white-space: nowrap; + text-overflow: ellipsis; +} + +.expanded .torPreferences-bridgeCard-headingAddr, +.currently-connected .torPreferences-bridgeCard-headingAddr, +.single-card .torPreferences-bridgeCard-headingAddr { + display: none; +} + +.torPreferences-bridgeCard-buttons { + display: flex; + align-items: center; + margin-inline-start: auto; + align-self: center; +} + +.torPreferences-bridgeCard-connectedBadge { + display: none; + margin-inline-end: 12px; + color: var(--purple-60); +} + +@media (prefers-color-scheme: dark) { + .torPreferences-bridgeCard-connectedBadge { + color: var(--purple-30); + } +} + +.currently-connected .torPreferences-bridgeCard-connectedBadge { + display: flex; +} + +.torPreferences-bridgeCard-connectedIcon { + margin-inline-start: 1px; + margin-inline-end: 7px; + list-style-image: url("chrome://browser/content/torpreferences/check.svg"); + -moz-context-properties: fill; + fill: currentColor; +} + +.torPreferences-bridgeCard-options { + width: 24px; + min-width: 0; + height: 24px; + min-height: 0; + margin-inline-start: 8px; + padding: 1px; + background-image: url("chrome://global/skin/icons/more.svg"); + background-repeat: no-repeat; + background-position: center center; + fill: currentColor; + -moz-context-properties: fill; +} + +#torPreferences-bridgeCard-menu menuitem { + fill: currentColor; + -moz-context-properties: fill; +} + +.torPreferences-bridgeCard-qrWrapper { + grid-area: bridge-qr; + display: block; /* So it doesn't stretch the child vertically. */ + margin-inline-end: 14px; +} + +.torPreferences-bridgeCard-qr { + --qr-one: black; + --qr-zero: white; + background: var(--qr-zero); + position: relative; + padding: 4px; + border-radius: 2px; +} + +.torPreferences-bridgeCard-qrCode { + width: 112px; + height: 112px; + /* Define these colors, as they will be passed to the QR code library */ + background: var(--qr-zero); + color: var(--qr-one); +} + +.torPreferences-bridgeCard-qrOnionBox { + width: 28px; + height: 28px; + position: absolute; + top: calc(50% - 14px); + inset-inline-start: calc(50% - 14px); + background: var(--qr-zero); +} + +.torPreferences-bridgeCard-qrOnion { + width: 16px; + height: 16px; + position: absolute; + top: calc(50% - 8px); + inset-inline-start: calc(50% - 8px); + + mask: url("chrome://browser/skin/onion.svg"); + mask-repeat: no-repeat; + mask-size: 16px; + background: var(--qr-one); +} + +.torPreferences-bridgeCard-qr:hover .torPreferences-bridgeCard-qrOnionBox { + background: var(--qr-one); +} + +.torPreferences-bridgeCard-qr:hover .torPreferences-bridgeCard-qrOnion { + mask: url("chrome://global/skin/icons/search-glass.svg"); + background: var(--qr-zero); +} + +.torPreferences-bridgeCard-grid { + height: 0; /* We will set it in JS when expanding it! */ + display: grid; + grid-template-rows: auto 1fr; + grid-template-columns: auto 1fr auto; + grid-template-areas: + 'bridge-qr bridge-share bridge-share' + 'bridge-qr bridge-address bridge-address' + 'bridge-qr bridge-learn-more bridge-copy'; + padding-top: 12px; + visibility: hidden; +} + +.expanded .torPreferences-bridgeCard-grid, +.currently-connected .torPreferences-bridgeCard-grid, +.single-card .torPreferences-bridgeCard-grid { + visibility: visible; +} + +.currently-connected .torPreferences-bridgeCard-grid, +.single-card .torPreferences-bridgeCard-grid { + height: auto; +} + +.torPreferences-bridgeCard-grid.to-animate { + transition: height var(--bridgeCard-animation-time) ease-out, visibility var(--bridgeCard-animation-time); + overflow: hidden; +} + +.torPreferences-bridgeCard-share { + grid-area: bridge-share; +} + +.torPreferences-bridgeCard-addrBox { + grid-area: bridge-address; + display: flex; + align-items: center; + justify-content: center; + margin: 8px 0; +} + +input.torPreferences-bridgeCard-addr { + width: 100%; + color: var(--in-content-deemphasized-text); +} + +.torPreferences-bridgeCard-leranMoreBox { + grid-area: bridge-learn-more; +} + +.torPreferences-bridgeCard-copy { + grid-area: bridge-copy; +} + +#torPreferences-bridgeCard-template { + display: none; +} + +/* Advanced Settings */ + +h3#torPreferences-requestBridge-header { + margin: 0; +} + +image#torPreferences-requestBridge-captchaImage { + margin: 16px 0 8px 0; + min-height: 140px; +} + +button#torPreferences-requestBridge-refreshCaptchaButton { + min-width: initial; +} + +#torPreferences-requestBridge-refreshCaptchaButton image { + -moz-context-properties: fill; + fill: currentColor; +} + +dialog#torPreferences-requestBridge-dialog > hbox { + margin-bottom: 1em; +} + +/* + Various elements that really should be lining up don't because they have inconsistent margins +*/ +.torMarginFix { + margin-left : 4px; + margin-right : 4px; +} + +/* Show bridge QR dialog */ +#bridgeQr { + /* Some readers don't recognize QRs with inverted colors, so let's make + the ones are darker than zeroes. See + https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41049 */ + --qr-one: black; + --qr-zero: white; + background: var(--qr-zero); + position: relative; + /* Padding is needed in case the dark theme is used so the bits don't blend + with whatever the default background color is. */ + padding: 10px; + margin: auto; + margin-bottom: 20px; + max-width: max-content; + border-radius: 5px; +} + +#bridgeQr-target { + width: 300px; + height: 300px; + background: var(--qr-zero); + color: var(--qr-one); +} + +#bridgeQr-onionBox { + position: absolute; + width: 70px; + height: 70px; + top: calc(50% - 35px); + left: calc(50% - 35px); + background-color: var(--qr-zero); +} + +#bridgeQr-onion { + position: absolute; + width: 38px; + height: 38px; + top: calc(50% - 19px); + left: calc(50% - 19px); + mask: url("chrome://browser/skin/onion.svg"); + mask-repeat: no-repeat; + mask-size: 38px; + background: var(--qr-one); +} + +/* Builtin bridge dialog */ +#torPreferences-builtinBridge-dialog { + /* Hack: ask XUL to load with a lot of space, then we will remove the minimum + sizes after we populate the string. Users with high resolutions should see a + big dialog, but with all the needed buttons, users with small resolutions + should see scrollbars. + Known problems: + 1) the hack works only if a window is *already* small: if it is big, and then + it is resized, the dialog will not shrink; + 2) horizontal scrollbars are never added. + The proper solution for this will be loading the localized string with + Mozilla's way. + See also https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41044 */ + min-width: 700px; + min-height: 550px; +} + +#torPreferences-builtinBridge-header { + margin: 8px 0 10px 0; +} + +#torPreferences-builtinBridge-description { + margin-bottom: 18px; +} + +#torPreferences-builtinBridge-typeSelection { + margin-bottom: 16px; +} + +#torPreferences-builtinBridge-typeSelection radio label { + font-weight: 700; +} + +/* Request bridge dialog */ +/* + This hbox is hidden by css here by default so that the + xul dialog allocates enough screen space for the error message + element, otherwise it gets cut off since dialog's overflow is hidden +*/ +hbox#torPreferences-requestBridge-incorrectCaptchaHbox { + visibility: hidden; +} + +image#torPreferences-requestBridge-errorIcon { + list-style-image: url("chrome://global/skin/icons/warning.svg"); + -moz-context-properties: fill; + fill: var(--torbrowser-warning); +} + +groupbox#torPreferences-bridges-group textarea { + white-space: pre; + overflow: auto; +} + +/* Provide bridge dialog */ +#torPreferences-provideBridge-header { + margin-top: 8px; +} + +/* Connection settings dialog */ +#torPreferences-connection-dialog { + /* Hack: like the built-in dialog */ + min-width: 700px; + min-height: 550px; +} + +#torPreferences-connection-header { + margin: 4px 0 14px 0; +} + +#torPreferences-connection-grid { + display: grid; + grid-template-columns: auto 1fr; +} + +#torPreferences-localProxy-textboxAddress, +#torPreferences-localProxy-textboxUsername, +#torPreferences-localProxy-textboxPassword, +#torPreferences-connection-textboxAllowedPorts { + -moz-box-flex: 1; +} + +#torPreferences-connection-firewall { + display: flex; +} + +#torPreferences-connection-hboxAllowedPorts { + flex: 1; +} + +/* Tor logs dialog */ +textarea#torPreferences-torDialog-textarea { + -moz-box-flex: 1; + font-family: monospace; + font-size: 0.8em; + white-space: pre; + overflow: auto; + /* 10 lines */ + min-height: 20em; +} + +/* Bridge remove overlay */ +#bridge-remove-overlay { + position: fixed; + display: flex; + align-items: center; + justify-content: center; + top: 0; + inset: 0; + width: 100%; + height: 100%; + z-index: 1; + background-color: rgba(0, 0, 0, 0.5); +} + +#bridge-remove-overlay.hidden { + display: none; +} + +#bridge-remove-modal { + position: relative; + min-width: 250px; + max-width: 500px; + min-height: 200px; + z-index: 2; + text-align: center; + background: var(--in-content-page-background); + box-shadow: var(--shadow-30); +} + +#bridge-remove-dismiss { + position: absolute; + top: 16px; + inset-inline-end: 16px; + width: 16px; + height: 16px; + fill: currentColor; + -moz-context-properties: fill; +} + +#bridge-remove-dismiss:hover { + background-color: var(--in-content-button-background-hover); + color: var(--in-content-button-text-color-hover); + border: 1px solid var(--in-content-button-border-color-hover); + border-radius: 4px; +} + +#bridge-remove-dismiss:hover:active { + background-color: var(--in-content-button-background-active); +} + +#bridge-remove-icon { + width: 40px; + height: 40px; + background-image: url("chrome://global/skin/icons/warning.svg"); + background-size: 40px; + margin: 16px auto; + fill: currentColor; + -moz-context-properties: fill; +} + +#bridge-remove-question { + font-size: 150%; +} + +#bridge-remove-warning { + color: var(--in-content-deemphasized-text); +} + +#bridge-remove-buttonbar { + padding: 16px 32px; +} + +#bridge-remove-buttonbar button { + min-width: 140px; +} + +#bridge-remove-confirm { + background: var(--in-content-danger-button-background); + color: var(--in-content-primary-button-text-color); +} + +#bridge-remove-confirm:hover { + background: var(--in-content-danger-button-background-hover); + color: var(--in-content-primary-button-text-color-hover); + border-color: var(--in-content-primary-button-border-hover); +} + +#bridge-remove-confirm:hover:active { + background: var(--in-content-danger-button-background-active); +} diff --git a/browser/components/torpreferences/content/torPreferencesIcon.svg b/browser/components/torpreferences/content/torPreferencesIcon.svg new file mode 100644 index 000000000000..382a061774aa --- /dev/null +++ b/browser/components/torpreferences/content/torPreferencesIcon.svg @@ -0,0 +1,8 @@ +<svg fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16" width="16" height="16" xmlns="http://www.w3.org/2000/svg"> + <g clip-rule="evenodd" fill-rule="evenodd"> + <path d="m11 8c0 1.65686-1.34314 3-3 3-1.65685 0-3-1.34314-3-3 0-1.65685 1.34315-3 3-3 1.65686 0 3 1.34315 3 3zm-1.17187 0c0 1.00965-.81848 1.82813-1.82813 1.82813-1.00964 0-1.82812-.81848-1.82812-1.82813 0-1.00964.81848-1.82812 1.82812-1.82812 1.00965 0 1.82813.81848 1.82813 1.82812z"/> + <path d="m7.99999 13.25c2.89951 0 5.25001-2.3505 5.25001-5.25001 0-2.89949-2.3505-5.25-5.25001-5.25-2.89949 0-5.25 2.35051-5.25 5.25 0 2.89951 2.35051 5.25001 5.25 5.25001zm0-1.1719c2.25231 0 4.07811-1.8258 4.07811-4.07811 0-2.25228-1.8258-4.07812-4.07811-4.07812-2.25228 0-4.07812 1.82584-4.07812 4.07812 0 2.25231 1.82584 4.07811 4.07812 4.07811z"/> + <path d="m8 15.5c4.1421 0 7.5-3.3579 7.5-7.5 0-4.14214-3.3579-7.5-7.5-7.5-4.14214 0-7.5 3.35786-7.5 7.5 0 4.1421 3.35786 7.5 7.5 7.5zm0-1.1719c3.4949 0 6.3281-2.8332 6.3281-6.3281 0-3.49493-2.8332-6.32812-6.3281-6.32812-3.49493 0-6.32812 2.83319-6.32812 6.32812 0 3.4949 2.83319 6.3281 6.32812 6.3281z"/> + </g> + <path d="m.5 8c0 4.1421 3.35786 7.5 7.5 7.5v-15c-4.14214 0-7.5 3.35786-7.5 7.5z"/> +</svg> \ No newline at end of file diff --git a/browser/components/torpreferences/jar.mn b/browser/components/torpreferences/jar.mn new file mode 100644 index 000000000000..b54373ae7bc2 --- /dev/null +++ b/browser/components/torpreferences/jar.mn @@ -0,0 +1,22 @@ +browser.jar: + content/browser/torpreferences/bridgeQrDialog.xhtml (content/bridgeQrDialog.xhtml) + content/browser/torpreferences/bridgeQrDialog.jsm (content/bridgeQrDialog.jsm) + content/browser/torpreferences/builtinBridgeDialog.xhtml (content/builtinBridgeDialog.xhtml) + content/browser/torpreferences/builtinBridgeDialog.jsm (content/builtinBridgeDialog.jsm) + content/browser/torpreferences/check.svg (content/check.svg) + content/browser/torpreferences/connectionSettingsDialog.xhtml (content/connectionSettingsDialog.xhtml) + content/browser/torpreferences/connectionSettingsDialog.jsm (content/connectionSettingsDialog.jsm) + content/browser/torpreferences/network.svg (content/network.svg) + content/browser/torpreferences/provideBridgeDialog.xhtml (content/provideBridgeDialog.xhtml) + content/browser/torpreferences/provideBridgeDialog.jsm (content/provideBridgeDialog.jsm) + content/browser/torpreferences/requestBridgeDialog.xhtml (content/requestBridgeDialog.xhtml) + content/browser/torpreferences/requestBridgeDialog.jsm (content/requestBridgeDialog.jsm) + content/browser/torpreferences/connectionCategory.inc.xhtml (content/connectionCategory.inc.xhtml) + content/browser/torpreferences/torLogDialog.jsm (content/torLogDialog.jsm) + content/browser/torpreferences/torLogDialog.xhtml (content/torLogDialog.xhtml) + content/browser/torpreferences/connectionPane.js (content/connectionPane.js) + content/browser/torpreferences/connectionPane.xhtml (content/connectionPane.xhtml) + content/browser/torpreferences/torPreferences.css (content/torPreferences.css) + content/browser/torpreferences/torPreferencesIcon.svg (content/torPreferencesIcon.svg) + content/browser/torpreferences/bridgemoji/ (content/bridgemoji/*.svg) + content/browser/torpreferences/bridgemoji-annotations.json (content/bridgemoji-annotations.json) diff --git a/browser/components/torpreferences/moz.build b/browser/components/torpreferences/moz.build new file mode 100644 index 000000000000..2661ad7cb9f3 --- /dev/null +++ b/browser/components/torpreferences/moz.build @@ -0,0 +1 @@ +JAR_MANIFESTS += ["jar.mn"] diff --git a/tools/torbrowser/update_bridgemoiji.py b/tools/torbrowser/update_bridgemoiji.py new file mode 100755 index 000000000000..af555eee18d3 --- /dev/null +++ b/tools/torbrowser/update_bridgemoiji.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +# Script to update bridgemoji files from Twemoji, and from Unicode +# datasets. +# Please be sure to grab and extract twe-svg.zip from +# https://github.com/mozilla/twemoji-colr, and to get the latest +# version of https://github.com/unicode-org/cldr.git. + +import json +from pathlib import Path +from shutil import copyfile +import sys +from xml.dom.minidom import parse + + +if len(sys.argv) < 3: + print(f'Usage: {sys.argv[0]} twemoji-svg-dir cldr-dir') + sys.exit(1) +twemoji_dir = Path(sys.argv[1]) +cldr_dir = Path(sys.argv[2]) + +LANGS = [ + "ar", + "ca", + "cs", + "da", + "de", + "el", + "en", + "es", + "fa", + "fr", + "ga", + "he", + "hu", + "id", + "is", + "it", + "ja", + "ka", + "ko", + "lt", + "mk", + "ms", + "my", + # "nb", # Empty file, currently!! + "nl", + "pl", + "pt", + "ro", + "ru", + "sv", + "th", + "tr", + "uk", + "vi", + "zh", # zh-CN, zh-hans + "zh_Hant", # zh-TW, zh-hant +] + +# Currently the script is in tools/torbrowser/ +firefox_root = Path(__file__).parents[2] +panel_dir = firefox_root / 'browser/components/torpreferences/content' + +with (panel_dir / 'connectionPane.js').open() as f: + pane_js = f.read() +make_id_offset = pane_js.find('function makeBridgeId(bridgeString) {') +emojis_var = 'const emojis = ' +emojis_offset = pane_js.find(emojis_var, make_id_offset) + len(emojis_var) +close_offset = pane_js.find(']', emojis_offset) +emojis_str = pane_js[emojis_offset:close_offset].strip('\t \n,') +emojis_str += ']' +emojis = json.loads(emojis_str) +codepoints = [] +for idx, e in enumerate(emojis): + if len(e) > 2 or (len(e) == 2 and ord(e[1]) != 0xfe0f): + # U+FE0F is "VARIATION SELECTOR-16" and tells the emoji to be + # colored, or something like that. + print(f'Unsupported emoji {e}: too many codepoints') + sys.exit(2) + codepoints.append(ord(e[0])) + +emojis_dest = panel_dir / 'bridgemoji' +emojis_dest.mkdir(exist_ok=True) +for f in emojis_dest.iterdir(): + f.unlink() +for cp in codepoints: + src = twemoji_dir / f'{cp:x}.svg' + dst = emojis_dest / f'{cp:x}.svg' + copyfile(src, dst) + +data = {l: {} for l in LANGS} + +for l in LANGS: + with (cldr_dir / f'common/annotations/{l}.xml').open() as f: + doc = parse(f) + anns = doc.getElementsByTagName('annotation') + for ann in anns: + cp = ann.getAttribute('cp') + if len(cp) != 1: + continue + try: + idx = codepoints.index(ord(cp)) + if ann.getAttribute('type') == 'tts': + ann.normalize() + data[l][emojis[idx]] = ann.firstChild.data + except ValueError: + pass + if len(data[l]) != len(emojis): + print(f'Lang {l} doesn't have all the emoji descriptions!') + +data['zh-CN'] = data.pop('zh') +data['zh-TW'] = data.pop('zh_Hant') + +with (panel_dir / 'bridgemoji-annotations.json').open('w') as f: + json.dump(data, f, ensure_ascii=False, indent=2)
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 6d3dd9b6213fb5d2714b8e605ea8aa9374647a89 Author: Richard Pospesel richard@torproject.org AuthorDate: Wed Apr 28 23:09:34 2021 -0500
Bug 27476: Implement about:torconnect captive portal within Tor Browser
- implements new about:torconnect page as tor-launcher replacement - adds tor connection status to url bar and tweaks UX when not online - adds new torconnect component to browser - tor process management functionality remains implemented in tor-launcher through the TorProtocolService module - adds warning/error box to about:preferences#tor when not connected to tor - explicitly allows about:torconnect URIs to ignore Resist Fingerprinting (RFP) - various tweaks to info-pages.inc.css for about:torconnect (also affects other firefox info pages)
Bug 40773: Update the about:torconnect frontend page to match additional UI flows --- browser/actors/NetErrorParent.jsm | 6 + browser/base/content/browser.js | 66 +- browser/base/content/browser.xhtml | 2 + browser/base/content/certerror/aboutNetError.js | 12 +- browser/base/content/navigator-toolbox.inc.xhtml | 1 + browser/base/content/utilityOverlay.js | 17 + browser/components/BrowserGlue.jsm | 14 + browser/components/about/AboutRedirector.cpp | 5 + browser/components/about/components.conf | 1 + browser/components/moz.build | 1 + browser/components/torconnect/TorConnectChild.jsm | 9 + browser/components/torconnect/TorConnectParent.jsm | 202 +++++ .../torconnect/content/aboutTorConnect.css | 309 ++++++++ .../torconnect/content/aboutTorConnect.js | 841 +++++++++++++++++++++ .../torconnect/content/aboutTorConnect.xhtml | 66 ++ .../components/torconnect/content/arrow-right.svg | 4 + browser/components/torconnect/content/bridge.svg | 5 + .../torconnect/content/connection-failure.svg | 5 + .../torconnect/content/connection-location.svg | 5 + .../torconnect/content/onion-slash-fillable.svg | 5 + .../components/torconnect/content/onion-slash.svg | 5 + browser/components/torconnect/content/onion.svg | 4 + .../torconnect/content/torBootstrapUrlbar.js | 95 +++ .../torconnect/content/torconnect-urlbar.css | 37 + .../torconnect/content/torconnect-urlbar.inc.xhtml | 10 + browser/components/torconnect/jar.mn | 13 + browser/components/torconnect/moz.build | 6 + .../torpreferences/content/connectionPane.xhtml | 4 +- browser/components/urlbar/UrlbarInput.jsm | 37 + browser/themes/shared/browser-shared.css | 1 + dom/base/Document.cpp | 50 +- dom/base/nsGlobalWindowOuter.cpp | 2 + toolkit/actors/AboutHttpsOnlyErrorParent.jsm | 5 + .../components/httpsonlyerror/content/errorpage.js | 19 +- toolkit/modules/RemotePageAccessManager.jsm | 26 + .../lib/environments/browser-window.js | 4 + 36 files changed, 1863 insertions(+), 31 deletions(-)
diff --git a/browser/actors/NetErrorParent.jsm b/browser/actors/NetErrorParent.jsm index 315957ff112e..250b95b95059 100644 --- a/browser/actors/NetErrorParent.jsm +++ b/browser/actors/NetErrorParent.jsm @@ -18,6 +18,8 @@ const { TelemetryController } = ChromeUtils.import( "resource://gre/modules/TelemetryController.jsm" );
+const { TorConnect } = ChromeUtils.import("resource:///modules/TorConnect.jsm"); + const PREF_SSL_IMPACT_ROOTS = [ "security.tls.version.", "security.ssl3.", @@ -341,6 +343,10 @@ class NetErrorParent extends JSWindowActorParent { break; } } + break; + case "ShouldShowTorConnect": + return TorConnect.shouldShowTorConnect; } + return undefined; } } diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 597bff687349..0a5ec63c4a63 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -79,6 +79,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { TabModalPrompt: "chrome://global/content/tabprompts.jsm", TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm", TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm", + TorConnect: "resource:///modules/TorConnect.jsm", Translation: "resource:///modules/translation/TranslationParent.jsm", UITour: "resource:///modules/UITour.jsm", UpdateUtils: "resource://gre/modules/UpdateUtils.jsm", @@ -646,6 +647,7 @@ var gPageIcons = {
var gInitialPages = [ "about:tor", + "about:torconnect", "about:blank", "about:home", ...(AppConstants.NIGHTLY_BUILD ? ["about:firefoxview"] : []), @@ -1874,6 +1876,8 @@ var gBrowserInit = { }
this._loadHandled = true; + + TorBootstrapUrlbar.init(); },
_cancelDelayedStartup() { @@ -2421,32 +2425,48 @@ var gBrowserInit = {
let defaultArgs = BrowserHandler.defaultArgs;
- // If the given URI is different from the homepage, we want to load it. - if (uri != defaultArgs) { - AboutNewTab.noteNonDefaultStartup(); + // figure out which URI to actually load (or a Promise to get the uri) + uri = (aUri => { + // If the given URI is different from the homepage, we want to load it. + if (aUri != defaultArgs) { + AboutNewTab.noteNonDefaultStartup(); + + if (aUri instanceof Ci.nsIArray) { + // Transform the nsIArray of nsISupportsString's into a JS Array of + // JS strings. + return Array.from( + aUri.enumerate(Ci.nsISupportsString), + supportStr => supportStr.data + ); + } else if (aUri instanceof Ci.nsISupportsString) { + return aUri.data; + } + return aUri; + }
- if (uri instanceof Ci.nsIArray) { - // Transform the nsIArray of nsISupportsString's into a JS Array of - // JS strings. - return Array.from( - uri.enumerate(Ci.nsISupportsString), - supportStr => supportStr.data - ); - } else if (uri instanceof Ci.nsISupportsString) { - return uri.data; + // The URI appears to be the the homepage. We want to load it only if + // session restore isn't about to override the homepage. + let willOverride = SessionStartup.willOverrideHomepage; + if (typeof willOverride == "boolean") { + return willOverride ? null : uri; } - return uri; - } + return willOverride.then(willOverrideHomepage => + willOverrideHomepage ? null : uri + ); + })(uri); + + // if using TorConnect, convert these uris to redirects + if (TorConnect.shouldShowTorConnect) { + return Promise.resolve(uri).then(aUri => { + if (aUri == null) { + aUri = []; + }
- // The URI appears to be the the homepage. We want to load it only if - // session restore isn't about to override the homepage. - let willOverride = SessionStartup.willOverrideHomepage; - if (typeof willOverride == "boolean") { - return willOverride ? null : uri; + aUri = TorConnect.getURIsToLoad(aUri); + return aUri; + }); } - return willOverride.then(willOverrideHomepage => - willOverrideHomepage ? null : uri - ); + return uri; })()); },
@@ -2513,6 +2533,8 @@ var gBrowserInit = {
NewIdentityButton.uninit();
+ TorBootstrapUrlbar.uninit(); + gAccessibilityServiceIndicator.uninit();
if (gToolbarKeyNavEnabled) { diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml index 5959615f9dc1..2a906252306d 100644 --- a/browser/base/content/browser.xhtml +++ b/browser/base/content/browser.xhtml @@ -10,6 +10,7 @@ override rules using selectors with the same specificity. This applies to both "content" and "skin" packages, which bug 1385444 will unify later. --> <?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> +<?xml-stylesheet href="chrome://branding/content/tor-styles.css" type="text/css"?>
<!-- While these stylesheets are defined in Toolkit, they are only used in the main browser window, so we can load them here. Bug 1474241 is on file to @@ -124,6 +125,7 @@ Services.scriptloader.loadSubScript("chrome://browser/content/languageNotification.js", this); Services.scriptloader.loadSubScript("chrome://torbutton/content/tor-circuit-display.js", this); Services.scriptloader.loadSubScript("chrome://torbutton/content/torbutton.js", this); + Services.scriptloader.loadSubScript("chrome://browser/content/torconnect/torBootstrapUrlbar.js", this);
window.onload = gBrowserInit.onLoad.bind(gBrowserInit); window.onunload = gBrowserInit.onUnload.bind(gBrowserInit); diff --git a/browser/base/content/certerror/aboutNetError.js b/browser/base/content/certerror/aboutNetError.js index 43a1777a8b41..1714b1b8a4be 100644 --- a/browser/base/content/certerror/aboutNetError.js +++ b/browser/base/content/certerror/aboutNetError.js @@ -230,7 +230,7 @@ function setErrorPageStrings(err) { document.l10n.setAttributes(titleElement, title); }
-function initPage() { +async function initPage() { // We show an offline support page in case of a system-wide error, // when a user cannot connect to the internet and access the SUMO website. // For example, clock error, which causes certerrors across the web or @@ -253,6 +253,16 @@ function initPage() { document.body.classList.add("blocked"); }
+ // proxyConnectFailure because no-tor running daemon would return this error + if ( + err === "proxyConnectFailure" && + (await RPMSendQuery("ShouldShowTorConnect")) + ) { + // pass orginal destination as redirect param + const encodedRedirect = encodeURIComponent(document.location.href); + document.location.replace(`about:torconnect?redirect=${encodedRedirect}`); + } + // Only worry about captive portals if this is a cert error. let showCaptivePortalUI = isCaptive() && gIsCertError; if (showCaptivePortalUI) { diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml index 6123e1336aed..81479615dc72 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -323,6 +323,7 @@ data-l10n-id="urlbar-go-button"/> <hbox id="page-action-buttons" context="pageActionContextMenu"> <toolbartabstop/> +#include ../../components/torconnect/content/torconnect-urlbar.inc.xhtml <hbox id="contextual-feature-recommendation" role="button" hidden="true"> <hbox id="cfr-label-container"> <label id="cfr-label"/> diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js index d218e3409370..aace9e7f8653 100644 --- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -21,6 +21,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { ExtensionSettingsStore: "resource://gre/modules/ExtensionSettingsStore.jsm", PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm", ShellService: "resource:///modules/ShellService.jsm", + TorConnect: "resource:///modules/TorConnect.jsm", });
XPCOMUtils.defineLazyGetter(this, "ReferrerInfo", () => @@ -259,6 +260,22 @@ function openUILinkIn( aPostData, aReferrerInfo ) { + // make sure users are not faced with the scary red 'tor isn't working' screen + // if they navigate to about:tor before bootstrapped + // + // fixes tor-browser#40752 + // new tabs also redirect to about:tor if browser.newtabpage.enabled is true + // otherwise they go to about:blank + if (TorConnect.shouldShowTorConnect) { + if ( + url === "about:tor" || + (url === "about:newtab" && + Services.prefs.getBoolPref("browser.newtabpage.enabled", false)) + ) { + url = TorConnect.getRedirectURL(url); + } + } + var params;
if (arguments.length == 3 && typeof arguments[2] == "object") { diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index b1a0fc5ffe44..0092d25948e7 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -740,6 +740,20 @@ let JSWINDOWACTORS = { allFrames: true, },
+ TorConnect: { + parent: { + moduleURI: "resource:///modules/TorConnectParent.jsm", + }, + child: { + moduleURI: "resource:///modules/TorConnectChild.jsm", + events: { + DOMWindowCreated: {}, + }, + }, + + matches: ["about:torconnect", "about:torconnect?*"], + }, + Translation: { parent: { moduleURI: "resource:///modules/translation/TranslationParent.jsm", diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index 7c915f2b45b0..0a495a223e3e 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -133,6 +133,11 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::HIDE_FROM_ABOUTABOUT}, {"restartrequired", "chrome://browser/content/aboutRestartRequired.xhtml", nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT}, + {"torconnect", "chrome://browser/content/torconnect/aboutTorConnect.xhtml", + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | + nsIAboutModule::HIDE_FROM_ABOUTABOUT | + nsIAboutModule::IS_SECURE_CHROME_UI}, };
static nsAutoCString GetAboutModuleName(nsIURI* aURI) { diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf index 56226324bc32..6095653409cd 100644 --- a/browser/components/about/components.conf +++ b/browser/components/about/components.conf @@ -28,6 +28,7 @@ pages = [ 'robots', 'sessionrestore', 'tabcrashed', + 'torconnect', 'unloads', 'welcome', 'welcomeback', diff --git a/browser/components/moz.build b/browser/components/moz.build index 0fa76a0e7038..ab1dac40dfab 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -58,6 +58,7 @@ DIRS += [ "translation", "uitour", "urlbar", + "torconnect", "torpreferences", ]
diff --git a/browser/components/torconnect/TorConnectChild.jsm b/browser/components/torconnect/TorConnectChild.jsm new file mode 100644 index 000000000000..bd6dd549f156 --- /dev/null +++ b/browser/components/torconnect/TorConnectChild.jsm @@ -0,0 +1,9 @@ +// Copyright (c) 2021, The Tor Project, Inc. + +var EXPORTED_SYMBOLS = ["TorConnectChild"]; + +const { RemotePageChild } = ChromeUtils.import( + "resource://gre/actors/RemotePageChild.jsm" +); + +class TorConnectChild extends RemotePageChild {} diff --git a/browser/components/torconnect/TorConnectParent.jsm b/browser/components/torconnect/TorConnectParent.jsm new file mode 100644 index 000000000000..cf3c1233dd62 --- /dev/null +++ b/browser/components/torconnect/TorConnectParent.jsm @@ -0,0 +1,202 @@ +// Copyright (c) 2021, The Tor Project, Inc. + +var EXPORTED_SYMBOLS = ["TorConnectParent"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); +const { + InternetStatus, + TorConnect, + TorConnectTopics, + TorConnectState, +} = ChromeUtils.import("resource:///modules/TorConnect.jsm"); +const { TorSettings, TorSettingsTopics, TorSettingsData } = ChromeUtils.import( + "resource:///modules/TorSettings.jsm" +); + +const BroadcastTopic = "about-torconnect:broadcast"; + +/* +This object is basically a marshalling interface between the TorConnect module +and a particular about:torconnect page +*/ + +class TorConnectParent extends JSWindowActorParent { + constructor(...args) { + super(...args); + + const self = this; + + this.state = { + State: TorConnect.state, + StateChanged: false, + PreviousState: TorConnectState.Initial, + ErrorMessage: TorConnect.errorMessage, + ErrorDetails: TorConnect.errorDetails, + BootstrapProgress: TorConnect.bootstrapProgress, + BootstrapStatus: TorConnect.bootstrapStatus, + InternetStatus: TorConnect.internetStatus, + DetectedLocation: TorConnect.detectedLocation, + ShowViewLog: TorConnect.logHasWarningOrError, + HasBootsrapEverFailed: TorConnect.hasBootstrapEverFailed, + QuickStartEnabled: TorSettings.quickstart.enabled, + UIState: TorConnect.uiState, + }; + + // JSWindowActiveParent derived objects cannot observe directly, so create a member + // object to do our observing for us + // + // This object converts the various lifecycle events from the TorConnect module, and + // maintains a state object which we pass down to our about:torconnect page, which uses + // the state object to update its UI + this.torConnectObserver = { + observe(aSubject, aTopic, aData) { + let obj = aSubject?.wrappedJSObject; + + // update our state struct based on received torconnect topics and forward on + // to aboutTorConnect.js + self.state.StateChanged = false; + switch (aTopic) { + case TorConnectTopics.StateChange: { + self.state.PreviousState = self.state.State; + self.state.State = obj.state; + self.state.StateChanged = true; + + // clear any previous error information if we are bootstrapping + if (self.state.State === TorConnectState.Bootstrapping) { + self.state.ErrorMessage = null; + self.state.ErrorDetails = null; + } + self.state.HasBootsrapEverFailed = + TorConnect.hasBootstrapEverFailed; + break; + } + case TorConnectTopics.BootstrapProgress: { + self.state.BootstrapProgress = obj.progress; + self.state.BootstrapStatus = obj.status; + self.state.ShowViewLog = obj.hasWarnings; + break; + } + case TorConnectTopics.BootstrapComplete: { + // noop + break; + } + case TorConnectTopics.BootstrapError: { + self.state.ErrorMessage = obj.message; + self.state.ErrorDetails = obj.details; + self.state.InternetStatus = TorConnect.internetStatus; + self.state.DetectedLocation = TorConnect.detectedLocation; + self.state.ShowViewLog = true; + break; + } + case TorConnectTopics.FatalError: { + // TODO: handle + break; + } + case TorSettingsTopics.SettingChanged: { + if (aData === TorSettingsData.QuickStartEnabled) { + self.state.QuickStartEnabled = obj.value; + } else { + // this isn't a setting torconnect cares about + return; + } + break; + } + default: { + console.log(`TorConnect: unhandled observe topic '${aTopic}'`); + } + } + + self.sendAsyncMessage("torconnect:state-change", self.state); + }, + }; + + // observe all of the torconnect:.* topics + for (const key in TorConnectTopics) { + const topic = TorConnectTopics[key]; + Services.obs.addObserver(this.torConnectObserver, topic); + } + Services.obs.addObserver( + this.torConnectObserver, + TorSettingsTopics.SettingChanged + ); + + this.userActionObserver = { + observe(aSubject, aTopic, aData) { + let obj = aSubject?.wrappedJSObject; + if (obj) { + obj.connState = self.state; + self.sendAsyncMessage("torconnect:user-action", obj); + } + }, + }; + Services.obs.addObserver(this.userActionObserver, BroadcastTopic); + } + + willDestroy() { + // stop observing all of our torconnect:.* topics + for (const key in TorConnectTopics) { + const topic = TorConnectTopics[key]; + Services.obs.removeObserver(this.torConnectObserver, topic); + } + Services.obs.removeObserver( + this.torConnectObserver, + TorSettingsTopics.SettingChanged + ); + Services.obs.removeObserver(this.userActionObserver, BroadcastTopic); + } + + async receiveMessage(message) { + switch (message.name) { + case "torconnect:set-quickstart": + TorSettings.quickstart.enabled = message.data; + TorSettings.saveToPrefs().applySettings(); + break; + case "torconnect:open-tor-preferences": + TorConnect.openTorPreferences(); + break; + case "torconnect:cancel-bootstrap": + TorConnect.cancelBootstrap(); + break; + case "torconnect:begin-bootstrap": + TorConnect.beginBootstrap(); + break; + case "torconnect:begin-autobootstrap": + TorConnect.beginAutoBootstrap(message.data); + break; + case "torconnect:view-tor-logs": + TorConnect.viewTorLogs(); + break; + case "torconnect:restart": + Services.startup.quit( + Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit + ); + break; + case "torconnect:set-ui-state": + TorConnect.uiState = message.data; + this.state.UIState = TorConnect.uiState; + break; + case "torconnect:broadcast-user-action": + Services.obs.notifyObservers(message.data, BroadcastTopic); + break; + case "torconnect:get-init-args": + // called on AboutTorConnect.init(), pass down all state data it needs to init + + // pretend this is a state transition on init + // so we always get fresh UI + this.state.StateChanged = true; + this.state.UIState = TorConnect.uiState; + return { + TorStrings, + TorConnectState, + InternetStatus, + Direction: Services.locale.isAppLocaleRTL ? "rtl" : "ltr", + State: this.state, + CountryNames: TorConnect.countryNames, + }; + case "torconnect:get-country-codes": + return TorConnect.getCountryCodes(); + } + return undefined; + } +} diff --git a/browser/components/torconnect/content/aboutTorConnect.css b/browser/components/torconnect/content/aboutTorConnect.css new file mode 100644 index 000000000000..03565940d7d2 --- /dev/null +++ b/browser/components/torconnect/content/aboutTorConnect.css @@ -0,0 +1,309 @@ + +/* Copyright (c) 2021, The Tor Project, Inc. */ + +@import url("chrome://browser/skin/error-pages.css"); +@import url("chrome://branding/content/tor-styles.css"); + +:root { + --onion-opacity: 1; + --onion-color: var(--card-outline-color); + --onion-radius: 75px; +} + +input[type="checkbox"]:focus, select:focus { + outline: none!important; + box-shadow: 0 0 0 3px var(--purple-30) !important; + border: 1px var(--purple-80) solid !important; +} + +@media (prefers-color-scheme: dark) { + input[type="checkbox"]:focus, select:focus { + box-shadow: 0 0 0 3px var(--purple-50)!important; + } +} + +#breadcrumbs { + display: flex; + align-items: center; + margin: 0 0 24px 0; + color: var(--grey-40); +} + +#breadcrumbs.hidden { + visibility: hidden; +} + +.breadcrumb-item, .breadcrumb-separator { + display: flex; + margin: 0; + margin-inline-start: 20px; + padding: 8px; +} + +.breadcrumb-item { + align-items: center; + cursor: pointer; + color: var(--in-content-text-color); + border-radius: 4px; +} + +.breadcrumb-item:hover { + color: var(--in-content-accent-color); + background-color: var(--in-content-button-background-hover); +} + +.breadcrumb-item:active { + color: var(--in-content-accent-color-active); + background-color: var(--in-content-button-background-active); +} + +.breadcrumb-separator { + width: 15px; + list-style-image: url("chrome://browser/content/torconnect/arrow-right.svg"); +} + +.breadcrumb-separator:dir(rtl) { + scale: -1 1; +} + +.breadcrumb-icon { + display: inline list-item; + height: 16px; + list-style-position: inside; + fill: currentColor; + -moz-context-properties: fill; +} + +.breadcrumb-item.active { + color: var(--in-content-accent-color); +} + +.breadcrumb-item.disabled, .breadcrumb-item.disabled:hover, .breadcrumb-item.disabled:active { + color: var(--in-content-text-color); + opacity: 0.4; + cursor: default; +} + +.breadcrumb-item.error { + color: var(--in-content-danger-button-background); +} + +.breadcrumb-item.error:hover { + color: var(--in-content-danger-button-background-hover); +} + +.breadcrumb-item.error:active { + color: var(--in-content-danger-button-background-active); +} + +.breadcrumb-item.hidden, .breadcrumb-separator.hidden { + display: none; +} + +#connect-to-tor { + margin-inline-start: 0; +} + +#connect-to-tor-icon { + list-style-image: url("chrome://browser/content/torconnect/onion.svg"); +} + +#connection-assist-icon { + list-style-image: url("chrome://browser/content/torconnect/onion-slash-fillable.svg"); +} + +#location-settings-icon { + list-style-image: url("chrome://browser/content/torconnect/globe.svg"); +} + +#try-bridge { + cursor: default; +} + +#try-bridge-icon { + list-style-image: url("chrome://browser/content/torconnect/bridge.svg"); +} + +button { + --purple-button-text-color: rgb(251,251,254); + --in-content-primary-button-text-color: var(--purple-button-text-color); + --in-content-primary-button-background: var(--purple-60); + --in-content-primary-button-text-color-hover: var(--purple-button-text-color); + --in-content-primary-button-background-hover: var(--purple-70); + --in-content-primary-button-text-color-active: var(--purple-button-text-color); + --in-content-primary-button-background-active: var(--purple-80); + --in-content-focus-outline-color: var(--purple-60); + fill: white; +} + +#locationDropdownLabel { + margin-block: auto; + margin-inline: 4px; +} + +#locationDropdownLabel.error { + color: var(--in-content-danger-button-background) +} + +/* this follows similar css in error-pages.css for buttons */ +@media only screen and (min-width: 480px) { + form#locationDropdown { + margin-inline: 4px; + /* subtracting out the margin is needeed because by + default forms have different margins than buttons */ + max-width: calc(100% - 8px); + } +} + +@media only screen and (max-width: 480px) { + #tryAgainButton { + margin-top: 4px; + } +} + +form#locationDropdown { + width: 240px; +} + +form#locationDropdown select { + max-width: 100%; + padding-block: 0; + margin-inline: 0; + font-weight: 700; +} + +/* checkbox css */ +input[type="checkbox"]:not(:disabled) { + background-color: var(--grey-20)!important; +} + +input[type="checkbox"]:not(:disabled):checked { + background-color: var(--purple-60)!important; + color: white; + fill: white; +} + +input[type="checkbox"]:not(:disabled):hover { + /* override firefox's default blue border on hover */ + border-color: var(--purple-70); + background-color: var(--grey-30)!important; +} + +input[type="checkbox"]:not(:disabled):hover:checked { + background-color: var(--purple-70)!important; +} + +input[type="checkbox"]:not(:disabled):active { + background-color: var(--grey-40)!important; +} + +input[type="checkbox"]:not(:disabled):active:checked { + background-color: var(--purple-80)!important; +} + +:root { + --progressbar-shadow-start: rgba(255, 255, 255, 0.7); + --progressbar-gradient: linear-gradient(90deg, #FC00FF 0%, #00DBDE 50%, #FC00FF 100%); +} + +@media (prefers-color-scheme: dark) { + :root { + --progressbar-shadow-start: rgba(28, 27, 34, 0.7); + } +} + +#progressBar { + position: fixed; + top: 0; + inset-inline-start: 0; + width: 0%; + padding: 0; + margin: 0; + animation: progressAnimation 5s ease infinite; +} + +#progressBackground { + height: 66px; + margin-top: -26px; + background-image: + linear-gradient(var(--progressbar-shadow-start), var(--in-content-page-background) 100%), + var(--progressbar-gradient); + background-position: inherit; + filter: blur(5px); + border-end-end-radius: 33px; +} + +#progressSolid { + position: absolute; + top: 0; + width: 100%; + height: 7px; + background-image: var(--progressbar-gradient); + background-position: inherit; +} + +#progressBackground, #progressSolid { + background-size: 200% 100%; +} + +@keyframes progressAnimation { + 0% { + background-position: 200%; + } + 50% { + background-position: 100%; + } + 100% { + background-position: 0%; + } +} + +@keyframes progressAnimation { + 0% { + background-position: 200%; + } + 50% { + background-position: 100%; + } + 100% { + background-position: 0%; + } +} + +#connectPageContainer { + margin-top: 10vh; + width: 100%; + max-width: 45em; +} + +#quickstartCheckbox, #quickstartCheckboxLabel { + vertical-align: middle; +} + +/* mirrors p element spacing */ +#viewLogButton { + margin: 1em 0; +} + +body { + padding: 0px !important; + justify-content: space-between; + background-color: var(--in-content-page-background); +} + +.title { + background-image: url("chrome://browser/content/torconnect/onion.svg"); + -moz-context-properties: stroke, fill, fill-opacity; + fill-opacity: var(--onion-opacity); + fill: var(--onion-color); +} + +.title.offline, .title.assist, .title.final { + background-image: url("chrome://browser/content/torconnect/connection-failure.svg"); + stroke: var(--in-content-danger-button-background); +} + +.title.location { + background-image: url("chrome://browser/content/torconnect/connection-location.svg"); + stroke: var(--torbrowser-warning); +} diff --git a/browser/components/torconnect/content/aboutTorConnect.js b/browser/components/torconnect/content/aboutTorConnect.js new file mode 100644 index 000000000000..7f127a02288a --- /dev/null +++ b/browser/components/torconnect/content/aboutTorConnect.js @@ -0,0 +1,841 @@ +// Copyright (c) 2021, The Tor Project, Inc. + +/* eslint-env mozilla/frame-script */ + +// populated in AboutTorConnect.init() +let TorStrings = {}; +let TorConnectState = {}; +let InternetStatus = {}; + +const UIStates = Object.freeze({ + ConnectToTor: "ConnectToTor", + Offline: "Offline", + ConnectionAssist: "ConnectionAssist", + CouldNotLocate: "CouldNotLocate", + LocationConfirm: "LocationConfirm", + FinalError: "FinalError", +}); + +const BreadcrumbStatus = Object.freeze({ + Hidden: "hidden", + Disabled: "disabled", + Default: "default", + Active: "active", + Error: "error", +}); + +class AboutTorConnect { + selectors = Object.freeze({ + textContainer: { + title: "div.title", + titleText: "h1.title-text", + longContentText: "#connectLongContentText", + }, + progress: { + description: "p#connectShortDescText", + meter: "div#progressBar", + }, + breadcrumbs: { + container: "#breadcrumbs", + connectToTor: { + link: "#connect-to-tor", + label: "#connect-to-tor .breadcrumb-label", + }, + connectionAssist: { + separator: "#connection-assist-separator", + link: "#connection-assist", + label: "#connection-assist .breadcrumb-label", + }, + tryBridge: { + separator: "#try-bridge-separator", + link: "#try-bridge", + label: "#try-bridge .breadcrumb-label", + }, + }, + viewLog: { + button: "#viewLogButton", + }, + quickstart: { + container: "div#quickstartContainer", + checkbox: "input#quickstartCheckbox", + label: "label#quickstartCheckboxLabel", + }, + buttons: { + restart: "button#restartButton", + configure: "button#configureButton", + cancel: "button#cancelButton", + connect: "button#connectButton", + tryBridge: "button#tryBridgeButton", + locationDropdownLabel: "#locationDropdownLabel", + locationDropdown: "form#locationDropdown", + locationDropdownSelect: "form#locationDropdown select", + }, + }); + + elements = Object.freeze({ + title: document.querySelector(this.selectors.textContainer.title), + titleText: document.querySelector(this.selectors.textContainer.titleText), + longContentText: document.querySelector( + this.selectors.textContainer.longContentText + ), + progressDescription: document.querySelector( + this.selectors.progress.description + ), + progressMeter: document.querySelector(this.selectors.progress.meter), + breadcrumbContainer: document.querySelector( + this.selectors.breadcrumbs.container + ), + connectToTorLink: document.querySelector( + this.selectors.breadcrumbs.connectToTor.link + ), + connectToTorLabel: document.querySelector( + this.selectors.breadcrumbs.connectToTor.label + ), + connectionAssistSeparator: document.querySelector( + this.selectors.breadcrumbs.connectionAssist.separator + ), + connectionAssistLink: document.querySelector( + this.selectors.breadcrumbs.connectionAssist.link + ), + connectionAssistLabel: document.querySelector( + this.selectors.breadcrumbs.connectionAssist.label + ), + tryBridgeSeparator: document.querySelector( + this.selectors.breadcrumbs.tryBridge.separator + ), + tryBridgeLink: document.querySelector( + this.selectors.breadcrumbs.tryBridge.link + ), + tryBridgeLabel: document.querySelector( + this.selectors.breadcrumbs.tryBridge.label + ), + viewLogButton: document.querySelector(this.selectors.viewLog.button), + quickstartContainer: document.querySelector( + this.selectors.quickstart.container + ), + quickstartCheckbox: document.querySelector( + this.selectors.quickstart.checkbox + ), + quickstartLabel: document.querySelector(this.selectors.quickstart.label), + restartButton: document.querySelector(this.selectors.buttons.restart), + configureButton: document.querySelector(this.selectors.buttons.configure), + cancelButton: document.querySelector(this.selectors.buttons.cancel), + connectButton: document.querySelector(this.selectors.buttons.connect), + locationDropdownLabel: document.querySelector( + this.selectors.buttons.locationDropdownLabel + ), + locationDropdown: document.querySelector( + this.selectors.buttons.locationDropdown + ), + locationDropdownSelect: document.querySelector( + this.selectors.buttons.locationDropdownSelect + ), + tryBridgeButton: document.querySelector(this.selectors.buttons.tryBridge), + }); + + // a redirect url can be passed as a query parameter for the page to + // forward us to once bootstrap completes (otherwise the window will just close) + redirect = null; + + uiState = { + currentState: UIStates.ConnectToTor, + connectIsTryAgain: false, + allowAutomaticLocation: true, + selectedLocation: "automatic", + bootstrapCause: UIStates.ConnectToTor, + }; + + locations = {}; + + constructor() { + this.uiStates = Object.freeze( + Object.fromEntries([ + [UIStates.ConnectToTor, this.showConnectToTor.bind(this)], + [UIStates.Offline, this.showOffline.bind(this)], + [UIStates.ConnectionAssist, this.showConnectionAssistant.bind(this)], + [UIStates.CouldNotLocate, this.showCouldNotLocate.bind(this)], + [UIStates.LocationConfirm, this.showLocationConfirmation.bind(this)], + [UIStates.FinalError, this.showFinalError.bind(this)], + ]) + ); + } + + beginBootstrap() { + RPMSendAsyncMessage("torconnect:begin-bootstrap"); + } + + beginAutoBootstrap(countryCode) { + if (countryCode === "automatic") { + countryCode = ""; + } + RPMSendAsyncMessage("torconnect:begin-autobootstrap", countryCode); + } + + cancelBootstrap() { + RPMSendAsyncMessage("torconnect:cancel-bootstrap"); + } + + transitionUIState(nextState, connState) { + if (nextState !== this.uiState.currentState) { + this.uiState.currentState = nextState; + this.saveUIState(); + } + this.uiStates[nextState](connState); + } + + saveUIState() { + RPMSendAsyncMessage("torconnect:set-ui-state", this.uiState); + } + + /* + Element helper methods + */ + + show(element, primary) { + element.classList.toggle("primary", primary !== undefined && primary); + element.removeAttribute("hidden"); + } + + hide(element) { + element.setAttribute("hidden", "true"); + } + + hideButtons() { + this.hide(this.elements.quickstartContainer); + this.hide(this.elements.restartButton); + this.hide(this.elements.configureButton); + this.hide(this.elements.cancelButton); + this.hide(this.elements.connectButton); + this.hide(this.elements.locationDropdownLabel); + this.hide(this.elements.locationDropdown); + this.hide(this.elements.tryBridgeButton); + } + + populateLocations() { + const selectCountryRegion = document.createElement("option"); + selectCountryRegion.textContent = TorStrings.torConnect.selectCountryRegion; + selectCountryRegion.value = ""; + + // get all codes and names from TorStrings + const locationNodes = []; + for (const [code, name] of Object.entries(this.locations)) { + let option = document.createElement("option"); + option.value = code; + option.textContent = name; + locationNodes.push(option); + } + // locale sort by name + locationNodes.sort((left, right) => + left.textContent.localeCompare(right.textContent) + ); + this.elements.locationDropdownSelect.append( + selectCountryRegion, + ...locationNodes + ); + } + + populateFrequentLocations(locations) { + this.removeFrequentLocations(); + if (!locations || !locations.length) { + return; + } + + const locationNodes = []; + for (const code of locations) { + const option = document.createElement("option"); + option.value = code; + option.className = "frequent-location"; + // codes (partially) come from rdsys service, so make sure we have a + // string defined for it + let name = this.locations[code]; + if (!name) { + name = code; + } + option.textContent = name; + locationNodes.push(option); + } + // locale sort by name + locationNodes.sort((left, right) => + left.textContent.localeCompare(right.textContent) + ); + + const frequentGroup = document.createElement("optgroup"); + frequentGroup.setAttribute( + "label", + TorStrings.torConnect.frequentLocations + ); + frequentGroup.className = "frequent-location"; + const locationGroup = document.createElement("optgroup"); + locationGroup.setAttribute("label", TorStrings.torConnect.otherLocations); + locationGroup.className = "frequent-location"; + // options[0] is either "Select Country or Region" or "Automatic" + this.elements.locationDropdownSelect.options[0].after( + frequentGroup, + ...locationNodes, + locationGroup + ); + } + + removeFrequentLocations() { + const select = this.elements.locationDropdownSelect; + for (const option of select.querySelectorAll(".frequent-location")) { + option.remove(); + } + } + + validateLocation() { + const selectedIndex = this.elements.locationDropdownSelect.selectedIndex; + const selectedOption = this.elements.locationDropdownSelect.options[ + selectedIndex + ]; + if (!selectedOption.value) { + this.elements.tryBridgeButton.setAttribute("disabled", "disabled"); + } else { + this.elements.tryBridgeButton.removeAttribute("disabled"); + } + } + + setTitle(title, className) { + this.elements.titleText.textContent = title; + this.elements.title.className = "title"; + if (className) { + this.elements.title.classList.add(className); + } + document.title = title; + } + + setLongText(...args) { + this.elements.longContentText.textContent = ""; + this.elements.longContentText.append(...args); + } + + setProgress(description, visible, percent) { + this.elements.progressDescription.textContent = description; + if (visible) { + this.show(this.elements.progressMeter); + this.elements.progressMeter.style.width = `${percent}%`; + } else { + this.hide(this.elements.progressMeter); + } + } + + setBreadcrumbsStatus(connectToTor, connectionAssist, tryBridge) { + this.elements.breadcrumbContainer.classList.remove("hidden"); + const elems = [ + [this.elements.connectToTorLink, connectToTor, null], + [ + this.elements.connectionAssistLink, + connectionAssist, + this.elements.connectionAssistSeparator, + ], + [ + this.elements.tryBridgeLink, + tryBridge, + this.elements.tryBridgeSeparator, + ], + ]; + elems.forEach(([elem, status, separator]) => { + elem.classList.remove(BreadcrumbStatus.Hidden); + elem.classList.remove(BreadcrumbStatus.Disabled); + elem.classList.remove(BreadcrumbStatus.Active); + elem.classList.remove(BreadcrumbStatus.Error); + if (status !== "") { + elem.classList.add(status); + } + separator?.classList.toggle("hidden", status === BreadcrumbStatus.Hidden); + }); + } + + hideBreadcrumbs() { + this.elements.breadcrumbContainer.classList.add("hidden"); + } + + /* + These methods update the UI based on the current TorConnect state + */ + + updateUI(state) { + // calls update_$state() + this[`update_${state.State}`](state); + this.elements.quickstartCheckbox.checked = state.QuickStartEnabled; + } + + /* Per-state updates */ + + update_Initial(state) { + this.showConnectToTor(state); + } + + update_Configuring(state) { + if ( + state.StateChanged && + (state.PreviousState === TorConnectState.Bootstrapping || + state.PreviousState === TorConnectState.AutoBootstrapping) + ) { + // The bootstrap has been cancelled + this.transitionUIState(this.uiState.bootstrapCause, state); + } + } + + update_AutoBootstrapping(state) { + this.showBootstrapping(state); + } + + update_Bootstrapping(state) { + this.showBootstrapping(state); + } + + update_Error(state) { + if (!this.uiState.connectIsTryAgain) { + // TorConnect.hasBootstrapEverFailed remains false in case of Internet + // offline + this.uiState.connectIsTryAgain = true; + this.saveUIState(); + } + if (!state.StateChanged) { + return; + } + if (state.InternetStatus === InternetStatus.Offline) { + this.transitionUIState(UIStates.Offline, state); + } else if (state.PreviousState === TorConnectState.Bootstrapping) { + this.transitionUIState(UIStates.ConnectionAssist, state); + } else if (state.PreviousState === TorConnectState.AutoBootstrapping) { + if (this.uiState.bootstrapCause === UIStates.ConnectionAssist) { + if (this.getLocation() === "automatic") { + this.uiState.allowAutomaticLocation = false; + if (!state.DetectedLocation) { + this.transitionUIState(UIStates.CouldNotLocate, state); + return; + } + // Change the location only here, to avoid overriding any user change/ + // insisting with the detected location + this.setLocation(state.DetectedLocation); + } + this.transitionUIState(UIStates.LocationConfirm, state); + } else { + this.transitionUIState(UIStates.FinalError, state); + } + } else { + console.error( + "We received an error starting from an unexpected state", + state + ); + } + } + + update_Bootstrapped(state) { + const showProgressbar = true; + + this.setTitle(TorStrings.torConnect.torConnected, ""); + this.setLongText(TorStrings.settings.torPreferencesDescription); + this.setProgress("", showProgressbar, 100); + this.hideButtons(); + + // redirects page to the requested redirect url, removes about:torconnect + // from the page stack, so users cannot accidentally go 'back' to the + // now unresponsive page + window.location.replace(this.redirect); + } + + update_Disabled(state) { + // TODO: we should probably have some UX here if a user goes to about:torconnect when + // it isn't in use (eg using tor-launcher or system tor) + } + + showConnectToTor(state) { + this.setTitle(TorStrings.torConnect.torConnect, ""); + this.setLongText(TorStrings.settings.torPreferencesDescription); + this.setProgress("", false); + this.hide(this.elements.viewLogButton); + this.hideButtons(); + this.show(this.elements.quickstartContainer); + this.show(this.elements.configureButton); + this.show(this.elements.connectButton, true); + if (state?.StateChanged) { + this.elements.connectButton.focus(); + } + if (this.uiState.connectIsTryAgain) { + this.setBreadcrumbsStatus( + BreadcrumbStatus.Active, + BreadcrumbStatus.Default, + BreadcrumbStatus.Disabled + ); + this.elements.connectButton.textContent = TorStrings.torConnect.tryAgain; + } + this.uiState.bootstrapCause = UIStates.ConnectToTor; + this.saveUIState(); + } + + showBootstrapping(state) { + const showProgressbar = true; + let title = ""; + let description = ""; + const breadcrumbs = [ + BreadcrumbStatus.Disabled, + BreadcrumbStatus.Disabled, + BreadcrumbStatus.Disabled, + ]; + switch (this.uiState.bootstrapCause) { + case UIStates.ConnectToTor: + breadcrumbs[0] = BreadcrumbStatus.Active; + title = this.uiState.connectIsTryAgain + ? TorStrings.torConnect.tryAgain + : TorStrings.torConnect.torConnecting; + description = TorStrings.settings.torPreferencesDescription; + break; + case UIStates.ConnectionAssist: + breadcrumbs[2] = BreadcrumbStatus.Active; + title = TorStrings.torConnect.tryingBridge; + description = TorStrings.torConnect.assistDescription; + break; + case UIStates.CouldNotLocate: + breadcrumbs[2] = BreadcrumbStatus.Active; + title = TorStrings.torConnect.tryingBridgeAgain; + description = TorStrings.torConnect.errorLocationDescription; + break; + case UIStates.LocationConfirm: + breadcrumbs[2] = BreadcrumbStatus.Active; + title = TorStrings.torConnect.tryingBridgeAgain; + description = TorStrings.torConnect.isLocationCorrectDescription; + break; + } + this.setTitle(title, ""); + this.showConfigureConnectionLink(description); + this.setProgress("", showProgressbar, state.BootstrapProgress); + if (state.HasBootsrapEverFailed) { + this.setBreadcrumbsStatus(...breadcrumbs); + } else { + this.hideBreadcrumbs(); + } + this.hideButtons(); + if (state.ShowViewLog) { + this.show(this.elements.viewLogButton); + } else { + this.hide(this.elements.viewLogButton); + } + this.show(this.elements.cancelButton, true); + if (state.StateChanged) { + this.elements.cancelButton.focus(); + } + } + + showOffline(error) { + this.setTitle(TorStrings.torConnect.noInternet, "offline"); + this.setLongText(TorStrings.torConnect.noInternetDescription); + this.setProgress(error, false); + this.setBreadcrumbsStatus( + BreadcrumbStatus.Default, + BreadcrumbStatus.Active, + BreadcrumbStatus.Hidden + ); + this.show(this.elements.viewLogButton); + this.hideButtons(); + this.show(this.elements.configureButton); + this.show(this.elements.connectButton, true); + this.elements.connectButton.textContent = TorStrings.torConnect.tryAgain; + } + + showConnectionAssistant(state) { + this.setTitle(TorStrings.torConnect.couldNotConnect, "assist"); + this.showConfigureConnectionLink(TorStrings.torConnect.assistDescription); + this.setProgress(state?.ErrorDetails, false); + this.setBreadcrumbsStatus( + BreadcrumbStatus.Default, + BreadcrumbStatus.Active, + BreadcrumbStatus.Disabled + ); + this.showLocationForm(false, TorStrings.torConnect.tryBridge); + if (state?.StateChanged) { + this.elements.tryBridgeButton.focus(); + } + this.uiState.bootstrapCause = UIStates.ConnectionAssist; + this.saveUIState(); + } + + showCouldNotLocate(state) { + this.uiState.allowAutomaticLocation = false; + this.setTitle(TorStrings.torConnect.errorLocation, "location"); + this.showConfigureConnectionLink( + TorStrings.torConnect.errorLocationDescription + ); + this.setProgress(state.ErrorMessage, false); + this.setBreadcrumbsStatus( + BreadcrumbStatus.Default, + BreadcrumbStatus.Active, + BreadcrumbStatus.Disabled + ); + this.show(this.elements.viewLogButton); + this.showLocationForm(true, TorStrings.torConnect.tryBridge); + if (state.StateChanged) { + this.elements.tryBridgeButton.focus(); + } + this.uiState.bootstrapCause = UIStates.CouldNotLocate; + this.saveUIState(); + } + + showLocationConfirmation(state) { + this.setTitle(TorStrings.torConnect.isLocationCorrect, "location"); + this.showConfigureConnectionLink( + TorStrings.torConnect.isLocationCorrectDescription + ); + this.setProgress(state.ErrorMessage, false); + this.setBreadcrumbsStatus( + BreadcrumbStatus.Default, + BreadcrumbStatus.Default, + BreadcrumbStatus.Active + ); + this.show(this.elements.viewLogButton); + this.showLocationForm(true, TorStrings.torConnect.tryAgain); + if (state.StateChanged) { + this.elements.tryBridgeButton.focus(); + } + this.uiState.bootstrapCause = UIStates.LocationConfirm; + this.saveUIState(); + } + + showFinalError(state) { + this.setTitle(TorStrings.torConnect.finalError, "final"); + this.setLongText(TorStrings.torConnect.finalErrorDescription); + this.setProgress(state ? state.ErrorDetails : "", false); + this.setBreadcrumbsStatus( + BreadcrumbStatus.Default, + BreadcrumbStatus.Default, + BreadcrumbStatus.Active + ); + this.hideButtons(); + this.show(this.elements.restartButton); + this.show(this.elements.configureButton, true); + } + + showConfigureConnectionLink(text) { + const pieces = text.split("#1"); + const link = document.createElement("a"); + link.textContent = TorStrings.torConnect.configureConnection; + link.setAttribute("href", "#"); + link.addEventListener("click", e => { + e.preventDefault(); + RPMSendAsyncMessage("torconnect:open-tor-preferences"); + }); + if (pieces.length > 1) { + const first = pieces.shift(); + this.setLongText(first, link, ...pieces); + } else { + this.setLongText(text); + } + } + + showLocationForm(isError, buttonLabel) { + this.hideButtons(); + RPMSendQuery("torconnect:get-country-codes").then(codes => { + if (codes && codes.length) { + this.populateFrequentLocations(codes); + this.setLocation(); + } + }); + let firstOpt = this.elements.locationDropdownSelect.options[0]; + if (this.uiState.allowAutomaticLocation) { + firstOpt.value = "automatic"; + firstOpt.textContent = TorStrings.torConnect.automatic; + } else { + firstOpt.value = ""; + firstOpt.textContent = TorStrings.torConnect.selectCountryRegion; + } + this.setLocation(); + this.validateLocation(); + this.show(this.elements.locationDropdownLabel); + this.show(this.elements.locationDropdown); + this.elements.locationDropdownLabel.classList.toggle("error", isError); + this.show(this.elements.tryBridgeButton, true); + this.elements.tryBridgeButton.classList.toggle("danger-button", isError); + if (buttonLabel !== undefined) { + this.elements.tryBridgeButton.textContent = buttonLabel; + } + } + + getLocation() { + const selectedIndex = this.elements.locationDropdownSelect.selectedIndex; + return this.elements.locationDropdownSelect.options[selectedIndex].value; + } + + setLocation(code) { + if (!code) { + code = this.uiState.selectedLocation; + } else { + this.uiState.selectedLocation = code; + } + if (this.getLocation() === code) { + return; + } + const options = this.elements.locationDropdownSelect.options; + // We need to do this way, because we have repeated values that break + // the .value way to select (which would however require the label, + // rather than the code)... + for (let i = 0; i < options.length; i++) { + if (options[i].value === code) { + this.elements.locationDropdownSelect.selectedIndex = i; + break; + } + } + this.validateLocation(); + } + + initElements(direction) { + document.documentElement.setAttribute("dir", direction); + + this.elements.connectToTorLink.addEventListener("click", event => { + if (this.uiState.currentState === UIStates.ConnectToTor) { + return; + } + this.transitionUIState(UIStates.ConnectToTor, null); + RPMSendAsyncMessage("torconnect:broadcast-user-action", { + uiState: UIStates.ConnectToTor, + }); + }); + this.elements.connectToTorLabel.textContent = + TorStrings.torConnect.torConnect; + this.elements.connectionAssistLink.addEventListener("click", event => { + if ( + this.elements.connectionAssistLink.classList.contains( + BreadcrumbStatus.Active + ) || + this.elements.connectionAssistLink.classList.contains( + BreadcrumbStatus.Disabled + ) + ) { + return; + } + this.transitionUIState(UIStates.ConnectionAssist, null); + RPMSendAsyncMessage("torconnect:broadcast-user-action", { + uiState: UIStates.ConnectionAssist, + }); + }); + this.elements.connectionAssistLabel.textContent = + TorStrings.torConnect.breadcrumbAssist; + this.elements.tryBridgeLabel.textContent = + TorStrings.torConnect.breadcrumbTryBridge; + + this.hide(this.elements.viewLogButton); + this.elements.viewLogButton.textContent = TorStrings.torConnect.viewLog; + this.elements.viewLogButton.addEventListener("click", event => { + RPMSendAsyncMessage("torconnect:view-tor-logs"); + }); + + this.elements.quickstartCheckbox.addEventListener("change", () => { + const quickstart = this.elements.quickstartCheckbox.checked; + RPMSendAsyncMessage("torconnect:set-quickstart", quickstart); + }); + this.elements.quickstartLabel.textContent = + TorStrings.settings.quickstartCheckbox; + + this.elements.restartButton.textContent = + TorStrings.torConnect.restartTorBrowser; + this.elements.restartButton.addEventListener("click", () => { + RPMSendAsyncMessage("torconnect:restart"); + }); + + this.elements.configureButton.textContent = + TorStrings.torConnect.torConfigure; + this.elements.configureButton.addEventListener("click", () => { + RPMSendAsyncMessage("torconnect:open-tor-preferences"); + }); + + this.elements.cancelButton.textContent = TorStrings.torConnect.cancel; + this.elements.cancelButton.addEventListener("click", () => { + this.cancelBootstrap(); + }); + + this.elements.connectButton.textContent = + TorStrings.torConnect.torConnectButton; + this.elements.connectButton.addEventListener("click", () => { + this.beginBootstrap(); + }); + + this.populateLocations(); + this.elements.locationDropdownSelect.addEventListener("change", () => { + this.uiState.selectedLocation = this.getLocation(); + this.saveUIState(); + this.validateLocation(); + RPMSendAsyncMessage("torconnect:broadcast-user-action", { + location: this.uiState.selectedLocation, + }); + }); + + this.elements.locationDropdownLabel.textContent = + TorStrings.torConnect.yourLocation; + + this.elements.tryBridgeButton.textContent = TorStrings.torConnect.tryBridge; + this.elements.tryBridgeButton.addEventListener("click", () => { + const value = this.getLocation(); + if (value === "automatic") { + this.beginAutoBootstrap(); + } else { + this.beginAutoBootstrap(value); + } + }); + } + + initObservers() { + // TorConnectParent feeds us state blobs to we use to update our UI + RPMAddMessageListener("torconnect:state-change", ({ data }) => { + this.updateUI(data); + }); + RPMAddMessageListener("torconnect:user-action", ({ data }) => { + if (data.location) { + this.uiState.selectedLocation = data.location; + this.setLocation(); + } + if (data.uiState !== undefined) { + this.transitionUIState(data.uiState, data.connState); + } + }); + } + + initKeyboardShortcuts() { + document.onkeydown = evt => { + // unfortunately it looks like we still haven't standardized keycodes to + // integers, so we must resort to a string compare here :( + // see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code for relevant documentation + if (evt.code === "Escape") { + this.cancelBootstrap(); + } + }; + } + + async init() { + // see if a user has a final destination after bootstrapping + let params = new URLSearchParams(new URL(document.location.href).search); + if (params.has("redirect")) { + const encodedRedirect = params.get("redirect"); + this.redirect = decodeURIComponent(encodedRedirect); + } else { + // if the user gets here manually or via the button in the urlbar + // then we will redirect to about:tor + this.redirect = "about:tor"; + } + + let args = await RPMSendQuery("torconnect:get-init-args"); + + // various constants + TorStrings = Object.freeze(args.TorStrings); + TorConnectState = Object.freeze(args.TorConnectState); + InternetStatus = Object.freeze(args.InternetStatus); + this.locations = args.CountryNames; + + this.initElements(args.Direction); + this.initObservers(); + this.initKeyboardShortcuts(); + + if (Object.keys(args.State.UIState).length) { + this.uiState = args.State.UIState; + } else { + args.State.UIState = this.uiState; + this.saveUIState(); + } + this.uiStates[this.uiState.currentState](args.State); + // populate UI based on current state + this.updateUI(args.State); + } +} + +const aboutTorConnect = new AboutTorConnect(); +aboutTorConnect.init(); diff --git a/browser/components/torconnect/content/aboutTorConnect.xhtml b/browser/components/torconnect/content/aboutTorConnect.xhtml new file mode 100644 index 000000000000..6c4d3b9df6de --- /dev/null +++ b/browser/components/torconnect/content/aboutTorConnect.xhtml @@ -0,0 +1,66 @@ +<!-- Copyright (c) 2021, The Tor Project, Inc. --> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" /> + <link rel="stylesheet" href="chrome://browser/skin/onionPattern.css" type="text/css" media="all" /> + <link rel="stylesheet" href="chrome://browser/content/torconnect/aboutTorConnect.css" type="text/css" media="all" /> + </head> + <body> + <div id="progressBar"> + <div id="progressBackground" /> + <div id="progressSolid" /> + </div> + <div id="connectPageContainer" class="container"> + <div id="breadcrumbs" class="hidden"> + <span id="connect-to-tor" class="breadcrumb-item"> + <span id="connect-to-tor-icon" class="breadcrumb-icon" /> + <span class="breadcrumb-label"/> + </span> + <span id="connection-assist-separator" class="breadcrumb-separator breadcrumb-icon" /> + <span id="connection-assist" class="breadcrumb-item"> + <span id="connection-assist-icon" class="breadcrumb-icon" /> + <span class="breadcrumb-label"/> + </span> + <span id="try-bridge-separator" class="breadcrumb-separator breadcrumb-icon" /> + <span id="try-bridge" class="breadcrumb-item"> + <span id="try-bridge-icon" class="breadcrumb-icon" /> + <span class="breadcrumb-label"/> + </span> + </div> + <div id="text-container"> + <div class="title"> + <h1 class="title-text"/> + </div> + <div id="connectLongContent"> + <p id="connectLongContentText" /> + </div> + <div id="connectShortDesc"> + <p id="connectShortDescText" /> + </div> + + <button id="viewLogButton"></button> + + <div id="quickstartContainer"> + <input id="quickstartCheckbox" type="checkbox" /> + <label id="quickstartCheckboxLabel" for="quickstartCheckbox"/> + </div> + + <div id="connectButtonContainer" class="button-container"> + <button id="restartButton" hidden="true"></button> + <button id="configureButton" hidden="true"></button> + <button id="cancelButton" hidden="true"></button> + <button id="connectButton" class="primary" hidden="true"></button> + <label id="locationDropdownLabel" for="countries"/> + <form id="locationDropdown" hidden="true"> + <select id="countries"> + </select> + </form> + <button id="tryBridgeButton" class="primary" hidden="true"></button> + </div> + </div> + </div> +#include ../../../themes/shared/onionPattern.inc.xhtml + </body> + <script src="chrome://browser/content/torconnect/aboutTorConnect.js"/> +</html> diff --git a/browser/components/torconnect/content/arrow-right.svg b/browser/components/torconnect/content/arrow-right.svg new file mode 100644 index 000000000000..3f6d8ded52be --- /dev/null +++ b/browser/components/torconnect/content/arrow-right.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M10.9991 8.352L5.53406 13.818C5.41557 13.9303 5.25792 13.9918 5.09472 13.9895C4.93152 13.9872 4.77567 13.9212 4.66039 13.8057C4.54511 13.6902 4.47951 13.5342 4.47758 13.3709C4.47565 13.2077 4.53754 13.0502 4.65006 12.932L9.58506 7.998L4.65106 3.067C4.53868 2.94864 4.47697 2.79106 4.47909 2.62786C4.48121 2.46466 4.54698 2.30874 4.66239 2.19333C4.7778 2.07792 4.93372 2.01215 5.09692 2.01003C5.26012 2.00792 5.41769 2.06962 5.53606 2.182L11.0001 7.647L10.9991 8.352Z" fill="conte [...] +</svg> diff --git a/browser/components/torconnect/content/bridge.svg b/browser/components/torconnect/content/bridge.svg new file mode 100644 index 000000000000..5ae3f05dfd08 --- /dev/null +++ b/browser/components/torconnect/content/bridge.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M1 9.48528C1 9.48528 3.82843 9.48528 6.65685 6.65685C9.48528 3.82843 9.48528 1 9.48528 1" stroke="context-fill" stroke-width="1.25" stroke-linecap="round"/> + <path d="M6.65686 15.1421C6.65686 15.1421 6.65686 12.3137 9.48529 9.48529C12.3137 6.65686 15.1421 6.65686 15.1421 6.65686" stroke="context-fill" stroke-width="1.25" stroke-linecap="round"/> +</svg> diff --git a/browser/components/torconnect/content/connection-failure.svg b/browser/components/torconnect/content/connection-failure.svg new file mode 100644 index 000000000000..76af8c8b94e4 --- /dev/null +++ b/browser/components/torconnect/content/connection-failure.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" d="M 30,1.875 C 14.467,1.875 1.875,14.467 1.875,30 c 0,6.725546 2.3647525,12.894963 6.3027344,17.734375 l -4.7636719,4.763672 c -0.7834743,0.783474 -0.7834743,2.044651 0,2.828125 0.7834743,0.783474 2.0446507,0.783474 2.828125,0 C 21.046044,40.52782 34.415343,27.146014 47.546875,14.023438 v -0.002 l 6.779297,-6.7792965 c 0.783474,-0.7834743 0.783474,-2.0446507 0,-2.828125 -0.783474,-0.7834743 -2.044651,-0.7834743 -2.828125,0 L 47.734375,8.1777344 C 42.894963,4. [...] + <path fill="context-stroke" d="m59.5328 52.4973-10.261-18.5715c-.7112-1.2833-1.9917-1.9258-3.2722-1.9258-1.2806 0-2.5611.6425-3.2704 1.9258l-10.261 18.5715c-1.3701 2.4755.4312 5.5027 3.2704 5.5027h20.5238c2.8373 0 4.6387-3.0272 3.2704-5.5027zm-12.3666-.533-.4666.4642h-1.4l-.4667-.4642v-1.3929l.4667-.4643h1.4l.4666.4643zm0-4.992c0 .3078-.1229.603-.3417.8207s-.5155.34-.8249.34-.6062-.1223-.825-.34-.3417-.5129-.3417-.8207v-6.383c0-.3079.1229-.6031.3417-.8208s.5156-.34.825-.34.6061.1223.82 [...] +</svg> diff --git a/browser/components/torconnect/content/connection-location.svg b/browser/components/torconnect/content/connection-location.svg new file mode 100644 index 000000000000..1da280993b07 --- /dev/null +++ b/browser/components/torconnect/content/connection-location.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" d="M 30,1.875 C 14.467,1.875 1.875,14.467 1.875,30 c 0,6.725546 2.3647429,12.894963 6.3027344,17.734375 l -4.7636719,4.763672 c -0.7834743,0.783474 -0.7834743,2.044651 0,2.828125 0.7834743,0.783474 2.0446507,0.783474 2.828125,0 C 21.049647,40.524244 34.416498,27.144859 47.546875,14.023438 v -0.002 l 6.779297,-6.7792965 c 0.783474,-0.7834743 0.783474,-2.0446507 0,-2.828125 -0.783474,-0.7834743 -2.044651,-0.7834743 -2.828125,0 L 47.734375,8.1777344 C 42.894963,4 [...] + <path fill="context-stroke" d="m45 30c-3.713 0-7.274 1.475-9.8995 4.1005s-4.1005 6.1865-4.1005 9.8995 1.475 7.274 4.1005 9.8995 6.1865 4.1005 9.8995 4.1005 7.274-1.475 9.8995-4.1005 4.1005-6.1865 4.1005-9.8995-1.475-7.274-4.1005-9.8995-6.1865-4.1005-9.8995-4.1005zm4.5677 3.2667c1.9167.8229 3.5778 2.1443 4.8108 3.8267 1.233 1.6825 1.9928 3.6644 2.2004 5.7399h-4.1608c-.2298-3.4759-1.4862-6.8054-3.6101-9.5666zm-3.8248 0c2.5257 2.5792 4.06 5.967 4.3326 9.5666h-10.151c.2726-3.5996 1.8069-6. [...] +</svg> diff --git a/browser/components/torconnect/content/onion-slash-fillable.svg b/browser/components/torconnect/content/onion-slash-fillable.svg new file mode 100644 index 000000000000..18f1c5a5520b --- /dev/null +++ b/browser/components/torconnect/content/onion-slash-fillable.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg viewBox="0 0 16 16" width="16" height="16" xmlns="http://www.w3.org/2000/svg"> + <path d="m14.1161 15.6245c-.0821.0001-.1634-.016-.2393-.0474-.0758-.0314-.1447-.0775-.2027-.1356l-12.749984-12.749c-.109266-.11882-.168406-.27526-.165071-.43666.003335-.16139.068886-.31525.182967-.42946.114078-.11421.267868-.17994.429258-.18345.16139-.00352.3179.05544.43685.16457l12.74998 12.75c.1168.1176.1824.2767.1824.4425s-.0656.3249-.1824.4425c-.058.058-.1269.1039-.2028.1352-.0759.0312-.1571.0471-.2392.0468z" fill-opacity="context-fill-opacity" fill="context-fill" /> + <path d="m 8,0.5000002 c -1.61963,0 -3.1197431,0.5137987 -4.3457031,1.3867188 l 0.84375,0.8417968 0.7792969,0.78125 0.8613281,0.8613282 0.8164062,0.8164062 0.9863281,0.984375 h 0.058594 c 1.00965,0 1.828125,0.818485 1.828125,1.828125 0,0.01968 6.2e-4,0.039074 0,0.058594 L 10.8125,9.0449221 C 10.9334,8.7195921 11,8.3674002 11,8.0000002 c 0,-1.65685 -1.34314,-3 -3,-3 v -1.078125 c 2.25231,0 4.078125,1.825845 4.078125,4.078125 0,0.67051 -0.162519,1.3033281 -0.449219,1.8613281 l 0.861328,0 [...] +</svg> diff --git a/browser/components/torconnect/content/onion-slash.svg b/browser/components/torconnect/content/onion-slash.svg new file mode 100644 index 000000000000..93eb24b03905 --- /dev/null +++ b/browser/components/torconnect/content/onion-slash.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg viewBox="0 0 16 16" width="16" height="16" xmlns="http://www.w3.org/2000/svg"> + <path d="m14.1161 15.6245c-.0821.0001-.1634-.016-.2393-.0474-.0758-.0314-.1447-.0775-.2027-.1356l-12.749984-12.749c-.109266-.11882-.168406-.27526-.165071-.43666.003335-.16139.068886-.31525.182967-.42946.114078-.11421.267868-.17994.429258-.18345.16139-.00352.3179.05544.43685.16457l12.74998 12.75c.1168.1176.1824.2767.1824.4425s-.0656.3249-.1824.4425c-.058.058-.1269.1039-.2028.1352-.0759.0312-.1571.0471-.2392.0468z" fill-opacity="context-fill-opacity" fill="#ff0039" /> + <path d="m 8,0.5000002 c -1.61963,0 -3.1197431,0.5137987 -4.3457031,1.3867188 l 0.84375,0.8417968 0.7792969,0.78125 0.8613281,0.8613282 0.8164062,0.8164062 0.9863281,0.984375 h 0.058594 c 1.00965,0 1.828125,0.818485 1.828125,1.828125 0,0.01968 6.2e-4,0.039074 0,0.058594 L 10.8125,9.0449221 C 10.9334,8.7195921 11,8.3674002 11,8.0000002 c 0,-1.65685 -1.34314,-3 -3,-3 v -1.078125 c 2.25231,0 4.078125,1.825845 4.078125,4.078125 0,0.67051 -0.162519,1.3033281 -0.449219,1.8613281 l 0.861328,0 [...] +</svg> diff --git a/browser/components/torconnect/content/onion.svg b/browser/components/torconnect/content/onion.svg new file mode 100644 index 000000000000..7655a800d9ee --- /dev/null +++ b/browser/components/torconnect/content/onion.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg viewBox="0 0 16 16" width="16" height="16" xmlns="http://www.w3.org/2000/svg"> + <path d="M 8 0.5 C 3.85786 0.5 0.5 3.85786 0.5 8 C 0.5 12.1421 3.85786 15.5 8 15.5 C 12.1421 15.5 15.5 12.1421 15.5 8 C 15.5 3.85786 12.1421 0.5 8 0.5 z M 8 1.671875 C 11.4949 1.671875 14.328125 4.50507 14.328125 8 C 14.328125 11.4949 11.4949 14.328125 8 14.328125 L 8 13.25 C 10.89951 13.25 13.25 10.89951 13.25 8 C 13.25 5.10051 10.89951 2.75 8 2.75 L 8 1.671875 z M 8 3.921875 C 10.25231 3.921875 12.078125 5.74772 12.078125 8 C 12.078125 10.25231 10.25231 12.078125 8 12.078125 L 8 11 C [...] +</svg> diff --git a/browser/components/torconnect/content/torBootstrapUrlbar.js b/browser/components/torconnect/content/torBootstrapUrlbar.js new file mode 100644 index 000000000000..61b15b809ef6 --- /dev/null +++ b/browser/components/torconnect/content/torBootstrapUrlbar.js @@ -0,0 +1,95 @@ +// Copyright (c) 2021, The Tor Project, Inc. + +"use strict"; + +const { TorConnect, TorConnectTopics, TorConnectState } = ChromeUtils.import( + "resource:///modules/TorConnect.jsm" +); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +/* globals browser, gURLBar, Services */ + +var TorBootstrapUrlbar = { + selectors: Object.freeze({ + torConnect: { + box: "hbox#torconnect-box", + label: "label#torconnect-label", + }, + }), + + elements: null, + + updateTorConnectBox(state) { + switch (state) { + case TorConnectState.Initial: + case TorConnectState.Configuring: + case TorConnectState.AutoConfiguring: + case TorConnectState.Error: + case TorConnectState.FatalError: { + this.elements.torConnectBox.removeAttribute("hidden"); + this.elements.torConnectLabel.textContent = + TorStrings.torConnect.torNotConnectedConcise; + this.elements.inputContainer.setAttribute("torconnect", "offline"); + break; + } + case TorConnectState.Bootstrapping: { + this.elements.torConnectBox.removeAttribute("hidden"); + this.elements.torConnectLabel.textContent = + TorStrings.torConnect.torConnectingConcise; + this.elements.inputContainer.setAttribute("torconnect", "connecting"); + break; + } + case TorConnectState.Bootstrapped: { + this.elements.torConnectBox.removeAttribute("hidden"); + this.elements.torConnectLabel.textContent = + TorStrings.torConnect.torConnectedConcise; + this.elements.inputContainer.setAttribute("torconnect", "connected"); + // hide torconnect box after 5 seconds + setTimeout(() => { + this.elements.torConnectBox.setAttribute("hidden", "true"); + }, 5000); + break; + } + case TorConnectState.Disabled: { + this.elements.torConnectBox.setAttribute("hidden", "true"); + break; + } + default: + break; + } + }, + + observe(aSubject, aTopic, aData) { + if (aTopic === TorConnectTopics.StateChange) { + const obj = aSubject?.wrappedJSObject; + this.updateTorConnectBox(obj?.state); + } + }, + + init() { + if (TorConnect.shouldShowTorConnect) { + // browser isn't populated until init + this.elements = Object.freeze({ + torConnectBox: browser.ownerGlobal.document.querySelector( + this.selectors.torConnect.box + ), + torConnectLabel: browser.ownerGlobal.document.querySelector( + this.selectors.torConnect.label + ), + inputContainer: gURLBar._inputContainer, + }); + this.elements.torConnectBox.addEventListener("click", () => { + TorConnect.openTorConnect(); + }); + Services.obs.addObserver(this, TorConnectTopics.StateChange); + this.observing = true; + this.updateTorConnectBox(TorConnect.state); + } + }, + + uninit() { + if (this.observing) { + Services.obs.removeObserver(this, TorConnectTopics.StateChange); + } + }, +}; diff --git a/browser/components/torconnect/content/torconnect-urlbar.css b/browser/components/torconnect/content/torconnect-urlbar.css new file mode 100644 index 000000000000..96d9ff63ec71 --- /dev/null +++ b/browser/components/torconnect/content/torconnect-urlbar.css @@ -0,0 +1,37 @@ +/* + ensure our torconnect button is always visible (same rule as for the bookmark button) +*/ +label#torconnect-label { + margin: 0; + opacity: 0.6; + padding: 0 0.5em; +} + +hbox.urlbar-page-action#torconnect-box { + display: -moz-inline-box!important; +} + +/* hide when hidden attribute is set */ +hbox.urlbar-page-action#torconnect-box[hidden="true"], +/* hide when user is typing in URL bar */ +#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #torconnect-box { + display: none!important; +} + +/* hide urlbar's placeholder text when not connectd to tor */ +hbox#urlbar-input-container[torconnect="offline"] input#urlbar-input::placeholder, +hbox#urlbar-input-container[torconnect="connecting"] input#urlbar-input::placeholder { + opacity: 0; +} + +/* hide search suggestions when not connected to tor */ +hbox#urlbar-input-container[torconnect="offline"] + vbox.urlbarView, +hbox#urlbar-input-container[torconnect="connecting"] + vbox.urlbarView { + display: none!important; +} + +/* hide search icon when we are not connected to tor */ +hbox#urlbar-input-container[torconnect="offline"] > #identity-box[pageproxystate="invalid"] > #identity-icon, +hbox#urlbar-input-container[torconnect="connecting"] > #identity-box[pageproxystate="invalid"] > #identity-icon { + display: none!important; +} diff --git a/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml b/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml new file mode 100644 index 000000000000..60e985a72691 --- /dev/null +++ b/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml @@ -0,0 +1,10 @@ +# Copyright (c) 2021, The Tor Project, Inc. + +<hbox id="torconnect-box" + class="urlbar-icon-wrapper urlbar-page-action" + role="status" + hidden="true"> + <hbox id="torconnect-container"> + <label id="torconnect-label"/> + </hbox> +</hbox> \ No newline at end of file diff --git a/browser/components/torconnect/jar.mn b/browser/components/torconnect/jar.mn new file mode 100644 index 000000000000..4a65177f7eae --- /dev/null +++ b/browser/components/torconnect/jar.mn @@ -0,0 +1,13 @@ +browser.jar: + content/browser/torconnect/torBootstrapUrlbar.js (content/torBootstrapUrlbar.js) + content/browser/torconnect/aboutTorConnect.css (content/aboutTorConnect.css) +* content/browser/torconnect/aboutTorConnect.xhtml (content/aboutTorConnect.xhtml) + content/browser/torconnect/aboutTorConnect.js (content/aboutTorConnect.js) + content/browser/torconnect/arrow-right.svg (content/arrow-right.svg) + content/browser/torconnect/bridge.svg (content/bridge.svg) + content/browser/torconnect/connection-failure.svg (content/connection-failure.svg) + content/browser/torconnect/connection-location.svg (content/connection-location.svg) + content/browser/torconnect/onion.svg (content/onion.svg) + content/browser/torconnect/onion-slash.svg (content/onion-slash.svg) + content/browser/torconnect/onion-slash-fillable.svg (content/onion-slash-fillable.svg) + skin/classic/browser/torconnect-urlbar.css (content/torconnect-urlbar.css) diff --git a/browser/components/torconnect/moz.build b/browser/components/torconnect/moz.build new file mode 100644 index 000000000000..eb29c31a4243 --- /dev/null +++ b/browser/components/torconnect/moz.build @@ -0,0 +1,6 @@ +JAR_MANIFESTS += ['jar.mn'] + +EXTRA_JS_MODULES += [ + 'TorConnectChild.jsm', + 'TorConnectParent.jsm', +] diff --git a/browser/components/torpreferences/content/connectionPane.xhtml b/browser/components/torpreferences/content/connectionPane.xhtml index dded590fe0e7..47dbcb229978 100644 --- a/browser/components/torpreferences/content/connectionPane.xhtml +++ b/browser/components/torpreferences/content/connectionPane.xhtml @@ -167,9 +167,9 @@ <button id="torPreferences-advanced-button" class="accessory-button"/> </hbox> - <hbox align="center"> + <hbox align="center" data-subcategory="viewlogs"> <label id="torPreferences-torLogs" flex="1"/> - <vbox data-subcategory="viewlogs"> + <vbox> <button id="torPreferences-buttonTorLogs" class="accessory-button"/> </vbox> diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm index 20c7f9fa2c21..ce5bf88df509 100644 --- a/browser/components/urlbar/UrlbarInput.jsm +++ b/browser/components/urlbar/UrlbarInput.jsm @@ -10,6 +10,38 @@ const { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" );
+const { TorConnect } = ChromeUtils.import("resource:///modules/TorConnect.jsm"); + +// in certain scenarios we want user input uris to open in a new tab if they do so from the +// about:torconnect tab +function maybeUpdateOpenLocationForTorConnect( + openUILinkWhere, + currentURI, + destinationURI +) { + try { + // only open in new tab if: + if ( + // user is navigating away from about:torconnect + currentURI === "about:torconnect" && + // we are trying to open in same tab + openUILinkWhere === "current" && + // only if user still has not bootstrapped + TorConnect.shouldShowTorConnect && + // and user is not just navigating to about:torconnect + destinationURI !== "about:torconnect" + ) { + return "tab"; + } + } catch (e) { + // swallow exception and fall through returning original so we don't accidentally break + // anything if an exception is thrown + console.log(e?.message ? e.message : e); + } + + return openUILinkWhere; +} + XPCOMUtils.defineLazyModuleGetters(this, { AppConstants: "resource://gre/modules/AppConstants.jsm", BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.jsm", @@ -2547,6 +2579,11 @@ class UrlbarInput { this.selectionStart = this.selectionEnd = 0; }
+ openUILinkWhere = maybeUpdateOpenLocationForTorConnect( + openUILinkWhere, + this.window.gBrowser.currentURI.asciiSpec, + url + ); if (openUILinkWhere != "current") { this.handleRevert(); } diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css index 1a1bb759b8b4..c8dac0afb49a 100644 --- a/browser/themes/shared/browser-shared.css +++ b/browser/themes/shared/browser-shared.css @@ -21,6 +21,7 @@ @import url("chrome://browser/skin/ctrlTab.css"); @import url("chrome://browser/skin/customizableui/customizeMode.css"); @import url("chrome://browser/skin/UITour.css"); +@import url("chrome://browser/skin/torconnect-urlbar.css");
@namespace html url("http://www.w3.org/1999/xhtml");
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp index ad3abe7bffec..b1be884fe828 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -17795,8 +17795,56 @@ ColorScheme Document::DefaultColorScheme() const { }
ColorScheme Document::PreferredColorScheme(IgnoreRFP aIgnoreRFP) const { + // tor-browser#27476 + // Should this document ignore resist finger-printing settings with regards to + // setting the color scheme? + // Currently only enabled for about:torconnect but we could expand to other + // non-SystemPrincipal pages if we wish. + const auto documentUsesPreferredColorScheme = + [](auto const* constDocument) -> bool { + if (auto* document = const_cast<Document*>(constDocument); + document != nullptr) { + auto uri = document->GetDocBaseURI(); + + // Try and extract out our prepath and filepath portions of the uri to + // C-strings. + nsAutoCString prePathStr, filePathStr; + if (NS_FAILED(uri->GetPrePath(prePathStr)) || + NS_FAILED(uri->GetFilePath(filePathStr))) { + return false; + } + + // Stick them in string view for easy comparisons + std::string_view prePath(prePathStr.get(), prePathStr.Length()), + filePath(filePathStr.get(), filePathStr.Length()); + + // These about URIs will have the user's preferred color scheme exposed to + // them we can place other URIs here in the future if we wish. + // See nsIURI.idl for URI part definitions + constexpr struct { + std::string_view prePath; + std::string_view filePath; + } allowedURIs[] = { + {"about:", "torconnect"}, + }; + + // Check each uri in the allow list against this document's URI. + // Verify the prepath and the file path match + for (auto const& uri : allowedURIs) { + if (prePath == uri.prePath && filePath == uri.filePath) { + // Positive match means we can apply dark-mode to the page + return true; + } + } + } + + // Do not allow if no match or other error + return false; + }; + if (aIgnoreRFP == IgnoreRFP::No && - nsContentUtils::ShouldResistFingerprinting(this)) { + nsContentUtils::ShouldResistFingerprinting(this) && + !documentUsesPreferredColorScheme(this)) { return ColorScheme::Light; }
diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp index 8f7f880de51a..1d4ffff18a52 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp @@ -6110,6 +6110,8 @@ void nsGlobalWindowOuter::CloseOuter(bool aTrustedCaller) { NS_ENSURE_SUCCESS_VOID(rv);
if (!StringBeginsWith(url, u"about:neterror"_ns) && + // we want about:torconnect pages to be able to close themselves after bootstrap + !StringBeginsWith(url, u"about:torconnect"_ns) && !mBrowsingContext->HadOriginalOpener() && !aTrustedCaller && !IsOnlyTopLevelDocumentInSHistory()) { bool allowClose = diff --git a/toolkit/actors/AboutHttpsOnlyErrorParent.jsm b/toolkit/actors/AboutHttpsOnlyErrorParent.jsm index 1094126816f6..1d34525baf5c 100644 --- a/toolkit/actors/AboutHttpsOnlyErrorParent.jsm +++ b/toolkit/actors/AboutHttpsOnlyErrorParent.jsm @@ -12,6 +12,8 @@ const { PrivateBrowsingUtils } = ChromeUtils.import( ); const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { TorConnect } = ChromeUtils.import("resource:///modules/TorConnect.jsm"); + class AboutHttpsOnlyErrorParent extends JSWindowActorParent { get browser() { return this.browsingContext.top.embedderElement; @@ -22,7 +24,10 @@ class AboutHttpsOnlyErrorParent extends JSWindowActorParent { case "goBack": this.goBackFromErrorPage(this.browser); break; + case "ShouldShowTorConnect": + return TorConnect.shouldShowTorConnect; } + return undefined; }
goBackFromErrorPage(aBrowser) { diff --git a/toolkit/components/httpsonlyerror/content/errorpage.js b/toolkit/components/httpsonlyerror/content/errorpage.js index 50ece6e33ba1..3eec71861304 100644 --- a/toolkit/components/httpsonlyerror/content/errorpage.js +++ b/toolkit/components/httpsonlyerror/content/errorpage.js @@ -122,8 +122,17 @@ function addAutofocus(selector, position = "afterbegin") {
/* Initialize Page */
-initPage(); -// Dispatch this event so tests can detect that we finished loading the error page. -// We're using the same event name as neterror because BrowserTestUtils.jsm relies on that. -let event = new CustomEvent("AboutNetErrorLoad", { bubbles: true }); -document.dispatchEvent(event); +RPMSendQuery("ShouldShowTorConnect").then(shouldShow => { + if (shouldShow) { + // pass orginal destination as redirect param + const encodedRedirect = encodeURIComponent(document.location.href); + document.location.replace(`about:torconnect?redirect=${encodedRedirect}`); + return; + } + + initPage(); + // Dispatch this event so tests can detect that we finished loading the error page. + // We're using the same event name as neterror because BrowserTestUtils.jsm relies on that. + let event = new CustomEvent("AboutNetErrorLoad", { bubbles: true }); + document.dispatchEvent(event); +}); diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm index 2ae489873680..6b1da814765f 100644 --- a/toolkit/modules/RemotePageAccessManager.jsm +++ b/toolkit/modules/RemotePageAccessManager.jsm @@ -66,6 +66,7 @@ let RemotePageAccessManager = { RPMAddMessageListener: ["WWWReachable"], RPMTryPingSecureWWWLink: ["*"], RPMOpenSecureWWWLink: ["*"], + RPMSendQuery: ["ShouldShowTorConnect"], }, "about:certificate": { RPMSendQuery: ["getCertificates"], @@ -94,6 +95,7 @@ let RemotePageAccessManager = { RPMAddToHistogram: ["*"], RPMGetInnerMostURI: ["*"], RPMGetHttpResponseHeader: ["*"], + RPMSendQuery: ["ShouldShowTorConnect"], }, "about:plugins": { RPMSendQuery: ["RequestPlugins"], @@ -214,6 +216,30 @@ let RemotePageAccessManager = { RPMAddMessageListener: ["*"], RPMRemoveMessageListener: ["*"], }, + "about:tbupdate": { + RPMSendQuery: ["FetchUpdateData"], + }, + "about:torconnect": { + RPMAddMessageListener: [ + "torconnect:state-change", + "torconnect:user-action", + ], + RPMSendAsyncMessage: [ + "torconnect:open-tor-preferences", + "torconnect:begin-bootstrap", + "torconnect:begin-autobootstrap", + "torconnect:cancel-bootstrap", + "torconnect:set-quickstart", + "torconnect:view-tor-logs", + "torconnect:restart", + "torconnect:set-ui-state", + "torconnect:broadcast-user-action", + ], + RPMSendQuery: [ + "torconnect:get-init-args", + "torconnect:get-country-codes", + ], + }, },
/** diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js index de0091ae8d4d..962ca7a810a3 100644 --- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js +++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js @@ -74,6 +74,10 @@ function getGlobalScriptIncludes(scriptPath) { let match = line.match(globalScriptsRegExp); if (match) { let sourceFile = match[1] + .replace( + "chrome://browser/content/torconnect/", + "browser/components/torconnect/content/" + ) .replace( "chrome://browser/content/search/", "browser/components/search/content/"
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit bfe4ac1031aae0bba68e8157c452331e488a6ae9 Author: Arthur Edelstein arthuredelstein@gmail.com AuthorDate: Wed Aug 27 16:25:00 2014 -0700
Bug 12620: TorBrowser regression tests
Regression tests for Bug #2950: Make Permissions Manager memory-only
Regression tests for TB4: Tor Browser's Firefox preference overrides.
Note: many more functional tests could be made here
Regression tests for #2874: Block Components.interfaces from content
Bug 18923: Add a script to run all Tor Browser specific tests
Regression tests for Bug #16441: Suppress "Reset Tor Browser" prompt. --- run-tbb-tests | 66 +++++++++++++++++++++++++++++++++++ tbb-tests-ignore.txt | 13 +++++++ tbb-tests/browser.ini | 5 +++ tbb-tests/browser_tor_TB4.js | 35 +++++++++++++++++++ tbb-tests/browser_tor_bug2950.js | 74 ++++++++++++++++++++++++++++++++++++++++ tbb-tests/mochitest.ini | 3 ++ tbb-tests/moz.build | 9 +++++ tbb-tests/test_tor_bug2874.html | 25 ++++++++++++++ toolkit/toolkit.mozbuild | 3 +- 9 files changed, 232 insertions(+), 1 deletion(-)
diff --git a/run-tbb-tests b/run-tbb-tests new file mode 100755 index 000000000000..bc09839f9f05 --- /dev/null +++ b/run-tbb-tests @@ -0,0 +1,66 @@ +#!/bin/bash + +# This script runs all the Mochitest tests that have been added or +# modified since the last ffxbld commit. +# +# It does not currently run XPCShell tests. We should change this if we +# start using this type or other types of tests. +# +# The logs of the tests are stored in the tbb-tests.log file. +# Ignored tests are listed in the tbb-tests-ignore.txt file. +# +# https://trac.torproject.org/projects/tor/ticket/18923 + +IFS=$'\n' + +if [ -n "$USE_TESTS_LIST" ] && [ -f tbb-tests-list.txt ] +then + echo "Using tests list from file tbb-tests-list.txt" + tests=($(cat tbb-tests-list.txt)) +else + ffxbld_commit=$(git log -500 --format='oneline' | grep "TB3: Tor Browser's official .mozconfigs." \ + | head -1 | cut -d ' ' -f 1) + + tests=($(git diff --name-status "$ffxbld_commit" HEAD | \ + grep -e '^[AM].*/test_[^/]+.(html|xul)$' \ + -e '^[AM].*/browser_[^/]+.js$' \ + | sed 's/^[AM]\s+//')) +fi + +echo 'The following tests will be run:' +for i in "${!tests[@]}" +do + if [ -z "$USE_TESTS_LIST" ] \ + && grep -q "^${tests[$i]}$" tbb-tests-ignore.txt + then + unset "tests[$i]" + continue + fi + echo "- ${tests[$i]}" +done + +if [ -n "$WRITE_TESTS_LIST" ] +then + rm -f tbb-tests-list.txt + for i in "${!tests[@]}" + do + echo "${tests[$i]}" >> tbb-tests-list.txt + done + exit 0 +fi + +rm -f tbb-tests.log +echo $'\n''Starting tests' +# We need `security.nocertdb = false` because of #18087. That pref is +# forced to have the same value as `browser.privatebrowsing.autostart` in +# torbutton, so we just set `browser.privatebrowsing.autostart=false` here. +./mach mochitest --log-tbpl tbb-tests.log \ + --setpref network.file.path_blacklist='' \ + --setpref extensions.torbutton.use_nontor_proxy=true \ + --setpref browser.privatebrowsing.autostart=false \ + "${tests[@]}" + +echo "*************************" +echo "*************************" +echo "Summary of failed tests:" +grep --color=never TEST-UNEXPECTED-FAIL tbb-tests.log diff --git a/tbb-tests-ignore.txt b/tbb-tests-ignore.txt new file mode 100644 index 000000000000..ee3927a9e7c4 --- /dev/null +++ b/tbb-tests-ignore.txt @@ -0,0 +1,13 @@ +browser/extensions/onboarding/test/browser/browser_onboarding_accessibility.js +browser/extensions/onboarding/test/browser/browser_onboarding_keyboard.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification_2.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification_3.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification_4.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification_5.js +browser/extensions/onboarding/test/browser/browser_onboarding_notification_click_auto_complete_tour.js +browser/extensions/onboarding/test/browser/browser_onboarding_select_default_tour.js +browser/extensions/onboarding/test/browser/browser_onboarding_skip_tour.js +browser/extensions/onboarding/test/browser/browser_onboarding_tours.js +browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js +browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js diff --git a/tbb-tests/browser.ini b/tbb-tests/browser.ini new file mode 100644 index 000000000000..f481660f1417 --- /dev/null +++ b/tbb-tests/browser.ini @@ -0,0 +1,5 @@ +[DEFAULT] + +[browser_tor_bug2950.js] +[browser_tor_omnibox.js] +[browser_tor_TB4.js] diff --git a/tbb-tests/browser_tor_TB4.js b/tbb-tests/browser_tor_TB4.js new file mode 100644 index 000000000000..8bb12f360e5e --- /dev/null +++ b/tbb-tests/browser_tor_TB4.js @@ -0,0 +1,35 @@ +// # Test for TB4: Tor Browser's Firefox preference overrides +// This is a minimal test to check whether the 000-tor-browser.js +// pref overrides are being used at all or not. More comprehensive +// pref tests are maintained in the tor-browser-bundle-testsuite project. + +function test() { + +let expectedPrefs = [ + // Homepage + ["browser.startup.homepage", "about:tor"], + + // Disable the "Refresh" prompt that is displayed for stale profiles. + ["browser.disableResetPrompt", true], + + // Version placeholder + ["torbrowser.version", "dev-build"], + ]; + +let getPref = function (prefName) { + let type = Services.prefs.getPrefType(prefName); + if (type === Services.prefs.PREF_INT) return Services.prefs.getIntPref(prefName); + if (type === Services.prefs.PREF_BOOL) return Services.prefs.getBoolPref(prefName); + if (type === Services.prefs.PREF_STRING) return Services.prefs.getCharPref(prefName); + // Something went wrong. + throw new Error("Can't access pref " + prefName); +}; + +let testPref = function([key, expectedValue]) { + let foundValue = getPref(key); + is(foundValue, expectedValue, "Pref '" + key + "' should be '" + expectedValue +"'."); +}; + +expectedPrefs.map(testPref); + +} // end function test() diff --git a/tbb-tests/browser_tor_bug2950.js b/tbb-tests/browser_tor_bug2950.js new file mode 100644 index 000000000000..16e41344a3c4 --- /dev/null +++ b/tbb-tests/browser_tor_bug2950.js @@ -0,0 +1,74 @@ +// # Regression tests for tor Bug #2950, Make Permissions Manager memory-only +// Ensures that permissions.sqlite file in profile directory is not written to, +// even when we write a value to Firefox's permissions database. + +// The requisite test() function. +function test() { + +// Needed because of asynchronous part later in the test. +waitForExplicitFinish(); + +// Shortcut +let Ci = Components.interfaces; + +// ## utility functions + +// __principal(spec)__. +// Creates a principal instance from a spec +// (string address such as "https://www.torproject.org"). +let principal = spec => Services.scriptSecurityManager.createContentPrincipalFromOrigin(spec); + +// __setPermission(spec, key, value)__. +// Sets the site permission of type key to value, for the site located at address spec. +let setPermission = (spec, key, value) => SitePermissions.setForPrincipal(principal(spec), key, value); + +// __getPermission(spec, key)__. +// Reads the site permission value for permission type key, for the site +// located at address spec. +let getPermission = (spec, key) => SitePermissions.getForPrincipal(principal(spec), key); + +// __profileDirPath__. +// The Firefox Profile directory. Expected location of various persistent files. +let profileDirPath = Services.dirsvc.get("ProfD", Components.interfaces.nsIFile).path; + +// __fileInProfile(fileName)__. +// Returns an nsIFile instance corresponding to a file in the Profile directory. +let fileInProfile = fileName => FileUtils.File(profileDirPath + "/" + fileName); + +// ## Now let's run the test. + +let SITE = "https://www.torproject.org", + KEY = "popup"; + +let permissionsFile = fileInProfile("permissions.sqlite"), + lastModifiedTime = null, + newModifiedTime = null; +if (permissionsFile.exists()) { + lastModifiedTime = permissionsFile.lastModifiedTime; +} +// Read the original value of the permission. +let originalValue = getPermission(SITE, KEY); + +// We need to delay by at least 1000 ms, because that's the granularity +// of file time stamps, it seems. +window.setTimeout( + function () { + // Set the permission to a new value. + setPermission(SITE, KEY, SitePermissions.BLOCK); + // Now read back the permission value again. + let newReadValue = getPermission(SITE, KEY); + // Compare to confirm that the permission + // value was successfully changed. + Assert.notDeepEqual(originalValue, newReadValue, "Set a value in permissions db (perhaps in memory)."); + // If file existed or now exists, get the current time stamp. + if (permissionsFile.exists()) { + newModifiedTime = permissionsFile.lastModifiedTime; + } + // If file was created or modified since we began this test, + // then permissions db is not memory only. Complain! + is(lastModifiedTime, newModifiedTime, "Don't write to permissions.sqlite file on disk."); + // We are done with the test. + finish(); + }, 1100); + +} // test() diff --git a/tbb-tests/mochitest.ini b/tbb-tests/mochitest.ini new file mode 100644 index 000000000000..cc5172733bbe --- /dev/null +++ b/tbb-tests/mochitest.ini @@ -0,0 +1,3 @@ +[DEFAULT] + +[test_tor_bug2874.html] diff --git a/tbb-tests/moz.build b/tbb-tests/moz.build new file mode 100644 index 000000000000..01db60b9c28a --- /dev/null +++ b/tbb-tests/moz.build @@ -0,0 +1,9 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +MOCHITEST_MANIFESTS += ["mochitest.ini"] + +BROWSER_CHROME_MANIFESTS += ["browser.ini"] diff --git a/tbb-tests/test_tor_bug2874.html b/tbb-tests/test_tor_bug2874.html new file mode 100644 index 000000000000..c0a956e9f687 --- /dev/null +++ b/tbb-tests/test_tor_bug2874.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<html> +<!-- +Tor bug +https://trac.torproject.org/projects/tor/ticket/2874 +--> +<head> + <meta charset="utf-8"> + <title>Test for Tor Bug 2874</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + is(typeof Components, 'undefined', "The global window object should not expose a Components property to untrusted content."); + </script> +</head> +<body> +<a target="_blank" href="https://trac.torproject.org/projects/tor/ticket/2874">Tor Bug 2874</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +</body> +</html> diff --git a/toolkit/toolkit.mozbuild b/toolkit/toolkit.mozbuild index 1241f1b0f94e..3873aec36f63 100644 --- a/toolkit/toolkit.mozbuild +++ b/toolkit/toolkit.mozbuild @@ -89,7 +89,8 @@ if CONFIG['MOZ_WEBRTC'] and CONFIG['COMPILE_ENVIRONMENT']: ]
if CONFIG['ENABLE_TESTS']: - DIRS += ['/testing/specialpowers'] + DIRS += ['/testing/specialpowers', + '/tbb-tests']
DIRS += [ '/testing/gtest',
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit cc476c1e85c78d22446c95c7baaa0063ad879b05 Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Fri Jan 13 11:40:24 2017 -0500
Bug 4234: Use the Firefox Update Process for Tor Browser.
The following files are never updated: TorBrowser/Data/Browser/profiles.ini TorBrowser/Data/Browser/profile.default/bookmarks.html TorBrowser/Data/Tor/torrc Mac OS: Store update metadata under TorBrowser/UpdateInfo. Removed the %OS_VERSION% component from the update URL (13047) and added support for minSupportedOSVersion, an attribute of the <update> element that may be used to trigger Firefox's "unsupported platform" behavior. Hide the "What's new" links (set app.releaseNotesURL value to about:blank). Windows: disable "runas" code path in updater (15201). Windows: avoid writing to the registry (16236). Also includes fixes for tickets 13047, 13301, 13356, 13594, 15406, 16014, 16909, 24476, and 25909.
Also fix Bug 26049: reduce the delay before the update prompt is displayed. Instead of Firefox's 2 days, we use 1 hour (after which time the update doorhanger will be displayed).
Also fix bug 27221: purge the startup cache if the Tor Browser version changed (even if the Firefox version and build ID did not change), e.g., after a minor Tor Browser update.
Also fix 32616: Disable GetSecureOutputDirectoryPath() functionality.
Bug 26048: potentially confusing "restart to update" message
Within the update doorhanger, remove the misleading message that mentions that windows will be restored after an update is applied, and replace the "Restart and Restore" button label with an existing "Restart to update Tor Browser" string.
Bug 28885: notify users that update is downloading
Add a "Downloading Tor Browser update" item which appears in the hamburger (app) menu while the update service is downloading a MAR file. Before this change, the browser did not indicate to the user that an update was in progress, which is especially confusing in Tor Browser because downloads often take some time. If the user clicks on the new menu item, the about dialog is opened to allow the user to see download progress.
As part of this fix, the update service was changed to always show update-related messages in the hamburger menu, even if the update was started in the foreground via the about dialog or via the "Check for Tor Browser Update" toolbar menu item. This change is consistent with the Tor Browser goal of making sure users are informed about the update process.
Removed #28885 parts of this patch which have been uplifted to Firefox. --- browser/app/Makefile.in | 2 + browser/app/profile/firefox.js | 10 +- browser/base/content/aboutDialog-appUpdater.js | 2 +- browser/base/content/aboutDialog.js | 14 +- browser/components/BrowserContentHandler.jsm | 35 ++- .../customizableui/content/panelUI.inc.xhtml | 2 +- browser/confvars.sh | 15 + browser/installer/package-manifest.in | 2 + build/application.ini.in | 2 +- build/moz.configure/init.configure | 3 +- config/createprecomplete.py | 18 +- .../client/aboutdebugging/src/actions/runtimes.js | 5 + toolkit/modules/UpdateUtils.jsm | 31 +- toolkit/mozapps/extensions/AddonManager.jsm | 25 ++ toolkit/mozapps/extensions/test/browser/head.js | 1 + .../extensions/test/xpcshell/head_addons.js | 1 + toolkit/mozapps/update/UpdateService.jsm | 200 ++++++++++--- toolkit/mozapps/update/UpdateServiceStub.jsm | 4 + toolkit/mozapps/update/common/updatehelper.cpp | 8 + toolkit/mozapps/update/updater/launchchild_osx.mm | 2 + toolkit/mozapps/update/updater/moz.build | 2 +- toolkit/mozapps/update/updater/updater.cpp | 325 ++++++++++++++++++--- toolkit/xre/MacLaunchHelper.h | 2 + toolkit/xre/MacLaunchHelper.mm | 2 + toolkit/xre/nsAppRunner.cpp | 22 +- toolkit/xre/nsUpdateDriver.cpp | 130 ++++++++- toolkit/xre/nsXREDirProvider.cpp | 38 ++- tools/update-packaging/common.sh | 64 ++-- tools/update-packaging/make_full_update.sh | 25 ++ tools/update-packaging/make_incremental_update.sh | 71 ++++- 30 files changed, 905 insertions(+), 158 deletions(-)
diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 8dd3a9a65661..3a5550c96c15 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -97,10 +97,12 @@ tools repackage:: $(DIST)/bin/$(MOZ_APP_NAME) $(objdir)/macbuild/Contents/MacOS- rsync -aL $(DIST)/bin/$(MOZ_APP_NAME) '$(dist_dest)/Contents/MacOS' cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/firefox.icns '$(dist_dest)/Contents/Resources/firefox.icns' cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/document.icns '$(dist_dest)/Contents/Resources/document.icns' +ifndef TOR_BROWSER_UPDATE $(MKDIR) -p '$(dist_dest)/Contents/Library/LaunchServices' ifdef MOZ_UPDATER mv -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices' ln -s ../../../../Library/LaunchServices/org.mozilla.updater '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' +endif endif printf APPLTORB > '$(dist_dest)/Contents/PkgInfo' endif diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 70e71c0b993e..b86b202646cd 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -140,14 +140,8 @@ pref("app.update.elevation.promptMaxAttempts", 2); pref("app.update.notifyDuringDownload", false);
// If set to true, the Update Service will automatically download updates if the -// user can apply updates. This pref is no longer used on Windows, except as the -// default value to migrate to the new location that this data is now stored -// (which is in a file in the update directory). Because of this, this pref -// should no longer be used directly. Instead, getAppUpdateAutoEnabled and -// getAppUpdateAutoEnabled from UpdateUtils.jsm should be used. -#ifndef XP_WIN - pref("app.update.auto", true); -#endif +// user can apply updates. +pref("app.update.auto", true);
// If set to true, the Update Service will apply updates in the background // when it finishes downloading them. diff --git a/browser/base/content/aboutDialog-appUpdater.js b/browser/base/content/aboutDialog-appUpdater.js index b29726c1aab2..d75c5444b84f 100644 --- a/browser/base/content/aboutDialog-appUpdater.js +++ b/browser/base/content/aboutDialog-appUpdater.js @@ -174,7 +174,7 @@ appUpdater.prototype = { if (aChildID == "downloadAndInstall") { let updateVersion = gAppUpdater.update.displayVersion; // Include the build ID if this is an "a#" (nightly or aurora) build - if (/a\d+$/.test(updateVersion)) { + if (!AppConstants.TOR_BROWSER_UPDATE && /a\d+$/.test(updateVersion)) { let buildID = gAppUpdater.update.buildID; let year = buildID.slice(0, 4); let month = buildID.slice(4, 6); diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js index 69e7c510b305..458a52201e82 100644 --- a/browser/base/content/aboutDialog.js +++ b/browser/base/content/aboutDialog.js @@ -54,15 +54,15 @@ async function init(aEvent) { bits: Services.appinfo.is64Bit ? 64 : 32, };
+ // Adjust version text to show the Tor Browser version + versionAttributes.version = + AppConstants.TOR_BROWSER_VERSION + + " (based on Mozilla Firefox " + + AppConstants.MOZ_APP_VERSION_DISPLAY + + ")"; + let version = Services.appinfo.version; if (/a\d+$/.test(version)) { - versionId = "aboutDialog-version-nightly"; - let buildID = Services.appinfo.appBuildID; - let year = buildID.slice(0, 4); - let month = buildID.slice(4, 6); - let day = buildID.slice(6, 8); - versionAttributes.isodate = `${year}-${month}-${day}`; - document.getElementById("experimental").hidden = false; document.getElementById("communityDesc").hidden = true; } diff --git a/browser/components/BrowserContentHandler.jsm b/browser/components/BrowserContentHandler.jsm index 58edd37d9599..714a5fac8bf0 100644 --- a/browser/components/BrowserContentHandler.jsm +++ b/browser/components/BrowserContentHandler.jsm @@ -37,6 +37,9 @@ XPCOMUtils.defineLazyGetter(this, "gSystemPrincipal", () => ); XPCOMUtils.defineLazyGlobalGetters(this, [URL]);
+const kTBSavedVersionPref = + "browser.startup.homepage_override.torbrowser.version"; + // One-time startup homepage override configurations const ONCE_DOMAINS = ["mozilla.org", "firefox.com"]; const ONCE_PREF = "browser.startup.homepage_override.once"; @@ -100,7 +103,8 @@ const OVERRIDE_NEW_BUILD_ID = 3; * Returns: * OVERRIDE_NEW_PROFILE if this is the first run with a new profile. * OVERRIDE_NEW_MSTONE if this is the first run with a build with a different - * Gecko milestone (i.e. right after an upgrade). + * Gecko milestone or Tor Browser version (i.e. right + * after an upgrade). * OVERRIDE_NEW_BUILD_ID if this is the first run with a new build ID of the * same Gecko milestone (i.e. after a nightly upgrade). * OVERRIDE_NONE otherwise. @@ -117,6 +121,8 @@ function needHomepageOverride(prefb) {
var mstone = Services.appinfo.platformVersion;
+ var savedTBVersion = prefb.getCharPref(kTBSavedVersionPref, null); + var savedBuildID = prefb.getCharPref( "browser.startup.homepage_override.buildID", "" @@ -138,7 +144,21 @@ function needHomepageOverride(prefb) {
prefb.setCharPref("browser.startup.homepage_override.mstone", mstone); prefb.setCharPref("browser.startup.homepage_override.buildID", buildID); - return savedmstone ? OVERRIDE_NEW_MSTONE : OVERRIDE_NEW_PROFILE; + prefb.setCharPref(kTBSavedVersionPref, AppConstants.TOR_BROWSER_VERSION); + + // After an upgrade from an older release of Tor Browser (<= 5.5a1), the + // savedmstone will be undefined because those releases included the + // value "ignore" for the browser.startup.homepage_override.mstone pref. + // To correctly detect an upgrade vs. a new profile, we check for the + // presence of the "app.update.postupdate" pref. + let updated = prefb.prefHasUserValue("app.update.postupdate"); + return savedmstone || updated ? OVERRIDE_NEW_MSTONE : OVERRIDE_NEW_PROFILE; + } + + if (AppConstants.TOR_BROWSER_VERSION != savedTBVersion) { + prefb.setCharPref("browser.startup.homepage_override.buildID", buildID); + prefb.setCharPref(kTBSavedVersionPref, AppConstants.TOR_BROWSER_VERSION); + return OVERRIDE_NEW_MSTONE; }
if (buildID != savedBuildID) { @@ -651,6 +671,10 @@ nsBrowserContentHandler.prototype = { "browser.startup.homepage_override.buildID", "unknown" ); + + // We do the same for the Tor Browser version. + let old_tbversion = prefb.getCharPref(kTBSavedVersionPref, null); + override = needHomepageOverride(prefb); if (override != OVERRIDE_NONE) { switch (override) { @@ -677,9 +701,10 @@ nsBrowserContentHandler.prototype = { "startup.homepage_override_url" ); let update = UpdateManager.readyUpdate; + let old_version = old_tbversion ? old_tbversion : old_mstone; if ( update && - Services.vc.compare(update.appVersion, old_mstone) > 0 + Services.vc.compare(update.appVersion, old_version) > 0 ) { overridePage = getPostUpdateOverridePage(update, overridePage); // Send the update ping to signal that the update was successful. @@ -687,6 +712,10 @@ nsBrowserContentHandler.prototype = { }
overridePage = overridePage.replace("%OLD_VERSION%", old_mstone); + overridePage = overridePage.replace( + "%OLD_TOR_BROWSER_VERSION%", + old_tbversion + ); break; case OVERRIDE_NEW_BUILD_ID: if (UpdateManager.readyUpdate) { diff --git a/browser/components/customizableui/content/panelUI.inc.xhtml b/browser/components/customizableui/content/panelUI.inc.xhtml index 028dbf26e636..fdcfa732aa59 100644 --- a/browser/components/customizableui/content/panelUI.inc.xhtml +++ b/browser/components/customizableui/content/panelUI.inc.xhtml @@ -151,7 +151,7 @@ hasicon="true" hidden="true"> <popupnotificationcontent id="update-restart-notification-content" orient="vertical"> - <description id="update-restart-description" data-lazy-l10n-id="appmenu-update-restart-message2"></description> + <description id="update-restart-description"> </description> </popupnotificationcontent> </popupnotification>
diff --git a/browser/confvars.sh b/browser/confvars.sh index 9111f677f0a4..83979ddf4d5b 100755 --- a/browser/confvars.sh +++ b/browser/confvars.sh @@ -17,6 +17,21 @@ MOZ_BRANDING_DIRECTORY=browser/branding/unofficial MOZ_OFFICIAL_BRANDING_DIRECTORY=browser/branding/official MOZ_APP_ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+# ACCEPTED_MAR_CHANNEL_IDS should usually be the same as the value MAR_CHANNEL_ID. +# If more than one ID is needed, then you should use a comma separated list +# of values. +# The MAR_CHANNEL_ID must not contain the following 3 characters: ",\t " +if test "$MOZ_UPDATE_CHANNEL" = "alpha"; then + ACCEPTED_MAR_CHANNEL_IDS=torbrowser-torproject-alpha + MAR_CHANNEL_ID=torbrowser-torproject-alpha +elif test "$MOZ_UPDATE_CHANNEL" = "nightly"; then + ACCEPTED_MAR_CHANNEL_IDS=torbrowser-torproject-nightly + MAR_CHANNEL_ID=torbrowser-torproject-nightly +else + ACCEPTED_MAR_CHANNEL_IDS=torbrowser-torproject-release + MAR_CHANNEL_ID=torbrowser-torproject-release +fi + MOZ_PROFILE_MIGRATOR=1
# Include the DevTools client, not just the server (which is the default) diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index 04acc38fa5cf..d66e99231802 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -36,8 +36,10 @@ ; Mac bundle stuff @APPNAME@/Contents/Info.plist #ifdef MOZ_UPDATER +#ifndef TOR_BROWSER_UPDATE @APPNAME@/Contents/Library/LaunchServices #endif +#endif @APPNAME@/Contents/PkgInfo @RESPATH@/firefox.icns @RESPATH@/document.icns diff --git a/build/application.ini.in b/build/application.ini.in index 6df13230a45b..f943f2d41cd3 100644 --- a/build/application.ini.in +++ b/build/application.ini.in @@ -52,5 +52,5 @@ ServerURL=@MOZ_CRASHREPORTER_URL@/submit?id=@MOZ_APP_ID@&version=@MOZ_APP_VERSIO
#if MOZ_UPDATER [AppUpdate] -URL=https://@MOZ_APPUPDATE_HOST@/update/6/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_... +URL=https://aus1.torproject.org/torbrowser/update_3/%CHANNEL%/%BUILD_TARGET%/%VE... #endif diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure index 587501874ffd..e64852eb3ac0 100644 --- a/build/moz.configure/init.configure +++ b/build/moz.configure/init.configure @@ -957,7 +957,6 @@ def version_path(path): # set RELEASE_OR_BETA and NIGHTLY_BUILD variables depending on the cycle we're in # The logic works like this: # - if we have "a1" in GRE_MILESTONE, we're building Nightly (define NIGHTLY_BUILD) -# - otherwise, if we have "a" in GRE_MILESTONE, we're building Nightly or Aurora # - otherwise, we're building Release/Beta (define RELEASE_OR_BETA) @depends(build_environment, build_project, version_path, "--help") @imports(_from="__builtin__", _import="open") @@ -1004,7 +1003,7 @@ def milestone(build_env, build_project, version_path, _):
if "a1" in milestone: is_nightly = True - elif "a" not in milestone: + else: is_release_or_beta = True
major_version = milestone.split(".")[0] diff --git a/config/createprecomplete.py b/config/createprecomplete.py index dda4efcdf8e1..e7405b21b61b 100644 --- a/config/createprecomplete.py +++ b/config/createprecomplete.py @@ -5,6 +5,7 @@ # update instructions which is used to remove files and directories that are no # longer present in a complete update. The current working directory is used for # the location to enumerate and to create the precomplete file. +# For symlinks, remove instructions are always generated.
from __future__ import absolute_import from __future__ import unicode_literals @@ -13,9 +14,17 @@ import os import io
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove all lines in this file that contain: +# TorBrowser/Data + def get_build_entries(root_path): """Iterates through the root_path, creating a list for each file and directory. Excludes any file paths ending with channel-prefs.js. + To support Tor Browser updates, excludes: + TorBrowser/Data/Browser/profiles.ini + TorBrowser/Data/Browser/profile.default/bookmarks.html + TorBrowser/Data/Tor/torrc """ rel_file_path_set = set() rel_dir_path_set = set() @@ -27,6 +36,10 @@ def get_build_entries(root_path): if not ( rel_path_file.endswith("channel-prefs.js") or rel_path_file.endswith("update-settings.ini") + or rel_path_file == "TorBrowser/Data/Browser/profiles.ini" + or rel_path_file + == "TorBrowser/Data/Browser/profile.default/bookmarks.html" + or rel_path_file == "TorBrowser/Data/Tor/torrc" or rel_path_file.find("distribution/") != -1 ): rel_file_path_set.add(rel_path_file) @@ -36,7 +49,10 @@ def get_build_entries(root_path): rel_path_dir = os.path.join(parent_dir_rel_path, dir_name) rel_path_dir = rel_path_dir.replace("\", "/") + "/" if rel_path_dir.find("distribution/") == -1: - rel_dir_path_set.add(rel_path_dir) + if os.path.islink(rel_path_dir[:-1]): + rel_file_path_set.add(rel_path_dir[:-1]) + else: + rel_dir_path_set.add(rel_path_dir)
rel_file_path_list = list(rel_file_path_set) rel_file_path_list.sort(reverse=True) diff --git a/devtools/client/aboutdebugging/src/actions/runtimes.js b/devtools/client/aboutdebugging/src/actions/runtimes.js index 0eb7468e2847..dcf1bde3a574 100644 --- a/devtools/client/aboutdebugging/src/actions/runtimes.js +++ b/devtools/client/aboutdebugging/src/actions/runtimes.js @@ -71,6 +71,11 @@ async function getRuntimeIcon(runtime, channel) { } }
+ // Use the release build skin for devtools within Tor Browser alpha releases. + if (channel === "alpha") { + return "chrome://devtools/skin/images/aboutdebugging-firefox-release.svg"; + } + return channel === "release" || channel === "beta" || channel === "aurora" ? `chrome://devtools/skin/images/aboutdebugging-firefox-${channel}.svg` : "chrome://devtools/skin/images/aboutdebugging-firefox-nightly.svg"; diff --git a/toolkit/modules/UpdateUtils.jsm b/toolkit/modules/UpdateUtils.jsm index 10e17cf57375..06e349780fa3 100644 --- a/toolkit/modules/UpdateUtils.jsm +++ b/toolkit/modules/UpdateUtils.jsm @@ -87,7 +87,7 @@ var UpdateUtils = { case "PRODUCT": return Services.appinfo.name; case "VERSION": - return Services.appinfo.version; + return AppConstants.TOR_BROWSER_VERSION; case "BUILD_ID": return Services.appinfo.appBuildID; case "BUILD_TARGET": @@ -167,7 +167,8 @@ var UpdateUtils = { * downloads and installs updates. This corresponds to whether or not the user * has selected "Automatically install updates" in about:preferences. * - * On Windows, this setting is shared across all profiles for the installation + * On Windows (except in Tor Browser), this setting is shared across all profiles + * for the installation * and is read asynchronously from the file. On other operating systems, this * setting is stored in a pref and is thus a per-profile setting. * @@ -183,7 +184,8 @@ var UpdateUtils = { * updates" and "Check for updates but let you choose to install them" options * in about:preferences. * - * On Windows, this setting is shared across all profiles for the installation + * On Windows (except in Tor Browser), this setting is shared across all profiles + * for the installation * and is written asynchronously to the file. On other operating systems, this * setting is stored in a pref and is thus a per-profile setting. * @@ -255,7 +257,10 @@ var UpdateUtils = { // setting is just to propagate it from a pref observer. This ensures that // the expected observers still get notified, even if a user manually // changes the pref value. - if (!UpdateUtils.PER_INSTALLATION_PREFS_SUPPORTED) { + if ( + AppConstants.TOR_BROWSER_UPDATE || + !UpdateUtils.PER_INSTALLATION_PREFS_SUPPORTED + ) { let initialConfig = {}; for (const [prefName, pref] of Object.entries( UpdateUtils.PER_INSTALLATION_PREFS @@ -324,7 +329,10 @@ var UpdateUtils = { } }
- if (!this.PER_INSTALLATION_PREFS_SUPPORTED) { + if ( + AppConstants.TOR_BROWSER_UPDATE || + !this.PER_INSTALLATION_PREFS_SUPPORTED + ) { // If we don't have per-installation prefs, we use regular preferences. let prefValue = prefTypeFns.getProfilePref(prefName, pref.defaultValue); return Promise.resolve(prefValue); @@ -419,7 +427,10 @@ var UpdateUtils = { ); }
- if (!this.PER_INSTALLATION_PREFS_SUPPORTED) { + if ( + AppConstants.TOR_BROWSER_UPDATE || + !this.PER_INSTALLATION_PREFS_SUPPORTED + ) { // If we don't have per-installation prefs, we use regular preferences. if (options.setDefaultOnly) { prefTypeFns.setProfileDefaultPref(prefName, value); @@ -555,14 +566,6 @@ UpdateUtils.PER_INSTALLATION_PREFS = { migrate: true, observerTopic: "auto-update-config-change", policyFn: () => { - if (!Services.policies.isAllowed("app-auto-updates-off")) { - // We aren't allowed to turn off auto-update - it is forced on. - return true; - } - if (!Services.policies.isAllowed("app-auto-updates-on")) { - // We aren't allowed to turn on auto-update - it is forced off. - return false; - } return null; }, }, diff --git a/toolkit/mozapps/extensions/AddonManager.jsm b/toolkit/mozapps/extensions/AddonManager.jsm index f525710f9053..424387dd02dd 100644 --- a/toolkit/mozapps/extensions/AddonManager.jsm +++ b/toolkit/mozapps/extensions/AddonManager.jsm @@ -40,6 +40,7 @@ const PREF_EM_STRICT_COMPATIBILITY = "extensions.strictCompatibility"; const PREF_EM_CHECK_UPDATE_SECURITY = "extensions.checkUpdateSecurity"; const PREF_SYS_ADDON_UPDATE_ENABLED = "extensions.systemAddon.update.enabled"; const PREF_REMOTESETTINGS_DISABLED = "extensions.remoteSettings.disabled"; +const PREF_EM_LAST_TORBROWSER_VERSION = "extensions.lastTorBrowserVersion";
const PREF_MIN_WEBEXT_PLATFORM_VERSION = "extensions.webExtensionsMinPlatformVersion"; @@ -644,6 +645,30 @@ var AddonManagerInternal = { ); }
+ // To ensure that extension and plugin code gets a chance to run + // after each browser update, set appChanged = true when the + // Tor Browser version has changed even if the Mozilla app + // version has not changed. + let tbChanged = undefined; + try { + tbChanged = + AppConstants.TOR_BROWSER_VERSION !== + Services.prefs.getCharPref(PREF_EM_LAST_TORBROWSER_VERSION); + } catch (e) {} + if (tbChanged !== false) { + // Because PREF_EM_LAST_TORBROWSER_VERSION was not present in older + // versions of Tor Browser, an app change is indicated when tbChanged + // is undefined or true. + if (appChanged === false) { + appChanged = true; + } + + Services.prefs.setCharPref( + PREF_EM_LAST_TORBROWSER_VERSION, + AppConstants.TOR_BROWSER_VERSION + ); + } + if (!MOZ_COMPATIBILITY_NIGHTLY) { PREF_EM_CHECK_COMPATIBILITY = PREF_EM_CHECK_COMPATIBILITY_BASE + diff --git a/toolkit/mozapps/extensions/test/browser/head.js b/toolkit/mozapps/extensions/test/browser/head.js index 95321e7ad3bd..2e7a1312c540 100644 --- a/toolkit/mozapps/extensions/test/browser/head.js +++ b/toolkit/mozapps/extensions/test/browser/head.js @@ -41,6 +41,7 @@ var PREF_CHECK_COMPATIBILITY; var channel = Services.prefs.getCharPref("app.update.channel", "default"); if ( channel != "aurora" && + channel != "alpha" && channel != "beta" && channel != "release" && channel != "esr" diff --git a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js index 88aa66c1c412..46d6651bcf4a 100644 --- a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js +++ b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js @@ -386,6 +386,7 @@ function isNightlyChannel() {
return ( channel != "aurora" && + channel != "alpha" && channel != "beta" && channel != "release" && channel != "esr" diff --git a/toolkit/mozapps/update/UpdateService.jsm b/toolkit/mozapps/update/UpdateService.jsm index a81317f484ec..a10daf18d3de 100644 --- a/toolkit/mozapps/update/UpdateService.jsm +++ b/toolkit/mozapps/update/UpdateService.jsm @@ -12,6 +12,19 @@ const { AppConstants } = ChromeUtils.import( const { AUSTLMY } = ChromeUtils.import( "resource://gre/modules/UpdateTelemetry.jsm" ); + +const { TorMonitorService } = ChromeUtils.import( + "resource://gre/modules/TorMonitorService.jsm" +); + +function _shouldRegisterBootstrapObserver(errorCode) { + return ( + errorCode == PROXY_SERVER_CONNECTION_REFUSED && + !TorMonitorService.isBootstrapDone && + TorMonitorService.ownsTorDaemon + ); +} + const { Bits, BitsRequest, @@ -245,6 +258,7 @@ const SERVICE_ERRORS = [ // Custom update error codes const BACKGROUNDCHECK_MULTIPLE_FAILURES = 110; const NETWORK_ERROR_OFFLINE = 111; +const PROXY_SERVER_CONNECTION_REFUSED = 2152398920;
// Error codes should be < 1000. Errors above 1000 represent http status codes const HTTP_ERROR_OFFSET = 1000; @@ -662,6 +676,11 @@ function areDirectoryEntriesWriteable(aDir) { * @return true if elevation is required, false otherwise */ function getElevationRequired() { + if (AppConstants.TOR_BROWSER_UPDATE) { + // To avoid potential security holes associated with running the updater + // process with elevated privileges, Tor Browser does not support elevation. + return false; + } if (AppConstants.platform != "macosx") { return false; } @@ -741,20 +760,22 @@ function getCanApplyUpdates() { return false; }
- if (AppConstants.platform == "macosx") { - LOG( - "getCanApplyUpdates - bypass the write since elevation can be used " + - "on Mac OS X" - ); - return true; - } + if (!AppConstants.TOR_BROWSER_UPDATE) { + if (AppConstants.platform == "macosx") { + LOG( + "getCanApplyUpdates - bypass the write since elevation can be used " + + "on Mac OS X" + ); + return true; + }
- if (shouldUseService()) { - LOG( - "getCanApplyUpdates - bypass the write checks because the Windows " + - "Maintenance Service can be used" - ); - return true; + if (shouldUseService()) { + LOG( + "getCanApplyUpdates - bypass the write checks because the Windows " + + "Maintenance Service can be used" + ); + return true; + } }
try { @@ -1567,28 +1588,32 @@ function handleUpdateFailure(update, errorCode) { cancelations++; Services.prefs.setIntPref(PREF_APP_UPDATE_CANCELATIONS, cancelations); if (AppConstants.platform == "macosx") { - let osxCancelations = Services.prefs.getIntPref( - PREF_APP_UPDATE_CANCELATIONS_OSX, - 0 - ); - osxCancelations++; - Services.prefs.setIntPref( - PREF_APP_UPDATE_CANCELATIONS_OSX, - osxCancelations - ); - let maxCancels = Services.prefs.getIntPref( - PREF_APP_UPDATE_CANCELATIONS_OSX_MAX, - DEFAULT_CANCELATIONS_OSX_MAX - ); - // Prevent the preference from setting a value greater than 5. - maxCancels = Math.min(maxCancels, 5); - if (osxCancelations >= maxCancels) { - cleanupReadyUpdate(); + if (AppConstants.TOR_BROWSER_UPDATE) { + cleanupActiveUpdates(); } else { - writeStatusFile( - getReadyUpdateDir(), - (update.state = STATE_PENDING_ELEVATE) + let osxCancelations = Services.prefs.getIntPref( + PREF_APP_UPDATE_CANCELATIONS_OSX, + 0 + ); + osxCancelations++; + Services.prefs.setIntPref( + PREF_APP_UPDATE_CANCELATIONS_OSX, + osxCancelations ); + let maxCancels = Services.prefs.getIntPref( + PREF_APP_UPDATE_CANCELATIONS_OSX_MAX, + DEFAULT_CANCELATIONS_OSX_MAX + ); + // Prevent the preference from setting a value greater than 5. + maxCancels = Math.min(maxCancels, 5); + if (osxCancelations >= maxCancels) { + cleanupReadyUpdate(); + } else { + writeStatusFile( + getReadyUpdateDir(), + (update.state = STATE_PENDING_ELEVATE) + ); + } } update.statusText = gUpdateBundle.GetStringFromName("elevationFailure"); } else { @@ -1809,6 +1834,15 @@ function updateIsAtLeastAsOldAs(update, version, buildID) { ); }
+/** + * This returns the current version of the browser to use to check updates. + */ +function getCompatVersion() { + return AppConstants.TOR_BROWSER_VERSION + ? AppConstants.TOR_BROWSER_VERSION + : Services.appinfo.version; +} + /** * This returns true if the passed update is the same version or older than * currently installed Firefox version. @@ -1816,7 +1850,7 @@ function updateIsAtLeastAsOldAs(update, version, buildID) { function updateIsAtLeastAsOldAsCurrentVersion(update) { return updateIsAtLeastAsOldAs( update, - Services.appinfo.version, + getCompatVersion(), Services.appinfo.appBuildID ); } @@ -2105,7 +2139,31 @@ function Update(update) { this._patches.push(patch); }
- if (!this._patches.length && !update.hasAttribute("unsupported")) { + if (update.hasAttribute("unsupported")) { + this.unsupported = "true" == update.getAttribute("unsupported"); + } else if (update.hasAttribute("minSupportedOSVersion")) { + let minOSVersion = update.getAttribute("minSupportedOSVersion"); + try { + let osVersion = Services.sysinfo.getProperty("version"); + this.unsupported = Services.vc.compare(osVersion, minOSVersion) < 0; + } catch (e) {} + } + if (!this.unsupported && update.hasAttribute("minSupportedInstructionSet")) { + let minInstructionSet = update.getAttribute("minSupportedInstructionSet"); + if ( + ["MMX", "SSE", "SSE2", "SSE3", "SSE4A", "SSE4_1", "SSE4_2"].includes( + minInstructionSet + ) + ) { + try { + this.unsupported = !Services.sysinfo.getProperty( + "has" + minInstructionSet + ); + } catch (e) {} + } + } + + if (!this._patches.length && !this.unsupported) { throw Components.Exception("", Cr.NS_ERROR_ILLEGAL_VALUE); }
@@ -2143,9 +2201,7 @@ function Update(update) { if (!isNaN(attr.value)) { this.promptWaitTime = parseInt(attr.value); } - } else if (attr.name == "unsupported") { - this.unsupported = attr.value == "true"; - } else { + } else if (attr.name != "unsupported") { switch (attr.name) { case "appVersion": case "buildID": @@ -2170,7 +2226,7 @@ function Update(update) { }
if (!this.previousAppVersion) { - this.previousAppVersion = Services.appinfo.version; + this.previousAppVersion = getCompatVersion(); }
if (!this.elevationFailure) { @@ -2529,6 +2585,9 @@ UpdateService.prototype = { case "network:offline-status-changed": this._offlineStatusChanged(data); break; + case "torconnect:bootstrap-complete": + this._bootstrapComplete(); + break; case "nsPref:changed": if (data == PREF_APP_UPDATE_LOG || data == PREF_APP_UPDATE_LOG_FILE) { gLogEnabled; // Assigning this before it is lazy-loaded is an error. @@ -2985,6 +3044,35 @@ UpdateService.prototype = { this._attemptResume(); },
+ _registerBootstrapObserver: function AUS__registerBootstrapObserver() { + if (this._registeredBootstrapObserver) { + LOG( + "UpdateService:_registerBootstrapObserver - observer already registered" + ); + return; + } + + LOG( + "UpdateService:_registerBootstrapObserver - waiting for tor bootstrap to " + + "be complete, then forcing another check" + ); + + Services.obs.addObserver(this, "torconnect:bootstrap-complete"); + this._registeredBootstrapObserver = true; + }, + + _bootstrapComplete: function AUS__bootstrapComplete() { + Services.obs.removeObserver(this, "torconnect:bootstrap-complete"); + this._registeredBootstrapObserver = false; + + LOG( + "UpdateService:_bootstrapComplete - bootstrapping complete, forcing " + + "another background check" + ); + + this._attemptResume(); + }, + onCheckComplete: async function AUS_onCheckComplete(request, updates) { await this._selectAndInstallUpdate(updates); }, @@ -3004,6 +3092,11 @@ UpdateService.prototype = { AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_OFFLINE); } return; + } else if (_shouldRegisterBootstrapObserver(update.errorCode)) { + // Register boostrap observer to try again, but only when we own the + // tor process. + this._registerBootstrapObserver(); + return; }
// Send the error code to telemetry @@ -3833,7 +3926,7 @@ UpdateService.prototype = { "UpdateService:downloadUpdate - canceling download of update since " + "it is for an earlier or same application version and build ID.\n" + "current application version: " + - Services.appinfo.version + + getCompatVersion() + "\n" + "update application version : " + update.appVersion + @@ -4507,7 +4600,7 @@ Checker.prototype = { _callback: null,
_getCanMigrate: function UC__getCanMigrate() { - if (AppConstants.platform != "win") { + if (AppConstants.platform != "win" || AppConstants.TOR_BROWSER_VERSION) { return false; }
@@ -5769,6 +5862,7 @@ Downloader.prototype = { var state = this._patch.state; var shouldShowPrompt = false; var shouldRegisterOnlineObserver = false; + var shouldRegisterBootstrapObserver = false; var shouldRetrySoon = false; var deleteActiveUpdate = false; let migratedToReadyUpdate = false; @@ -5880,7 +5974,20 @@ Downloader.prototype = { ); shouldRegisterOnlineObserver = true; deleteActiveUpdate = false; - + } else if (_shouldRegisterBootstrapObserver(status)) { + // Register a bootstrap observer to try again. + // The bootstrap observer will continue the incremental download by + // calling downloadUpdate on the active update which continues + // downloading the file from where it was. + LOG( + "Downloader:onStopRequest - not bootstrapped, register bootstrap observer: true" + ); + AUSTLMY.pingDownloadCode( + this.isCompleteUpdate, + AUSTLMY.DWNLD_RETRY_OFFLINE + ); + shouldRegisterBootstrapObserver = true; + deleteActiveUpdate = false; // Each of NS_ERROR_NET_TIMEOUT, ERROR_CONNECTION_REFUSED, // NS_ERROR_NET_RESET and NS_ERROR_DOCUMENT_NOT_CACHED can be returned // when disconnecting the internet while a download of a MAR is in @@ -5994,7 +6101,11 @@ Downloader.prototype = {
// Only notify listeners about the stopped state if we // aren't handling an internal retry. - if (!shouldRetrySoon && !shouldRegisterOnlineObserver) { + if ( + !shouldRetrySoon && + !shouldRegisterOnlineObserver && + !shouldRegisterBootstrapObserver + ) { this.updateService.forEachDownloadListener(listener => { listener.onStopRequest(request, status); }); @@ -6179,6 +6290,9 @@ Downloader.prototype = { if (shouldRegisterOnlineObserver) { LOG("Downloader:onStopRequest - Registering online observer"); this.updateService._registerOnlineObserver(); + } else if (shouldRegisterBootstrapObserver) { + LOG("Downloader:onStopRequest - Registering bootstrap observer"); + this.updateService._registerBootstrapObserver(); } else if (shouldRetrySoon) { LOG("Downloader:onStopRequest - Retrying soon"); this.updateService._consecutiveSocketErrors++; diff --git a/toolkit/mozapps/update/UpdateServiceStub.jsm b/toolkit/mozapps/update/UpdateServiceStub.jsm index fdccbc19db2c..69d89f466862 100644 --- a/toolkit/mozapps/update/UpdateServiceStub.jsm +++ b/toolkit/mozapps/update/UpdateServiceStub.jsm @@ -80,8 +80,12 @@ function UpdateServiceStub() { // contains the status file's path
// We may need to migrate update data + // In Tor Browser we skip this because we do not use an update agent and we + // do not want to store any data outside of the browser installation directory. + // For more info, see https://bugzilla.mozilla.org/show_bug.cgi?id=1458314 if ( AppConstants.platform == "win" && + !AppConstants.TOR_BROWSER_UPDATE && !Services.prefs.getBoolPref(prefUpdateDirMigrated, false) ) { Services.prefs.setBoolPref(prefUpdateDirMigrated, true); diff --git a/toolkit/mozapps/update/common/updatehelper.cpp b/toolkit/mozapps/update/common/updatehelper.cpp index b094d9eb75e9..c825d3c1ea8e 100644 --- a/toolkit/mozapps/update/common/updatehelper.cpp +++ b/toolkit/mozapps/update/common/updatehelper.cpp @@ -66,6 +66,13 @@ BOOL PathGetSiblingFilePath(LPWSTR destinationBuffer, LPCWSTR siblingFilePath, * @return TRUE if successful */ BOOL GetSecureOutputDirectoryPath(LPWSTR outBuf) { +#ifdef TOR_BROWSER_UPDATE + // This function is used to support the maintenance service and elevated + // updates and is therefore not called by Tor Browser's updater. We stub + // it out to avoid any chance that the Tor Browser updater will create + // files under C:\Program Files (x86)\ or a similar location. + return FALSE; +#else PWSTR progFilesX86; if (FAILED(SHGetKnownFolderPath(FOLDERID_ProgramFilesX86, KF_FLAG_CREATE, nullptr, &progFilesX86))) { @@ -99,6 +106,7 @@ BOOL GetSecureOutputDirectoryPath(LPWSTR outBuf) { }
return TRUE; +#endif }
/** diff --git a/toolkit/mozapps/update/updater/launchchild_osx.mm b/toolkit/mozapps/update/updater/launchchild_osx.mm index 7721da8e5976..735c98ee5a90 100644 --- a/toolkit/mozapps/update/updater/launchchild_osx.mm +++ b/toolkit/mozapps/update/updater/launchchild_osx.mm @@ -372,6 +372,7 @@ bool ObtainUpdaterArguments(int* argc, char*** argv) {
@end
+#ifndef TOR_BROWSER_UPDATE bool ServeElevatedUpdate(int argc, const char** argv) { MacAutoreleasePool pool;
@@ -387,6 +388,7 @@ bool ServeElevatedUpdate(int argc, const char** argv) { [updater release]; return didSucceed; } +#endif
bool IsOwnedByGroupAdmin(const char* aAppBundle) { MacAutoreleasePool pool; diff --git a/toolkit/mozapps/update/updater/moz.build b/toolkit/mozapps/update/updater/moz.build index 40d7a77a6b62..ac7f82a4f9ad 100644 --- a/toolkit/mozapps/update/updater/moz.build +++ b/toolkit/mozapps/update/updater/moz.build @@ -51,7 +51,7 @@ xpcshell_cert.script = "gen_cert_header.py:create_header" dep1_cert.script = "gen_cert_header.py:create_header" dep2_cert.script = "gen_cert_header.py:create_header"
-if CONFIG["MOZ_UPDATE_CHANNEL"] in ("beta", "release", "esr"): +if CONFIG["MOZ_UPDATE_CHANNEL"] in ("alpha", "beta", "release", "esr"): primary_cert.inputs += ["release_primary.der"] secondary_cert.inputs += ["release_secondary.der"] elif CONFIG["MOZ_UPDATE_CHANNEL"] in ( diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 2c13b6e45226..2dc08e19957c 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -16,7 +16,7 @@ * updatev3.manifest * ----------------- * method = "add" | "add-if" | "add-if-not" | "patch" | "patch-if" | - * "remove" | "rmdir" | "rmrfdir" | type + * "remove" | "rmdir" | "rmrfdir" | "addsymlink" | type * * 'add-if-not' adds a file if it doesn't exist. * @@ -75,7 +75,9 @@ bool IsRecursivelyWritable(const char* aPath); void LaunchChild(int argc, const char** argv); void LaunchMacPostProcess(const char* aAppBundle); bool ObtainUpdaterArguments(int* argc, char*** argv); +# ifndef TOR_BROWSER_UPDATE bool ServeElevatedUpdate(int argc, const char** argv); +# endif void SetGroupOwnershipAndPermissions(const char* aAppBundle); bool PerformInstallationFromDMG(int argc, char** argv); struct UpdateServerThreadArgs { @@ -490,7 +492,8 @@ static const NS_tchar* get_relative_path(const NS_tchar* fullpath) { * Whether the path is a directory path. Defaults to false. * @return valid filesystem path or nullptr if the path checks fail. */ -static NS_tchar* get_valid_path(NS_tchar** line, bool isdir = false) { +static NS_tchar* get_valid_path(NS_tchar** line, bool isdir = false, + bool islinktarget = false) { NS_tchar* path = mstrtok(kQuote, line); if (!path) { LOG(("get_valid_path: unable to determine path: " LOG_S, *line)); @@ -526,10 +529,12 @@ static NS_tchar* get_valid_path(NS_tchar** line, bool isdir = false) { path[NS_tstrlen(path) - 1] = NS_T('\0'); }
- // Don't allow relative paths that resolve to a parent directory. - if (NS_tstrstr(path, NS_T("..")) != nullptr) { - LOG(("get_valid_path: paths must not contain '..': " LOG_S, path)); - return nullptr; + if (!islinktarget) { + // Don't allow relative paths that resolve to a parent directory. + if (NS_tstrstr(path, NS_T("..")) != nullptr) { + LOG(("get_valid_path: paths must not contain '..': " LOG_S, path)); + return nullptr; + } }
return path; @@ -569,7 +574,7 @@ static void ensure_write_permissions(const NS_tchar* path) { (void)_wchmod(path, _S_IREAD | _S_IWRITE); #else struct stat fs; - if (!stat(path, &fs) && !(fs.st_mode & S_IWUSR)) { + if (!lstat(path, &fs) && !S_ISLNK(fs.st_mode) && !(fs.st_mode & S_IWUSR)) { (void)chmod(path, fs.st_mode | S_IWUSR); } #endif @@ -756,11 +761,9 @@ static int ensure_copy(const NS_tchar* path, const NS_tchar* dest) { return READ_ERROR; }
-# ifdef XP_UNIX if (S_ISLNK(ss.st_mode)) { return ensure_copy_symlink(path, dest); } -# endif
AutoFile infile(ensure_open(path, NS_T("rb"), ss.st_mode)); if (!infile) { @@ -847,12 +850,19 @@ static int ensure_copy_recursive(const NS_tchar* path, const NS_tchar* dest, return READ_ERROR; }
-#ifdef XP_UNIX +#ifndef XP_WIN if (S_ISLNK(sInfo.st_mode)) { return ensure_copy_symlink(path, dest); } #endif
+#ifdef XP_UNIX + // Ignore Unix domain sockets. See #20691. + if (S_ISSOCK(sInfo.st_mode)) { + return 0; + } +#endif + if (!S_ISDIR(sInfo.st_mode)) { return ensure_copy(path, dest); } @@ -909,7 +919,7 @@ static int rename_file(const NS_tchar* spath, const NS_tchar* dpath, }
struct NS_tstat_t spathInfo; - rv = NS_tstat(spath, &spathInfo); + rv = NS_tlstat(spath, &spathInfo); // Get info about file or symlink. if (rv) { LOG(("rename_file: failed to read file status info: " LOG_S ", " "err: %d", @@ -917,7 +927,12 @@ static int rename_file(const NS_tchar* spath, const NS_tchar* dpath, return READ_ERROR; }
- if (!S_ISREG(spathInfo.st_mode)) { +#ifdef XP_WIN + if (!S_ISREG(spathInfo.st_mode)) +#else + if (!S_ISREG(spathInfo.st_mode) && !S_ISLNK(spathInfo.st_mode)) +#endif + { if (allowDirs && !S_ISDIR(spathInfo.st_mode)) { LOG(("rename_file: path present, but not a file: " LOG_S ", err: %d", spath, errno)); @@ -926,7 +941,12 @@ static int rename_file(const NS_tchar* spath, const NS_tchar* dpath, LOG(("rename_file: proceeding to rename the directory")); }
- if (!NS_taccess(dpath, F_OK)) { +#ifdef XP_WIN + if (!NS_taccess(dpath, F_OK)) +#else + if (!S_ISLNK(spathInfo.st_mode) && !NS_taccess(dpath, F_OK)) +#endif + { if (ensure_remove(dpath)) { LOG( ("rename_file: destination file exists and could not be " @@ -946,7 +966,7 @@ static int rename_file(const NS_tchar* spath, const NS_tchar* dpath, return OK; }
-#ifdef XP_WIN +#if defined(XP_WIN) && !defined(TOR_BROWSER_UPDATE) // Remove the directory pointed to by path and all of its files and // sub-directories. If a file is in use move it to the tobedeleted directory // and attempt to schedule removal of the file on reboot @@ -1045,7 +1065,19 @@ static int backup_restore(const NS_tchar* path, const NS_tchar* relPath) { NS_tsnprintf(relBackup, sizeof(relBackup) / sizeof(relBackup[0]), NS_T("%s") BACKUP_EXT, relPath);
- if (NS_taccess(backup, F_OK)) { + bool isLink = false; +#ifndef XP_WIN + struct stat linkInfo; + int rv = lstat(backup, &linkInfo); + if (rv) { + LOG(("backup_restore: cannot get info for backup file: " LOG_S ", err: %d", + relBackup, errno)); + return OK; + } + isLink = S_ISLNK(linkInfo.st_mode); +#endif + + if (!isLink && NS_taccess(backup, F_OK)) { LOG(("backup_restore: backup file doesn't exist: " LOG_S, relBackup)); return OK; } @@ -1063,8 +1095,18 @@ static int backup_discard(const NS_tchar* path, const NS_tchar* relPath) { NS_tsnprintf(relBackup, sizeof(relBackup) / sizeof(relBackup[0]), NS_T("%s") BACKUP_EXT, relPath);
+ bool isLink = false; +#ifndef XP_WIN + struct stat linkInfo; + int rv2 = lstat(backup, &linkInfo); + if (rv2) { + return OK; // File does not exist; nothing to do. + } + isLink = S_ISLNK(linkInfo.st_mode); +#endif + // Nothing to discard - if (NS_taccess(backup, F_OK)) { + if (!isLink && NS_taccess(backup, F_OK)) { return OK; }
@@ -1079,6 +1121,8 @@ static int backup_discard(const NS_tchar* path, const NS_tchar* relPath) { relBackup, relPath)); return WRITE_ERROR_DELETE_BACKUP; } + +# if !defined(TOR_BROWSER_UPDATE) // The MoveFileEx call to remove the file on OS reboot will fail if the // process doesn't have write access to the HKEY_LOCAL_MACHINE registry key // but this is ok since the installer / uninstaller will delete the @@ -1095,6 +1139,7 @@ static int backup_discard(const NS_tchar* path, const NS_tchar* relPath) { "file: " LOG_S, relPath)); } +# endif } #else if (rv) { @@ -1149,7 +1194,7 @@ class Action {
class RemoveFile : public Action { public: - RemoveFile() : mSkip(0) {} + RemoveFile() : mSkip(0), mIsLink(0) {}
int Parse(NS_tchar* line) override; int Prepare() override; @@ -1160,6 +1205,7 @@ class RemoveFile : public Action { mozilla::UniquePtr<NS_tchar[]> mFile; mozilla::UniquePtr<NS_tchar[]> mRelPath; int mSkip; + int mIsLink; };
int RemoveFile::Parse(NS_tchar* line) { @@ -1182,28 +1228,39 @@ int RemoveFile::Parse(NS_tchar* line) { }
int RemoveFile::Prepare() { - // Skip the file if it already doesn't exist. - int rv = NS_taccess(mFile.get(), F_OK); - if (rv) { - mSkip = 1; - mProgressCost = 0; - return OK; + int rv; +#ifndef XP_WIN + struct stat linkInfo; + rv = lstat(mFile.get(), &linkInfo); + mIsLink = ((0 == rv) && S_ISLNK(linkInfo.st_mode)); +#endif + + if (!mIsLink) { + // Skip the file if it already doesn't exist. + rv = NS_taccess(mFile.get(), F_OK); + if (rv) { + mSkip = 1; + mProgressCost = 0; + return OK; + } }
LOG(("PREPARE REMOVEFILE " LOG_S, mRelPath.get()));
- // Make sure that we're actually a file... - struct NS_tstat_t fileInfo; - rv = NS_tstat(mFile.get(), &fileInfo); - if (rv) { - LOG(("failed to read file status info: " LOG_S ", err: %d", mFile.get(), - errno)); - return READ_ERROR; - } + if (!mIsLink) { + // Make sure that we're actually a file... + struct NS_tstat_t fileInfo; + rv = NS_tstat(mFile.get(), &fileInfo); + if (rv) { + LOG(("failed to read file status info: " LOG_S ", err: %d", mFile.get(), + errno)); + return READ_ERROR; + }
- if (!S_ISREG(fileInfo.st_mode)) { - LOG(("path present, but not a file: " LOG_S, mFile.get())); - return DELETE_ERROR_EXPECTED_FILE; + if (!S_ISREG(fileInfo.st_mode)) { + LOG(("path present, but not a file: " LOG_S, mFile.get())); + return DELETE_ERROR_EXPECTED_FILE; + } }
NS_tchar* slash = (NS_tchar*)NS_tstrrchr(mFile.get(), NS_T('/')); @@ -1955,6 +2012,92 @@ void PatchIfFile::Finish(int status) { PatchFile::Finish(status); }
+#ifndef XP_WIN +class AddSymlink : public Action { + public: + AddSymlink() : mAdded(false) {} + + virtual int Parse(NS_tchar* line); + virtual int Prepare(); + virtual int Execute(); + virtual void Finish(int status); + + private: + mozilla::UniquePtr<NS_tchar[]> mLinkPath; + mozilla::UniquePtr<NS_tchar[]> mRelPath; + mozilla::UniquePtr<NS_tchar[]> mTarget; + bool mAdded; +}; + +int AddSymlink::Parse(NS_tchar* line) { + // format "<linkname>" "target" + + NS_tchar* validPath = get_valid_path(&line); + if (!validPath) return PARSE_ERROR; + + mRelPath = mozilla::MakeUnique<NS_tchar[]>(MAXPATHLEN); + NS_tstrcpy(mRelPath.get(), validPath); + mLinkPath.reset(get_full_path(validPath)); + if (!mLinkPath) { + return PARSE_ERROR; + } + + // consume whitespace between args + NS_tchar* q = mstrtok(kQuote, &line); + if (!q) return PARSE_ERROR; + + validPath = get_valid_path(&line, false, true); + if (!validPath) return PARSE_ERROR; + + mTarget = mozilla::MakeUnique<NS_tchar[]>(MAXPATHLEN); + NS_tstrcpy(mTarget.get(), validPath); + + return OK; +} + +int AddSymlink::Prepare() { + LOG(("PREPARE ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), + mTarget.get())); + + return OK; +} + +int AddSymlink::Execute() { + LOG(("EXECUTE ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), + mTarget.get())); + + // First make sure that we can actually get rid of any existing file or link. + struct stat linkInfo; + int rv = lstat(mLinkPath.get(), &linkInfo); + if ((0 == rv) && !S_ISLNK(linkInfo.st_mode)) { + rv = NS_taccess(mLinkPath.get(), F_OK); + } + if (rv == 0) { + rv = backup_create(mLinkPath.get()); + if (rv) return rv; + } else { + rv = ensure_parent_dir(mLinkPath.get()); + if (rv) return rv; + } + + // Create the link. + rv = symlink(mTarget.get(), mLinkPath.get()); + if (!rv) { + mAdded = true; + } + + return rv; +} + +void AddSymlink::Finish(int status) { + LOG(("FINISH ADDSYMLINK " LOG_S " -> " LOG_S, mRelPath.get(), mTarget.get())); + // When there is an update failure and a link has been added it is removed + // here since there might not be a backup to replace it. + if (status && mAdded) NS_tremove(mLinkPath.get()); + backup_finish(mLinkPath.get(), mRelPath.get(), status); +} +#endif + //-----------------------------------------------------------------------------
#ifdef XP_WIN @@ -2410,14 +2553,29 @@ static bool IsServiceSpecificErrorCode(int errorCode) { */ static int CopyInstallDirToDestDir() { // These files should not be copied over to the updated app -#ifdef XP_WIN -# define SKIPLIST_COUNT 3 -#elif XP_MACOSX -# define SKIPLIST_COUNT 0 +#if defined(TOR_BROWSER_UPDATE) && !defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) +# ifdef XP_WIN +# define SKIPLIST_COUNT 6 +# else +# define SKIPLIST_COUNT 5 +# endif #else -# define SKIPLIST_COUNT 2 +# ifdef XP_WIN +# define SKIPLIST_COUNT 3 +# elif XP_MACOSX +# define SKIPLIST_COUNT 0 +# else +# define SKIPLIST_COUNT 2 +# endif #endif copy_recursive_skiplist<SKIPLIST_COUNT> skiplist; +#if defined(TOR_BROWSER_UPDATE) && !defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) +# ifdef XP_MACOSX + skiplist.append(0, gInstallDirPath, NS_T("Updated.app")); + skiplist.append(1, gInstallDirPath, NS_T("TorBrowser/UpdateInfo/updates/0")); +# endif +#endif + #ifndef XP_MACOSX skiplist.append(0, gInstallDirPath, NS_T("updated")); skiplist.append(1, gInstallDirPath, NS_T("updates/0")); @@ -2426,6 +2584,19 @@ static int CopyInstallDirToDestDir() { # endif #endif
+#if defined(TOR_BROWSER_UPDATE) && !defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) +# ifdef XP_WIN + skiplist.append(SKIPLIST_COUNT - 3, gInstallDirPath, + NS_T("TorBrowser/Data/Browser/profile.default/parent.lock")); +# else + skiplist.append(SKIPLIST_COUNT - 3, gInstallDirPath, + NS_T("TorBrowser/Data/Browser/profile.default/.parentlock")); +# endif + + skiplist.append(SKIPLIST_COUNT - 1, gInstallDirPath, + NS_T("TorBrowser/Data/Tor/lock")); +#endif + return ensure_copy_recursive(gInstallDirPath, gWorkingDirPath, skiplist); }
@@ -2563,7 +2734,9 @@ static int ProcessReplaceRequest() { if (NS_taccess(deleteDir, F_OK)) { NS_tmkdir(deleteDir, 0755); } +# if !defined(TOR_BROWSER_UPDATE) remove_recursive_on_reboot(tmpDir, deleteDir); +# endif #endif }
@@ -2571,8 +2744,45 @@ static int ProcessReplaceRequest() { // On OS X, we we need to remove the staging directory after its Contents // directory has been moved. NS_tchar updatedAppDir[MAXPATHLEN]; +# if defined(TOR_BROWSER_UPDATE) && !defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) + NS_tsnprintf(updatedAppDir, sizeof(updatedAppDir) / sizeof(updatedAppDir[0]), + NS_T("%s/Updated.app"), gInstallDirPath); + // For Tor Browser on OS X, we also need to copy everything else that is + // inside Updated.app. + NS_tDIR* dir = NS_topendir(updatedAppDir); + if (dir) { + NS_tdirent* entry; + while ((entry = NS_treaddir(dir)) != 0) { + if (NS_tstrcmp(entry->d_name, NS_T(".")) && + NS_tstrcmp(entry->d_name, NS_T(".."))) { + NS_tchar childSrcPath[MAXPATHLEN]; + NS_tsnprintf(childSrcPath, + sizeof(childSrcPath) / sizeof(childSrcPath[0]), + NS_T("%s/%s"), updatedAppDir, entry->d_name); + NS_tchar childDstPath[MAXPATHLEN]; + NS_tsnprintf(childDstPath, + sizeof(childDstPath) / sizeof(childDstPath[0]), + NS_T("%s/%s"), gInstallDirPath, entry->d_name); + ensure_remove_recursive(childDstPath); + rv = rename_file(childSrcPath, childDstPath, true); + if (rv) { + LOG(("Moving " LOG_S " to " LOG_S " failed, err: %d", childSrcPath, + childDstPath, errno)); + } + } + } + + NS_tclosedir(dir); + } else { + LOG(("Updated.app dir can't be found: " LOG_S ", err: %d", updatedAppDir, + errno)); + } +# else NS_tsnprintf(updatedAppDir, sizeof(updatedAppDir) / sizeof(updatedAppDir[0]), NS_T("%s/Updated.app"), gPatchDirPath); +# endif + + // Remove the Updated.app directory. ensure_remove_recursive(updatedAppDir); #endif
@@ -2746,11 +2956,15 @@ static void UpdateThreadFunc(void* param) {
#ifdef XP_MACOSX static void ServeElevatedUpdateThreadFunc(void* param) { +# ifdef TOR_BROWSER_UPDATE + WriteStatusFile(ELEVATION_CANCELED); +# else UpdateServerThreadArgs* threadArgs = (UpdateServerThreadArgs*)param; gSucceeded = ServeElevatedUpdate(threadArgs->argc, threadArgs->argv); if (!gSucceeded) { WriteStatusFile(ELEVATION_CANCELED); } +# endif QuitProgressUI(); }
@@ -2780,7 +2994,7 @@ int LaunchCallbackAndPostProcessApps(int argc, NS_tchar** argv, #endif
if (argc > callbackIndex) { -#if defined(XP_WIN) +#if defined(XP_WIN) && !defined(TOR_BROWSER_UPDATE) if (gSucceeded) { if (!LaunchWinPostProcess(gInstallDirPath, gPatchDirPath)) { fprintf(stderr, "The post update process was not launched"); @@ -2875,8 +3089,12 @@ int NS_main(int argc, NS_tchar** argv) { mozilla::UniquePtr<UmaskContext> umaskContext(new UmaskContext(0));
bool isElevated = +# ifdef TOR_BROWSER_UPDATE + false; +# else strstr(argv[0], "/Library/PrivilegedHelperTools/org.mozilla.updater") != 0; +# endif if (isElevated) { if (!ObtainUpdaterArguments(&argc, &argv)) { // Won't actually get here because ObtainUpdaterArguments will terminate @@ -3616,6 +3834,26 @@ int NS_main(int argc, NS_tchar** argv) { if (!useService && !noServiceFallback && (updateLockFileHandle == INVALID_HANDLE_VALUE || forceServiceFallback)) { +# ifdef TOR_BROWSER_UPDATE +# ifdef TOR_BROWSER_DATA_OUTSIDE_APP_DIR + // Because the TorBrowser-Data directory that contains the user's + // profile is a sibling of the Tor Browser installation directory, + // the user probably has permission to apply updates. Therefore, to + // avoid potential security issues such as CVE-2015-0833, do not + // attempt to elevate privileges. Instead, write a "failed" message + // to the update status file (this function will return immediately + // after the CloseHandle(elevatedFileHandle) call below). +# else + // Because the user profile is contained within the Tor Browser + // installation directory, the user almost certainly has permission to + // apply updates. Therefore, to avoid potential security issues such + // as CVE-2015-0833, do not attempt to elevate privileges. Instead, + // write a "failed" message to the update status file (this function + // will return immediately after the CloseHandle(elevatedFileHandle) + // call below). +# endif + WriteStatusFile(WRITE_ERROR_ACCESS_DENIED); +# else // Get the secure ID before trying to update so it is possible to // determine if the updater has created a new one. char uuidStringBefore[UUID_LEN] = {'\0'}; @@ -3685,6 +3923,7 @@ int NS_main(int argc, NS_tchar** argv) { gCopyOutputFiles = false; WriteStatusFile(ELEVATION_CANCELED); } +# endif /* TOR_BROWSER_UPDATE */ }
// If we started the elevated updater, and it finished, check the secure @@ -4055,6 +4294,7 @@ int NS_main(int argc, NS_tchar** argv) { if (!sStagedUpdate && !sReplaceRequest && _wrmdir(gDeleteDirPath)) { LOG(("NS_main: unable to remove directory: " LOG_S ", err: %d", DELETE_DIR, errno)); +# if !defined(TOR_BROWSER_UPDATE) // The directory probably couldn't be removed due to it containing files // that are in use and will be removed on OS reboot. The call to remove // the directory on OS reboot is done after the calls to remove the files @@ -4074,6 +4314,7 @@ int NS_main(int argc, NS_tchar** argv) { "directory: " LOG_S, DELETE_DIR)); } +# endif /* TOR_BROWSER_UPDATE */ } #endif /* XP_WIN */
@@ -4718,6 +4959,10 @@ int DoUpdate() { action = new AddIfNotFile(); } else if (NS_tstrcmp(token, NS_T("patch-if")) == 0) { // Patch if exists action = new PatchIfFile(); +#ifndef XP_WIN + } else if (NS_tstrcmp(token, NS_T("addsymlink")) == 0) { + action = new AddSymlink(); +#endif } else { LOG(("DoUpdate: unknown token: " LOG_S, token)); free(buf); diff --git a/toolkit/xre/MacLaunchHelper.h b/toolkit/xre/MacLaunchHelper.h index f8dc75ee4d08..ce816acd83e2 100644 --- a/toolkit/xre/MacLaunchHelper.h +++ b/toolkit/xre/MacLaunchHelper.h @@ -17,7 +17,9 @@ extern "C" { * pid of the terminated process to confirm that it executed successfully. */ void LaunchChildMac(int aArgc, char** aArgv, pid_t* aPid = 0); +#ifndef TOR_BROWSER_UPDATE bool LaunchElevatedUpdate(int aArgc, char** aArgv, pid_t* aPid = 0); +#endif }
#endif diff --git a/toolkit/xre/MacLaunchHelper.mm b/toolkit/xre/MacLaunchHelper.mm index ec570ffab124..da2917c2a99e 100644 --- a/toolkit/xre/MacLaunchHelper.mm +++ b/toolkit/xre/MacLaunchHelper.mm @@ -40,6 +40,7 @@ void LaunchChildMac(int aArgc, char** aArgv, pid_t* aPid) { } }
+#ifndef TOR_BROWSER_UPDATE BOOL InstallPrivilegedHelper() { AuthorizationRef authRef = NULL; OSStatus status = AuthorizationCreate( @@ -116,3 +117,4 @@ bool LaunchElevatedUpdate(int aArgc, char** aArgv, pid_t* aPid) { } return didSucceed; } +#endif diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 686d8dd985e6..c5e285c7e746 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -3651,6 +3651,11 @@ static bool CheckCompatibility(nsIFile* aProfileDir, const nsCString& aVersion, gLastAppBuildID.Assign(gAppData->buildID);
nsAutoCString buf; + + nsAutoCString tbVersion(TOR_BROWSER_VERSION_QUOTED); + rv = parser.GetString("Compatibility", "LastTorBrowserVersion", buf); + if (NS_FAILED(rv) || !tbVersion.Equals(buf)) return false; + rv = parser.GetString("Compatibility", "LastOSABI", buf); if (NS_FAILED(rv) || !aOSABI.Equals(buf)) return false;
@@ -3736,6 +3741,12 @@ static void WriteVersion(nsIFile* aProfileDir, const nsCString& aVersion, PR_Write(fd, kHeader, sizeof(kHeader) - 1); PR_Write(fd, aVersion.get(), aVersion.Length());
+ nsAutoCString tbVersion(TOR_BROWSER_VERSION_QUOTED); + static const char kTorBrowserVersionHeader[] = + NS_LINEBREAK "LastTorBrowserVersion="; + PR_Write(fd, kTorBrowserVersionHeader, sizeof(kTorBrowserVersionHeader) - 1); + PR_Write(fd, tbVersion.get(), tbVersion.Length()); + static const char kOSABIHeader[] = NS_LINEBREAK "LastOSABI="; PR_Write(fd, kOSABIHeader, sizeof(kOSABIHeader) - 1); PR_Write(fd, aOSABI.get(), aOSABI.Length()); @@ -5211,8 +5222,17 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { if (CheckArg("test-process-updates")) { SaveToEnv("MOZ_TEST_PROCESS_UPDATES=1"); } +# ifdef TOR_BROWSER_UPDATE + nsAutoCString compatVersion(TOR_BROWSER_VERSION_QUOTED); +# endif ProcessUpdates(mDirProvider.GetGREDir(), exeDir, updRoot, gRestartArgc, - gRestartArgv, mAppData->version); + gRestartArgv, +# ifdef TOR_BROWSER_UPDATE + compatVersion.get() +# else + mAppData->version +# endif + ); if (EnvHasValue("MOZ_TEST_PROCESS_UPDATES")) { SaveToEnv("MOZ_TEST_PROCESS_UPDATES="); *aExitFlag = true; diff --git a/toolkit/xre/nsUpdateDriver.cpp b/toolkit/xre/nsUpdateDriver.cpp index 70c8fd45c061..6808b5a5e9cf 100644 --- a/toolkit/xre/nsUpdateDriver.cpp +++ b/toolkit/xre/nsUpdateDriver.cpp @@ -48,7 +48,6 @@ # include "commonupdatedir.h" # include "nsWindowsHelpers.h" # include "pathhash.h" -# include "WinUtils.h" # define getcwd(path, size) _getcwd(path, size) # define getpid() GetCurrentProcessId() #elif defined(XP_UNIX) @@ -65,6 +64,16 @@ static LazyLogModule sUpdateLog("updatedriver"); #endif #define LOG(args) MOZ_LOG(sUpdateLog, mozilla::LogLevel::Debug, args)
+#ifdef XP_WIN +# define UPDATER_BIN "updater.exe" +# define MAINTENANCE_SVC_NAME L"MozillaMaintenance" +#elif XP_MACOSX +# define UPDATER_APP "updater.app" +# define UPDATER_BIN "org.mozilla.updater" +#else +# define UPDATER_BIN "updater" +#endif + #ifdef XP_MACOSX static void UpdateDriverSetupMacCommandLine(int& argc, char**& argv, bool restart) { @@ -78,7 +87,7 @@ static void UpdateDriverSetupMacCommandLine(int& argc, char**& argv, // result from it, so we can't just dispatch and return, we have to wait // until the dispatched operation actually completes. So we also set up a // monitor to signal us when that happens, and block until then. - Monitor monitor MOZ_UNANNOTATED("nsUpdateDriver SetupMacCommandLine"); + Monitor monitor("nsUpdateDriver SetupMacCommandLine");
nsresult rv = NS_DispatchToMainThread(NS_NewRunnableFunction( "UpdateDriverSetupMacCommandLine", @@ -157,6 +166,13 @@ static nsresult GetInstallDirPath(nsIFile* appDir, nsACString& installDirPath) { return NS_OK; }
+#ifdef DEBUG +static void dump_argv(const char* aPrefix, char** argv, int argc) { + printf("%s - %d args\n", aPrefix, argc); + for (int i = 0; i < argc; ++i) printf(" %d: %s\n", i, argv[i]); +} +#endif + static bool GetFile(nsIFile* dir, const nsACString& name, nsCOMPtr<nsIFile>& result) { nsresult rv; @@ -218,6 +234,34 @@ typedef enum { eAppliedService, } UpdateStatus;
+#ifdef DEBUG +static const char* UpdateStatusToString(UpdateStatus aStatus) { + const char* rv = "unknown"; + switch (aStatus) { + case eNoUpdateAction: + rv = "NoUpdateAction"; + break; + case ePendingUpdate: + rv = "PendingUpdate"; + break; + case ePendingService: + rv = "PendingService"; + break; + case ePendingElevate: + rv = "PendingElevate"; + break; + case eAppliedUpdate: + rv = "AppliedUpdate"; + break; + case eAppliedService: + rv = "AppliedService"; + break; + } + + return rv; +} +#endif + /** * Returns a value indicating what needs to be done in order to handle an * update. @@ -290,9 +334,39 @@ static bool IsOlderVersion(nsIFile* versionFile, const char* appVersion) { return false; }
+#ifdef DEBUG + printf("IsOlderVersion checking appVersion %s against updateVersion %s\n", + appVersion, buf); +#endif + return mozilla::Version(appVersion) > buf; }
+#ifndef TOR_BROWSER_DATA_OUTSIDE_APP_DIR +# if defined(TOR_BROWSER_UPDATE) && defined(XP_MACOSX) +static nsresult GetUpdateDirFromAppDir(nsIFile* aAppDir, nsIFile** aResult) { + // On Mac OSX, we stage the update to an Updated.app directory that is + // directly below the main Tor Browser.app directory (two levels up from + // the appDir). + NS_ENSURE_ARG_POINTER(aAppDir); + NS_ENSURE_ARG_POINTER(aResult); + nsCOMPtr<nsIFile> parentDir1, parentDir2; + nsresult rv = aAppDir->GetParent(getter_AddRefs(parentDir1)); + NS_ENSURE_SUCCESS(rv, rv); + rv = parentDir1->GetParent(getter_AddRefs(parentDir2)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr<nsIFile> updatedDir; + if (!GetFile(parentDir2, "Updated.app"_ns, updatedDir)) { + return NS_ERROR_FAILURE; + } + + updatedDir.forget(aResult); + return NS_OK; +} +# endif +#endif + /** * Applies, switches, or stages an update. * @@ -439,6 +513,7 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, gfxPlatformMac::WaitForFontRegistration(); }
+# ifndef TOR_BROWSER_UPDATE // We need to detect whether elevation is required for this update. This can // occur when an admin user installs the application, but another admin // user attempts to update (see bug 394984). @@ -465,6 +540,7 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, } } } +# endif #endif
nsAutoCString applyToDirPath; @@ -475,7 +551,12 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, } else { // Get the directory where the update is staged or will be staged. #if defined(XP_MACOSX) +# if defined(TOR_BROWSER_UPDATE) && !defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) + rv = GetUpdateDirFromAppDir(appDir, getter_AddRefs(updatedDir)); + if (NS_FAILED(rv)) { +# else if (!GetFile(updateDir, "Updated.app"_ns, updatedDir)) { +# endif #else if (!GetFile(appDir, "updated"_ns, updatedDir)) { #endif @@ -570,6 +651,9 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, }
LOG(("spawning updater process [%s]\n", updaterPath.get())); +#ifdef DEBUG + dump_argv("ApplyUpdate updater", argv, argc); +#endif
#if defined(XP_UNIX) && !defined(XP_MACOSX) // We use execv to spawn the updater process on all UNIX systems except Mac @@ -608,7 +692,14 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, } #elif defined(XP_MACOSX) UpdateDriverSetupMacCommandLine(argc, argv, restart); -if (restart && needElevation) { +# ifdef DEBUG +dump_argv("ApplyUpdate after SetupMacCommandLine", argv, argc); +# endif +# ifndef TOR_BROWSER_UPDATE +// We need to detect whether elevation is required for this update. This can +// occur when an admin user installs the application, but another admin +// user attempts to update (see bug 394984). +if (restart && !IsRecursivelyWritable(installDirPath.get())) { bool hasLaunched = LaunchElevatedUpdate(argc, argv, outpid); free(argv); if (!hasLaunched) { @@ -617,6 +708,7 @@ if (restart && needElevation) { } exit(0); } +# endif
if (isStaged) { // Launch the updater to replace the installation with the staged updated. @@ -689,14 +781,25 @@ nsresult ProcessUpdates(nsIFile* greDir, nsIFile* appDir, nsIFile* updRootDir, bool restart, ProcessType* pid) { nsresult rv;
-#ifdef XP_WIN - // If we're in a package, we know any updates that we find are not for us. - if (mozilla::widget::WinUtils::HasPackageIdentity()) { - return NS_OK; +#if defined(XP_WIN) && defined(TOR_BROWSER_UPDATE) + // Try to remove the "tobedeleted" directory which, if present, contains + // files that could not be removed during a previous update (e.g., DLLs + // that were in use and therefore locked by Windows). + nsCOMPtr<nsIFile> deleteDir; + nsresult winrv = appDir->Clone(getter_AddRefs(deleteDir)); + if (NS_SUCCEEDED(winrv)) { + winrv = deleteDir->AppendNative("tobedeleted"_ns); + if (NS_SUCCEEDED(winrv)) { + winrv = deleteDir->Remove(true); + } } #endif
nsCOMPtr<nsIFile> updatesDir; +#ifdef DEBUG + printf("ProcessUpdates updateRootDir: %s appVersion: %s\n", + updRootDir->HumanReadablePath().get(), appVersion); +#endif rv = updRootDir->Clone(getter_AddRefs(updatesDir)); NS_ENSURE_SUCCESS(rv, rv); rv = updatesDir->AppendNative("updates"_ns); @@ -716,6 +819,12 @@ nsresult ProcessUpdates(nsIFile* greDir, nsIFile* appDir, nsIFile* updRootDir,
nsCOMPtr<nsIFile> statusFile; UpdateStatus status = GetUpdateStatus(updatesDir, statusFile); +#ifdef DEBUG + printf("ProcessUpdates status: %s (%d)\n", UpdateStatusToString(status), + status); + printf("ProcessUpdates updatesDir: %s\n", + updatesDir->HumanReadablePath().get()); +#endif switch (status) { case ePendingUpdate: case ePendingService: { @@ -779,13 +888,16 @@ nsUpdateProcessor::ProcessUpdate() { NS_ENSURE_SUCCESS(rv, rv); }
+ nsAutoCString appVersion; +#ifdef TOR_BROWSER_UPDATE + appVersion = TOR_BROWSER_VERSION_QUOTED; +#else nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1", &rv); NS_ENSURE_SUCCESS(rv, rv); - - nsAutoCString appVersion; rv = appInfo->GetVersion(appVersion); NS_ENSURE_SUCCESS(rv, rv); +#endif
// Copy the parameters to the StagedUpdateInfo structure shared with the // watcher thread. diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp index c39c1fabd57c..13a5878df8ed 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp @@ -1197,6 +1197,37 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, } #endif nsCOMPtr<nsIFile> updRoot; +#if defined(TOR_BROWSER_UPDATE) + // For Tor Browser, we store update history, etc. within the UpdateInfo + // directory under the user data directory. + nsresult rv = GetTorBrowserUserDataDir(getter_AddRefs(updRoot)); + NS_ENSURE_SUCCESS(rv, rv); + rv = updRoot->AppendNative("UpdateInfo"_ns); + NS_ENSURE_SUCCESS(rv, rv); +# if defined(XP_MACOSX) && defined(TOR_BROWSER_DATA_OUTSIDE_APP_DIR) + // Since the TorBrowser-Data directory may be shared among different + // installations of the application, embed the app path in the update dir + // so that the update history is partitioned. This is much less likely to + // be an issue on Linux or Windows because the Tor Browser packages for + // those platforms include a "container" folder that provides partitioning + // by default, and we do not support use of a shared, OS-recommended area + // for user data on those platforms. + nsAutoString appDirPath; + nsCOMPtr<nsIFile> appRootDir; + rv = GetAppRootDir(getter_AddRefs(appRootDir)); + NS_ENSURE_SUCCESS(rv, rv); + rv = appRootDir->GetPath(appDirPath); + NS_ENSURE_SUCCESS(rv, rv); + + int32_t dotIndex = appDirPath.RFind(".app"); + if (dotIndex == kNotFound) { + dotIndex = appDirPath.Length(); + } + appDirPath = Substring(appDirPath, 1, dotIndex - 1); + rv = updRoot->AppendRelativePath(appDirPath); + NS_ENSURE_SUCCESS(rv, rv); +# endif +#else // ! TOR_BROWSER_UPDATE nsCOMPtr<nsIFile> appFile; bool per = false; nsresult rv = GetFile(XRE_EXECUTABLE_FILE, &per, getter_AddRefs(appFile)); @@ -1204,7 +1235,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, rv = appFile->GetParent(getter_AddRefs(updRoot)); NS_ENSURE_SUCCESS(rv, rv);
-#ifdef XP_MACOSX +# ifdef XP_MACOSX nsCOMPtr<nsIFile> appRootDirFile; nsCOMPtr<nsIFile> localDir; nsAutoString appDirPath; @@ -1238,7 +1269,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, localDir.forget(aResult); return NS_OK;
-#elif XP_WIN +# elif XP_WIN nsAutoString installPath; rv = updRoot->GetPath(installPath); NS_ENSURE_SUCCESS(rv, rv); @@ -1258,7 +1289,8 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, nsAutoString updatePathStr; updatePathStr.Assign(updatePath.get()); updRoot->InitWithPath(updatePathStr); -#endif // XP_WIN +# endif // XP_WIN +#endif // ! TOR_BROWSER_UPDATE updRoot.forget(aResult); return NS_OK; } diff --git a/tools/update-packaging/common.sh b/tools/update-packaging/common.sh index 4b994f30169c..26eabbf31379 100755 --- a/tools/update-packaging/common.sh +++ b/tools/update-packaging/common.sh @@ -8,6 +8,10 @@ # Author: Darin Fisher #
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove all lines in this file that contain: +# TorBrowser/Data + # ----------------------------------------------------------------------------- QUIET=0
@@ -76,17 +80,8 @@ make_add_instruction() { forced= fi
- is_extension=$(echo "$f" | grep -c 'distribution/extensions/.*/') - if [ $is_extension = "1" ]; then - # Use the subdirectory of the extensions folder as the file to test - # before performing this add instruction. - testdir=$(echo "$f" | sed 's/(.*distribution/extensions/[^/]*)/.*/\1/') - verbose_notice " add-if "$testdir" "$f"" - echo "add-if "$testdir" "$f"" >> "$filev3" - else - verbose_notice " add "$f"$forced" - echo "add "$f"" >> "$filev3" - fi + verbose_notice " add "$f"$forced" + echo "add "$f"" >> "$filev3" }
check_for_add_if_not_update() { @@ -109,21 +104,21 @@ make_add_if_not_instruction() { echo "add-if-not "$f" "$f"" >> "$filev3" }
+make_addsymlink_instruction() { + link="$1" + target="$2" + filev3="$3" + + verbose_notice " addsymlink: $link -> $target" + echo "addsymlink "$link" "$target"" >> "$filev3" +} + make_patch_instruction() { f="$1" filev3="$2"
- is_extension=$(echo "$f" | grep -c 'distribution/extensions/.*/') - if [ $is_extension = "1" ]; then - # Use the subdirectory of the extensions folder as the file to test - # before performing this add instruction. - testdir=$(echo "$f" | sed 's/(.*distribution/extensions/[^/]*)/.*/\1/') - verbose_notice " patch-if "$testdir" "$f.patch" "$f"" - echo "patch-if "$testdir" "$f.patch" "$f"" >> "$filev3" - else - verbose_notice " patch "$f.patch" "$f"" - echo "patch "$f.patch" "$f"" >> "$filev3" - fi + verbose_notice " patch "$f.patch" "$f"" + echo "patch "$f.patch" "$f"" >> "$filev3" }
append_remove_instructions() { @@ -168,6 +163,10 @@ append_remove_instructions() {
# List all files in the current directory, stripping leading "./" # Pass a variable name and it will be filled as an array. +# To support Tor Browser updates, skip the following files: +# TorBrowser/Data/Browser/profiles.ini +# TorBrowser/Data/Browser/profile.default/bookmarks.html +# TorBrowser/Data/Tor/torrc list_files() { count=0 temp_filelist=$(mktemp) @@ -178,6 +177,11 @@ list_files() { | sed 's/./(.*)/\1/' \ | sort -r > "${temp_filelist}" while read file; do + if [ "$file" = "TorBrowser/Data/Browser/profiles.ini" -o \ + "$file" = "TorBrowser/Data/Browser/profile.default/bookmarks.html" -o \ + "$file" = "TorBrowser/Data/Tor/torrc" ]; then + continue; + fi eval "${1}[$count]="$file"" (( count++ )) done < "${temp_filelist}" @@ -199,3 +203,19 @@ list_dirs() { done < "${temp_dirlist}" rm "${temp_dirlist}" } + +# List all symbolic links in the current directory, stripping leading "./" +list_symlinks() { + count=0 + + find . -type l \ + | sed 's/./(.*)/\1/' \ + | sort -r > "temp-symlinklist" + while read symlink; do + target=$(readlink "$symlink") + eval "${1}[$count]="$symlink"" + eval "${2}[$count]="$target"" + (( count++ )) + done < "temp-symlinklist" + rm "temp-symlinklist" +} diff --git a/tools/update-packaging/make_full_update.sh b/tools/update-packaging/make_full_update.sh index db2c5898efdc..603988997405 100755 --- a/tools/update-packaging/make_full_update.sh +++ b/tools/update-packaging/make_full_update.sh @@ -71,6 +71,7 @@ if [ ! -f "precomplete" ]; then fi
list_files files +list_symlinks symlinks symlink_targets
popd
@@ -81,6 +82,21 @@ notice "Adding type instruction to update manifests" notice " type complete" echo "type "complete"" >> "$updatemanifestv3"
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove the following lines: +# If removal of any old, existing directories is desired, emit the appropriate +# rmrfdir commands. +notice "" +notice "Adding directory removal instructions to update manifests" +for dir_to_remove in $directories_to_remove; do + # rmrfdir requires a trailing slash; if slash is missing, add one. + if ! [[ "$dir_to_remove" =~ /$ ]]; then + dir_to_remove="${dir_to_remove}/" + fi + echo "rmrfdir "$dir_to_remove"" >> "$updatemanifestv3" +done +# END TOR_BROWSER_DATA_OUTSIDE_APP_DIR removal + notice "" notice "Adding file add instructions to update manifests" num_files=${#files[*]} @@ -102,6 +118,15 @@ for ((i=0; $i<$num_files; i=$i+1)); do targetfiles="$targetfiles "$f"" done
+notice "" +notice "Adding symlink add instructions to update manifests" +num_symlinks=${#symlinks[*]} +for ((i=0; $i<$num_symlinks; i=$i+1)); do + link="${symlinks[$i]}" + target="${symlink_targets[$i]}" + make_addsymlink_instruction "$link" "$target" "$updatemanifestv3" +done + # Append remove instructions for any dead files. notice "" notice "Adding file and directory remove instructions from file 'removed-files'" diff --git a/tools/update-packaging/make_incremental_update.sh b/tools/update-packaging/make_incremental_update.sh index 24d68616731a..1adfef8fd96e 100755 --- a/tools/update-packaging/make_incremental_update.sh +++ b/tools/update-packaging/make_incremental_update.sh @@ -78,7 +78,11 @@ if [ $# = 0 ]; then exit 1 fi
-requested_forced_updates='Contents/MacOS/firefox' +# Firefox uses requested_forced_updates='Contents/MacOS/firefox' due to +# 770996 but in Tor Browser we do not need that fix. +requested_forced_updates="" +directories_to_remove="" +extra_files_to_remove=""
while getopts "hqf:" flag do @@ -114,6 +118,28 @@ workdir="$(mktemp -d)" updatemanifestv3="$workdir/updatev3.manifest" archivefiles="updatev3.manifest"
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove the following lines: +# If the NoScript extension has changed between +# releases, add it to the "force updates" list. +ext_path='TorBrowser/Data/Browser/profile.default/extensions' +if [ -d "$newdir/$ext_path" ]; then + noscript='{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi' + + # NoScript is a packed extension, so we simply compare the old and the new + # .xpi files. + noscript_path="$ext_path/$noscript" + diff -a "$olddir/$noscript_path" "$newdir/$noscript_path" > /dev/null + rc=$? + if [ $rc -gt 1 ]; then + notice "Unexpected exit $rc from $noscript_path diff command" + exit 2 + elif [ $rc -eq 1 ]; then + requested_forced_updates="$requested_forced_updates $noscript_path" + fi +fi +# END TOR_BROWSER_DATA_OUTSIDE_APP_DIR removal + mkdir -p "$workdir"
# Generate a list of all files in the target directory. @@ -124,6 +150,7 @@ fi
list_files oldfiles list_dirs olddirs +list_symlinks oldsymlinks oldsymlink_targets
popd
@@ -141,6 +168,7 @@ fi
list_dirs newdirs list_files newfiles +list_symlinks newsymlinks newsymlink_targets
popd
@@ -151,6 +179,22 @@ notice "Adding type instruction to update manifests" notice " type partial" echo "type "partial"" >> $updatemanifestv3
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove the following lines: +# If removal of any old, existing directories is desired, emit the appropriate +# rmrfdir commands. +notice "" +notice "Adding directory removal instructions to update manifests" +for dir_to_remove in $directories_to_remove; do + # rmrfdir requires a trailing slash, so add one if missing. + if ! [[ "$dir_to_remove" =~ /$ ]]; then + dir_to_remove="${dir_to_remove}/" + fi + echo "rmrfdir "$dir_to_remove"" >> "$updatemanifestv3" +done +# END TOR_BROWSER_DATA_OUTSIDE_APP_DIR removal + + notice "" notice "Adding file patch and add instructions to update manifests"
@@ -242,6 +286,23 @@ for ((i=0; $i<$num_oldfiles; i=$i+1)); do fi done
+# Remove and re-add symlinks +notice "" +notice "Adding symlink remove/add instructions to update manifests" +num_oldsymlinks=${#oldsymlinks[*]} +for ((i=0; $i<$num_oldsymlinks; i=$i+1)); do + link="${oldsymlinks[$i]}" + verbose_notice " remove: $link" + echo "remove "$link"" >> "$updatemanifestv3" +done + +num_newsymlinks=${#newsymlinks[*]} +for ((i=0; $i<$num_newsymlinks; i=$i+1)); do + link="${newsymlinks[$i]}" + target="${newsymlink_targets[$i]}" + make_addsymlink_instruction "$link" "$target" "$updatemanifestv3" +done + # Newly added files notice "" notice "Adding file add instructions to update manifests" @@ -286,6 +347,14 @@ notice "" notice "Adding file and directory remove instructions from file 'removed-files'" append_remove_instructions "$newdir" "$updatemanifestv3"
+# TODO When TOR_BROWSER_DATA_OUTSIDE_APP_DIR is used on all platforms, +# we should remove the following lines: +for f in $extra_files_to_remove; do + notice " remove "$f"" + echo "remove "$f"" >> "$updatemanifestv3" +done +# END TOR_BROWSER_DATA_OUTSIDE_APP_DIR removal + notice "" notice "Adding directory remove instructions for directories that no longer exist" num_olddirs=${#olddirs[*]}
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 1c92dda29511f3c1b17ebf2b280e6dd90549fce5 Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Wed Dec 17 16:37:11 2014 -0500
Bug 13379: Sign our MAR files.
Configure with --enable-verify-mar (when updating, require a valid signature on the MAR file before it is applied). Use the Tor Browser version instead of the Firefox version inside the MAR file info block (necessary to prevent downgrade attacks). Use NSS on all platforms for checking MAR signatures (instead of using OS-native APIs, which Mozilla does on Mac OS and Windows). So that the NSS and NSPR libraries the updater depends on can be found at runtime, we add the firefox directory to the shared library search path on macOS. On Linux, rpath is used by Mozilla to solve that problem, but that approach won't work on macOS because the updater executable is copied during the update process to a location that is under TorBrowser-Data, and the location of TorBrowser-Data varies.
Also includes the fix for bug 18900.
Bug 19121: reinstate the update.xml hash check
Revert most changes from Mozilla Bug 1373267 "Remove hashFunction and hashValue attributes from nsIUpdatePatch and code related to these attributes." Changes to the tests were not reverted; the tests have been changed significantly and we do not run automated updater tests for Tor Browser at this time.
Also partial revert of commit f1241db6986e4b54473a1ed870f7584c75d51122.
Revert the nsUpdateService.js changes from Mozilla Bug 862173 "don't verify mar file hash when using mar signing to verify the mar file (lessens main thread I/O)."
Changes to the tests were not reverted; the tests have been changed significantly and we do not run automated updater tests for Tor Browser at this time.
We kept the addition to the AppConstants API in case other JS code references it in the future. --- browser/config/mozconfigs/tor-browser | 1 + modules/libmar/tool/mar.c | 6 +- modules/libmar/tool/moz.build | 12 +++- modules/libmar/verify/moz.build | 14 ++-- toolkit/modules/AppConstants.jsm | 7 ++ toolkit/mozapps/update/UpdateService.jsm | 75 +++++++++++++++++++++- toolkit/mozapps/update/UpdateTelemetry.jsm | 1 + toolkit/mozapps/update/nsIUpdateService.idl | 11 ++++ .../mozapps/update/updater/updater-common.build | 24 ++++++- toolkit/mozapps/update/updater/updater.cpp | 25 +++++--- toolkit/xre/moz.build | 3 + toolkit/xre/nsUpdateDriver.cpp | 50 +++++++++++++++ 12 files changed, 203 insertions(+), 26 deletions(-)
diff --git a/browser/config/mozconfigs/tor-browser b/browser/config/mozconfigs/tor-browser index 8969a88aeaf9..0c10a3334cc2 100644 --- a/browser/config/mozconfigs/tor-browser +++ b/browser/config/mozconfigs/tor-browser @@ -5,5 +5,6 @@ mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser" ac_add_options --with-relative-profile=TorBrowser/Data/Browser
ac_add_options --enable-tor-browser-update +ac_add_options --enable-verify-mar
ac_add_options --with-distribution-id=org.torproject diff --git a/modules/libmar/tool/mar.c b/modules/libmar/tool/mar.c index 0bf2cb4bd1d4..ea2b79924914 100644 --- a/modules/libmar/tool/mar.c +++ b/modules/libmar/tool/mar.c @@ -65,7 +65,7 @@ static void print_usage() { "signed_input_archive.mar base_64_encoded_signature_file " "changed_signed_output.mar\n"); printf("(i) is the index of the certificate to extract\n"); -# if defined(XP_MACOSX) || (defined(XP_WIN) && !defined(MAR_NSS)) +# if (defined(XP_MACOSX) || defined(XP_WIN)) && !defined(MAR_NSS) printf("Verify a MAR file:\n"); printf(" mar [-C workingDir] -D DERFilePath -v signed_archive.mar\n"); printf( @@ -149,7 +149,7 @@ int main(int argc, char** argv) { memset((void*)certBuffers, 0, sizeof(certBuffers)); #endif #if !defined(NO_SIGN_VERIFY) && \ - ((!defined(MAR_NSS) && defined(XP_WIN)) || defined(XP_MACOSX)) + (!defined(MAR_NSS) && (defined(XP_WIN) || defined(XP_MACOSX))) memset(DERFilePaths, 0, sizeof(DERFilePaths)); memset(fileSizes, 0, sizeof(fileSizes)); #endif @@ -181,7 +181,7 @@ int main(int argc, char** argv) { argc -= 2; } #if !defined(NO_SIGN_VERIFY) -# if (!defined(MAR_NSS) && defined(XP_WIN)) || defined(XP_MACOSX) +# if (!defined(MAR_NSS) && (defined(XP_WIN) || defined(XP_MACOSX))) /* -D DERFilePath, also matches -D[index] DERFilePath We allow an index for verifying to be symmetric with the import and export command line arguments. */ diff --git a/modules/libmar/tool/moz.build b/modules/libmar/tool/moz.build index 0f25dcc10aa4..d52f4415104d 100644 --- a/modules/libmar/tool/moz.build +++ b/modules/libmar/tool/moz.build @@ -43,15 +43,21 @@ if CONFIG["MOZ_BUILD_APP"] != "tools/update-packaging": "verifymar", ]
+ if CONFIG["TOR_BROWSER_UPDATE"]: + DEFINES["MAR_NSS"] = True + if CONFIG["OS_ARCH"] == "WINNT": USE_STATIC_LIBS = True
OS_LIBS += [ "ws2_32", - "crypt32", - "advapi32", ] - elif CONFIG["OS_ARCH"] == "Darwin": + if not CONFIG["TOR_BROWSER_UPDATE"]: + OS_LIBS += [ + "crypt32", + "advapi32", + ] + elif CONFIG["OS_ARCH"] == "Darwin" and not CONFIG["TOR_BROWSER_UPDATE"]: OS_LIBS += [ "-framework CoreFoundation", "-framework Security", diff --git a/modules/libmar/verify/moz.build b/modules/libmar/verify/moz.build index 17bf7b8387bb..202fbef4e06b 100644 --- a/modules/libmar/verify/moz.build +++ b/modules/libmar/verify/moz.build @@ -16,15 +16,12 @@ FORCE_STATIC_LIB = True if CONFIG["OS_ARCH"] == "WINNT": USE_STATIC_LIBS = True elif CONFIG["OS_ARCH"] == "Darwin": - UNIFIED_SOURCES += [ - "MacVerifyCrypto.cpp", - ] - OS_LIBS += [ - "-framework Security", + USE_LIBS += [ + "nspr", + "nss", + "signmar", ] else: - DEFINES["MAR_NSS"] = True - LOCAL_INCLUDES += ["../sign"] USE_LIBS += [ "nspr", "nss", @@ -38,6 +35,9 @@ else: "-Wl,-rpath=\$$ORIGIN", ]
+DEFINES["MAR_NSS"] = True +LOCAL_INCLUDES += ["../sign"] + LOCAL_INCLUDES += [ "../src", ] diff --git a/toolkit/modules/AppConstants.jsm b/toolkit/modules/AppConstants.jsm index 1738ad24512c..64695e4c996d 100644 --- a/toolkit/modules/AppConstants.jsm +++ b/toolkit/modules/AppConstants.jsm @@ -212,6 +212,13 @@ this.AppConstants = Object.freeze({ false, #endif
+ MOZ_VERIFY_MAR_SIGNATURE: +#ifdef MOZ_VERIFY_MAR_SIGNATURE + true, +#else + false, +#endif + MOZ_MAINTENANCE_SERVICE: #ifdef MOZ_MAINTENANCE_SERVICE true, diff --git a/toolkit/mozapps/update/UpdateService.jsm b/toolkit/mozapps/update/UpdateService.jsm index a10daf18d3de..501709856962 100644 --- a/toolkit/mozapps/update/UpdateService.jsm +++ b/toolkit/mozapps/update/UpdateService.jsm @@ -996,6 +996,21 @@ function LOG(string) { } }
+/** + * Convert a string containing binary values to hex. + */ +function binaryToHex(input) { + var result = ""; + for (var i = 0; i < input.length; ++i) { + var hex = input.charCodeAt(i).toString(16); + if (hex.length == 1) { + hex = "0" + hex; + } + result += hex; + } + return result; +} + /** * Gets the specified directory at the specified hierarchy under the * update root directory and creates it if it doesn't exist. @@ -1941,6 +1956,8 @@ function UpdatePatch(patch) { } break; case "finalURL": + case "hashFunction": + case "hashValue": case "state": case "type": case "URL": @@ -1960,6 +1977,8 @@ UpdatePatch.prototype = { // over writing nsIUpdatePatch attributes. _attrNames: [ "errorCode", + "hashFunction", + "hashValue", "finalURL", "selected", "size", @@ -1973,6 +1992,8 @@ UpdatePatch.prototype = { */ serialize: function UpdatePatch_serialize(updates) { var patch = updates.createElementNS(URI_UPDATE_NS, "patch"); + patch.setAttribute("hashFunction", this.hashFunction); + patch.setAttribute("hashValue", this.hashValue); patch.setAttribute("size", this.size); patch.setAttribute("type", this.type); patch.setAttribute("URL", this.URL); @@ -5157,7 +5178,53 @@ Downloader.prototype = { }
LOG("Downloader:_verifyDownload downloaded size == expected size."); - return true; + let fileStream = Cc[ + "@mozilla.org/network/file-input-stream;1" + ].createInstance(Ci.nsIFileInputStream); + fileStream.init( + destination, + FileUtils.MODE_RDONLY, + FileUtils.PERMS_FILE, + 0 + ); + + let digest; + try { + let hash = Cc["@mozilla.org/security/hash;1"].createInstance( + Ci.nsICryptoHash + ); + var hashFunction = + Ci.nsICryptoHash[this._patch.hashFunction.toUpperCase()]; + if (hashFunction == undefined) { + throw Components.Exception("", Cr.NS_ERROR_UNEXPECTED); + } + hash.init(hashFunction); + hash.updateFromStream(fileStream, -1); + // NOTE: For now, we assume that the format of _patch.hashValue is hex + // encoded binary (such as what is typically output by programs like + // sha1sum). In the future, this may change to base64 depending on how + // we choose to compute these hashes. + digest = binaryToHex(hash.finish(false)); + } catch (e) { + LOG( + "Downloader:_verifyDownload - failed to compute hash of the downloaded update archive" + ); + digest = ""; + } + + fileStream.close(); + + if (digest == this._patch.hashValue.toLowerCase()) { + LOG("Downloader:_verifyDownload hashes match."); + return true; + } + + LOG("Downloader:_verifyDownload hashes do not match. "); + AUSTLMY.pingDownloadCode( + this.isCompleteUpdate, + AUSTLMY.DWNLD_ERR_VERIFY_NO_HASH_MATCH + ); + return false; },
/** @@ -5738,6 +5805,9 @@ Downloader.prototype = { " is higher than patch size: " + this._patch.size ); + // It's important that we use a different code than + // NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference + // between a hash error and a wrong download error. AUSTLMY.pingDownloadCode( this.isCompleteUpdate, AUSTLMY.DWNLD_ERR_PATCH_SIZE_LARGER @@ -5756,6 +5826,9 @@ Downloader.prototype = { " is not equal to expected patch size: " + this._patch.size ); + // It's important that we use a different code than + // NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference + // between a hash error and a wrong download error. AUSTLMY.pingDownloadCode( this.isCompleteUpdate, AUSTLMY.DWNLD_ERR_PATCH_SIZE_NOT_EQUAL diff --git a/toolkit/mozapps/update/UpdateTelemetry.jsm b/toolkit/mozapps/update/UpdateTelemetry.jsm index e75fd504866a..2612ed65529d 100644 --- a/toolkit/mozapps/update/UpdateTelemetry.jsm +++ b/toolkit/mozapps/update/UpdateTelemetry.jsm @@ -195,6 +195,7 @@ var AUSTLMY = { DWNLD_ERR_VERIFY_NO_REQUEST: 13, DWNLD_ERR_VERIFY_PATCH_SIZE_NOT_EQUAL: 14, DWNLD_ERR_WRITE_FAILURE: 15, + DWNLD_ERR_VERIFY_NO_HASH_MATCH: 16, // Temporary failure code to see if there are failures without an update phase DWNLD_UNKNOWN_PHASE_ERR_WRITE_FAILURE: 40,
diff --git a/toolkit/mozapps/update/nsIUpdateService.idl b/toolkit/mozapps/update/nsIUpdateService.idl index 668564822d24..ce1b40054de8 100644 --- a/toolkit/mozapps/update/nsIUpdateService.idl +++ b/toolkit/mozapps/update/nsIUpdateService.idl @@ -39,6 +39,17 @@ interface nsIUpdatePatch : nsISupports */ attribute AString finalURL;
+ /** + * The hash function to use when determining this file's integrity + */ + attribute AString hashFunction; + + /** + * The value of the hash function named above that should be computed if + * this file is not corrupt. + */ + attribute AString hashValue; + /** * The size of this file, in bytes. */ diff --git a/toolkit/mozapps/update/updater/updater-common.build b/toolkit/mozapps/update/updater/updater-common.build index 7c58d374bbc2..4455b5093d73 100644 --- a/toolkit/mozapps/update/updater/updater-common.build +++ b/toolkit/mozapps/update/updater/updater-common.build @@ -4,6 +4,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+DEFINES["MAR_NSS"] = True + +link_with_nss = DEFINES["MAR_NSS"] or (CONFIG["OS_ARCH"] == "Linux" and CONFIG["MOZ_VERIFY_MAR_SIGNATURE"]) + srcs = [ "archivereader.cpp", "updater.cpp", @@ -36,14 +40,18 @@ if CONFIG["OS_ARCH"] == "WINNT": "ws2_32", "shell32", "shlwapi", - "crypt32", - "advapi32", "gdi32", "user32", "userenv", "uuid", ]
+ if not link_with_nss: + OS_LIBS += [ + "crypt32", + "advapi32", + ] + USE_LIBS += [ "bspatch", "mar", @@ -51,6 +59,13 @@ USE_LIBS += [ "xz-embedded", ]
+if link_with_nss: + USE_LIBS += [ + "nspr", + "nss", + "signmar", + ] + if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": have_progressui = 1 srcs += [ @@ -65,9 +80,12 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa": ] OS_LIBS += [ "-framework Cocoa", - "-framework Security", "-framework SystemConfiguration", ] + if not link_with_nss: + OS_LIBS += [ + "-framework Security", + ] UNIFIED_SOURCES += [ "/toolkit/xre/updaterfileutils_osx.mm", ] diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 2dc08e19957c..a0ddffaf0af9 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -108,9 +108,11 @@ struct UpdateServerThreadArgs { # define stat64 stat #endif
-#if defined(MOZ_VERIFY_MAR_SIGNATURE) && !defined(XP_WIN) && !defined(XP_MACOSX) -# include "nss.h" -# include "prerror.h" +#if defined(MOZ_VERIFY_MAR_SIGNATURE) +# if defined(MAR_NSS) || (!defined(XP_WIN) && !defined(XP_MACOSX)) +# include "nss.h" +# include "prerror.h" +# endif #endif
#include "crctable.h" @@ -2856,8 +2858,13 @@ static void UpdateThreadFunc(void* param) { if (ReadMARChannelIDs(updateSettingsPath, &MARStrings) != OK) { rv = UPDATE_SETTINGS_FILE_CHANNEL; } else { +# ifdef TOR_BROWSER_UPDATE + const char* appVersion = TOR_BROWSER_VERSION_QUOTED; +# else + const char* appVersion = MOZ_APP_VERSION; +# endif rv = gArchiveReader.VerifyProductInformation( - MARStrings.MARChannelID.get(), MOZ_APP_VERSION); + MARStrings.MARChannelID.get(), appVersion); } } } @@ -3117,17 +3124,17 @@ int NS_main(int argc, NS_tchar** argv) { if (!isDMGInstall) { // Skip update-related code path for DMG installs.
-#if defined(MOZ_VERIFY_MAR_SIGNATURE) && !defined(XP_WIN) && !defined(XP_MACOSX) - // On Windows and Mac we rely on native APIs to do verifications so we don't - // need to initialize NSS at all there. - // Otherwise, minimize the amount of NSS we depend on by avoiding all the - // NSS databases. +#if defined(MOZ_VERIFY_MAR_SIGNATURE) +# if defined(MAR_NSS) || (!defined(XP_WIN) && !defined(XP_MACOSX)) + // If using NSS for signature verification, initialize NSS but minimize + // the portion we depend on by avoiding all of the NSS databases. if (NSS_NoDB_Init(nullptr) != SECSuccess) { PRErrorCode error = PR_GetError(); fprintf(stderr, "Could not initialize NSS: %s (%d)", PR_ErrorToName(error), (int)error); _exit(1); } +# endif #endif
// To process an update the updater command line must at a minimum have the diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build index 6475c0296aac..a551edb8461f 100644 --- a/toolkit/xre/moz.build +++ b/toolkit/xre/moz.build @@ -232,6 +232,9 @@ for var in ("APP_VERSION", "APP_ID"): if CONFIG["MOZ_BUILD_APP"] == "browser": DEFINES["MOZ_BUILD_APP_IS_BROWSER"] = True
+if CONFIG['TOR_BROWSER_UPDATE']: + DEFINES['MAR_NSS'] = True + LOCAL_INCLUDES += [ "../../other-licenses/nsis/Contrib/CityHash/cityhash", "../components/find", diff --git a/toolkit/xre/nsUpdateDriver.cpp b/toolkit/xre/nsUpdateDriver.cpp index 6808b5a5e9cf..4936114f579d 100644 --- a/toolkit/xre/nsUpdateDriver.cpp +++ b/toolkit/xre/nsUpdateDriver.cpp @@ -367,6 +367,42 @@ static nsresult GetUpdateDirFromAppDir(nsIFile* aAppDir, nsIFile** aResult) { # endif #endif
+#if defined(TOR_BROWSER_UPDATE) && defined(MOZ_VERIFY_MAR_SIGNATURE) && \ + defined(MAR_NSS) && defined(XP_MACOSX) +/** + * Ideally we would save and restore the original library path value after + * the updater finishes its work (and before firefox is re-launched). + * Doing so would avoid potential problems like the following bug: + * https://bugzilla.mozilla.org/show_bug.cgi?id=1434033 + */ +/** + * Appends the specified path to the library path. + * This is used so that the updater can find libnss3.dylib and other + * shared libs. + * + * @param pathToAppend A new library path to prepend to the dynamic linker's + * search path. + */ +# include "prprf.h" +# define PATH_SEPARATOR ":" +# define LD_LIBRARY_PATH_ENVVAR_NAME "DYLD_LIBRARY_PATH" +static void AppendToLibPath(const char* pathToAppend) { + char* pathValue = getenv(LD_LIBRARY_PATH_ENVVAR_NAME); + if (nullptr == pathValue || '\0' == *pathValue) { + // Leak the string because that is required by PR_SetEnv. + char* s = + Smprintf("%s=%s", LD_LIBRARY_PATH_ENVVAR_NAME, pathToAppend).release(); + PR_SetEnv(s); + } else { + // Leak the string because that is required by PR_SetEnv. + char* s = Smprintf("%s=%s" PATH_SEPARATOR "%s", LD_LIBRARY_PATH_ENVVAR_NAME, + pathToAppend, pathValue) + .release(); + PR_SetEnv(s); + } +} +#endif + /** * Applies, switches, or stages an update. * @@ -650,6 +686,20 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, PR_SetEnv("MOZ_SAFE_MODE_RESTART=1"); }
+#if defined(TOR_BROWSER_UPDATE) && defined(MOZ_VERIFY_MAR_SIGNATURE) && \ + defined(MAR_NSS) && defined(XP_MACOSX) + // On macOS, append the app directory to the shared library search path + // so the system can locate the shared libraries that are needed by the + // updater, e.g., libnss3.dylib). + nsAutoCString appPath; + nsresult rv2 = appDir->GetNativePath(appPath); + if (NS_SUCCEEDED(rv2)) { + AppendToLibPath(appPath.get()); + } else { + LOG(("ApplyUpdate -- appDir->GetNativePath() failed (0x%x)\n", rv2)); + } +#endif + LOG(("spawning updater process [%s]\n", updaterPath.get())); #ifdef DEBUG dump_argv("ApplyUpdate updater", argv, argc);
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 98db2b01e7fdbe961f2bbefe134eb598184f414b Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Wed Nov 25 11:36:20 2015 -0500
Bug 16940: After update, load local change notes.
Add an about:tbupdate page that displays the first section from TorBrowser/Docs/ChangeLog.txt and includes a link to the remote post-update page (typically our blog entry for the release).
Always load about:tbupdate in a content process, but implement the code that reads the file system (changelog) in the chrome process for compatibility with future sandboxing efforts.
Also fix bug 29440. Now about:tbupdate is styled as a fairly simple changelog page that is designed to be displayed via a link that is on about:tor. --- browser/actors/AboutTBUpdateChild.jsm | 12 +++ browser/actors/AboutTBUpdateParent.jsm | 120 +++++++++++++++++++++ browser/actors/moz.build | 6 ++ .../base/content/abouttbupdate/aboutTBUpdate.css | 74 +++++++++++++ .../base/content/abouttbupdate/aboutTBUpdate.js | 27 +++++ .../base/content/abouttbupdate/aboutTBUpdate.xhtml | 39 +++++++ browser/base/content/browser.js | 4 + browser/base/jar.mn | 5 + browser/components/BrowserContentHandler.jsm | 55 +++++++--- browser/components/BrowserGlue.jsm | 15 +++ browser/components/about/AboutRedirector.cpp | 7 ++ browser/components/about/components.conf | 3 + browser/components/moz.build | 5 +- .../locales/en-US/chrome/browser/aboutTBUpdate.dtd | 8 ++ browser/locales/jar.mn | 3 + 15 files changed, 368 insertions(+), 15 deletions(-)
diff --git a/browser/actors/AboutTBUpdateChild.jsm b/browser/actors/AboutTBUpdateChild.jsm new file mode 100644 index 000000000000..4670da19b3db --- /dev/null +++ b/browser/actors/AboutTBUpdateChild.jsm @@ -0,0 +1,12 @@ +// Copyright (c) 2020, The Tor Project, Inc. +// See LICENSE for licensing information. +// +// vim: set sw=2 sts=2 ts=8 et syntax=javascript: + +var EXPORTED_SYMBOLS = ["AboutTBUpdateChild"]; + +const { RemotePageChild } = ChromeUtils.import( + "resource://gre/actors/RemotePageChild.jsm" +); + +class AboutTBUpdateChild extends RemotePageChild {} diff --git a/browser/actors/AboutTBUpdateParent.jsm b/browser/actors/AboutTBUpdateParent.jsm new file mode 100644 index 000000000000..56a10394565a --- /dev/null +++ b/browser/actors/AboutTBUpdateParent.jsm @@ -0,0 +1,120 @@ +// Copyright (c) 2020, The Tor Project, Inc. +// See LICENSE for licensing information. +// +// vim: set sw=2 sts=2 ts=8 et syntax=javascript: + +"use strict"; + +this.EXPORTED_SYMBOLS = ["AboutTBUpdateParent"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); +const { AppConstants } = ChromeUtils.import( + "resource://gre/modules/AppConstants.jsm" +); + +const kRequestUpdateMessageName = "FetchUpdateData"; + +/** + * This code provides services to the about:tbupdate page. Whenever + * about:tbupdate needs to do something chrome-privileged, it sends a + * message that's handled here. It is modeled after Mozilla's about:home + * implementation. + */ +class AboutTBUpdateParent extends JSWindowActorParent { + receiveMessage(aMessage) { + if (aMessage.name == kRequestUpdateMessageName) { + return this.releaseNoteInfo; + } + return undefined; + } + + get moreInfoURL() { + try { + return Services.prefs.getCharPref("torbrowser.post_update.url"); + } catch (e) {} + + // Use the default URL as a fallback. + return Services.urlFormatter.formatURLPref("startup.homepage_override_url"); + } + + // Read the text from the beginning of the changelog file that is located + // at TorBrowser/Docs/ChangeLog.txt and return an object that contains + // the following properties: + // version e.g., Tor Browser 8.5 + // releaseDate e.g., March 31 2019 + // releaseNotes details of changes (lines 2 - end of ChangeLog.txt) + // We attempt to parse the first line of ChangeLog.txt to extract the + // version and releaseDate. If parsing fails, we return the entire first + // line in version and omit releaseDate. + // + // On Mac OS, when building with --enable-tor-browser-data-outside-app-dir + // to support Gatekeeper signing, the ChangeLog.txt file is located in + // TorBrowser.app/Contents/Resources/TorBrowser/Docs/. + get releaseNoteInfo() { + let info = { moreInfoURL: this.moreInfoURL }; + + try { + let f; + if (AppConstants.TOR_BROWSER_DATA_OUTSIDE_APP_DIR) { + // "XREExeF".parent is the directory that contains firefox, i.e., + // Browser/ or, on Mac OS, TorBrowser.app/Contents/MacOS/. + f = Services.dirsvc.get("XREExeF", Ci.nsIFile).parent; + if (AppConstants.platform === "macosx") { + f = f.parent; + f.append("Resources"); + } + f.append("TorBrowser"); + } else { + // "DefProfRt" is .../TorBrowser/Data/Browser + f = Services.dirsvc.get("DefProfRt", Ci.nsIFile); + f = f.parent.parent; // Remove "Data/Browser" + } + + f.append("Docs"); + f.append("ChangeLog.txt"); + + let fs = Cc["@mozilla.org/network/file-input-stream;1"].createInstance( + Ci.nsIFileInputStream + ); + fs.init(f, -1, 0, 0); + let s = NetUtil.readInputStreamToString(fs, fs.available()); + fs.close(); + + // Truncate at the first empty line. + s = s.replace(/[\r\n][\r\n][\s\S]*$/m, ""); + + // Split into first line (version plus releaseDate) and + // remainder (releaseNotes). + // This first match() uses multiline mode with two capture groups: + // first line: (.*$) + // remaining lines: ([\s\S]+) + // [\s\S] matches all characters including end of line. This trick + // is needed because when using JavaScript regex in multiline mode, + // . does not match an end of line character. + let matchArray = s.match(/(.*$)\s*([\s\S]+)/m); + if (matchArray && matchArray.length == 3) { + info.releaseNotes = matchArray[2]; + let line1 = matchArray[1]; + // Extract the version and releaseDate. The first line looks like: + // Tor Browser 8.5 -- May 1 2019 + // The regex uses two capture groups: + // text that does not include a hyphen: (^[^-]*) + // remaining text: (.*$) + // In between we match optional whitespace, one or more hyphens, and + // optional whitespace by using: \s*-+\s* + matchArray = line1.match(/(^[^-]*)\s*-+\s*(.*$)/); + if (matchArray && matchArray.length == 3) { + info.version = matchArray[1]; + info.releaseDate = matchArray[2]; + } else { + info.version = line1; // Match failed: return entire line in version. + } + } else { + info.releaseNotes = s; // Only one line: use as releaseNotes. + } + } catch (e) {} + + return info; + } +} diff --git a/browser/actors/moz.build b/browser/actors/moz.build index 5a2c1796fb5d..d9c06c795a3d 100644 --- a/browser/actors/moz.build +++ b/browser/actors/moz.build @@ -95,3 +95,9 @@ FINAL_TARGET_FILES.actors += [ BROWSER_CHROME_MANIFESTS += [ "test/browser/browser.ini", ] + +if CONFIG["TOR_BROWSER_UPDATE"]: + FINAL_TARGET_FILES.actors += [ + "AboutTBUpdateChild.jsm", + "AboutTBUpdateParent.jsm", + ] diff --git a/browser/base/content/abouttbupdate/aboutTBUpdate.css b/browser/base/content/abouttbupdate/aboutTBUpdate.css new file mode 100644 index 000000000000..7c1a34b77f17 --- /dev/null +++ b/browser/base/content/abouttbupdate/aboutTBUpdate.css @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2019, The Tor Project, Inc. + * See LICENSE for licensing information. + * + * vim: set sw=2 sts=2 ts=8 et syntax=css: + */ + +:root { + --abouttor-text-color: white; + --abouttor-bg-toron-color: #420C5D; +} + +body { + font-family: Helvetica, Arial, sans-serif; + color: var(--abouttor-text-color); + background-color: var(--abouttor-bg-toron-color); + background-attachment: fixed; + background-size: 100% 100%; +} + +a { + color: var(--abouttor-text-color); +} + +.two-column-grid { + display: inline-grid; + grid-template-columns: auto auto; + grid-column-gap: 50px; + margin: 10px 0px 0px 50px; +} + +.two-column-grid div { + margin-top: 40px; + align-self: baseline; /* Align baseline of text across the row. */ +} + +.label-column { + font-size: 14px; + font-weight: 400; +} + +/* + * Use a reduced top margin to bring the row that contains the + * "visit our website" link closer to the row that precedes it. This + * looks better because the "visit our website" row does not have a + * label in the left column. + */ +div.more-info-row { + margin-top: 5px; + font-size: 14px; +} + +#version-content { + font-size: 50px; + font-weight: 300; +} + +body:not([havereleasedate]) .release-date-cell { + display: none; +} + +#releasedate-content { + font-size: 17px; +} + +#releasenotes-label { + align-self: start; /* Anchor "Release Notes" label at the top. */ +} + +#releasenotes-content { + font-family: monospace; + font-size: 15px; + white-space: pre; +} diff --git a/browser/base/content/abouttbupdate/aboutTBUpdate.js b/browser/base/content/abouttbupdate/aboutTBUpdate.js new file mode 100644 index 000000000000..ec070e2cb131 --- /dev/null +++ b/browser/base/content/abouttbupdate/aboutTBUpdate.js @@ -0,0 +1,27 @@ +// Copyright (c) 2020, The Tor Project, Inc. +// See LICENSE for licensing information. +// +// vim: set sw=2 sts=2 ts=8 et syntax=javascript: + +/* eslint-env mozilla/frame-script */ + +// aData may contain the following string properties: +// version +// releaseDate +// moreInfoURL +// releaseNotes +function onUpdate(aData) { + document.getElementById("version-content").textContent = aData.version; + if (aData.releaseDate) { + document.body.setAttribute("havereleasedate", "true"); + document.getElementById("releasedate-content").textContent = + aData.releaseDate; + } + if (aData.moreInfoURL) { + document.getElementById("infolink").setAttribute("href", aData.moreInfoURL); + } + document.getElementById("releasenotes-content").textContent = + aData.releaseNotes; +} + +RPMSendQuery("FetchUpdateData").then(onUpdate); diff --git a/browser/base/content/abouttbupdate/aboutTBUpdate.xhtml b/browser/base/content/abouttbupdate/aboutTBUpdate.xhtml new file mode 100644 index 000000000000..8489cfef5083 --- /dev/null +++ b/browser/base/content/abouttbupdate/aboutTBUpdate.xhtml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE html [ + <!ENTITY % htmlDTD + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "DTD/xhtml1-strict.dtd"> + %htmlDTD; + <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> + %globalDTD; + <!ENTITY % tbUpdateDTD SYSTEM "chrome://browser/locale/aboutTBUpdate.dtd"> + %tbUpdateDTD; +]> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" /> + <title>&aboutTBUpdate.changelogTitle;</title> + <link rel="stylesheet" type="text/css" + href="chrome://browser/content/abouttbupdate/aboutTBUpdate.css"/> + <script src="chrome://browser/content/abouttbupdate/aboutTBUpdate.js" + type="text/javascript"/> +</head> +<body dir="&locale.dir;"> +<div class="two-column-grid"> + <div class="label-column">&aboutTBUpdate.version;</div> + <div id="version-content"/> + + <div class="label-column release-date-cell">&aboutTBUpdate.releaseDate;</div> + <div id="releasedate-content" class="release-date-cell"/> + + <div class="more-info-row"/> + <div class="more-info-row">&aboutTBUpdate.linkPrefix;<a id="infolink">&aboutTBUpdate.linkLabel;</a>&aboutTBUpdate.linkSuffix;</div> + + <div id="releasenotes-label" + class="label-column">&aboutTBUpdate.releaseNotes;</div> + <div id="releasenotes-content"></div> +</div> +</body> +</html> diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 0a5ec63c4a63..1bdf9a2f35cc 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -658,6 +658,10 @@ var gInitialPages = [ "about:welcomeback", ];
+if (AppConstants.TOR_BROWSER_UPDATE) { + gInitialPages.push("about:tbupdate"); +} + function isInitialPage(url) { if (!(url instanceof Ci.nsIURI)) { try { diff --git a/browser/base/jar.mn b/browser/base/jar.mn index c57663d64408..5b603d0d5483 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn @@ -34,6 +34,11 @@ browser.jar: content/browser/aboutTabCrashed.css (content/aboutTabCrashed.css) content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js) content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml) +#ifdef TOR_BROWSER_UPDATE + content/browser/abouttbupdate/aboutTBUpdate.xhtml (content/abouttbupdate/aboutTBUpdate.xhtml) + content/browser/abouttbupdate/aboutTBUpdate.js (content/abouttbupdate/aboutTBUpdate.js) + content/browser/abouttbupdate/aboutTBUpdate.css (content/abouttbupdate/aboutTBUpdate.css) +#endif content/browser/browser.css (content/browser.css) content/browser/browser.js (content/browser.js) * content/browser/browser.xhtml (content/browser.xhtml) diff --git a/browser/components/BrowserContentHandler.jsm b/browser/components/BrowserContentHandler.jsm index 714a5fac8bf0..e2b06b4fe8a0 100644 --- a/browser/components/BrowserContentHandler.jsm +++ b/browser/components/BrowserContentHandler.jsm @@ -653,6 +653,23 @@ nsBrowserContentHandler.prototype = { } }
+ // Retrieve the home page early so we can compare it against about:tor + // to decide whether or not we need an override page (second tab) after + // an update was applied. + var startPage = ""; + try { + var choice = prefb.getIntPref("browser.startup.page"); + if (choice == 1 || choice == 3) { + startPage = HomePage.get(); + } + } catch (e) { + Cu.reportError(e); + } + + if (startPage == "about:blank") { + startPage = ""; + } + var override; var overridePage = ""; var additionalPage = ""; @@ -695,6 +712,16 @@ nsBrowserContentHandler.prototype = { // into account because that requires waiting for the session file // to be read. If a crash occurs after updating, before restarting, // we may open the startPage in addition to restoring the session. + // + // Tor Browser: Instead of opening the post-update "override page" + // directly, we ensure that about:tor will be opened in a special + // mode that notifies the user that their browser was updated. + // The about:tor page will provide a link to the override page + // where the user can learn more about the update, as well as a + // link to the Tor Browser changelog page (about:tbupdate). The + // override page URL comes from the openURL attribute within the + // updates.xml file or, if no showURL action is present, from the + // startup.homepage_override_url pref. willRestoreSession = SessionStartup.isAutomaticRestoreEnabled();
overridePage = Services.urlFormatter.formatURLPref( @@ -716,6 +743,20 @@ nsBrowserContentHandler.prototype = { "%OLD_TOR_BROWSER_VERSION%", old_tbversion ); +#ifdef TOR_BROWSER_UPDATE + if (overridePage) + { + prefb.setCharPref("torbrowser.post_update.url", overridePage); + prefb.setBoolPref("torbrowser.post_update.shouldNotify", true); + // If the user's homepage is about:tor, we will inform them + // about the update on that page; otherwise, we arrange to + // open about:tor in a secondary tab. + if (startPage === "about:tor") + overridePage = ""; + else + overridePage = "about:tor"; + } +#endif break; case OVERRIDE_NEW_BUILD_ID: if (UpdateManager.readyUpdate) { @@ -788,20 +829,6 @@ nsBrowserContentHandler.prototype = { } }
- var startPage = ""; - try { - var choice = prefb.getIntPref("browser.startup.page"); - if (choice == 1 || choice == 3) { - startPage = HomePage.get(); - } - } catch (e) { - Cu.reportError(e); - } - - if (startPage == "about:blank") { - startPage = ""; - } - let skipStartPage = override == OVERRIDE_NEW_PROFILE && prefb.getBoolPref("browser.startup.firstrunSkipsHomepage"); diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 0092d25948e7..fe46dec2c42d 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -794,6 +794,21 @@ let JSWINDOWACTORS = { }, };
+if (AppConstants.TOR_BROWSER_UPDATE) { + JSWINDOWACTORS.AboutTBUpdate = { + parent: { + moduleURI: "resource:///actors/AboutTBUpdateParent.jsm", + }, + child: { + moduleURI: "resource:///actors/AboutTBUpdateChild.jsm", + events: { + DOMWindowCreated: { capture: true }, + }, + }, + matches: ["about:tbupdate"], + }; +} + XPCOMUtils.defineLazyGetter( this, "WeaveService", diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index 0a495a223e3e..faf809728352 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -133,6 +133,13 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::HIDE_FROM_ABOUTABOUT}, {"restartrequired", "chrome://browser/content/aboutRestartRequired.xhtml", nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT}, +#ifdef TOR_BROWSER_UPDATE + {"tbupdate", "chrome://browser/content/abouttbupdate/aboutTBUpdate.xhtml", + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | + nsIAboutModule::HIDE_FROM_ABOUTABOUT | + nsIAboutModule::IS_SECURE_CHROME_UI}, +#endif {"torconnect", "chrome://browser/content/torconnect/aboutTorConnect.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf index 6095653409cd..a1eb66c9fc95 100644 --- a/browser/components/about/components.conf +++ b/browser/components/about/components.conf @@ -34,6 +34,9 @@ pages = [ 'welcomeback', ]
+if defined('TOR_BROWSER_UPDATE'): + pages.append('tbupdate') + Classes = [ { 'cid': '{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980}', diff --git a/browser/components/moz.build b/browser/components/moz.build index ab1dac40dfab..8033a5985ed0 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -93,11 +93,14 @@ EXTRA_COMPONENTS += [ ]
EXTRA_JS_MODULES += [ - "BrowserContentHandler.jsm", "BrowserGlue.jsm", "distribution.js", ]
+EXTRA_PP_JS_MODULES += [ + "BrowserContentHandler.jsm", +] + BROWSER_CHROME_MANIFESTS += [ "safebrowsing/content/test/browser.ini", "tests/browser/browser.ini", diff --git a/browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd b/browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd new file mode 100644 index 000000000000..2d1e59b40eaf --- /dev/null +++ b/browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd @@ -0,0 +1,8 @@ +<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Changelog"> +<!ENTITY aboutTBUpdate.updated "Tor Browser has been updated."> +<!ENTITY aboutTBUpdate.linkPrefix "For the most up-to-date information about this release, "> +<!ENTITY aboutTBUpdate.linkLabel "visit our website"> +<!ENTITY aboutTBUpdate.linkSuffix "."> +<!ENTITY aboutTBUpdate.version "Version"> +<!ENTITY aboutTBUpdate.releaseDate "Release Date"> +<!ENTITY aboutTBUpdate.releaseNotes "Release Notes"> diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn index 167a695a46a8..2d4c50b8e7d1 100644 --- a/browser/locales/jar.mn +++ b/browser/locales/jar.mn @@ -21,6 +21,9 @@ @AB_CD@.jar: % locale browser @AB_CD@ %locale/browser/ locale/browser/accounts.properties (%chrome/browser/accounts.properties) +#ifdef TOR_BROWSER_UPDATE + locale/browser/aboutTBUpdate.dtd (%chrome/browser/aboutTBUpdate.dtd) +#endif locale/browser/browser.properties (%chrome/browser/browser.properties) locale/browser/customizableui/customizableWidgets.properties (%chrome/browser/customizableui/customizableWidgets.properties) locale/browser/uiDensity.properties (%chrome/browser/uiDensity.properties)
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit aac96d235564268ec5049019518f854367502809 Author: Georg Koppen gk@torproject.org AuthorDate: Fri Jan 17 12:54:31 2020 +0000
Bug 32658: Create a new MAR signing key
It's time for our rotation again: Move the backup key in the front position and add a new backup key.
Bug 33803: Move our primary nightly MAR signing key to tor-browser
Bug 33803: Add a secondary nightly MAR signing key --- .../update/updater/nightly_aurora_level3_primary.der | Bin 1225 -> 1245 bytes .../updater/nightly_aurora_level3_secondary.der | Bin 1225 -> 1245 bytes toolkit/mozapps/update/updater/release_primary.der | Bin 1225 -> 1229 bytes toolkit/mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes 4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der b/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der index 44fd95dcff89..d579cf801e1a 100644 Binary files a/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der and b/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der differ diff --git a/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der b/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der index 90f8e6e82c63..7cbfa77d06e7 100644 Binary files a/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der and b/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der differ diff --git a/toolkit/mozapps/update/updater/release_primary.der b/toolkit/mozapps/update/updater/release_primary.der index 1d94f88ad73b..0103a171de88 100644 Binary files a/toolkit/mozapps/update/updater/release_primary.der and b/toolkit/mozapps/update/updater/release_primary.der differ diff --git a/toolkit/mozapps/update/updater/release_secondary.der b/toolkit/mozapps/update/updater/release_secondary.der index 474706c4b73c..fcee3944e9b7 100644 Binary files a/toolkit/mozapps/update/updater/release_secondary.der and b/toolkit/mozapps/update/updater/release_secondary.der differ
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 3054a9a8ee7679fac967d357d0b18419ea90b823 Author: Mike Perry mikeperry-git@torproject.org AuthorDate: Fri May 5 03:41:57 2017 -0700
Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
eBay and Amazon don't treat Tor users very well. Accounts often get locked and payments reversed.
Also: Bug 16322: Update DuckDuckGo search engine
We are replacing the clearnet URL with an onion service one (thanks to a patch by a cypherpunk) and are removing the duplicated DDG search engine. Duplicating DDG happend due to bug 1061736 where Mozilla included DDG itself into Firefox. Interestingly, this caused breaking the DDG search if JavaScript is disabled as the Mozilla engine, which gets loaded earlier, does not use the html version of the search page. Moreover, the Mozilla engine tracked where the users were searching from by adding a respective parameter to the search query. We got rid of that feature as well.
Also: This fixes bug 20809: the DuckDuckGo team has changed its server-side code in a way that lets users with JavaScript enabled use the default landing page while those without JavaScript available get redirected directly to the non-JS page. We adapt the search engine URLs accordingly.
Also fixes bug 29798 by making sure we only specify the Google search engine we actually ship an .xml file for.
Also regression tests.
squash! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
Bug 40494: Update Startpage search provider
squash! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
Bug 40438: Add Blockchair as a search engine
Bug 33342: Avoid disconnect search addon error after removal.
We removed the addon in #32767, but it was still being loaded from addonStartup.json.lz4 and throwing an error on startup because its resource: location is not available anymore. --- .../search/extensions/blockchair-onion/favicon.png | Bin 0 -> 3116 bytes .../extensions/blockchair-onion/manifest.json | 26 ++++++++++++ .../search/extensions/blockchair/favicon.png | Bin 0 -> 2898 bytes .../search/extensions/blockchair/manifest.json | 26 ++++++++++++ .../search/extensions/ddg-onion/favicon.ico | Bin 0 -> 973 bytes .../search/extensions/ddg-onion/manifest.json | 26 ++++++++++++ .../components/search/extensions/ddg/favicon.ico | Bin 5430 -> 0 bytes .../components/search/extensions/ddg/favicon.png | Bin 0 -> 1150 bytes .../components/search/extensions/ddg/manifest.json | 38 ++---------------- .../extensions/google/_locales/b-1-d/messages.json | 23 ----------- .../extensions/google/_locales/b-1-e/messages.json | 23 ----------- .../extensions/google/_locales/b-d/messages.json | 23 ----------- .../extensions/google/_locales/b-e/messages.json | 23 ----------- .../extensions/google/_locales/en/messages.json | 24 ----------- .../google/_locales/region-by/messages.json | 20 ---------- .../google/_locales/region-kz/messages.json | 20 ---------- .../google/_locales/region-ru/messages.json | 20 ---------- .../google/_locales/region-tr/messages.json | 20 ---------- .../search/extensions/google/manifest.json | 17 ++++---- .../search/extensions/startpage/favicon.png | Bin 0 -> 1150 bytes .../search/extensions/startpage/manifest.json | 26 ++++++++++++ .../search/extensions/twitter/favicon.ico | Bin 0 -> 1650 bytes .../search/extensions/twitter/manifest.json | 26 ++++++++++++ .../extensions/wikipedia/_locales/NN/messages.json | 20 ---------- .../extensions/wikipedia/_locales/NO/messages.json | 20 ---------- .../extensions/wikipedia/_locales/af/messages.json | 20 ---------- .../extensions/wikipedia/_locales/an/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ar/messages.json | 20 ---------- .../wikipedia/_locales/ast/messages.json | 20 ---------- .../extensions/wikipedia/_locales/az/messages.json | 20 ---------- .../wikipedia/_locales/be-tarask/messages.json | 20 ---------- .../extensions/wikipedia/_locales/be/messages.json | 20 ---------- .../extensions/wikipedia/_locales/bg/messages.json | 20 ---------- .../extensions/wikipedia/_locales/bn/messages.json | 20 ---------- .../extensions/wikipedia/_locales/br/messages.json | 20 ---------- .../extensions/wikipedia/_locales/bs/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ca/messages.json | 20 ---------- .../extensions/wikipedia/_locales/cy/messages.json | 20 ---------- .../extensions/wikipedia/_locales/cz/messages.json | 20 ---------- .../extensions/wikipedia/_locales/da/messages.json | 20 ---------- .../extensions/wikipedia/_locales/de/messages.json | 20 ---------- .../wikipedia/_locales/dsb/messages.json | 20 ---------- .../extensions/wikipedia/_locales/el/messages.json | 20 ---------- .../extensions/wikipedia/_locales/en/messages.json | 20 ---------- .../extensions/wikipedia/_locales/eo/messages.json | 20 ---------- .../extensions/wikipedia/_locales/es/messages.json | 20 ---------- .../extensions/wikipedia/_locales/et/messages.json | 20 ---------- .../extensions/wikipedia/_locales/eu/messages.json | 20 ---------- .../extensions/wikipedia/_locales/fa/messages.json | 20 ---------- .../extensions/wikipedia/_locales/fi/messages.json | 20 ---------- .../extensions/wikipedia/_locales/fr/messages.json | 20 ---------- .../wikipedia/_locales/fy-NL/messages.json | 20 ---------- .../wikipedia/_locales/ga-IE/messages.json | 20 ---------- .../extensions/wikipedia/_locales/gd/messages.json | 20 ---------- .../extensions/wikipedia/_locales/gl/messages.json | 20 ---------- .../extensions/wikipedia/_locales/gn/messages.json | 20 ---------- .../extensions/wikipedia/_locales/gu/messages.json | 20 ---------- .../extensions/wikipedia/_locales/he/messages.json | 20 ---------- .../extensions/wikipedia/_locales/hi/messages.json | 20 ---------- .../extensions/wikipedia/_locales/hr/messages.json | 20 ---------- .../wikipedia/_locales/hsb/messages.json | 20 ---------- .../extensions/wikipedia/_locales/hu/messages.json | 20 ---------- .../extensions/wikipedia/_locales/hy/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ia/messages.json | 20 ---------- .../extensions/wikipedia/_locales/id/messages.json | 20 ---------- .../extensions/wikipedia/_locales/is/messages.json | 20 ---------- .../extensions/wikipedia/_locales/it/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ja/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ka/messages.json | 20 ---------- .../wikipedia/_locales/kab/messages.json | 20 ---------- .../extensions/wikipedia/_locales/kk/messages.json | 20 ---------- .../extensions/wikipedia/_locales/km/messages.json | 20 ---------- .../extensions/wikipedia/_locales/kn/messages.json | 20 ---------- .../extensions/wikipedia/_locales/kr/messages.json | 20 ---------- .../wikipedia/_locales/lij/messages.json | 20 ---------- .../extensions/wikipedia/_locales/lo/messages.json | 20 ---------- .../extensions/wikipedia/_locales/lt/messages.json | 20 ---------- .../wikipedia/_locales/ltg/messages.json | 20 ---------- .../extensions/wikipedia/_locales/lv/messages.json | 20 ---------- .../extensions/wikipedia/_locales/mk/messages.json | 20 ---------- .../extensions/wikipedia/_locales/mr/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ms/messages.json | 20 ---------- .../extensions/wikipedia/_locales/my/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ne/messages.json | 20 ---------- .../extensions/wikipedia/_locales/nl/messages.json | 20 ---------- .../extensions/wikipedia/_locales/oc/messages.json | 20 ---------- .../extensions/wikipedia/_locales/pa/messages.json | 20 ---------- .../extensions/wikipedia/_locales/pl/messages.json | 20 ---------- .../extensions/wikipedia/_locales/pt/messages.json | 20 ---------- .../extensions/wikipedia/_locales/rm/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ro/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ru/messages.json | 20 ---------- .../extensions/wikipedia/_locales/si/messages.json | 20 ---------- .../extensions/wikipedia/_locales/sk/messages.json | 20 ---------- .../extensions/wikipedia/_locales/sl/messages.json | 20 ---------- .../extensions/wikipedia/_locales/sq/messages.json | 20 ---------- .../extensions/wikipedia/_locales/sr/messages.json | 20 ---------- .../wikipedia/_locales/sv-SE/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ta/messages.json | 20 ---------- .../extensions/wikipedia/_locales/te/messages.json | 20 ---------- .../extensions/wikipedia/_locales/th/messages.json | 20 ---------- .../extensions/wikipedia/_locales/tl/messages.json | 20 ---------- .../extensions/wikipedia/_locales/tr/messages.json | 20 ---------- .../extensions/wikipedia/_locales/uk/messages.json | 20 ---------- .../extensions/wikipedia/_locales/ur/messages.json | 20 ---------- .../extensions/wikipedia/_locales/uz/messages.json | 20 ---------- .../extensions/wikipedia/_locales/vi/messages.json | 20 ---------- .../extensions/wikipedia/_locales/wo/messages.json | 20 ---------- .../wikipedia/_locales/zh-CN/messages.json | 20 ---------- .../wikipedia/_locales/zh-TW/messages.json | 20 ---------- .../search/extensions/wikipedia/manifest.json | 15 ++++--- .../components/search/extensions/yahoo/favicon.ico | Bin 0 -> 5430 bytes .../search/extensions/yahoo/manifest.json | 28 +++++++++++++ .../search/extensions/youtube/favicon.ico | Bin 0 -> 1150 bytes .../search/extensions/youtube/manifest.json | 26 ++++++++++++ tbb-tests/browser_tor_omnibox.js | 20 ++++++++++ toolkit/components/search/SearchService.jsm | 44 ++++++++------------- .../mozapps/extensions/internal/XPIProvider.jsm | 6 +++ 118 files changed, 244 insertions(+), 2016 deletions(-)
diff --git a/browser/components/search/extensions/blockchair-onion/favicon.png b/browser/components/search/extensions/blockchair-onion/favicon.png new file mode 100644 index 000000000000..92d832ded172 Binary files /dev/null and b/browser/components/search/extensions/blockchair-onion/favicon.png differ diff --git a/browser/components/search/extensions/blockchair-onion/manifest.json b/browser/components/search/extensions/blockchair-onion/manifest.json new file mode 100644 index 000000000000..f21840e079a6 --- /dev/null +++ b/browser/components/search/extensions/blockchair-onion/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "BlockchairOnion", + "description": "Blockchair Onion", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "blockchair-onion@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.png" + }, + "web_accessible_resources": [ + "favicon.png" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "BlockchairOnion", + "search_url": "http://blkchairbknpn73cfjhevhla7rkp4ed5gg2knctvv7it4lioy22defid.onion/search", + "search_form": "http://blkchairbknpn73cfjhevhla7rkp4ed5gg2knctvv7it4lioy22defid.onion/search...", + "search_url_get_params": "q={searchTerms}" + } + } +} diff --git a/browser/components/search/extensions/blockchair/favicon.png b/browser/components/search/extensions/blockchair/favicon.png new file mode 100644 index 000000000000..f4869e87e008 Binary files /dev/null and b/browser/components/search/extensions/blockchair/favicon.png differ diff --git a/browser/components/search/extensions/blockchair/manifest.json b/browser/components/search/extensions/blockchair/manifest.json new file mode 100644 index 000000000000..0f16b9049cf2 --- /dev/null +++ b/browser/components/search/extensions/blockchair/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "Blockchair", + "description": "Blockchair", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "blockchair@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.png" + }, + "web_accessible_resources": [ + "favicon.png" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "Blockchair", + "search_url": "https://blockchair.com/search", + "search_form": "https://blockchair.com/search/?q=%7BsearchTerms%7D", + "search_url_get_params": "q={searchTerms}" + } + } +} diff --git a/browser/components/search/extensions/ddg-onion/favicon.ico b/browser/components/search/extensions/ddg-onion/favicon.ico new file mode 100644 index 000000000000..13c325f6585f Binary files /dev/null and b/browser/components/search/extensions/ddg-onion/favicon.ico differ diff --git a/browser/components/search/extensions/ddg-onion/manifest.json b/browser/components/search/extensions/ddg-onion/manifest.json new file mode 100644 index 000000000000..49f3c116106b --- /dev/null +++ b/browser/components/search/extensions/ddg-onion/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "DuckDuckGoOnion", + "description": "Duck Duck Go Onion", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "ddg-onion@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.ico" + }, + "web_accessible_resources": [ + "favicon.ico" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "DuckDuckGoOnion", + "search_url": "https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion", + "search_form": "https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=%7...", + "search_url_get_params": "q={searchTerms}" + } + } +} diff --git a/browser/components/search/extensions/ddg/favicon.ico b/browser/components/search/extensions/ddg/favicon.ico deleted file mode 100644 index 560000b03e2c..000000000000 Binary files a/browser/components/search/extensions/ddg/favicon.ico and /dev/null differ diff --git a/browser/components/search/extensions/ddg/favicon.png b/browser/components/search/extensions/ddg/favicon.png new file mode 100644 index 000000000000..c853b95b89ef Binary files /dev/null and b/browser/components/search/extensions/ddg/favicon.png differ diff --git a/browser/components/search/extensions/ddg/manifest.json b/browser/components/search/extensions/ddg/manifest.json index 782b860a679f..4a3b0ad20fe9 100644 --- a/browser/components/search/extensions/ddg/manifest.json +++ b/browser/components/search/extensions/ddg/manifest.json @@ -10,50 +10,18 @@ }, "hidden": true, "icons": { - "16": "favicon.ico" + "16": "favicon.png" }, "web_accessible_resources": [ - "favicon.ico" + "favicon.png" ], "chrome_settings_overrides": { "search_provider": { "keyword": ["@duckduckgo", "@ddg"], "name": "DuckDuckGo", - "search_url": "https://duckduckgo.com/", + "search_url": "https://duckduckgo.com", "search_form": "https://duckduckgo.com/?q=%7BsearchTerms%7D", "search_url_get_params": "q={searchTerms}", - "params": [ - { - "name": "t", - "condition": "purpose", - "purpose": "contextmenu", - "value": "ffcm" - }, - { - "name": "t", - "condition": "purpose", - "purpose": "keyword", - "value": "ffab" - }, - { - "name": "t", - "condition": "purpose", - "purpose": "searchbar", - "value": "ffsb" - }, - { - "name": "t", - "condition": "purpose", - "purpose": "homepage", - "value": "ffhp" - }, - { - "name": "t", - "condition": "purpose", - "purpose": "newtab", - "value": "ffnt" - } - ], "suggest_url": "https://ac.duckduckgo.com/ac/", "suggest_url_get_params": "q={searchTerms}&type=list" } diff --git a/browser/components/search/extensions/google/_locales/b-1-d/messages.json b/browser/components/search/extensions/google/_locales/b-1-d/messages.json deleted file mode 100644 index 1b9d05307d64..000000000000 --- a/browser/components/search/extensions/google/_locales/b-1-d/messages.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com/search" - }, - "searchForm": { - "message": "https://www.google.com/search?client=firefox-b-1-d&q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7..." - }, - "searchUrlGetParams": { - "message": "client=firefox-b-1-d&q={searchTerms}" - }, - "channelPref": { - "message": "google_channel_us" - } -} diff --git a/browser/components/search/extensions/google/_locales/b-1-e/messages.json b/browser/components/search/extensions/google/_locales/b-1-e/messages.json deleted file mode 100644 index b470cd844331..000000000000 --- a/browser/components/search/extensions/google/_locales/b-1-e/messages.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com/search" - }, - "searchForm": { - "message": "https://www.google.com/search?client=firefox-b-1-e&q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7..." - }, - "searchUrlGetParams": { - "message": "client=firefox-b-1-e&q={searchTerms}" - }, - "channelPref": { - "message": "google_channel_us" - } -} diff --git a/browser/components/search/extensions/google/_locales/b-d/messages.json b/browser/components/search/extensions/google/_locales/b-d/messages.json deleted file mode 100644 index a6423089d9f9..000000000000 --- a/browser/components/search/extensions/google/_locales/b-d/messages.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com/search" - }, - "searchForm": { - "message": "https://www.google.com/search?client=firefox-b-d&q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7..." - }, - "searchUrlGetParams": { - "message": "client=firefox-b-d&q={searchTerms}" - }, - "channelPref": { - "message": "google_channel_row" - } -} diff --git a/browser/components/search/extensions/google/_locales/b-e/messages.json b/browser/components/search/extensions/google/_locales/b-e/messages.json deleted file mode 100644 index 70939ee00074..000000000000 --- a/browser/components/search/extensions/google/_locales/b-e/messages.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com/search" - }, - "searchForm": { - "message": "https://www.google.com/search?client=firefox-b-e&q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7..." - }, - "searchUrlGetParams": { - "message": "client=firefox-b-e&q={searchTerms}" - }, - "channelPref": { - "message": "google_channel_row" - } -} diff --git a/browser/components/search/extensions/google/_locales/en/messages.json b/browser/components/search/extensions/google/_locales/en/messages.json deleted file mode 100644 index aeca0ef128b3..000000000000 --- a/browser/components/search/extensions/google/_locales/en/messages.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com/search" - }, - "searchForm": { - "message": "https://www.google.com/search?client=firefox-b-d&q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7..." - }, - "searchUrlGetParams": { - "message": "client=firefox-b-d&q={searchTerms}" - }, - "channelPref": { - "message": "google_channel_row" - } - -} diff --git a/browser/components/search/extensions/google/_locales/region-by/messages.json b/browser/components/search/extensions/google/_locales/region-by/messages.json deleted file mode 100644 index 60e5ed5eda07..000000000000 --- a/browser/components/search/extensions/google/_locales/region-by/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.by/search" - }, - "searchForm": { - "message": "https://www.google.by/search?q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.by/complete/search?client=firefox&q=%7BsearchTerms%7D" - }, - "searchUrlGetParams": { - "message": "q={searchTerms}" - } -} diff --git a/browser/components/search/extensions/google/_locales/region-kz/messages.json b/browser/components/search/extensions/google/_locales/region-kz/messages.json deleted file mode 100644 index 8e64096bc114..000000000000 --- a/browser/components/search/extensions/google/_locales/region-kz/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.kz/search" - }, - "searchForm": { - "message": "https://www.google.kz/search?q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.kz/complete/search?client=firefox&q=%7BsearchTerms%7D" - }, - "searchUrlGetParams": { - "message": "q={searchTerms}" - } -} diff --git a/browser/components/search/extensions/google/_locales/region-ru/messages.json b/browser/components/search/extensions/google/_locales/region-ru/messages.json deleted file mode 100644 index 8a78bb4e7f87..000000000000 --- a/browser/components/search/extensions/google/_locales/region-ru/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.ru/search" - }, - "searchForm": { - "message": "https://www.google.ru/search?q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.ru/complete/search?client=firefox&q=%7BsearchTerms%7D" - }, - "searchUrlGetParams": { - "message": "q={searchTerms}" - } -} diff --git a/browser/components/search/extensions/google/_locales/region-tr/messages.json b/browser/components/search/extensions/google/_locales/region-tr/messages.json deleted file mode 100644 index 8e373a4833b9..000000000000 --- a/browser/components/search/extensions/google/_locales/region-tr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Google" - }, - "extensionDescription": { - "message": "Google Search" - }, - "searchUrl": { - "message": "https://www.google.com.tr/search" - }, - "searchForm": { - "message": "https://www.google.com.tr/search?q=%7BsearchTerms%7D" - }, - "suggestUrl": { - "message": "https://www.google.com.tr/complete/search?client=firefox&q=%7BsearchTerm..." - }, - "searchUrlGetParams": { - "message": "q={searchTerms}" - } -} diff --git a/browser/components/search/extensions/google/manifest.json b/browser/components/search/extensions/google/manifest.json index 6cd4d2a42358..e84a269e4ea1 100644 --- a/browser/components/search/extensions/google/manifest.json +++ b/browser/components/search/extensions/google/manifest.json @@ -1,6 +1,6 @@ { - "name": "__MSG_extensionName__", - "description": "__MSG_extensionDescription__", + "name": "Google", + "description": "Google Search", "manifest_version": 2, "version": "1.2", "applications": { @@ -9,7 +9,6 @@ } }, "hidden": true, - "default_locale": "en", "icons": { "16": "favicon.ico" }, @@ -19,18 +18,18 @@ "chrome_settings_overrides": { "search_provider": { "keyword": "@google", - "name": "__MSG_extensionName__", - "search_url": "__MSG_searchUrl__", - "search_form": "__MSG_searchForm__", - "suggest_url": "__MSG_suggestUrl__", + "name": "Google", + "search_url": "https://www.google.com/search", + "search_form": "https://www.google.com/search?client=firefox-b-d&q=%7BsearchTerms%7D", + "suggest_url": "https://www.google.com/complete/search?client=firefox&q=%7BsearchTerms%7...", "params": [ { "name": "channel", "condition": "pref", - "pref": "__MSG_channelPref__" + "pref": "google_channel_row" } ], - "search_url_get_params": "__MSG_searchUrlGetParams__" + "search_url_get_params": "client=firefox-b-d&q={searchTerms}" } } } diff --git a/browser/components/search/extensions/startpage/favicon.png b/browser/components/search/extensions/startpage/favicon.png new file mode 100644 index 000000000000..44b94a986fd2 Binary files /dev/null and b/browser/components/search/extensions/startpage/favicon.png differ diff --git a/browser/components/search/extensions/startpage/manifest.json b/browser/components/search/extensions/startpage/manifest.json new file mode 100644 index 000000000000..497373ec17a2 --- /dev/null +++ b/browser/components/search/extensions/startpage/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "Startpage", + "description": "Startpage", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "startpage@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.png" + }, + "web_accessible_resources": [ + "favicon.png" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "Startpage", + "search_url": "https://www.startpage.com/sp/search", + "search_form": "https://www.startpage.com/sp/search/", + "search_url_post_params": "q={searchTerms}" + } + } +} diff --git a/browser/components/search/extensions/twitter/favicon.ico b/browser/components/search/extensions/twitter/favicon.ico new file mode 100644 index 000000000000..e5aaff437912 Binary files /dev/null and b/browser/components/search/extensions/twitter/favicon.ico differ diff --git a/browser/components/search/extensions/twitter/manifest.json b/browser/components/search/extensions/twitter/manifest.json new file mode 100644 index 000000000000..59714e0e1045 --- /dev/null +++ b/browser/components/search/extensions/twitter/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "Twitter", + "description": "Realtime Twitter Search", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "twitter@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.ico" + }, + "web_accessible_resources": [ + "favicon.ico" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "Twitter", + "search_url": "https://twitter.com/search", + "search_form": "https://twitter.com/search?q=%7BsearchTerms%7D&partner=Firefox&sourc...", + "search_url_get_params": "q={searchTerms}&partner=Firefox&source=desktop-search" + } + } +} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/NN/messages.json b/browser/components/search/extensions/wikipedia/_locales/NN/messages.json deleted file mode 100644 index e4ee66bc780d..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/NN/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (nn)" - }, - "extensionDescription": { - "message": "Wikipedia, det frie oppslagsverket" - }, - "searchUrl": { - "message": "https://nn.wikipedia.org/wiki/Spesial:S%C3%B8k" - }, - "searchForm": { - "message": "https://nn.wikipedia.org/wiki/Spesial:S%C3%B8k?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://nn.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/NO/messages.json b/browser/components/search/extensions/wikipedia/_locales/NO/messages.json deleted file mode 100644 index ec016ac7337e..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/NO/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (no)" - }, - "extensionDescription": { - "message": "Wikipedia, den frie encyklopedi" - }, - "searchUrl": { - "message": "https://no.wikipedia.org/wiki/Spesial:S%C3%B8k" - }, - "searchForm": { - "message": "https://no.wikipedia.org/wiki/Spesial:S%C3%B8k?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://no.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/af/messages.json b/browser/components/search/extensions/wikipedia/_locales/af/messages.json deleted file mode 100644 index 8cf9de8ac9b3..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/af/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (af)" - }, - "extensionDescription": { - "message": "Wikipedia, die vrye ensiklopedie" - }, - "searchUrl": { - "message": "https://af.wikipedia.org/wiki/Spesiaal:Soek" - }, - "searchForm": { - "message": "https://af.wikipedia.org/wiki/Spesiaal:Soek?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://af.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/an/messages.json b/browser/components/search/extensions/wikipedia/_locales/an/messages.json deleted file mode 100644 index e8cce665c96e..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/an/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Biquipedia (an)" - }, - "extensionDescription": { - "message": "A enciclopedia Libre" - }, - "searchUrl": { - "message": "https://an.wikipedia.org/wiki/Especial:Mirar" - }, - "searchForm": { - "message": "https://an.wikipedia.org/wiki/Especial:Mirar?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://an.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ar/messages.json b/browser/components/search/extensions/wikipedia/_locales/ar/messages.json deleted file mode 100644 index de90b2a2055e..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ar/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ويكيبيديا (ar)" - }, - "extensionDescription": { - "message": "ويكيبيديا (ar)" - }, - "searchUrl": { - "message": "https://ar.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B5:%D8%A8%D8%AD%D8%AB" - }, - "searchForm": { - "message": "https://ar.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B5:%D8%A8%D8%AD%D8%AB?search=%..." - }, - "suggestUrl": { - "message": "https://ar.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ast/messages.json b/browser/components/search/extensions/wikipedia/_locales/ast/messages.json deleted file mode 100644 index a127ba07f29b..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ast/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (ast)" - }, - "extensionDescription": { - "message": "La enciclopedia llibre" - }, - "searchUrl": { - "message": "https://ast.wikipedia.org/wiki/Especial:Gueta" - }, - "searchForm": { - "message": "https://ast.wikipedia.org/wiki/Especial:Gueta?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://ast.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/az/messages.json b/browser/components/search/extensions/wikipedia/_locales/az/messages.json deleted file mode 100644 index f551a717e6d3..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/az/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipediya (az)" - }, - "extensionDescription": { - "message": "Vikipediya, açıq ensiklopediya" - }, - "searchUrl": { - "message": "https://az.wikipedia.org/wiki/X%C3%BCsusi:Axtar" - }, - "searchForm": { - "message": "https://az.wikipedia.org/wiki/X%C3%BCsusi:Axtar?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://az.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json b/browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json deleted file mode 100644 index aecfecf2fb19..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Вікіпэдыя (be-tarask)" - }, - "extensionDescription": { - "message": "Вікіпэдыя, вольная энцыкляпэдыя" - }, - "searchUrl": { - "message": "https://be-tarask.wikipedia.org/wiki/%D0%A1%D0%BF%D1%8D%D1%86%D1%8B%D1%8F%D0..." - }, - "searchForm": { - "message": "https://be-tarask.wikipedia.org/wiki/%D0%A1%D0%BF%D1%8D%D1%86%D1%8B%D1%8F%D0..." - }, - "suggestUrl": { - "message": "https://be-tarask.wikipedia.org/w/api.php?action=opensearch&search=%7Bse..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/be/messages.json b/browser/components/search/extensions/wikipedia/_locales/be/messages.json deleted file mode 100644 index 6aa763451e67..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/be/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Вікіпедыя (be)" - }, - "extensionDescription": { - "message": "Вікіпедыя, свабодная энцыклапедыя" - }, - "searchUrl": { - "message": "https://be.wikipedia.org/wiki/%D0%90%D0%B4%D0%BC%D1%8B%D1%81%D0%BB%D0%BE%D0%..." - }, - "searchForm": { - "message": "https://be.wikipedia.org/wiki/%D0%90%D0%B4%D0%BC%D1%8B%D1%81%D0%BB%D0%BE%D0%..." - }, - "suggestUrl": { - "message": "https://be.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/bg/messages.json b/browser/components/search/extensions/wikipedia/_locales/bg/messages.json deleted file mode 100644 index 896a85d66b87..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/bg/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Уикипедия (bg)" - }, - "extensionDescription": { - "message": "Уикипедия, свободната енциклоподия" - }, - "searchUrl": { - "message": "https://bg.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D0%..." - }, - "searchForm": { - "message": "https://bg.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D0%..." - }, - "suggestUrl": { - "message": "https://bg.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/bn/messages.json b/browser/components/search/extensions/wikipedia/_locales/bn/messages.json deleted file mode 100644 index fe9887ed1938..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/bn/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "উইকিপিডিয়া (bn)" - }, - "extensionDescription": { - "message": "উইকিপিডিয়া, মুক্ত বিশ্বকোষ" - }, - "searchUrl": { - "message": "https://bn.wikipedia.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%B6%E0%A7%87%E0%A6%B7:..." - }, - "searchForm": { - "message": "https://bn.wikipedia.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%B6%E0%A7%87%E0%A6%B7:..." - }, - "suggestUrl": { - "message": "https://bn.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/br/messages.json b/browser/components/search/extensions/wikipedia/_locales/br/messages.json deleted file mode 100644 index 33869ce8e752..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/br/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (br)" - }, - "extensionDescription": { - "message": "Wikipedia, an holloueziadur digor" - }, - "searchUrl": { - "message": "https://br.wikipedia.org/wiki/Dibar:Klask" - }, - "searchForm": { - "message": "https://br.wikipedia.org/wiki/Dibar:Klask?search=%7BsearchTerms%7D&sourc..." - }, - "suggestUrl": { - "message": "https://br.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/bs/messages.json b/browser/components/search/extensions/wikipedia/_locales/bs/messages.json deleted file mode 100644 index 746150e3d8e8..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/bs/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (bs)" - }, - "extensionDescription": { - "message": "Slobodna enciklopedija" - }, - "searchUrl": { - "message": "https://bs.wikipedia.org/wiki/Posebno:Pretraga" - }, - "searchForm": { - "message": "https://bs.wikipedia.org/wiki/Posebno:Pretraga?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://bs.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ca/messages.json b/browser/components/search/extensions/wikipedia/_locales/ca/messages.json deleted file mode 100644 index 151ec1a71ba5..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ca/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Viquipèdia (ca)" - }, - "extensionDescription": { - "message": "L'enciclopèdia lliure" - }, - "searchUrl": { - "message": "https://ca.wikipedia.org/wiki/Especial:Cerca" - }, - "searchForm": { - "message": "https://ca.wikipedia.org/wiki/Especial:Cerca?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://ca.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/cy/messages.json b/browser/components/search/extensions/wikipedia/_locales/cy/messages.json deleted file mode 100644 index cfed7c73be34..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/cy/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wicipedia (cy)" - }, - "extensionDescription": { - "message": "Wicipedia, Y Gwyddioniadur Rhydd" - }, - "searchUrl": { - "message": "https://cy.wikipedia.org/wiki/Arbennig:Search" - }, - "searchForm": { - "message": "https://cy.wikipedia.org/wiki/Arbennig:Search?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://cy.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/cz/messages.json b/browser/components/search/extensions/wikipedia/_locales/cz/messages.json deleted file mode 100644 index 12f7eb22d711..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/cz/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedie (cs)" - }, - "extensionDescription": { - "message": "Wikipedia, svobodná encyclopedie" - }, - "searchUrl": { - "message": "https://cs.wikipedia.org/wiki/Speci%C3%A1ln%C3%AD:Hled%C3%A1n%C3%AD" - }, - "searchForm": { - "message": "https://cs.wikipedia.org/wiki/Speci%C3%A1ln%C3%AD:Hled%C3%A1n%C3%AD?search=%..." - }, - "suggestUrl": { - "message": "https://cs.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/da/messages.json b/browser/components/search/extensions/wikipedia/_locales/da/messages.json deleted file mode 100644 index 801d5a5183cc..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/da/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (da)" - }, - "extensionDescription": { - "message": "Wikipedia, den frie encyklopædi" - }, - "searchUrl": { - "message": "https://da.wikipedia.org/wiki/Speciel:S%C3%B8gning" - }, - "searchForm": { - "message": "https://da.wikipedia.org/wiki/Speciel:S%C3%B8gning?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://da.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/de/messages.json b/browser/components/search/extensions/wikipedia/_locales/de/messages.json deleted file mode 100644 index 0e6bbe8905ca..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/de/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (de)" - }, - "extensionDescription": { - "message": "Wikipedia, die freie Enzyklopädie" - }, - "searchUrl": { - "message": "https://de.wikipedia.org/wiki/Spezial:Suche" - }, - "searchForm": { - "message": "https://de.wikipedia.org/wiki/Spezial:Suche?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://de.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/dsb/messages.json b/browser/components/search/extensions/wikipedia/_locales/dsb/messages.json deleted file mode 100644 index ffca44b5f7fb..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/dsb/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedija (dsb)" - }, - "extensionDescription": { - "message": "Wikipedija, lichotna encyklopedija" - }, - "searchUrl": { - "message": "https://dsb.wikipedia.org/wiki/Specialne:Pyta%C5%9B" - }, - "searchForm": { - "message": "https://dsb.wikipedia.org/wiki/Specialne:Pyta%C5%9B?search=%7BsearchTerms%7D..." - }, - "suggestUrl": { - "message": "https://dsb.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/el/messages.json b/browser/components/search/extensions/wikipedia/_locales/el/messages.json deleted file mode 100644 index 95b48f3d9ca7..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/el/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (el)" - }, - "extensionDescription": { - "message": "Βικιπαίδεια, η ελεύθερη εγκυκλοπαίδεια" - }, - "searchUrl": { - "message": "https://el.wikipedia.org/wiki/%CE%95%CE%B9%CE%B4%CE%B9%CE%BA%CF%8C:%CE%91%CE..." - }, - "searchForm": { - "message": "https://el.wikipedia.org/wiki/%CE%95%CE%B9%CE%B4%CE%B9%CE%BA%CF%8C:%CE%91%CE..." - }, - "suggestUrl": { - "message": "https://el.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/en/messages.json b/browser/components/search/extensions/wikipedia/_locales/en/messages.json deleted file mode 100644 index 0de3c9a8071a..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/en/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (en)" - }, - "extensionDescription": { - "message": "Wikipedia, the Free Encyclopedia" - }, - "searchUrl": { - "message": "https://en.wikipedia.org/wiki/Special:Search" - }, - "searchForm": { - "message": "https://en.wikipedia.org/wiki/Special:Search?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://en.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/eo/messages.json b/browser/components/search/extensions/wikipedia/_locales/eo/messages.json deleted file mode 100644 index 10aa88dd11ba..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/eo/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipedio (eo)" - }, - "extensionDescription": { - "message": "Vikipedio, la libera enciklopedio" - }, - "searchUrl": { - "message": "https://eo.wikipedia.org/wiki/Speciala%C4%B5o:Ser%C4%89i" - }, - "searchForm": { - "message": "https://eo.wikipedia.org/wiki/Speciala%C4%B5o:Ser%C4%89i?search=%7BsearchTer..." - }, - "suggestUrl": { - "message": "https://eo.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/es/messages.json b/browser/components/search/extensions/wikipedia/_locales/es/messages.json deleted file mode 100644 index 09ec1f757657..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/es/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (es)" - }, - "extensionDescription": { - "message": "Wikipedia, la enciclopedia libre" - }, - "searchUrl": { - "message": "https://es.wikipedia.org/wiki/Especial:Buscar" - }, - "searchForm": { - "message": "https://es.wikipedia.org/wiki/Especial:Buscar?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://es.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/et/messages.json b/browser/components/search/extensions/wikipedia/_locales/et/messages.json deleted file mode 100644 index 91363fbb392b..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/et/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipeedia (et)" - }, - "extensionDescription": { - "message": "Vikipeedia, vaba entsüklopeedia" - }, - "searchUrl": { - "message": "https://et.wikipedia.org/wiki/Eri:Otsimine" - }, - "searchForm": { - "message": "https://et.wikipedia.org/wiki/Eri:Otsimine?search=%7BsearchTerms%7D&sour..." - }, - "suggestUrl": { - "message": "https://et.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/eu/messages.json b/browser/components/search/extensions/wikipedia/_locales/eu/messages.json deleted file mode 100644 index 1bd7027dec54..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/eu/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (eu)" - }, - "extensionDescription": { - "message": "Wikipedia, entziklopedia askea" - }, - "searchUrl": { - "message": "https://eu.wikipedia.org/wiki/Berezi:Bilatu" - }, - "searchForm": { - "message": "https://eu.wikipedia.org/wiki/Berezi:Bilatu?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://eu.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/fa/messages.json b/browser/components/search/extensions/wikipedia/_locales/fa/messages.json deleted file mode 100644 index 9fdc964a1e0b..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/fa/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ویکیپدیا (fa)" - }, - "extensionDescription": { - "message": "ویکیپدیا، دانشنامهٔ آزاد" - }, - "searchUrl": { - "message": "https://fa.wikipedia.org/wiki/%D9%88%DB%8C%DA%98%D9%87:%D8%AC%D8%B3%D8%AA%D8..." - }, - "searchForm": { - "message": "https://fa.wikipedia.org/wiki/%D9%88%DB%8C%DA%98%D9%87:%D8%AC%D8%B3%D8%AA%D8..." - }, - "suggestUrl": { - "message": "https://fa.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/fi/messages.json b/browser/components/search/extensions/wikipedia/_locales/fi/messages.json deleted file mode 100644 index 17a9cbe22c42..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/fi/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (fi)" - }, - "extensionDescription": { - "message": "Wikipedia (fi), vapaa tietosanakirja" - }, - "searchUrl": { - "message": "https://fi.wikipedia.org/wiki/Toiminnot:Haku" - }, - "searchForm": { - "message": "https://fi.wikipedia.org/wiki/Toiminnot:Haku?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://fi.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/fr/messages.json b/browser/components/search/extensions/wikipedia/_locales/fr/messages.json deleted file mode 100644 index 33dcbe9dc502..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/fr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipédia (fr)" - }, - "extensionDescription": { - "message": "Wikipédia, l'encyclopédie libre" - }, - "searchUrl": { - "message": "https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Recherche" - }, - "searchForm": { - "message": "https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Recherche?search=%7BsearchTerms%7..." - }, - "suggestUrl": { - "message": "https://fr.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json b/browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json deleted file mode 100644 index f350162fbbaf..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedy (fy)" - }, - "extensionDescription": { - "message": "De fergese ensyklopedy" - }, - "searchUrl": { - "message": "https://fy.wikipedia.org/wiki/Wiki:Sykje" - }, - "searchForm": { - "message": "https://fy.wikipedia.org/wiki/Wiki:Sykje?search=%7BsearchTerms%7D&source..." - }, - "suggestUrl": { - "message": "https://fy.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json b/browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json deleted file mode 100644 index 994ea723c6da..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vicipéid (ga)" - }, - "extensionDescription": { - "message": "Vicipéid, an Chiclipéid Shaor" - }, - "searchUrl": { - "message": "https://ga.wikipedia.org/wiki/Speisialta:Search" - }, - "searchForm": { - "message": "https://ga.wikipedia.org/wiki/Speisialta:Search?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://ga.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/gd/messages.json b/browser/components/search/extensions/wikipedia/_locales/gd/messages.json deleted file mode 100644 index f16f16fb4a02..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/gd/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Uicipeid (gd)" - }, - "extensionDescription": { - "message": "Wikipedia, An leabhar mòr-eòlais" - }, - "searchUrl": { - "message": "https://gd.wikipedia.org/wiki/S%C3%B2nraichte:Search" - }, - "searchForm": { - "message": "https://gd.wikipedia.org/wiki/S%C3%B2nraichte:Search?search=%7BsearchTerms%7..." - }, - "suggestUrl": { - "message": "https://gd.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/gl/messages.json b/browser/components/search/extensions/wikipedia/_locales/gl/messages.json deleted file mode 100644 index 88880bffc3d9..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/gl/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (gl)" - }, - "extensionDescription": { - "message": "Wikipedia, a enciclopedia libre" - }, - "searchUrl": { - "message": "https://gl.wikipedia.org/wiki/Especial:Procurar" - }, - "searchForm": { - "message": "https://gl.wikipedia.org/wiki/Especial:Procurar?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://gl.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/gn/messages.json b/browser/components/search/extensions/wikipedia/_locales/gn/messages.json deleted file mode 100644 index 5efc5ed74a95..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/gn/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipetã (gn)" - }, - "extensionDescription": { - "message": "Vikipetã, opaite tembikuaa hekosãsóva renda" - }, - "searchUrl": { - "message": "https://gn.wikipedia.org/wiki/Mba%27ech%C4%A9ch%C4%A9:Buscar" - }, - "searchForm": { - "message": "https://gn.wikipedia.org/wiki/Mba%27ech%C4%A9ch%C4%A9:Buscar?search=%7Bsearc..." - }, - "suggestUrl": { - "message": "https://gn.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/gu/messages.json b/browser/components/search/extensions/wikipedia/_locales/gu/messages.json deleted file mode 100644 index 3d2f68826fc5..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/gu/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "વિકિપીડિયા (gu)" - }, - "extensionDescription": { - "message": "વીકીપીડિયા, મુક્ત એનસાયક્લોપીડિયા" - }, - "searchUrl": { - "message": "https://gu.wikipedia.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%B6%E0%AB%87%E0%AA%B7:..." - }, - "searchForm": { - "message": "https://gu.wikipedia.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%B6%E0%AB%87%E0%AA%B7:..." - }, - "suggestUrl": { - "message": "https://gu.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/he/messages.json b/browser/components/search/extensions/wikipedia/_locales/he/messages.json deleted file mode 100644 index 1f8471e980f0..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/he/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ויקיפדיה" - }, - "extensionDescription": { - "message": "ויקיפדיה" - }, - "searchUrl": { - "message": "https://he.wikipedia.org/wiki/%D7%9E%D7%99%D7%95%D7%97%D7%93:%D7%97%D7%99%D7..." - }, - "searchForm": { - "message": "https://he.wikipedia.org/wiki/%D7%9E%D7%99%D7%95%D7%97%D7%93:%D7%97%D7%99%D7..." - }, - "suggestUrl": { - "message": "https://he.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/hi/messages.json b/browser/components/search/extensions/wikipedia/_locales/hi/messages.json deleted file mode 100644 index f3b7d14eafa0..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/hi/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "विकिपीडिया (hi)" - }, - "extensionDescription": { - "message": "विकिपीडिया (हिन्दी)" - }, - "searchUrl": { - "message": "https://hi.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "searchForm": { - "message": "https://hi.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "suggestUrl": { - "message": "https://hi.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/hr/messages.json b/browser/components/search/extensions/wikipedia/_locales/hr/messages.json deleted file mode 100644 index 18a6177efcca..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/hr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedija (hr)" - }, - "extensionDescription": { - "message": "Wikipedija, slobodna enciklopedija" - }, - "searchUrl": { - "message": "https://hr.wikipedia.org/wiki/Posebno:Tra%C5%BEi" - }, - "searchForm": { - "message": "https://hr.wikipedia.org/wiki/Posebno:Tra%C5%BEi?search=%7BsearchTerms%7D&am..." - }, - "suggestUrl": { - "message": "https://hr.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/hsb/messages.json b/browser/components/search/extensions/wikipedia/_locales/hsb/messages.json deleted file mode 100644 index d4e62836e6e9..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/hsb/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedija (hsb)" - }, - "extensionDescription": { - "message": "Wikipedija, swobodna encyklopedija" - }, - "searchUrl": { - "message": "https://hsb.wikipedia.org/wiki/Specialnje:Pyta%C4%87" - }, - "searchForm": { - "message": "https://hsb.wikipedia.org/wiki/Specialnje:Pyta%C4%87?search=%7BsearchTerms%7..." - }, - "suggestUrl": { - "message": "https://hsb.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/hu/messages.json b/browser/components/search/extensions/wikipedia/_locales/hu/messages.json deleted file mode 100644 index 68300c48a6f3..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/hu/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipédia (hu)" - }, - "extensionDescription": { - "message": "Wikipedia, a szabad enciklopédia" - }, - "searchUrl": { - "message": "https://hu.wikipedia.org/wiki/Speci%C3%A1lis:Keres%C3%A9s" - }, - "searchForm": { - "message": "https://hu.wikipedia.org/wiki/Speci%C3%A1lis:Keres%C3%A9s?search=%7BsearchTe..." - }, - "suggestUrl": { - "message": "https://hu.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/hy/messages.json b/browser/components/search/extensions/wikipedia/_locales/hy/messages.json deleted file mode 100644 index 56c2ae2c641b..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/hy/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (hy)" - }, - "extensionDescription": { - "message": "Վիքիփեդիա՝ ազատ հանրագիտարան" - }, - "searchUrl": { - "message": "https://hy.wikipedia.org/wiki/%D5%8D%D5%BA%D5%A1%D5%BD%D5%A1%D6%80%D5%AF%D5%..." - }, - "searchForm": { - "message": "https://hy.wikipedia.org/wiki/%D5%8D%D5%BA%D5%A1%D5%BD%D5%A1%D6%80%D5%AF%D5%..." - }, - "suggestUrl": { - "message": "https://hy.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ia/messages.json b/browser/components/search/extensions/wikipedia/_locales/ia/messages.json deleted file mode 100644 index 6d997ae8fc81..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ia/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (ia)" - }, - "extensionDescription": { - "message": "Wikipedia, le encyclopedia libere" - }, - "searchUrl": { - "message": "https://ia.wikipedia.org/wiki/Special:Recerca" - }, - "searchForm": { - "message": "https://ia.wikipedia.org/wiki/Special:Recerca?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://ia.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/id/messages.json b/browser/components/search/extensions/wikipedia/_locales/id/messages.json deleted file mode 100644 index 1d35e71b956d..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/id/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (id)" - }, - "extensionDescription": { - "message": "Wikipedia, ensiklopedia bebas" - }, - "searchUrl": { - "message": "https://id.wikipedia.org/wiki/Istimewa:Pencarian" - }, - "searchForm": { - "message": "https://id.wikipedia.org/wiki/Istimewa:Pencarian?search=%7BsearchTerms%7D&am..." - }, - "suggestUrl": { - "message": "https://id.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/is/messages.json b/browser/components/search/extensions/wikipedia/_locales/is/messages.json deleted file mode 100644 index f722d88187de..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/is/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (is)" - }, - "extensionDescription": { - "message": "Wikipedia, the free encyclopedia" - }, - "searchUrl": { - "message": "https://is.wikipedia.org/wiki/Kerfiss%C3%AD%C3%B0a:Leit" - }, - "searchForm": { - "message": "https://is.wikipedia.org/wiki/Kerfiss%C3%AD%C3%B0a:Leit?search=%7BsearchTerm..." - }, - "suggestUrl": { - "message": "https://is.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/it/messages.json b/browser/components/search/extensions/wikipedia/_locales/it/messages.json deleted file mode 100644 index 2ca645740f87..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/it/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (it)" - }, - "extensionDescription": { - "message": "Wikipedia, l'enciclopedia libera" - }, - "searchUrl": { - "message": "https://it.wikipedia.org/wiki/Speciale:Ricerca" - }, - "searchForm": { - "message": "https://it.wikipedia.org/wiki/Speciale:Ricerca?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://it.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ja/messages.json b/browser/components/search/extensions/wikipedia/_locales/ja/messages.json deleted file mode 100644 index 7215e68768f0..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ja/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (ja)" - }, - "extensionDescription": { - "message": "Wikipedia - フリー百科事典" - }, - "searchUrl": { - "message": "https://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2" - }, - "searchForm": { - "message": "https://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2?search=%..." - }, - "suggestUrl": { - "message": "https://ja.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ka/messages.json b/browser/components/search/extensions/wikipedia/_locales/ka/messages.json deleted file mode 100644 index c460a093e5e4..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ka/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ვიკიპედია (ka)" - }, - "extensionDescription": { - "message": "ვიკიპედია, თავისუფალი ენციკლოპედია" - }, - "searchUrl": { - "message": "https://ka.wikipedia.org/wiki/%E1%83%A1%E1%83%9E%E1%83%94%E1%83%AA%E1%83%98%..." - }, - "searchForm": { - "message": "https://ka.wikipedia.org/wiki/%E1%83%A1%E1%83%9E%E1%83%94%E1%83%AA%E1%83%98%..." - }, - "suggestUrl": { - "message": "https://ka.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/kab/messages.json b/browser/components/search/extensions/wikipedia/_locales/kab/messages.json deleted file mode 100644 index 3cf743b616fe..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/kab/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (kab)" - }, - "extensionDescription": { - "message": "Wikipedia, tasanayt tilellit" - }, - "searchUrl": { - "message": "https://kab.wikipedia.org/wiki/Uslig:Search" - }, - "searchForm": { - "message": "https://kab.wikipedia.org/wiki/Uslig:Search?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://kab.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/kk/messages.json b/browser/components/search/extensions/wikipedia/_locales/kk/messages.json deleted file mode 100644 index 0844cca0d7e1..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/kk/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Уикипедия (kk)" - }, - "extensionDescription": { - "message": "Уикипедия (kk)" - }, - "searchUrl": { - "message": "https://kk.wikipedia.org/wiki/%D0%90%D1%80%D0%BD%D0%B0%D0%B9%D1%8B:%D0%86%D0..." - }, - "searchForm": { - "message": "https://kk.wikipedia.org/wiki/%D0%90%D1%80%D0%BD%D0%B0%D0%B9%D1%8B:%D0%86%D0..." - }, - "suggestUrl": { - "message": "https://kk.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/km/messages.json b/browser/components/search/extensions/wikipedia/_locales/km/messages.json deleted file mode 100644 index 0f0a0880e188..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/km/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "វីគីភីឌា (km)" - }, - "extensionDescription": { - "message": "វីគីភីឌា សព្វវចនាធិប្បាយសេរី" - }, - "searchUrl": { - "message": "https://km.wikipedia.org/wiki/%E1%9E%96%E1%9E%B7%E1%9E%9F%E1%9F%81%E1%9E%9F:..." - }, - "searchForm": { - "message": "https://km.wikipedia.org/wiki/%E1%9E%96%E1%9E%B7%E1%9E%9F%E1%9F%81%E1%9E%9F:..." - }, - "suggestUrl": { - "message": "https://km.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/kn/messages.json b/browser/components/search/extensions/wikipedia/_locales/kn/messages.json deleted file mode 100644 index 379ef20085a3..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/kn/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (kn)" - }, - "extensionDescription": { - "message": "Wikipedia, the free encyclopedia" - }, - "searchUrl": { - "message": "https://kn.wikipedia.org/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:..." - }, - "searchForm": { - "message": "https://kn.wikipedia.org/wiki/%E0%B2%B5%E0%B2%BF%E0%B2%B6%E0%B3%87%E0%B2%B7:..." - }, - "suggestUrl": { - "message": "https://kn.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/kr/messages.json b/browser/components/search/extensions/wikipedia/_locales/kr/messages.json deleted file mode 100644 index 54296cac62bd..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/kr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "위키백과 (ko)" - }, - "extensionDescription": { - "message": "Wikipedia, the free encyclopedia" - }, - "searchUrl": { - "message": "https://ko.wikipedia.org/wiki/%ED%8A%B9%EC%88%98%EA%B8%B0%EB%8A%A5:%EC%B0%BE..." - }, - "searchForm": { - "message": "https://ko.wikipedia.org/wiki/%ED%8A%B9%EC%88%98%EA%B8%B0%EB%8A%A5:%EC%B0%BE..." - }, - "suggestUrl": { - "message": "https://ko.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/lij/messages.json b/browser/components/search/extensions/wikipedia/_locales/lij/messages.json deleted file mode 100644 index cb90db5e4099..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/lij/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (lij)" - }, - "extensionDescription": { - "message": "Wikipedia, l'enciclopedia libera" - }, - "searchUrl": { - "message": "https://lij.wikipedia.org/wiki/Spe%C3%A7iale:Ri%C3%A7erca" - }, - "searchForm": { - "message": "https://lij.wikipedia.org/wiki/Spe%C3%A7iale:Ri%C3%A7erca?search=%7BsearchTe..." - }, - "suggestUrl": { - "message": "https://lij.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/lo/messages.json b/browser/components/search/extensions/wikipedia/_locales/lo/messages.json deleted file mode 100644 index 712746ec6316..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/lo/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ວິກິພີເດຍ (lo)" - }, - "extensionDescription": { - "message": "ວິກິພີເດຍ, ສາລານຸກົມເສລີ" - }, - "searchUrl": { - "message": "https://lo.wikipedia.org/wiki/%E0%BA%9E%E0%BA%B4%E0%BB%80%E0%BA%AA%E0%BA%94:..." - }, - "searchForm": { - "message": "https://lo.wikipedia.org/wiki/%E0%BA%9E%E0%BA%B4%E0%BB%80%E0%BA%AA%E0%BA%94:..." - }, - "suggestUrl": { - "message": "https://lo.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/lt/messages.json b/browser/components/search/extensions/wikipedia/_locales/lt/messages.json deleted file mode 100644 index c061bcc5224c..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/lt/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (lt)" - }, - "extensionDescription": { - "message": "Vikipedija, laisvoji enciklopedija" - }, - "searchUrl": { - "message": "https://lt.wikipedia.org/wiki/Specialus:Paie%C5%A1ka" - }, - "searchForm": { - "message": "https://lt.wikipedia.org/wiki/Specialus:Paie%C5%A1ka?search=%7BsearchTerms%7..." - }, - "suggestUrl": { - "message": "https://lt.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ltg/messages.json b/browser/components/search/extensions/wikipedia/_locales/ltg/messages.json deleted file mode 100644 index 0e02810ef3bf..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ltg/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipedeja (ltg)" - }, - "extensionDescription": { - "message": "Vikipēdija, breivuo eņciklopedeja" - }, - "searchUrl": { - "message": "https://ltg.wikipedia.org/wiki/Sevi%C5%A1kuo:Search" - }, - "searchForm": { - "message": "https://ltg.wikipedia.org/wiki/Sevi%C5%A1kuo:Search?search=%7BsearchTerms%7D..." - }, - "suggestUrl": { - "message": "https://ltg.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTe..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/lv/messages.json b/browser/components/search/extensions/wikipedia/_locales/lv/messages.json deleted file mode 100644 index f73814b8574f..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/lv/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipēdija" - }, - "extensionDescription": { - "message": "Vikipēdija, brīvā enciklopēdija" - }, - "searchUrl": { - "message": "https://lv.wikipedia.org/wiki/Special:Search" - }, - "searchForm": { - "message": "https://lv.wikipedia.org/wiki/Special:Search?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://lv.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/mk/messages.json b/browser/components/search/extensions/wikipedia/_locales/mk/messages.json deleted file mode 100644 index de7e06e1ac4a..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/mk/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Википедија (mk)" - }, - "extensionDescription": { - "message": "Википедија, слободната енциклопедија" - }, - "searchUrl": { - "message": "https://mk.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%98%D0%B0%D0%..." - }, - "searchForm": { - "message": "https://mk.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%98%D0%B0%D0%..." - }, - "suggestUrl": { - "message": "https://mk.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/mr/messages.json b/browser/components/search/extensions/wikipedia/_locales/mr/messages.json deleted file mode 100644 index bd46dd83700c..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/mr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "विकिपीडिया (mr)" - }, - "extensionDescription": { - "message": "विकिपीडिया, मोफत माहितीकोष" - }, - "searchUrl": { - "message": "https://mr.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "searchForm": { - "message": "https://mr.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "suggestUrl": { - "message": "https://mr.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ms/messages.json b/browser/components/search/extensions/wikipedia/_locales/ms/messages.json deleted file mode 100644 index c817e82c7821..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ms/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (ms)" - }, - "extensionDescription": { - "message": "Wikipedia, ensiklopedia bebas" - }, - "searchUrl": { - "message": "https://ms.wikipedia.org/wiki/Khas:Gelintar" - }, - "searchForm": { - "message": "https://ms.wikipedia.org/wiki/Khas:Gelintar?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://ms.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/my/messages.json b/browser/components/search/extensions/wikipedia/_locales/my/messages.json deleted file mode 100644 index 62342d1b90ae..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/my/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (my)" - }, - "extensionDescription": { - "message": "အခမဲ့လွတ်လပ်စွယ်စုံကျမ်း" - }, - "searchUrl": { - "message": "https://my.wikipedia.org/wiki/Special:Search" - }, - "searchForm": { - "message": "https://my.wikipedia.org/wiki/Special:Search?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://my.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ne/messages.json b/browser/components/search/extensions/wikipedia/_locales/ne/messages.json deleted file mode 100644 index eb22344341e4..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ne/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "विकिपीडिया (ne)" - }, - "extensionDescription": { - "message": "विकिपिडिया एक स्वतन्त्र विश्वकोष" - }, - "searchUrl": { - "message": "https://ne.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "searchForm": { - "message": "https://ne.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%B6%E0%A5%87%E0%A4%B7:..." - }, - "suggestUrl": { - "message": "https://ne.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/nl/messages.json b/browser/components/search/extensions/wikipedia/_locales/nl/messages.json deleted file mode 100644 index c2a810c2ae30..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/nl/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (nl)" - }, - "extensionDescription": { - "message": "De vrije encyclopedie" - }, - "searchUrl": { - "message": "https://nl.wikipedia.org/wiki/Speciaal:Zoeken" - }, - "searchForm": { - "message": "https://nl.wikipedia.org/wiki/Speciaal:Zoeken?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://nl.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/oc/messages.json b/browser/components/search/extensions/wikipedia/_locales/oc/messages.json deleted file mode 100644 index 3cadc3d68f07..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/oc/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipèdia (oc)" - }, - "extensionDescription": { - "message": "Wikipèdia, l'enciclopèdia liura" - }, - "searchUrl": { - "message": "https://oc.wikipedia.org/wiki/Especial:Rec%C3%A8rca" - }, - "searchForm": { - "message": "https://oc.wikipedia.org/wiki/Especial:Rec%C3%A8rca?search=%7BsearchTerms%7D..." - }, - "suggestUrl": { - "message": "https://oc.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/pa/messages.json b/browser/components/search/extensions/wikipedia/_locales/pa/messages.json deleted file mode 100644 index dff38c2146fd..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/pa/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (pa)" - }, - "extensionDescription": { - "message": "ਵਿਕਿਪੀਡਿਆ, ਮੁਫ਼ਤ/ਮੁਕਤ ਸ਼ਬਦਕੋਸ਼" - }, - "searchUrl": { - "message": "https://pa.wikipedia.org/wiki/%E0%A8%96%E0%A8%BC%E0%A8%BE%E0%A8%B8:%E0%A8%96..." - }, - "searchForm": { - "message": "https://pa.wikipedia.org/wiki/%E0%A8%96%E0%A8%BC%E0%A8%BE%E0%A8%B8:%E0%A8%96..." - }, - "suggestUrl": { - "message": "https://pa.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/pl/messages.json b/browser/components/search/extensions/wikipedia/_locales/pl/messages.json deleted file mode 100644 index 315aa0d9cbe1..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/pl/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (pl)" - }, - "extensionDescription": { - "message": "Wikipedia, wolna encyklopedia" - }, - "searchUrl": { - "message": "https://pl.wikipedia.org/wiki/Specjalna:Szukaj" - }, - "searchForm": { - "message": "https://pl.wikipedia.org/wiki/Specjalna:Szukaj?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://pl.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/pt/messages.json b/browser/components/search/extensions/wikipedia/_locales/pt/messages.json deleted file mode 100644 index 4beaa97acc88..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/pt/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (pt)" - }, - "extensionDescription": { - "message": "Wikipédia, a enciclopédia livre" - }, - "searchUrl": { - "message": "https://pt.wikipedia.org/wiki/Especial:Pesquisar" - }, - "searchForm": { - "message": "https://pt.wikipedia.org/wiki/Especial:Pesquisar?search=%7BsearchTerms%7D&am..." - }, - "suggestUrl": { - "message": "https://pt.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/rm/messages.json b/browser/components/search/extensions/wikipedia/_locales/rm/messages.json deleted file mode 100644 index 8258d5e43451..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/rm/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (rm)" - }, - "extensionDescription": { - "message": "Vichipedia, l'enciclopedia libra" - }, - "searchUrl": { - "message": "https://rm.wikipedia.org/wiki/Spezial:Search" - }, - "searchForm": { - "message": "https://rm.wikipedia.org/wiki/Spezial:Search?search=%7BsearchTerms%7D&so..." - }, - "suggestUrl": { - "message": "https://rm.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ro/messages.json b/browser/components/search/extensions/wikipedia/_locales/ro/messages.json deleted file mode 100644 index 48865fd547e4..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ro/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (ro)" - }, - "extensionDescription": { - "message": "Wikipedia, enciclopedia liberă" - }, - "searchUrl": { - "message": "https://ro.wikipedia.org/wiki/Special:C%C4%83utare" - }, - "searchForm": { - "message": "https://ro.wikipedia.org/wiki/Special:C%C4%83utare?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://ro.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ru/messages.json b/browser/components/search/extensions/wikipedia/_locales/ru/messages.json deleted file mode 100644 index 569467691d7c..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ru/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Википедия (ru)" - }, - "extensionDescription": { - "message": "Википедия, свободная энциклопедия" - }, - "searchUrl": { - "message": "https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%..." - }, - "searchForm": { - "message": "https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%..." - }, - "suggestUrl": { - "message": "https://ru.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/si/messages.json b/browser/components/search/extensions/wikipedia/_locales/si/messages.json deleted file mode 100644 index 0406ae728d71..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/si/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (si)" - }, - "extensionDescription": { - "message": "Wikipedia, the free encyclopedia" - }, - "searchUrl": { - "message": "https://si.wikipedia.org/wiki/%E0%B7%80%E0%B7%92%E0%B7%81%E0%B7%9A%E0%B7%82:..." - }, - "searchForm": { - "message": "https://si.wikipedia.org/wiki/%E0%B7%80%E0%B7%92%E0%B7%81%E0%B7%9A%E0%B7%82:..." - }, - "suggestUrl": { - "message": "https://si.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/sk/messages.json b/browser/components/search/extensions/wikipedia/_locales/sk/messages.json deleted file mode 100644 index 5c2f75f8b031..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/sk/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipédia (sk)" - }, - "extensionDescription": { - "message": "Wikipédia, slobodná a otvorená encyklopédia" - }, - "searchUrl": { - "message": "https://sk.wikipedia.org/wiki/%C5%A0peci%C3%A1lne:H%C4%BEadanie" - }, - "searchForm": { - "message": "https://sk.wikipedia.org/wiki/%C5%A0peci%C3%A1lne:H%C4%BEadanie?search=%7Bse..." - }, - "suggestUrl": { - "message": "https://sk.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/sl/messages.json b/browser/components/search/extensions/wikipedia/_locales/sl/messages.json deleted file mode 100644 index 7385a2203474..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/sl/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedija (sl)" - }, - "extensionDescription": { - "message": "Wikipedija, prosta enciklopedija" - }, - "searchUrl": { - "message": "https://sl.wikipedia.org/wiki/Posebno:Iskanje" - }, - "searchForm": { - "message": "https://sl.wikipedia.org/wiki/Posebno:Iskanje?search=%7BsearchTerms%7D&s..." - }, - "suggestUrl": { - "message": "https://sl.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/sq/messages.json b/browser/components/search/extensions/wikipedia/_locales/sq/messages.json deleted file mode 100644 index 68361d8ab294..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/sq/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (sq)" - }, - "extensionDescription": { - "message": "Wikipedia, enciklopedia e lirë" - }, - "searchUrl": { - "message": "https://sq.wikipedia.org/wiki/Speciale:K%C3%ABrkim" - }, - "searchForm": { - "message": "https://sq.wikipedia.org/wiki/Speciale:K%C3%ABrkim?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://sq.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/sr/messages.json b/browser/components/search/extensions/wikipedia/_locales/sr/messages.json deleted file mode 100644 index 50ebc0a197a1..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/sr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Википедија (sr)" - }, - "extensionDescription": { - "message": "Претрага Википедије на српском језику" - }, - "searchUrl": { - "message": "https://sr.wikipedia.org/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0..." - }, - "searchForm": { - "message": "https://sr.wikipedia.org/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0..." - }, - "suggestUrl": { - "message": "https://sr.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json b/browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json deleted file mode 100644 index 1edc3db80d98..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (sv)" - }, - "extensionDescription": { - "message": "Wikipedia, den fria encyklopedin" - }, - "searchUrl": { - "message": "https://sv.wikipedia.org/wiki/Special:S%C3%B6k" - }, - "searchForm": { - "message": "https://sv.wikipedia.org/wiki/Special:S%C3%B6k?search=%7BsearchTerms%7D&..." - }, - "suggestUrl": { - "message": "https://sv.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ta/messages.json b/browser/components/search/extensions/wikipedia/_locales/ta/messages.json deleted file mode 100644 index 54397603b028..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ta/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "விக்கிப்பீடியா (ta)" - }, - "extensionDescription": { - "message": "விக்கிப்பீடியா (ta)" - }, - "searchUrl": { - "message": "https://ta.wikipedia.org/wiki/%E0%AE%9A%E0%AE%BF%E0%AE%B1%E0%AE%AA%E0%AF%8D%..." - }, - "searchForm": { - "message": "https://ta.wikipedia.org/wiki/%E0%AE%9A%E0%AE%BF%E0%AE%B1%E0%AE%AA%E0%AF%8D%..." - }, - "suggestUrl": { - "message": "https://ta.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/te/messages.json b/browser/components/search/extensions/wikipedia/_locales/te/messages.json deleted file mode 100644 index c474be12a76f..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/te/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "వికీపీడియా (te)" - }, - "extensionDescription": { - "message": "వికీపీడియా (te)" - }, - "searchUrl": { - "message": "https://te.wikipedia.org/wiki/%E0%B0%AA%E0%B1%8D%E0%B0%B0%E0%B0%A4%E0%B1%8D%..." - }, - "searchForm": { - "message": "https://te.wikipedia.org/wiki/%E0%B0%AA%E0%B1%8D%E0%B0%B0%E0%B0%A4%E0%B1%8D%..." - }, - "suggestUrl": { - "message": "https://te.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/th/messages.json b/browser/components/search/extensions/wikipedia/_locales/th/messages.json deleted file mode 100644 index 3d6aeb07ca2c..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/th/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "วิกิพีเดีย" - }, - "extensionDescription": { - "message": "วิกิพีเดีย สารานุกรมเสรี" - }, - "searchUrl": { - "message": "https://th.wikipedia.org/wiki/%E0%B8%9E%E0%B8%B4%E0%B9%80%E0%B8%A8%E0%B8%A9:..." - }, - "searchForm": { - "message": "https://th.wikipedia.org/wiki/%E0%B8%9E%E0%B8%B4%E0%B9%80%E0%B8%A8%E0%B8%A9:..." - }, - "suggestUrl": { - "message": "https://th.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/tl/messages.json b/browser/components/search/extensions/wikipedia/_locales/tl/messages.json deleted file mode 100644 index d55b03131f97..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/tl/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (tl)" - }, - "extensionDescription": { - "message": "Wikipedia, ang malayang ensiklopedya" - }, - "searchUrl": { - "message": "https://tl.wikipedia.org/wiki/Natatangi:Maghanap" - }, - "searchForm": { - "message": "https://tl.wikipedia.org/wiki/Natatangi:Maghanap?search=%7BsearchTerms%7D&am..." - }, - "suggestUrl": { - "message": "https://tl.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/tr/messages.json b/browser/components/search/extensions/wikipedia/_locales/tr/messages.json deleted file mode 100644 index 878b28ab68b2..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/tr/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (tr)" - }, - "extensionDescription": { - "message": "Vikipedi, özgür ansiklopedi" - }, - "searchUrl": { - "message": "https://tr.wikipedia.org/wiki/%C3%96zel:Ara" - }, - "searchForm": { - "message": "https://tr.wikipedia.org/wiki/%C3%96zel:Ara?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://tr.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/uk/messages.json b/browser/components/search/extensions/wikipedia/_locales/uk/messages.json deleted file mode 100644 index 2749b86304bf..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/uk/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Вікіпедія (uk)" - }, - "extensionDescription": { - "message": "Вікіпедія, вільна енциклопедія" - }, - "searchUrl": { - "message": "https://uk.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D1%96%D0%B0%D0%BB%D1%..." - }, - "searchForm": { - "message": "https://uk.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D1%96%D0%B0%D0%BB%D1%..." - }, - "suggestUrl": { - "message": "https://uk.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/ur/messages.json b/browser/components/search/extensions/wikipedia/_locales/ur/messages.json deleted file mode 100644 index dcc87e0c853c..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/ur/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "ویکیپیڈیا (ur)" - }, - "extensionDescription": { - "message": "ویکیپیڈیا آزاد دائرۃ المعارف" - }, - "searchUrl": { - "message": "https://ur.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B5:%D8%AA%D9%84%D8%A7%D8%B4" - }, - "searchForm": { - "message": "https://ur.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B5:%D8%AA%D9%84%D8%A7%D8%B4?se..." - }, - "suggestUrl": { - "message": "https://ur.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/uz/messages.json b/browser/components/search/extensions/wikipedia/_locales/uz/messages.json deleted file mode 100644 index 89a8f2a89bca..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/uz/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Vikipediya (uz)" - }, - "extensionDescription": { - "message": "Vikipediya, ochiq ensiklopediya" - }, - "searchUrl": { - "message": "https://uz.wikipedia.org/wiki/Maxsus:Search" - }, - "searchForm": { - "message": "https://uz.wikipedia.org/wiki/Maxsus:Search?search=%7BsearchTerms%7D&sou..." - }, - "suggestUrl": { - "message": "https://uz.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/vi/messages.json b/browser/components/search/extensions/wikipedia/_locales/vi/messages.json deleted file mode 100644 index c0844e4feb14..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/vi/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (vi)" - }, - "extensionDescription": { - "message": "Wikipedia, bách khoa toàn thư mở" - }, - "searchUrl": { - "message": "https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:T%C3%ACm_ki%E1%B..." - }, - "searchForm": { - "message": "https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:T%C3%ACm_ki%E1%B..." - }, - "suggestUrl": { - "message": "https://vi.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/wo/messages.json b/browser/components/search/extensions/wikipedia/_locales/wo/messages.json deleted file mode 100644 index 7efde3b1d0f4..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/wo/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (wo)" - }, - "extensionDescription": { - "message": "Wikipedia, Jimbulang bu Ubbeeku bi" - }, - "searchUrl": { - "message": "https://wo.wikipedia.org/wiki/Jagleel:Ceet" - }, - "searchForm": { - "message": "https://wo.wikipedia.org/wiki/Jagleel:Ceet?search=%7BsearchTerms%7D&sour..." - }, - "suggestUrl": { - "message": "https://wo.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json b/browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json deleted file mode 100644 index 29047565a243..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "维基百科" - }, - "extensionDescription": { - "message": "维基百科,自由的百科全书" - }, - "searchUrl": { - "message": "https://zh.wikipedia.org/wiki/Special:%E6%90%9C%E7%B4%A2" - }, - "searchForm": { - "message": "https://zh.wikipedia.org/wiki/Special:%E6%90%9C%E7%B4%A2?search=%7BsearchTer..." - }, - "suggestUrl": { - "message": "https://zh.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json b/browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json deleted file mode 100644 index a0e8d880ea26..000000000000 --- a/browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extensionName": { - "message": "Wikipedia (zh)" - }, - "extensionDescription": { - "message": "維基百科,自由的百科全書" - }, - "searchUrl": { - "message": "https://zh.wikipedia.org/wiki/Special:%E6%90%9C%E7%B4%A2" - }, - "searchForm": { - "message": "https://zh.wikipedia.org/wiki/Special:%E6%90%9C%E7%B4%A2?search=%7BsearchTer..." - }, - "suggestUrl": { - "message": "https://zh.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer..." - }, - "searchUrlGetParams": { - "message": "search={searchTerms}&sourceid=Mozilla-search&variant=zh-tw" - } -} \ No newline at end of file diff --git a/browser/components/search/extensions/wikipedia/manifest.json b/browser/components/search/extensions/wikipedia/manifest.json index cd95d3aa9e1c..0af3b2a1c211 100644 --- a/browser/components/search/extensions/wikipedia/manifest.json +++ b/browser/components/search/extensions/wikipedia/manifest.json @@ -1,6 +1,6 @@ { - "name": "__MSG_extensionName__", - "description": "__MSG_extensionDescription__", + "name": "Wikipedia (en)", + "description": "Wikipedia, the Free Encyclopedia", "manifest_version": 2, "version": "1.1", "applications": { @@ -9,7 +9,6 @@ } }, "hidden": true, - "default_locale": "en", "icons": { "16": "favicon.ico" }, @@ -19,11 +18,11 @@ "chrome_settings_overrides": { "search_provider": { "keyword": "@wikipedia", - "name": "__MSG_extensionName__", - "search_url": "__MSG_searchUrl__", - "search_form": "__MSG_searchForm__", - "suggest_url": "__MSG_suggestUrl__", - "search_url_get_params": "__MSG_searchUrlGetParams__" + "name": "Wikipedia (en)", + "search_url": "https://en.wikipedia.org/wiki/Special:Search", + "search_form": "https://en.wikipedia.org/wiki/Special:Search?search=%7BsearchTerms%7D&so...", + "suggest_url": "https://en.wikipedia.org/w/api.php?action=opensearch&search=%7BsearchTer...", + "search_url_get_params": "search={searchTerms}&sourceid=Mozilla-search" } } } diff --git a/browser/components/search/extensions/yahoo/favicon.ico b/browser/components/search/extensions/yahoo/favicon.ico new file mode 100644 index 000000000000..9bd1d9f7c008 Binary files /dev/null and b/browser/components/search/extensions/yahoo/favicon.ico differ diff --git a/browser/components/search/extensions/yahoo/manifest.json b/browser/components/search/extensions/yahoo/manifest.json new file mode 100644 index 000000000000..e1f04a373c2e --- /dev/null +++ b/browser/components/search/extensions/yahoo/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "Yahoo", + "description": "Yahoo Search", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "yahoo@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.ico" + }, + "web_accessible_resources": [ + "favicon.ico" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "Yahoo", + "search_url": "https://search.yahoo.com/yhs/search", + "search_form": "https://search.yahoo.com/yhs/search?p=%7BsearchTerms%7D&ei=UTF-8&hsp...", + "search_url_get_params": "p={searchTerms}&ei=UTF-8&hspart=mozilla", + "suggest_url": "https://search.yahoo.com/sugg/ff", + "suggest_url_get_params": "output=fxjson&appid=ffd&command={searchTerms}" + } + } +} diff --git a/browser/components/search/extensions/youtube/favicon.ico b/browser/components/search/extensions/youtube/favicon.ico new file mode 100644 index 000000000000..977887dbbb84 Binary files /dev/null and b/browser/components/search/extensions/youtube/favicon.ico differ diff --git a/browser/components/search/extensions/youtube/manifest.json b/browser/components/search/extensions/youtube/manifest.json new file mode 100644 index 000000000000..6fbf8745bac2 --- /dev/null +++ b/browser/components/search/extensions/youtube/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "YouTube", + "description": "YouTube - Videos", + "manifest_version": 2, + "version": "1.0", + "applications": { + "gecko": { + "id": "youtube@search.mozilla.org" + } + }, + "hidden": true, + "icons": { + "16": "favicon.ico" + }, + "web_accessible_resources": [ + "favicon.ico" + ], + "chrome_settings_overrides": { + "search_provider": { + "name": "YouTube", + "search_url": "https://www.youtube.com/results?search_query=%7BsearchTerms%7D&search=Se...", + "search_form": "https://www.youtube.com/index", + "suggest_url": "https://suggestqueries.google.com/complete/search?output=firefox&ds=yt&a..." + } + } +} \ No newline at end of file diff --git a/tbb-tests/browser_tor_omnibox.js b/tbb-tests/browser_tor_omnibox.js new file mode 100644 index 000000000000..3bb90f51a305 --- /dev/null +++ b/tbb-tests/browser_tor_omnibox.js @@ -0,0 +1,20 @@ +// # Test Tor Omnibox +// Check what search engines are installed in the search box. + +add_task(async function() { + // Grab engine IDs. + let browserSearchService = Components.classes["@mozilla.org/browser/search-service;1"] + .getService(Components.interfaces.nsISearchService), + engineIDs = (await browserSearchService.getEngines()).map(e => e.identifier); + + // Check that we have the correct engines installed, in the right order. + is(engineIDs[0], "ddg", "Default search engine is duckduckgo"); + is(engineIDs[1], "youtube", "Secondary search engine is youtube"); + is(engineIDs[2], "google", "Google is third search engine"); + is(engineIDs[3], "blockchair", "Blockchair is fourth search engine"); + is(engineIDs[4], "ddg-onion", "Duck Duck Go Onion is fifth search engine"); + is(engineIDs[5], "startpage", "Startpage is sixth search engine"); + is(engineIDs[6], "twitter", "Twitter is sixth search engine"); + is(engineIDs[7], "wikipedia", "Wikipedia is seventh search engine"); + is(engineIDs[8], "yahoo", "Yahoo is eighth search engine"); +}); diff --git a/toolkit/components/search/SearchService.jsm b/toolkit/components/search/SearchService.jsm index 9ac351a248b7..5094ce8aec9e 100644 --- a/toolkit/components/search/SearchService.jsm +++ b/toolkit/components/search/SearchService.jsm @@ -12,14 +12,12 @@ const { PromiseUtils } = ChromeUtils.import( );
XPCOMUtils.defineLazyModuleGetters(this, { - AppConstants: "resource://gre/modules/AppConstants.jsm", AddonManager: "resource://gre/modules/AddonManager.jsm", IgnoreLists: "resource://gre/modules/IgnoreLists.jsm", OpenSearchEngine: "resource://gre/modules/OpenSearchEngine.jsm", Region: "resource://gre/modules/Region.jsm", RemoteSettings: "resource://services-settings/remote-settings.js", SearchEngine: "resource://gre/modules/SearchEngine.jsm", - SearchEngineSelector: "resource://gre/modules/SearchEngineSelector.jsm", SearchSettings: "resource://gre/modules/SearchSettings.jsm", SearchStaticData: "resource://gre/modules/SearchStaticData.jsm", SearchUtils: "resource://gre/modules/SearchUtils.jsm", @@ -239,11 +237,6 @@ SearchService.prototype = { Services.obs.addObserver(this, Region.REGION_TOPIC);
try { - // Create the search engine selector. - this._engineSelector = new SearchEngineSelector( - this._handleConfigurationUpdated.bind(this) - ); - // See if we have a settings file so we don't have to parse a bunch of XML. let settings = await this._settings.get();
@@ -1164,26 +1157,21 @@ SearchService.prototype = { },
async _fetchEngineSelectorEngines() { - let searchEngineSelectorProperties = { - locale: Services.locale.appLocaleAsBCP47, - region: Region.home || "default", - channel: AppConstants.MOZ_APP_VERSION_DISPLAY.endsWith("esr") - ? "esr" - : AppConstants.MOZ_UPDATE_CHANNEL, - experiment: NimbusFeatures.search.getVariable("experiment") ?? "", - distroID: SearchUtils.distroID ?? "", - }; - - for (let [key, value] of Object.entries(searchEngineSelectorProperties)) { - this._settings.setAttribute(key, value); - } - - let { - engines, - privateDefault, - } = await this._engineSelector.fetchEngineConfiguration( - searchEngineSelectorProperties - ); + const engines = [ + { webExtension: { id: "ddg@search.mozilla.org" }, orderHint: 100 }, + { webExtension: { id: "youtube@search.mozilla.org" }, orderHint: 90 }, + { webExtension: { id: "google@search.mozilla.org" }, orderHint: 80 }, + { webExtension: { id: "blockchair@search.mozilla.org" }, orderHint: 70 }, + { webExtension: { id: "ddg-onion@search.mozilla.org" }, orderHint: 60 }, + { + webExtension: { id: "blockchair-onion@search.mozilla.org" }, + orderHint: 50, + }, + { webExtension: { id: "startpage@search.mozilla.org" }, orderHint: 40 }, + { webExtension: { id: "twitter@search.mozilla.org" }, orderHint: 30 }, + { webExtension: { id: "wikipedia@search.mozilla.org" }, orderHint: 20 }, + { webExtension: { id: "yahoo@search.mozilla.org" }, orderHint: 10 }, + ];
for (let e of engines) { if (!e.webExtension) { @@ -1192,7 +1180,7 @@ SearchService.prototype = { e.webExtension.locale = e.webExtension?.locale ?? SearchUtils.DEFAULT_TAG; }
- return { engines, privateDefault }; + return { engines, privateDefault: undefined }; },
_setDefaultAndOrdersFromSelector(engines, privateDefault) { diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm index 7d8bc93933bf..ed2288a8939d 100644 --- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -972,6 +972,12 @@ var BuiltInLocation = new (class _BuiltInLocation extends XPIStateLocation { isLinkedAddon(/* aId */) { return false; } + + restore(saved) { + super.restore(saved); + // Bug 33342: avoid restoring disconnect addon from addonStartup.json.lz4. + this.removeAddon("disconnect@search.mozilla.org"); + } })();
/**
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 400e6350a4f4ceabb131e8807642c957163dd273 Author: Richard Pospesel richard@torproject.org AuthorDate: Fri Jun 8 13:38:40 2018 -0700
Bug 23247: Communicating security expectations for .onion
Encrypting pages hosted on Onion Services with SSL/TLS is redundant (in terms of hiding content) as all traffic within the Tor network is already fully encrypted. Therefore, serving HTTP pages from an Onion Service is more or less fine.
Prior to this patch, Tor Browser would mostly treat pages delivered via Onion Services as well as pages delivered in the ordinary fashion over the internet in the same way. This created some inconsistencies in behaviour and misinformation presented to the user relating to the security of pages delivered via Onion Services:
- HTTP Onion Service pages did not have any 'lock' icon indicating the site was secure - HTTP Onion Service pages would be marked as unencrypted in the Page Info screen - Mixed-mode content restrictions did not apply to HTTP Onion Service pages embedding Non-Onion HTTP content
This patch fixes the above issues, and also adds several new 'Onion' icons to the mix to indicate all of the various permutations of Onion Services hosted HTTP or HTTPS pages with HTTP or HTTPS content.
Strings for Onion Service Page Info page are pulled from Torbutton's localization strings. --- browser/base/content/browser-siteIdentity.js | 61 +++++++++++++++++----- browser/base/content/pageinfo/security.js | 49 +++++++++++++++-- .../schemas/chrome_settings_overrides.json | 6 +-- .../shared/identity-block/identity-block.css | 19 +++++++ dom/base/nsContentUtils.cpp | 19 +++++++ dom/base/nsContentUtils.h | 5 ++ dom/base/nsGlobalWindowOuter.cpp | 3 +- dom/ipc/WindowGlobalActor.cpp | 4 +- dom/ipc/WindowGlobalChild.cpp | 6 ++- dom/security/nsMixedContentBlocker.cpp | 16 ++++-- .../modules/geckoview/GeckoViewProgress.jsm | 4 ++ security/certverifier/CertVerifier.cpp | 22 ++++++-- security/manager/ssl/SSLServerCertVerification.cpp | 14 ++++- security/manager/ssl/nsNSSIOLayer.cpp | 13 +++-- security/manager/ssl/nsSecureBrowserUI.cpp | 12 +++++ security/nss/lib/mozpkix/include/pkix/Result.h | 2 + security/nss/lib/mozpkix/include/pkix/pkixnss.h | 1 + 17 files changed, 220 insertions(+), 36 deletions(-)
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js index 02fdb494d290..64a806719a77 100644 --- a/browser/base/content/browser-siteIdentity.js +++ b/browser/base/content/browser-siteIdentity.js @@ -139,6 +139,12 @@ var gIdentityHandler = { ); },
+ get _uriIsOnionHost() { + return this._uriHasHost + ? this._uri.host.toLowerCase().endsWith(".onion") + : false; + }, + get _isAboutNetErrorPage() { let { documentURI } = gBrowser.selectedBrowser; return documentURI?.scheme == "about" && documentURI.filePath == "neterror"; @@ -737,9 +743,9 @@ var gIdentityHandler = { get pointerlockFsWarningClassName() { // Note that the fullscreen warning does not handle _isSecureInternalUI. if (this._uriHasHost && this._isSecureConnection) { - return "verifiedDomain"; + return this._uriIsOnionHost ? "onionVerifiedDomain" : "verifiedDomain"; } - return "unknownIdentity"; + return this._uriIsOnionHost ? "onionUnknownIdentity" : "unknownIdentity"; },
/** @@ -747,12 +753,18 @@ var gIdentityHandler = { * built-in (returns false) or imported (returns true). */ _hasCustomRoot() { + if (!this._secInfo) { + return false; + } + let issuerCert = null; issuerCert = this._secInfo.succeededCertChain[ this._secInfo.succeededCertChain.length - 1 ]; - - return !issuerCert.isBuiltInRoot; + if (issuerCert) { + return !issuerCert.isBuiltInRoot; + } + return false; },
/** @@ -789,11 +801,17 @@ var gIdentityHandler = { "identity.extension.label", [extensionName] ); - } else if (this._uriHasHost && this._isSecureConnection) { + } else if (this._uriHasHost && this._isSecureConnection && this._secInfo) { // This is a secure connection. - this._identityBox.className = "verifiedDomain"; + // _isSecureConnection implicitly includes onion services, which may not have an SSL certificate + const uriIsOnionHost = this._uriIsOnionHost; + this._identityBox.className = uriIsOnionHost + ? "onionVerifiedDomain" + : "verifiedDomain"; if (this._isMixedActiveContentBlocked) { - this._identityBox.classList.add("mixedActiveBlocked"); + this._identityBox.classList.add( + uriIsOnionHost ? "onionMixedActiveBlocked" : "mixedActiveBlocked" + ); } if (!this._isCertUserOverridden) { // It's a normal cert, verifier is the CA Org. @@ -804,17 +822,27 @@ var gIdentityHandler = { } } else if (this._isBrokenConnection) { // This is a secure connection, but something is wrong. - this._identityBox.className = "unknownIdentity"; + const uriIsOnionHost = this._uriIsOnionHost; + this._identityBox.className = uriIsOnionHost + ? "onionUnknownIdentity" + : "unknownIdentity";
if (this._isMixedActiveContentLoaded) { - this._identityBox.classList.add("mixedActiveContent"); + this._identityBox.classList.add( + uriIsOnionHost ? "onionMixedActiveContent" : "mixedActiveContent" + ); } else if (this._isMixedActiveContentBlocked) { this._identityBox.classList.add( - "mixedDisplayContentLoadedActiveBlocked" + uriIsOnionHost + ? "onionMixedDisplayContentLoadedActiveBlocked" + : "mixedDisplayContentLoadedActiveBlocked" ); } else if (this._isMixedPassiveContentLoaded) { - this._identityBox.classList.add("mixedDisplayContent"); + this._identityBox.classList.add( + uriIsOnionHost ? "onionMixedDisplayContent" : "mixedDisplayContent" + ); } else { + // TODO: ignore weak https cipher for onionsites? this._identityBox.classList.add("weakCipher"); } } else if (this._isCertErrorPage) { @@ -830,8 +858,10 @@ var gIdentityHandler = { // Network errors and blocked pages get a more neutral icon this._identityBox.className = "unknownIdentity"; } else if (this._isPotentiallyTrustworthy) { - // This is a local resource (and shouldn't be marked insecure). - this._identityBox.className = "localResource"; + // This is a local resource or an onion site (and shouldn't be marked insecure). + this._identityBox.className = this._uriIsOnionHost + ? "onionUnknownIdentity" + : "localResource"; } else { // This is an insecure connection. let warnOnInsecure = @@ -855,7 +885,10 @@ var gIdentityHandler = { }
if (this._isCertUserOverridden) { - this._identityBox.classList.add("certUserOverridden"); + const uriIsOnionHost = this._uriIsOnionHost; + this._identityBox.classList.add( + uriIsOnionHost ? "onionCertUserOverridden" : "certUserOverridden" + ); // Cert is trusted because of a security exception, verifier is a special string. tooltip = gNavigatorBundle.getString( "identity.identified.verified_by_you" diff --git a/browser/base/content/pageinfo/security.js b/browser/base/content/pageinfo/security.js index 1222c8b0ec35..a5d354208d79 100644 --- a/browser/base/content/pageinfo/security.js +++ b/browser/base/content/pageinfo/security.js @@ -22,6 +22,11 @@ ChromeUtils.defineModuleGetter( "PluralForm", "resource://gre/modules/PluralForm.jsm" ); +XPCOMUtils.defineLazyGetter(this, "gTorButtonBundle", function() { + return Services.strings.createBundle( + "chrome://torbutton/locale/torbutton.properties" + ); +});
var security = { async init(uri, windowInfo) { @@ -60,6 +65,11 @@ var security = { (Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT | Ci.nsIWebProgressListener.STATE_LOADED_MIXED_DISPLAY_CONTENT); var isEV = ui.state & Ci.nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL; + var isOnion = false; + const hostName = this.windowInfo.hostName; + if (hostName && hostName.endsWith(".onion")) { + isOnion = true; + }
let retval = { cAName: "", @@ -69,6 +79,7 @@ var security = { isBroken, isMixed, isEV, + isOnion, cert: null, certificateTransparency: null, }; @@ -107,6 +118,7 @@ var security = { isBroken, isMixed, isEV, + isOnion, cert, certChain: certChainArray, certificateTransparency: undefined, @@ -348,13 +360,31 @@ async function securityOnLoad(uri, windowInfo) { } msg2 = pkiBundle.getString("pageInfo_Privacy_None2"); } else if (info.encryptionStrength > 0) { - hdr = pkiBundle.getFormattedString( - "pageInfo_EncryptionWithBitsAndProtocol", - [info.encryptionAlgorithm, info.encryptionStrength + "", info.version] - ); + if (!info.isOnion) { + hdr = pkiBundle.getFormattedString( + "pageInfo_EncryptionWithBitsAndProtocol", + [info.encryptionAlgorithm, info.encryptionStrength + "", info.version] + ); + } else { + try { + hdr = gTorButtonBundle.formatStringFromName( + "pageInfo_OnionEncryptionWithBitsAndProtocol", + [info.encryptionAlgorithm, info.encryptionStrength + "", info.version] + ); + } catch (err) { + hdr = + "Connection Encrypted (Onion Service, " + + info.encryptionAlgorithm + + ", " + + info.encryptionStrength + + " bit keys, " + + info.version + + ")"; + } + } msg1 = pkiBundle.getString("pageInfo_Privacy_Encrypted1"); msg2 = pkiBundle.getString("pageInfo_Privacy_Encrypted2"); - } else { + } else if (!info.isOnion) { hdr = pkiBundle.getString("pageInfo_NoEncryption"); if (windowInfo.hostName != null) { msg1 = pkiBundle.getFormattedString("pageInfo_Privacy_None1", [ @@ -364,6 +394,15 @@ async function securityOnLoad(uri, windowInfo) { msg1 = pkiBundle.getString("pageInfo_Privacy_None4"); } msg2 = pkiBundle.getString("pageInfo_Privacy_None2"); + } else { + try { + hdr = gTorButtonBundle.GetStringFromName("pageInfo_OnionEncryption"); + } catch (err) { + hdr = "Connection Encrypted (Onion Service)"; + } + + msg1 = pkiBundle.getString("pageInfo_Privacy_Encrypted1"); + msg2 = pkiBundle.getString("pageInfo_Privacy_Encrypted2"); } setText("security-technical-shortform", hdr); setText("security-technical-longform1", msg1); diff --git a/browser/components/extensions/schemas/chrome_settings_overrides.json b/browser/components/extensions/schemas/chrome_settings_overrides.json index 96144745f574..674e237a5696 100644 --- a/browser/components/extensions/schemas/chrome_settings_overrides.json +++ b/browser/components/extensions/schemas/chrome_settings_overrides.json @@ -45,7 +45,7 @@ "search_url": { "type": "string", "format": "url", - "pattern": "^(https://%7Chttp://(localhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%7C%5C%5C%5B::1%5C...", + "pattern": "^(https://%7Chttp://(.+%5C%5C.onion%7Clocalhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%...", "preprocess": "localize" }, "favicon_url": { @@ -66,7 +66,7 @@ "suggest_url": { "type": "string", "optional": true, - "pattern": "^$|^(https://%7Chttp://(localhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%7C%5C%5C%5B::1%5C...", + "pattern": "^$|^(https://%7Chttp://(.+%5C%5C.onion%7Clocalhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%...", "preprocess": "localize" }, "instant_url": { @@ -123,7 +123,7 @@ "type": "string", "optional": true, "format": "url", - "pattern": "^(https://%7Chttp://(localhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%7C%5C%5C%5B::1%5C...", + "pattern": "^(https://%7Chttp://(.+%5C%5C.onion%7Clocalhost%7C127%5C%5C.0%5C%5C.0%5C%5C.1%...", "preprocess": "localize" }, "alternate_urls": { diff --git a/browser/themes/shared/identity-block/identity-block.css b/browser/themes/shared/identity-block/identity-block.css index 63c07d21a453..7314a6570fb8 100644 --- a/browser/themes/shared/identity-block/identity-block.css +++ b/browser/themes/shared/identity-block/identity-block.css @@ -193,6 +193,25 @@ list-style-image: url(chrome://global/skin/icons/security-broken.svg); }
+#identity-box[pageproxystate="valid"].onionUnknownIdentity #identity-icon, +#identity-box[pageproxystate="valid"].onionVerifiedDomain #identity-icon, +#identity-box[pageproxystate="valid"].onionMixedActiveBlocked #identity-icon { + list-style-image: url(chrome://browser/skin/onion.svg); + visibility: visible; +} + +#identity-box[pageproxystate="valid"].onionMixedDisplayContent #identity-icon, +#identity-box[pageproxystate="valid"].onionMixedDisplayContentLoadedActiveBlocked #identity-icon, +#identity-box[pageproxystate="valid"].onionCertUserOverridden #identity-icon { + list-style-image: url(chrome://browser/skin/onion-warning.svg); + visibility: visible; +} + +#identity-box[pageproxystate="valid"].onionMixedActiveContent #identity-icon { + list-style-image: url(chrome://browser/skin/onion-slash.svg); + visibility: visible; +} + #permissions-granted-icon { list-style-image: url(chrome://browser/skin/permissions.svg); } diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 8f8341b099ab..a5184e0f45be 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -9486,6 +9486,25 @@ bool nsContentUtils::ComputeIsSecureContext(nsIChannel* aChannel) { return principal->GetIsOriginPotentiallyTrustworthy(); }
+/* static */ bool nsContentUtils::DocumentHasOnionURI(Document* aDocument) { + if (!aDocument) { + return false; + } + + nsIURI* uri = aDocument->GetDocumentURI(); + if (!uri) { + return false; + } + + nsAutoCString host; + if (NS_SUCCEEDED(uri->GetHost(host))) { + bool hasOnionURI = StringEndsWith(host, ".onion"_ns); + return hasOnionURI; + } + + return false; +} + /* static */ void nsContentUtils::TryToUpgradeElement(Element* aElement) { NodeInfo* nodeInfo = aElement->NodeInfo(); diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h index 9f9e94e4b0e1..d3c73d15e2ae 100644 --- a/dom/base/nsContentUtils.h +++ b/dom/base/nsContentUtils.h @@ -3023,6 +3023,11 @@ class nsContentUtils { */ static bool HttpsStateIsModern(Document* aDocument);
+ /** + * Returns true of the document's URI is a .onion + */ + static bool DocumentHasOnionURI(Document* aDocument); + /** * Returns true if the channel is for top-level window and is over secure * context. diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp index 1d4ffff18a52..a1ad963509f9 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp @@ -1882,7 +1882,8 @@ bool nsGlobalWindowOuter::ComputeIsSecureContext(Document* aDocument, return false; }
- if (nsContentUtils::HttpsStateIsModern(aDocument)) { + if (nsContentUtils::HttpsStateIsModern(aDocument) || + nsContentUtils::DocumentHasOnionURI(aDocument)) { return true; }
diff --git a/dom/ipc/WindowGlobalActor.cpp b/dom/ipc/WindowGlobalActor.cpp index 3413442f1137..7d6a028d676f 100644 --- a/dom/ipc/WindowGlobalActor.cpp +++ b/dom/ipc/WindowGlobalActor.cpp @@ -21,6 +21,7 @@ #include "mozilla/net/CookieJarSettings.h" #include "mozilla/dom/WindowGlobalChild.h" #include "mozilla/dom/WindowGlobalParent.h" +#include "mozilla/dom/nsMixedContentBlocker.h"
#include "nsGlobalWindowInner.h" #include "nsNetUtil.h" @@ -133,7 +134,8 @@ WindowGlobalInit WindowGlobalActor::WindowInitializer(
// Init Mixed Content Fields nsCOMPtr<nsIURI> innerDocURI = NS_GetInnermostURI(doc->GetDocumentURI()); - fields.mIsSecure = innerDocURI && innerDocURI->SchemeIs("https"); + fields.mIsSecure = innerDocURI && (innerDocURI->SchemeIs("https") || + nsMixedContentBlocker::IsPotentiallyTrustworthyOnion(innerDocURI));
nsCOMPtr<nsITransportSecurityInfo> securityInfo; if (nsCOMPtr<nsIChannel> channel = doc->GetChannel()) { diff --git a/dom/ipc/WindowGlobalChild.cpp b/dom/ipc/WindowGlobalChild.cpp index f209705183cb..f9ce500f18e2 100644 --- a/dom/ipc/WindowGlobalChild.cpp +++ b/dom/ipc/WindowGlobalChild.cpp @@ -42,6 +42,8 @@ #include "nsIHttpChannelInternal.h" #include "nsIURIMutator.h"
+#include "mozilla/dom/nsMixedContentBlocker.h" + using namespace mozilla::ipc; using namespace mozilla::dom::ipc;
@@ -228,7 +230,9 @@ void WindowGlobalChild::OnNewDocument(Document* aDocument) { nsCOMPtr<nsIURI> innerDocURI = NS_GetInnermostURI(aDocument->GetDocumentURI()); if (innerDocURI) { - txn.SetIsSecure(innerDocURI->SchemeIs("https")); + txn.SetIsSecure( + innerDocURI->SchemeIs("https") || + nsMixedContentBlocker::IsPotentiallyTrustworthyOnion(innerDocURI)); }
MOZ_DIAGNOSTIC_ASSERT(mDocumentPrincipal->GetIsLocalIpAddress() == diff --git a/dom/security/nsMixedContentBlocker.cpp b/dom/security/nsMixedContentBlocker.cpp index e4352e3cb43b..2a7d878a2fcf 100644 --- a/dom/security/nsMixedContentBlocker.cpp +++ b/dom/security/nsMixedContentBlocker.cpp @@ -666,8 +666,8 @@ nsresult nsMixedContentBlocker::ShouldLoad(bool aHadInsecureImageRedirect, return NS_OK; }
- // Check the parent scheme. If it is not an HTTPS page then mixed content - // restrictions do not apply. + // Check the parent scheme. If it is not an HTTPS or .onion page then mixed + // content restrictions do not apply. nsCOMPtr<nsIURI> innerRequestingLocation = NS_GetInnermostURI(requestingLocation); if (!innerRequestingLocation) { @@ -682,6 +682,17 @@ nsresult nsMixedContentBlocker::ShouldLoad(bool aHadInsecureImageRedirect,
bool parentIsHttps = innerRequestingLocation->SchemeIs("https"); if (!parentIsHttps) { + bool parentIsOnion = IsPotentiallyTrustworthyOnion(innerRequestingLocation); + if (!parentIsOnion) { + *aDecision = ACCEPT; + return NS_OK; + } + } + + bool isHttpScheme = innerContentLocation->SchemeIs("http"); + // .onion URLs are encrypted and authenticated. Don't treat them as mixed + // content if potentially trustworthy (i.e. whitelisted). + if (isHttpScheme && IsPotentiallyTrustworthyOnion(innerContentLocation)) { *aDecision = ACCEPT; MOZ_LOG(sMCBLog, LogLevel::Verbose, (" -> decision: Request will be allowed because the requesting " @@ -708,7 +719,6 @@ nsresult nsMixedContentBlocker::ShouldLoad(bool aHadInsecureImageRedirect, return NS_OK; }
- bool isHttpScheme = innerContentLocation->SchemeIs("http"); if (isHttpScheme && IsPotentiallyTrustworthyOrigin(innerContentLocation)) { *aDecision = ACCEPT; return NS_OK; diff --git a/mobile/android/modules/geckoview/GeckoViewProgress.jsm b/mobile/android/modules/geckoview/GeckoViewProgress.jsm index d121ce850f7f..e054bc6bd709 100644 --- a/mobile/android/modules/geckoview/GeckoViewProgress.jsm +++ b/mobile/android/modules/geckoview/GeckoViewProgress.jsm @@ -145,6 +145,10 @@ var IdentityHandler = { result.host = uri.host; }
+ if (!aBrowser.securityUI.secInfo) { + return result; + } + const cert = aBrowser.securityUI.secInfo.serverCert;
result.certificate = aBrowser.securityUI.secInfo.serverCert.getBase64DERString(); diff --git a/security/certverifier/CertVerifier.cpp b/security/certverifier/CertVerifier.cpp index b6ee9f699ea8..2ad18700bd44 100644 --- a/security/certverifier/CertVerifier.cpp +++ b/security/certverifier/CertVerifier.cpp @@ -907,6 +907,9 @@ Result CertVerifier::VerifySSLServerCert( if (rv != Success) { return rv; } + + bool errOnionWithSelfSignedCert = false; + bool isBuiltChainRootBuiltInRootLocal; rv = VerifyCert(peerCertBytes, certificateUsageSSLServer, time, pinarg, PromiseFlatCString(hostname).get(), builtChain, flags, @@ -926,9 +929,16 @@ Result CertVerifier::VerifySSLServerCert( CertIsSelfSigned(peerBackCert, pinarg)) { // In this case we didn't find any issuer for the certificate and the // certificate is self-signed. - return Result::ERROR_SELF_SIGNED_CERT; + if (StringEndsWith(hostname, ".onion"_ns)) { + // Self signed cert over onion is deemed secure, the hidden service provides authentication. + // We defer returning this error and keep processing to determine if there are other legitimate + // certificate errors (such as expired, wrong domain) that we would like to surface to the user + errOnionWithSelfSignedCert = true; + } else { + return Result::ERROR_SELF_SIGNED_CERT; + } } - if (rv == Result::ERROR_UNKNOWN_ISSUER) { + if (rv == Result::ERROR_UNKNOWN_ISSUER && !errOnionWithSelfSignedCert) { // In this case we didn't get any valid path for the cert. Let's see if // the issuer is the same as the issuer for our canary probe. If yes, this // connection is connecting via a misconfigured proxy. @@ -952,7 +962,9 @@ Result CertVerifier::VerifySSLServerCert( return Result::ERROR_MITM_DETECTED; } } - return rv; + if (!errOnionWithSelfSignedCert) { + return rv; + } }
if (dcInfo) { @@ -1002,7 +1014,9 @@ Result CertVerifier::VerifySSLServerCert( if (isBuiltChainRootBuiltInRoot) { *isBuiltChainRootBuiltInRoot = isBuiltChainRootBuiltInRootLocal; } - + if (errOnionWithSelfSignedCert) { + return Result::ERROR_ONION_WITH_SELF_SIGNED_CERT; + } return Success; }
diff --git a/security/manager/ssl/SSLServerCertVerification.cpp b/security/manager/ssl/SSLServerCertVerification.cpp index 52628799176c..2df79a3bc11a 100644 --- a/security/manager/ssl/SSLServerCertVerification.cpp +++ b/security/manager/ssl/SSLServerCertVerification.cpp @@ -309,6 +309,7 @@ SECStatus DetermineCertOverrideErrors(const nsCOMPtr<nsIX509Cert>& cert, case mozilla::pkix::MOZILLA_PKIX_ERROR_MITM_DETECTED: case mozilla::pkix::MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE: case mozilla::pkix::MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT: + case mozilla::pkix::MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT: case mozilla::pkix::MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA: { collectedErrors = nsICertOverrideService::ERROR_UNTRUSTED; errorCodeTrust = defaultErrorCodeToReport; @@ -830,6 +831,17 @@ PRErrorCode AuthCertificateParseResults( gPIPNSSLog, LogLevel::Debug, ("[0x%" PRIx64 "] Certificate error was not overridden\n", aPtrForLog));
+ // If Onion with self signed cert we want to prioritize any other error + if (errorCodeTrust == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) { + if (errorCodeMismatch) { + return errorCodeMismatch; + } else if (errorCodeTime) { + return errorCodeTime; + } else { + return MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT; + } + } + // pick the error code to report by priority return errorCodeTrust ? errorCodeTrust : errorCodeMismatch ? errorCodeMismatch @@ -1257,7 +1269,7 @@ SSLServerCertVerificationResult::Run() { // Certificate validation failed; store the peer certificate chain on // infoObject so it can be used for error reporting. mInfoObject->SetFailedCertChain(std::move(mPeerCertChain)); - if (mCollectedErrors != 0) { + if (mCollectedErrors != 0 && mFinalError != MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) { mInfoObject->SetStatusErrorBits(cert, mCollectedErrors); } } diff --git a/security/manager/ssl/nsNSSIOLayer.cpp b/security/manager/ssl/nsNSSIOLayer.cpp index 2c36893324ff..d79237478cdd 100644 --- a/security/manager/ssl/nsNSSIOLayer.cpp +++ b/security/manager/ssl/nsNSSIOLayer.cpp @@ -420,7 +420,11 @@ void nsNSSSocketInfo::SetCertVerificationResult(PRErrorCode errorCode) { "Invalid state transition to cert_verification_finished");
if (mFd) { - SECStatus rv = SSL_AuthCertificateComplete(mFd, errorCode); + PRErrorCode passCode = errorCode; + if (errorCode == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) { + passCode = 0; + } + SECStatus rv = SSL_AuthCertificateComplete(mFd, passCode); // Only replace errorCode if there was originally no error if (rv != SECSuccess && errorCode == 0) { errorCode = PR_GetError(); @@ -431,12 +435,15 @@ void nsNSSSocketInfo::SetCertVerificationResult(PRErrorCode errorCode) { } }
- if (errorCode) { + if (errorCode && + errorCode != MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) { mFailedVerification = true; SetCanceled(errorCode); }
- if (mPlaintextBytesRead && !errorCode) { + if (mPlaintextBytesRead && + (!errorCode || + errorCode == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT)) { Telemetry::Accumulate(Telemetry::SSL_BYTES_BEFORE_CERT_CALLBACK, AssertedCast<uint32_t>(mPlaintextBytesRead)); } diff --git a/security/manager/ssl/nsSecureBrowserUI.cpp b/security/manager/ssl/nsSecureBrowserUI.cpp index b4de1a331ffc..f1ce39582854 100644 --- a/security/manager/ssl/nsSecureBrowserUI.cpp +++ b/security/manager/ssl/nsSecureBrowserUI.cpp @@ -9,6 +9,7 @@ #include "mozilla/Logging.h" #include "mozilla/Unused.h" #include "mozilla/dom/Document.h" +#include "mozilla/dom/nsMixedContentBlocker.h" #include "nsContentUtils.h" #include "nsIChannel.h" #include "nsDocShell.h" @@ -85,6 +86,17 @@ void nsSecureBrowserUI::RecomputeSecurityFlags() { } } } + + // any protocol routed over tor is secure + if (!(mState & nsIWebProgressListener::STATE_IS_SECURE)) { + nsCOMPtr<nsIURI> innerDocURI = NS_GetInnermostURI(win->GetDocumentURI()); + if (innerDocURI && + nsMixedContentBlocker::IsPotentiallyTrustworthyOnion(innerDocURI)) { + MOZ_LOG(gSecureBrowserUILog, LogLevel::Debug, (" is onion")); + mState = (mState & ~nsIWebProgressListener::STATE_IS_INSECURE) | + nsIWebProgressListener::STATE_IS_SECURE; + } + } }
// Add upgraded-state flags when request has been diff --git a/security/nss/lib/mozpkix/include/pkix/Result.h b/security/nss/lib/mozpkix/include/pkix/Result.h index 29461dc1a510..b2ad3a383ceb 100644 --- a/security/nss/lib/mozpkix/include/pkix/Result.h +++ b/security/nss/lib/mozpkix/include/pkix/Result.h @@ -188,6 +188,8 @@ static const unsigned int FATAL_ERROR_FLAG = 0x800; SEC_ERROR_LIBRARY_FAILURE) \ MOZILLA_PKIX_MAP(FATAL_ERROR_NO_MEMORY, FATAL_ERROR_FLAG | 4, \ SEC_ERROR_NO_MEMORY) \ + MOZILLA_PKIX_MAP(ERROR_ONION_WITH_SELF_SIGNED_CERT, 155, \ + MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) \ /* nothing here */
enum class Result { diff --git a/security/nss/lib/mozpkix/include/pkix/pkixnss.h b/security/nss/lib/mozpkix/include/pkix/pkixnss.h index c1050c6497a4..75a7c4e9c0fb 100644 --- a/security/nss/lib/mozpkix/include/pkix/pkixnss.h +++ b/security/nss/lib/mozpkix/include/pkix/pkixnss.h @@ -94,6 +94,7 @@ enum ErrorCode { MOZILLA_PKIX_ERROR_ADDITIONAL_POLICY_CONSTRAINT_FAILED = ERROR_BASE + 13, MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT = ERROR_BASE + 14, MOZILLA_PKIX_ERROR_MITM_DETECTED = ERROR_BASE + 15, + MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT = ERROR_BASE + 100, END_OF_LIST };
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 9c21c3ddd9d2c04f5f3b2c884e5986d9b249b186 Author: Kathy Brade brade@pearlcrescent.com AuthorDate: Tue Nov 12 16:11:05 2019 -0500
Bug 30237: Add v3 onion services client authentication prompt
When Tor informs the browser that client authentication is needed, temporarily load about:blank instead of about:neterror and prompt for the user's key.
If a correctly formatted key is entered, use Tor's ONION_CLIENT_AUTH_ADD control port command to add the key (via Torbutton's control port module) and reload the page.
If the user cancels the prompt, display the standard about:neterror "Unable to connect" page. This requires a small change to browser/actors/NetErrorChild.jsm to account for the fact that the docShell no longer has the failedChannel information. The failedChannel is used to extract TLS-related error info, which is not applicable in the case of a canceled .onion authentication prompt.
Add a leaveOpen option to PopupNotifications.show so we can display error messages within the popup notification doorhanger without closing the prompt.
Add support for onion services strings to the TorStrings module.
Add support for Tor extended SOCKS errors (Tor proposal 304) to the socket transport and SOCKS layers. Improved display of all of these errors will be implemented as part of bug 30025.
Also fixes bug 19757: Add a "Remember this key" checkbox to the client auth prompt.
Add an "Onion Services Authentication" section within the about:preferences "Privacy & Security section" to allow viewing and removal of v3 onion client auth keys that have been stored on disk.
Also fixes bug 19251: use enhanced error pages for onion service errors. --- browser/actors/NetErrorChild.jsm | 7 + browser/base/content/browser.js | 10 + browser/base/content/browser.xhtml | 1 + browser/base/content/certerror/aboutNetError.js | 10 +- browser/base/content/certerror/aboutNetError.xhtml | 1 + browser/base/content/main-popupset.inc.xhtml | 1 + browser/base/content/navigator-toolbox.inc.xhtml | 1 + browser/components/moz.build | 1 + .../content/authNotificationIcon.inc.xhtml | 6 + .../onionservices/content/authPopup.inc.xhtml | 16 + .../onionservices/content/authPreferences.css | 24 ++ .../content/authPreferences.inc.xhtml | 19 ++ .../onionservices/content/authPreferences.js | 71 ++++ .../components/onionservices/content/authPrompt.js | 378 +++++++++++++++++++++ .../components/onionservices/content/authUtil.jsm | 27 ++ .../onionservices/content/netError/browser.svg | 3 + .../onionservices/content/netError/network.svg | 3 + .../content/netError/onionNetError.css | 70 ++++ .../content/netError/onionNetError.js | 241 +++++++++++++ .../onionservices/content/netError/onionsite.svg | 8 + .../onionservices/content/onionservices.css | 69 ++++ .../onionservices/content/savedKeysDialog.js | 254 ++++++++++++++ .../onionservices/content/savedKeysDialog.xhtml | 42 +++ browser/components/onionservices/jar.mn | 9 + browser/components/onionservices/moz.build | 1 + browser/components/preferences/preferences.xhtml | 1 + browser/components/preferences/privacy.inc.xhtml | 2 + browser/components/preferences/privacy.js | 7 + browser/themes/shared/aboutNetError.css | 7 + browser/themes/shared/notification-icons.css | 2 + docshell/base/nsDocShell.cpp | 83 ++++- dom/ipc/BrowserParent.cpp | 21 ++ dom/ipc/BrowserParent.h | 3 + dom/ipc/PBrowser.ipdl | 9 + js/xpconnect/src/xpc.msg | 10 + netwerk/base/nsSocketTransport2.cpp | 6 + netwerk/socket/nsSOCKSIOLayer.cpp | 49 +++ toolkit/modules/PopupNotifications.jsm | 6 + toolkit/modules/RemotePageAccessManager.jsm | 1 + .../lib/environments/frame-script.js | 1 + xpcom/base/ErrorList.py | 22 ++ 41 files changed, 1501 insertions(+), 2 deletions(-)
diff --git a/browser/actors/NetErrorChild.jsm b/browser/actors/NetErrorChild.jsm index cea0372ce41d..705884878456 100644 --- a/browser/actors/NetErrorChild.jsm +++ b/browser/actors/NetErrorChild.jsm @@ -13,6 +13,8 @@ const { RemotePageChild } = ChromeUtils.import( "resource://gre/actors/RemotePageChild.jsm" );
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + XPCOMUtils.defineLazyServiceGetter( this, "gSerializationHelper", @@ -32,6 +34,7 @@ class NetErrorChild extends RemotePageChild { "RPMAddToHistogram", "RPMRecordTelemetryEvent", "RPMGetHttpResponseHeader", + "RPMGetTorStrings", ]; this.exportFunctions(exportableFunctions); } @@ -110,4 +113,8 @@ class NetErrorChild extends RemotePageChild {
return ""; } + + RPMGetTorStrings() { + return Cu.cloneInto(TorStrings.onionServices, this.contentWindow); + } } diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 1bdf9a2f35cc..66ac2d0f1d7c 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -234,6 +234,11 @@ XPCOMUtils.defineLazyScriptGetter( ["NewIdentityButton"], "chrome://browser/content/newidentity.js" ); +XPCOMUtils.defineLazyScriptGetter( + this, + ["OnionAuthPrompt"], + "chrome://browser/content/onionservices/authPrompt.js" +); XPCOMUtils.defineLazyScriptGetter( this, "gEditItemOverlay", @@ -1795,6 +1800,9 @@ var gBrowserInit = { // Init the NewIdentityButton NewIdentityButton.init();
+ // Init the OnionAuthPrompt + OnionAuthPrompt.init(); + // Certain kinds of automigration rely on this notification to complete // their tasks BEFORE the browser window is shown. SessionStore uses it to // restore tabs into windows AFTER important parts like gMultiProcessBrowser @@ -2537,6 +2545,8 @@ var gBrowserInit = {
NewIdentityButton.uninit();
+ OnionAuthPrompt.uninit(); + TorBootstrapUrlbar.uninit();
gAccessibilityServiceIndicator.uninit(); diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml index 2a906252306d..ac4ddb8c3979 100644 --- a/browser/base/content/browser.xhtml +++ b/browser/base/content/browser.xhtml @@ -38,6 +38,7 @@ <?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?> <?xml-stylesheet href="chrome://torbutton/skin/tor-circuit-display.css" type="text/css"?> <?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/content/onionservices/onionservices.css" type="text/css"?>
<!DOCTYPE window [ #include browser-doctype.inc diff --git a/browser/base/content/certerror/aboutNetError.js b/browser/base/content/certerror/aboutNetError.js index 1714b1b8a4be..1f63d5aa7012 100644 --- a/browser/base/content/certerror/aboutNetError.js +++ b/browser/base/content/certerror/aboutNetError.js @@ -3,6 +3,7 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env mozilla/frame-script */ +/* import-globals-from ../../components/onionservices/content/netError/onionNetError.js */
import "chrome://global/content/certviewer/pvutils_bundle.js"; import "chrome://global/content/certviewer/asn1js_bundle.js"; @@ -291,7 +292,10 @@ async function initPage() { errDesc = document.getElementById("ed_generic"); }
- setErrorPageStrings(err); + const isOnionError = err.startsWith("onionServices."); + if (!isOnionError) { + setErrorPageStrings(err); + }
var sd = document.getElementById("errorShortDescText"); if (sd) { @@ -418,6 +422,10 @@ async function initPage() { span.textContent = HOST_NAME; } } + + if (isOnionError) { + OnionServicesAboutNetError.initPage(document); + } }
function setupBlockingReportingUI() { diff --git a/browser/base/content/certerror/aboutNetError.xhtml b/browser/base/content/certerror/aboutNetError.xhtml index 0f7deb473df2..ea9b21a8f23e 100644 --- a/browser/base/content/certerror/aboutNetError.xhtml +++ b/browser/base/content/certerror/aboutNetError.xhtml @@ -203,5 +203,6 @@ </div> </body> <script src="chrome://browser/content/certerror/aboutNetErrorCodes.js"/> + <script src="chrome://browser/content/onionservices/netError/onionNetError.js"/> <script type="module" src="chrome://browser/content/certerror/aboutNetError.js"/> </html> diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml index 029a63bea57c..79a2750d96ce 100644 --- a/browser/base/content/main-popupset.inc.xhtml +++ b/browser/base/content/main-popupset.inc.xhtml @@ -536,6 +536,7 @@ #include ../../components/downloads/content/downloadsPanel.inc.xhtml #include ../../../devtools/startup/enableDevToolsPopup.inc.xhtml #include ../../components/securitylevel/content/securityLevelPanel.inc.xhtml +#include ../../components/onionservices/content/authPopup.inc.xhtml #include browser-allTabsMenu.inc.xhtml
<tooltip id="dynamic-shortcut-tooltip" diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml index 81479615dc72..1cd54285c9a9 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -259,6 +259,7 @@ data-l10n-id="urlbar-indexed-db-notification-anchor"/> <image id="password-notification-icon" class="notification-anchor-icon" role="button" data-l10n-id="urlbar-password-notification-anchor"/> +#include ../../components/onionservices/content/authNotificationIcon.inc.xhtml <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center" data-l10n-id="urlbar-plugins-notification-anchor"> <image class="plugin-icon" /> <image id="plugin-icon-badge" /> diff --git a/browser/components/moz.build b/browser/components/moz.build index 8033a5985ed0..1adecb68bc8f 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -40,6 +40,7 @@ DIRS += [ "migration", "newidentity", "newtab", + "onionservices", "originattributes", "places", "pocket", diff --git a/browser/components/onionservices/content/authNotificationIcon.inc.xhtml b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml new file mode 100644 index 000000000000..91274d612739 --- /dev/null +++ b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml @@ -0,0 +1,6 @@ +# Copyright (c) 2020, The Tor Project, Inc. + +<image id="tor-clientauth-notification-icon" + class="notification-anchor-icon tor-clientauth-icon" + role="button" + tooltiptext="&torbutton.onionServices.authPrompt.tooltip;"/> diff --git a/browser/components/onionservices/content/authPopup.inc.xhtml b/browser/components/onionservices/content/authPopup.inc.xhtml new file mode 100644 index 000000000000..bd0ec3aa0b00 --- /dev/null +++ b/browser/components/onionservices/content/authPopup.inc.xhtml @@ -0,0 +1,16 @@ +# Copyright (c) 2020, The Tor Project, Inc. + +<popupnotification id="tor-clientauth-notification" hidden="true"> + <popupnotificationcontent orient="vertical"> + <description id="tor-clientauth-notification-desc"/> + <label id="tor-clientauth-notification-learnmore" + class="text-link popup-notification-learnmore-link" + is="text-link"/> + html:div + <html:input id="tor-clientauth-notification-key" type="password"/> + <html:div id="tor-clientauth-warning"/> + <checkbox id="tor-clientauth-persistkey-checkbox" + label="&torbutton.onionServices.authPrompt.persistCheckboxLabel;"/> + </html:div> + </popupnotificationcontent> +</popupnotification> diff --git a/browser/components/onionservices/content/authPreferences.css b/browser/components/onionservices/content/authPreferences.css new file mode 100644 index 000000000000..d33151737841 --- /dev/null +++ b/browser/components/onionservices/content/authPreferences.css @@ -0,0 +1,24 @@ +/* Copyright (c) 2020, The Tor Project, Inc. */ + +@import url("chrome://branding/content/tor-styles.css"); + +#torOnionServiceKeys-overview-container { + margin-right: 30px; +} + +#onionservices-savedkeys-tree treechildren::-moz-tree-cell-text { + font-size: 80%; +} + +#onionservices-savedkeys-errorContainer { + margin-top: 4px; + min-height: 3em; +} + +#onionservices-savedkeys-errorIcon { + margin-right: 4px; + list-style-image: url("chrome://global/skin/icons/warning.svg"); + -moz-context-properties: fill; + fill: var(--torbrowser-warning); + visibility: hidden; +} diff --git a/browser/components/onionservices/content/authPreferences.inc.xhtml b/browser/components/onionservices/content/authPreferences.inc.xhtml new file mode 100644 index 000000000000..f69c9dde66a2 --- /dev/null +++ b/browser/components/onionservices/content/authPreferences.inc.xhtml @@ -0,0 +1,19 @@ +# Copyright (c) 2020, The Tor Project, Inc. + +<groupbox id="torOnionServiceKeys" orient="vertical" + data-category="panePrivacy" hidden="true"> + <label><html:h2 id="torOnionServiceKeys-header"/></label> + <hbox> + <description id="torOnionServiceKeys-overview-container" flex="1"> + <html:span id="torOnionServiceKeys-overview" + class="tail-with-learn-more"/> + <label id="torOnionServiceKeys-learnMore" class="learnMore text-link" + is="text-link"/> + </description> + <vbox align="end"> + <button id="torOnionServiceKeys-savedKeys" + is="highlightable-button" + class="accessory-button"/> + </vbox> + </hbox> +</groupbox> diff --git a/browser/components/onionservices/content/authPreferences.js b/browser/components/onionservices/content/authPreferences.js new file mode 100644 index 000000000000..e84938285e65 --- /dev/null +++ b/browser/components/onionservices/content/authPreferences.js @@ -0,0 +1,71 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +ChromeUtils.defineModuleGetter( + this, + "TorStrings", + "resource:///modules/TorStrings.jsm" +); + +/* globals gSubDialog */ + +/* + Onion Services Client Authentication Preferences Code + + Code to handle init and update of onion services authentication section + in about:preferences#privacy +*/ + +const OnionServicesAuthPreferences = { + selector: { + groupBox: "#torOnionServiceKeys", + header: "#torOnionServiceKeys-header", + overview: "#torOnionServiceKeys-overview", + learnMore: "#torOnionServiceKeys-learnMore", + savedKeysButton: "#torOnionServiceKeys-savedKeys", + }, + + init() { + // populate XUL with localized strings + this._populateXUL(); + }, + + _populateXUL() { + const groupbox = document.querySelector(this.selector.groupBox); + + let elem = groupbox.querySelector(this.selector.header); + elem.textContent = TorStrings.onionServices.authPreferences.header; + + elem = groupbox.querySelector(this.selector.overview); + elem.textContent = TorStrings.onionServices.authPreferences.overview; + + elem = groupbox.querySelector(this.selector.learnMore); + elem.setAttribute("value", TorStrings.onionServices.learnMore); + elem.setAttribute("href", TorStrings.onionServices.learnMoreURL); + if (TorStrings.onionServices.learnMoreURL.startsWith("about:")) { + elem.setAttribute("useoriginprincipal", "true"); + } + + elem = groupbox.querySelector(this.selector.savedKeysButton); + elem.setAttribute( + "label", + TorStrings.onionServices.authPreferences.savedKeys + ); + elem.addEventListener("command", () => + OnionServicesAuthPreferences.onViewSavedKeys() + ); + }, + + onViewSavedKeys() { + gSubDialog.open( + "chrome://browser/content/onionservices/savedKeysDialog.xhtml" + ); + }, +}; // OnionServicesAuthPreferences + +Object.defineProperty(this, "OnionServicesAuthPreferences", { + value: OnionServicesAuthPreferences, + enumerable: true, + writable: false, +}); diff --git a/browser/components/onionservices/content/authPrompt.js b/browser/components/onionservices/content/authPrompt.js new file mode 100644 index 000000000000..83831ef732c2 --- /dev/null +++ b/browser/components/onionservices/content/authPrompt.js @@ -0,0 +1,378 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +/* globals gBrowser, PopupNotifications, Services, XPCOMUtils */ + +XPCOMUtils.defineLazyModuleGetters(this, { + OnionAuthUtil: "chrome://browser/content/onionservices/authUtil.jsm", + CommonUtils: "resource://services-common/utils.js", + TorStrings: "resource:///modules/TorStrings.jsm", +}); + +const OnionAuthPrompt = (function() { + // OnionServicesAuthPrompt objects run within the main/chrome process. + // aReason is the topic passed within the observer notification that is + // causing this auth prompt to be displayed. + function OnionServicesAuthPrompt(aBrowser, aFailedURI, aReason, aOnionName) { + this._browser = aBrowser; + this._failedURI = aFailedURI; + this._reasonForPrompt = aReason; + this._onionHostname = aOnionName; + } + + OnionServicesAuthPrompt.prototype = { + show(aWarningMessage) { + let mainAction = { + label: TorStrings.onionServices.authPrompt.done, + accessKey: TorStrings.onionServices.authPrompt.doneAccessKey, + leaveOpen: true, // Callback is responsible for closing the notification. + callback: this._onDone.bind(this), + }; + + let dialogBundle = Services.strings.createBundle( + "chrome://global/locale/dialog.properties" + ); + + let cancelAccessKey = dialogBundle.GetStringFromName("accesskey-cancel"); + if (!cancelAccessKey) { + cancelAccessKey = "c"; + } // required by PopupNotifications.show() + + let cancelAction = { + label: dialogBundle.GetStringFromName("button-cancel"), + accessKey: cancelAccessKey, + callback: this._onCancel.bind(this), + }; + + let _this = this; + let options = { + autofocus: true, + hideClose: true, + persistent: true, + removeOnDismissal: false, + eventCallback(aTopic) { + if (aTopic === "showing") { + _this._onPromptShowing(aWarningMessage); + } else if (aTopic === "shown") { + _this._onPromptShown(); + } else if (aTopic === "removed") { + _this._onPromptRemoved(); + } + }, + }; + + this._prompt = PopupNotifications.show( + this._browser, + OnionAuthUtil.domid.notification, + "", + OnionAuthUtil.domid.anchor, + mainAction, + [cancelAction], + options + ); + }, + + _onPromptShowing(aWarningMessage) { + let xulDoc = this._browser.ownerDocument; + let descElem = xulDoc.getElementById(OnionAuthUtil.domid.description); + if (descElem) { + // Handle replacement of the onion name within the localized + // string ourselves so we can show the onion name as bold text. + // We do this by splitting the localized string and creating + // several HTML <span> elements. + while (descElem.firstChild) { + descElem.firstChild.remove(); + } + + let fmtString = TorStrings.onionServices.authPrompt.description; + let prefix = ""; + let suffix = ""; + const kToReplace = "%S"; + let idx = fmtString.indexOf(kToReplace); + if (idx < 0) { + prefix = fmtString; + } else { + prefix = fmtString.substring(0, idx); + suffix = fmtString.substring(idx + kToReplace.length); + } + + const kHTMLNS = "http://www.w3.org/1999/xhtml"; + let span = xulDoc.createElementNS(kHTMLNS, "span"); + span.textContent = prefix; + descElem.appendChild(span); + span = xulDoc.createElementNS(kHTMLNS, "span"); + span.id = OnionAuthUtil.domid.onionNameSpan; + span.textContent = this._onionHostname; + descElem.appendChild(span); + span = xulDoc.createElementNS(kHTMLNS, "span"); + span.textContent = suffix; + descElem.appendChild(span); + } + + // Set "Learn More" label and href. + let learnMoreElem = xulDoc.getElementById(OnionAuthUtil.domid.learnMore); + if (learnMoreElem) { + learnMoreElem.setAttribute("value", TorStrings.onionServices.learnMore); + learnMoreElem.setAttribute( + "href", + TorStrings.onionServices.learnMoreURL + ); + if (TorStrings.onionServices.learnMoreURL.startsWith("about:")) { + learnMoreElem.setAttribute("useoriginprincipal", "true"); + } + } + + this._showWarning(aWarningMessage); + let checkboxElem = this._getCheckboxElement(); + if (checkboxElem) { + checkboxElem.checked = false; + } + }, + + _onPromptShown() { + let keyElem = this._getKeyElement(); + if (keyElem) { + keyElem.setAttribute( + "placeholder", + TorStrings.onionServices.authPrompt.keyPlaceholder + ); + this._boundOnKeyFieldKeyPress = this._onKeyFieldKeyPress.bind(this); + this._boundOnKeyFieldInput = this._onKeyFieldInput.bind(this); + keyElem.addEventListener("keypress", this._boundOnKeyFieldKeyPress); + keyElem.addEventListener("input", this._boundOnKeyFieldInput); + keyElem.focus(); + } + }, + + _onPromptRemoved() { + if (this._boundOnKeyFieldKeyPress) { + let keyElem = this._getKeyElement(); + if (keyElem) { + keyElem.value = ""; + keyElem.removeEventListener( + "keypress", + this._boundOnKeyFieldKeyPress + ); + this._boundOnKeyFieldKeyPress = undefined; + keyElem.removeEventListener("input", this._boundOnKeyFieldInput); + this._boundOnKeyFieldInput = undefined; + } + } + }, + + _onKeyFieldKeyPress(aEvent) { + if (aEvent.keyCode == aEvent.DOM_VK_RETURN) { + this._onDone(); + } else if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) { + this._prompt.remove(); + this._onCancel(); + } + }, + + _onKeyFieldInput(aEvent) { + this._showWarning(undefined); // Remove the warning. + }, + + async _onDone() { + let keyElem = this._getKeyElement(); + if (!keyElem) { + return; + } + + let base64key = this._keyToBase64(keyElem.value); + if (!base64key) { + this._showWarning(TorStrings.onionServices.authPrompt.invalidKey); + return; + } + + this._prompt.remove(); + + // Use Torbutton's controller module to add the private key to Tor. + let controllerFailureMsg = + TorStrings.onionServices.authPrompt.failedToSetKey; + try { + let { controller } = ChromeUtils.import( + "resource://torbutton/modules/tor-control-port.js" + ); + let torController = await controller(); + // ^(subdomain.)*onionserviceid.onion$ (case-insensitive) + const onionServiceIdRegExp = /^(.*.)*(?<onionServiceId>[a-z2-7]{56}).onion$/i; + // match() will return null on bad match, causing throw + const onionServiceId = this._onionHostname + .match(onionServiceIdRegExp) + .groups.onionServiceId.toLowerCase(); + + let checkboxElem = this._getCheckboxElement(); + let isPermanent = checkboxElem && checkboxElem.checked; + torController + .onionAuthAdd(onionServiceId, base64key, isPermanent) + .then(aResponse => { + // Success! Reload the page. + this._browser.sendMessageToActor( + "Browser:Reload", + {}, + "BrowserTab" + ); + }) + .catch(aError => { + if (aError.torMessage) { + this.show(aError.torMessage); + } else { + console.error(controllerFailureMsg, aError); + this.show(controllerFailureMsg); + } + }); + } catch (e) { + console.error(controllerFailureMsg, e); + this.show(controllerFailureMsg); + } + }, + + _onCancel() { + // Arrange for an error page to be displayed: + // we build a short script calling docShell.displayError() + // and we pass it as a data: URI to loadFrameScript(), + // which runs it in the content frame which triggered + // this authentication prompt. + const failedURI = this._failedURI.spec; + const errorCode = + this._reasonForPrompt === OnionAuthUtil.topic.clientAuthMissing + ? Cr.NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH + : Cr.NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH; + const io = + 'ChromeUtils.import("resource://gre/modules/Services.jsm").Services.io'; + + this._browser.messageManager.loadFrameScript( + `data:application/javascript,${encodeURIComponent( + `docShell.displayLoadError(${errorCode}, ${io}.newURI(${JSON.stringify( + failedURI + )}), undefined, undefined);` + )}`, + false + ); + }, + + _getKeyElement() { + let xulDoc = this._browser.ownerDocument; + return xulDoc.getElementById(OnionAuthUtil.domid.keyElement); + }, + + _getCheckboxElement() { + let xulDoc = this._browser.ownerDocument; + return xulDoc.getElementById(OnionAuthUtil.domid.checkboxElement); + }, + + _showWarning(aWarningMessage) { + let xulDoc = this._browser.ownerDocument; + let warningElem = xulDoc.getElementById( + OnionAuthUtil.domid.warningElement + ); + let keyElem = this._getKeyElement(); + if (warningElem) { + if (aWarningMessage) { + warningElem.textContent = aWarningMessage; + warningElem.removeAttribute("hidden"); + if (keyElem) { + keyElem.className = "invalid"; + } + } else { + warningElem.setAttribute("hidden", "true"); + if (keyElem) { + keyElem.className = ""; + } + } + } + }, + + // Returns undefined if the key is the wrong length or format. + _keyToBase64(aKeyString) { + if (!aKeyString) { + return undefined; + } + + let base64key; + if (aKeyString.length == 52) { + // The key is probably base32-encoded. Attempt to decode. + // Although base32 specifies uppercase letters, we accept lowercase + // as well because users may type in lowercase or copy a key out of + // a tor onion-auth file (which uses lowercase). + let rawKey; + try { + rawKey = CommonUtils.decodeBase32(aKeyString.toUpperCase()); + } catch (e) {} + + if (rawKey) { + try { + base64key = btoa(rawKey); + } catch (e) {} + } + } else if ( + aKeyString.length == 44 && + /^[a-zA-Z0-9+/]*=*$/.test(aKeyString) + ) { + // The key appears to be a correctly formatted base64 value. If not, + // tor will return an error when we try to add the key via the + // control port. + base64key = aKeyString; + } + + return base64key; + }, + }; + + let retval = { + init() { + Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthMissing); + Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthIncorrect); + }, + + uninit() { + Services.obs.removeObserver(this, OnionAuthUtil.topic.clientAuthMissing); + Services.obs.removeObserver( + this, + OnionAuthUtil.topic.clientAuthIncorrect + ); + }, + + // aSubject is the DOM Window or browser where the prompt should be shown. + // aData contains the .onion name. + observe(aSubject, aTopic, aData) { + if ( + aTopic != OnionAuthUtil.topic.clientAuthMissing && + aTopic != OnionAuthUtil.topic.clientAuthIncorrect + ) { + return; + } + + let browser; + if (aSubject instanceof Ci.nsIDOMWindow) { + let contentWindow = aSubject.QueryInterface(Ci.nsIDOMWindow); + browser = contentWindow.docShell.chromeEventHandler; + } else { + browser = aSubject.QueryInterface(Ci.nsIBrowser); + } + + if (!gBrowser.browsers.some(aBrowser => aBrowser == browser)) { + return; // This window does not contain the subject browser; ignore. + } + + let failedURI = browser.currentURI; + let authPrompt = new OnionServicesAuthPrompt( + browser, + failedURI, + aTopic, + aData + ); + authPrompt.show(undefined); + }, + }; + + return retval; +})(); /* OnionAuthPrompt */ + +Object.defineProperty(this, "OnionAuthPrompt", { + value: OnionAuthPrompt, + enumerable: true, + writable: false, +}); diff --git a/browser/components/onionservices/content/authUtil.jsm b/browser/components/onionservices/content/authUtil.jsm new file mode 100644 index 000000000000..7157acf2e11d --- /dev/null +++ b/browser/components/onionservices/content/authUtil.jsm @@ -0,0 +1,27 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +var EXPORTED_SYMBOLS = ["OnionAuthUtil"]; + +var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +const OnionAuthUtil = { + topic: { + clientAuthMissing: "tor-onion-services-clientauth-missing", + clientAuthIncorrect: "tor-onion-services-clientauth-incorrect", + }, + message: { + authPromptCanceled: "Tor:OnionServicesAuthPromptCanceled", + }, + domid: { + anchor: "tor-clientauth-notification-icon", + notification: "tor-clientauth", + description: "tor-clientauth-notification-desc", + learnMore: "tor-clientauth-notification-learnmore", + onionNameSpan: "tor-clientauth-notification-onionname", + keyElement: "tor-clientauth-notification-key", + warningElement: "tor-clientauth-warning", + checkboxElement: "tor-clientauth-persistkey-checkbox", + }, +}; diff --git a/browser/components/onionservices/content/netError/browser.svg b/browser/components/onionservices/content/netError/browser.svg new file mode 100644 index 000000000000..1359679f7171 --- /dev/null +++ b/browser/components/onionservices/content/netError/browser.svg @@ -0,0 +1,3 @@ +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="m49 6h-37.5c-1.98912 0-3.89678.79018-5.3033 2.1967s-2.1967 3.3142-2.1967 5.3033v33.75c0 1.9891.79018 3.8968 2.1967 5.3033s3.31418 2.1967 5.3033 2.1967h37.5c1.9891 0 3.8968-.7902 5.3033-2.1967s2.1967-3.3142 2.1967-5.3033v-33.75c0-1.9891-.7902-3.89678-2.1967-5.3033s-3.3142-2.1967-5.3033-2.1967zm-38.0625 4.6875h38.625l2.25 2.25v8.0625h-43.125v-8.0625zm38.625 39.375h-38.625l-2.25-2.25v-22.125h43.125v22.125z"/> +</svg> diff --git a/browser/components/onionservices/content/netError/network.svg b/browser/components/onionservices/content/netError/network.svg new file mode 100644 index 000000000000..68610e30bfca --- /dev/null +++ b/browser/components/onionservices/content/netError/network.svg @@ -0,0 +1,3 @@ +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="m30 1.875c-7.4592 0-14.6129 2.96316-19.8874 8.2376-5.27444 5.2745-8.2376 12.4282-8.2376 19.8874s2.96316 14.6129 8.2376 19.8874c5.2745 5.2744 12.4282 8.2376 19.8874 8.2376s14.6129-2.9632 19.8874-8.2376c5.2744-5.2745 8.2376-12.4282 8.2376-19.8874s-2.9632-14.6129-8.2376-19.8874c-5.2745-5.27444-12.4282-8.2376-19.8874-8.2376zm9.1762 6.5625c3.8504 1.6533 7.1876 4.3079 9.6646 7.6877 2.477 3.3799 4.0034 7.3615 4.4205 11.531h-8.35 [...] +</svg> diff --git a/browser/components/onionservices/content/netError/onionNetError.css b/browser/components/onionservices/content/netError/onionNetError.css new file mode 100644 index 000000000000..f43817e9a569 --- /dev/null +++ b/browser/components/onionservices/content/netError/onionNetError.css @@ -0,0 +1,70 @@ +/* Copyright (c) 2020, The Tor Project, Inc. */ + +#onionErrorDiagramContainer { + margin: 0px auto 40px 0px; + /* 3 icons 64px wide each seperated by a 64px gap */ + width: 384px; + display: grid; + grid-row-gap: 15px; + grid-column-gap: 64px; + grid-template-columns: 1fr 1fr 1fr; +} + +#onionErrorDiagramContainer > div { + margin: auto; + position: relative; /* needed to allow overlay of the ok or error icon */ +} + +.onionErrorImage { + width: 64px; + height: 64px; + background-size: 64px 64px; + background-position: center; + background-repeat: no-repeat; + -moz-context-properties: fill; + fill: var(--in-content-icon-color); + opacity: 50%; +} + +.onionErrorImage[status] { + opacity: 100%; +} + +#onionErrorBrowserImage { + background-image: url("browser.svg"); +} + +#onionErrorNetworkImage { + background-image: url("network.svg"); +} + +#onionErrorOnionSiteImage { + background-image: url("onionsite.svg"); +} + +/* rules to support overlay of the ok or error icon */ +.onionErrorImage[status]::after { + content: " "; + position: absolute; + left: -8px; + top: calc((64px - 24px) / 2); + width: 24px; + height: 24px; + -moz-context-properties: fill; + fill: var(--in-content-page-background); + + background-repeat: no-repeat; + background-position: center; + border: 3px solid var(--in-content-page-background); + border-radius: 50%; +} + +.onionErrorImage[status="ok"]::after { + background-color: var(--in-content-icon-color); + background-image: url("chrome://global/skin/icons/check.svg"); +} + +.onionErrorImage[status="error"]::after { + background-color: var(--warning-color); + background-image: url("chrome://global/skin/icons/close.svg"); +} diff --git a/browser/components/onionservices/content/netError/onionNetError.js b/browser/components/onionservices/content/netError/onionNetError.js new file mode 100644 index 000000000000..aee0ba776619 --- /dev/null +++ b/browser/components/onionservices/content/netError/onionNetError.js @@ -0,0 +1,241 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +/* eslint-env mozilla/frame-script */ + +var OnionServicesAboutNetError = { + _selector: { + textContainer: "div#text-container", + header: ".title-text", + longDesc: "#errorLongDesc", + learnMoreContainer: "#learnMoreContainer", + learnMoreLink: "#learnMoreLink", + contentContainer: "#errorLongContent", + tryAgainButtonContainer: "#netErrorButtonContainer", + }, + _status: { + ok: "ok", + error: "error", + }, + + _diagramInfoMap: undefined, + + // Public functions (called from outside this file). + // + // This initPage() function may need to be updated if the structure of + // browser/base/content/aboutNetError.xhtml changes. Specifically, it + // references the following elements: + // query string parameter e + // class title-text + // id errorLongDesc + // id learnMoreContainer + // id learnMoreLink + // id errorLongContent + initPage(aDoc) { + const searchParams = new URLSearchParams(aDoc.documentURI.split("?")[1]); + const err = searchParams.get("e"); + + const errPrefix = "onionServices."; + const errName = err.substring(errPrefix.length); + + this._strings = RPMGetTorStrings(); + + const stringsObj = this._strings[errName]; + if (!stringsObj) { + return; + } + + this._insertStylesheet(aDoc); + + const pageTitle = stringsObj.pageTitle; + const header = stringsObj.header; + const longDescription = stringsObj.longDescription; // optional + const learnMoreURL = stringsObj.learnMoreURL; + + if (pageTitle) { + aDoc.title = pageTitle; + } + + if (header) { + const headerElem = aDoc.querySelector(this._selector.header); + if (headerElem) { + headerElem.textContent = header; + } + } + + const ld = aDoc.querySelector(this._selector.longDesc); + if (ld) { + if (longDescription) { + const hexErr = this._hexErrorFromName(errName); + ld.textContent = longDescription.replace("%S", hexErr); + } else { + // This onion service error does not have a long description. Since + // it is set to a generic error string by the code in + // browser/base/content/aboutNetError.js, hide it here. + ld.style.display = "none"; + } + } + + if (learnMoreURL) { + const lmContainer = aDoc.querySelector(this._selector.learnMoreContainer); + if (lmContainer) { + lmContainer.style.display = "block"; + } + const lmLink = lmContainer.querySelector(this._selector.learnMoreLink); + if (lmLink) { + lmLink.setAttribute("href", learnMoreURL); + } + } + + // Remove the "Try Again" button if the user made a typo in the .onion + // address since it is not useful in that case. + if (errName === "badAddress") { + const tryAgainButton = aDoc.querySelector( + this._selector.tryAgainButtonContainer + ); + if (tryAgainButton) { + tryAgainButton.style.display = "none"; + } + } + + this._insertDiagram(aDoc, errName); + }, // initPage() + + _insertStylesheet(aDoc) { + const url = + "chrome://browser/content/onionservices/netError/onionNetError.css"; + let linkElem = aDoc.createElement("link"); + linkElem.rel = "stylesheet"; + linkElem.href = url; + linkElem.type = "text/css"; + aDoc.head.appendChild(linkElem); + }, + + _insertDiagram(aDoc, aErrorName) { + // The onion error diagram consists of a grid of div elements. + // The first row contains three images (Browser, Network, Onionsite) and + // the second row contains labels for the images that are in the first row. + // The _diagramInfoMap describes for each type of onion service error + // whether a small ok or error status icon is overlaid on top of the main + // Browser/Network/Onionsite images. + if (!this._diagramInfoMap) { + this._diagramInfoMap = new Map(); + this._diagramInfoMap.set("descNotFound", { + browser: this._status.ok, + network: this._status.ok, + onionSite: this._status.error, + }); + this._diagramInfoMap.set("descInvalid", { + browser: this._status.ok, + network: this._status.error, + }); + this._diagramInfoMap.set("introFailed", { + browser: this._status.ok, + network: this._status.error, + }); + this._diagramInfoMap.set("rendezvousFailed", { + browser: this._status.ok, + network: this._status.error, + }); + this._diagramInfoMap.set("clientAuthMissing", { + browser: this._status.error, + }); + this._diagramInfoMap.set("clientAuthIncorrect", { + browser: this._status.error, + }); + this._diagramInfoMap.set("badAddress", { + browser: this._status.error, + }); + this._diagramInfoMap.set("introTimedOut", { + browser: this._status.ok, + network: this._status.error, + }); + } + + const diagramInfo = this._diagramInfoMap.get(aErrorName); + + const container = this._createDiv(aDoc, "onionErrorDiagramContainer"); + const imageClass = "onionErrorImage"; + + const browserImage = this._createDiv( + aDoc, + "onionErrorBrowserImage", + imageClass, + container + ); + if (diagramInfo && diagramInfo.browser) { + browserImage.setAttribute("status", diagramInfo.browser); + } + + const networkImage = this._createDiv( + aDoc, + "onionErrorNetworkImage", + imageClass, + container + ); + if (diagramInfo && diagramInfo.network) { + networkImage.setAttribute("status", diagramInfo.network); + } + + const onionSiteImage = this._createDiv( + aDoc, + "onionErrorOnionSiteImage", + imageClass, + container + ); + if (diagramInfo && diagramInfo.onionSite) { + onionSiteImage.setAttribute("status", diagramInfo.onionSite); + } + + let labelDiv = this._createDiv(aDoc, undefined, undefined, container); + labelDiv.textContent = this._strings.errorPage.browser; + labelDiv = this._createDiv(aDoc, undefined, undefined, container); + labelDiv.textContent = this._strings.errorPage.network; + labelDiv = this._createDiv(aDoc, undefined, undefined, container); + labelDiv.textContent = this._strings.errorPage.onionSite; + + const textContainer = aDoc.querySelector(this._selector.textContainer); + textContainer?.insertBefore(container, textContainer.firstChild); + }, // _insertDiagram() + + _createDiv(aDoc, aID, aClass, aParentElem) { + const div = aDoc.createElement("div"); + if (aID) { + div.id = aID; + } + if (aClass) { + div.setAttribute("class", aClass); + } + if (aParentElem) { + aParentElem.appendChild(div); + } + + return div; + }, + + _hexErrorFromName(aErrorName) { + // We do not have access to the original Tor SOCKS error code here, so + // perform a reverse mapping from the error name. + switch (aErrorName) { + case "descNotFound": + return "0xF0"; + case "descInvalid": + return "0xF1"; + case "introFailed": + return "0xF2"; + case "rendezvousFailed": + return "0xF3"; + case "clientAuthMissing": + return "0xF4"; + case "clientAuthIncorrect": + return "0xF5"; + case "badAddress": + return "0xF6"; + case "introTimedOut": + return "0xF7"; + } + + return ""; + }, +}; diff --git a/browser/components/onionservices/content/netError/onionsite.svg b/browser/components/onionservices/content/netError/onionsite.svg new file mode 100644 index 000000000000..c1b2d7382dc9 --- /dev/null +++ b/browser/components/onionservices/content/netError/onionsite.svg @@ -0,0 +1,8 @@ +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <g fill="context-fill" fill-opacity="context-fill-opacity"> + <path clip-rule="evenodd" d="m11.25 6h37.5c1.9891 0 3.8968.79018 5.3033 2.1967s2.1967 3.3142 2.1967 5.3033v33.75c0 1.9891-.7902 3.8968-2.1967 5.3033s-3.3142 2.1967-5.3033 2.1967h-37.5c-1.98912 0-3.89678-.7902-5.3033-2.1967s-2.1967-3.3142-2.1967-5.3033v-33.75c0-1.9891.79018-3.89678 2.1967-5.3033s3.31418-2.1967 5.3033-2.1967zm-.5625 4.6875h38.625l2.25 2.25v34.875l-2.25 2.25h-38.625l-2.25-2.25v-34.875z" fill-rule="evenodd"/> + <path d="m15.9606 22c-.52 0-1.0187-.2107-1.3863-.5858-.3677-.3751-.5743-.8838-.5743-1.4142s.2066-1.0391.5743-1.4142c.3676-.3751.8663-.5858 1.3863-.5858h14.0788c.52 0 1.0187.2107 1.3863.5858.3677.3751.5743.8838.5743 1.4142s-.2066 1.0391-.5743 1.4142c-.3676.3751-.8663.5858-1.3863.5858z"/> + <path d="m44.0709 32h-28.1418c-.5116 0-1.0023-.2107-1.3641-.5858s-.565-.8838-.565-1.4142.2032-1.0391.565-1.4142.8525-.5858 1.3641-.5858h28.1418c.5116 0 1.0023.2107 1.3641.5858s.565.8838.565 1.4142-.2032 1.0391-.565 1.4142-.8525.5858-1.3641.5858z"/> + <path d="m44.0709 42h-28.1418c-.5116 0-1.0023-.2107-1.3641-.5858s-.565-.8838-.565-1.4142.2032-1.0391.565-1.4142.8525-.5858 1.3641-.5858h28.1418c.5116 0 1.0023.2107 1.3641.5858s.565.8838.565 1.4142-.2032 1.0391-.565 1.4142-.8525.5858-1.3641.5858z"/> + </g> +</svg> diff --git a/browser/components/onionservices/content/onionservices.css b/browser/components/onionservices/content/onionservices.css new file mode 100644 index 000000000000..e2621ec8266d --- /dev/null +++ b/browser/components/onionservices/content/onionservices.css @@ -0,0 +1,69 @@ +/* Copyright (c) 2020, The Tor Project, Inc. */ + +@namespace html url("http://www.w3.org/1999/xhtml"); + +html|*#tor-clientauth-notification-onionname { + font-weight: bold; +} + +html|*#tor-clientauth-notification-key { + box-sizing: border-box; + width: 100%; + margin-top: 15px; + padding: 6px; +} + +/* Start of rules adapted from + * browser/components/newtab/css/activity-stream-mac.css (linux and windows + * use the same rules). + */ +html|*#tor-clientauth-notification-key.invalid { + border: 1px solid #D70022; + box-shadow: 0 0 0 1px #D70022, 0 0 0 4px rgba(215, 0, 34, 0.3); +} + +html|*#tor-clientauth-warning { + display: inline-block; + animation: fade-up-tt 450ms; + background: #D70022; + border-radius: 2px; + color: #FFF; + inset-inline-start: 3px; + padding: 5px 12px; + position: relative; + top: 6px; + z-index: 1; +} + +html|*#tor-clientauth-warning[hidden] { + display: none; +} + +html|*#tor-clientauth-warning::before { + background: #D70022; + bottom: -8px; + content: '.'; + height: 16px; + inset-inline-start: 12px; + position: absolute; + text-indent: -999px; + top: -7px; + transform: rotate(45deg); + white-space: nowrap; + width: 16px; + z-index: -1; +} + +@keyframes fade-up-tt { + 0% { + opacity: 0; + transform: translateY(15px); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} +/* End of rules adapted from + * browser/components/newtab/css/activity-stream-mac.css + */ diff --git a/browser/components/onionservices/content/savedKeysDialog.js b/browser/components/onionservices/content/savedKeysDialog.js new file mode 100644 index 000000000000..fd8b477a395d --- /dev/null +++ b/browser/components/onionservices/content/savedKeysDialog.js @@ -0,0 +1,254 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +ChromeUtils.defineModuleGetter( + this, + "TorStrings", + "resource:///modules/TorStrings.jsm" +); + +ChromeUtils.defineModuleGetter( + this, + "controller", + "resource://torbutton/modules/tor-control-port.js" +); + +var gOnionServicesSavedKeysDialog = { + selector: { + dialog: "#onionservices-savedkeys-dialog", + intro: "#onionservices-savedkeys-intro", + tree: "#onionservices-savedkeys-tree", + onionSiteCol: "#onionservices-savedkeys-siteCol", + onionKeyCol: "#onionservices-savedkeys-keyCol", + errorIcon: "#onionservices-savedkeys-errorIcon", + errorMessage: "#onionservices-savedkeys-errorMessage", + removeButton: "#onionservices-savedkeys-remove", + removeAllButton: "#onionservices-savedkeys-removeall", + }, + + _tree: undefined, + _isBusy: false, // true when loading data, deleting a key, etc. + + // Public functions (called from outside this file). + async deleteSelectedKeys() { + this._setBusyState(true); + + const indexesToDelete = []; + const count = this._tree.view.selection.getRangeCount(); + for (let i = 0; i < count; ++i) { + const minObj = {}; + const maxObj = {}; + this._tree.view.selection.getRangeAt(i, minObj, maxObj); + for (let idx = minObj.value; idx <= maxObj.value; ++idx) { + indexesToDelete.push(idx); + } + } + + if (indexesToDelete.length) { + const controllerFailureMsg = + TorStrings.onionServices.authPreferences.failedToRemoveKey; + try { + const torController = await controller(); + + // Remove in reverse index order to avoid issues caused by index changes. + for (let i = indexesToDelete.length - 1; i >= 0; --i) { + await this._deleteOneKey(torController, indexesToDelete[i]); + } + } catch (e) { + if (e.torMessage) { + this._showError(e.torMessage); + } else { + this._showError(controllerFailureMsg); + } + } + } + + this._setBusyState(false); + }, + + async deleteAllKeys() { + this._tree.view.selection.selectAll(); + await this.deleteSelectedKeys(); + }, + + updateButtonsState() { + const haveSelection = this._tree.view.selection.getRangeCount() > 0; + const dialog = document.querySelector(this.selector.dialog); + const removeSelectedBtn = dialog.querySelector(this.selector.removeButton); + removeSelectedBtn.disabled = this._isBusy || !haveSelection; + const removeAllBtn = dialog.querySelector(this.selector.removeAllButton); + removeAllBtn.disabled = this._isBusy || this.rowCount === 0; + }, + + // Private functions. + _onLoad() { + document.mozSubdialogReady = this._init(); + }, + + async _init() { + await this._populateXUL(); + + window.addEventListener("keypress", this._onWindowKeyPress.bind(this)); + + // We don't use await here because we want _loadSavedKeys() to run + // in the background and not block loading of this dialog. + this._loadSavedKeys(); + }, + + async _populateXUL() { + const dialog = document.querySelector(this.selector.dialog); + const authPrefStrings = TorStrings.onionServices.authPreferences; + dialog.setAttribute("title", authPrefStrings.dialogTitle); + + let elem = dialog.querySelector(this.selector.intro); + elem.textContent = authPrefStrings.dialogIntro; + + elem = dialog.querySelector(this.selector.onionSiteCol); + elem.setAttribute("label", authPrefStrings.onionSite); + + elem = dialog.querySelector(this.selector.onionKeyCol); + elem.setAttribute("label", authPrefStrings.onionKey); + + elem = dialog.querySelector(this.selector.removeButton); + elem.setAttribute("label", authPrefStrings.remove); + + elem = dialog.querySelector(this.selector.removeAllButton); + elem.setAttribute("label", authPrefStrings.removeAll); + + this._tree = dialog.querySelector(this.selector.tree); + }, + + async _loadSavedKeys() { + const controllerFailureMsg = + TorStrings.onionServices.authPreferences.failedToGetKeys; + this._setBusyState(true); + + try { + this._tree.view = this; + + const torController = await controller(); + const keyInfoList = await torController.onionAuthViewKeys(); + if (keyInfoList) { + // Filter out temporary keys. + this._keyInfoList = keyInfoList.filter(aKeyInfo => { + if (!aKeyInfo.Flags) { + return false; + } + + const flags = aKeyInfo.Flags.split(","); + return flags.includes("Permanent"); + }); + + // Sort by the .onion address. + this._keyInfoList.sort((aObj1, aObj2) => { + const hsAddr1 = aObj1.hsAddress.toLowerCase(); + const hsAddr2 = aObj2.hsAddress.toLowerCase(); + if (hsAddr1 < hsAddr2) { + return -1; + } + return hsAddr1 > hsAddr2 ? 1 : 0; + }); + } + + // Render the tree content. + this._tree.rowCountChanged(0, this.rowCount); + } catch (e) { + if (e.torMessage) { + this._showError(e.torMessage); + } else { + this._showError(controllerFailureMsg); + } + } + + this._setBusyState(false); + }, + + // This method may throw; callers should catch errors. + async _deleteOneKey(aTorController, aIndex) { + const keyInfoObj = this._keyInfoList[aIndex]; + await aTorController.onionAuthRemove(keyInfoObj.hsAddress); + this._tree.view.selection.clearRange(aIndex, aIndex); + this._keyInfoList.splice(aIndex, 1); + this._tree.rowCountChanged(aIndex + 1, -1); + }, + + _setBusyState(aIsBusy) { + this._isBusy = aIsBusy; + this.updateButtonsState(); + }, + + _onWindowKeyPress(event) { + if (event.keyCode === KeyEvent.DOM_VK_ESCAPE) { + window.close(); + } else if (event.keyCode === KeyEvent.DOM_VK_DELETE) { + this.deleteSelectedKeys(); + } + }, + + _showError(aMessage) { + const dialog = document.querySelector(this.selector.dialog); + const errorIcon = dialog.querySelector(this.selector.errorIcon); + errorIcon.style.visibility = aMessage ? "visible" : "hidden"; + const errorDesc = dialog.querySelector(this.selector.errorMessage); + errorDesc.textContent = aMessage ? aMessage : ""; + }, + + // XUL tree widget view implementation. + get rowCount() { + return this._keyInfoList ? this._keyInfoList.length : 0; + }, + + getCellText(aRow, aCol) { + let val = ""; + if (this._keyInfoList && aRow < this._keyInfoList.length) { + const keyInfo = this._keyInfoList[aRow]; + if (aCol.id.endsWith("-siteCol")) { + val = keyInfo.hsAddress; + } else if (aCol.id.endsWith("-keyCol")) { + val = keyInfo.typeAndKey; + // Omit keyType because it is always "x25519". + const idx = val.indexOf(":"); + if (idx > 0) { + val = val.substring(idx + 1); + } + } + } + + return val; + }, + + isSeparator(index) { + return false; + }, + + isSorted() { + return false; + }, + + isContainer(index) { + return false; + }, + + setTree(tree) {}, + + getImageSrc(row, column) {}, + + getCellValue(row, column) {}, + + cycleHeader(column) {}, + + getRowProperties(row) { + return ""; + }, + + getColumnProperties(column) { + return ""; + }, + + getCellProperties(row, column) { + return ""; + }, +}; + +window.addEventListener("load", () => gOnionServicesSavedKeysDialog._onLoad()); diff --git a/browser/components/onionservices/content/savedKeysDialog.xhtml b/browser/components/onionservices/content/savedKeysDialog.xhtml new file mode 100644 index 000000000000..3db9bb05ea82 --- /dev/null +++ b/browser/components/onionservices/content/savedKeysDialog.xhtml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<!-- Copyright (c) 2020, The Tor Project, Inc. --> + +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css" type="text/css"?> + +<window id="onionservices-savedkeys-dialog" + windowtype="OnionServices:SavedKeys" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + style="width: 45em;"> + + <script src="chrome://browser/content/onionservices/savedKeysDialog.js"/> + + <vbox id="onionservices-savedkeys" class="contentPane" flex="1"> + <label id="onionservices-savedkeys-intro" + control="onionservices-savedkeys-tree"/> + <separator class="thin"/> + <tree id="onionservices-savedkeys-tree" flex="1" hidecolumnpicker="true" + width="750" + style="height: 20em;" + onselect="gOnionServicesSavedKeysDialog.updateButtonsState();"> + <treecols> + <treecol id="onionservices-savedkeys-siteCol" flex="1" persist="width"/> + <splitter class="tree-splitter"/> + <treecol id="onionservices-savedkeys-keyCol" flex="1" persist="width"/> + </treecols> + <treechildren/> + </tree> + <hbox id="onionservices-savedkeys-errorContainer" align="baseline" flex="1"> + <image id="onionservices-savedkeys-errorIcon"/> + <description id="onionservices-savedkeys-errorMessage" flex="1"/> + </hbox> + <separator class="thin"/> + <hbox id="onionservices-savedkeys-buttons"> + <button id="onionservices-savedkeys-remove" disabled="true" + oncommand="gOnionServicesSavedKeysDialog.deleteSelectedKeys();"/> + <button id="onionservices-savedkeys-removeall" + oncommand="gOnionServicesSavedKeysDialog.deleteAllKeys();"/> + </hbox> + </vbox> +</window> diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn new file mode 100644 index 000000000000..9d6ce88d1841 --- /dev/null +++ b/browser/components/onionservices/jar.mn @@ -0,0 +1,9 @@ +browser.jar: + content/browser/onionservices/authPreferences.css (content/authPreferences.css) + content/browser/onionservices/authPreferences.js (content/authPreferences.js) + content/browser/onionservices/authPrompt.js (content/authPrompt.js) + content/browser/onionservices/authUtil.jsm (content/authUtil.jsm) + content/browser/onionservices/netError/ (content/netError/*) + content/browser/onionservices/onionservices.css (content/onionservices.css) + content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js) + content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml) diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build new file mode 100644 index 000000000000..2661ad7cb9f3 --- /dev/null +++ b/browser/components/onionservices/moz.build @@ -0,0 +1 @@ +JAR_MANIFESTS += ["jar.mn"] diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml index cb8716f48a50..729470b683af 100644 --- a/browser/components/preferences/preferences.xhtml +++ b/browser/components/preferences/preferences.xhtml @@ -15,6 +15,7 @@ <?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?> <?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?> <?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?> +<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css"?>
<!DOCTYPE html [ <!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd"> diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml index 8b2a1c99390d..37f77e3b70da 100644 --- a/browser/components/preferences/privacy.inc.xhtml +++ b/browser/components/preferences/privacy.inc.xhtml @@ -526,6 +526,8 @@ <label id="fips-desc" hidden="true" data-l10n-id="forms-master-pw-fips-desc"></label> </groupbox>
+#include ../onionservices/content/authPreferences.inc.xhtml + <!-- The form autofill section is inserted in to this box after the form autofill extension has initialized. --> <groupbox id="formAutofillGroupBox" diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js index b1413b208521..d584fb5e4624 100644 --- a/browser/components/preferences/privacy.js +++ b/browser/components/preferences/privacy.js @@ -48,6 +48,12 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() { } });
+XPCOMUtils.defineLazyScriptGetter( + this, + ["OnionServicesAuthPreferences"], + "chrome://browser/content/onionservices/authPreferences.js" +); + // TODO: module import via ChromeUtils.defineModuleGetter XPCOMUtils.defineLazyScriptGetter( this, @@ -528,6 +534,7 @@ var gPrivacyPane = { this.trackingProtectionReadPrefs(); this.networkCookieBehaviorReadPrefs(); this._initTrackingProtectionExtensionControl(); + OnionServicesAuthPreferences.init(); this._initSecurityLevel();
Services.telemetry.setEventRecordingEnabled("pwmgr", true); diff --git a/browser/themes/shared/aboutNetError.css b/browser/themes/shared/aboutNetError.css index 73f9d2760a15..438cc5782291 100644 --- a/browser/themes/shared/aboutNetError.css +++ b/browser/themes/shared/aboutNetError.css @@ -8,6 +8,13 @@ body { --warning-color: #ffa436; }
+body.onionAuthPrompt { + background: white; +} +.onionAuthPrompt > * { + display: none; +} + @media (prefers-color-scheme: dark) { body { --warning-color: #ffbd4f; diff --git a/browser/themes/shared/notification-icons.css b/browser/themes/shared/notification-icons.css index a24538ebd5dd..3422aa2f6dff 100644 --- a/browser/themes/shared/notification-icons.css +++ b/browser/themes/shared/notification-icons.css @@ -126,6 +126,8 @@ list-style-image: url(chrome://browser/skin/notification-icons/persistent-storage.svg); }
+.popup-notification-icon[popupid="tor-clientauth"], +.tor-clientauth-icon, #password-notification-icon { list-style-image: url(chrome://browser/skin/login.svg); } diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 1c38a851c5ec..8c1c3970ca84 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -3785,6 +3785,7 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI, } } else { // Errors requiring simple formatting + bool isOnionAuthError = false; switch (aError) { case NS_ERROR_MALFORMED_URI: // URI is malformed @@ -3866,10 +3867,46 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI, // HTTP/2 or HTTP/3 stack detected a protocol error error = "networkProtocolError"; break; - + case NS_ERROR_TOR_ONION_SVC_NOT_FOUND: + error = "onionServices.descNotFound"; + break; + case NS_ERROR_TOR_ONION_SVC_IS_INVALID: + error = "onionServices.descInvalid"; + break; + case NS_ERROR_TOR_ONION_SVC_INTRO_FAILED: + error = "onionServices.introFailed"; + break; + case NS_ERROR_TOR_ONION_SVC_REND_FAILED: + error = "onionServices.rendezvousFailed"; + break; + case NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH: + error = "onionServices.clientAuthMissing"; + isOnionAuthError = true; + break; + case NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH: + error = "onionServices.clientAuthIncorrect"; + isOnionAuthError = true; + break; + case NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS: + error = "onionServices.badAddress"; + break; + case NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT: + error = "onionServices.introTimedOut"; + break; default: break; } + + // The presence of aFailedChannel indicates that we arrived here due to a + // failed connection attempt. Note that we will arrive here a second time + // if the user cancels the Tor client auth prompt, but in that case we + // will not have a failed channel and therefore we will not prompt again. + if (isOnionAuthError && aFailedChannel) { + // Display about:neterror with a style emulating about:blank while the + // Tor client auth prompt is open. Do not use about:blank directly: it + // will mess with the failed channel information persistence! + cssClass.AssignLiteral("onionAuthPrompt"); + } }
nsresult delegateErrorCode = aError; @@ -3956,6 +3993,20 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI, nsAutoString str; rv = stringBundle->FormatStringFromName(errorDescriptionID, formatStrs, str); + if (NS_FAILED(rv)) { + // As a fallback, check torbutton.properties for the error string. + const char bundleURL[] = "chrome://torbutton/locale/torbutton.properties"; + nsCOMPtr<nsIStringBundleService> stringBundleService = + mozilla::services::GetStringBundleService(); + if (stringBundleService) { + nsCOMPtr<nsIStringBundle> tbStringBundle; + if (NS_SUCCEEDED(stringBundleService->CreateBundle( + bundleURL, getter_AddRefs(tbStringBundle)))) { + rv = tbStringBundle->FormatStringFromName(errorDescriptionID, + formatStrs, str); + } + } + } NS_ENSURE_SUCCESS(rv, rv); messageStr.Assign(str); } @@ -6351,6 +6402,7 @@ nsresult nsDocShell::FilterStatusForErrorPage( aStatus == NS_ERROR_FILE_ACCESS_DENIED || aStatus == NS_ERROR_CORRUPTED_CONTENT || aStatus == NS_ERROR_INVALID_CONTENT_ENCODING || + NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_TOR || NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_SECURITY) { // Errors to be shown for any frame return aStatus; @@ -8122,6 +8174,35 @@ nsresult nsDocShell::CreateContentViewer(const nsACString& aContentType, FireOnLocationChange(this, aRequest, mCurrentURI, locationFlags); }
+ // Arrange to show a Tor onion service client authentication prompt if + // appropriate. + if ((mLoadType == LOAD_ERROR_PAGE) && failedChannel) { + nsresult status = NS_OK; + if (NS_SUCCEEDED(failedChannel->GetStatus(&status)) && + ((status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH) || + (status == NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH))) { + nsAutoCString onionHost; + failedURI->GetHost(onionHost); + const char* topic = (status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH) + ? "tor-onion-services-clientauth-missing" + : "tor-onion-services-clientauth-incorrect"; + if (XRE_IsContentProcess()) { + nsCOMPtr<nsIBrowserChild> browserChild = GetBrowserChild(); + if (browserChild) { + static_cast<BrowserChild*>(browserChild.get()) + ->SendShowOnionServicesAuthPrompt(onionHost, nsCString(topic)); + } + } else { + nsCOMPtr<nsPIDOMWindowOuter> browserWin = GetWindow(); + nsCOMPtr<nsIObserverService> obsSvc = services::GetObserverService(); + if (browserWin && obsSvc) { + obsSvc->NotifyObservers(browserWin, topic, + NS_ConvertUTF8toUTF16(onionHost).get()); + } + } + } + } + return NS_OK; }
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp index 498f5e3ff98d..1293ecfd054f 100644 --- a/dom/ipc/BrowserParent.cpp +++ b/dom/ipc/BrowserParent.cpp @@ -3920,6 +3920,27 @@ mozilla::ipc::IPCResult BrowserParent::RecvShowCanvasPermissionPrompt( return IPC_OK(); }
+mozilla::ipc::IPCResult BrowserParent::RecvShowOnionServicesAuthPrompt( + const nsCString& aOnionName, const nsCString& aTopic) { + nsCOMPtr<nsIBrowser> browser = + mFrameElement ? mFrameElement->AsBrowser() : nullptr; + if (!browser) { + // If the tab is being closed, the browser may not be available. + // In this case we can ignore the request. + return IPC_OK(); + } + nsCOMPtr<nsIObserverService> os = services::GetObserverService(); + if (!os) { + return IPC_FAIL_NO_REASON(this); + } + nsresult rv = os->NotifyObservers(browser, aTopic.get(), + NS_ConvertUTF8toUTF16(aOnionName).get()); + if (NS_FAILED(rv)) { + return IPC_FAIL_NO_REASON(this); + } + return IPC_OK(); +} + mozilla::ipc::IPCResult BrowserParent::RecvVisitURI(nsIURI* aURI, nsIURI* aLastVisitedURI, const uint32_t& aFlags) { diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h index 755168b6dbd0..264ac1948e70 100644 --- a/dom/ipc/BrowserParent.h +++ b/dom/ipc/BrowserParent.h @@ -745,6 +745,9 @@ class BrowserParent final : public PBrowserParent, mozilla::ipc::IPCResult RecvShowCanvasPermissionPrompt( const nsCString& aOrigin, const bool& aHideDoorHanger);
+ mozilla::ipc::IPCResult RecvShowOnionServicesAuthPrompt( + const nsCString& aOnionName, const nsCString& aTopic); + mozilla::ipc::IPCResult RecvSetSystemFont(const nsCString& aFontName); mozilla::ipc::IPCResult RecvGetSystemFont(nsCString* aFontName);
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl index 9447427f3980..5fa2f666756a 100644 --- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -598,6 +598,15 @@ parent: async RequestPointerCapture(uint32_t aPointerId) returns (bool aSuccess); async ReleasePointerCapture(uint32_t aPointerId);
+ /** + * This function is used to notify the parent that it should display a + * onion services client authentication prompt. + * + * @param aOnionHost The hostname of the .onion that needs authentication. + * @param aTopic The reason for the prompt. + */ + async ShowOnionServicesAuthPrompt(nsCString aOnionHost, nsCString aTopic); + child: async NativeSynthesisResponse(uint64_t aObserverId, nsCString aResponse); async UpdateSHistory(); diff --git a/js/xpconnect/src/xpc.msg b/js/xpconnect/src/xpc.msg index 1995b1445da1..27202b657805 100644 --- a/js/xpconnect/src/xpc.msg +++ b/js/xpconnect/src/xpc.msg @@ -246,6 +246,16 @@ XPC_MSG_DEF(NS_ERROR_FINGERPRINTING_URI , "The URI is fingerprinti XPC_MSG_DEF(NS_ERROR_CRYPTOMINING_URI , "The URI is cryptomining") XPC_MSG_DEF(NS_ERROR_SOCIALTRACKING_URI , "The URI is social tracking")
+/* Codes related to Tor */ +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_NOT_FOUND , "Tor onion service descriptor cannot be found") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_IS_INVALID , "Tor onion service descriptor is invalid") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED , "Tor onion service introduction failed") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_REND_FAILED , "Tor onion service rendezvous failed") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH, "Tor onion service missing client authorization") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH , "Tor onion service wrong client authorization") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS , "Tor onion service bad address") +XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT , "Tor onion service introduction timed out") + /* Profile manager error codes */ XPC_MSG_DEF(NS_ERROR_DATABASE_CHANGED , "Flushing the profiles to disk would have overwritten changes made elsewhere.")
diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp index 2e3241a50a91..4371def2a08c 100644 --- a/netwerk/base/nsSocketTransport2.cpp +++ b/netwerk/base/nsSocketTransport2.cpp @@ -216,6 +216,12 @@ nsresult ErrorAccordingToNSPR(PRErrorCode errorCode) { default: if (psm::IsNSSErrorCode(errorCode)) { rv = psm::GetXPCOMFromNSSError(errorCode); + } else { + // If we received a Tor extended error code via SOCKS, pass it through. + nsresult res = nsresult(errorCode); + if (NS_ERROR_GET_MODULE(res) == NS_ERROR_MODULE_TOR) { + rv = res; + } } break;
diff --git a/netwerk/socket/nsSOCKSIOLayer.cpp b/netwerk/socket/nsSOCKSIOLayer.cpp index 119a3cbf4c51..f9fc29552ace 100644 --- a/netwerk/socket/nsSOCKSIOLayer.cpp +++ b/netwerk/socket/nsSOCKSIOLayer.cpp @@ -979,6 +979,55 @@ PRStatus nsSOCKSSocketInfo::ReadV5ConnectResponseTop() { "08, Address type not supported.")); c = PR_BAD_ADDRESS_ERROR; break; + case 0xF0: // Tor SOCKS5_HS_NOT_FOUND + LOGERROR( + ("socks5: connect failed: F0," + " Tor onion service descriptor can not be found.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_NOT_FOUND); + break; + case 0xF1: // Tor SOCKS5_HS_IS_INVALID + LOGERROR( + ("socks5: connect failed: F1," + " Tor onion service descriptor is invalid.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_IS_INVALID); + break; + case 0xF2: // Tor SOCKS5_HS_INTRO_FAILED + LOGERROR( + ("socks5: connect failed: F2," + " Tor onion service introduction failed.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED); + break; + case 0xF3: // Tor SOCKS5_HS_REND_FAILED + LOGERROR( + ("socks5: connect failed: F3," + " Tor onion service rendezvous failed.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_REND_FAILED); + break; + case 0xF4: // Tor SOCKS5_HS_MISSING_CLIENT_AUTH + LOGERROR( + ("socks5: connect failed: F4," + " Tor onion service missing client authorization.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH); + break; + case 0xF5: // Tor SOCKS5_HS_BAD_CLIENT_AUTH + LOGERROR( + ("socks5: connect failed: F5," + " Tor onion service wrong client authorization.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH); + break; + case 0xF6: // Tor SOCKS5_HS_BAD_ADDRESS + LOGERROR( + ("socks5: connect failed: F6," + " Tor onion service bad address.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS); + break; + case 0xF7: // Tor SOCKS5_HS_INTRO_TIMEDOUT + LOGERROR( + ("socks5: connect failed: F7," + " Tor onion service introduction timed out.")); + c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT); + break; + default: LOGERROR(("socks5: connect failed.")); break; diff --git a/toolkit/modules/PopupNotifications.jsm b/toolkit/modules/PopupNotifications.jsm index de7fc8537c55..9242a2975681 100644 --- a/toolkit/modules/PopupNotifications.jsm +++ b/toolkit/modules/PopupNotifications.jsm @@ -410,6 +410,8 @@ PopupNotifications.prototype = { * will be dismissed instead of removed after running the callback. * - [optional] disabled (boolean): If this is true, the button * will be disabled. + * - [optional] leaveOpen (boolean): If this is true, the notification + * will not be removed after running the callback. * If null, the notification will have a default "OK" action button * that can be used to dismiss the popup and secondaryActions will be ignored. * @param secondaryActions @@ -1908,6 +1910,10 @@ PopupNotifications.prototype = { this._dismiss(); return; } + + if (action.leaveOpen) { + return; + } }
this._remove(notification); diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm index 6b1da814765f..ec48d9276bde 100644 --- a/toolkit/modules/RemotePageAccessManager.jsm +++ b/toolkit/modules/RemotePageAccessManager.jsm @@ -95,6 +95,7 @@ let RemotePageAccessManager = { RPMAddToHistogram: ["*"], RPMGetInnerMostURI: ["*"], RPMGetHttpResponseHeader: ["*"], + RPMGetTorStrings: ["*"], RPMSendQuery: ["ShouldShowTorConnect"], }, "about:plugins": { diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js index 881f8386b3a1..fd86b1ea487c 100644 --- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js +++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js @@ -40,5 +40,6 @@ module.exports = { RPMGetHttpResponseHeader: false, RPMTryPingSecureWWWLink: false, RPMOpenSecureWWWLink: false, + RPMGetTorStrings: false, }, }; diff --git a/xpcom/base/ErrorList.py b/xpcom/base/ErrorList.py index b1f9384c3e23..5ebf1a8f678a 100755 --- a/xpcom/base/ErrorList.py +++ b/xpcom/base/ErrorList.py @@ -89,6 +89,7 @@ modules["ERRORRESULT"] = Mod(43) # Win32 system error codes, which are not mapped to a specific other value, # see Bug 1686041. modules["WIN32"] = Mod(44) +modules["TOR"] = Mod(45)
# NS_ERROR_MODULE_GENERAL should be used by modules that do not # care if return code values overlap. Callers of methods that @@ -1212,6 +1213,27 @@ with modules["ERRORRESULT"]: errors["NS_ERROR_INTERNAL_ERRORRESULT_RANGEERROR"] = FAILURE(5)
+# ======================================================================= +# 45: Tor-specific error codes. +# ======================================================================= +with modules["TOR"]: + # Tor onion service descriptor can not be found. + errors["NS_ERROR_TOR_ONION_SVC_NOT_FOUND"] = FAILURE(1) + # Tor onion service descriptor is invalid. + errors["NS_ERROR_TOR_ONION_SVC_IS_INVALID"] = FAILURE(2) + # Tor onion service introduction failed. + errors["NS_ERROR_TOR_ONION_SVC_INTRO_FAILED"] = FAILURE(3) + # Tor onion service rendezvous failed. + errors["NS_ERROR_TOR_ONION_SVC_REND_FAILED"] = FAILURE(4) + # Tor onion service missing client authorization. + errors["NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH"] = FAILURE(5) + # Tor onion service wrong client authorization. + errors["NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH"] = FAILURE(6) + # Tor onion service bad address. + errors["NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS"] = FAILURE(7) + # Tor onion service introduction timed out. + errors["NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT"] = FAILURE(8) + # ======================================================================= # 51: NS_ERROR_MODULE_GENERAL # =======================================================================
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 91f015b892fa95d299a313785a228a9e7fe9eb96 Author: Alex Catarineu acat@torproject.org AuthorDate: Thu Mar 5 22:16:39 2020 +0100
Bug 21952: Implement Onion-Location
Whenever a valid Onion-Location HTTP header (or corresponding HTML <meta> http-equiv attribute) is found in a document load, we either redirect to it (if the user opted-in via preference) or notify the presence of an onionsite alternative with a badge in the urlbar. --- browser/base/content/browser.js | 12 ++ browser/base/content/navigator-toolbox.inc.xhtml | 3 + browser/components/BrowserGlue.jsm | 13 ++ .../onionservices/OnionLocationChild.jsm | 48 ++++++ .../onionservices/OnionLocationParent.jsm | 169 +++++++++++++++++++++ .../content/onionlocation-urlbar.inc.xhtml | 10 ++ .../onionservices/content/onionlocation.css | 46 ++++++ .../onionservices/content/onionlocation.svg | 3 + .../content/onionlocationPreferences.inc.xhtml | 11 ++ .../content/onionlocationPreferences.js | 34 +++++ browser/components/onionservices/jar.mn | 3 + browser/components/onionservices/moz.build | 5 + browser/components/preferences/privacy.inc.xhtml | 2 + browser/components/preferences/privacy.js | 17 +++ browser/themes/shared/browser-shared.css | 1 + dom/base/Document.cpp | 69 ++++++++- dom/base/Document.h | 2 + dom/webidl/Document.webidl | 8 + mobile/android/geckoview/api.txt | 3 + .../mozilla/geckoview/GeckoRuntimeSettings.java | 33 ++++ modules/libpref/init/StaticPrefList.yaml | 5 + xpcom/ds/StaticAtoms.py | 1 + 22 files changed, 497 insertions(+), 1 deletion(-)
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 66ac2d0f1d7c..24c5939750ee 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -48,6 +48,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { NetUtil: "resource://gre/modules/NetUtil.jsm", NewTabUtils: "resource://gre/modules/NewTabUtils.jsm", OpenInTabsUtils: "resource:///modules/OpenInTabsUtils.jsm", + OnionLocationParent: "resource:///modules/OnionLocationParent.jsm", PageActions: "resource:///modules/PageActions.jsm", PageThumbs: "resource://gre/modules/PageThumbs.jsm", PanelMultiView: "resource:///modules/PanelMultiView.jsm", @@ -5520,6 +5521,7 @@ var XULBrowserWindow = { CFRPageActions.updatePageActions(gBrowser.selectedBrowser);
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); + OnionLocationParent.updateOnionLocationBadge(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) { // Bug 1108553 - Cannot rotate images with e10s @@ -6039,6 +6041,16 @@ var CombinedStopReload = {
var TabsProgressListener = { onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) { + // Clear OnionLocation UI + if ( + aStateFlags & Ci.nsIWebProgressListener.STATE_START && + aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK && + aRequest && + aWebProgress.isTopLevel + ) { + OnionLocationParent.onStateChange(aBrowser); + } + // Collect telemetry data about tab load times. if ( aWebProgress.isTopLevel && diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml index 1cd54285c9a9..8e199e658a41 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -352,6 +352,9 @@ onclick="FullZoom.reset(); FullZoom.resetScalingZoom();" tooltip="dynamic-shortcut-tooltip" hidden="true"/> + +#include ../../components/onionservices/content/onionlocation-urlbar.inc.xhtml + <hbox id="pageActionButton" class="urlbar-page-action" role="button" diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index fe46dec2c42d..5b60b15029c0 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -582,6 +582,19 @@ let JSWINDOWACTORS = { allFrames: true, },
+ OnionLocation: { + parent: { + moduleURI: "resource:///modules/OnionLocationParent.jsm", + }, + child: { + moduleURI: "resource:///modules/OnionLocationChild.jsm", + events: { + pageshow: { mozSystemGroup: true }, + }, + }, + messageManagerGroups: ["browsers"], + }, + PageInfo: { child: { moduleURI: "resource:///actors/PageInfoChild.jsm", diff --git a/browser/components/onionservices/OnionLocationChild.jsm b/browser/components/onionservices/OnionLocationChild.jsm new file mode 100644 index 000000000000..23e1823f5a09 --- /dev/null +++ b/browser/components/onionservices/OnionLocationChild.jsm @@ -0,0 +1,48 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +var EXPORTED_SYMBOLS = ["OnionLocationChild"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +class OnionLocationChild extends JSWindowActorChild { + handleEvent(event) { + this.onPageShow(event); + } + + onPageShow(event) { + if (event.target != this.document) { + return; + } + const onionLocationURI = this.document.onionLocationURI; + if (onionLocationURI) { + this.sendAsyncMessage("OnionLocation:Set"); + } + } + + receiveMessage(aMessage) { + if (aMessage.name == "OnionLocation:Refresh") { + const doc = this.document; + const docShell = this.docShell; + let onionLocationURI = doc.onionLocationURI; + const refreshURI = docShell.QueryInterface(Ci.nsIRefreshURI); + if (onionLocationURI && refreshURI) { + const docUrl = new URL(doc.URL); + let onionUrl = new URL(onionLocationURI.asciiSpec); + // Keep consistent with Location + if (!onionUrl.hash && docUrl.hash) { + onionUrl.hash = docUrl.hash; + onionLocationURI = Services.io.newURI(onionUrl.toString()); + } + refreshURI.refreshURI( + onionLocationURI, + doc.nodePrincipal, + 0, + false, + true + ); + } + } + } +} diff --git a/browser/components/onionservices/OnionLocationParent.jsm b/browser/components/onionservices/OnionLocationParent.jsm new file mode 100644 index 000000000000..4ac4a5d0775e --- /dev/null +++ b/browser/components/onionservices/OnionLocationParent.jsm @@ -0,0 +1,169 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +var EXPORTED_SYMBOLS = ["OnionLocationParent"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); + +// Prefs +const NOTIFICATION_PREF = "privacy.prioritizeonions.showNotification"; +const PRIORITIZE_ONIONS_PREF = "privacy.prioritizeonions.enabled"; + +// Element IDs +const ONIONLOCATION_BOX_ID = "onion-location-box"; +const ONIONLOCATION_BUTTON_ID = "onion-location-button"; +const ONIONLOCATION_LABEL_ID = "onion-label"; + +// Notification IDs +const NOTIFICATION_ID = "onion-location"; +const NOTIFICATION_ANCHOR_ID = "onionlocation"; + +// Strings +const STRING_ONION_AVAILABLE = TorStrings.onionLocation.onionAvailable; +const NOTIFICATION_CANCEL_LABEL = TorStrings.onionLocation.notNow; +const NOTIFICATION_CANCEL_ACCESSKEY = TorStrings.onionLocation.notNowAccessKey; +const NOTIFICATION_OK_LABEL = TorStrings.onionLocation.alwaysPrioritize; +const NOTIFICATION_OK_ACCESSKEY = + TorStrings.onionLocation.alwaysPrioritizeAccessKey; +const NOTIFICATION_TITLE = TorStrings.onionLocation.tryThis; +const NOTIFICATION_DESCRIPTION = TorStrings.onionLocation.description; +const NOTIFICATION_LEARN_MORE_URL = + TorStrings.onionLocation.learnMoreURLNotification; + +class OnionLocationParent extends JSWindowActorParent { + // Listeners are added in BrowserGlue.jsm + receiveMessage(aMsg) { + switch (aMsg.name) { + case "OnionLocation:Set": + let browser = this.browsingContext.embedderElement; + OnionLocationParent.setOnionLocation(browser); + break; + } + } + + static buttonClick(event) { + if (event.button !== 0) { + return; + } + const win = event.target.ownerGlobal; + if (win.gBrowser) { + const browser = win.gBrowser.selectedBrowser; + OnionLocationParent.redirect(browser); + } + } + + static redirect(browser) { + let windowGlobal = browser.browsingContext.currentWindowGlobal; + let actor = windowGlobal.getActor("OnionLocation"); + if (actor) { + actor.sendAsyncMessage("OnionLocation:Refresh", {}); + OnionLocationParent.setDisabled(browser); + } + } + + static onStateChange(browser) { + delete browser._onionLocation; + OnionLocationParent.hideNotification(browser); + } + + static setOnionLocation(browser) { + browser._onionLocation = true; + let tabBrowser = browser.getTabBrowser(); + if (tabBrowser && browser === tabBrowser.selectedBrowser) { + OnionLocationParent.updateOnionLocationBadge(browser); + } + } + + static hideNotification(browser) { + const win = browser.ownerGlobal; + if (browser._onionLocationPrompt) { + win.PopupNotifications.remove(browser._onionLocationPrompt); + } + } + + static showNotification(browser) { + const mustShow = Services.prefs.getBoolPref(NOTIFICATION_PREF, true); + if (!mustShow) { + return; + } + + const win = browser.ownerGlobal; + Services.prefs.setBoolPref(NOTIFICATION_PREF, false); + + const mainAction = { + label: NOTIFICATION_OK_LABEL, + accessKey: NOTIFICATION_OK_ACCESSKEY, + callback() { + Services.prefs.setBoolPref(PRIORITIZE_ONIONS_PREF, true); + OnionLocationParent.redirect(browser); + win.openPreferences("privacy-onionservices"); + }, + }; + + const cancelAction = { + label: NOTIFICATION_CANCEL_LABEL, + accessKey: NOTIFICATION_CANCEL_ACCESSKEY, + callback: () => {}, + }; + + const options = { + autofocus: true, + persistent: true, + removeOnDismissal: false, + eventCallback(aTopic) { + if (aTopic === "removed") { + delete browser._onionLocationPrompt; + delete browser.onionpopupnotificationanchor; + } + }, + learnMoreURL: NOTIFICATION_LEARN_MORE_URL, + displayURI: { + hostPort: NOTIFICATION_TITLE, // This is hacky, but allows us to have a title without extra markup/css. + }, + hideClose: true, + popupIconClass: "onionlocation-notification-icon", + }; + + // A hacky way of setting the popup anchor outside the usual url bar icon box + // onionlocationpopupnotificationanchor comes from `${ANCHOR_ID}popupnotificationanchor` + // From https://searchfox.org/mozilla-esr68/rev/080f9ed47742644d2ff84f7aa0b10aea5c44... + browser.onionlocationpopupnotificationanchor = win.document.getElementById( + ONIONLOCATION_BUTTON_ID + ); + + browser._onionLocationPrompt = win.PopupNotifications.show( + browser, + NOTIFICATION_ID, + NOTIFICATION_DESCRIPTION, + NOTIFICATION_ANCHOR_ID, + mainAction, + [cancelAction], + options + ); + } + + static setEnabled(browser) { + const win = browser.ownerGlobal; + const label = win.document.getElementById(ONIONLOCATION_LABEL_ID); + label.textContent = STRING_ONION_AVAILABLE; + const elem = win.document.getElementById(ONIONLOCATION_BOX_ID); + elem.removeAttribute("hidden"); + } + + static setDisabled(browser) { + const win = browser.ownerGlobal; + const elem = win.document.getElementById(ONIONLOCATION_BOX_ID); + elem.setAttribute("hidden", true); + } + + static updateOnionLocationBadge(browser) { + if (browser._onionLocation) { + OnionLocationParent.setEnabled(browser); + OnionLocationParent.showNotification(browser); + } else { + OnionLocationParent.setDisabled(browser); + } + } +} diff --git a/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml new file mode 100644 index 000000000000..b612a4236f3c --- /dev/null +++ b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml @@ -0,0 +1,10 @@ +# Copyright (c) 2020, The Tor Project, Inc. + +<hbox id="onion-location-box" + class="urlbar-icon-wrapper urlbar-page-action" + role="button" + hidden="true" + onclick="OnionLocationParent.buttonClick(event);"> + <image id="onion-location-button" role="presentation"/> + <hbox id="onion-label-container"><label id="onion-label"/></hbox> +</hbox> diff --git a/browser/components/onionservices/content/onionlocation.css b/browser/components/onionservices/content/onionlocation.css new file mode 100644 index 000000000000..b90b2b9b8d46 --- /dev/null +++ b/browser/components/onionservices/content/onionlocation.css @@ -0,0 +1,46 @@ +/* Copyright (c) 2020, The Tor Project, Inc. */ + +#onion-location-box { + background-color: var(--purple-60); + -moz-context-properties: fill; + fill: white; +} + +#onion-location-box:hover { + background-color: var(--purple-70); +} + +#onion-location-box:active { + background-color: var(--purple-80); +} + +@media (prefers-color-scheme: dark) { + #onion-location-box { + background-color: var(--purple-50); + } + + #onion-location-box:hover { + background-color: var(--purple-60); + } + + #onion-location-box:active { + background-color: var(--purple-70); + } +} + +#onion-location-button { + list-style-image: url(chrome://browser/content/onionservices/onionlocation.svg); + padding-inline-start: 0.5em; +} + +label#onion-label { + margin: 0; + padding-block: 0; + padding-inline: 0.5em; + color: white; + font-weight: normal; +} + +.onionlocation-notification-icon { + display: none; +} diff --git a/browser/components/onionservices/content/onionlocation.svg b/browser/components/onionservices/content/onionlocation.svg new file mode 100644 index 000000000000..37f40ac1812f --- /dev/null +++ b/browser/components/onionservices/content/onionlocation.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="m8.016411 14.54499v-0.969784c3.071908-0.0089 5.559239-2.501304 5.559239-5.575429 0-3.073903-2.487331-5.566336-5.559239-5.575206v-0.9697843c3.607473 0.00909 6.528802 2.935521 6.528802 6.544991 0 3.609691-2.921329 6.536342-6.528802 6.545213zm0-3.394356c1.732661-0.0091 3.135111-1.415756 3.135111-3.150857 0-1.734878-1.402451-3.141542-3.135111-3.150634v-0.9695626c2.268448 0.00887 4.104895 1.849753 4.104895 4.120197 0 2.270666- [...] +</svg> \ No newline at end of file diff --git a/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml new file mode 100644 index 000000000000..c285f403f99b --- /dev/null +++ b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml @@ -0,0 +1,11 @@ +# Copyright (c) 2020, The Tor Project, Inc. + +<groupbox id="onionServicesGroup" data-category="panePrivacy" data-subcategory="onionservices" hidden="true"> + <label><html:h2 id="onionServicesTitle"></html:h2></label> + <label><label class="tail-with-learn-more" id="prioritizeOnionsDesc"></label><label + class="learnMore" is="text-link" id="onionServicesLearnMore"></label></label> + <radiogroup id="prioritizeOnionsRadioGroup" aria-labelledby="prioritizeOnionsDesc" preference="privacy.prioritizeonions.enabled"> + <radio id="onionServicesRadioAlways" value="true"/> + <radio id="onionServicesRadioAsk" value="false"/> + </radiogroup> +</groupbox> diff --git a/browser/components/onionservices/content/onionlocationPreferences.js b/browser/components/onionservices/content/onionlocationPreferences.js new file mode 100644 index 000000000000..005e37d4a991 --- /dev/null +++ b/browser/components/onionservices/content/onionlocationPreferences.js @@ -0,0 +1,34 @@ +// Copyright (c) 2020, The Tor Project, Inc. + +"use strict"; + +ChromeUtils.defineModuleGetter( + this, + "TorStrings", + "resource:///modules/TorStrings.jsm" +); + +const OnionLocationPreferences = { + init() { + document.getElementById("onionServicesTitle").textContent = + TorStrings.onionLocation.onionServicesTitle; + document.getElementById("prioritizeOnionsDesc").textContent = + TorStrings.onionLocation.prioritizeOnionsDescription; + const learnMore = document.getElementById("onionServicesLearnMore"); + learnMore.textContent = TorStrings.onionLocation.learnMore; + learnMore.href = TorStrings.onionLocation.learnMoreURL; + if (TorStrings.onionLocation.learnMoreURL.startsWith("about:")) { + learnMore.setAttribute("useoriginprincipal", "true"); + } + document.getElementById("onionServicesRadioAlways").label = + TorStrings.onionLocation.always; + document.getElementById("onionServicesRadioAsk").label = + TorStrings.onionLocation.askEverytime; + }, +}; + +Object.defineProperty(this, "OnionLocationPreferences", { + value: OnionLocationPreferences, + enumerable: true, + writable: false, +}); diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn index 9d6ce88d1841..e778abd206b3 100644 --- a/browser/components/onionservices/jar.mn +++ b/browser/components/onionservices/jar.mn @@ -7,3 +7,6 @@ browser.jar: content/browser/onionservices/onionservices.css (content/onionservices.css) content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js) content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml) + content/browser/onionservices/onionlocationPreferences.js (content/onionlocationPreferences.js) + content/browser/onionservices/onionlocation.svg (content/onionlocation.svg) + skin/classic/browser/onionlocation.css (content/onionlocation.css) diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build index 2661ad7cb9f3..27f9d2da4a9e 100644 --- a/browser/components/onionservices/moz.build +++ b/browser/components/onionservices/moz.build @@ -1 +1,6 @@ JAR_MANIFESTS += ["jar.mn"] + +EXTRA_JS_MODULES += [ + "OnionLocationChild.jsm", + "OnionLocationParent.jsm", +] diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml index 37f77e3b70da..d322527a9853 100644 --- a/browser/components/preferences/privacy.inc.xhtml +++ b/browser/components/preferences/privacy.inc.xhtml @@ -14,6 +14,8 @@ <html:h1 data-l10n-id="privacy-header"/> </hbox>
+#include ../onionservices/content/onionlocationPreferences.inc.xhtml + <!-- Tracking / Content Blocking --> <groupbox id="trackingGroup" data-category="panePrivacy" hidden="true" aria-describedby="contentBlockingDescription"> <label id="contentBlockingHeader"><html:h2 data-l10n-id="content-blocking-enhanced-tracking-protection"/></label> diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js index d584fb5e4624..d6a77393b155 100644 --- a/browser/components/preferences/privacy.js +++ b/browser/components/preferences/privacy.js @@ -61,6 +61,12 @@ XPCOMUtils.defineLazyScriptGetter( "chrome://browser/content/securitylevel/securityLevel.js" );
+XPCOMUtils.defineLazyScriptGetter( + this, + ["OnionLocationPreferences"], + "chrome://browser/content/onionservices/onionlocationPreferences.js" +); + XPCOMUtils.defineLazyPreferenceGetter( this, "OS_AUTH_ENABLED", @@ -138,6 +144,9 @@ Preferences.addAll([ // Do not track { id: "privacy.donottrackheader.enabled", type: "bool" },
+ // Onion Location + { id: "privacy.prioritizeonions.enabled", type: "bool" }, + // Media { id: "media.autoplay.default", type: "int" },
@@ -339,6 +348,13 @@ var gPrivacyPane = { window.addEventListener("unload", unload); },
+ /** + * Show the OnionLocation preferences UI + */ + _initOnionLocation() { + OnionLocationPreferences.init(); + }, + /** * Whether the prompt to restart Firefox should appear when changing the autostart pref. */ @@ -536,6 +552,7 @@ var gPrivacyPane = { this._initTrackingProtectionExtensionControl(); OnionServicesAuthPreferences.init(); this._initSecurityLevel(); + this._initOnionLocation();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css index c8dac0afb49a..e771c46dcbf1 100644 --- a/browser/themes/shared/browser-shared.css +++ b/browser/themes/shared/browser-shared.css @@ -22,6 +22,7 @@ @import url("chrome://browser/skin/customizableui/customizeMode.css"); @import url("chrome://browser/skin/UITour.css"); @import url("chrome://browser/skin/torconnect-urlbar.css"); +@import url("chrome://browser/skin/onionlocation.css");
@namespace html url("http://www.w3.org/1999/xhtml");
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp index b1be884fe828..9001556d0232 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -2925,6 +2925,7 @@ void Document::ResetToURI(nsIURI* aURI, nsILoadGroup* aLoadGroup, // mDocumentURI. mDocumentBaseURI = nullptr; mChromeXHRDocBaseURI = nullptr; + mOnionLocationURI = nullptr;
// Check if the current document is the top-level DevTools document. // For inner DevTools frames, mIsDevToolsDocument will be set when @@ -6828,6 +6829,57 @@ void Document::GetHeaderData(nsAtom* aHeaderField, nsAString& aData) const { } }
+static bool IsValidOnionLocation(nsIURI* aDocumentURI, + nsIURI* aOnionLocationURI) { + if (!aDocumentURI || !aOnionLocationURI) { + return false; + } + + // Current URI + nsAutoCString host; + if (!aDocumentURI->SchemeIs("https")) { + return false; + } + NS_ENSURE_SUCCESS(aDocumentURI->GetAsciiHost(host), false); + if (StringEndsWith(host, ".onion"_ns)) { + // Already in the .onion site + return false; + } + + // Target URI + if (!aOnionLocationURI->SchemeIs("http") && + !aOnionLocationURI->SchemeIs("https")) { + return false; + } + nsCOMPtr<nsIEffectiveTLDService> eTLDService = + do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID); + if (!eTLDService) { + NS_ENSURE_SUCCESS(aOnionLocationURI->GetAsciiHost(host), false); + // This should not happen, but in the unlikely case, still check if it is a + // .onion and in case allow it. + return StringEndsWith(host, ".onion"_ns); + } + NS_ENSURE_SUCCESS(eTLDService->GetBaseDomain(aOnionLocationURI, 0, host), + false); + if (!StringEndsWith(host, ".onion"_ns)) { + return false; + } + + // Ignore v2 + if (host.Length() == 22) { + const char* cur = host.BeginWriting(); + // We have already checked that it ends by ".onion" + const char* end = host.EndWriting() - 6; + bool base32 = true; + for (; cur < end && base32; ++cur) { + base32 = isalpha(*cur) || ('2' <= *cur && *cur <= '7'); + } + return !base32; + } + + return true; +} + void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) { if (!aHeaderField) { NS_ERROR("null headerField"); @@ -6903,6 +6955,21 @@ void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) { if (aHeaderField == nsGkAtoms::handheldFriendly) { mViewportType = Unknown; } + + if (aHeaderField == nsGkAtoms::headerOnionLocation && !aData.IsEmpty()) { + nsCOMPtr<nsIURI> onionURI; + if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(onionURI), aData)) && + IsValidOnionLocation(Document::GetDocumentURI(), onionURI)) { + if (StaticPrefs::privacy_prioritizeonions_enabled()) { + nsCOMPtr<nsIRefreshURI> refresher(mDocumentContainer); + if (refresher) { + refresher->RefreshURI(onionURI, NodePrincipal(), 0); + } + } else { + mOnionLocationURI = onionURI; + } + } + } }
void Document::TryChannelCharset(nsIChannel* aChannel, int32_t& aCharsetSource, @@ -11036,7 +11103,7 @@ void Document::RetrieveRelevantHeaders(nsIChannel* aChannel) { static const char* const headers[] = { "default-style", "content-style-type", "content-language", "content-disposition", "refresh", "x-dns-prefetch-control", - "x-frame-options", "origin-trial", + "x-frame-options", "origin-trial", "onion-location", // add more http headers if you need // XXXbz don't add content-location support without reading bug // 238654 and its dependencies/dups first. diff --git a/dom/base/Document.h b/dom/base/Document.h index 2d9bbba59bce..91dfe3de8028 100644 --- a/dom/base/Document.h +++ b/dom/base/Document.h @@ -3401,6 +3401,7 @@ class Document : public nsINode, void ReleaseCapture() const; void MozSetImageElement(const nsAString& aImageElementId, Element* aElement); nsIURI* GetDocumentURIObject() const; + nsIURI* GetOnionLocationURI() const { return mOnionLocationURI; } // Not const because all the fullscreen goop is not const const char* GetFullscreenError(CallerType); bool FullscreenEnabled(CallerType aCallerType) { @@ -4413,6 +4414,7 @@ class Document : public nsINode, nsCOMPtr<nsIURI> mChromeXHRDocURI; nsCOMPtr<nsIURI> mDocumentBaseURI; nsCOMPtr<nsIURI> mChromeXHRDocBaseURI; + nsCOMPtr<nsIURI> mOnionLocationURI;
// The base domain of the document for third-party checks. nsCString mBaseDomain; diff --git a/dom/webidl/Document.webidl b/dom/webidl/Document.webidl index 3d089ddbe848..9c5f78784cb1 100644 --- a/dom/webidl/Document.webidl +++ b/dom/webidl/Document.webidl @@ -748,3 +748,11 @@ partial interface Document { [ChromeOnly] Wireframe? getWireframe(optional boolean aIncludeNodes = false); }; + +/** + * Extension to allows chrome JS to know whether the document has a valid + * Onion-Location that we could redirect to. + */ +partial interface Document { + [ChromeOnly] readonly attribute URI? onionLocationURI; +}; diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt index af1b7796e6d2..707a65a7eebc 100644 --- a/mobile/android/geckoview/api.txt +++ b/mobile/android/geckoview/api.txt @@ -807,6 +807,7 @@ package org.mozilla.geckoview { method public boolean getLoginAutofillEnabled(); method public boolean getPauseForDebuggerEnabled(); method public int getPreferredColorScheme(); + method public boolean getPrioritizeOnions(); method public boolean getRemoteDebuggingEnabled(); method @Nullable public GeckoRuntime getRuntime(); method @Nullable public Rect getScreenSizeOverride(); @@ -832,6 +833,7 @@ package org.mozilla.geckoview { method public void setLocales(@Nullable String[]); method @NonNull public GeckoRuntimeSettings setLoginAutofillEnabled(boolean); method @NonNull public GeckoRuntimeSettings setPreferredColorScheme(int); + method @NonNull public GeckoRuntimeSettings setPrioritizeOnions(boolean); method @NonNull public GeckoRuntimeSettings setRemoteDebuggingEnabled(boolean); method @NonNull public GeckoRuntimeSettings setSpoofEnglish(boolean); method @NonNull public GeckoRuntimeSettings setTorSecurityLevel(int); @@ -871,6 +873,7 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings.Builder locales(@Nullable String[]); method @NonNull public GeckoRuntimeSettings.Builder loginAutofillEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder pauseForDebugger(boolean); + method @NonNull public GeckoRuntimeSettings.Builder prioritizeOnions(boolean); method @NonNull public GeckoRuntimeSettings.Builder preferredColorScheme(int); method @NonNull public GeckoRuntimeSettings.Builder remoteDebuggingEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder screenSizeOverride(int, int); diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java index 5cc92aa81834..90df323d667d 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java @@ -475,6 +475,17 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { getSettings().mSecurityLevel.set(level); return this; } + + /** + * Sets whether the browser should prioritize .onion sites when available. + * + * @param flag True if we should prioritize .onion sites, false otherwise + * @return This Builder instance. + */ + public @NonNull Builder prioritizeOnions(final boolean flag) { + getSettings().mPrioritizeOnions.set(flag); + return this; + } }
private GeckoRuntime mRuntime; @@ -526,6 +537,8 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { /* package */ final Pref<Integer> mSpoofEnglish = new Pref<>("privacy.spoof_english", 0); /* package */ final Pref<Integer> mSecurityLevel = new Pref<>("browser.security_level.security_slider", 4); + /* package */ final Pref<Boolean> mPrioritizeOnions = + new Pref<>("privacy.prioritizeonions.enabled", false);
/* package */ int mPreferredColorScheme = COLOR_SCHEME_SYSTEM;
@@ -1310,6 +1323,26 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return this; }
+ /** + * Gets whether we should prioritize .onion sites. + * + * @return Whether we should prioritize .onion sites. + */ + public boolean getPrioritizeOnions() { + return mPrioritizeOnions.get(); + } + + /** + * Sets whether we should prioritize .onion sites. + * + * @param flag Whether we should prioritize .onion sites. + * @return This GeckoRuntimeSettings instance. + */ + public @NonNull GeckoRuntimeSettings setPrioritizeOnions(final boolean flag) { + mPrioritizeOnions.commit(flag); + return this; + } + @Override // Parcelable public void writeToParcel(final Parcel out, final int flags) { super.writeToParcel(out, flags); diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 5df8f94e761e..23a237ee71b9 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -11850,6 +11850,11 @@ value: "" mirror: never
+- name: privacy.prioritizeonions.enabled + type: RelaxedAtomicBool + value: false + mirror: always + #--------------------------------------------------------------------------- # Prefs starting with "prompts." #--------------------------------------------------------------------------- diff --git a/xpcom/ds/StaticAtoms.py b/xpcom/ds/StaticAtoms.py index 740b3f6e187d..503a62d5f17b 100644 --- a/xpcom/ds/StaticAtoms.py +++ b/xpcom/ds/StaticAtoms.py @@ -826,6 +826,7 @@ STATIC_ATOMS = [ Atom("oninputsourceschange", "oninputsourceschange"), Atom("oninstall", "oninstall"), Atom("oninvalid", "oninvalid"), + Atom("headerOnionLocation", "onion-location"), Atom("onkeydown", "onkeydown"), Atom("onkeypress", "onkeypress"), Atom("onkeyup", "onkeyup"),
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit e232087c429f3dfd989c870b9ae2fdaac7a69379 Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Mon Feb 21 15:39:11 2022 +0100
Bug 40458: Implement .tor.onion aliases
We have enabled HTTPS-Only mode, therefore we do not need HTTPS-Everywhere anymore. However, we want to keep supporting .tor.onion aliases (especially for securedrop). Therefore, in this patch we implemented the parsing of HTTPS-Everywhere rulesets, and the redirect of .tor.onion domains. Actually, Tor Browser believes they are actual domains. We change them on the fly on the SOCKS proxy requests to resolve the domain, and on the code that verifies HTTPS certificates. --- browser/components/BrowserGlue.jsm | 42 ++ browser/components/about/AboutRedirector.cpp | 5 + browser/components/about/components.conf | 1 + browser/components/moz.build | 1 + .../components/onionservices/OnionAliasStore.jsm | 563 +++++++++++++++++++++ browser/components/onionservices/moz.build | 1 + browser/components/rulesets/RulesetsChild.jsm | 11 + browser/components/rulesets/RulesetsParent.jsm | 79 +++ .../components/rulesets/content/aboutRulesets.css | 305 +++++++++++ .../components/rulesets/content/aboutRulesets.html | 107 ++++ .../components/rulesets/content/aboutRulesets.js | 531 +++++++++++++++++++ browser/components/rulesets/content/securedrop.svg | 173 +++++++ browser/components/rulesets/jar.mn | 5 + browser/components/rulesets/moz.build | 6 + modules/libpref/init/StaticPrefList.yaml | 5 + netwerk/build/components.conf | 11 + netwerk/build/nsNetCID.h | 10 + netwerk/dns/IOnionAliasService.idl | 34 ++ netwerk/dns/OnionAliasService.cpp | 99 ++++ netwerk/dns/OnionAliasService.h | 40 ++ netwerk/dns/effective_tld_names.dat | 2 + netwerk/dns/moz.build | 4 + netwerk/socket/nsSOCKSIOLayer.cpp | 24 +- security/manager/ssl/SSLServerCertVerification.cpp | 9 + security/manager/ssl/SSLServerCertVerification.h | 4 +- toolkit/modules/RemotePageAccessManager.jsm | 14 + 26 files changed, 2080 insertions(+), 6 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 5b60b15029c0..0949c795d8c7 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -59,6 +59,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { Normandy: "resource://normandy/Normandy.jsm", OnboardingMessageProvider: "resource://activity-stream/lib/OnboardingMessageProvider.jsm", + OnionAliasStore: "resource:///modules/OnionAliasStore.jsm", OsEnvironment: "resource://gre/modules/OsEnvironment.jsm", PageActions: "resource:///modules/PageActions.jsm", PageThumbs: "resource://gre/modules/PageThumbs.jsm", @@ -682,6 +683,19 @@ let JSWINDOWACTORS = { enablePreference: "accessibility.blockautorefresh", },
+ Rulesets: { + parent: { + moduleURI: "resource:///modules/RulesetsParent.jsm", + }, + child: { + moduleURI: "resource:///modules/RulesetsChild.jsm", + events: { + DOMWindowCreated: {}, + }, + }, + matches: ["about:rulesets*"], + }, + ScreenshotsComponent: { parent: { moduleURI: "resource:///modules/ScreenshotsUtils.jsm", @@ -2042,6 +2056,7 @@ BrowserGlue.prototype = { () => RFPHelper.uninit(), () => ASRouterNewTabHook.destroy(), () => UpdateListener.reset(), + () => OnionAliasStore.uninit(), ];
for (let task of tasks) { @@ -2669,6 +2684,33 @@ BrowserGlue.prototype = { }, },
+ { + task: () => { + const { TorConnect, TorConnectTopics } = ChromeUtils.import( + "resource:///modules/TorConnect.jsm" + ); + if (!TorConnect.shouldShowTorConnect) { + // we will take this path when the user is using the legacy tor launcher or + // when Tor Browser didn't launch its own tor. + OnionAliasStore.init(); + } else { + // this path is taken when using about:torconnect, we wait to init + // after we are bootstrapped and connected to tor + const topic = TorConnectTopics.BootstrapComplete; + let bootstrapObserver = { + observe(aSubject, aTopic, aData) { + if (aTopic === topic) { + OnionAliasStore.init(); + // we only need to init once, so remove ourselves as an obvserver + Services.obs.removeObserver(this, topic); + } + }, + }; + Services.obs.addObserver(bootstrapObserver, topic); + } + }, + }, + { task: () => { TabUnloader.init(); diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index faf809728352..c3095c4bd3bb 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -88,6 +88,11 @@ static const RedirEntry kRedirMap[] = { {"robots", "chrome://browser/content/aboutRobots.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::ALLOW_SCRIPT}, + {"rulesets", "chrome://browser/content/rulesets/aboutRulesets.html", + nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | + nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS | + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::IS_SECURE_CHROME_UI}, {"sessionrestore", "chrome://browser/content/aboutSessionRestore.xhtml", nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT | nsIAboutModule::IS_SECURE_CHROME_UI}, diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf index a1eb66c9fc95..d35ad34ec8ba 100644 --- a/browser/components/about/components.conf +++ b/browser/components/about/components.conf @@ -26,6 +26,7 @@ pages = [ 'restartrequired', 'rights', 'robots', + 'rulesets', 'sessionrestore', 'tabcrashed', 'torconnect', diff --git a/browser/components/moz.build b/browser/components/moz.build index 1adecb68bc8f..27cda5d68c04 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -49,6 +49,7 @@ DIRS += [ "prompts", "protocolhandler", "resistfingerprinting", + "rulesets", "screenshots", "search", "securitylevel", diff --git a/browser/components/onionservices/OnionAliasStore.jsm b/browser/components/onionservices/OnionAliasStore.jsm new file mode 100644 index 000000000000..bc7f8a1d79cf --- /dev/null +++ b/browser/components/onionservices/OnionAliasStore.jsm @@ -0,0 +1,563 @@ +// Copyright (c) 2022, The Tor Project, Inc. + +"use strict"; + +const EXPORTED_SYMBOLS = ["OnionAliasStore", "OnionAliasStoreTopics"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); +const { setTimeout, clearTimeout } = ChromeUtils.import( + "resource://gre/modules/Timer.jsm" +); + +ChromeUtils.defineModuleGetter( + this, + "JSONFile", + "resource://gre/modules/JSONFile.jsm" +); + +Cu.importGlobalProperties(["crypto", "fetch"]); + +/* OnionAliasStore observer topics */ +const OnionAliasStoreTopics = Object.freeze({ + ChannelsChanged: "onionaliasstore:channels-changed", +}); + +const SECURE_DROP = { + name: "SecureDropTorOnion2021", + pathPrefix: "https://securedrop.org/https-everywhere-2021/", + jwk: { + kty: "RSA", + e: "AQAB", + n: + "vsC7BNafkRe8Uh1DUgCkv6RbPQMdJgAKKnWdSqQd7tQzU1mXfmo_k1Py_2MYMZXOWmqSZ9iwIYkykZYywJ2VyMGve4byj1sLn6YQoOkG8g5Z3V4y0S2RpEfmYumNjTzfq8nxtLnwjaYd4sCUd5wa0SzeLrpRQuXo2bF3QuUF2xcbLJloxX1MmlsMMCdBc-qGNonLJ7bpn_JuyXlDWy1Fkeyw1qgjiOdiRIbMC1x302zgzX6dSrBrNB8Cpsh-vCE0ZjUo8M9caEv06F6QbYmdGJHM0ZZY34OHMSNdf-_qUKIV_SuxuSuFE99tkAeWnbWpyI1V-xhVo1sc7NzChP8ci2TdPvI3_0JyAuCvL6zIFqJUJkZibEUghhg6F09-oNJKpy7rhUJq7zZyLXJsvuXnn0gnIxfjRvMcDfZAKUVMZKRdw7fwWzwQril4Ib0MQOVda9vb_4JMk7Gup-TUI4sfuS4NKwsnKoODIO-2U [...] + }, + scope: /^https?://[a-z0-9-]+(?:.[a-z0-9-]+)*.securedrop.tor.onion//, + enabled: true, + mappings: [], + currentTimestamp: 0, +}; + +const kPrefOnionAliasEnabled = "browser.urlbar.onionRewrites.enabled"; + +// Logger adapted from CustomizableUI.jsm +const kPrefOnionAliasDebug = "browser.onionalias.debug"; +XPCOMUtils.defineLazyPreferenceGetter( + this, + "gDebuggingEnabled", + kPrefOnionAliasDebug, + false, + (pref, oldVal, newVal) => { + if (typeof log != "undefined") { + log.maxLogLevel = newVal ? "all" : "log"; + } + } +); +XPCOMUtils.defineLazyGetter(this, "log", () => { + const { ConsoleAPI } = ChromeUtils.import( + "resource://gre/modules/Console.jsm" + ); + let consoleOptions = { + maxLogLevel: gDebuggingEnabled ? "all" : "log", + prefix: "OnionAlias", + }; + return new ConsoleAPI(consoleOptions); +}); + +// Inspired by aboutMemory.js and PingCentre.jsm +function gunzip(buffer) { + return new Promise((resolve, reject) => { + const listener = Cc["@mozilla.org/network/stream-loader;1"].createInstance( + Ci.nsIStreamLoader + ); + listener.init({ + onStreamComplete(loader, context, status, length, result) { + resolve(String.fromCharCode(...result)); + }, + }); + const scs = Cc["@mozilla.org/streamConverters;1"].getService( + Ci.nsIStreamConverterService + ); + const converter = scs.asyncConvertData( + "gzip", + "uncompressed", + listener, + null + ); + const stream = Cc[ + "@mozilla.org/io/arraybuffer-input-stream;1" + ].createInstance(Ci.nsIArrayBufferInputStream); + stream.setData(buffer, 0, buffer.byteLength); + converter.onStartRequest(null, null); + converter.onDataAvailable(null, stream, 0, buffer.byteLength); + converter.onStopRequest(null, null, null); + }); +} + +class Channel { + static get SIGN_ALGORITHM() { + return { + name: "RSA-PSS", + saltLength: 32, + hash: { name: "SHA-256" }, + }; + } + + constructor(name, pathPrefix, jwk, scope, enabled) { + this.name = name; + this.pathPrefix = pathPrefix; + this.jwk = jwk; + this.scope = scope; + this._enabled = enabled; + + this.mappings = []; + this.currentTimestamp = 0; + this.latestTimestamp = 0; + } + + async updateLatestTimestamp() { + const timestampUrl = this.pathPrefix + "/latest-rulesets-timestamp"; + log.debug(`Updating ${this.name} timestamp from ${timestampUrl}`); + const response = await fetch(timestampUrl); + if (!response.ok) { + throw Error(`Could not fetch timestamp for ${this.name}`, { + cause: response.status, + }); + } + const timestampStr = await response.text(); + const timestamp = parseInt(timestampStr); + // Avoid hijacking, sanitize the timestamp + if (isNaN(timestamp)) { + throw Error("Latest timestamp is not a number"); + } + log.debug(`Updated ${this.name} timestamp: ${timestamp}`); + this.latestTimestamp = timestamp; + } + + async makeKey() { + return crypto.subtle.importKey( + "jwk", + this.jwk, + Channel.SIGN_ALGORITHM, + false, + ["verify"] + ); + } + + async downloadVerifiedRules() { + log.debug(`Downloading and verifying ruleset for ${this.name}`); + + const key = await this.makeKey(); + const signatureUrl = + this.pathPrefix + `/rulesets-signature.${this.latestTimestamp}.sha256`; + const signatureResponse = await fetch(signatureUrl); + if (!signatureResponse.ok) { + throw Error("Could not fetch the rules signature"); + } + const signature = await signatureResponse.arrayBuffer(); + + const rulesUrl = + this.pathPrefix + `/default.rulesets.${this.latestTimestamp}.gz`; + const rulesResponse = await fetch(rulesUrl); + if (!rulesResponse.ok) { + throw Error("Could not fetch rules"); + } + const rulesGz = await rulesResponse.arrayBuffer(); + + if ( + !(await crypto.subtle.verify( + Channel.SIGN_ALGORITHM, + key, + signature, + rulesGz + )) + ) { + throw Error("Could not verify rules signature"); + } + log.debug( + `Downloaded and verified rules for ${this.name}, now uncompressing` + ); + this._makeMappings(JSON.parse(await gunzip(rulesGz))); + } + + _makeMappings(rules) { + const toTest = /http[s]?://[a-zA-Z0-9.]{56}.onion/; + const mappings = []; + rules.rulesets.forEach(rule => { + if (rule.rule.length != 1) { + log.warn(`Unsupported rule lenght: ${rule.rule.length}`); + return; + } + if (!toTest.test(rule.rule[0].to)) { + log.warn( + `Ignoring rule, because of a malformed to: ${rule.rule[0].to}` + ); + return; + } + let toHostname; + try { + const toUrl = new URL(rule.rule[0].to); + toHostname = toUrl.hostname; + } catch (err) { + log.error( + "Cannot detect the hostname from the to rule", + rule.rule[0].to, + err + ); + } + let fromRe; + try { + fromRe = new RegExp(rule.rule[0].from); + } catch (err) { + log.error("Malformed from field", rule.rule[0].from, err); + return; + } + for (const target of rule.target) { + if ( + target.endsWith(".tor.onion") && + this.scope.test(`http://$%7Btarget%7D/%60) && + fromRe.test(`http://$%7Btarget%7D/%60) + ) { + mappings.push([target, toHostname]); + } else { + log.warn("Ignoring malformed rule", rule); + } + } + }); + this.mappings = mappings; + this.currentTimestamp = rules.timestamp; + log.debug(`Updated mappings for ${this.name}`, mappings); + } + + async updateMappings(force) { + force = force === undefined ? false : !!force; + if (!this._enabled && !force) { + return; + } + await this.updateLatestTimestamp(); + if (this.latestTimestamp <= this.currentTimestamp && !force) { + log.debug( + `Rules for ${this.name} are already up to date, skipping update` + ); + return; + } + await this.downloadVerifiedRules(); + } + + get enabled() { + return this._enabled; + } + set enabled(enabled) { + this._enabled = enabled; + if (!enabled) { + this.mappings = []; + this.currentTimestamp = 0; + this.latestTimestamp = 0; + } + } + + toJSON() { + let scope = this.scope.toString(); + scope = scope.substr(1, scope.length - 2); + return { + name: this.name, + pathPrefix: this.pathPrefix, + jwk: this.jwk, + scope, + enabled: this._enabled, + mappings: this.mappings, + currentTimestamp: this.currentTimestamp, + }; + } + + static fromJSON(obj) { + let channel = new Channel( + obj.name, + obj.pathPrefix, + obj.jwk, + new RegExp(obj.scope), + obj.enabled + ); + if (obj.enabled) { + channel.mappings = obj.mappings; + channel.currentTimestamp = obj.currentTimestamp; + } + return channel; + } +} + +class _OnionAliasStore { + static get RULESET_CHECK_INTERVAL() { + return 86400 * 1000; // 1 day, like HTTPS-Everywhere + } + + constructor() { + this._channels = new Map(); + this._rulesetTimeout = null; + this._lastCheck = 0; + this._storage = null; + } + + async init() { + await this._loadSettings(); + if (this.enabled) { + await this._startUpdates(); + } + Services.prefs.addObserver(kPrefOnionAliasEnabled, this); + } + + uninit() { + this._clear(); + if (this._rulesetTimeout) { + clearTimeout(this._rulesetTimeout); + } + this._rulesetTimeout = null; + Services.prefs.removeObserver(kPrefOnionAliasEnabled, this); + } + + async getChannels() { + if (this._storage === null) { + await this._loadSettings(); + } + return Array.from(this._channels.values(), ch => ch.toJSON()); + } + + async setChannel(chanData) { + const name = chanData.name?.trim(); + if (!name) { + throw Error("Name cannot be empty"); + } + + new URL(chanData.pathPrefix); + const scope = new RegExp(chanData.scope); + const ch = new Channel( + name, + chanData.pathPrefix, + chanData.jwk, + scope, + !!chanData.enabled + ); + // Call makeKey to make it throw if the key is invalid + await ch.makeKey(); + this._channels.set(name, ch); + this._applyMappings(); + this._saveSettings(); + setTimeout(this._notifyChanges.bind(this), 1); + return ch; + } + + enableChannel(name, enabled) { + const channel = this._channels.get(name); + if (channel !== null) { + channel.enabled = enabled; + this._applyMappings(); + this._saveSettings(); + this._notifyChanges(); + if (this.enabled && enabled && !channel.currentTimestamp) { + this.updateChannel(name); + } + } + } + + async updateChannel(name) { + if (!this.enabled) { + throw Error("Onion Aliases are disabled"); + } + const channel = this._channels.get(name); + if (channel === null) { + throw Error("Channel not found"); + } + await channel.updateMappings(true); + this._saveSettings(); + this._applyMappings(); + setTimeout(this._notifyChanges.bind(this), 1); + return channel; + } + + deleteChannel(name) { + if (this._channels.delete(name)) { + this._saveSettings(); + this._applyMappings(); + this._notifyChanges(); + } + } + + async _loadSettings() { + if (this._storage !== null) { + return; + } + this._channels = new Map(); + this._storage = new JSONFile({ + path: PathUtils.join( + Services.dirsvc.get("ProfD", Ci.nsIFile).path, + "onion-aliases.json" + ), + dataPostProcessor: this._settingsProcessor.bind(this), + }); + await this._storage.load(); + log.debug("Loaded settings", this._storage.data, this._storage.path); + this._applyMappings(); + this._notifyChanges(); + } + + _settingsProcessor(data) { + if ("lastCheck" in data) { + this._lastCheck = data.lastCheck; + } else { + data.lastCheck = 0; + } + if (!("channels" in data) || !Array.isArray(data.channels)) { + data.channels = [SECURE_DROP]; + // Force updating + data.lastCheck = 0; + } + const channels = new Map(); + data.channels = data.channels.filter(ch => { + try { + channels.set(ch.name, Channel.fromJSON(ch)); + } catch (err) { + log.error("Could not load a channel", err, ch); + return false; + } + return true; + }); + this._channels = channels; + return data; + } + + _saveSettings() { + if (this._storage === null) { + throw Error("Settings have not been loaded"); + } + this._storage.data.lastCheck = this._lastCheck; + this._storage.data.channels = Array.from(this._channels.values(), ch => + ch.toJSON() + ); + this._storage.saveSoon(); + } + + _addMapping(shortOnionHost, longOnionHost) { + const service = Cc["@torproject.org/onion-alias-service;1"].getService( + Ci.IOnionAliasService + ); + service.addOnionAlias(shortOnionHost, longOnionHost); + } + + _clear() { + const service = Cc["@torproject.org/onion-alias-service;1"].getService( + Ci.IOnionAliasService + ); + service.clearOnionAliases(); + } + + _applyMappings() { + this._clear(); + for (const ch of this._channels.values()) { + if (!ch.enabled) { + continue; + } + for (const [short, long] of ch.mappings) { + this._addMapping(short, long); + } + } + } + + async _periodicRulesetCheck() { + if (!this.enabled) { + log.debug("Onion Aliases are disabled, not updating rulesets."); + return; + } + log.debug("Begin scheduled ruleset update"); + this._lastCheck = Date.now(); + let anyUpdated = false; + for (const ch of this._channels.values()) { + if (!ch.enabled) { + log.debug(`Not updating ${ch.name} because not enabled`); + continue; + } + log.debug(`Updating ${ch.name}`); + try { + await ch.updateMappings(); + anyUpdated = true; + } catch (err) { + log.error(`Could not update mappings for channel ${ch.name}`, err); + } + } + if (anyUpdated) { + this._saveSettings(); + this._applyMappings(); + this._notifyChanges(); + } else { + log.debug("No channel has been updated, avoid saving"); + } + this._scheduleCheck(_OnionAliasStore.RULESET_CHECK_INTERVAL); + } + + async _startUpdates() { + // This is a "private" function, so we expect the callers to verify wheter + // onion aliases are enabled. + // Callees will also do, so we avoid an additional check here. + const dt = Date.now() - this._lastCheck; + let force = false; + for (const ch of this._channels.values()) { + if (ch.enabled && !ch.currentTimestamp) { + // Edited while being offline or some other error happened + force = true; + break; + } + } + if (dt > _OnionAliasStore.RULESET_CHECK_INTERVAL || force) { + log.debug( + `Mappings are stale (${dt}), or force check requested (${force}), checking them immediately` + ); + await this._periodicRulesetCheck(); + } else { + this._scheduleCheck(_OnionAliasStore.RULESET_CHECK_INTERVAL - dt); + } + } + + _scheduleCheck(dt) { + if (this._rulesetTimeout) { + log.warn("The previous update timeout was not null"); + clearTimeout(this._rulesetTimeout); + } + if (!this.enabled) { + log.warn( + "Ignoring the scheduling of a new check because the Onion Alias feature is currently disabled." + ); + this._rulesetTimeout = null; + return; + } + log.debug(`Scheduling ruleset update in ${dt}`); + this._rulesetTimeout = setTimeout(() => { + this._rulesetTimeout = null; + this._periodicRulesetCheck(); + }, dt); + } + + _notifyChanges() { + Services.obs.notifyObservers( + Array.from(this._channels.values(), ch => ch.toJSON()), + OnionAliasStoreTopics.ChannelsChanged + ); + } + + get enabled() { + return Services.prefs.getBoolPref(kPrefOnionAliasEnabled, true); + } + + observe(aSubject, aTopic, aData) { + if (aTopic === "nsPref:changed") { + if (this.enabled) { + this._startUpdates(); + } else if (this._rulesetTimeout) { + clearTimeout(this._rulesetTimeout); + this._rulesetTimeout = null; + } + } + } +} + +const OnionAliasStore = new _OnionAliasStore(); diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build index 27f9d2da4a9e..8644548caa15 100644 --- a/browser/components/onionservices/moz.build +++ b/browser/components/onionservices/moz.build @@ -1,6 +1,7 @@ JAR_MANIFESTS += ["jar.mn"]
EXTRA_JS_MODULES += [ + "OnionAliasStore.jsm", "OnionLocationChild.jsm", "OnionLocationParent.jsm", ] diff --git a/browser/components/rulesets/RulesetsChild.jsm b/browser/components/rulesets/RulesetsChild.jsm new file mode 100644 index 000000000000..e30de9c7201b --- /dev/null +++ b/browser/components/rulesets/RulesetsChild.jsm @@ -0,0 +1,11 @@ +// Copyright (c) 2022, The Tor Project, Inc. + +"use strict"; + +var EXPORTED_SYMBOLS = ["RulesetsChild"]; + +const { RemotePageChild } = ChromeUtils.import( + "resource://gre/actors/RemotePageChild.jsm" +); + +class RulesetsChild extends RemotePageChild {} diff --git a/browser/components/rulesets/RulesetsParent.jsm b/browser/components/rulesets/RulesetsParent.jsm new file mode 100644 index 000000000000..6a9553644cb1 --- /dev/null +++ b/browser/components/rulesets/RulesetsParent.jsm @@ -0,0 +1,79 @@ +// Copyright (c) 2022, The Tor Project, Inc. + +"use strict"; + +var EXPORTED_SYMBOLS = ["RulesetsParent"]; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm"); +const { OnionAliasStore, OnionAliasStoreTopics } = ChromeUtils.import( + "resource:///modules/OnionAliasStore.jsm" +); + +const kShowWarningPref = "torbrowser.rulesets.show_warning"; + +// This class allows about:rulesets to get TorStrings and to load/save the +// preference for skipping the warning +class RulesetsParent extends JSWindowActorParent { + constructor(...args) { + super(...args); + + const self = this; + this.observer = { + observe(aSubject, aTopic, aData) { + const obj = aSubject?.wrappedJSObject; + if (aTopic === OnionAliasStoreTopics.ChannelsChanged && obj) { + self.sendAsyncMessage("rulesets:channels-change", obj); + } + }, + }; + Services.obs.addObserver( + this.observer, + OnionAliasStoreTopics.ChannelsChanged + ); + } + + willDestroy() { + Services.obs.removeObserver( + this.observer, + OnionAliasStoreTopics.ChannelsChanged + ); + } + + async receiveMessage(message) { + switch (message.name) { + // RPMSendAsyncMessage + case "rulesets:delete-channel": + OnionAliasStore.deleteChannel(message.data); + break; + case "rulesets:enable-channel": + OnionAliasStore.enableChannel(message.data.name, message.data.enabled); + break; + case "rulesets:set-show-warning": + Services.prefs.setBoolPref(kShowWarningPref, message.data); + break; + // RPMSendQuery + case "rulesets:get-channels": + return OnionAliasStore.getChannels(); + case "rulesets:get-init-args": + return { + TorStrings, + showWarning: Services.prefs.getBoolPref(kShowWarningPref, true), + }; + case "rulesets:set-channel": + const ch = await OnionAliasStore.setChannel(message.data); + return ch; + case "rulesets:update-channel": + // We need to catch any error in this way, because in case of an + // exception, RPMSendQuery does not return on the other side + try { + const channel = await OnionAliasStore.updateChannel(message.data); + return channel; + } catch (err) { + console.error("Cannot update the channel", err); + return { error: err.toString() }; + } + } + return undefined; + } +} diff --git a/browser/components/rulesets/content/aboutRulesets.css b/browser/components/rulesets/content/aboutRulesets.css new file mode 100644 index 000000000000..fc4b66f0e514 --- /dev/null +++ b/browser/components/rulesets/content/aboutRulesets.css @@ -0,0 +1,305 @@ +/* Copyright (c) 2022, The Tor Project, Inc. */ + +/* General rules */ + +html, body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; +} + +body { + font: message-box; + background-color: var(--in-content-page-background); + color: var(--in-content-page-color); + font-size: 15px; + cursor: default; +} + +label { + display: flex; + align-items: center; + padding: 6px 0; +} + +input[type=text] { + margin: 0; + width: 360px; + max-width: 100%; +} + +textarea { + margin: 0; + width: var(--content-width); + max-width: 100%; + box-sizing: border-box; +} + +select, option { + font-weight: 700; +} + +dt { + margin: var(--ruleset-vmargin) 0 0 0; + padding: 0; + color: var(--in-content-deemphasized-text); + font-size: 85%; +} + +dd { + margin: 8px 0 0 0; + padding: 0; + max-width: 600px; + box-sizing: border-box; + line-height: 1.4; +} + +hr { + width: 40px; + margin: 0; + border: none; + border-top: 1px solid var(--in-content-border-color); +} + +.hidden { + display: none !important; +} + +/* Initial warning */ + +#warning-wrapper { + display: none; +} + +.state-warning #warning-wrapper { + display: flex; + align-items: center; + height: 100%; +} + +#warning { + margin-top: -20vh; + padding: 0 160px; + background-image: url("chrome://global/skin/icons/warning.svg"); + background-position: 84px 0; + background-repeat: no-repeat; + background-size: 48px; + fill: #ffbd4f; + -moz-context-properties: fill; +} + +#warning:dir(rtl) { + background-position: right 84px top 0; +} + +#warning-description { + margin: 30px 0 16px 0; +} + +#warning-buttonbar { + margin-top: 30px; + text-align: right; +} + +/* Actual content */ + +:root { + --sidebar-width: 320px; + --content-width: 600px; + --ruleset-vmargin: 40px; +} + +#main-content { + display: flex; + height: 100%; +} + +.state-warning #main-content { + display: none; +} + +section { + display: none; + flex: 1 0 auto; + padding: 40px; +} + +.title { + display: flex; + align-items: center; + width: var(--content-width); + max-width: 100%; + padding-bottom: 16px; + border-bottom: 1px solid var(--in-content-border-color); +} + +.title h1 { + margin: 0; + padding: 0; + padding-inline-start: 35px; + font-size: 20px; + font-weight: 700; + line-height: 30px; + background-image: url("chrome://browser/content/rulesets/securedrop.svg"); + background-position: 0 4px; + background-size: 22px; + background-repeat: no-repeat; +} + +#main-content h1:dir(rtl) { + background-position: right 0 top 4px; +} + +/* Ruleset list */ + +aside { + display: flex; + flex-direction: column; + flex: 0 0 var(--sidebar-width); + box-sizing: border-box; + + border-inline-end: 1px solid var(--in-content-border-color); + background-color: var(--in-content-box-background); +} + +#ruleset-heading { + padding: 16px; + text-align: center; + font-weight: 700; + border-bottom: 1px solid var(--in-content-border-color); +} + +#ruleset-list-container { + flex: 1; +} + +#ruleset-list-empty { + padding: 16px; + text-align: center; +} + +#ruleset-list-empty-description { + font-size: 80%; +} + +#ruleset-list { + margin: 0; + padding: 0; +} + +#ruleset-list li { + display: flex; + align-items: center; + margin: 0; + padding: 10px 18px; + list-style: none; + border-inline-start: 4px solid transparent; + border-bottom: 1px solid var(--in-content-border-color); +} + +#ruleset-list li:last-child { + border-bottom: none; +} + +#ruleset-list .icon { + width: 16px; + height: 16px; + margin-inline-end: 12px; + background-image: url("chrome://browser/content/rulesets/securedrop.svg"); + background-size: 16px; +} + +#ruleset-list .icon.has-favicon { + background: transparent; +} + +#ruleset-list .name { + font-weight: 700; +} + +#ruleset-list .description { + font-size: 85%; + color: var(--in-content-deemphasized-text); +} + +#ruleset-list .selected { + border-inline-start-color: var(--in-content-accent-color); +} + +#ruleset-list .selected.disabled { + border-inline-start-color: var(--in-content-border-color); +} + +#ruleset-list li:not(.selected):hover { + background-color: var(--in-content-button-background-hover); + color: var(--in-content-button-text-color-hover); +} + +#ruleset-list li:not(.selected):hover:active { + background-color: var(--in-content-button-background-active); +} + +#ruleset-list #ruleset-template { + display: none; +} + +/* Ruleset details */ + +.state-details #ruleset-details { + display: block; +} + +#ruleset-jwk-value { + padding: 8px; + border-radius: 2px; + background-color: var(--in-content-box-background); + font-size: 85%; + line-break: anywhere; +} + +#ruleset-edit { + margin-inline-start: auto; + padding-inline-start: 32px; + background-image: url("chrome://global/skin/icons/edit.svg"); + background-repeat: no-repeat; + background-position: 8px; + -moz-context-properties: fill; + fill: currentColor; + min-width: auto; + flex: 0 0 auto; +} + +#ruleset-enable { + margin-top: var(--ruleset-vmargin); +} + +#ruleset-buttonbar { + margin: var(--ruleset-vmargin) 0; +} + +#ruleset-updated { + margin-top: 24px; + color: var(--in-content-deemphasized-text); + font-size: 85%; +} + +/* Edit ruleset */ + +.state-edit #edit-ruleset { + display: block; +} + +#edit-ruleset label { + color: var(--in-content-deemphasized-text); + display: block; +} + +#edit-ruleset label, #edit-buttonbar { + margin-top: var(--ruleset-vmargin); +} + +label#edit-enable { + display: flex; + align-items: center; +} diff --git a/browser/components/rulesets/content/aboutRulesets.html b/browser/components/rulesets/content/aboutRulesets.html new file mode 100644 index 000000000000..65733caac8b8 --- /dev/null +++ b/browser/components/rulesets/content/aboutRulesets.html @@ -0,0 +1,107 @@ +<!-- Copyright (c) 2022, The Tor Project, Inc. --> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" /> + <link rel="stylesheet" href="chrome://global/skin/in-content/common.css"> + <link rel="stylesheet" href="chrome://browser/content/rulesets/aboutRulesets.css"> + </head> + <body> + <!-- Warning --> + <div id="warning-wrapper"> + <div id="warning"> + <h1 id="warning-title"></h1> + <p id="warning-description"></p> + <p> + <label> + <input id="warning-enable-checkbox" type="checkbox" checked="checked"> + <span id="warning-enable-label"></span> + </label> + </p> + <div id="warning-buttonbar"> + <button id="warning-button" autofocus="autofocus"></button> + </div> + </div> + </div> + + <div id="main-content"> + <!-- Ruleset list --> + <aside> + <div id="ruleset-heading"></div> + <div id="ruleset-list-container"> + <div id="ruleset-list-empty"> + <p id="ruleset-list-empty-title"></p> + <p id="ruleset-list-empty-description"></p> + </div> + <ul id="ruleset-list"> + <li id="ruleset-template"> + <div class="icon"> + </div> + <div> + <div class="name"></div> + <div class="description"></div> + </div> + </li> + </ul> + </div> + </aside> + + <!-- Ruleset details --> + <section id="ruleset-details"> + <div class="title"> + <h1 id="ruleset-title"></h1> + <button id="ruleset-edit" class="ghost-button"></button> + </div> + <dl> + <dt id="ruleset-jwk-label"></dt> + <dd id="ruleset-jwk-value"></dd> + <dt id="ruleset-path-prefix-label"></dt> + <dd> + <a id="ruleset-path-prefix-value" target="_blank"></a> + </dd> + <dt id="ruleset-scope-label"></dt> + <dd id="ruleset-scope-value"></dd> + </dl> + <label id="ruleset-enable"> + <input type="checkbox" id="ruleset-enable-checkbox"> + <span id="ruleset-enable-label"></span> + </label> + <div id="ruleset-buttonbar"> + <button id="ruleset-update-button"></button> + </div> + <hr> + <p id="ruleset-updated"></p> + </section> + + <!-- Edit ruleset --> + <section id="edit-ruleset"> + <div class="title"> + <h1 id="edit-title"></h1> + </div> + <form id="edit-ruleset-form"> + <label> + <div id="edit-jwk-label"></div> + <textarea id="edit-jwk-textarea" rows="10"></textarea> + </label> + <label> + <div id="edit-path-prefix-label"></div> + <input id="edit-path-prefix-input" type="text"> + </label> + <label> + <div id="edit-scope-label"></div> + <input id="edit-scope-input" type="text"> + </label> + <label id="edit-enable"> + <input type="checkbox" id="edit-enable-checkbox"> + <span id="edit-enable-label"></span> + </label> + <div id="edit-buttonbar"> + <button id="edit-save" class="primary"></button> + <button id="edit-cancel"></button> + </div> + </form> + </section> + </div> + <script src="chrome://browser/content/rulesets/aboutRulesets.js"></script> + </body> +</html> diff --git a/browser/components/rulesets/content/aboutRulesets.js b/browser/components/rulesets/content/aboutRulesets.js new file mode 100644 index 000000000000..4fabdca1b93d --- /dev/null +++ b/browser/components/rulesets/content/aboutRulesets.js @@ -0,0 +1,531 @@ +"use strict"; + +/* globals RPMAddMessageListener, RPMSendQuery, RPMSendAsyncMessage */ + +let TorStrings; + +const Orders = Object.freeze({ + Name: "name", + NameDesc: "name-desc", + LastUpdate: "last-update", +}); + +const States = Object.freeze({ + Warning: "warning", + Details: "details", + Edit: "edit", + NoRulesets: "noRulesets", +}); + +function setUpdateDate(ruleset, element) { + if (!ruleset.enabled) { + element.textContent = TorStrings.rulesets.disabled; + return; + } + if (!ruleset.currentTimestamp) { + element.textContent = TorStrings.rulesets.neverUpdated; + return; + } + + const formatter = new Intl.DateTimeFormat(navigator.languages, { + year: "numeric", + month: "long", + day: "numeric", + }); + element.textContent = TorStrings.rulesets.lastUpdated.replace( + "%S", + formatter.format(new Date(ruleset.currentTimestamp * 1000)) + ); +} + +class WarningState { + selectors = Object.freeze({ + wrapper: "#warning-wrapper", + title: "#warning-title", + description: "#warning-description", + enableCheckbox: "#warning-enable-checkbox", + enableLabel: "#warning-enable-label", + button: "#warning-button", + }); + + elements = Object.freeze({ + wrapper: document.querySelector(this.selectors.wrapper), + title: document.querySelector(this.selectors.title), + description: document.querySelector(this.selectors.description), + enableCheckbox: document.querySelector(this.selectors.enableCheckbox), + enableLabel: document.querySelector(this.selectors.enableLabel), + button: document.querySelector(this.selectors.button), + }); + + constructor() { + const elements = this.elements; + elements.title.textContent = TorStrings.rulesets.warningTitle; + elements.description.textContent = TorStrings.rulesets.warningDescription; + elements.enableLabel.textContent = TorStrings.rulesets.warningEnable; + elements.button.textContent = TorStrings.rulesets.warningButton; + elements.enableCheckbox.addEventListener( + "change", + this.onEnableChange.bind(this) + ); + elements.button.addEventListener("click", this.onButtonClick.bind(this)); + } + + show() { + this.elements.button.focus(); + } + + hide() {} + + onEnableChange() { + RPMSendAsyncMessage( + "rulesets:set-show-warning", + this.elements.enableCheckbox.checked + ); + } + + onButtonClick() { + gAboutRulesets.selectFirst(); + } +} + +class DetailsState { + selectors = Object.freeze({ + title: "#ruleset-title", + edit: "#ruleset-edit", + jwkLabel: "#ruleset-jwk-label", + jwkValue: "#ruleset-jwk-value", + pathPrefixLabel: "#ruleset-path-prefix-label", + pathPrefixValue: "#ruleset-path-prefix-value", + scopeLabel: "#ruleset-scope-label", + scopeValue: "#ruleset-scope-value", + enableCheckbox: "#ruleset-enable-checkbox", + enableLabel: "#ruleset-enable-label", + updateButton: "#ruleset-update-button", + updated: "#ruleset-updated", + }); + + elements = Object.freeze({ + title: document.querySelector(this.selectors.title), + edit: document.querySelector(this.selectors.edit), + jwkLabel: document.querySelector(this.selectors.jwkLabel), + jwkValue: document.querySelector(this.selectors.jwkValue), + pathPrefixLabel: document.querySelector(this.selectors.pathPrefixLabel), + pathPrefixValue: document.querySelector(this.selectors.pathPrefixValue), + scopeLabel: document.querySelector(this.selectors.scopeLabel), + scopeValue: document.querySelector(this.selectors.scopeValue), + enableCheckbox: document.querySelector(this.selectors.enableCheckbox), + enableLabel: document.querySelector(this.selectors.enableLabel), + updateButton: document.querySelector(this.selectors.updateButton), + updated: document.querySelector(this.selectors.updated), + }); + + constructor() { + const elements = this.elements; + elements.edit.textContent = TorStrings.rulesets.edit; + elements.edit.addEventListener("click", this.onEdit.bind(this)); + elements.jwkLabel.textContent = TorStrings.rulesets.jwk; + elements.pathPrefixLabel.textContent = TorStrings.rulesets.pathPrefix; + elements.scopeLabel.textContent = TorStrings.rulesets.scope; + elements.enableCheckbox.addEventListener( + "change", + this.onEnable.bind(this) + ); + elements.enableLabel.textContent = TorStrings.rulesets.enable; + elements.updateButton.textContent = TorStrings.rulesets.checkUpdates; + elements.updateButton.addEventListener("click", this.onUpdate.bind(this)); + } + + show(ruleset) { + const elements = this.elements; + elements.title.textContent = ruleset.name; + elements.jwkValue.textContent = JSON.stringify(ruleset.jwk); + elements.pathPrefixValue.setAttribute("href", ruleset.pathPrefix); + elements.pathPrefixValue.textContent = ruleset.pathPrefix; + elements.scopeValue.textContent = ruleset.scope; + elements.enableCheckbox.checked = ruleset.enabled; + if (ruleset.enabled) { + elements.updateButton.removeAttribute("disabled"); + } else { + elements.updateButton.setAttribute("disabled", "disabled"); + } + setUpdateDate(ruleset, elements.updated); + this._showing = ruleset; + + gAboutRulesets.list.setItemSelected(ruleset.name); + } + + hide() { + this._showing = null; + } + + onEdit() { + gAboutRulesets.setState(States.Edit, this._showing); + } + + async onEnable() { + await RPMSendAsyncMessage("rulesets:enable-channel", { + name: this._showing.name, + enabled: this.elements.enableCheckbox.checked, + }); + } + + async onUpdate() { + try { + await RPMSendQuery("rulesets:update-channel", this._showing.name); + } catch (err) { + console.error("Could not update the rulesets", err); + } + } +} + +class EditState { + selectors = Object.freeze({ + form: "#edit-ruleset-form", + title: "#edit-title", + nameGroup: "#edit-name-group", + nameLabel: "#edit-name-label", + nameInput: "#edit-name-input", + jwkLabel: "#edit-jwk-label", + jwkTextarea: "#edit-jwk-textarea", + pathPrefixLabel: "#edit-path-prefix-label", + pathPrefixInput: "#edit-path-prefix-input", + scopeLabel: "#edit-scope-label", + scopeInput: "#edit-scope-input", + enableCheckbox: "#edit-enable-checkbox", + enableLabel: "#edit-enable-label", + save: "#edit-save", + cancel: "#edit-cancel", + }); + + elements = Object.freeze({ + form: document.querySelector(this.selectors.form), + title: document.querySelector(this.selectors.title), + jwkLabel: document.querySelector(this.selectors.jwkLabel), + jwkTextarea: document.querySelector(this.selectors.jwkTextarea), + pathPrefixLabel: document.querySelector(this.selectors.pathPrefixLabel), + pathPrefixInput: document.querySelector(this.selectors.pathPrefixInput), + scopeLabel: document.querySelector(this.selectors.scopeLabel), + scopeInput: document.querySelector(this.selectors.scopeInput), + enableCheckbox: document.querySelector(this.selectors.enableCheckbox), + enableLabel: document.querySelector(this.selectors.enableLabel), + save: document.querySelector(this.selectors.save), + cancel: document.querySelector(this.selectors.cancel), + }); + + constructor() { + const elements = this.elements; + elements.jwkLabel.textContent = TorStrings.rulesets.jwk; + elements.jwkTextarea.setAttribute( + "placeholder", + TorStrings.rulesets.jwkPlaceholder + ); + elements.pathPrefixLabel.textContent = TorStrings.rulesets.pathPrefix; + elements.pathPrefixInput.setAttribute( + "placeholder", + TorStrings.rulesets.pathPrefixPlaceholder + ); + elements.scopeLabel.textContent = TorStrings.rulesets.scope; + elements.scopeInput.setAttribute( + "placeholder", + TorStrings.rulesets.scopePlaceholder + ); + elements.enableLabel.textContent = TorStrings.rulesets.enable; + elements.save.textContent = TorStrings.rulesets.save; + elements.save.addEventListener("click", this.onSave.bind(this)); + elements.cancel.textContent = TorStrings.rulesets.cancel; + elements.cancel.addEventListener("click", this.onCancel.bind(this)); + } + + show(ruleset) { + const elements = this.elements; + elements.form.reset(); + elements.title.textContent = ruleset.name; + elements.jwkTextarea.value = JSON.stringify(ruleset.jwk); + elements.pathPrefixInput.value = ruleset.pathPrefix; + elements.scopeInput.value = ruleset.scope; + elements.enableCheckbox.checked = ruleset.enabled; + this._editing = ruleset; + } + + hide() { + this.elements.form.reset(); + this._editing = null; + } + + async onSave(e) { + e.preventDefault(); + const elements = this.elements; + + let valid = true; + const name = this._editing.name; + + let jwk; + try { + jwk = JSON.parse(elements.jwkTextarea.value); + await crypto.subtle.importKey( + "jwk", + jwk, + { + name: "RSA-PSS", + saltLength: 32, + hash: { name: "SHA-256" }, + }, + true, + ["verify"] + ); + elements.jwkTextarea.setCustomValidity(""); + } catch (err) { + console.error("Invalid JSON or invalid JWK", err); + elements.jwkTextarea.setCustomValidity(TorStrings.rulesets.jwkInvalid); + valid = false; + } + + const pathPrefix = elements.pathPrefixInput.value.trim(); + try { + const url = new URL(pathPrefix); + if (url.protocol !== "http:" && url.protocol !== "https:") { + elements.pathPrefixInput.setCustomValidity( + TorStrings.rulesets.pathPrefixInvalid + ); + valid = false; + } else { + elements.pathPrefixInput.setCustomValidity(""); + } + } catch (err) { + console.error("The path prefix is not a valid URL", err); + elements.pathPrefixInput.setCustomValidity( + TorStrings.rulesets.pathPrefixInvalid + ); + valid = false; + } + + let scope; + try { + scope = new RegExp(elements.scopeInput.value.trim()); + elements.scopeInput.setCustomValidity(""); + } catch (err) { + elements.scopeInput.setCustomValidity(TorStrings.rulesets.scopeInvalid); + valid = false; + } + + if (!valid) { + return; + } + + const enabled = elements.enableCheckbox.checked; + + const rulesetData = { name, jwk, pathPrefix, scope, enabled }; + const ruleset = await RPMSendQuery("rulesets:set-channel", rulesetData); + gAboutRulesets.setState(States.Details, ruleset); + if (enabled) { + try { + await RPMSendQuery("rulesets:update-channel", name); + } catch (err) { + console.warn("Could not update the ruleset after adding it", err); + } + } + } + + onCancel(e) { + e.preventDefault(); + if (this._editing === null) { + gAboutRulesets.selectFirst(); + } else { + gAboutRulesets.setState(States.Details, this._editing); + } + } +} + +class NoRulesetsState { + show() {} + hide() {} +} + +class RulesetList { + selectors = Object.freeze({ + heading: "#ruleset-heading", + list: "#ruleset-list", + emptyContainer: "#ruleset-list-empty", + emptyTitle: "#ruleset-list-empty-title", + emptyDescription: "#ruleset-list-empty-description", + itemTemplate: "#ruleset-template", + itemName: ".name", + itemDescr: ".description", + }); + + elements = Object.freeze({ + heading: document.querySelector(this.selectors.heading), + list: document.querySelector(this.selectors.list), + emptyContainer: document.querySelector(this.selectors.emptyContainer), + emptyTitle: document.querySelector(this.selectors.emptyTitle), + emptyDescription: document.querySelector(this.selectors.emptyDescription), + itemTemplate: document.querySelector(this.selectors.itemTemplate), + }); + + nameAttribute = "data-name"; + + rulesets = []; + + constructor() { + const elements = this.elements; + + // Header + elements.heading.textContent = TorStrings.rulesets.rulesets; + // Empty + elements.emptyTitle.textContent = TorStrings.rulesets.noRulesets; + elements.emptyDescription.textContent = TorStrings.rulesets.noRulesetsDescr; + + RPMAddMessageListener( + "rulesets:channels-change", + this.onRulesetsChanged.bind(this) + ); + } + + getSelectedRuleset() { + const name = this.elements.list + .querySelector(".selected") + ?.getAttribute(this.nameAttribute); + for (const ruleset of this.rulesets) { + if (ruleset.name == name) { + return ruleset; + } + } + return null; + } + + isEmpty() { + return !this.rulesets.length; + } + + async update() { + this.rulesets = await RPMSendQuery("rulesets:get-channels"); + await this._populateRulesets(); + } + + setItemSelected(name) { + name = name.replace(/["\]/g, "\$&"); + const item = this.elements.list.querySelector( + `.item[${this.nameAttribute}="${name}"]` + ); + this._selectItem(item); + } + + async _populateRulesets() { + if (this.isEmpty()) { + this.elements.emptyContainer.classList.remove("hidden"); + } else { + this.elements.emptyContainer.classList.add("hidden"); + } + + const list = this.elements.list; + const selName = list + .querySelector(".item.selected") + ?.getAttribute(this.nameAttribute); + const items = list.querySelectorAll(".item"); + for (const item of items) { + item.remove(); + } + + for (const ruleset of this.rulesets) { + const item = this._addItem(ruleset); + if (ruleset.name === selName) { + this._selectItem(item); + } + } + } + + _addItem(ruleset) { + const item = this.elements.itemTemplate.cloneNode(true); + item.removeAttribute("id"); + item.classList.add("item"); + item.querySelector(this.selectors.itemName).textContent = ruleset.name; + const descr = item.querySelector(this.selectors.itemDescr); + if (ruleset.enabled) { + setUpdateDate(ruleset, descr); + } else { + descr.textContent = TorStrings.rulesets.disabled; + item.classList.add("disabled"); + } + item.setAttribute(this.nameAttribute, ruleset.name); + item.addEventListener("click", () => { + this.onRulesetClick(ruleset); + }); + this.elements.list.append(item); + return item; + } + + _selectItem(item) { + this.elements.list.querySelector(".selected")?.classList.remove("selected"); + item?.classList.add("selected"); + } + + onRulesetClick(ruleset) { + gAboutRulesets.setState(States.Details, ruleset); + } + + onRulesetsChanged(data) { + this.rulesets = data.data; + this._populateRulesets(); + const selected = this.getSelectedRuleset(); + if (selected !== null) { + gAboutRulesets.setState(States.Details, selected); + } + } +} + +class AboutRulesets { + _state = null; + + async init() { + const args = await RPMSendQuery("rulesets:get-init-args"); + TorStrings = args.TorStrings; + const showWarning = args.showWarning; + + this.list = new RulesetList(); + this._states = {}; + this._states[States.Warning] = new WarningState(); + this._states[States.Details] = new DetailsState(); + this._states[States.Edit] = new EditState(); + this._states[States.NoRulesets] = new NoRulesetsState(); + + await this.refreshRulesets(); + + if (showWarning) { + this.setState(States.Warning); + } else { + this.selectFirst(); + } + } + + setState(state, ...args) { + document.querySelector("body").className = `state-${state}`; + this._state?.hide(); + this._state = this._states[state]; + this._state.show(...args); + } + + async refreshRulesets() { + await this.list.update(); + if (this._state === this._states[States.Details]) { + const ruleset = this.list.getSelectedRuleset(); + if (ruleset !== null) { + this.setState(States.Details, ruleset); + } else { + this.selectFirst(); + } + } else if (this.list.isEmpty()) { + this.setState(States.NoRulesets); + } + } + + selectFirst() { + if (this.list.isEmpty()) { + this.setState(States.NoRulesets); + } else { + this.setState("details", this.list.rulesets[0]); + } + } +} + +const gAboutRulesets = new AboutRulesets(); +gAboutRulesets.init(); diff --git a/browser/components/rulesets/content/securedrop.svg b/browser/components/rulesets/content/securedrop.svg new file mode 100644 index 000000000000..69cd584ac1ed --- /dev/null +++ b/browser/components/rulesets/content/securedrop.svg @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 23.0.5, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 423.3 423.3" + xml:space="preserve" + width="423.29999" + height="423.29999" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/%22%3E<defs + id="defs49"> + + + + + + + + + + + <defs + id="defs24"> + <filter + id="Adobe_OpacityMaskFilter_1_" + filterUnits="userSpaceOnUse" + x="-66" + y="-0.89999998" + width="183.3" + height="318.20001"> + <feColorMatrix + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" + id="feColorMatrix21" /> + </filter> + </defs> + <mask + maskUnits="userSpaceOnUse" + x="-66" + y="-0.9" + width="183.3" + height="318.2" + id="mask-4_1_"> + <g + class="st4" + id="g27"> + <polygon + id="path-3_1_" + class="st2" + points="117.3,-0.9 117.3,317.3 -66,317.3 -66,-0.9 " /> + </g> + </mask> + + + + <defs + id="defs36"> + <filter + id="Adobe_OpacityMaskFilter_2_" + filterUnits="userSpaceOnUse" + x="-66" + y="-1" + width="366.29999" + height="211.3"> + <feColorMatrix + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" + id="feColorMatrix33" /> + </filter> + </defs> + <mask + maskUnits="userSpaceOnUse" + x="-66" + y="-1" + width="366.3" + height="211.3" + id="mask-6_1_"> + <g + class="st6" + id="g39"> + <polygon + id="path-5_1_" + class="st2" + points="300.3,-1 300.3,210.3 -66,210.3 -66,-1 " /> + </g> + </mask> + + + + + <defs + id="defs11"> + <filter + id="Adobe_OpacityMaskFilter" + filterUnits="userSpaceOnUse" + x="-65.199997" + y="-0.89999998" + width="183.5" + height="318.20001"> + <feColorMatrix + type="matrix" + values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" + id="feColorMatrix8" /> + </filter> + </defs> + <mask + maskUnits="userSpaceOnUse" + x="-65.2" + y="-0.9" + width="183.5" + height="318.2" + id="mask-2_1_"> + <g + class="st1" + id="g14"> + <polygon + id="path-1_1_" + class="st2" + points="-65.2,317.3 -65.2,-0.9 118.3,-0.9 118.3,317.3 " /> + </g> + </mask> + + + + </defs> +<style + type="text/css" + id="style2"> + .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#055FB4;} + .st1{filter:url(#Adobe_OpacityMaskFilter);} + .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;} + .st3{mask:url(#mask-2_1_);fill-rule:evenodd;clip-rule:evenodd;fill:#055FB4;} + .st4{filter:url(#Adobe_OpacityMaskFilter_1_);} + .st5{mask:url(#mask-4_1_);fill-rule:evenodd;clip-rule:evenodd;fill:#093D70;} + .st6{filter:url(#Adobe_OpacityMaskFilter_2_);} + .st7{mask:url(#mask-6_1_);fill-rule:evenodd;clip-rule:evenodd;fill:#2E8AE8;} +</style> +<title + id="title4">Big Logo HP</title> +<circle + style="fill:#ffffff;stroke:none;stroke-width:2.66667" + id="path1626" + r="176.46054" + cy="211.64999" + cx="211.64999" /><path + id="Fill-1" + class="st0" + d="m 327.99999,225.5 -41.8,23.9 0.2,58.5 42.5,-23.6 c 5.1,-2.8 8.3,-8.3 8.3,-14 v -39.7 c -0.2,-0.9 -0.2,-2.1 -0.9,-2.8 -1.9,-2.8 -5.6,-3.9 -8.3,-2.3" /><path + id="Fill-3" + class="st3" + d="m 85.9,173.2 c 0,9.9 -5.3,19 -14,24.1 l -90.7,52.3 V 127.3 l 84,-48.6 c 2.1,-1.1 4.4,-1.8 6.9,-1.8 7.6,0 13.8,6.2 13.8,13.8 z M -65.2,104.9 V 317.3 L 118.3,211.5 V -0.9 Z" + mask="url(#mask-2_1_)" + transform="translate(276.49999,106)" /><path + id="Fill-7" + class="st5" + d="M 71.7,158.3 3.3,118.8 v 14 l 68.4,39.5 v 73.9 L -22.2,192 v -30.1 l 64,37.2 v -13.8 l -64,-37.2 V 75 l 93.8,54.2 v 29.1 z M -66,-0.9 V 211.5 L 117.3,317.3 V 104.9 Z" + mask="url(#mask-4_1_)" + transform="translate(94.499994,106)" /><path + id="Fill-10" + class="st7" + d="m 135,143.2 55.3,-31.1 -62.2,-17.2 c 1.1,-2.1 1.8,-4.4 1.8,-6.6 0,-11.5 -16.7,-21.1 -37.4,-21.1 -20.6,0 -37.4,9.4 -37.4,21.1 0,11.7 16.7,21.1 37.4,21.1 2.8,0 5.3,-0.2 8,-0.5 z M 117,210.3 -66,104.7 117,-1 300.3,104.7 Z" + mask="url(#mask-6_1_)" + transform="translate(94.499994,1)" /> +<metadata + id="metadata866">rdf:RDF<cc:Work + rdf:about="">dc:titleBig Logo HP</dc:title></cc:Work></rdf:RDF></metadata></svg> diff --git a/browser/components/rulesets/jar.mn b/browser/components/rulesets/jar.mn new file mode 100644 index 000000000000..e0b67442d89c --- /dev/null +++ b/browser/components/rulesets/jar.mn @@ -0,0 +1,5 @@ +browser.jar: + content/browser/rulesets/aboutRulesets.css (content/aboutRulesets.css) + content/browser/rulesets/aboutRulesets.html (content/aboutRulesets.html) + content/browser/rulesets/aboutRulesets.js (content/aboutRulesets.js) + content/browser/rulesets/securedrop.svg (content/securedrop.svg) diff --git a/browser/components/rulesets/moz.build b/browser/components/rulesets/moz.build new file mode 100644 index 000000000000..daec4c302524 --- /dev/null +++ b/browser/components/rulesets/moz.build @@ -0,0 +1,6 @@ +JAR_MANIFESTS += ['jar.mn'] + +EXTRA_JS_MODULES += [ + 'RulesetsChild.jsm', + 'RulesetsParent.jsm', +] diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 23a237ee71b9..a0e31fbedfc7 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -1538,6 +1538,11 @@ value: true mirror: always
+- name: browser.urlbar.onionRewrites.enabled + type: RelaxedAtomicBool + value: true + mirror: always + - name: browser.viewport.desktopWidth type: RelaxedAtomicInt32 value: 980 diff --git a/netwerk/build/components.conf b/netwerk/build/components.conf index 38db2e513bd7..75ea79d087a3 100644 --- a/netwerk/build/components.conf +++ b/netwerk/build/components.conf @@ -658,3 +658,14 @@ if link_service: 'singleton': True, }, **link_service) ] + +Classes += [ + { + 'cid': '{0df7784b-7316-486d-bc99-bf47b7a05974}', + 'contract_ids': ['@torproject.org/onion-alias-service;1'], + 'singleton': True, + 'type': 'IOnionAliasService', + 'constructor': 'torproject::OnionAliasService::GetSingleton', + 'headers': ['torproject/OnionAliasService.h'], + }, +] diff --git a/netwerk/build/nsNetCID.h b/netwerk/build/nsNetCID.h index 43817c837412..82f6fc02dfb7 100644 --- a/netwerk/build/nsNetCID.h +++ b/netwerk/build/nsNetCID.h @@ -845,4 +845,14 @@ } \ }
+// Onion alias service implementing IOnionAliasService +#define ONIONALIAS_CONTRACTID \ + "@torproject.org/onion-alias-service;1" +#define ONIONALIAS_CID \ + { /* 0df7784b-7316-486d-bc99-bf47b7a05974 */ \ + 0x0df7784b, 0x7316, 0x486d, { \ + 0xbc, 0x99, 0xbf, 0x47, 0xb7, 0xa0, 0x59, 0x74 \ + } \ + } + #endif // nsNetCID_h__ diff --git a/netwerk/dns/IOnionAliasService.idl b/netwerk/dns/IOnionAliasService.idl new file mode 100644 index 000000000000..692c74b91793 --- /dev/null +++ b/netwerk/dns/IOnionAliasService.idl @@ -0,0 +1,34 @@ +#include "nsISupports.idl" + +/** + * Service used for .tor.onion aliases. + * It stores the real .onion address that correspond to .tor.onion addresses, + * so that both C++ code and JS can access them. + */ +[scriptable, uuid(0df7784b-7316-486d-bc99-bf47b7a05974)] +interface IOnionAliasService : nsISupports +{ + /** + * Add a new Onion alias + * @param aShortHostname + * The short hostname that is being rewritten + * @param aLongHostname + * The complete onion v3 hostname + */ + void addOnionAlias(in ACString aShortHostname, + in ACString aLongHostname); + + /** + * Return an onion alias. + * + * @param aShortHostname + * The .tor.onion hostname to resolve + * @return a v3 address, or the input, if the short hostname is not known + */ + ACString getOnionAlias(in ACString aShortHostname); + + /** + * Clears Onion aliases. + */ + void clearOnionAliases(); +}; diff --git a/netwerk/dns/OnionAliasService.cpp b/netwerk/dns/OnionAliasService.cpp new file mode 100644 index 000000000000..50d9841e87b6 --- /dev/null +++ b/netwerk/dns/OnionAliasService.cpp @@ -0,0 +1,99 @@ +#include "torproject/OnionAliasService.h" + +#include "mozilla/ClearOnShutdown.h" +#include "mozilla/StaticPrefs_browser.h" +#include "nsUnicharUtils.h" + +/** + * Check if a hostname is a valid Onion v3 hostname. + * + * @param aHostname + * The hostname to verify. It is not a const reference because any + * uppercase character will be transformed to lowercase during the + * verification. + * @return Tells whether the input string is an Onion v3 address + */ +static bool ValidateOnionV3(nsACString& aHostname) { + constexpr nsACString::size_type v3Length = 56 + 6; + if (aHostname.Length() != v3Length) { + return false; + } + ToLowerCase(aHostname); + if (!StringEndsWith(aHostname, ".onion"_ns)) { + return false; + } + + const char* cur = aHostname.BeginWriting(); + // We have already checked that it ends by ".onion" + const char* end = aHostname.EndWriting() - 6; + for (; cur < end; ++cur) { + if (!(islower(*cur) || ('2' <= *cur && *cur <= '7'))) { + return false; + } + } + + return true; +} + +namespace torproject { + +NS_IMPL_ISUPPORTS(OnionAliasService, IOnionAliasService) + +static mozilla::StaticRefPtr<OnionAliasService> gOAService; + +// static +already_AddRefed<IOnionAliasService> OnionAliasService::GetSingleton() { + if (gOAService) { + return do_AddRef(gOAService); + } + + gOAService = new OnionAliasService(); + ClearOnShutdown(&gOAService); + return do_AddRef(gOAService); +} + +NS_IMETHODIMP +OnionAliasService::AddOnionAlias(const nsACString& aShortHostname, + const nsACString& aLongHostname) { + nsAutoCString shortHostname; + ToLowerCase(aShortHostname, shortHostname); + mozilla::UniquePtr<nsAutoCString> longHostname = + mozilla::MakeUnique<nsAutoCString>(aLongHostname); + if (!longHostname) { + return NS_ERROR_OUT_OF_MEMORY; + } + if (!StringEndsWith(shortHostname, ".tor.onion"_ns) || + !ValidateOnionV3(*longHostname)) { + return NS_ERROR_INVALID_ARG; + } + mozilla::AutoWriteLock lock(mLock); + mOnionAliases.InsertOrUpdate(shortHostname, std::move(longHostname)); + return NS_OK; +} + +NS_IMETHODIMP +OnionAliasService::GetOnionAlias(const nsACString& aShortHostname, + nsACString& aLongHostname) { + aLongHostname = aShortHostname; + if (mozilla::StaticPrefs::browser_urlbar_onionRewrites_enabled() && + StringEndsWith(aShortHostname, ".tor.onion"_ns)) { + nsAutoCString* alias = nullptr; + // We want to keep the string stored in the map alive at least until we + // finish to copy it to the output parameter. + mozilla::AutoReadLock lock(mLock); + if (mOnionAliases.Get(aShortHostname, &alias)) { + // We take for granted aliases have already been validated + aLongHostname.Assign(*alias); + } + } + return NS_OK; +} + +NS_IMETHODIMP +OnionAliasService::ClearOnionAliases() { + mozilla::AutoWriteLock lock(mLock); + mOnionAliases.Clear(); + return NS_OK; +} + +} // namespace torproject diff --git a/netwerk/dns/OnionAliasService.h b/netwerk/dns/OnionAliasService.h new file mode 100644 index 000000000000..5809e4112e24 --- /dev/null +++ b/netwerk/dns/OnionAliasService.h @@ -0,0 +1,40 @@ +#ifndef OnionAliasService_h_ +#define OnionAliasService_h_ + +#include "IOnionAliasService.h" + +#include "mozilla/RWLock.h" +#include "nsClassHashtable.h" +#include "nsHashKeys.h" +#include "ScopedNSSTypes.h" + +namespace torproject { + +class OnionAliasService final : public IOnionAliasService { +public: + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_IONIONALIASSERVICE + + static already_AddRefed<IOnionAliasService> GetSingleton(); + +private: + + OnionAliasService() = default; + OnionAliasService(const OnionAliasService&) = delete; + OnionAliasService(OnionAliasService&&) = delete; + OnionAliasService &operator=(const OnionAliasService&) = delete; + OnionAliasService &operator=(OnionAliasService&&) = delete; + virtual ~OnionAliasService() = default; + + // mLock protects access to mOnionAliases + mozilla::RWLock mLock{"OnionAliasService.mLock"}; + + // AutoCStrings have a 64 byte buffer, so it is advised not to use them for + // long storage. However, it is enough to contain onion addresses, so we use + // them instead, and avoid allocating on heap for each alias + nsClassHashtable<nsCStringHashKey, nsAutoCString> mOnionAliases; +}; + +} + +#endif // OnionAliasService_h_ diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index 91a50a390d69..d7281225c5be 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -5568,6 +5568,8 @@ pro.om
// onion : https://tools.ietf.org/html/rfc7686 onion +tor.onion +securedrop.tor.onion
// org : https://en.wikipedia.org/wiki/.org org diff --git a/netwerk/dns/moz.build b/netwerk/dns/moz.build index 5d81059ed89d..c82689a147ec 100644 --- a/netwerk/dns/moz.build +++ b/netwerk/dns/moz.build @@ -110,3 +110,7 @@ LOCAL_INCLUDES += [ ]
USE_LIBS += ["icu"] + +XPIDL_SOURCES += ["IOnionAliasService.idl"] +UNIFIED_SOURCES += ["OnionAliasService.cpp"] +EXPORTS.torproject += ["OnionAliasService.h"] diff --git a/netwerk/socket/nsSOCKSIOLayer.cpp b/netwerk/socket/nsSOCKSIOLayer.cpp index f9fc29552ace..a9dc8f9dde11 100644 --- a/netwerk/socket/nsSOCKSIOLayer.cpp +++ b/netwerk/socket/nsSOCKSIOLayer.cpp @@ -25,6 +25,8 @@ #include "mozilla/net/DNS.h" #include "mozilla/Unused.h"
+#include "IOnionAliasService.h" + using mozilla::LogLevel; using namespace mozilla::net;
@@ -861,11 +863,23 @@ PRStatus nsSOCKSSocketInfo::WriteV5ConnectRequest() { // Add the address to the SOCKS 5 request. SOCKS 5 supports several // address types, so we pick the one that works best for us. if (proxy_resolve) { - // Add the host name. Only a single byte is used to store the length, - // so we must prevent long names from being used. - buf2 = buf.WriteUint8(0x03) // addr type -- domainname - .WriteUint8(mDestinationHost.Length()) // name length - .WriteString<MAX_HOSTNAME_LEN>(mDestinationHost); // Hostname + if (StringEndsWith(mDestinationHost, ".tor.onion"_ns)) { + nsAutoCString realHost; + nsCOMPtr<IOnionAliasService> oas = do_GetService(ONIONALIAS_CID); + if (NS_FAILED(oas->GetOnionAlias(mDestinationHost, realHost))) { + HandshakeFinished(PR_BAD_ADDRESS_ERROR); + return PR_FAILURE; + } + buf2 = buf.WriteUint8(0x03) + .WriteUint8(realHost.Length()) + .WriteString<MAX_HOSTNAME_LEN>(realHost); + } else { + // Add the host name. Only a single byte is used to store the length, + // so we must prevent long names from being used. + buf2 = buf.WriteUint8(0x03) // addr type -- domainname + .WriteUint8(mDestinationHost.Length()) // name length + .WriteString<MAX_HOSTNAME_LEN>(mDestinationHost); // Hostname + } if (!buf2) { LOGERROR(("socks5: destination host name is too long!")); HandshakeFinished(PR_BAD_ADDRESS_ERROR); diff --git a/security/manager/ssl/SSLServerCertVerification.cpp b/security/manager/ssl/SSLServerCertVerification.cpp index 2df79a3bc11a..32621111e19e 100644 --- a/security/manager/ssl/SSLServerCertVerification.cpp +++ b/security/manager/ssl/SSLServerCertVerification.cpp @@ -137,6 +137,8 @@ #include "sslerr.h" #include "sslexp.h"
+#include "IOnionAliasService.h" + extern mozilla::LazyLogModule gPIPNSSLog;
using namespace mozilla::pkix; @@ -909,6 +911,13 @@ SECStatus SSLServerCertVerificationJob::Dispatch( return SECWouldBlock; }
+void SSLServerCertVerificationJob::FixOnionAlias() { + if (StringEndsWith(mHostName, ".tor.onion"_ns)) { + nsCOMPtr<IOnionAliasService> oas = do_GetService(ONIONALIAS_CID); + oas->GetOnionAlias(mHostName, mHostName); + } +} + NS_IMETHODIMP SSLServerCertVerificationJob::Run() { // Runs on a cert verification thread and only on parent process. diff --git a/security/manager/ssl/SSLServerCertVerification.h b/security/manager/ssl/SSLServerCertVerification.h index fa75bb918e7f..b2190ac393b5 100644 --- a/security/manager/ssl/SSLServerCertVerification.h +++ b/security/manager/ssl/SSLServerCertVerification.h @@ -133,7 +133,9 @@ class SSLServerCertVerificationJob : public Runnable { mStapledOCSPResponse(std::move(stapledOCSPResponse)), mSCTsFromTLSExtension(std::move(sctsFromTLSExtension)), mDCInfo(std::move(dcInfo)), - mResultTask(aResultTask) {} + mResultTask(aResultTask) { FixOnionAlias(); } + + void FixOnionAlias();
uint64_t mAddrForLogging; void* mPinArg; diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm index ec48d9276bde..6bf4f4c97d3b 100644 --- a/toolkit/modules/RemotePageAccessManager.jsm +++ b/toolkit/modules/RemotePageAccessManager.jsm @@ -212,6 +212,20 @@ let RemotePageAccessManager = { ], RPMRecordTelemetryEvent: ["*"], }, + "about:rulesets": { + RPMAddMessageListener: ["rulesets:channels-change"], + RPMSendAsyncMessage: [ + "rulesets:delete-channel", + "rulesets:enable-channel", + "rulesets:set-show-warning", + ], + RPMSendQuery: [ + "rulesets:get-channels", + "rulesets:get-init-args", + "rulesets:set-channel", + "rulesets:update-channel", + ], + }, "about:tabcrashed": { RPMSendAsyncMessage: ["Load", "closeTab", "restoreTab", "restoreAll"], RPMAddMessageListener: ["*"],
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 67ec3e1f28c7799dd6fb33747a00584bfefc417a Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Thu May 5 20:15:01 2022 +0200
Bug 11698: Incorporate Tor Browser Manual pages into Tor Browser
This patch associates the about:manual page to a translated page that must be injected to browser/omni.ja after the build. The content must be placed in chrome/browser/content/browser/manual/, so that is then available at chrome://browser/content/manual/. We preferred giving absolute freedom to the web team, rather than having to change the patch in case of changes on the documentation. --- browser/components/about/AboutRedirector.cpp | 64 ++++++++++++++++++++++++++++ browser/components/about/components.conf | 1 + 2 files changed, 65 insertions(+)
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index c3095c4bd3bb..05fec67c79e0 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -15,6 +15,11 @@ #include "mozilla/StaticPrefs_browser.h" #include "mozilla/dom/ContentChild.h"
+// For Tor Browser manual +#include "nsTHashSet.h" +#include "mozilla/intl/LocaleService.h" +#include "mozilla/Omnijar.h" + namespace mozilla { namespace browser {
@@ -150,6 +155,11 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT | nsIAboutModule::IS_SECURE_CHROME_UI}, + // The correct URI must be obtained by GetManualChromeURI + {"manual", "about:blank", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | + nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS | + nsIAboutModule::IS_SECURE_CHROME_UI}, };
static nsAutoCString GetAboutModuleName(nsIURI* aURI) { @@ -166,6 +176,52 @@ static nsAutoCString GetAboutModuleName(nsIURI* aURI) { return path; }
+static nsTHashSet<nsCStringHashKey> GetManualLocales() +{ + nsTHashSet<nsCStringHashKey> locales; + RefPtr<nsZipArchive> zip = Omnijar::GetReader(Omnijar::APP); + UniquePtr<nsZipFind> find; + const nsAutoCString prefix("chrome/browser/content/browser/manual/"); + nsAutoCString needle = prefix; + needle.Append("*.html"); + if (NS_SUCCEEDED(zip->FindInit(needle.get(), getter_Transfers(find)))) { + const char* entryName; + uint16_t entryNameLen; + while (NS_SUCCEEDED(find->FindNext(&entryName, &entryNameLen))) { + // 5 is to remove the final `.html` + const size_t length = entryNameLen - prefix.Length() - 5; + locales.Insert(nsAutoCString(entryName + prefix.Length(), length)); + } + } + return locales; +} + +static nsAutoCString GetManualChromeURI() { + static nsTHashSet<nsCStringHashKey> locales = GetManualLocales(); + + nsAutoCString reqLocale; + intl::LocaleService::GetInstance()->GetAppLocaleAsBCP47(reqLocale); + // Check every time the URL is needed in case the lang has been changed. + // We do not provide multi-language builds at the moment, so this should not + // happen, at least in Tor Browser desktop, but we prepared the patch to be + // ready also in such a case. + if (!locales.Contains(reqLocale) && reqLocale.Length() > 2 && + reqLocale[2] == '-') { + // At the moment, codes in our manual output are either 2 letters (en) or + // 5 letters (pt-BR) + reqLocale.SetLength(2); + } + if (!locales.Contains(reqLocale)) { + reqLocale = "en"; + } + + // %s is the language + constexpr char model[] = "chrome://browser/content/manual/%s.html"; + nsAutoCString url; + url.AppendPrintf(model, reqLocale.get()); + return url; +} + NS_IMETHODIMP AboutRedirector::NewChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, nsIChannel** result) { @@ -219,6 +275,10 @@ AboutRedirector::NewChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, NS_ENSURE_SUCCESS(rv, rv); }
+ if (path.EqualsLiteral("manual")) { + url = GetManualChromeURI(); + } + // fall back to the specified url in the map if (url.IsEmpty()) { url.AssignASCII(redir.url); @@ -277,6 +337,10 @@ AboutRedirector::GetChromeURI(nsIURI* aURI, nsIURI** chromeURI) {
nsAutoCString name = GetAboutModuleName(aURI);
+ if (name.EqualsLiteral("manual")) { + return NS_NewURI(chromeURI, GetManualChromeURI()); + } + for (const auto& redir : kRedirMap) { if (name.Equals(redir.id)) { return NS_NewURI(chromeURI, redir.url); diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf index d35ad34ec8ba..527718871468 100644 --- a/browser/components/about/components.conf +++ b/browser/components/about/components.conf @@ -13,6 +13,7 @@ pages = [ 'logins', 'loginsimportreport', 'firefoxview', + 'manual', 'newtab', 'pocket-home', 'pocket-saved',
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.5.0esr-12.5-1 in repository tor-browser.
commit 031b265ccfba695d4877e5ecdb3d2de6a50ffaf9 Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Fri Dec 2 11:55:13 2022 +0100
Bug 41435: Add a Tor Browser migration function
For now this function only deletes old language packs for which we are already packaging the strings with the application. --- browser/components/BrowserGlue.jsm | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 0949c795d8c7..3dc4c3b21888 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -1298,6 +1298,10 @@ BrowserGlue.prototype = { // handle any UI migration this._migrateUI();
+ // Handle any TBB-specific migration before showing the UI. Keep after + // _migrateUI to make sure this._isNewProfile has been defined. + this._migrateUITBB(); + // Clear possibly auto enabled enterprise_roots prefs (see bug 40166) if ( !Services.prefs.getBoolPref( @@ -4294,6 +4298,43 @@ BrowserGlue.prototype = { Services.prefs.setIntPref("browser.migration.version", UI_VERSION); },
+ // Use this method for any TBB migration that can be run just before showing + // the UI. + // Anything that critically needs to be migrated earlier should not use this. + _migrateUITBB() { + // Version 1: Tor Browser 12.0. We use it to remove langpacks, after the + // migration to packaged locales. + const TBB_MIGRATION_VERSION = 1; + const MIGRATION_PREF = "torbrowser.migration.version"; + + // If we decide to force updating users to pass through any version + // following 12.0, we can remove this check, and check only whether + // MIGRATION_PREF has a user value, like Mozilla does. + if (this._isNewProfile) { + // Do not migrate fresh profiles + Services.prefs.setIntPref(MIGRATION_PREF, TBB_MIGRATION_VERSION); + return; + } else if (this._isNewProfile === undefined) { + // If this happens, check if upstream updated their function and do not + // set this member anymore! + console.error("_migrateUITBB: this._isNewProfile is undefined."); + } + + const currentVersion = Services.prefs.getIntPref(MIGRATION_PREF, 0); + const removeLangpacks = async () => { + for (const addon of await AddonManager.getAddonsByTypes(["locale"])) { + await addon.uninstall(); + } + }; + if (currentVersion < 1) { + removeLangpacks().catch(err => { + console.error("Could not remove langpacks", err); + }); + } + + Services.prefs.setIntPref(MIGRATION_PREF, TBB_MIGRATION_VERSION); + }, + async _showUpgradeDialog() { const data = await OnboardingMessageProvider.getUpgradeMessage(); const win = BrowserWindowTracker.getTopWindow();
tbb-commits@lists.torproject.org