Pier Angelo Vendrame pushed to branch tor-browser-102.5.0esr-12.5-1 at The Tor Project / Applications / Tor Browser

Commits:

18 changed files:

Changes:

  • browser/components/torconnect/content/aboutTorConnect.js
    1 1
     // Copyright (c) 2021, The Tor Project, Inc.
    
    2
    +// This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +// License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +// file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    2 5
     
    
    3 6
     /* eslint-env mozilla/frame-script */
    
    4 7
     
    
    ... ... @@ -608,7 +611,7 @@ class AboutTorConnect {
    608 611
       }
    
    609 612
     
    
    610 613
       showConfigureConnectionLink(text) {
    
    611
    -    const pieces = text.split("#1");
    
    614
    +    const pieces = text.split("%S");
    
    612 615
         const link = document.createElement("a");
    
    613 616
         link.textContent = TorStrings.torConnect.configureConnection;
    
    614 617
         link.setAttribute("href", "#");
    

  • browser/components/torpreferences/content/connectionPane.js
    1
    +// Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +// This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +// License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +// file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    1 6
     "use strict";
    
    2 7
     
    
    3 8
     /* global Services, gSubDialog */
    
    ... ... @@ -518,10 +523,10 @@ const gConnectionPane = (function() {
    518 523
               details && details.transport !== undefined
    
    519 524
                 ? details.transport
    
    520 525
                 : "vanilla";
    
    521
    -        for (const piece of idString.split(/(#[12])/)) {
    
    522
    -          if (piece == "#1") {
    
    526
    +        for (const piece of idString.split(/(%[12]\$S)/)) {
    
    527
    +          if (piece == "%1$S") {
    
    523 528
                 id.append(type);
    
    524
    -          } else if (piece == "#2") {
    
    529
    +          } else if (piece == "%2$S") {
    
    525 530
                 id.append(...emojis);
    
    526 531
               } else {
    
    527 532
                 id.append(piece);
    

  • browser/modules/TorStrings.jsm
    1
    +// Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +// This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +// License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +// file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    1 6
     "use strict";
    
    2 7
     
    
    3 8
     var EXPORTED_SYMBOLS = ["TorStrings"];
    
    4 9
     
    
    5
    -const { XPCOMUtils } = ChromeUtils.import(
    
    6
    -  "resource://gre/modules/XPCOMUtils.jsm"
    
    7
    -);
    
    8 10
     const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
    
    11
    +const { AppConstants } = ChromeUtils.import(
    
    12
    +  "resource://gre/modules/AppConstants.jsm"
    
    13
    +);
    
    9 14
     const { getLocale } = ChromeUtils.import(
    
    10 15
       "resource://torbutton/modules/utils.js"
    
    11 16
     );
    
    12 17
     
    
    13
    -XPCOMUtils.defineLazyGlobalGetters(this, ["DOMParser"]);
    
    14
    -XPCOMUtils.defineLazyGetter(this, "domParser", () => {
    
    15
    -  const parser = new DOMParser();
    
    16
    -  parser.forceEnableDTD();
    
    17
    -  return parser;
    
    18
    -});
    
    19
    -
    
    20
    -/*
    
    21
    -  Tor DTD String Bundle
    
    22
    -
    
    23
    -  DTD strings loaded from torbutton/tor-launcher, but provide a fallback in case they aren't available
    
    24
    -*/
    
    25
    -class TorDTDStringBundle {
    
    26
    -  constructor(aBundleURLs, aPrefix) {
    
    27
    -    const locations = [];
    
    28
    -    for (const [index, url] of aBundleURLs.entries()) {
    
    29
    -      locations.push(`<!ENTITY % dtd_${index} SYSTEM "${url}">%dtd_${index};`);
    
    30
    -    }
    
    31
    -    this._locations = locations;
    
    32
    -    this._prefix = aPrefix;
    
    33
    -    const idx = aBundleURLs.lastIndexOf("/");
    
    34
    -    this._filename = idx === -1 ? aBundleURLs : aBundleURLs.substring(idx);
    
    35
    -  }
    
    36
    -
    
    37
    -  // copied from testing/marionette/l10n.js
    
    38
    -  localizeEntity(urls, id) {
    
    39
    -    // Use the DOM parser to resolve the entity and extract its real value
    
    40
    -    const header = `<?xml version="1.0"?><!DOCTYPE elem [${this._locations.join(
    
    41
    -      ""
    
    42
    -    )}]>`;
    
    43
    -    const elem = `<elem id="elementID">&${id};</elem>`;
    
    44
    -    const doc = domParser.parseFromString(header + elem, "text/xml");
    
    45
    -    const element = doc.querySelector("elem[id='elementID']");
    
    46
    -
    
    47
    -    if (element === null) {
    
    48
    -      throw new Error(`Entity with id='${id}' hasn't been found`);
    
    49
    -    }
    
    50
    -
    
    51
    -    return element.textContent;
    
    52
    -  }
    
    53
    -
    
    54
    -  getString(key, fallback) {
    
    55
    -    if (key) {
    
    56
    -      try {
    
    57
    -        return this.localizeEntity(this._bundleURLs, `${this._prefix}${key}`);
    
    58
    -      } catch (e) {
    
    59
    -        console.warn(`[TorStrings] Cannot get ${key} on ${this._filename}`, e);
    
    60
    -      }
    
    61
    -    }
    
    62
    -
    
    63
    -    // on failure, assign the fallback if it exists
    
    64
    -    if (fallback) {
    
    65
    -      return fallback;
    
    66
    -    }
    
    67
    -    // otherwise return string key
    
    68
    -    return `$(${key})`;
    
    69
    -  }
    
    70
    -}
    
    71
    -
    
    72 18
     /*
    
    73 19
       Tor Property String Bundle
    
    74 20
     
    
    ... ... @@ -78,16 +24,28 @@ class TorPropertyStringBundle {
    78 24
       constructor(aBundleURL, aPrefix) {
    
    79 25
         try {
    
    80 26
           this._bundle = Services.strings.createBundle(aBundleURL);
    
    81
    -    } catch (e) {}
    
    27
    +      this._bundleURL = aBundleURL;
    
    28
    +    } catch (e) {
    
    29
    +      console.error(`[TorStrings] Cannot load ${aBundleURL}`, e);
    
    30
    +    }
    
    82 31
     
    
    83 32
         this._prefix = aPrefix;
    
    84 33
       }
    
    85 34
     
    
    86 35
       getString(key, fallback) {
    
    36
    +    const reportError =
    
    37
    +      AppConstants.TOR_BROWSER_VERSION === "dev-build" && !!this._bundle;
    
    87 38
         if (key) {
    
    88 39
           try {
    
    89 40
             return this._bundle.GetStringFromName(`${this._prefix}${key}`);
    
    90
    -      } catch (e) {}
    
    41
    +      } catch (e) {
    
    42
    +        if (reportError) {
    
    43
    +          console.warn(
    
    44
    +            `[TorStrings] Cannot get ${this._prefix}${key} from ${this._bundleURL}`,
    
    45
    +            e
    
    46
    +          );
    
    47
    +        }
    
    48
    +      }
    
    91 49
         }
    
    92 50
     
    
    93 51
         // on failure, assign the fallback if it exists
    
    ... ... @@ -97,6 +55,15 @@ class TorPropertyStringBundle {
    97 55
         // otherwise return string key
    
    98 56
         return `$(${key})`;
    
    99 57
       }
    
    58
    +
    
    59
    +  getStrings(strings) {
    
    60
    +    return Object.fromEntries(
    
    61
    +      Object.entries(strings).map(([key, fallback]) => [
    
    62
    +        key,
    
    63
    +        this.getString(key, fallback),
    
    64
    +      ])
    
    65
    +    );
    
    66
    +  }
    
    100 67
     }
    
    101 68
     
    
    102 69
     const Loader = {
    
    ... ... @@ -105,7 +72,7 @@ const Loader = {
    105 72
       */
    
    106 73
       cryptoSafetyPrompt() {
    
    107 74
         const tsb = new TorPropertyStringBundle(
    
    108
    -      "chrome://torbutton/locale/torbutton.properties",
    
    75
    +      "chrome://torbutton/locale/cryptoSafetyPrompt.properties",
    
    109 76
           "cryptoSafetyPrompt."
    
    110 77
         );
    
    111 78
         const getString = tsb.getString.bind(tsb);
    
    ... ... @@ -138,499 +105,209 @@ const Loader = {
    138 105
         Tor about:preferences#connection Strings
    
    139 106
       */
    
    140 107
       settings() {
    
    141
    -    const tsb = new TorDTDStringBundle(
    
    142
    -      ["chrome://torbutton/locale/network-settings.dtd"],
    
    143
    -      ""
    
    144
    -    );
    
    145
    -    const getString = tsb.getString.bind(tsb);
    
    146
    -
    
    147
    -    const retval = {
    
    148
    -      categoryTitle: getString("torPreferences.categoryTitle", "Connection"),
    
    108
    +    const strings = {
    
    109
    +      categoryTitle: "Connection",
    
    149 110
           // Message box
    
    150
    -      torPreferencesDescription: getString(
    
    151
    -        "torPreferences.torSettingsDescription",
    
    152
    -        "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world."
    
    153
    -      ),
    
    111
    +      torPreferencesDescription:
    
    112
    +        "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world.",
    
    154 113
           // Status
    
    155
    -      statusInternetLabel: getString(
    
    156
    -        "torPreferences.statusInternetLabel",
    
    157
    -        "Internet:"
    
    158
    -      ),
    
    159
    -      statusInternetTest: getString(
    
    160
    -        "torPreferences.statusInternetTest",
    
    161
    -        "Test"
    
    162
    -      ),
    
    163
    -      statusInternetOnline: getString(
    
    164
    -        "torPreferences.statusInternetOnline",
    
    165
    -        "Online"
    
    166
    -      ),
    
    167
    -      statusInternetOffline: getString(
    
    168
    -        "torPreferences.statusInternetOffline",
    
    169
    -        "Offline"
    
    170
    -      ),
    
    171
    -      statusTorLabel: getString(
    
    172
    -        "torPreferences.statusTorLabel",
    
    173
    -        "Tor Network:"
    
    174
    -      ),
    
    175
    -      statusTorConnected: getString(
    
    176
    -        "torPreferences.statusTorConnected",
    
    177
    -        "Connected"
    
    178
    -      ),
    
    179
    -      statusTorNotConnected: getString(
    
    180
    -        "torPreferences.statusTorNotConnected",
    
    181
    -        "Not Connected"
    
    182
    -      ),
    
    183
    -      statusTorBlocked: getString(
    
    184
    -        "torPreferences.statusTorBlocked",
    
    185
    -        "Potentially Blocked"
    
    186
    -      ),
    
    187
    -      learnMore: getString("torPreferences.learnMore", "Learn more"),
    
    114
    +      statusInternetLabel: "Internet:",
    
    115
    +      statusInternetTest: "Test",
    
    116
    +      statusInternetOnline: "Online",
    
    117
    +      statusInternetOffline: "Offline",
    
    118
    +      statusTorLabel: "Tor Network:",
    
    119
    +      statusTorConnected: "Connected",
    
    120
    +      statusTorNotConnected: "Not Connected",
    
    121
    +      statusTorBlocked: "Potentially Blocked",
    
    122
    +      learnMore: "Learn more",
    
    188 123
           // Quickstart
    
    189
    -      quickstartHeading: getString("torPreferences.quickstart", "Quickstart"),
    
    190
    -      quickstartDescription: getString(
    
    191
    -        "torPreferences.quickstartDescriptionLong",
    
    192
    -        "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings."
    
    193
    -      ),
    
    194
    -      quickstartCheckbox: getString(
    
    195
    -        "torPreferences.quickstartCheckbox",
    
    196
    -        "Always connect automatically"
    
    197
    -      ),
    
    124
    +      quickstartHeading: "Quickstart",
    
    125
    +      quickstartDescription:
    
    126
    +        "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings.",
    
    127
    +      quickstartCheckbox: "Always connect automatically",
    
    198 128
           // Bridge settings
    
    199
    -      bridgesHeading: getString("torPreferences.bridges", "Bridges"),
    
    200
    -      bridgesDescription: getString(
    
    201
    -        "torPreferences.bridgesDescription",
    
    202
    -        "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."
    
    203
    -      ),
    
    204
    -      bridgeLocation: getString(
    
    205
    -        "torPreferences.bridgeLocation",
    
    206
    -        "Your location"
    
    207
    -      ),
    
    208
    -      bridgeLocationAutomatic: getString(
    
    209
    -        "torPreferences.bridgeLocationAutomatic",
    
    210
    -        "Automatic"
    
    211
    -      ),
    
    212
    -      bridgeLocationFrequent: getString(
    
    213
    -        "torPreferences.bridgeLocationFrequent",
    
    214
    -        "Frequently selected locations"
    
    215
    -      ),
    
    216
    -      bridgeLocationOther: getString(
    
    217
    -        "torPreferences.bridgeLocationOther",
    
    218
    -        "Other locations"
    
    219
    -      ),
    
    220
    -      bridgeChooseForMe: getString(
    
    221
    -        "torPreferences.bridgeChooseForMe",
    
    222
    -        "Choose a Bridge For Me\u2026"
    
    223
    -      ),
    
    224
    -      bridgeCurrent: getString(
    
    225
    -        "torPreferences.bridgeBadgeCurrent",
    
    226
    -        "Your Current Bridges"
    
    227
    -      ),
    
    228
    -      bridgeCurrentDescription: getString(
    
    229
    -        "torPreferences.bridgeBadgeCurrentDescription",
    
    230
    -        "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."
    
    231
    -      ),
    
    232
    -      bridgeId: getString("torPreferences.bridgeId", "#1 bridge: #2"),
    
    233
    -      remove: getString("torPreferences.remove", "Remove"),
    
    234
    -      bridgeDisableBuiltIn: getString(
    
    235
    -        "torPreferences.bridgeDisableBuiltIn",
    
    236
    -        "Disable built-in bridges"
    
    237
    -      ),
    
    238
    -      bridgeShare: getString(
    
    239
    -        "torPreferences.bridgeShare",
    
    240
    -        "Share this bridge using the QR code or by copying its address:"
    
    241
    -      ),
    
    242
    -      bridgeCopy: getString("torPreferences.bridgeCopy", "Copy Bridge Address"),
    
    243
    -      copied: getString("torPreferences.copied", "Copied!"),
    
    244
    -      bridgeShowAll: getString(
    
    245
    -        "torPreferences.bridgeShowAll",
    
    246
    -        "Show All Bridges"
    
    247
    -      ),
    
    248
    -      bridgeRemoveAll: getString(
    
    249
    -        "torPreferences.bridgeRemoveAll",
    
    250
    -        "Remove All Bridges"
    
    251
    -      ),
    
    252
    -      bridgeAdd: getString("torPreferences.bridgeAdd", "Add a New Bridge"),
    
    253
    -      bridgeSelectBrowserBuiltin: getString(
    
    254
    -        "torPreferences.bridgeSelectBrowserBuiltin",
    
    255
    -        "Choose from one of Tor Browser’s built-in bridges"
    
    256
    -      ),
    
    257
    -      bridgeSelectBuiltin: getString(
    
    258
    -        "torPreferences.bridgeSelectBuiltin",
    
    259
    -        "Select a Built-In Bridge\u2026"
    
    260
    -      ),
    
    261
    -      bridgeRequestFromTorProject: getString(
    
    262
    -        "torsettings.useBridges.bridgeDB",
    
    263
    -        "Request a bridge from torproject.org"
    
    264
    -      ),
    
    265
    -      bridgeRequest: getString(
    
    266
    -        "torPreferences.bridgeRequest",
    
    267
    -        "Request a Bridge\u2026"
    
    268
    -      ),
    
    269
    -      bridgeEnterKnown: getString(
    
    270
    -        "torPreferences.bridgeEnterKnown",
    
    271
    -        "Enter a bridge address you already know"
    
    272
    -      ),
    
    273
    -      bridgeAddManually: getString(
    
    274
    -        "torPreferences.bridgeAddManually",
    
    275
    -        "Add a Bridge Manually\u2026"
    
    276
    -      ),
    
    129
    +      bridgesHeading: "Bridges",
    
    130
    +      bridgesDescription:
    
    131
    +        "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.",
    
    132
    +      bridgeLocation: "Your location",
    
    133
    +      bridgeLocationAutomatic: "Automatic",
    
    134
    +      bridgeLocationFrequent: "Frequently selected locations",
    
    135
    +      bridgeLocationOther: "Other locations",
    
    136
    +      bridgeChooseForMe: "Choose a Bridge For Me…",
    
    137
    +      bridgeCurrent: "Your Current Bridges",
    
    138
    +      bridgeCurrentDescription:
    
    139
    +        "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.",
    
    140
    +      bridgeId: "#1 bridge: #2",
    
    141
    +      remove: "Remove",
    
    142
    +      bridgeDisableBuiltIn: "Disable built-in bridges",
    
    143
    +      bridgeShare:
    
    144
    +        "Share this bridge using the QR code or by copying its address:",
    
    145
    +      bridgeCopy: "Copy Bridge Address",
    
    146
    +      copied: "Copied!",
    
    147
    +      bridgeShowAll: "Show All Bridges",
    
    148
    +      bridgeRemoveAll: "Remove All Bridges",
    
    149
    +      bridgeAdd: "Add a New Bridge",
    
    150
    +      bridgeSelectBrowserBuiltin:
    
    151
    +        "Choose from one of Tor Browser’s built-in bridges",
    
    152
    +      bridgeSelectBuiltin: "Select a Built-In Bridge…",
    
    153
    +      bridgeRequestFromTorProject: "Request a bridge from torproject.org",
    
    154
    +      bridgeRequest: "Request a Bridge…",
    
    155
    +      bridgeEnterKnown: "Enter a bridge address you already know",
    
    156
    +      bridgeAddManually: "Add a Bridge Manually…",
    
    277 157
           // Advanced settings
    
    278
    -      advancedHeading: getString("torPreferences.advanced", "Advanced"),
    
    279
    -      advancedLabel: getString(
    
    280
    -        "torPreferences.advancedDescription",
    
    281
    -        "Configure how Tor Browser connects to the internet"
    
    282
    -      ),
    
    283
    -      advancedButton: getString(
    
    284
    -        "torPreferences.advancedButton",
    
    285
    -        "Settings\u2026"
    
    286
    -      ),
    
    287
    -      showTorDaemonLogs: getString(
    
    288
    -        "torPreferences.viewTorLogs",
    
    289
    -        "View the Tor logs"
    
    290
    -      ),
    
    291
    -      showLogs: getString("torPreferences.viewLogs", "View Logs\u2026"),
    
    158
    +      advancedHeading: "Advanced",
    
    159
    +      advancedLabel: "Configure how Tor Browser connects to the internet",
    
    160
    +      advancedButton: "Settings…",
    
    161
    +      showTorDaemonLogs: "View the Tor logs",
    
    162
    +      showLogs: "View Logs…",
    
    292 163
           // Remove all bridges dialog
    
    293
    -      removeBridgesQuestion: getString(
    
    294
    -        "torPreferences.removeBridgesQuestion",
    
    295
    -        "Remove all the bridges?"
    
    296
    -      ),
    
    297
    -      removeBridgesWarning: getString(
    
    298
    -        "torPreferences.removeBridgesWarning",
    
    299
    -        "This action cannot be undone."
    
    300
    -      ),
    
    301
    -      cancel: getString("torPreferences.cancel", "Cancel"),
    
    164
    +      removeBridgesQuestion: "Remove all the bridges?",
    
    165
    +      removeBridgesWarning: "This action cannot be undone.",
    
    166
    +      cancel: "Cancel",
    
    302 167
           // Scan bridge QR dialog
    
    303
    -      scanQrTitle: getString("torPreferences.scanQrTitle", "Scan the QR code"),
    
    168
    +      scanQrTitle: "Scan the QR code",
    
    304 169
           // Builtin bridges dialog
    
    305
    -      builtinBridgeTitle: getString(
    
    306
    -        "torPreferences.builtinBridgeTitle",
    
    307
    -        "Built-In Bridges"
    
    308
    -      ),
    
    309
    -      builtinBridgeHeader: getString(
    
    310
    -        "torsettings.useBridges.default",
    
    311
    -        "Select a Built-In Bridge"
    
    312
    -      ),
    
    313
    -      builtinBridgeDescription: getString(
    
    314
    -        "torPreferences.builtinBridgeDescription",
    
    315
    -        "Tor Browser includes some specific types of bridges known as “pluggable transports”."
    
    316
    -      ),
    
    317
    -      builtinBridgeObfs4: getString(
    
    318
    -        "torPreferences.builtinBridgeObfs4",
    
    319
    -        "obfs4"
    
    320
    -      ),
    
    321
    -      builtinBridgeObfs4Description: getString(
    
    322
    -        "torPreferences.builtinBridgeObfs4Description",
    
    323
    -        "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."
    
    324
    -      ),
    
    325
    -      builtinBridgeSnowflake: getString(
    
    326
    -        "torPreferences.builtinBridgeSnowflake",
    
    327
    -        "Snowflake"
    
    328
    -      ),
    
    329
    -      builtinBridgeSnowflakeDescription: getString(
    
    330
    -        "torPreferences.builtinBridgeSnowflakeDescription",
    
    331
    -        "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers."
    
    332
    -      ),
    
    333
    -      builtinBridgeMeekAzure: getString(
    
    334
    -        "torPreferences.builtinBridgeMeekAzure",
    
    335
    -        "meek-azure"
    
    336
    -      ),
    
    337
    -      builtinBridgeMeekAzureDescription: getString(
    
    338
    -        "torPreferences.builtinBridgeMeekAzureDescription",
    
    339
    -        "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor."
    
    340
    -      ),
    
    170
    +      builtinBridgeTitle: "Built-In Bridges",
    
    171
    +      builtinBridgeHeader: "Select a Built-In Bridge",
    
    172
    +      builtinBridgeDescription:
    
    173
    +        "Tor Browser includes some specific types of bridges known as “pluggable transports”.",
    
    174
    +      builtinBridgeObfs4: "obfs4",
    
    175
    +      builtinBridgeObfs4Description:
    
    176
    +        "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.",
    
    177
    +      builtinBridgeSnowflake: "Snowflake",
    
    178
    +      builtinBridgeSnowflakeDescription:
    
    179
    +        "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers.",
    
    180
    +      builtinBridgeMeekAzure: "meek-azure",
    
    181
    +      builtinBridgeMeekAzureDescription:
    
    182
    +        "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor.",
    
    341 183
           // Request bridges dialog
    
    342
    -      requestBridgeDialogTitle: getString(
    
    343
    -        "torPreferences.requestBridgeDialogTitle",
    
    344
    -        "Request Bridge"
    
    345
    -      ),
    
    346
    -      submitCaptcha: getString(
    
    347
    -        "torsettings.useBridges.captchaSubmit",
    
    348
    -        "Submit"
    
    349
    -      ),
    
    350
    -      contactingBridgeDB: getString(
    
    351
    -        "torPreferences.requestBridgeDialogWaitPrompt",
    
    352
    -        "Contacting BridgeDB. Please Wait."
    
    353
    -      ),
    
    354
    -      solveTheCaptcha: getString(
    
    355
    -        "torPreferences.requestBridgeDialogSolvePrompt",
    
    356
    -        "Solve the CAPTCHA to request a bridge."
    
    357
    -      ),
    
    358
    -      captchaTextboxPlaceholder: getString(
    
    359
    -        "torsettings.useBridges.captchaSolution.placeholder",
    
    360
    -        "Enter the characters from the image"
    
    361
    -      ),
    
    362
    -      incorrectCaptcha: getString(
    
    363
    -        "torPreferences.requestBridgeErrorBadSolution",
    
    364
    -        "The solution is not correct. Please try again."
    
    365
    -      ),
    
    184
    +      requestBridgeDialogTitle: "Request Bridge",
    
    185
    +      submitCaptcha: "Submit",
    
    186
    +      contactingBridgeDB: "Contacting BridgeDB. Please Wait.",
    
    187
    +      solveTheCaptcha: "Solve the CAPTCHA to request a bridge.",
    
    188
    +      captchaTextboxPlaceholder: "Enter the characters from the image",
    
    189
    +      incorrectCaptcha: "The solution is not correct. Please try again.",
    
    366 190
           // Provide bridge dialog
    
    367
    -      provideBridgeTitle: getString(
    
    368
    -        "torPreferences.provideBridgeTitle",
    
    369
    -        "Provide Bridge"
    
    370
    -      ),
    
    371
    -      provideBridgeHeader: getString(
    
    372
    -        "torPreferences.provideBridgeHeader",
    
    373
    -        "Enter bridge information from a trusted source"
    
    374
    -      ),
    
    375
    -      provideBridgePlaceholder: getString(
    
    376
    -        "torsettings.useBridges.placeholder",
    
    377
    -        "type address:port (one per line)"
    
    378
    -      ),
    
    191
    +      provideBridgeTitle: "Provide Bridge",
    
    192
    +      provideBridgeHeader: "Enter bridge information from a trusted source",
    
    193
    +      provideBridgePlaceholder: "type address:port (one per line)",
    
    379 194
           // Connection settings dialog
    
    380
    -      connectionSettingsDialogTitle: getString(
    
    381
    -        "torPreferences.connectionSettingsDialogTitle",
    
    382
    -        "Connection Settings"
    
    383
    -      ),
    
    384
    -      connectionSettingsDialogHeader: getString(
    
    385
    -        "torPreferences.connectionSettingsDialogHeader",
    
    386
    -        "Configure how Tor Browser connects to the Internet"
    
    387
    -      ),
    
    388
    -      useLocalProxy: getString(
    
    389
    -        "torsettings.useProxy.checkbox",
    
    390
    -        "I use a proxy to connect to the Internet"
    
    391
    -      ),
    
    392
    -      proxyType: getString("torsettings.useProxy.type", "Proxy Type"),
    
    393
    -      proxyTypeSOCKS4: getString("torsettings.useProxy.type.socks4", "SOCKS4"),
    
    394
    -      proxyTypeSOCKS5: getString("torsettings.useProxy.type.socks5", "SOCKS5"),
    
    395
    -      proxyTypeHTTP: getString("torsettings.useProxy.type.http", "HTTP/HTTPS"),
    
    396
    -      proxyAddress: getString("torsettings.useProxy.address", "Address"),
    
    397
    -      proxyAddressPlaceholder: getString(
    
    398
    -        "torsettings.useProxy.address.placeholder",
    
    399
    -        "IP address or hostname"
    
    400
    -      ),
    
    401
    -      proxyPort: getString("torsettings.useProxy.port", "Port"),
    
    402
    -      proxyUsername: getString("torsettings.useProxy.username", "Username"),
    
    403
    -      proxyPassword: getString("torsettings.useProxy.password", "Password"),
    
    404
    -      proxyUsernamePasswordPlaceholder: getString(
    
    405
    -        "torsettings.optional",
    
    406
    -        "Optional"
    
    407
    -      ),
    
    408
    -      useFirewall: getString(
    
    409
    -        "torsettings.firewall.checkbox",
    
    410
    -        "This computer goes through a firewall that only allows connections to certain ports"
    
    411
    -      ),
    
    412
    -      allowedPorts: getString(
    
    413
    -        "torsettings.firewall.allowedPorts",
    
    414
    -        "Allowed Ports"
    
    415
    -      ),
    
    416
    -      allowedPortsPlaceholder: getString(
    
    417
    -        "torPreferences.firewallPortsPlaceholder",
    
    418
    -        "Comma-seperated values"
    
    419
    -      ),
    
    195
    +      connectionSettingsDialogTitle: "Connection Settings",
    
    196
    +      connectionSettingsDialogHeader:
    
    197
    +        "Configure how Tor Browser connects to the Internet",
    
    198
    +      useLocalProxy: "I use a proxy to connect to the Internet",
    
    199
    +      proxyType: "Proxy Type",
    
    200
    +      proxyTypeSOCKS4: "SOCKS4",
    
    201
    +      proxyTypeSOCKS5: "SOCKS5",
    
    202
    +      proxyTypeHTTP: "HTTP/HTTPS",
    
    203
    +      proxyAddress: "Address",
    
    204
    +      proxyAddressPlaceholder: "IP address or hostname",
    
    205
    +      proxyPort: "Port",
    
    206
    +      proxyUsername: "Username",
    
    207
    +      proxyPassword: "Password",
    
    208
    +      proxyUsernamePasswordPlaceholder: "Optional",
    
    209
    +      useFirewall:
    
    210
    +        "This computer goes through a firewall that only allows connections to certain ports",
    
    211
    +      allowedPorts: "Allowed Ports",
    
    212
    +      allowedPortsPlaceholder: "Comma-seperated values",
    
    420 213
           // Log dialog
    
    421
    -      torLogDialogTitle: getString(
    
    422
    -        "torPreferences.torLogsDialogTitle",
    
    423
    -        "Tor Logs"
    
    424
    -      ),
    
    425
    -      copyLog: getString("torsettings.copyLog", "Copy Tor Log to Clipboard"),
    
    214
    +      torLogDialogTitle: "Tor Logs",
    
    215
    +      copyLog: "Copy Tor Log to Clipboard",
    
    216
    +    };
    
    426 217
     
    
    218
    +    const tsb = new TorPropertyStringBundle(
    
    219
    +      "chrome://torbutton/locale/settings.properties",
    
    220
    +      "settings."
    
    221
    +    );
    
    222
    +    return {
    
    223
    +      ...tsb.getStrings(strings),
    
    427 224
           learnMoreTorBrowserURL: "about:manual#about",
    
    428 225
           learnMoreBridgesURL: "about:manual#bridges",
    
    429 226
           learnMoreBridgesCardURL: "about:manual#bridges_bridge-moji",
    
    430 227
           learnMoreCircumventionURL: "about:manual#circumvention",
    
    431 228
         };
    
    432
    -
    
    433
    -    return retval;
    
    434 229
       } /* Tor Network Settings Strings */,
    
    435 230
     
    
    436 231
       torConnect() {
    
    437
    -    const tsbNetwork = new TorDTDStringBundle(
    
    438
    -      ["chrome://torbutton/locale/network-settings.dtd"],
    
    439
    -      ""
    
    440
    -    );
    
    441
    -    const tsbLauncher = new TorPropertyStringBundle(
    
    442
    -      "chrome://torbutton/locale/torlauncher.properties",
    
    443
    -      "torlauncher."
    
    444
    -    );
    
    445
    -    const tsbCommon = new TorPropertyStringBundle(
    
    446
    -      "chrome://global/locale/commonDialogs.properties",
    
    447
    -      ""
    
    448
    -    );
    
    449
    -
    
    450
    -    const getStringNet = tsbNetwork.getString.bind(tsbNetwork);
    
    451
    -    const getStringLauncher = tsbLauncher.getString.bind(tsbLauncher);
    
    452
    -    const getStringCommon = tsbCommon.getString.bind(tsbCommon);
    
    453
    -
    
    454
    -    return {
    
    455
    -      torConnect: getStringNet(
    
    456
    -        "torsettings.wizard.title.default",
    
    457
    -        "Connect to Tor"
    
    458
    -      ),
    
    459
    -
    
    460
    -      torConnecting: getStringNet(
    
    461
    -        "torsettings.wizard.title.connecting",
    
    462
    -        "Establishing a Connection"
    
    463
    -      ),
    
    464
    -
    
    465
    -      torNotConnectedConcise: getStringNet(
    
    466
    -        "torConnect.notConnectedConcise",
    
    467
    -        "Not Connected"
    
    468
    -      ),
    
    469
    -
    
    470
    -      torConnectingConcise: getStringNet(
    
    471
    -        "torConnect.connectingConcise",
    
    472
    -        "Connecting…"
    
    473
    -      ),
    
    474
    -
    
    475
    -      tryingAgain: getStringNet("torConnect.tryingAgain", "Trying again…"),
    
    476
    -
    
    477
    -      noInternet: getStringNet(
    
    478
    -        "torConnect.noInternet",
    
    479
    -        "Tor Browser couldn’t reach the Internet"
    
    480
    -      ),
    
    232
    +    const strings = {
    
    233
    +      torConnect: "Connect to Tor",
    
    481 234
     
    
    482
    -      noInternetDescription: getStringNet(
    
    483
    -        "torConnect.noInternetDescription",
    
    484
    -        "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again."
    
    485
    -      ),
    
    235
    +      torConnecting: "Establishing a Connection",
    
    486 236
     
    
    487
    -      torBootstrapFailed: getStringLauncher(
    
    488
    -        "tor_bootstrap_failed",
    
    489
    -        "Tor failed to establish a Tor network connection."
    
    490
    -      ),
    
    237
    +      torNotConnectedConcise: "Not Connected",
    
    491 238
     
    
    492
    -      couldNotConnect: getStringNet(
    
    493
    -        "torConnect.couldNotConnect",
    
    494
    -        "Tor Browser could not connect to Tor"
    
    495
    -      ),
    
    239
    +      torConnectingConcise: "Connecting…",
    
    496 240
     
    
    497
    -      configureConnection: getStringNet(
    
    498
    -        "torConnect.assistDescriptionConfigure",
    
    499
    -        "configure your connection"
    
    500
    -      ),
    
    241
    +      tryingAgain: "Trying again…",
    
    501 242
     
    
    502
    -      assistDescription: getStringNet(
    
    503
    -        "torConnect.assistDescription",
    
    504
    -        "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."
    
    505
    -      ),
    
    243
    +      noInternet: "Tor Browser couldn’t reach the Internet",
    
    244
    +      noInternetDescription:
    
    245
    +        "This could be due to a connection issue rather than Tor being blocked. Check your Internet connection, proxy and firewall settings before trying again.",
    
    246
    +      torBootstrapFailed: "Tor failed to establish a Tor network connection.",
    
    247
    +      couldNotConnect: "Tor Browser could not connect to Tor",
    
    248
    +      configureConnection: "configure your connection",
    
    249
    +      assistDescription:
    
    250
    +        "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.",
    
    251
    +      tryingBridge: "Trying a bridge…",
    
    506 252
     
    
    507
    -      tryingBridge: getStringNet("torConnect.tryingBridge", "Trying a bridge…"),
    
    253
    +      tryingBridgeAgain: "Trying one more time…",
    
    254
    +      errorLocation: "Tor Browser couldn’t locate you",
    
    255
    +      errorLocationDescription:
    
    256
    +        "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.",
    
    257
    +      isLocationCorrect: "Are these location settings correct?",
    
    258
    +      isLocationCorrectDescription:
    
    259
    +        "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead.",
    
    260
    +      finalError: "Tor Browser still cannot connect",
    
    508 261
     
    
    509
    -      tryingBridgeAgain: getStringNet(
    
    510
    -        "torConnect.tryingBridgeAgain",
    
    511
    -        "Trying one more time…"
    
    512
    -      ),
    
    262
    +      finalErrorDescription:
    
    263
    +        "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead.",
    
    264
    +      breadcrumbAssist: "Connection assist",
    
    265
    +      breadcrumbLocation: "Location settings",
    
    266
    +      breadcrumbTryBridge: "Try a bridge",
    
    513 267
     
    
    514
    -      errorLocation: getStringNet(
    
    515
    -        "torConnect.errorLocation",
    
    516
    -        "Tor Browser couldn’t locate you"
    
    517
    -      ),
    
    268
    +      restartTorBrowser: "Restart Tor Browser",
    
    518 269
     
    
    519
    -      errorLocationDescription: getStringNet(
    
    520
    -        "torConnect.errorLocationDescription",
    
    521
    -        "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."
    
    522
    -      ),
    
    270
    +      torConfigure: "Configure Connection…",
    
    523 271
     
    
    524
    -      isLocationCorrect: getStringNet(
    
    525
    -        "torConnect.isLocationCorrect",
    
    526
    -        "Are these location settings correct?"
    
    527
    -      ),
    
    272
    +      viewLog: "View logs…",
    
    528 273
     
    
    529
    -      isLocationCorrectDescription: getStringNet(
    
    530
    -        "torConnect.isLocationCorrectDescription",
    
    531
    -        "Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or #1 instead."
    
    532
    -      ),
    
    274
    +      torConnectButton: "Connect",
    
    533 275
     
    
    534
    -      finalError: getStringNet(
    
    535
    -        "torConnect.finalError",
    
    536
    -        "Tor Browser still cannot connect"
    
    537
    -      ),
    
    276
    +      cancel: "Cancel",
    
    538 277
     
    
    539
    -      finalErrorDescription: getStringNet(
    
    540
    -        "torConnect.finalErrorDescription",
    
    541
    -        "Despite its best efforts, connection assist was not able to connect to Tor. Try troubleshooting your connection and adding a bridge manually instead."
    
    542
    -      ),
    
    278
    +      torConnected: "Connected to the Tor network",
    
    543 279
     
    
    544
    -      breadcrumbAssist: getStringNet(
    
    545
    -        "torConnect.breadcrumbAssist",
    
    546
    -        "Connection assist"
    
    547
    -      ),
    
    548
    -
    
    549
    -      breadcrumbLocation: getStringNet(
    
    550
    -        "torConnect.breadcrumbLocation",
    
    551
    -        "Location settings"
    
    552
    -      ),
    
    553
    -
    
    554
    -      breadcrumbTryBridge: getStringNet(
    
    555
    -        "torConnect.breadcrumbTryBridge",
    
    556
    -        "Try a bridge"
    
    557
    -      ),
    
    558
    -
    
    559
    -      restartTorBrowser: getStringNet(
    
    560
    -        "torConnect.restartTorBrowser",
    
    561
    -        "Restart Tor Browser"
    
    562
    -      ),
    
    563
    -
    
    564
    -      torConfigure: getStringNet(
    
    565
    -        "torConnect.configureConnection",
    
    566
    -        "Configure Connection…"
    
    567
    -      ),
    
    280
    +      torConnectedConcise: "Connected",
    
    568 281
     
    
    569
    -      viewLog: getStringNet("torConnect.viewLog", "View logs…"),
    
    570
    -
    
    571
    -      torConnectButton: getStringNet("torSettings.connect", "Connect"),
    
    572
    -
    
    573
    -      cancel: getStringCommon("Cancel", "Cancel"),
    
    574
    -
    
    575
    -      torConnected: getStringLauncher(
    
    576
    -        "torlauncher.bootstrapStatus.done",
    
    577
    -        "Connected to the Tor network"
    
    578
    -      ),
    
    579
    -
    
    580
    -      torConnectedConcise: getStringLauncher(
    
    581
    -        "torConnect.connectedConcise",
    
    582
    -        "Connected"
    
    583
    -      ),
    
    584
    -
    
    585
    -      tryAgain: getStringNet("torConnect.tryAgain", "Try Again"),
    
    282
    +      tryAgain: "Try Again",
    
    586 283
     
    
    587 284
           // tor connect strings for message box in about:preferences#connection
    
    588
    -      connectMessage: getStringNet(
    
    589
    -        "torConnect.connectMessage",
    
    590
    -        "Changes to Tor Settings will not take effect until you connect"
    
    591
    -      ),
    
    592
    -      tryAgainMessage: getStringNet(
    
    593
    -        "torConnect.tryAgainMessage",
    
    594
    -        "Tor Browser has failed to establish a connection to the Tor Network"
    
    595
    -      ),
    
    285
    +      connectMessage:
    
    286
    +        "Changes to Tor Settings will not take effect until you connect",
    
    287
    +      tryAgainMessage:
    
    288
    +        "Tor Browser has failed to establish a connection to the Tor Network",
    
    289
    +      yourLocation: "Your Location",
    
    596 290
     
    
    597
    -      yourLocation: getStringNet("torConnect.yourLocation", "Your Location"),
    
    291
    +      tryBridge: "Try a Bridge",
    
    598 292
     
    
    599
    -      tryBridge: getStringNet("torConnect.tryBridge", "Try a Bridge"),
    
    600
    -
    
    601
    -      automatic: getStringNet("torConnect.automatic", "Automatic"),
    
    602
    -      selectCountryRegion: getStringNet(
    
    603
    -        "torConnect.selectCountryRegion",
    
    604
    -        "Select Country or Region"
    
    605
    -      ),
    
    606
    -      frequentLocations: getStringNet(
    
    607
    -        "torConnect.frequentLocations",
    
    608
    -        "Frequently selected locations"
    
    609
    -      ),
    
    610
    -      otherLocations: getStringNet(
    
    611
    -        "torConnect.otherLocations",
    
    612
    -        "Other locations"
    
    613
    -      ),
    
    293
    +      automatic: "Automatic",
    
    294
    +      selectCountryRegion: "Select Country or Region",
    
    295
    +      frequentLocations: "Frequently selected locations",
    
    296
    +      otherLocations: "Other locations",
    
    614 297
     
    
    615 298
           // TorConnect.jsm error messages
    
    616
    -      offline: getStringNet("torConnect.offline", "Internet not reachable"),
    
    617
    -      autoBootstrappingFailed: getStringNet(
    
    618
    -        "torConnect.autoBootstrappingFailed",
    
    619
    -        "Automatic configuration failed"
    
    620
    -      ),
    
    621
    -      autoBootstrappingAllFailed: getStringNet(
    
    622
    -        "torConnect.autoBootstrappingFailed",
    
    623
    -        "None of the configurations we tried worked"
    
    624
    -      ),
    
    625
    -      cannotDetermineCountry: getStringNet(
    
    626
    -        "torConnect.cannotDetermineCountry",
    
    627
    -        "Unable to determine user country"
    
    628
    -      ),
    
    629
    -      noSettingsForCountry: getStringNet(
    
    630
    -        "torConnect.noSettingsForCountry",
    
    631
    -        "No settings available for your location"
    
    632
    -      ),
    
    299
    +      offline: "Internet not reachable",
    
    300
    +      autoBootstrappingFailed: "Automatic configuration failed",
    
    301
    +      autoBootstrappingAllFailed: "None of the configurations we tried worked",
    
    302
    +      cannotDetermineCountry: "Unable to determine user country",
    
    303
    +      noSettingsForCountry: "No settings available for your location",
    
    633 304
         };
    
    305
    +
    
    306
    +    const tsb = new TorPropertyStringBundle(
    
    307
    +      "chrome://torbutton/locale/torConnect.properties",
    
    308
    +      "torConnect."
    
    309
    +    );
    
    310
    +    return tsb.getStrings(strings);
    
    634 311
       },
    
    635 312
     
    
    636 313
       /*
    
    ... ... @@ -819,116 +496,81 @@ const Loader = {
    819 496
         OnionLocation
    
    820 497
       */
    
    821 498
       onionLocation() {
    
    499
    +    const strings = {
    
    500
    +      alwaysPrioritize: "Always Prioritize Onionsites",
    
    501
    +      alwaysPrioritizeAccessKey: "a",
    
    502
    +      notNow: "Not Now",
    
    503
    +      notNowAccessKey: "n",
    
    504
    +      description:
    
    505
    +        "Website publishers can protect users by adding a security layer. This prevents eavesdroppers from knowing that you are the one visiting that website.",
    
    506
    +      tryThis: "Try this: Onionsite",
    
    507
    +      onionAvailable: "Onionsite available",
    
    508
    +      learnMore: "Learn more",
    
    509
    +      always: "Always",
    
    510
    +      askEverytime: "Ask you every time",
    
    511
    +      prioritizeOnionsDescription:
    
    512
    +        "Prioritize onionsites when they are available.",
    
    513
    +      onionServicesTitle: "Onion Services",
    
    514
    +    };
    
    515
    +
    
    822 516
         const tsb = new TorPropertyStringBundle(
    
    823
    -      ["chrome://torbutton/locale/torbutton.properties"],
    
    517
    +      ["chrome://torbutton/locale/onionLocation.properties"],
    
    824 518
           "onionLocation."
    
    825 519
         );
    
    826
    -    const getString = tsb.getString.bind(tsb);
    
    827
    -
    
    828
    -    const retval = {
    
    829
    -      alwaysPrioritize: getString(
    
    830
    -        "alwaysPrioritize",
    
    831
    -        "Always Prioritize Onionsites"
    
    832
    -      ),
    
    833
    -      alwaysPrioritizeAccessKey: getString("alwaysPrioritizeAccessKey", "a"),
    
    834
    -      notNow: getString("notNow", "Not Now"),
    
    835
    -      notNowAccessKey: getString("notNowAccessKey", "n"),
    
    836
    -      description: getString(
    
    837
    -        "description",
    
    838
    -        "Website publishers can protect users by adding a security layer. This prevents eavesdroppers from knowing that you are the one visiting that website."
    
    839
    -      ),
    
    840
    -      tryThis: getString("tryThis", "Try this: Onionsite"),
    
    841
    -      onionAvailable: getString("onionAvailable", "Onionsite available"),
    
    842
    -      learnMore: getString("learnMore", "Learn more"),
    
    520
    +    return {
    
    521
    +      ...tsb.getStrings(strings),
    
    843 522
           learnMoreURL: "about:manual#onion-services",
    
    844 523
           // XUL popups cannot open about: URLs, but we are online when showing the notification, so just use the online version
    
    845 524
           learnMoreURLNotification: `https://tb-manual.torproject.org/${getLocale()}/onion-services/`,
    
    846
    -      always: getString("always", "Always"),
    
    847
    -      askEverytime: getString("askEverytime", "Ask you every time"),
    
    848
    -      prioritizeOnionsDescription: getString(
    
    849
    -        "prioritizeOnionsDescription",
    
    850
    -        "Prioritize onionsites when they are available."
    
    851
    -      ),
    
    852
    -      onionServicesTitle: getString("onionServicesTitle", "Onion Services"),
    
    853 525
         };
    
    854
    -
    
    855
    -    return retval;
    
    856 526
       } /* OnionLocation */,
    
    857 527
     
    
    858 528
       /*
    
    859 529
         Rulesets
    
    860 530
       */
    
    861 531
       rulesets() {
    
    862
    -    const tsb = new TorPropertyStringBundle(
    
    863
    -      ["chrome://torbutton/locale/torbutton.properties"],
    
    864
    -      "rulesets."
    
    865
    -    );
    
    866
    -    const getString = tsb.getString.bind(tsb);
    
    867
    -
    
    868
    -    const retval = {
    
    532
    +    const strings = {
    
    869 533
           // Initial warning
    
    870
    -      warningTitle: getString("warningTitle", "Proceed with Caution"),
    
    871
    -      warningDescription: getString(
    
    872
    -        "warningDescription",
    
    873
    -        "Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing."
    
    874
    -      ),
    
    875
    -      warningEnable: getString(
    
    876
    -        "warningEnable",
    
    877
    -        "Warn me when I attempt to access these preferences"
    
    878
    -      ),
    
    879
    -      warningButton: getString("warningButton", "Accept the Risk and Continue"),
    
    534
    +      warningTitle: "Proceed with Caution",
    
    535
    +      warningDescription:
    
    536
    +        "Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing.",
    
    537
    +      warningEnable: "Warn me when I attempt to access these preferences",
    
    538
    +      warningButton: "Accept the Risk and Continue",
    
    880 539
           // Ruleset list
    
    881
    -      rulesets: getString("rulesets", "Rulesets"),
    
    882
    -      noRulesets: getString("noRulesets", "No rulesets found"),
    
    883
    -      noRulesetsDescr: getString(
    
    884
    -        "noRulesetsDescr",
    
    885
    -        "When you save a ruleset in Tor Browser, it will show up here."
    
    886
    -      ),
    
    887
    -      lastUpdated: getString("lastUpdated", "Last updated %S"),
    
    888
    -      neverUpdated: getString(
    
    889
    -        "neverUpdated",
    
    890
    -        "Never updated, or last update failed"
    
    891
    -      ),
    
    892
    -      enabled: getString("enabled", "Enabled"),
    
    893
    -      disabled: getString("disabled", "Disabled"),
    
    540
    +      rulesets: "Rulesets",
    
    541
    +      noRulesets: "No rulesets found",
    
    542
    +      noRulesetsDescr:
    
    543
    +        "When you save a ruleset in Tor Browser, it will show up here.",
    
    544
    +      lastUpdated: "Last updated %S",
    
    545
    +      neverUpdated: "Never updated, or last update failed",
    
    546
    +      enabled: "Enabled",
    
    547
    +      disabled: "Disabled",
    
    894 548
           // Ruleset details
    
    895
    -      edit: getString("edit", "Edit"),
    
    896
    -      name: getString("name", "Name"),
    
    897
    -      jwk: getString("jwk", "JWK"),
    
    898
    -      pathPrefix: getString("pathPrefix", "Path Prefix"),
    
    899
    -      scope: getString("scope", "Scope"),
    
    900
    -      enable: getString("enable", "Enable this ruleset"),
    
    901
    -      checkUpdates: getString("checkUpdates", "Check for Updates"),
    
    549
    +      edit: "Edit",
    
    550
    +      name: "Name",
    
    551
    +      jwk: "JWK",
    
    552
    +      pathPrefix: "Path Prefix",
    
    553
    +      scope: "Scope",
    
    554
    +      enable: "Enable this ruleset",
    
    555
    +      checkUpdates: "Check for Updates",
    
    902 556
           // Add ruleset
    
    903
    -      jwkPlaceholder: getString(
    
    904
    -        "jwkPlaceholder",
    
    905
    -        "The key used to sign this ruleset in the JWK (JSON Web Key) format"
    
    906
    -      ),
    
    907
    -      jwkInvalid: getString(
    
    908
    -        "jwkInvalid",
    
    909
    -        "The JWK could not be parsed, or it is not a valid key"
    
    910
    -      ),
    
    911
    -      pathPrefixPlaceholder: getString(
    
    912
    -        "pathPrefixPlaceholder",
    
    913
    -        "URL prefix that contains the files needed by the ruleset"
    
    914
    -      ),
    
    915
    -      pathPrefixInvalid: getString(
    
    916
    -        "pathPrefixInvalid",
    
    917
    -        "The path prefix is not a valid HTTP(S) URL"
    
    918
    -      ),
    
    919
    -      scopePlaceholder: getString(
    
    920
    -        "scopePlaceholder",
    
    921
    -        "Regular expression for the scope of the rules"
    
    922
    -      ),
    
    923
    -      scopeInvalid: getString(
    
    924
    -        "scopeInvalid",
    
    925
    -        "The scope could not be parsed as a regular expression"
    
    926
    -      ),
    
    927
    -      save: getString("save", "Save"),
    
    928
    -      cancel: getString("cancel", "Cancel"),
    
    557
    +      jwkPlaceholder:
    
    558
    +        "The key used to sign this ruleset in the JWK (JSON Web Key) format",
    
    559
    +      jwkInvalid: "The JWK could not be parsed, or it is not a valid key",
    
    560
    +      pathPrefixPlaceholder:
    
    561
    +        "URL prefix that contains the files needed by the ruleset",
    
    562
    +      pathPrefixInvalid: "The path prefix is not a valid HTTP(S) URL",
    
    563
    +      scopePlaceholder: "Regular expression for the scope of the rules",
    
    564
    +      scopeInvalid: "The scope could not be parsed as a regular expression",
    
    565
    +      save: "Save",
    
    566
    +      cancel: "Cancel",
    
    929 567
         };
    
    930 568
     
    
    931
    -    return retval;
    
    569
    +    const tsb = new TorPropertyStringBundle(
    
    570
    +      ["chrome://torbutton/locale/rulesets.properties"],
    
    571
    +      "rulesets."
    
    572
    +    );
    
    573
    +    return tsb.getStrings(strings);
    
    932 574
       } /* Rulesets */,
    
    933 575
     };
    
    934 576
     
    

  • toolkit/torbutton/chrome/locale/en-US/aboutDialog.dtd
    1
    +<!-- Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +   - This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +   - License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    
    5
    +
    
    1 6
     <!ENTITY project.start           "&brandShortName; is developed by ">
    
    2 7
     <!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org -->
    
    3 8
     <!ENTITY project.tpoLink         "the &vendorShortName;">
    

  • toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd
    1
    +<!-- Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +   - This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +   - License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    
    5
    +
    
    1 6
     <!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Changelog">
    
    2 7
     <!ENTITY aboutTBUpdate.updated "Tor Browser has been updated.">
    
    3 8
     <!ENTITY aboutTBUpdate.linkPrefix "For the most up-to-date information about this release, ">
    

  • toolkit/torbutton/chrome/locale/en-US/aboutTor.dtd
    1
    -<!--
    
    2
    -   - Copyright (c) 2019, The Tor Project, Inc.
    
    3
    -   - See LICENSE for licensing information.
    
    4
    -   - vim: set sw=2 sts=2 ts=8 et syntax=xml:
    
    5
    -  -->
    
    1
    +<!-- Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +   - This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +   - License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    
    6 5
     
    
    7 6
     <!ENTITY aboutTor.title "About Tor">
    
    8 7
     
    

  • toolkit/torbutton/chrome/locale/en-US/brand.dtd
    1
    -<!-- This Source Code Form is subject to the terms of the Mozilla Public
    
    1
    +<!-- Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +   - This Source Code Form is subject to the terms of the Mozilla Public
    
    2 3
        - License, v. 2.0. If a copy of the MPL was not distributed with this
    
    3 4
        - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    
    4 5
     
    
    5
    -<!ENTITY  brandShorterName      "Tor Browser">
    
    6 6
     <!ENTITY  brandShortName        "Tor Browser">
    
    7
    -<!ENTITY  brandFullName         "Tor Browser">
    
    8
    -<!ENTITY  vendorShortName       "Tor Project">
    
    9
    -<!ENTITY  trademarkInfo.part1   "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.">
    
    10
    -<!-- LOCALIZATION NOTE (brandProductName):
    
    11
    -   This brand name can be used in messages where the product name needs to
    
    12
    -   remain unchanged across different versions (Nightly, Beta, etc.). -->
    
    13
    -<!ENTITY  brandProductName      "Tor Browser">
    
    14 7
     
    
    15
    -<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
    
    16
    -<!ENTITY plugins.installed.find "Click to load installed system plugins">
    
    17
    -<!ENTITY plugins.installed.enable "Enable plugins">
    
    18
    -<!ENTITY plugins.installed.disable "Disable plugins">
    
    19
    -<!ENTITY plugins.installed.disable.tip "Click to prevent loading system plugins">
    8
    +<!-- Still used in aboutDialog -->
    
    9
    +<!ENTITY  vendorShortName       "Tor Project">

  • toolkit/torbutton/chrome/locale/en-US/brand.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    1 2
     # This Source Code Form is subject to the terms of the Mozilla Public
    
    2 3
     # License, v. 2.0. If a copy of the MPL was not distributed with this
    
    3 4
     # file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    ... ... @@ -5,16 +6,3 @@
    5 6
     brandShorterName=Tor Browser
    
    6 7
     brandShortName=Tor Browser
    
    7 8
     brandFullName=Tor Browser
    8
    -# LOCALIZATION NOTE(brandProductName):
    
    9
    -# This brand name can be used in messages where the product name needs to
    
    10
    -# remain unchanged across different versions (Nightly, Beta, etc.).
    
    11
    -brandProductName=Tor Browser
    
    12
    -vendorShortName=Tor Project
    
    13
    -
    
    14
    -homePageSingleStartMain=Firefox Start, a fast home page with built-in search
    
    15
    -homePageImport=Import your home page from %S
    
    16
    -
    
    17
    -homePageMigrationPageTitle=Home Page Selection
    
    18
    -homePageMigrationDescription=Please select the home page you wish to use:
    
    19
    -
    
    20
    -syncBrandShortName=Sync

  • toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties
    1 1
     # Copyright (c) 2019, The Tor Project, Inc.
    
    2
    -# See LICENSE for licensing information.
    
    3
    -# vim: set sw=2 sts=2 ts=8 et:
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    4 5
     
    
    5 6
     onboarding.tour-tor-welcome=Welcome
    
    6 7
     onboarding.tour-tor-welcome.title=You’re ready.
    

  • toolkit/torbutton/chrome/locale/en-US/cryptoSafetyPrompt.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
    
    7
    +cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
    
    8
    +cryptoSafetyPrompt.whatCanHeading=What can you do about it?
    
    9
    +cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
    
    10
    +cryptoSafetyPrompt.learnMore=Learn more
    
    11
    +cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
    
    12
    +cryptoSafetyPrompt.primaryActionAccessKey=R
    
    13
    +cryptoSafetyPrompt.secondaryAction=Dismiss Warning
    
    14
    +cryptoSafetyPrompt.secondaryActionAccessKey=B

  • toolkit/torbutton/chrome/locale/en-US/network-settings.dtd deleted
    1
    -<!ENTITY torsettings.dialog.title "Tor Network Settings">
    
    2
    -<!ENTITY torsettings.wizard.title.default "Connect to Tor">
    
    3
    -<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
    
    4
    -<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
    
    5
    -
    
    6
    -<!-- For locale picker: -->
    
    7
    -<!ENTITY torlauncher.localePicker.title "Tor Browser Language">
    
    8
    -<!ENTITY torlauncher.localePicker.prompt "Please select a language.">
    
    9
    -
    
    10
    -<!-- For "first run" wizard: -->
    
    11
    -
    
    12
    -<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
    
    13
    -<!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.">
    
    14
    -<!ENTITY torSettings.configure "Configure">
    
    15
    -<!ENTITY torSettings.connect "Connect">
    
    16
    -
    
    17
    -<!-- Other: -->
    
    18
    -
    
    19
    -<!ENTITY torsettings.startingTor "Waiting for Tor to start…">
    
    20
    -<!ENTITY torsettings.restartTor "Restart Tor">
    
    21
    -<!ENTITY torsettings.reconfigTor "Reconfigure">
    
    22
    -
    
    23
    -<!ENTITY torsettings.discardSettings.prompt "You have configured Tor bridges or you have entered local proxy settings.&#160; To make a direct connection to the Tor network, these settings must be removed.">
    
    24
    -<!ENTITY torsettings.discardSettings.proceed "Remove Settings and Connect">
    
    25
    -
    
    26
    -<!ENTITY torsettings.optional "Optional">
    
    27
    -
    
    28
    -<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
    
    29
    -<!ENTITY torsettings.useProxy.type "Proxy Type">
    
    30
    -<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
    
    31
    -<!ENTITY torsettings.useProxy.address "Address">
    
    32
    -<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
    
    33
    -<!ENTITY torsettings.useProxy.port "Port">
    
    34
    -<!ENTITY torsettings.useProxy.username "Username">
    
    35
    -<!ENTITY torsettings.useProxy.password "Password">
    
    36
    -<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
    
    37
    -<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
    
    38
    -<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
    
    39
    -<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
    
    40
    -<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports">
    
    41
    -<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
    
    42
    -<!ENTITY torsettings.useBridges.default "Select a Built-In Bridge">
    
    43
    -<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
    
    44
    -<!ENTITY torsettings.useBridges.bridgeDB "Request a bridge from torproject.org">
    
    45
    -<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Enter the characters from the image">
    
    46
    -<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Get a new challenge">
    
    47
    -<!ENTITY torsettings.useBridges.captchaSubmit "Submit">
    
    48
    -<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
    
    49
    -<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
    
    50
    -<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
    
    51
    -
    
    52
    -<!ENTITY torsettings.copyLog "Copy Tor Log To Clipboard">
    
    53
    -
    
    54
    -<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
    
    55
    -<!ENTITY torsettings.proxyHelp1 "A local proxy might be needed when connecting through a company, school, or university network.&#160;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.">
    
    56
    -
    
    57
    -<!ENTITY torsettings.bridgeHelpTitle "Bridge Relay Help">
    
    58
    -<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.&#160; Each type of bridge uses a different method to avoid censorship.&#160; 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.">
    
    59
    -<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.&#160; If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
    
    60
    -
    
    61
    -<!-- Progress -->
    
    62
    -<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.&#160; This may take several minutes.">
    
    63
    -
    
    64
    -<!-- #31286 about:preferences strings -->
    
    65
    -<!ENTITY torPreferences.categoryTitle "Connection">
    
    66
    -<!ENTITY torPreferences.torSettings "Tor Settings">
    
    67
    -<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
    
    68
    -<!ENTITY torPreferences.learnMore "Learn more">
    
    69
    -<!-- Status -->
    
    70
    -<!ENTITY torPreferences.statusInternetLabel "Internet:">
    
    71
    -<!ENTITY torPreferences.statusInternetTest "Test">
    
    72
    -<!ENTITY torPreferences.statusInternetOnline "Online">
    
    73
    -<!ENTITY torPreferences.statusInternetOffline "Offline">
    
    74
    -<!ENTITY torPreferences.statusTorLabel "Tor Network:">
    
    75
    -<!ENTITY torPreferences.statusTorConnected "Connected">
    
    76
    -<!ENTITY torPreferences.statusTorNotConnected "Not Connected">
    
    77
    -<!ENTITY torPreferences.statusTorBlocked "Potentially Blocked">
    
    78
    -<!ENTITY torPreferences.learnMore "Learn more">
    
    79
    -<!-- Quickstart -->
    
    80
    -<!ENTITY torPreferences.quickstart "Quickstart">
    
    81
    -<!ENTITY torPreferences.quickstartDescriptionLong "Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings.">
    
    82
    -<!ENTITY torPreferences.quickstartCheckbox "Always connect automatically">
    
    83
    -<!-- Bridge settings -->
    
    84
    -<!ENTITY torPreferences.bridges "Bridges">
    
    85
    -<!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.">
    
    86
    -<!ENTITY torPreferences.bridgeLocation "Your location">
    
    87
    -<!ENTITY torPreferences.bridgeLocationAutomatic "Automatic">
    
    88
    -<!ENTITY torPreferences.bridgeLocationFrequent "Frequently selected locations">
    
    89
    -<!ENTITY torPreferences.bridgeLocationOther "Other locations">
    
    90
    -<!ENTITY torPreferences.bridgeChooseForMe "Choose a Bridge For Me…">
    
    91
    -<!ENTITY torPreferences.bridgeBadgeCurrent "Your Current Bridges">
    
    92
    -<!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.">
    
    93
    -<!ENTITY torPreferences.bridgeId "#1 bridge: #2"> <!-- #1 = bridge type; #2 = bridge emoji id -->
    
    94
    -<!ENTITY torPreferences.remove "Remove">
    
    95
    -<!ENTITY torPreferences.bridgeDisableBuiltIn "Disable built-in bridges">
    
    96
    -<!ENTITY torPreferences.bridgeShare "Share this bridge using the QR code or by copying its address:">
    
    97
    -<!ENTITY torPreferences.bridgeCopy "Copy Bridge Address">
    
    98
    -<!ENTITY torPreferences.copied "Copied!">
    
    99
    -<!ENTITY torPreferences.bridgeShowAll "Show All Bridges">
    
    100
    -<!ENTITY torPreferences.bridgeRemoveAll "Remove All Bridges">
    
    101
    -<!ENTITY torPreferences.bridgeAdd "Add a New Bridge">
    
    102
    -<!ENTITY torPreferences.bridgeSelectBrowserBuiltin "Choose from one of Tor Browser’s built-in bridges">
    
    103
    -<!ENTITY torPreferences.bridgeSelectBuiltin "Select a Built-In Bridge…">
    
    104
    -<!ENTITY torPreferences.bridgeRequest "Request a Bridge…">
    
    105
    -<!ENTITY torPreferences.bridgeEnterKnown "Enter a bridge address you already know">
    
    106
    -<!ENTITY torPreferences.bridgeAddManually "Add a Bridge Manually…">
    
    107
    -<!-- Advanced settings -->
    
    108
    -<!ENTITY torPreferences.advanced "Advanced">
    
    109
    -<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet">
    
    110
    -<!ENTITY torPreferences.advancedButton "Settings…">
    
    111
    -<!ENTITY torPreferences.viewTorLogs "View the Tor logs">
    
    112
    -<!ENTITY torPreferences.viewLogs "View Logs…">
    
    113
    -<!-- Remove all bridges dialog -->
    
    114
    -<!ENTITY torPreferences.removeBridgesQuestion "Remove all the bridges?">
    
    115
    -<!ENTITY torPreferences.removeBridgesWarning "This action cannot be undone.">
    
    116
    -<!ENTITY torPreferences.cancel "Cancel">
    
    117
    -<!-- Scan bridge QR dialog -->
    
    118
    -<!ENTITY torPreferences.scanQrTitle "Scan the QR code">
    
    119
    -<!-- Builtin bridges dialog -->
    
    120
    -<!ENTITY torPreferences.builtinBridgeTitle "Built-In Bridges">
    
    121
    -<!ENTITY torPreferences.builtinBridgeDescription "Tor Browser includes some specific types of bridges known as “pluggable transports”.">
    
    122
    -<!ENTITY torPreferences.builtinBridgeObfs4 "obfs4">
    
    123
    -<!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.">
    
    124
    -<!ENTITY torPreferences.builtinBridgeSnowflake "Snowflake">
    
    125
    -<!ENTITY torPreferences.builtinBridgeSnowflakeDescription "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers.">
    
    126
    -<!ENTITY torPreferences.builtinBridgeMeekAzure "meek-azure">
    
    127
    -<!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.">
    
    128
    -<!-- Request bridges dialog -->
    
    129
    -<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
    
    130
    -<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
    
    131
    -<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
    
    132
    -<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
    
    133
    -<!-- Provide bridge dialog -->
    
    134
    -<!ENTITY torPreferences.provideBridgeTitle "Provide Bridge">
    
    135
    -<!ENTITY torPreferences.provideBridgeHeader "Enter bridge information from a trusted source">
    
    136
    -<!-- Connection settings dialog -->
    
    137
    -<!ENTITY torPreferences.connectionSettingsDialogTitle "Connection Settings">
    
    138
    -<!ENTITY torPreferences.connectionSettingsDialogHeader "Configure how Tor Browser connects to the Internet">
    
    139
    -<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-seperated values">
    
    140
    -<!-- Log dialog -->
    
    141
    -<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
    
    142
    -
    
    143
    -<!-- #24746 about:torconnect strings -->
    
    144
    -<!ENTITY torConnect.notConnectedConcise "Not Connected">
    
    145
    -<!ENTITY torConnect.connectingConcise "Connecting…">
    
    146
    -<!ENTITY torConnect.tryingAgain "Trying again…">
    
    147
    -<!ENTITY torConnect.noInternet "Tor Browser couldn’t reach the Internet">
    
    148
    -<!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.">
    
    149
    -<!ENTITY torConnect.couldNotConnect "Tor Browser could not connect to Tor">
    
    150
    -<!ENTITY torConnect.assistDescriptionConfigure "configure your connection"> <!-- used as a text to insert as a link on several strings (#1) -->
    
    151
    -<!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 -->
    
    152
    -<!ENTITY torConnect.tryingBridge "Trying a bridge…">
    
    153
    -<!ENTITY torConnect.tryingBridgeAgain "Trying one more time…">
    
    154
    -<!ENTITY torConnect.errorLocation "Tor Browser couldn’t locate you">
    
    155
    -<!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 -->
    
    156
    -<!ENTITY torConnect.isLocationCorrect "Are these location settings correct?">
    
    157
    -<!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 -->
    
    158
    -<!ENTITY torConnect.finalError "Tor Browser still cannot connect">
    
    159
    -<!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.">
    
    160
    -<!ENTITY torConnect.breadcrumbAssist "Connection assist">
    
    161
    -<!ENTITY torConnect.breadcrumbLocation "Location settings">
    
    162
    -<!ENTITY torConnect.breadcrumbTryBridge "Try a bridge">
    
    163
    -<!ENTITY torConnect.automatic "Automatic">
    
    164
    -<!ENTITY torConnect.selectCountryRegion "Select Country or Region">
    
    165
    -<!ENTITY torConnect.frequentLocations "Frequently selected locations">
    
    166
    -<!ENTITY torConnect.otherLocations "Other locations">
    
    167
    -<!ENTITY torConnect.restartTorBrowser "Restart Tor Browser">
    
    168
    -<!ENTITY torConnect.configureConnection "Configure Connection…">
    
    169
    -<!ENTITY torConnect.viewLog "View logs…">
    
    170
    -<!ENTITY torConnect.tryAgain "Try Again">
    
    171
    -<!ENTITY torConnect.offline "Internet not reachable">
    
    172
    -<!ENTITY torConnect.connectMessage "Changes to Tor Settings will not take effect until you connect">
    
    173
    -<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
    
    174
    -<!ENTITY torConnect.yourLocation "Your Location">
    
    175
    -<!ENTITY torConnect.tryBridge "Try a Bridge">
    
    176
    -<!ENTITY torConnect.autoBootstrappingFailed "Automatic configuration failed">
    
    177
    -<!ENTITY torConnect.autoBootstrappingFailed "None of the configurations we tried worked">
    
    178
    -<!ENTITY torConnect.cannotDetermineCountry "Unable to determine user country">
    
    179
    -<!ENTITY torConnect.noSettingsForCountry "No settings available for your location">

  • toolkit/torbutton/chrome/locale/en-US/onionLocation.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +# Onion-Location strings.
    
    7
    +onionLocation.alwaysPrioritize=Always Prioritize Onions
    
    8
    +onionLocation.alwaysPrioritizeAccessKey=a
    
    9
    +onionLocation.notNow=Not Now
    
    10
    +onionLocation.notNowAccessKey=n
    
    11
    +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.
    
    12
    +onionLocation.tryThis=Try Onion Services
    
    13
    +onionLocation.onionAvailable=.onion available
    
    14
    +onionLocation.learnMore=Learn more…
    
    15
    +onionLocation.always=Always
    
    16
    +onionLocation.askEverytime=Ask every time
    
    17
    +onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
    
    18
    +onionLocation.onionServicesTitle=Onion Services

  • toolkit/torbutton/chrome/locale/en-US/rulesets.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +# about:rulesets strings.
    
    7
    +rulesets.warningTitle=Proceed with Caution
    
    8
    +rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing.
    
    9
    +rulesets.warningEnable=Warn me when I attempt to access these preferences
    
    10
    +rulesets.warningButton=Accept the Risk and Continue
    
    11
    +# Ruleset list
    
    12
    +rulesets.rulesets=Rulesets
    
    13
    +rulesets.noRulesets=No rulesets found
    
    14
    +rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here.
    
    15
    +# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component)
    
    16
    +rulesets.lastUpdated=Last updated %S
    
    17
    +rulesets.neverUpdated=Never updated, or last update failed
    
    18
    +rulesets.enabled=Enabled
    
    19
    +rulesets.disabled=Disabled
    
    20
    +# Ruleset details/edit ruleset
    
    21
    +rulesets.edit=Edit
    
    22
    +rulesets.name=Name
    
    23
    +rulesets.jwk=JWK
    
    24
    +rulesets.pathPrefix=Path Prefix
    
    25
    +rulesets.scope=Scope
    
    26
    +rulesets.enable=Enable this ruleset
    
    27
    +rulesets.checkUpdates=Check for Updates
    
    28
    +rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format
    
    29
    +rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key
    
    30
    +rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset
    
    31
    +rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL
    
    32
    +rulesets.scopePlaceholder=Regular expression for the scope of the rules
    
    33
    +rulesets.scopeInvalid=The scope could not be parsed as a regular expression
    
    34
    +rulesets.save=Save
    
    35
    +rulesets.cancel=Cancel

  • toolkit/torbutton/chrome/locale/en-US/settings.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +settings.categoryTitle=Connection
    
    7
    +
    
    8
    +# Message box
    
    9
    +settings.torPreferencesDescription=Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world.
    
    10
    +
    
    11
    +# Status
    
    12
    +settings.statusInternetLabel=Internet:
    
    13
    +settings.statusInternetTest=Test
    
    14
    +settings.statusInternetOnline=Online
    
    15
    +settings.statusInternetOffline=Offline
    
    16
    +settings.statusTorLabel=Tor Network:
    
    17
    +settings.statusTorConnected=Connected
    
    18
    +settings.statusTorNotConnected=Not Connected
    
    19
    +settings.statusTorBlocked=Potentially Blocked
    
    20
    +settings.learnMore=Learn more
    
    21
    +
    
    22
    +# Quickstart
    
    23
    +settings.quickstartHeading=Quickstart
    
    24
    +settings.quickstartDescription=Quickstart connects Tor Browser to the Tor Network automatically when launched, based on your last used connection settings.
    
    25
    +settings.quickstartCheckbox=Always connect automatically
    
    26
    +
    
    27
    +# Bridge settings
    
    28
    +settings.bridgesHeading=Bridges
    
    29
    +settings.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.
    
    30
    +settings.bridgeLocation=Your location
    
    31
    +settings.bridgeLocationAutomatic=Automatic
    
    32
    +settings.bridgeLocationFrequent=Frequently selected locations
    
    33
    +settings.bridgeLocationOther=Other locations
    
    34
    +settings.bridgeChooseForMe=Choose a Bridge For Me…
    
    35
    +settings.bridgeCurrent=Your Current Bridges
    
    36
    +settings.bridgeCurrentDescription=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.
    
    37
    +
    
    38
    +# Translation note: %1$S = bridge type; %2$S = bridge emoji id
    
    39
    +settings.bridgeId=%1$S bridge: %2$S
    
    40
    +settings.remove=Remove
    
    41
    +settings.bridgeDisableBuiltIn=Disable built-in bridges
    
    42
    +settings.bridgeShare=Share this bridge using the QR code or by copying its address:
    
    43
    +settings.bridgeCopy=Copy Bridge Address
    
    44
    +settings.copied=Copied!
    
    45
    +settings.bridgeShowAll=Show All Bridges
    
    46
    +settings.bridgeRemoveAll=Remove All Bridges
    
    47
    +settings.bridgeAdd=Add a New Bridge
    
    48
    +settings.bridgeSelectBrowserBuiltin=Choose from one of Tor Browser’s built-in bridges
    
    49
    +settings.bridgeSelectBuiltin=Select a Built-In Bridge…
    
    50
    +settings.bridgeRequestFromTorProject=Request a bridge from torproject.org
    
    51
    +settings.bridgeRequest=Request a Bridge…
    
    52
    +settings.bridgeEnterKnown=Enter a bridge address you already know
    
    53
    +settings.bridgeAddManually=Add a Bridge Manually…
    
    54
    +
    
    55
    +# Advanced settings
    
    56
    +settings.advancedHeading=Advanced
    
    57
    +settings.advancedLabel=Configure how Tor Browser connects to the internet
    
    58
    +settings.advancedButton=Settings…
    
    59
    +settings.showTorDaemonLogs=View the Tor logs
    
    60
    +settings.showLogs=View Logs…
    
    61
    +
    
    62
    +# Remove all bridges dialog
    
    63
    +settings.removeBridgesQuestion=Remove all the bridges?
    
    64
    +settings.removeBridgesWarning=This action cannot be undone.
    
    65
    +settings.cancel=Cancel
    
    66
    +
    
    67
    +# Scan bridge QR dialog
    
    68
    +settings.scanQrTitle=Scan the QR code
    
    69
    +
    
    70
    +# Builtin bridges dialog
    
    71
    +settings.builtinBridgeTitle=Built-In Bridges
    
    72
    +settings.builtinBridgeHeader=Select a Built-In Bridge
    
    73
    +settings.builtinBridgeDescription=Tor Browser includes some specific types of bridges known as “pluggable transports”.
    
    74
    +settings.builtinBridgeObfs4=obfs4
    
    75
    +settings.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.
    
    76
    +settings.builtinBridgeSnowflake=Snowflake
    
    77
    +settings.builtinBridgeSnowflakeDescription=Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers.
    
    78
    +settings.builtinBridgeMeekAzure=meek-azure
    
    79
    +settings.builtinBridgeMeekAzureDescription=meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor.
    
    80
    +
    
    81
    +# Request bridges dialog
    
    82
    +settings.requestBridgeDialogTitle=Request Bridge
    
    83
    +settings.submitCaptcha=Submit
    
    84
    +settings.contactingBridgeDB=Contacting BridgeDB. Please Wait.
    
    85
    +settings.solveTheCaptcha=Solve the CAPTCHA to request a bridge.
    
    86
    +settings.captchaTextboxPlaceholder=Enter the characters from the image
    
    87
    +settings.incorrectCaptcha=The solution is not correct. Please try again.
    
    88
    +
    
    89
    +# Provide bridge dialog
    
    90
    +settings.provideBridgeTitle=Provide Bridge
    
    91
    +settings.provideBridgeHeader=Enter bridge information from a trusted source
    
    92
    +settings.provideBridgePlaceholder=type address:port (one per line)
    
    93
    +
    
    94
    +# Connection settings dialog
    
    95
    +settings.connectionSettingsDialogTitle=Connection Settings
    
    96
    +settings.connectionSettingsDialogHeader=Configure how Tor Browser connects to the Internet
    
    97
    +settings.useLocalProxy=I use a proxy to connect to the Internet
    
    98
    +settings.proxyType=Proxy Type
    
    99
    +settings.proxyTypeSOCKS4=SOCKS4
    
    100
    +settings.proxyTypeSOCKS5=SOCKS5
    
    101
    +settings.proxyTypeHTTP=HTTP/HTTPS
    
    102
    +settings.proxyAddress=Address
    
    103
    +settings.proxyAddressPlaceholder=IP address or hostname
    
    104
    +settings.proxyPort=Port
    
    105
    +settings.proxyUsername=Username
    
    106
    +settings.proxyPassword=Password
    
    107
    +settings.proxyUsernamePasswordPlaceholder=Optional
    
    108
    +settings.useFirewall=This computer goes through a firewall that only allows connections to certain ports
    
    109
    +settings.allowedPorts=Allowed Ports
    
    110
    +settings.allowedPortsPlaceholder=Comma-seperated values
    
    111
    +
    
    112
    +# Log dialog
    
    113
    +settings.torLogDialogTitle=Tor Logs
    
    114
    +settings.copyLog=Copy Tor Log to Clipboard

  • toolkit/torbutton/chrome/locale/en-US/torConnect.properties
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +torConnect.torConnect=Connect to Tor
    
    7
    +torConnect.torConnecting=Establishing a Connection
    
    8
    +torConnect.torNotConnectedConcise=Not Connected
    
    9
    +torConnect.torConnectingConcise=Connecting…
    
    10
    +torConnect.tryingAgain=Trying again…
    
    11
    +torConnect.noInternet=Tor Browser couldn’t reach the Internet
    
    12
    +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.
    
    13
    +torConnect.torBootstrapFailed=Tor failed to establish a Tor network connection.
    
    14
    +torConnect.couldNotConnect=Tor Browser could not connect to Tor
    
    15
    +# Translation note: used as a text to insert as a link on several strings (%S)
    
    16
    +torConnect.configureConnection=configure your connection
    
    17
    +# Translation note: %S = "configure your connection" link
    
    18
    +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 %S manually instead.
    
    19
    +torConnect.tryingBridge=Trying a bridge…
    
    20
    +torConnect.tryingBridgeAgain=Trying one more time…
    
    21
    +torConnect.errorLocation=Tor Browser couldn’t locate you
    
    22
    +# Translation note: %S = "configure your connection" link
    
    23
    +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, %S manually instead.
    
    24
    +torConnect.isLocationCorrect=Are these location settings correct?
    
    25
    +# Translation note: %S = "configure your connection" link
    
    26
    +torConnect.isLocationCorrectDescription=Tor Browser still couldn’t connect to Tor. Please check your location settings are correct and try again, or %S instead.
    
    27
    +torConnect.finalError=Tor Browser still cannot connect
    
    28
    +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.
    
    29
    +torConnect.breadcrumbAssist=Connection assist
    
    30
    +torConnect.breadcrumbLocation=Location settings
    
    31
    +torConnect.breadcrumbTryBridge=Try a bridge
    
    32
    +torConnect.restartTorBrowser=Restart Tor Browser
    
    33
    +torConnect.torConfigure=Configure Connection…
    
    34
    +torConnect.viewLog=View logs…
    
    35
    +torConnect.torConnectButton=Connect
    
    36
    +torConnect.cancel=Cancel
    
    37
    +torConnect.torConnected=Connected to the Tor network!
    
    38
    +torConnect.torConnectedConcise=Connected
    
    39
    +torConnect.tryAgain=Try Again
    
    40
    +torConnect.connectMessage=Changes to Tor Settings will not take effect until you connect
    
    41
    +torConnect.tryAgainMessage=Tor Browser has failed to establish a connection to the Tor Network
    
    42
    +torConnect.yourLocation=Your Location
    
    43
    +torConnect.tryBridge=Try a Bridge
    
    44
    +torConnect.automatic=Automatic
    
    45
    +torConnect.selectCountryRegion=Select Country or Region
    
    46
    +torConnect.frequentLocations=Frequently selected locations
    
    47
    +torConnect.otherLocations=Other locations
    
    48
    +torConnect.offline=Internet not reachable
    
    49
    +torConnect.autoBootstrappingFailed=Automatic configuration failed
    
    50
    +torConnect.autoBootstrappingAllFailed=None of the configurations we tried worked
    
    51
    +torConnect.cannotDetermineCountry=Unable to determine user country
    
    52
    +torConnect.noSettingsForCountry=No settings available for your location

  • toolkit/torbutton/chrome/locale/en-US/torbutton.dtd
    1
    -<!ENTITY torbutton.context_menu.new_identity "New Identity">
    
    2
    -<!ENTITY torbutton.context_menu.new_identity_sentence_case "New identity">
    
    3
    -<!ENTITY torbutton.context_menu.new_identity_key "I">
    
    1
    +<!-- Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +   - This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +   - License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    
    5
    +
    
    4 6
     <!ENTITY torbutton.context_menu.new_circuit "New Tor Circuit for this Site">
    
    5 7
     <!ENTITY torbutton.context_menu.new_circuit_sentence_case "New Tor circuit for this site">
    
    6 8
     <!ENTITY torbutton.context_menu.new_circuit_key "C">
    
    7
    -<!ENTITY torbutton.context_menu.networksettings "Tor Network Settings…">
    
    8
    -<!ENTITY torbutton.context_menu.networksettings.key "N">
    
    9
    -<!ENTITY torbutton.context_menu.downloadUpdate "Check for Tor Browser Update…">
    
    10
    -<!ENTITY torbutton.context_menu.downloadUpdate.key "U">
    
    11
    -<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections…">
    
    12
    -<!ENTITY torbutton.context_menu.cookieProtections.key "C">
    
    13
    -<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
    
    9
    +
    
    10
    +<!ENTITY torbutton.circuit_display.title "Tor Circuit">
    
    11
    +<!ENTITY torbutton.circuit_display.new_circuit "New Circuit for this Site">
    
    12
    +
    
    13
    +<!-- Onion services strings. Strings are kept here for ease of translation. -->
    
    14
    +<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
    
    15
    +<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Remember this key">
    
    16
    +
    
    14 17
     <!ENTITY torbutton.prefs.security_settings "Tor Browser Security Settings">
    
    15
    -<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
    
    16
    -<!ENTITY torbutton.cookiedialog.lockCol "Protected">
    
    17
    -<!ENTITY torbutton.cookiedialog.domainCol "Host">
    
    18
    -<!ENTITY torbutton.cookiedialog.nameCol "Name">
    
    19
    -<!ENTITY torbutton.cookiedialog.pathCol "Path">
    
    20
    -<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie">
    
    21
    -<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie">
    
    22
    -<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie">
    
    23
    -<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected">
    
    24
    -<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies">
    
    25
    -<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies">
    
    26 18
     <!ENTITY torbutton.prefs.sec_caption "Security Level">
    
    27 19
     <!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.">
    
    28 20
     <!ENTITY torbutton.prefs.sec_standard_label "Standard">
    
    ... ... @@ -48,9 +40,3 @@
    48 40
     <!ENTITY torbutton.prefs.sec_restore_defaults "Restore Defaults">
    
    49 41
     <!ENTITY torbutton.prefs.sec_advanced_security_settings "Advanced Security Settings…">
    
    50 42
     <!ENTITY torbutton.prefs.sec_change "Change…">
    51
    -<!ENTITY torbutton.circuit_display.title "Tor Circuit">
    
    52
    -<!ENTITY torbutton.circuit_display.new_circuit "New Circuit for this Site">
    
    53
    -
    
    54
    -<!-- Onion services strings.  Strings are kept here for ease of translation. -->
    
    55
    -<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
    
    56
    -<!ENTITY torbutton.onionServices.authPrompt.persistCheckboxLabel "Remember this key">

  • toolkit/torbutton/chrome/locale/en-US/torbutton.properties
    1
    -torbutton.circuit_display.internet = Internet
    
    2
    -torbutton.circuit_display.ip_unknown = IP unknown
    
    3
    -torbutton.circuit_display.onion_site = Onion site
    
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    +
    
    6
    +# Circuit display
    
    4 7
     torbutton.circuit_display.this_browser = This browser
    
    5 8
     torbutton.circuit_display.relay = Relay
    
    6 9
     torbutton.circuit_display.tor_bridge = Bridge
    
    ... ... @@ -10,8 +13,8 @@ torbutton.circuit_display.guard_note = Your [Guard] node may not change.
    10 13
     torbutton.circuit_display.learn_more = Learn more
    
    11 14
     torbutton.circuit_display.click_to_copy = Click to Copy
    
    12 15
     torbutton.circuit_display.copied = Copied!
    
    13
    -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.
    
    14
    -extensions.torbutton@torproject.org.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data.
    
    16
    +
    
    17
    +# External app blocker
    
    15 18
     torbutton.popup.external.title = Download an external file type?
    
    16 19
     torbutton.popup.external.app = Tor Browser cannot display this file. You will need to open it with another application.\n\n
    
    17 20
     torbutton.popup.external.note = Some types of files can cause applications to connect to the Internet without using Tor.\n\n
    
    ... ... @@ -19,47 +22,37 @@ torbutton.popup.external.suggest = To be safe, you should only open downloaded f
    19 22
     torbutton.popup.launch = Download file
    
    20 23
     torbutton.popup.cancel = Cancel
    
    21 24
     torbutton.popup.dontask = Automatically download files from now on
    
    22
    -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?
    
    23
    -torbutton.security_settings.menu.title = Security Settings
    
    24
    -torbutton.title.prompt_torbrowser = Important Torbutton Information
    
    25
    -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 Firefox is used with Torbutton.\n\nTo remove Torbutton, go to Tools->Addons->Extensions and then click the Remove button next to Torbutton.
    
    26
    -torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information.
    
    27
    -
    
    28
    -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
    
    29
    -torbutton.popup.never_ask_again = Never ask me again
    
    30
    -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
    
    31 25
     
    
    32
    -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.
    
    33
    -
    
    34
    -# Canvas permission prompt. Strings are kept here for ease of translation.
    
    35
    -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?
    
    36
    -canvas.notNow=Not Now
    
    37
    -canvas.notNowAccessKey=N
    
    38
    -canvas.allow=Allow in the future
    
    39
    -canvas.allowAccessKey=A
    
    40
    -canvas.never=Never for this site (recommended)
    
    41
    -canvas.neverAccessKey=e
    
    42
    -
    
    43
    -# Profile/startup error messages. Strings are kept here for ease of translation.
    
    44
    -# LOCALIZATION NOTE: %S is the application name.
    
    45
    -profileProblemTitle=%S Profile Problem
    
    46
    -profileReadOnly=You cannot run %S from a read-only file system.  Please copy %S to another location before trying to use it.
    
    47
    -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.
    
    48
    -profileAccessDenied=%S does not have permission to access the profile. Please adjust your file system permissions and try again.
    
    49
    -profileMigrationFailed=Migration of your existing %S profile failed.\nNew settings will be used.
    
    50
    -
    
    51
    -# "Downloading update" string for the hamburger menu (see #28885).
    
    52
    -# This string is kept here for ease of translation.
    
    53
    -# LOCALIZATION NOTE: %S is the application name.
    
    54
    -updateDownloadingPanelUILabel=Downloading %S update
    
    55
    -
    
    56
    -# .Onion Page Info prompt.  Strings are kept here for ease of translation.
    
    26
    +# .Onion Page Info prompt.
    
    57 27
     pageInfo_OnionEncryptionWithBitsAndProtocol=Connection Encrypted (Onion Service, %1$S, %2$S bit keys, %3$S)
    
    58 28
     pageInfo_OnionEncryption=Connection Encrypted (Onion Service)
    
    59
    -pageInfo_OnionName=Onion Name:
    
    60 29
     
    
    61
    -# Onion services strings.  Strings are kept here for ease of translation.
    
    30
    +# Shared between Onion Auth prompt and preferences
    
    62 31
     onionServices.learnMore=Learn more
    
    32
    +
    
    33
    +# Onion Services Authentication prompt
    
    34
    +# LOCALIZATION NOTE: %S will be replaced with the .onion address.
    
    35
    +onionServices.authPrompt.description2=%S is requesting that you authenticate.
    
    36
    +onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
    
    37
    +onionServices.authPrompt.done=Done
    
    38
    +onionServices.authPrompt.doneAccessKey=d
    
    39
    +onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
    
    40
    +onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
    
    41
    +
    
    42
    +# Onion Services Authentication preferences
    
    43
    +onionServices.authPreferences.header=Onion Services Authentication
    
    44
    +onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them.
    
    45
    +onionServices.authPreferences.savedKeys=Saved Keys…
    
    46
    +onionServices.authPreferences.dialogTitle=Onion Service Keys
    
    47
    +onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer
    
    48
    +onionServices.authPreferences.onionSite=Onionsite
    
    49
    +onionServices.authPreferences.onionKey=Key
    
    50
    +onionServices.authPreferences.remove=Remove
    
    51
    +onionServices.authPreferences.removeAll=Remove All
    
    52
    +onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor
    
    53
    +onionServices.authPreferences.failedToRemoveKey=Unable to remove key
    
    54
    +
    
    55
    +# Onion services error strings.
    
    63 56
     onionServices.errorPage.browser=Browser
    
    64 57
     onionServices.errorPage.network=Network
    
    65 58
     onionServices.errorPage.onionSite=Onionsite
    
    ... ... @@ -105,83 +98,23 @@ onionServices.introTimedOut.pageTitle=Problem Loading Onionsite
    105 98
     onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out
    
    106 99
     onionServices.introTimedOut=Failed to connect to the onionsite, possibly due to a poor network connection.
    
    107 100
     onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit.
    
    108
    -#
    
    109
    -# LOCALIZATION NOTE: %S will be replaced with the .onion address.
    
    110
    -onionServices.authPrompt.description2=%S is requesting that you authenticate.
    
    111
    -onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
    
    112
    -onionServices.authPrompt.done=Done
    
    113
    -onionServices.authPrompt.doneAccessKey=d
    
    114
    -onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
    
    115
    -onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
    
    116
    -onionServices.authPreferences.header=Onion Services Authentication
    
    117
    -onionServices.authPreferences.overview=Some onion services require that you identify yourself with a key (a kind of password) before you can access them.
    
    118
    -onionServices.authPreferences.savedKeys=Saved Keys…
    
    119
    -onionServices.authPreferences.dialogTitle=Onion Service Keys
    
    120
    -onionServices.authPreferences.dialogIntro=Keys for the following onionsites are stored on your computer
    
    121
    -onionServices.authPreferences.onionSite=Onionsite
    
    122
    -onionServices.authPreferences.onionKey=Key
    
    123
    -onionServices.authPreferences.remove=Remove
    
    124
    -onionServices.authPreferences.removeAll=Remove All
    
    125
    -onionServices.authPreferences.failedToGetKeys=Unable to retrieve keys from tor
    
    126
    -onionServices.authPreferences.failedToRemoveKey=Unable to remove key
    
    127
    -onionServices.v2Deprecated.pageTitle=V2 Onion Site Deprecation Warning
    
    128
    -onionServices.v2Deprecated.header=Version 2 Onion Sites will be deprecated soon
    
    129
    -onionServices.v2Deprecated=This onion site will not be reachable soon. Please contact the site administrator and encourage them to upgrade.
    
    130
    -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.
    
    131
    -onionServices.v2Deprecated.tryAgain=Got it
    
    132
    -onionServices.v2Deprecated.tooltip=This onion site will not be reachable soon
    
    133 101
     
    
    134
    -# Onion-Location strings.
    
    135
    -onionLocation.alwaysPrioritize=Always Prioritize Onions
    
    136
    -onionLocation.alwaysPrioritizeAccessKey=a
    
    137
    -onionLocation.notNow=Not Now
    
    138
    -onionLocation.notNowAccessKey=n
    
    139
    -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.
    
    140
    -onionLocation.tryThis=Try Onion Services
    
    141
    -onionLocation.onionAvailable=.onion available
    
    142
    -onionLocation.learnMore=Learn more…
    
    143
    -onionLocation.always=Always
    
    144
    -onionLocation.askEverytime=Ask every time
    
    145
    -onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
    
    146
    -onionLocation.onionServicesTitle=Onion Services
    
    102
    +# Profile/startup error messages.
    
    103
    +# LOCALIZATION NOTE: %S is the application name.
    
    104
    +profileProblemTitle=%S Profile Problem
    
    105
    +profileReadOnly=You cannot run %S from a read-only file system.  Please copy %S to another location before trying to use it.
    
    106
    +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.
    
    107
    +profileAccessDenied=%S does not have permission to access the profile. Please adjust your file system permissions and try again.
    
    108
    +
    
    109
    +# New identity warning
    
    110
    +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?
    
    111
    +
    
    112
    +
    
    113
    +## Legacy
    
    147 114
     
    
    148
    -# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
    
    149
    -cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
    
    150
    -cryptoSafetyPrompt.whatCanHeading=What can you do about it?
    
    151
    -cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
    
    152
    -cryptoSafetyPrompt.learnMore=Learn more
    
    153
    -cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
    
    154
    -cryptoSafetyPrompt.primaryActionAccessKey=R
    
    155
    -cryptoSafetyPrompt.secondaryAction=Dismiss Warning
    
    156
    -cryptoSafetyPrompt.secondaryActionAccessKey=B
    
    115
    +# Preferences for mobile: these strings are still referenced, but we should
    
    116
    +# check whether this feature is still used
    
    117
    +torbutton.security_settings.menu.title = Security Settings
    
    157 118
     
    
    158
    -# about:rulesets strings.
    
    159
    -rulesets.warningTitle=Proceed with Caution
    
    160
    -rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing.
    
    161
    -rulesets.warningEnable=Warn me when I attempt to access these preferences
    
    162
    -rulesets.warningButton=Accept the Risk and Continue
    
    163
    -# Ruleset list
    
    164
    -rulesets.rulesets=Rulesets
    
    165
    -rulesets.noRulesets=No rulesets found
    
    166
    -rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here.
    
    167
    -# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component)
    
    168
    -rulesets.lastUpdated=Last updated %S
    
    169
    -rulesets.neverUpdated=Never updated, or last update failed
    
    170
    -rulesets.enabled=Enabled
    
    171
    -rulesets.disabled=Disabled
    
    172
    -# Ruleset details/edit ruleset
    
    173
    -rulesets.edit=Edit
    
    174
    -rulesets.name=Name
    
    175
    -rulesets.jwk=JWK
    
    176
    -rulesets.pathPrefix=Path Prefix
    
    177
    -rulesets.scope=Scope
    
    178
    -rulesets.enable=Enable this ruleset
    
    179
    -rulesets.checkUpdates=Check for Updates
    
    180
    -rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format
    
    181
    -rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key
    
    182
    -rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset
    
    183
    -rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL
    
    184
    -rulesets.scopePlaceholder=Regular expression for the scope of the rules
    
    185
    -rulesets.scopeInvalid=The scope could not be parsed as a regular expression
    
    186
    -rulesets.save=Save
    
    187
    -rulesets.cancel=Cancel
    \ No newline at end of file
    119
    +# Other legacy stuff we might just remove since we are using letterbox
    
    120
    +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.

  • toolkit/torbutton/chrome/locale/en-US/torlauncher.properties
    1
    -### Copyright (c) 2020, The Tor Project, Inc.
    
    2
    -### See LICENSE for licensing information.
    
    1
    +# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    +# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    +# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    3 5
     
    
    4 6
     torlauncher.error_title=Tor Launcher
    
    5 7
     
    
    6 8
     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.
    
    7 9
     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.
    
    8 10
     torlauncher.tor_exited2=Restarting Tor will not close your browser tabs.
    
    11
    +torlauncher.restart_tor=Restart Tor
    
    9 12
     torlauncher.tor_controlconn_failed=Could not connect to Tor control port.
    
    10
    -torlauncher.tor_failed_to_start=Tor failed to start.
    
    11
    -torlauncher.tor_control_failed=Failed to take control of Tor.
    
    12 13
     torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection.
    
    13 14
     torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S).
    
    14 15
     
    
    ... ... @@ -19,40 +20,6 @@ torlauncher.datadir_missing=The Tor data directory does not exist and could not
    19 20
     torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created.
    
    20 21
     torlauncher.password_hash_missing=Failed to get hashed password.
    
    21 22
     
    
    22
    -torlauncher.failed_to_get_settings=Unable to retrieve Tor settings.\n\n%S
    
    23
    -torlauncher.failed_to_save_settings=Unable to save Tor settings.\n\n%S
    
    24
    -torlauncher.ensure_tor_is_running=Please ensure that Tor is running.
    
    25
    -
    
    26
    -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.
    
    27
    -torlauncher.error_proxy_type_missing=You must select the proxy type.
    
    28
    -torlauncher.error_bridges_missing=You must specify one or more bridges.
    
    29
    -torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges.
    
    30
    -torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
    
    31
    -torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
    
    32
    -
    
    33
    -torlauncher.bridge_suffix.meek-amazon=(works in China)
    
    34
    -torlauncher.bridge_suffix.meek-azure=(works in China)
    
    35
    -
    
    36
    -torlauncher.request_a_bridge=Request a Bridge…
    
    37
    -torlauncher.request_a_new_bridge=Request a New Bridge…
    
    38
    -torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
    
    39
    -torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
    
    40
    -torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
    
    41
    -torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
    
    42
    -torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
    
    43
    -torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
    
    44
    -
    
    45
    -torlauncher.connect=Connect
    
    46
    -torlauncher.restart_tor=Restart Tor
    
    47
    -torlauncher.quit=Quit
    
    48
    -torlauncher.quit_win=Exit
    
    49
    -torlauncher.done=Done
    
    50
    -
    
    51
    -torlauncher.forAssistance=For assistance, contact %S
    
    52
    -torlauncher.forAssistance2=For assistance, visit %S
    
    53
    -
    
    54
    -torlauncher.copiedNLogMessages=Copy complete. %S Tor log messages are ready to be pasted into a text editor or an email message.
    
    55
    -
    
    56 23
     torlauncher.bootstrapStatus.starting=Starting
    
    57 24
     torlauncher.bootstrapStatus.conn_pt=Connecting to bridge
    
    58 25
     torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge
    
    ... ... @@ -93,5 +60,3 @@ torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
    93 60
     torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
    
    94 61
     torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
    
    95 62
     torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
    96
    -
    
    97
    -torlauncher.copiedNLogMessagesShort=Copied %S Logs