1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
|
{
"extensionName": {
"message": "JShelter",
"description": "Name of the extension. Please, do not translate unless properly justified."
},
"extensionDescription": {
"message": "Extension for increasing security and privacy level of the user.",
"description": "Description of the extension."
},
"javascriptShield": {
"message": "JavaScript Shield",
"description": "The name of the JavaScript Shield displayed at multiple places"
},
"networkBoundaryShield": {
"message": "Network Boundary Shield",
"description": "The name of the Network Boundary Shield displayed at multiple places"
},
"NBSgloballyOff": {
"message": "Network Boundary Shield is globally disabled",
"description": "Informs the user that NBS is globally disabled, displayed e.g. in popup"
},
"fingerprintDetector": {
"message": "Fingerprint Detector",
"description": "The name of the Fingerprint Detector displayed at multiple places"
},
"FPDgloballyOff": {
"message": "Fingerprint Detector is globally disabled",
"description": "Informs the user that FPD is globally disabled, displayed e.g. in popup"
},
"globalSettings": {
"message": "Global settings",
"description": "The button in the popup that opens options page"
},
"settingsForDomain": {
"message": "Settings for domain",
"description": "The text in the popup that introduces the context of the information in the popup"
},
"refreshPage": {
"message": "Refresh page",
"description": "The button in the popup that refreshes the currently displayed page"
},
"modifyJSSPopup": {
"message": "Modify",
"description": "The button in the popup that tweaks JSS"
},
"descriptionMore": {
"message": "(more…)",
"description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get more information about the level."
},
"descriptionLess": {
"message": "(less…)",
"description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get less information about the level."
},
"nameDescriptionSeparator": {
"message": " — ",
"description": "Used for example in the popup to separate the current JSS level from its description."
},
"detailTweaksOfJSShieldForThisSite": {
"message": "Detail tweaks of JS shield for this site",
"description": "Button in the popup that allows to tweak JSS."
},
"wrappers": {
"message": "Groups of APIs",
"description": "Column headding in the popup detailed JSS shield"
},
"levelOfDefense": {
"message": "Level of defense",
"description": "Column headding in the popup detailed JSS shield"
},
"numberOfCalls": {
"message": "Number of calls",
"description": "Column headding in the popup detailed JSS shield"
},
"FingerprintQualityLabel": {
"message": "⤷ The number of APIs misusable for fingerprinting called by the page: ",
"description": "This text is displayed in the popup as additional information from FPD"
},
"popupDefaultLevelHelpText": {
"message": "Set the global default level as the JavaScript Shield level for this page.",
"description": "This text is displayed in the popup as a tooltip for the Default level button"
},
"defaultLevelSelection": {
"message": "Default level ($levelName$)",
"description": "This text is displayed as the default level in the popup",
"placeholders": {
"levelName": {
"content": "$1",
"description": "Translated name of the default level used by the user",
"example": "Recommended, see the keys JSSL*Name like JSSL2Name"
}
}
},
"ShieldOffSlider": {
"message": "OFF",
"description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow"
},
"ShieldOnSlider": {
"message": "ON",
"description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow"
},
"jssgroupUnprotected": {
"message": "Unprotected",
"description": "Displayed during JSS level tweaking in case the API group is completely disabled"
},
"jssgroupPoor": {
"message": "Poor",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupLow": {
"message": "Low",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupMedium": {
"message": "Medium",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupHigh": {
"message": "High",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupLittleLies": {
"message": "Little lies",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupStrict": {
"message": "Strict",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupConfuse": {
"message": "Confuse",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupFake": {
"message": "Fake",
"description": "Displayed during JSS level tweaking for InstalledBrowserPlugins and possibly more (in the future)"
},
"jssgroupAddFake": {
"message": "Add fake",
"description": "Displayed during JSS level tweaking for Connected cameras and microphones and possibly more (in the future)"
},
"jssgroupAsk": {
"message": "Ask",
"description": "Displayed during JSS level tweaking for XHR and possibly more (in the future)"
},
"jssgroupBlock": {
"message": "Block",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupRemove": {
"message": "Remove",
"description": "Displayed during JSS level tweaking for several API groups"
},
"jssgroupTimePrecision": {
"message": "Time precision"
},
"jssgroupTimePrecisionDescription": {
"message": "Prevent attacks and fingerprinting techniques relying on precise time measurement (or make them harder).",
"description": "Displayed at various places"
},
"jssgroupTimePrecisionDescription2": {
"message": "Limit the precision of high-resolution time stamps $apis$. Timestamps provided by the Geolocation API are wrapped as well if you enable \"$jssgroupPhysicalLocationGeolocation$\" protection.",
"description": "Displayed at various places",
"placeholders": {
"apis": {
"content": "(Date, Performance, events, Gamepad API, and Web VR API)",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
},
"jssgroupPhysicalLocationGeolocation": {
"content": "$1",
"description": "Translated version of the jssgroupPhysicalLocationGeolocation string"
}
}
},
"jssgroupTimePoorDescription": {
"message": "Round time to hundredths of a second (1.230)",
"description": "Explains the protection to the user"
},
"jssgroupTimeLowDescription": {
"message": "Round time to tenths of a second (1.200)",
"description": "Explains the protection to the user"
},
"jssgroupTimeHighDescription": {
"message": "Randomize decimal digits with noise (1.451)",
"description": "Explains the protection to the user"
},
"jssgroupLocallyRenderedImages": {
"message": "Locally rendered images",
"description": "htmlcanvaselement group"
},
"jssgroupLocallyRenderedImagesDescription": {
"message": "Protect against canvas fingerprinting or leaking information on the rendering capabilities of the graphic card.",
"description": "Displayed at various places, try to keep canvas in English or make sure that the user can understand that the protection is about the Canvas API"
},
"jssgroupLocallyRenderedImagesDescription2": {
"message": "Functions $apis$ return modified image data.",
"description": "Displayed at various places",
"placeholders": {
"apis": {
"content": "canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData(), OffscreenCanvas.convertToBlob(), and WebGLRenderingContext.readPixels",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
}
}
},
"jssgroupLocallyRenderedImagesDescription3": {
"message": "$apis$ are modified to lie with probability.",
"description": "Displayed after jssgroupLocallyRenderedImagesDescription2",
"placeholders": {
"apis": {
"content": "CanvasRenderingContext2D.isPointInStroke() and CanvasRenderingContext2D.isPointInPath()",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
}
}
},
"jssgroupLocallyRenderedImagesLittleLiesDescription": {
"message": "Apply small modifications to read image data so that the images look the same, but the precise values differ based on the visited domain and across sessions. The goal is to prevent Canvas fingerprinting or at least make it harder.",
"description": "Consider keeping reference to Canvas fingerprinting in English"
},
"jssgroupLocallyRenderedImagesStrictDescription": {
"message": "Read white images (from WebGL canvas read an empty array). This option does not protect from Canvas fingerprinting.",
"description": "Consider keeping reference to Canvas fingerprinting in English"
},
"jssgroupLocallyGeneratedAudio": {
"message": "Locally generated audio",
"description": "audiobuffer group"
},
"jssgroupLocallyGeneratedAudioDescription": {
"message": "Protect against leaking information on the rendering capabilities of the audio card that can be used, for example, in audio fingerprinting.",
"description": "Try to keep reference to audio fingerprinting"
},
"jssgroupLocallyGeneratedAudioDescription2": {
"message": "Functions $apis$ return modified data.",
"placeholders": {
"apis": {
"content": "AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData(), and AnalyserNode.getFloatFrequencyData()",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
}
}
},
"jssgroupLocallyGeneratedAudioLittleLiesDescription": {
"message": "Add small amplitude noise so that the sound is similar to the original to a human. The precise values differ based on the visited domain and across sessions. The goal is to prevent Audio fingerprinting or at least make it harder.",
"description": "Consider keeping reference to Audio fingerprinting in English"
},
"jssgroupLocallyGeneratedAudioStrictDescription": {
"message": "Sound data are replaced by white noise that differs based on the visited domain and across sessions. The goal is to limit leaks on audio hardware and at the same time make Audio fingerprinting harder.",
"description": "Consider keeping reference to Audio fingerprinting in English"
},
"jssgroupGraphicCardInformation": {
"message": "Graphic card information",
"description": "webgl group"
},
"jssgroupGraphicCardInformationDescription": {
"message": "Spoof details of your graphic card usable, for example, to make fingerprinting harder."
},
"jssgroupGraphicCardInformationDescription2": {
"message": "Function $api$ returns modified or bottom values for certain parameters.",
"placeholders": {
"api": {
"content": "WebGLRenderingContext.getParameter()",
"description": "Keep the names of the API"
}
}
},
"jssgroupGraphicCardInformationDescription3": {
"message": "$apis$ return modified values.",
"placeholders": {
"apis": {
"content": "WebGLRenderingContext functions .getFramebufferAttachmentParameter(), .getActiveAttrib(), .getActiveUniform(), .getAttribLocation(), .getBufferParameter(), .getProgramParameter(), .getRenderbufferParameter(), .getShaderParameter(), .getShaderPrecisionFormat(), .getTexParameter(), .getUniformLocation(), .getVertexAttribOffset(), .getSupportedExtensions(), and .getExtension()",
"description": "Keep the names of the API but translate the punctuation and conjunctions"
}
}
},
"jssgroupGraphicCardInformationLittleLiesDescription": {
"message": "Generate reasonable numbers or random strings that differ on the visited domain and across sessions. The goal is to limit leaks on graphic cards and at the same time make fingerprinting harder."
},
"jssgroupGraphicCardInformationStrictDescription": {
"message": "Return bottom values (null, empty strings). Note that this option does not prevent fingerprinting."
},
"jssgroupInstalledBrowserPlugins": {
"message": "Installed browser plugins",
"description": "plugins group"
},
"jssgroupInstalledBrowserPluginsDescription": {
"message": "Protect against plugin fingerprinting."
},
"jssgroupInstalledBrowserPluginsDescription2": {
"message": "The protection is not applied if your browser returns an empty list or the five PDF plugin viewers specified by the living HTML standard. Hence the protection is not applied in modern browsers.",
"description": "The protection is not applied in modern browsers"
},
"jssgroupInstalledBrowserPluginsLittleLiesDescription": {
"message": "Edit current plugins and add two fake plugins.",
"description": ""
},
"jssgroupInstalledBrowserPluginsFakeDescription": {
"message": "Return two fake plugins.",
"description": ""
},
"jssgroupInstalledBrowserPluginsStrictDescription": {
"message": "Hide all plugins.",
"description": ""
},
"jssgroupConnectedCamerasAndMicrophones": {
"message": "Connected cameras and microphones"
},
"jssgroupConnectedCamerasAndMicrophonesDescription": {
"message": "Prevent fingerprinting based on the multimedia devices connected to the computer."
},
"jssgroupConnectedCamerasAndMicrophonesDescription2": {
"message": "Function $api$ is modified to return empty or modified result.",
"placeholders": {
"api": {
"content": "MediaDevices.enumerateDevices()",
"description": "Keep the names of the API"
}
}
},
"jssgroupConnectedCamerasAndMicrophonesLittleLiesDescription": {
"message": "Randomize the order of the devices. The existing devices are not linkable on different domains and across sessions."
},
"jssgroupConnectedCamerasAndMicrophonesAddFakeDescription": {
"message": "Add 0-4 fake devices and randomize the order. The existing devices are not linkable on different domains and across sessions.",
"description": ""
},
"jssgroupConnectedCamerasAndMicrophonesStrictDescription": {
"message": "Return an empty list of devices.",
"description": ""
},
"jssgroupHardware": {
"message": "Device memory and CPU",
"description": "hardware group"
},
"jssgroupHardwareDescription": {
"message": "Spoof hardware information on the amount of RAM and CPU count."
},
"jssgroupHardwareDescription2": {
"message": "Getters $apis$ return modified values.",
"placeholders": {
"apis": {
"content": "navigator.deviceMemory and navigator.hardwareConcurrency",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
}
}
},
"jssgroupHardwareLowDescription": {
"message": "Return random valid value between the minimum and the real value. The returned value differs based on the visited domains and across sessions."
},
"jssgroupHardwareMediumDescription": {
"message": "Return random valid value between minimum and 8. The returned value differs based on the visited domains and across sessions."
},
"jssgroupHardwareHighDescription": {
"message": "Return 4 for navigator.deviceMemory and 2 for navigator.hardwareConcurrency.",
"description": "Keep the names of the APIs in English"
},
"jssgroupNetworkConditions": {
"message": "Network conditions",
"description": "net group"
},
"jssgroupNetworkConditionsDescription": {
"message": "Disable access to network information to limit fingerprinting and remove the possibility of observing patterns in accessed networks to learn if the user is at home, work, or travel.",
"description": ""
},
"jssgroupNetworkConditionsRemoveDescription": {
"message": "Disable NetworkInformation API",
"description": "Keep the name of the API in English"
},
"jssgroupXMLHttpRequestRequests": {
"message": "XMLHttpRequest (XHR) data transfers",
"description": "Keep the name of the API in English"
},
"jssgroupXMLHttpRequestRequestsDescription": {
"message": "Filter reliable XHR requests to the server."
},
"jssgroupXMLHttpRequestRequestsDescription2": {
"message": "Note that XHR requests are broadly employed for benign purposes and that $apis$ are not blocked. All provide similar and some even better means of communication with servers. We recommend activating the Fingerprint Detector instead of XHR wrappers for practical usage. JShelter keeps the wrapper as it is useful for some users mainly for experimental reasons.",
"placeholders": {
"apis": {
"content": "Fetch, SSE, WebRTC, and WebSockets APIs",
"description": "Keep the names of the APIs but translate the punctuation and conjunctions"
}
}
},
"jssgroupXMLHttpRequestRequestsAskDescription": {
"message": "Ask before executing an XHR request",
"description": "Keep the name of the API in English"
},
"jssgroupXMLHttpRequestRequestsBlockDescription": {
"message": "Block all XHR requests",
"description": "Keep the name of the API in English"
},
"jssgroupArrays": {
"message": "ArrayBuffer API",
"description": "arrays group"
},
"jssgroupArraysDescription": {
"message": "Protect against ArrayBuffer exploitation, for example, to prevent side-channel attacks on memory layout (or make them harder).",
"description": ""
},
"jssgroupArraysShift": {
"message": "Shift"
},
"jssgroupArraysShiftDescription": {
"message": "Shift indexes to make memory page boundaries detection harder."
},
"jssgroupArraysRandomize": {
"message": "Randomize"
},
"jssgroupArraysRandomizeDescription": {
"message": "Use random mapping of array indexing to memory. This option is more effective but slower compared to shifting."
},
"jssgroupSharedArraysBuffer": {
"message": "SharedArrayBuffer API",
"description": "shared_array group"
},
"jssgroupSharedArraysBufferDescription": {
"message": "Protect against SharedArrayBuffer exploitation, for example, to prevent side-channel attacks on memory layout (or make them harder).",
"description": ""
},
"jssgroupSharedArraysBufferMediumDescription": {
"message": "Randomly slow messages to prevent high-resolution timers",
"description": ""
},
"jssgroupSharedArraysBufferStrictDescription": {
"message": "Block SharedArrayBuffer",
"description": ""
},
"jssgroupWebWorker": {
"message": "WebWorker API",
"description": "webworker group, keep the name of the API in English"
},
"jssgroupWebWorkerDescription": {
"message": "Protect against WebWorker exploitation",
"description": "Keep the name of the API in English"
},
"jssgroupWebWorkerDescription2": {
"message": "Workers provide powerful APIs that, for example, allow installing an invisible proxy to the browser. Higher levels remove that possibility. Note that benign sites use workers to provide offline work capabilities, search, caching during multimedia playbacks, etc.",
"description": "Try to keep the reference to the Worker in English"
},
"jssgroupWebWorkerLowDescription": {
"message": "Randomly slow messages to prevent high-resolution timers but keep WebWorker support. This option does not prevent Workers from accessing original APIs. Use with caution.",
"description": "Try to keep the reference to the Worker in English"
},
"jssgroupWebWorkerStrictDescription": {
"message": "Make WebWorkers inoperable. Use this to prevent sites from learning that the browser does not support WebWorkers. However, this prevents sites to deploy workarounds for missing WebWorker support that some sites provide.",
"description": "Try to keep the reference to the Worker in English"
},
"jssgroupWebWorkerRemoveDescription": {
"message": "Remove WebWorkers support from the browser. This is easily detectable by web pages and improves the fingerprintability of the browser but at the same time gives the page the possibility to deploy code that compensates for the missing WebWorker support.",
"description": "Try to keep the reference to the Worker in English"
},
"jssgroupPhysicalLocationGeolocation": {
"message": "Physical location (geolocation)"
},
"jssgroupPhysicalLocationGeolocationDescription": {
"message": "Limit the information on real-world position provided by Geolocation API.",
"description": "Displayed at various places, keep the name of the API in the English"
},
"jssgroupPhysicalLocationGeolocationDescription2": {
"message": "Use domain hash for the position spoofing so the position will be the same at one domain for the whole session.",
"description": "Displayed at various places"
},
"jssgroupGeolocationTimestampOnly": {
"message": "Timestamp-only",
"description": "Displayed during level tweaks"
},
"jssgroupGeolocationTimestampOnlyDescription": {
"message": "Provide accurate data (use when you really need to provide the exact location and you want to protect geolocation timestamps via \"$jssgroupTimePrecision$\" protection)",
"description": "Explains the protection to the user",
"placeholders": {
"jssgroupTimePrecision": {
"content": "$1",
"example": "Translated string of the jssgroupTimePrecision"
}
}
},
"jssgroupGeolocationVillage": {
"message": "Village",
"description": "Displayed during level tweaks"
},
"jssgroupGeolocationVillageDescription": {
"message": "Use accuracy of hundreds of meters.",
"description": "Explains the protection to the user"
},
"jssgroupGeolocationTown": {
"message": "Town",
"description": "Displayed during level tweaks"
},
"jssgroupGeolocationTownDescription": {
"message": "Use accuracy of kilometers.",
"description": "Explains the protection to the user"
},
"jssgroupGeolocationRegion": {
"message": "Region",
"description": "Displayed during level tweaks"
},
"jssgroupGeolocationRegionDescription": {
"message": "Use accuracy of tens of kilometers.",
"description": "Explains the protection to the user"
},
"jssgroupGeolocationLongDistance": {
"message": "Long distance",
"description": "Displayed during level tweaks"
},
"jssgroupGeolocationLongDistanceDescription": {
"message": "Use accuracy of hundreds of kilometers.",
"description": "Explains the protection to the user"
},
"jssgroupGeolocationRemoveDescription": {
"message": "Completely remove geolocation services.",
"description": "Explains the protection to the user"
},
"jssgroupPhysicalEnvironmentSensors": {
"message": "Physical environment sensors",
"description": "physical_environment group"
},
"jssgroupPhysicalEnvironmentSensorsDescription": {
"message": "Limit the information provided by physical environment sensors like Magnetometer or Accelerometer.",
"description": "Consider replacing Magnetometer and Accelerometer with localized version of the sensor"
},
"jssgroupPhysicalEnvironmentSensorsDescription2": {
"message": "Such information can be misused for multiple purposes, including environment fingerprinting, user location tracking, detection of nearby devices, estimation of the user action performed with the device, and many others. However, the readings can be useful for applications like navigation, gaming, and others. For example, some applications can use the orientation of the device to control the actions inside the application."
},
"jssgroupPhysicalEnvironmentSensorsHighDescription": {
"message": "Emulate stationary device that provides different sensor readings on different domains and across sessions."
},
"jssgroupUserIdleDetection": {
"message": "User idle detection",
"description": "useridle group"
},
"jssgroupUserIdleDetectionDescription": {
"message": "The Idle Detection API can detect inactive users and locked screens.",
"description": "Try to keep the name of the API in English"
},
"jssgroupUserIdleDetectionDescription2": {
"message": "The intention of the API is to provide web applications the information of user inactivity, for example, not to show notifications while the user is inactive. However, the information can be misused to track the activity of the user and for correlating changes in the state across domains."
},
"jssgroupUserIdleConfuseDescription": {
"message": "Always return active user with an unlocked screen."
},
"jssgroupUserIdleBlockDescription": {
"message": "Do not show prompts and automatically decline."
},
"jssgroupUserIdleRemoveDescription": {
"message": "Remove the API."
},
"jssgroupCoopschedule": {
"message": "Idle period task scheduling",
"description": "coopschedule group"
},
"jssgroupCoopscheduleDescription": {
"message": "The Cooperative Scheduling of Background Tasks API can schedule background tasks such that they do not introduce delays to other high-priority tasks that share the same event loop.",
"description": "Try to keep the names of the APIs in English"
},
"jssgroupCoopscheduleDescription2": {
"message": "The API leaks information about the other tasks running in the browser as it leaks information on currently scheduled tasks, vsync deadlines, user-interaction and so on."
},
"jssgroupCoopscheduleConfuseDescription": {
"message": "Modify the available information to confuse adversaries."
},
"jssgroupGamepads": {
"message": "Gamepads",
"description": "gamepads group"
},
"jssgroupGamepadsDescription": {
"message": "Prevent websites from accessing and learning information on local gamepads."
},
"jssgroupGamepadsDescription2": {
"message": "The information can be misused for browser fingerprinting. At the same time, the user needs access to gamepads only on specialized websites."
},
"jssgroupGamepadsStrictDescription": {
"message": "Hide all gamepads."
},
"jssgroupVirtualAndAugmentedRealityDevices": {
"message": "Virtual and augmented reality devices",
"description": "vr group (also includes XR API)"
},
"jssgroupVirtualAndAugmentedRealityDevicesDescription": {
"message": "Prevent websites from accessing and learning information on local virtual and augmented reality displays."
},
"jssgroupVirtualAndAugmentedRealityDevicesDescription2": {
"message": "The information can be misused for browser fingerprinting. At the same time, the user needs access to virtual and augmented reality devices only on specialized websites."
},
"jssgroupVirtualAndAugmentedRealityDevicesStrictDescription": {
"message": "Hide all devices."
},
"jssgroupMultimediaPlayback": {
"message": "Multimedia playback",
"description": "playback group"
},
"jssgroupMultimediaPlaybackDescription": {
"message": "Prevent websites from accessing and learning information on locally installed codecs and encoding/decoding capabilities and performance."
},
"jssgroupMultimediaPlaybackDescription2": {
"message": "The information provided by the API can be misused for browser fingerprinting. You should enable the protection for sites that do not process audio or video. The protection can break sites processing audio or video."
},
"jssgroupMultimediaPlaybackLittleLiesDescription": {
"message": "Report a codec/encryption mechanism as unsupported with 12.5% probability."
},
"jssgroupMultimediaPlaybackStrictDescription": {
"message": "Report all codecs/encryption mechanisms as unsupported."
},
"jssgroupMultimediaPlaybackBlockDescription": {
"message": "Do not return any information at all."
},
"jssgroupUnreliableTransfersToServerBeacons": {
"message": "Unreliable transfers to server (beacons)",
"description": "analytics group"
},
"jssgroupUnreliableTransfersToServerBeaconsDescription": {
"message": "Prevent unreliable transfers to server (beacons)."
},
"jssgroupUnreliableTransfersToServerBeaconsDescription2": {
"message": "Such transfers are typically misused for analytics but occasionally may be used by online retailers or other pages."
},
"jssgroupUnreliableTransfersToServerBeaconsDescription3": {
"message": "Prevent sending information through Beacon API.",
"description": "Keep the name of the API"
},
"jssgroupUnreliableTransfersToServerBeaconsBlockDescription": {
"message": "Block data transfers through this API. Performs no action."
},
"jssgroupHardwareBattery": {
"message": "Battery Status API",
"description": "battery group"
},
"jssgroupHardwareBatteryDescription": {
"message": "Removes Battery Status API support that is being misused for fingerprinting.",
"description": "Try to keep the reference to the English name of the API"
},
"jssgroupHardwareBatteryRemoveDescription": {
"message": "Remove the API"
},
"jssgroupPersistentIdentifierOfTheBrowserTab": {
"message": "Persistent identifier of the browser tab",
"description": "windowname group"
},
"jssgroupPersistentIdentifierOfTheBrowserTabDescription": {
"message": "Unlike the other parts of the environment, window.name property is not reset during page load. Consequently, a page might store a unique identifier of the tab to the property or other benign data.",
"description": "Try to keep reference to window.name."
},
"jssgroupPersistentIdentifierOfTheBrowserTabDescription2": {
"message": "This API allows cross-site identification in one tab and browser session."
},
"jssgroupPersistentIdentifierOfTheBrowserTabStrictDescription": {
"message": "Clear window.name values when moving do a different service (eTLD+1 domain change) during page reload. This does not interfere with most benign purposes while preventing the cross-site re-identification attack.",
"description": "Try to keep reference to window.name and eTLD+1"
},
"jssgroupPersistentIdentifierOfTheBrowserTabFirefox88": {
"message": "$BROWSER$ and above already protects you.",
"placeholders": {
"browser": {
"content": "Firefox 88"
}
}
},
"jssgroupNFC": {
"message": "Near Field Communication (NFC)",
"description": "nfc group"
},
"jssgroupNFCDescription": {
"message": "Near Field Communication (NFC) enables wireless communication between two devices at close proximity, usually less than a few centimeters. NFC is an international standard (ISO/IEC 18092) defining an interface and protocol for simple wireless interconnection of closely coupled devices operating at 13.56 MHz."
},
"jssgroupNFCDescription2": {
"message": "The API can be misused to learn information about other devices in the proximity.",
"description": "Keep the technical references"
},
"jssgroupNFCRemoveDescription": {
"message": "Remove the API"
},
"jssgroupWASM": {
"message": "WebAssembly speed-up",
"description": "webassembly group"
},
"jssgroupWASMDescription": {
"message": "Speed up the little-lies modifications of locally generated images and audio by WebAssembly.",
"description": "Keep reference to WebAssembly"
},
"jssgroupWASMDescription2": {
"message": "This option takes effect when the level of \"$canvas$\" or \"$audio$\" is set to \"$littlelies$\" only.",
"placeholders": {
"canvas": {
"content": "$1",
"example": "Translation of jssgroupLocallyRenderedImages"
},
"audio": {
"content": "$2",
"example": "Translation of jssgroupLocallyGeneratedAudio"
},
"littlelies": {
"content": "$3",
"example": "Translation of jssgroupLittleLies"
}
}
},
"jssgroupWASMDescription3": {
"message": "The WebAssembly code generates the same modifications as the not accelerated version, so it is a safe option to activate when concerned about fingerprinting."
},
"jssgroupWASMDisabled": {
"message": "Disabled"
},
"jssgroupWASMDisabledDescription": {
"message": "Do not create little lies in WebAssembly, use slower JavaScript."
},
"jssgroupWASMPassive": {
"message": "Passive"
},
"jssgroupWASMPassiveDescription": {
"message": "Enable WebAssembly to create little lies but fall back to the default slower implementation if the WebAssembly module cannot be injected."
},
"jssgroupWASMActive": {
"message": "Active"
},
"jssgroupWASMActiveDescription": {
"message": "Loosen the 'wasm-unsafe-eval' Content Security Policy (CSP) directive to allow WebAssembly execution where the CSP of the visited page would otherwise prevent it."
},
"jssgroupWASMActiveDescription2": {
"message": "The initialization of WebAssembly modules is subject to the CSP of the visited page in Chromium-based browsers."
},
"jssgroupWASMActiveDescription3": {
"message": "The benefit of this option is that the modifications run faster on all pages."
},
"jssgroupWASMActiveDescription4": {
"message": "However, by enabling this option, you increase the risk of being a victim of a vulnerability that would have been otherwise prevented by the CSP, such as cross-site scripting vulnerabilities. Moreover, this option might interfere with other installed extensions that modify the CSP header."
},
"jssgroupWASMEnabled": {
"message": "Enabled"
},
"jssgroupWASMEnabledDescription": {
"message": "Create little lies in WebAssembly."
},
"JShelterOptions": {
"message": "JShelter main settings",
"description": "Title of the main options page"
},
"mainSettings": {
"message": "Main settings",
"description": "Displayed in options in the navigation bar"
},
"JShelterOptionsJSSFineTune": {
"message": "Javascript Shield details: per domain protections",
"description": "Title of the JS Shield details options page"
},
"jSSShieldDetails": {
"message": "JS Shield details",
"description": "Displayed in options in the navigation bar, try to keep JS shield abbreviated to keep the text short"
},
"JShelterOptionsAdvanced": {
"message": "JShelter expert options",
"description": "Title of the expert options page"
},
"advancedOptions": {
"message": "Expert options",
"description": "Displayed in options in the navigation bar"
},
"externalLinks": {
"message": "External links",
"description": "Displayed in options in the navigation bar"
},
"ExternalLinksSeparator": {
"message": " »",
"description": "Displayed in options in the navigation bar, for example after external links"
},
"threatModel": {
"message": "Threat model",
"description": "Displayed in options in the navigation bar"
},
"fAQ": {
"message": "FAQ",
"description": "Displayed in options in the navigation bar"
},
"testPage": {
"message": "Test page",
"description": "Displayed in options in the navigation bar"
},
"permissions": {
"message": "Permissions",
"description": "Displayed in options in the navigation bar"
},
"sourceCode": {
"message": "Source code",
"description": "Displayed in options in the navigation bar"
},
"issueTracker": {
"message": "Issue tracker",
"description": "Displayed in options in the navigation bar"
},
"credits": {
"message": "Credits",
"description": "Displayed in options in the navigation bar"
},
"ExampleDomainsText": {
"message": "example.com or en.example.com",
"description": "Displayed in text inputs that expect a domain"
},
"ButtonSignExpandOneCharacterDown": {
"message": "⤵",
"description": "A button caption that can be used generically by JShelter, it should contain a single character that intuitively tells the user that by clicking the button, more information will be shown"
},
"ButtonSave": {
"message": "Save",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonRestore": {
"message": "Restore",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonRestoreLevel": {
"message": "Restore level $LEVELNAME$",
"description": "A button caption that can be used generically by JShelter",
"placeholders": {
"levelName": {
"content": "$1",
"example": "Level name of the level to be restored, for example, Default"
}
}
},
"ButtonEdit": {
"message": "Edit",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonSaveCustomLevel": {
"message": "Save custom level",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonAddNewLevel": {
"message": "Add new level",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonCancel": {
"message": "Cancel",
"description": "A button caption that can be used generically by JShelter"
},
"ButtonRemove": {
"message": "Remove",
"description": "A button caption that can be used generically by JShelter"
},
"addToList": {
"message": "Add to list",
"description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page"
},
"saveAll": {
"message": "Save all",
"description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page"
},
"deleteAll": {
"message": "Delete all",
"description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page"
},
"ManageWhitelist": {
"message": "Manage exception list ⤵",
"description": "A button caption that can be used generically by JShelter, e.g. to fine-tune NBS and FPD; Please indicate that the list would appear below (the arrow at the end)."
},
"HideWhitelist": {
"message": "Hide exception list ⤵",
"description": "A button caption that can be used generically by JShelter, e.g. to fine-tune NBS and FPD; Please indicate that the list is located below (the arrow at the end)."
},
"ButtonDisableForDomain": {
"message": "<strong>$DISABLE$</strong> $FORTHEDOMAIN$",
"description": "A button caption that can be used generically by JShelter, e.g. in the options; if necessary, edit the structure of the message but make sure to emhasize the disablement. Translate the placeholders.",
"placeholders": {
"disable": {
"content": "Disable",
"description": "Please translate"
},
"forTheDomain": {
"content": "for the domain",
"description": "Please translate"
}
}
},
"ButtonEnableForSelectedDomains": {
"message": "<strong>$ENABLE$</strong> $FORTHEDOMAIN$",
"description": "A button caption that can be used generically by JShelter, e.g. in the options; if necessary, edit the structure of the message but make sure to emhasize the enablement. Translate the placeholders.",
"placeholders": {
"enable": {
"content": "Enable",
"description": "Please translate"
},
"forTheDomain": {
"content": "for the selected domains",
"description": "Please translate"
}
}
},
"ManageWhitelistDescription": {
"message": "Please note that these domain names are checked within the domain hierarchy, so giving the exception to <strong>example.com</strong> does also allow <strong>news.example.com</strong> to bypass the shield.",
"description": "Information text that can be used generically by JShelter, e.g. in options to explain the exception list of NBS and FPD."
},
"javascriptShieldDescription": {
"message": "<p>$PARAGRAPH1$</p><p>$PARAGRAPH2$</p><ul><li>$REDUCTION$</li><li>$FAKE$</li><li>$HIDE$</li></ul><p>$BLOGS$</p>",
"description": "This is the description of JSS shown in options. Please do not modify the template string in the message but translate the paragraphs in the placeholders section. If you find necessary, you can remove or add paragraphs.",
"placeholders": {
"paragraph1": {
"content": "JavaScript Shield modifies the behavior of the JavaScript environment available for the visited webpage. JShelter provides fake information to confuse fingerprinters or make webpage triggered attacks impossible or harder.",
"description": "Paragraph 1, please translate this text."
},
"paragraph2": {
"content": "JavaScript Shield internally consists of wrappers, small pieces of code that modify the original behavior of a JavaScript API (a function or a property) defined by standards. The behavior of most of the wrappers can be divided into several categories:",
"description": "Paragraph 2, please translate this text."
},
"reduction": {
"content": "Precision reduction: The original value is too precise for most use cases. JavaScript Shield modifies the values so that typical and benign use cases are not affected.",
"description": "UL item 1, please translate this text."
},
"fake": {
"content": "Provide fake information: Some wrappers provide fake information mostly to confuse fingerprinters. Some wrappers provide plausible readings that are not based on the original value. Other wrappers modify the readings with small deviations that are typically not detectable for a human but significant for a fingerprinter. JShelter applies such deviations differently in each session and for each domain so that an observer operating several domains cannot use the information to link the browser. For example, canvas wrappers modify the image so that the same instructions produce different results on different domains and in different sessions.",
"description": "UL item 2, please translate this text."
},
"hide": {
"content": "Hide information: Some APIs provide information that is not generally needed and can be hidden from most pages. Depending on the API, JavaScript Shield might return an error, an empty value, or block the API completely.",
"description": "UL item 3, please translate this text."
},
"blogs": {
"content": "See our blog posts for more information on <a href='https://jshelter.org/fingerprinting/'>browser fingerprinting counter-measures</a> and <a href='https://jshelter.org/farbling/'>little lies</a>.",
"description": "Last paragraph, please translate this text, keep the URLs to the English version unless a translation exists on the web."
}
}
},
"JavascriptShieldLevelsMainLevelOptionHeading": {
"message": "Create custom levels and set the default level",
"description": "A heading in the options above the configuration of the default JSS level and the possibility to list existing levels and create own levels."
},
"addCustomLevel": {
"message": "Add custom level",
"description": "A button caption, the button creates a custom JSS level."
},
"JSSL0Name": {
"message": "Turn JavaScript Shield off",
"description": "The name of JSS L0 that is used at various places in the UI"
},
"JSSL0Description": {
"message": "JavaScript APIs are not wrapped. Use this level if you (1) trust the operator of the visited page(s) and you want to give them access to full APIs supported by the browser as well as the adversaries that might have injected code to the trusted pages, or (2) if you do not like JavaScript Shield but you want to apply other protection mechanisms.",
"description": "The description of JSS L0 that is used at various places in the UI"
},
"JSSL1Name": {
"message": "Turn fingerprinting protection off",
"description": "The name of JSS L1 that is used at various places in the UI"
},
"JSSL1Description": {
"message": "Apply security counter-measures that are likely not to break web pages but do not defend against fingerprinting. Disable APIs that are not commonly used. Use this level if Fingerprint Detector reports that the page called a low number of APIs misused for fingerprinting, you trust the visited service, and/or you think that the protection makes the page slow or broken and your temptation to use the service is so high that you do not want to be protected.",
"description": "The description of JSS L1 that is used at various places in the UI, see also FingerprintQualityLabel label for the origin of 'the page called a low number of APIs misused for fingerprinting'"
},
"JSSL2Name": {
"message": "Recommended",
"description": "The name of JSS L2 that is used at various places in the UI"
},
"JSSL2Description": {
"message": "Make the browser appear differently on distinct visited domains. Apply security counter-measures that are likely not to break web pages. Slightly modify the results of API calls differently on different domains so that the cross-site fingerprint is not stable. The values misused to generate fingerprints also differ with each browser restart. Try incognito mode if you need a different fingerprint for the same website without restart. Remember that even if you log out from a site, clear your cookies, and change your IP address, the modified APIs will provide a way to compute the same fingerprint. Restart your browser if you want to change your fingerprint. If in doubt, use this level.",
"description": "The description of JSS L1 that is used at various places in the UI"
},
"JSSL3Name": {
"message": "Strict",
"description": "The name of JSS L3 that is used at various places in the UI"
},
"JSSL3Description": {
"message": "Enable all non-experimental protection. The wrapped APIs return fake values. Some APIs are blocked completely, while others provide meaningful but rare values. Some return meaningless values. This level will make you fingerprintable because the results of API calls are generally modified in the same way on all websites and in each session. Use this level if you want to limit the information provided by your browser. If you are worried about fingerprinters, make sure the Fingerprint Detector is activated.",
"description": "The description of JSS L2 that is used at various places in the UI"
},
"JSSLexperimentalName": {
"message": "Experimental",
"description": "The name of JSS experimental level that is used at various places in the UI"
},
"JSSLexperimentalDescription": {
"message": "Strict level protections with additional wrappers enabled (including APIs known to regularly break webpages and APIs that do not work perfectly). Use this level if you want to experiment with JShelter. Use Recommended or Strict level with active Fingerprint Detector for your regular activities.",
"description": "The description of JSS experimental level that is used at various places in the UI"
},
"omittedAPIsHeading": {
"message": "Note that for fingerprintability prevention, JShelter does not wrap objects that are not defined. Your browser does not support:",
"description": "This message is displayed while giving the possibility to create a new level or edit existing levels in options"
},
"newLevelsNotRecommended": {
"message": "We do not recommend creating your own levels and changing configuration if you are concerned about browser fingerprinting. Please read <a href=\"$FAQURL$\">FAQ</a> and our <a href=\"$PAPERURL$\">paper</a>. By diverging from the configuration of other users, you make your re-identification easier.",
"placeholders": {
"faqurl": {
"content": "https://jshelter.org/faq/"
},
"paperurl": {
"content": "https://arxiv.org/abs/2204.01392"
}
},
"description": "This message is displayed while creating a new level in options. Make sure that you keep correct HTML markup"
},
"formlabelName": {
"message": "Name:",
"description": "Used in forms whenever a name should be enered (atm new level name)"
},
"formlabelDescription": {
"message": "Description:",
"description": "Used in forms whenever a description should be enered (atm new level description)"
},
"customLevelAlreadyExistsItWillBeOverridden": {
"message": "Custom level $CUSTOMNAME$ already exists. It will be overridden.",
"description": "Alert message shown during level editing, translate the message but not the placeholder",
"placeholders": {
"customName": {
"content": "$1",
"example": "User provided value, any text",
"description": "The level name that is about to be overwritten, do not translate"
}
}
},
"customLevelWereNotUpdated": {
"message": "Custom levels were not updated. Please try again later.",
"description": "The configuration with the chaged or new level was not saved because of unknown reason."
},
"NewLevelMissingNameOrDescription": {
"message": "Both Name and Description of the level are mandatory. Please provide both.",
"description": "User did not supply all mandatory fields for a JSS level"
},
"JSSeditLevelHeading": {
"message": "Edit level $LEVELNAME$",
"description": "Heading shown during JSS tweaking (edit level form)",
"placeholders": {
"levelName": {
"content": "$1",
"example": "User provided value, any text",
"description": "The level name that is about to be overwritten, do not translate"
}
}
},
"JSSaddLevelHeading": {
"message": "Add new level",
"description": "Form heading during creation of a new level. You likely want to use the same or very similar value as ButtonAddNewLevel translation string."
},
"javaScriptShieldPerWebsiteConfiguration": {
"message": "JavaScript Shield per-website configuration",
"description": "Displayed in JSS advanced options page"
},
"setJavaScriptShieldForWebsite": {
"message": "Set JavaScript Shield for website:",
"description": "Displayed in JSS advanced options page"
},
"aListOfWebsiteWithRedefinedJavaScriptShield": {
"message": "A list of websites with redefined JavaScript Shield:",
"description": "Displayed in JSS advanced options page"
},
"JSSAdvancedConfirmOverwrite": {
"message": "Settings for domain $DOMAIN$ already exist and will be overridden.",
"description": "Displayed in JSS advanced options page",
"placeholders": {
"domain": {
"content": "$1",
"example": "The domain whose settings are about to be overwritten, like example.com"
}
}
},
"LevelAndDescription": {
"message": "$LEVELNAME$: $LEVELSHORTDESCRIPTION$",
"description": "Displayed in options pages in select elements to give the user an idea what level to apply by listing both its name and a short description",
"placeholders": {
"levelName": {
"content": "$1",
"example": "Name of the level"
},
"levelShortDescription": {
"content": "$2",
"example": "Short description of the level"
}
}
},
"doNotModifyThisConfiguration": {
"message": "BEWARE! Do not modify this configuration unless you know what you are doing.",
"description": "Displayed in expert settings"
},
"JShelterFullConfiguration": {
"message": "Full JShelter configuration in the text",
"description": "Displayed in expert settings, label for the full extension configuration in textarea"
},
"ExpertLoadCurrentlyStoredConfiguration": {
"message": "Load currently stored configuration",
"description": "Displayed in expert settings, button that loads current configuration to the textarea"
},
"ExpertOverwriteConfiguration": {
"message": "Overwrite configuration (stores the displayed configuration permanently)",
"description": "Displayed in expert settings, button that stores the current configuration permanently"
},
"ExpertResetConfiguration": {
"message": "Reset the configuration (remove all custom changes)",
"description": "Displayed in expert settings, button that reset to the configuration that we ship (factory reset)"
},
"ExpertUndoConfiguration": {
"message": "Undo (discard last configuration override)",
"description": "Displayed in expert settings, button that restores the configuration to the previous (back button)"
},
"JSSBuiltinExceptions": {
"message": "Built-in tweaks for JavaScript Shield",
"description": "Displayed in expert settings, heading for the table of built-in tweaks"
},
"JSSBuiltinExceptionsDomain": {
"message": "Domain",
"description": "Displayed in expert settings, heading in the table of built-in tweaks"
},
"JSSBuiltinExceptionsLevels": {
"message": "Levels",
"description": "Displayed in expert settings, heading in the table of built-in tweaks"
},
"JSSBuiltinExceptionsLevelsSeparator": {
"message": ", ",
"description": "Displayed in expert settings, separator for levels displayed"
},
"JSSBuiltinExceptionsChanges": {
"message": "Changes",
"description": "Displayed in expert settings, heading in the table of built-in tweaks"
},
"JSSBuiltinExceptionsReason": {
"message": "Reason",
"description": "Displayed in expert settings, heading in the table of built-in tweaks"
},
"protectionConfigurationOptionActivatedOn": {
"message": "On",
"description": "Displayed during NBS and FPD configuration when the option is activated (on)"
},
"protectionConfigurationOptionActivatedOff": {
"message": "Off",
"description": "Displayed during NBS and FPD configuration when the option is deactivated (off)"
},
"shieldNotifications": {
"message": "Notifications",
"description": "Displayed as a text label during NBS and FPD configuration when the user can activate or deactivate notifications"
},
"NBSDescription": {
"message": "<p>$PARAGRAPH1$</p><p>$PARAGRAPH2$</p><p>$PARAGRAPH3$</p>",
"description": "This is the description of NBS shown in options. Please do not modify the template string in the message but translate the paragraphs in the placeholders section. If you find necessary, you can remove or add paragraphs.",
"placeholders": {
"paragraph1": {
"content": "Network Boundary Shield prevents visited web pages from using the browser as a proxy between the public Internet and local network. See <a href='https://jshelter.org/localportscanning/'>our blog post</a> and <a href='https://www.forcepoint.com/sites/default/files/resources/files/report-attacking-internal-network-en_0.pdf'>Force Point report</a> for examples of attacks handled by the Network Boundary Shield. The protection encapsulates the WebRequest API, so it captures all outgoing requests.",
"description": "Paragraph 1, please translate this text, keep the URLs or replace them to a translated version of the targets."
},
"paragraph2": {
"content": "Generally, you want Network Boundary Shield to block all suspicious requests. However, some pages can be broken because they require interaction between the public Internet and the local network. For example, the Network Boundary Shield might break some Intranet information systems. JShelter users also reported increased false positives when using DNS-based filtering programs. If you use one, make sure that DNS returns 0.0.0.0 for the blocked domains.",
"description": "Paragraph 2, please translate this text."
},
"paragraph3": {
"content": "Network Boundary Shield default behavior can be globally adjusted by the settings below. Network Boundary Shield can also be completely disabled per domain by the exception list. Domains can be allowed to make cross-network requests via <i>Network Boundary Shield switch</i> in the popup window or manually via the <i>Manage exception list</i> option. Remember that adding a domain to the exception list also allows its subdomains to make cross-network requests. To selectively deactivate Network Boundary Shield, insert the domains to the exception list (excluding \"www\" but including all other domains, e.g., \".com\").",
"description": "Paragraph 3, please translate this text, note that <i>Manage exception list</i> refers to the ManageWhitelist string."
}
}
},
"NBSHttpProxyDNSAPINote": {
"message": "If you are using an HTTP proxy, NBS would protect the local network of the proxy instead of your network as the proxy performs the HTTP requests to the destinations. To prevent DNS leaks of your queries initiated from this computer, Network Boundary Shield does not resolve the DNS domains to detect possible cross-network boundary requests. However, the Network Boundary Shield protects the local network of the proxy for directly embedded IP addresses. Hence, Network Boundary Shield protects the local network of the proxy only partially.",
"description": "This note is appended to NBS description in Firefox, see https://pagure.io/JShelter/webextension/issue/41 for the context of the issue"
},
"nbsBlocking": {
"message": "Blocking",
"description": "Displayed during NBS configuration, label for a configuration option"
},
"nbsBlockingDescription": {
"message": "Block requests that are trying to access your local network.",
"description": "Displayed during NBS configuration, basic explanation of the configuration option"
},
"nbsBlockingDescription2": {
"message": "NOTE: We recommend having request blocking turned on in most cases.",
"description": "Displayed during NBS configuration, further explanation of the configuration option"
},
"nbsBlockingOffDescription": {
"message": "Requests blocking turned off.",
"description": "Displayed during NBS configuration, further explanation of the selected configuration level"
},
"nbsBlockingOnDescription": {
"message": "Requests blocking turned on.",
"description": "Displayed during NBS configuration, further explanation of the selected configuration level"
},
"NBSNotificationsDescription": {
"message": "Turn on/off notifications about suspicious requests or requests being blocked.",
"description": "Displayed in NBS options, globaly disables or enables notifications"
},
"NBSNotificationsDescription2": {
"message": "In case you enable the notifications: if the blocking is on, you will be notified about blocked requests; if the blocking is off, you will be notified about suspicious requests without any attempt to prevent them.",
"description": "Displayed in NBS options, globaly disables or enables notifications"
},
"NBSNotificationsOffDescription": {
"message": "Blocking notifications turned off.",
"description": "Displayed in NBS options, notifications about blocked requests are globally disabled"
},
"NBSNotificationsOnDescription": {
"message": "Blocking notifications turned on.",
"description": "Displayed in NBS options, notifications about blocked requests are globally enabled"
},
"NBSBlockedTitle": {
"message": "Network Boundary Shield blocked suspicious requests!",
"description": "Title of the notifications that is displayed when NBS actually blocks requests"
},
"NBSDetectedTitle": {
"message": "Network Boundary Shield detected suspicious requests!",
"description": "Title of the notifications that is displayed when NBS detects a suspicious requests but does not block them because blocking is disabled"
},
"NBSBlockedMessageMultipleTargets": {
"message": "Count of blocked requests\nby $ORIGIN$\nthat attempted to access local\nnetwork: $COUNT$.",
"description": "The message shown when the page contacted multiple targets in the local network. Produce short lines.",
"placeholders": {
"origin": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
},
"count": {
"content": "$2",
"description": "A positive number, do not translate",
"example": "5"
}
}
},
"NBSDetectedMessageMultipleTargets": {
"message": "Count of detected requests\nby $ORIGIN$\nthat accessed local\nnetwork: $COUNT$.",
"description": "The message shown when the page contacted multiple targets in the local network. Produce short lines.",
"placeholders": {
"origin": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
},
"count": {
"content": "$2",
"description": "A positive number, do not translate",
"example": "5"
}
}
},
"NBSBlockedMessageWithTarget": {
"message": "Blocked requests: $COUNT$\nfrom $ORIGIN$\nto $TARGET$.",
"description": "The message shown when the page contacted single target in the local network. Produce short lines.",
"placeholders": {
"origin": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
},
"target": {
"content": "$2",
"description": "IP address (maybe domain), do not translate",
"example": "10.0.0.1"
},
"count": {
"content": "$3",
"description": "A positive number, do not translate",
"example": "5"
}
}
},
"NBSDetectedMessageWithTarget": {
"message": "Detected requests: $COUNT$\nfrom $ORIGIN$\nto $TARGET$.",
"description": "The message shown when the page contacted single target in the local network. Produce short lines.",
"placeholders": {
"origin": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
},
"target": {
"content": "$2",
"description": "IP address (maybe domain), do not translate",
"example": "10.0.0.1"
},
"count": {
"content": "$3",
"description": "A positive number, do not translate",
"example": "5"
}
}
},
"NBSBlockedHostTitle": {
"message": "Network Boundary Shield blocked a host!",
"description": "Title of the notifications that is displayed when NBS blocks future requests by a host in Chromium-based browsers"
},
"NBSDetectedHostTitle": {
"message": "Network Boundary Shield detected a suspicious host!",
"description": "Title of the notifications that is displayed when NBS detects suspicious requests by a host in Chromium-based browsers but does not block them because blocking is disabled"
},
"NBSBlockedHost": {
"message": "All future HTTP requests from $HOST$ will be blocked.",
"description": "The message shown in Chromium-based browsers when NBS starts blocking a host.",
"placeholders": {
"host": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
}
}
},
"NBSDetectedHost": {
"message": "To block HTTP requests from $HOST$ enable blocking.",
"description": "The message shown in Chromium-based browsers when NBS detects a suspicious host.",
"placeholders": {
"host": {
"content": "$1",
"description": "Domain name or IP address, do not translate",
"example": "domainname.example.com"
}
}
},
"MV3DevmodeRequired": {
"message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, JShelter and other browser extensions cannot work anymore on Chromium-based browsers (including yours) unless you switch on the <em>Developer mode</em> in <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">more information on Google's developers site</a>).",
"placeholders": {
"mv3url": {
"content": "https://jshelter.org/mv3/"
},
"infourl": {
"content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_prior_to_138_developer_mode_toggle"
}
},
"description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup"
},
"MV3AllowUserScriptsRequired": {
"message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, JShelter and other browser extensions cannot work anymore on Chromium-based browsers (including yours) unless you switch on the <em>Allow User Scripts</em> toggle on the JShelter page accessible from <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">more information on Google's developers site</a>).",
"placeholders": {
"mv3url": {
"content": "https://jshelter.org/mv3/"
},
"infourl": {
"content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_138_and_newer_allow_user_scripts_toggle"
}
},
"description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup"
},
"MV3BrokenFeatures": {
"message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, some JShelter features (e.g. Network Boundary Shield and Fingerprinting Detection in Blocking Mode) won't work on recent Chromium-based browsers (including yours), and other ones might be less reliable than they were in the past and still are on Firefox.",
"placeholders": {
"mv3url": {
"content": "https://jshelter.org/mv3/"
}
},
"description": "This message is displayed as an alert near features broken by Manifest V3. Make sure that you keep correct HTML markup"
},
"FPDDescription": {
"message": "<p>$PARAGRAPH1$</p><p>$PARAGRAPH2$</p><p>$PARAGRAPH3$</p>",
"description": "This is the description of FPD shown in options. Please do not modify the template string in the message but translate the paragraphs in the placeholders section. If you find necessary, you can remove or add paragraphs.",
"placeholders": {
"paragraph1": {
"content": "Fingerprint Detector provides a mechanism that informs users about fingerprinting activity on visited web pages. The detector can also prevent web pages from extracting browser fingerprints if a user chooses to do so. See <a href='https://jshelter.org/fpdetection/'>our blog post</a> or <a href='https://arxiv.org/pdf/1905.01051.pdf'>Browser Fingerprinting: A survey</a> for a closer description of browser fingerprinting.",
"description": "Paragraph 1, please translate this text, keep the URLs or replace them to a translated version of the targets."
},
"paragraph2": {
"content": "By enabling the detector, you will be notified whenever it detects that the visited page has called a high number of APIs misused for fingerprinting. The detector counts and evaluates the called APIs for each page visit according to our heuristics. The number of called APIs misused for fingerprinting is presented to you by the badge color of the JShelter icon and in the popup window. You can receive a notification if the page calls a high number of fingerprinting APIs. You can see details about the fingerprinting activity by generating a fingerprint report. You can access it via a popup window or by clicking directly on the notification.",
"description": "Paragraph 2, please translate this text."
},
"paragraph3": {
"content": "The default behavior of Fingerprint Detector can be adjusted to your liking. You can choose \"blocking\" behavior, which is a counter-measure against leaking your fingerprint. In this case, the Fingerprint Detector blocks all HTTP requests and cleans browser storages when it computes that the page calls a high number of fingerprinting APIs. Since <strong>this action generally breaks web pages</strong>, we recommend creating an exception list for trusted domains. Switching off the detector for a domain in the popup window will add the domain to the exception list. This domain will not be evaluated or blocked in the future. You can manage all the exceptions below.",
"description": "Paragraph 3, please translate this text."
}
}
},
"fpdBehavior": {
"message": "Behavior",
"description": "A label shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorDescription": {
"message": "Specify the preferred behavior of the module.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorPassive": {
"message": "Passive",
"description": "A label shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorPassiveDescription": {
"message": "Use extension icon badge color to signalize the number of the APIs called by the visited page that can be misused for fingerprinting.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorLimitedBlocking": {
"message": "Limited Blocking",
"description": "A label shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorBlockingDescription": {
"message": "Allow the extension to react whenever a page calls a high number of APIs misusable for fingerprinting.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorBlockingDescription2": {
"message": "• Interrupt network traffic for the page to prevent possible fingerprint leakage.",
"description": "Additional information to fpdBehaviorBlockingDescription"
},
"fpdBehaviorLimitedBlockingDescription3": {
"message": "• Clear <strong>some</strong> browser storage of the page to remove possibly cached fingerprint. (No additional permissions required.)",
"description": "Additional information to fpdBehaviorLimitedBlockingDescription"
},
"fpdBehaviorLimitedBlockingDescription4": {
"message": "• Clearing: <strong>localStorage, sessionStorage, JS cookies, IndexedDB, caches, window.name</strong>",
"description": "Additional information to fpdBehaviorLimitedBlockingDescription"
},
"fpdBehaviorBlockingDescriptionWarning": {
"message": "NOTE: Blocking behavior may break some functionality on fingerprinting websites.",
"description": "Additional information to fpdBehaviorLimitedBlockingDescription"
},
"fpdBehaviorFullBlocking": {
"message": "Full Blocking",
"description": "A label shown in options during configuaration of the parameters of FPD"
},
"fpdBehaviorFullBlockingDescription3": {
"message": "• Clear <strong>all</strong> available storage mechanisms of the page where fingerprint may be cached. (Requires BrowsingData permission.)",
"description": "Additional information to fpdBehaviorBlockingDescription"
},
"fpdBehaviorFullBlockingDescription4": {
"message": "• Clearing: <strong>localStorage, sessionStorage, cookies, IndexedDB, caches, window.name, fileSystems, WebSQL, serviceWorkers</strong>",
"description": "Additional information to fpdBehaviorBlockingDescription"
},
"fpdNotificationsDescription": {
"message": "Turn on/off notifications about fingerprinting detection and HTTP requests blocking.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdNotificationsDescription2": {
"message": "NOTE: We recommend having notifications turned on for blocking behavior.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdNotificationsOffDescription": {
"message": "Detection/blocking notifications turned off.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdNotificationsOnDescription": {
"message": "Detection/blocking notifications turned on.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdDetection": {
"message": "Detection",
"description": "A label shown in options during configuaration of the parameters of FPD"
},
"fpdDetectionDescription": {
"message": "Adjust heuristic thresholds which determine the severity of the number of called APIs misusable for fingerprinting.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdDetectionDefault": {
"message": "Default",
"description": "Option shown in options during configuaration of the parameters of FPD"
},
"fpdDetectionDefaultDescription": {
"message": "Recommended setting for most users.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdDetectionDefaultDescription2": {
"message": "• Very low number of false positive detections (focus on clear fingerprinting cases, very low number of unreasonably blocked sites).",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdDetectionDefaultDescription3": {
"message": "• Acceptable amount of false negative detections (some fingerprinting websites may get around detection).",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdStrict": {
"message": "Strict",
"description": "Option shown in options during configuaration of the parameters of FPD"
},
"fpdStrictDescription": {
"message": "Optional setting for more cautious users.",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdStrictDescription2": {
"message": "• Lower number of false negative detections (also detects websites with less excessive fingerprinting)",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"fpdStrictDescription3": {
"message": "• Higher probability of false positive detections (in edge cases benign websites may be falsely blocked)",
"description": "Text shown in options during configuaration of the parameters of FPD"
},
"FPDSeverityNone": {
"message": "None or negligible",
"description": "The level of the number of detected APIs misusable for fingerprinting"
},
"FPDSeverityLow": {
"message": "Low",
"description": "The level of the number of detected APIs misusable for fingerprinting"
},
"FPDSeverityModerate": {
"message": "Moderate",
"description": "The level of the number of detected APIs misusable for fingerprinting"
},
"FPDSeverityHigh": {
"message": "High",
"description": "The level of the number of detected APIs misusable for fingerprinting"
},
"FPDSeverityVeryHigh": {
"message": "Very High",
"description": "The level of the number of detected APIs misusable for fingerprinting"
},
"fpdBlockingSubsequent": {
"message": "Blocking all subsequent requests.",
"description": "Shown in a notification when FPD starts blocking HTTP requests"
},
"fpdClickNotificationDetails": {
"message": "Click the notification for more details.",
"description": "Shown in a notification when FPD detects a suspicious activity but is not configured to block"
},
"fpdNotificationMessage": {
"message": "$MESSAGE$\n\nPage: $PAGETITLE$\nHost: $DOMAIN$",
"description": "Constructs the full message for the notification when FPD detects suspicious activity",
"placeholders": {
"message": {
"content": "$1",
"example": "Blocking all subsequent requests.",
"description": "Translated fpdBlockingSubsequent or fpdClickNotificationDetails"
},
"pagetitle": {
"content": "$2",
"example": "JShelter test page",
"description": "The content of the title element of the fingerprinting page (in case it is long, only the start of the string)"
},
"domain": {
"content": "$3",
"example": "example.com",
"description": "The domain of the visited page or IP address (taken from the URL bar)"
}
}
},
"fpdNotificationTitle": {
"message": "Fingerprinting activity detected!",
"description": "Title of a notification"
},
"FPDReportTitle": {
"message": "Fingerprint Detector Report",
"description": "Title of a fingeprint report"
},
"FPDReportDescriptionPara1": {
"message": "This report lists all JavaScript API endpoints accessed by the web page and considered relevant for browser fingerprinting. Fingerprint Detector (FPD) uses this data to decide whether the page may be collecting a browser fingerprint.",
"description": "Explanation text in the report, it can be shown by clicking on the help icon"
},
"FPDReportDescriptionPara2": {
"message": "FPD processes API calls in groups based on their semantic properties. This window shows the detected number of API calls on the visited page. The default view shows only groups accessed at least once. This way, the report can be empty if the page does not access any fingerprintable API. If you want to see all APIs monitored by FPD, click $STARTTAG$ here $ENDTAG$",
"description": "Explanation text in the report, it can be shown by clicking on the help icon",
"placeholders": {
"starttag": {
"content": "<span id='unhideAll'>",
"description": "Please keep the tag as is, do not translate"
},
"endtag": {
"content": "</span>",
"description": "Please keep the tag as is, do not translate"
}
}
},
"FPDReportDescriptionPara3": {
"message": "You can export the full FPD Report that contains all the data collected and used by FPD to evaluate the page. This comprehensive report shows the weights assigned to the groups/endpoints ($NOTE1$). It also lists all accessed API endpoints with corresponding arguments ($NOTE2$).",
"description": "Explanation text in the report, it can be shown by clicking on the help icon",
"placeholders": {
"note1": {
"content": "<i>fpd_evaluation_statistics</i>",
"description": "Please keep as is, do not translate"
},
"note2": {
"content": "<i>fpd_access_logs</i>",
"description": "Please keep as is, do not translate"
}
}
},
"FPDReportShowDetails": {
"message": "Show details",
"description": "Button caption"
},
"FPDReportHideDetails": {
"message": "Hide details",
"description": "Button caption"
},
"FPDReportTrackCallers": {
"message": "Track calling scripts",
"description": "Button caption. The purpose of the button is to reload the page while injecting additional scripts that track the location of the callers. This functionality needs to be on demand as it is performance heavy."
},
"FPDReportTrackCallersRestart": {
"message": "Restart tracking calling scripts",
"description": "Button caption. The purpose of the button is to reload the page while injecting additional scripts that track the location of the callers. This functionality needs to be on demand as it is performance heavy."
},
"FPDReportTrackCallersWaiting": {
"message": "Detection of calling scripts in progress. Wait a moment, please.",
"description": "Text displayed inside FPD report to explain what is happening."
},
"FPDReportTrackCallersFailed": {
"message": "Cannot track calling scripts due to an error. $errorFromBrowser$",
"description": "Prefix strings that intoroduces an error strings generated by the browser. Shown when action started by clicking on button with text of FPDReportTrackCallers failed.",
"placeholders": {
"errorFromBrowser": {
"content": "$1",
"description": "An error message generated by the browser. Do not translate.",
"example": "Error: Invalid tab ID: 16"
}
}
},
"FPDReportForgetTraces": {
"message": "Hide current callers",
"description": "Button caption"
},
"FPDReportRefresh": {
"message": "Refresh report",
"description": "Button caption"
},
"FPDReportExportJSON": {
"message": "Export full FPD Report as JSON",
"description": "Button caption"
},
"FPDReportMissingData": {
"message": "ERROR: Missing data, cannot create a report! Try to reload the page and reopen the report.",
"description": "Text shown if the windows cannot communicate with the internals of the extension"
}
}
|