Bug 1507595 - Convert about:support to Fluent. r=Gijs,flod

Initial patch by Collin Wing (masterkrombi@gmail.com).

Differential Revision: https://phabricator.services.mozilla.com/D14905

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jared Wein 2018-12-28 19:40:17 +00:00
Родитель 74953e7a43
Коммит 4f86678a71
8 изменённых файлов: 986 добавлений и 840 удалений

Просмотреть файл

@ -8,25 +8,20 @@ ChromeUtils.import("resource://gre/modules/Services.jsm");
add_task(async function() {
await BrowserTestUtils.withNewTab({ gBrowser, url: "about:support" }, async function(browser) {
const strings = Services.strings.createBundle(
"chrome://global/locale/aboutSupport.properties");
let allowedStates = [strings.GetStringFromName("found"),
strings.GetStringFromName("missing")];
let keyGoogleStatus = await ContentTask.spawn(browser, null, async function() {
let textBox = content.document.getElementById("key-google-box");
await ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
await ContentTaskUtils.waitForCondition(() => document.l10n.getAttributes(textBox).id,
"Google API key status loaded");
return textBox.textContent;
return document.l10n.getAttributes(textBox).id;
});
ok(allowedStates.includes(keyGoogleStatus), "Google API key status shown");
ok(keyGoogleStatus, "Google API key status shown");
let keyMozillaStatus = await ContentTask.spawn(browser, null, async function() {
let textBox = content.document.getElementById("key-mozilla-box");
await ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
await ContentTaskUtils.waitForCondition(() => document.l10n.getAttributes(textBox).id,
"Mozilla API key status loaded");
return textBox.textContent;
return document.l10n.getAttributes(textBox).id;
});
ok(allowedStates.includes(keyMozillaStatus), "Mozilla API key status shown");
ok(keyMozillaStatus, "Mozilla API key status shown");
});
});

Просмотреть файл

@ -0,0 +1,426 @@
# coding=utf8
# Any copyright is dedicated to the Public Domain.
# http://creativecommons.org/publicdomain/zero/1.0/
from __future__ import absolute_import
import fluent.syntax.ast as FTL
from fluent.migrate import COPY
from fluent.migrate import CONCAT
from fluent.migrate import REPLACE
from fluent.migrate.helpers import transforms_from
from fluent.migrate.helpers import TERM_REFERENCE
from fluent.migrate.helpers import VARIABLE_REFERENCE
from fluent.migrate.transforms import PLURALS, REPLACE_IN_TEXT
def migrate(ctx):
"""Bug 1507595 - Migrate about:support messages to use Fluent for localization, part {index}."""
ctx.add_transforms(
"toolkit/toolkit/about/aboutSupport.ftl",
"toolkit/toolkit/about/aboutSupport.ftl",
transforms_from(
"""
page-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.pageTitle")}
crashes-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.crashes.title")}
crashes-id = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.crashes.id")}
crashes-send-date = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.crashes.sendDate")}
crashes-all-reports = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.crashes.allReports")}
crashes-no-config = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.crashes.noConfig")}
extensions-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.extensionsTitle")}
extensions-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.extensionName")}
extensions-enabled = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.extensionEnabled")}
extensions-version = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.extensionVersion")}
extensions-id = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.extensionId")}
security-software-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareTitle")}
security-software-type = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareType")}
security-software-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareName")}
security-software-antivirus = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareAntivirus")}
security-software-antispyware = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareAntiSpyware")}
security-software-firewall = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.securitySoftwareFirewall")}
features-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.featureName")}
features-version = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.featureVersion")}
features-id = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.featureId")}
app-basics-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsTitle")}
app-basics-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsName")}
app-basics-version = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsVersion")}
app-basics-build-id = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsBuildID")}
app-basics-update-channel = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsUpdateChannel")}
app-basics-update-history = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsUpdateHistory")}
app-basics-show-update-history = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsShowUpdateHistory")}
app-basics-enabled-plugins = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsEnabledPlugins")}
app-basics-build-config = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsBuildConfig")}
app-basics-user-agent = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsUserAgent")}
app-basics-os = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsOS")}
app-basics-memory-use = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsMemoryUse")}
app-basics-performance = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsPerformance")}
app-basics-service-workers = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsServiceWorkers")}
app-basics-profiles = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsProfiles")}
app-basics-multi-process-support = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsMultiProcessSupport")}
app-basics-process-count = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsProcessCount")}
app-basics-enterprise-policies = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.enterprisePolicies")}
app-basics-key-google = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsKeyGoogle")}
app-basics-key-mozilla = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsKeyMozilla")}
app-basics-safe-mode = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.appBasicsSafeMode")}
modified-key-prefs-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.modifiedKeyPrefsTitle")}
modified-prefs-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.modifiedPrefsName")}
modified-prefs-value = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.modifiedPrefsValue")}
user-js-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.userJSTitle")}
locked-key-prefs-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.lockedKeyPrefsTitle")}
locked-prefs-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.lockedPrefsName")}
locked-prefs-value = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.lockedPrefsValue")}
graphics-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsTitle")}
graphics-features-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsFeaturesTitle")}
graphics-diagnostics-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsDiagnosticsTitle")}
graphics-failure-log-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsFailureLogTitle")}
graphics-gpu1-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsGPU1Title")}
graphics-gpu2-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsGPU2Title")}
graphics-decision-log-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsDecisionLogTitle")}
graphics-crash-guards-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsCrashGuardsTitle")}
graphics-workarounds-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.graphicsWorkaroundsTitle")}
place-database-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.placeDatabaseTitle")}
place-database-integrity = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.placeDatabaseIntegrity")}
place-database-verify-integrity = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.placeDatabaseVerifyIntegrity")}
js-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.jsTitle")}
js-incremental-gc = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.jsIncrementalGC")}
a11y-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.a11yTitle")}
a11y-activated = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.a11yActivated")}
a11y-force-disabled = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.a11yForceDisabled")}
a11y-handler-used = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.a11yHandlerUsed")}
a11y-instantiator = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.a11yInstantiator")}
library-version-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.libraryVersionsTitle")}
copy-text-to-clipboard-label = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.copyTextToClipboard.label")}
copy-raw-data-to-clipboard-label = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.copyRawDataToClipboard.label")}
sandbox-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxTitle")}
sandbox-sys-call-log-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallLogTitle")}
sandbox-sys-call-index = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallIndex")}
sandbox-sys-call-age = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallAge")}
sandbox-sys-call-pid = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallPID")}
sandbox-sys-call-tid = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallTID")}
sandbox-sys-call-proc-type = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallProcType")}
sandbox-sys-call-number = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallNumber")}
sandbox-sys-call-args = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.sandboxSyscallArgs")}
safe-mode-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.safeModeTitle")}
restart-in-safe-mode-label = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.restartInSafeMode.label")}
media-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaTitle")}
media-output-devices-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaOutputDevicesTitle")}
media-input-devices-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaInputDevicesTitle")}
media-device-name = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceName")}
media-device-group = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceGroup")}
media-device-vendor = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceVendor")}
media-device-state = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceState")}
media-device-preferred = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDevicePreferred")}
media-device-format = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceFormat")}
media-device-channels = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceChannels")}
media-device-rate = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceRate")}
media-device-latency = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.mediaDeviceLatency")}
intl-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlTitle")}
intl-app-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlAppTitle")}
intl-locales-requested = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlLocalesRequested")}
intl-locales-available = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlLocalesAvailable")}
intl-locales-supported = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlLocalesSupported")}
intl-locales-default = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlLocalesDefault")}
intl-os-title = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlOSTitle")}
intl-os-prefs-system-locales = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlOSPrefsSystemLocales")}
intl-regional-prefs = { COPY("toolkit/chrome/global/aboutSupport.dtd", "aboutSupport.intlRegionalPrefs")}
raw-data-copied = { COPY("toolkit/chrome/global/aboutSupport.properties", "rawDataCopied")}
text-copied = { COPY("toolkit/chrome/global/aboutSupport.properties", "textCopied")}
clear-type-parameters = { COPY("toolkit/chrome/global/aboutSupport.properties", "clearTypeParameters")}
compositing = { COPY("toolkit/chrome/global/aboutSupport.properties", "compositing")}
hardware-h264 = { COPY("toolkit/chrome/global/aboutSupport.properties", "hardwareH264")}
main-thread-no-omtc = { COPY("toolkit/chrome/global/aboutSupport.properties", "mainThreadNoOMTC")}
yes = { COPY("toolkit/chrome/global/aboutSupport.properties", "yes")}
no = { COPY("toolkit/chrome/global/aboutSupport.properties", "no")}
found = { COPY("toolkit/chrome/global/aboutSupport.properties", "found")}
missing = { COPY("toolkit/chrome/global/aboutSupport.properties", "missing")}
gpu-description = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDescription")}
gpu-vendor-id = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuVendorID")}
gpu-device-id = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDeviceID")}
gpu-subsys-id = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuSubsysID")}
gpu-drivers = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDrivers")}
gpu-ram = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuRAM")}
gpu-driver-version = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDriverVersion")}
gpu-driver-date = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDriverDate")}
gpu-active = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuActive")}
webgl1-wsiinfo = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl1WSIInfo")}
webgl1-renderer = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl1Renderer")}
webgl1-version = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl1Version")}
webgl1-driver-extensions = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl1DriverExtensions")}
webgl1-extensions = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl1Extensions")}
webgl2-wsiinfo = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl2WSIInfo")}
webgl2-renderer = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl2Renderer")}
webgl2-version = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl2Version")}
webgl2-driver-extensions = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl2DriverExtensions")}
webgl2-extensions = { COPY("toolkit/chrome/global/aboutSupport.properties", "webgl2Extensions")}
blocklisted-bug = { COPY("toolkit/chrome/global/aboutSupport.properties", "blocklistedBug")}
d3d11layers-crash-guard = { COPY("toolkit/chrome/global/aboutSupport.properties", "d3d11layersCrashGuard")}
d3d11video-crash-guard = { COPY("toolkit/chrome/global/aboutSupport.properties", "d3d11videoCrashGuard")}
d3d9video-crash-buard = { COPY("toolkit/chrome/global/aboutSupport.properties", "d3d9videoCrashGuard")}
glcontext-crash-guard = { COPY("toolkit/chrome/global/aboutSupport.properties", "glcontextCrashGuard")}
reset-on-next-restart = { COPY("toolkit/chrome/global/aboutSupport.properties", "resetOnNextRestart")}
gpu-process-kill-button = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuProcessKillButton")}
gpu-device-reset-button = { COPY("toolkit/chrome/global/aboutSupport.properties", "gpuDeviceResetButton")}
uses-tiling = { COPY("toolkit/chrome/global/aboutSupport.properties", "usesTiling")}
content-uses-tiling = { COPY("toolkit/chrome/global/aboutSupport.properties", "contentUsesTiling")}
off-main-thread-paint-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "offMainThreadPaintEnabled")}
off-main-thread-paint-worker-count = { COPY("toolkit/chrome/global/aboutSupport.properties", "offMainThreadPaintWorkerCount")}
audio-backend = { COPY("toolkit/chrome/global/aboutSupport.properties", "audioBackend")}
max-audio-channels = { COPY("toolkit/chrome/global/aboutSupport.properties", "maxAudioChannels")}
channel-layout = { COPY("toolkit/chrome/global/aboutSupport.properties", "channelLayout")}
sample-rate = { COPY("toolkit/chrome/global/aboutSupport.properties", "sampleRate")}
min-lib-versions = { COPY("toolkit/chrome/global/aboutSupport.properties", "minLibVersions")}
loaded-lib-versions = { COPY("toolkit/chrome/global/aboutSupport.properties", "loadedLibVersions")}
has-seccomp-bpf = { COPY("toolkit/chrome/global/aboutSupport.properties", "hasSeccompBPF")}
has-seccomp-tsync = { COPY("toolkit/chrome/global/aboutSupport.properties", "hasSeccompTSync")}
has-user-namespaces = { COPY("toolkit/chrome/global/aboutSupport.properties", "hasUserNamespaces")}
has-privileged-user-namespaces = { COPY("toolkit/chrome/global/aboutSupport.properties", "hasPrivilegedUserNamespaces")}
can-sandbox-content = { COPY("toolkit/chrome/global/aboutSupport.properties", "canSandboxContent")}
can-sandbox-media = { COPY("toolkit/chrome/global/aboutSupport.properties", "canSandboxMedia")}
content-sandbox-level = { COPY("toolkit/chrome/global/aboutSupport.properties", "contentSandboxLevel")}
effective-content-sandbox-level = { COPY("toolkit/chrome/global/aboutSupport.properties", "effectiveContentSandboxLevel")}
sandbox-proc-type-content = { COPY("toolkit/chrome/global/aboutSupport.properties", "sandboxProcType.content")}
sandbox-proc-type-file = { COPY("toolkit/chrome/global/aboutSupport.properties", "sandboxProcType.file")}
sandbox-proc-type-media-plugin = { COPY("toolkit/chrome/global/aboutSupport.properties", "sandboxProcType.mediaPlugin")}
multi-process-status-0 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.0")}
multi-process-status-1 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.1")}
multi-process-status-2 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.2")}
multi-process-status-4 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.4")}
multi-process-status-6 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.6")}
multi-process-status-7 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.7")}
multi-process-status-8 = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.8")}
multi-process-status-unknown = { COPY("toolkit/chrome/global/aboutSupport.properties", "multiProcessStatus.unknown")}
async-pan-zoom = { COPY("toolkit/chrome/global/aboutSupport.properties", "asyncPanZoom")}
apz-none = { COPY("toolkit/chrome/global/aboutSupport.properties", "apzNone")}
wheel-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "wheelEnabled")}
touch-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "touchEnabled")}
drag-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "dragEnabled")}
keyboard-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "keyboardEnabled")}
autoscroll-enabled = { COPY("toolkit/chrome/global/aboutSupport.properties", "autoscrollEnabled")}
policies-inactive = { COPY("toolkit/chrome/global/aboutSupport.properties", "policies.inactive")}
policies-active = { COPY("toolkit/chrome/global/aboutSupport.properties", "policies.active")}
policies-error = { COPY("toolkit/chrome/global/aboutSupport.properties", "policies.error")}
multi-process-windows = { $remoteWindows }/{ $totalWindows }
""")
)
ctx.add_transforms(
"toolkit/toolkit/about/aboutSupport.ftl",
"toolkit/toolkit/about/aboutSupport.ftl",
[
FTL.Message(
id=FTL.Identifier("page-subtitle"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.pageSubtitle",
{
"&brandShortName;": TERM_REFERENCE("-brand-short-name"),
"<a id='supportLink'>": FTL.TextElement('<a data-l10n-name="support-link">'),
},
trim=True
)
),
FTL.Message(
id=FTL.Identifier("features-title"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.featuresTitle",
{
"&brandShortName;": TERM_REFERENCE("-brand-short-name"),
},
)
),
FTL.Message(
id=FTL.Identifier("app-basics-profile-dir"),
value=FTL.Pattern(
elements=[
FTL.Placeable(
expression=FTL.SelectExpression(
selector=FTL.CallExpression(
callee=FTL.Function("PLATFORM")
),
variants=[
FTL.Variant(
key=FTL.Identifier("linux"),
default=False,
value=COPY(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.appBasicsProfileDir"
)
),
FTL.Variant(
key=FTL.Identifier("other"),
default=True,
value=COPY(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.appBasicsProfileDirWinMac"
)
),
]
)
)
]
)
),
FTL.Message(
id=FTL.Identifier("show-dir-label"),
value=FTL.Pattern(
elements=[
FTL.Placeable(
expression=FTL.SelectExpression(
selector=FTL.CallExpression(
callee=FTL.Function("PLATFORM")
),
variants=[
FTL.Variant(
key=FTL.Identifier("macos"),
default=False,
value=COPY(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.showMac.label"
)
),
FTL.Variant(
key=FTL.Identifier("windows"),
default=False,
value=COPY(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.showWin2.label"
)
),
FTL.Variant(
key=FTL.Identifier("other"),
default=True,
value=COPY(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.showDir.label"
)
),
]
)
)
]
)
),
FTL.Message(
id=FTL.Identifier("user-js-description"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.dtd",
"aboutSupport.userJSDescription",
{
"<a id='prefs-user-js-link'>": FTL.TextElement('<a data-l10n-name="user-js-link">'),
"&brandShortName;": TERM_REFERENCE("-brand-short-name"),
},
)
),
FTL.Message(
id=FTL.Identifier("report-crash-for-days"),
value=PLURALS(
"toolkit/chrome/global/aboutSupport.properties",
"crashesTitle",
VARIABLE_REFERENCE("days"),
lambda text: REPLACE_IN_TEXT(
text,
{
"#1": VARIABLE_REFERENCE("days")
}
)
)
),
FTL.Message(
id=FTL.Identifier("crashes-time-minutes"),
value=PLURALS(
"toolkit/chrome/global/aboutSupport.properties",
"crashesTimeMinutes",
VARIABLE_REFERENCE("minutes"),
lambda text: REPLACE_IN_TEXT(
text,
{
"#1": VARIABLE_REFERENCE("minutes")
}
)
)
),
FTL.Message(
id=FTL.Identifier("crashes-time-hours"),
value=PLURALS(
"toolkit/chrome/global/aboutSupport.properties",
"crashesTimeHours",
VARIABLE_REFERENCE("hours"),
lambda text: REPLACE_IN_TEXT(
text,
{
"#1": VARIABLE_REFERENCE("hours")
}
)
)
),
FTL.Message(
id=FTL.Identifier("crashes-time-days"),
value=PLURALS(
"toolkit/chrome/global/aboutSupport.properties",
"crashesTimeDays",
VARIABLE_REFERENCE("days"),
lambda text: REPLACE_IN_TEXT(
text,
{
"#1": VARIABLE_REFERENCE("days")
}
)
)
),
FTL.Message(
id=FTL.Identifier("pending-reports"),
value=PLURALS(
"toolkit/chrome/global/aboutSupport.properties",
"pendingReports",
VARIABLE_REFERENCE("reports"),
lambda text: REPLACE_IN_TEXT(
text,
{
"#1": VARIABLE_REFERENCE("reports")
}
)
)
),
FTL.Message(
id=FTL.Identifier("bug-link"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.properties",
"bugLink",
{
"%1$S": VARIABLE_REFERENCE("bugNumber"),
},
)
),
FTL.Message(
id=FTL.Identifier("unknown-failure"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.properties",
"unknownFailure",
{
"%1$S": VARIABLE_REFERENCE("failureCode"),
},
)
),
FTL.Message(
id=FTL.Identifier("wheel-warning"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.properties",
"wheelWarning",
{
"%S": VARIABLE_REFERENCE("preferenceKey"),
},
)
),
FTL.Message(
id=FTL.Identifier("touch-warning"),
value=REPLACE(
"toolkit/chrome/global/aboutSupport.properties",
"touchWarning",
{
"%S": VARIABLE_REFERENCE("preferenceKey"),
},
)
),
]
)

Просмотреть файл

@ -17,25 +17,30 @@ ChromeUtils.defineModuleGetter(this, "PlacesDBUtils",
window.addEventListener("load", function onload(event) {
try {
window.removeEventListener("load", onload);
Troubleshoot.snapshot(function(snapshot) {
for (let prop in snapshotFormatters)
snapshotFormatters[prop](snapshot[prop]);
});
populateActionBox();
setupEventListeners();
window.removeEventListener("load", onload);
Troubleshoot.snapshot(async function(snapshot) {
for (let prop in snapshotFormatters)
await snapshotFormatters[prop](snapshot[prop]);
});
populateActionBox();
setupEventListeners();
} catch (e) {
Cu.reportError("stack of load error for about:support: " + e + ": " + e.stack);
}
});
// Fluent uses lisp-case IDs so this converts
// the SentenceCase info IDs to lisp-case.
function toFluentID(str) {
return str.toString().replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
}
// Each property in this object corresponds to a property in Troubleshoot.jsm's
// snapshot data. Each function is passed its property's corresponding data,
// and it's the function's job to update the page with it.
var snapshotFormatters = {
application: function application(data) {
let strings = stringBundle();
async application(data) {
$("application-box").textContent = data.name;
$("useragent-box").textContent = data.userAgent;
$("os-box").textContent = data.osVersion;
@ -49,7 +54,7 @@ var snapshotFormatters = {
$("updatechannel-box").textContent = data.updateChannel;
$("profile-dir-box").textContent = Services.dirsvc.get("ProfD", Ci.nsIFile).path;
let statusText = strings.GetStringFromName("multiProcessStatus.unknown");
let statusTextId = "multi-process-status-unknown";
// Whitelist of known values with string descriptions:
switch (data.autoStartStatus) {
@ -60,12 +65,17 @@ var snapshotFormatters = {
case 6:
case 7:
case 8:
statusText = strings.GetStringFromName("multiProcessStatus." + data.autoStartStatus);
statusTextId = "multi-process-status-" + data.autoStartStatus;
break;
}
$("multiprocess-box").textContent = strings.formatStringFromName("multiProcessWindows",
[data.numRemoteWindows, data.numTotalWindows, statusText], 3);
document.l10n.setAttributes($("multiprocess-box-process-count"),
"multi-process-windows",
{
remoteWindows: data.numRemoteWindows,
totalWindows: data.numTotalWindows,
});
document.l10n.setAttributes($("multiprocess-box-status"), statusTextId);
if (data.remoteAutoStart) {
$("contentprocesses-box").textContent = data.currentContentProcesses +
@ -80,16 +90,16 @@ var snapshotFormatters = {
let aboutPolicies = "about:policies";
switch (data.policiesStatus) {
case Services.policies.INACTIVE:
policiesText = strings.GetStringFromName("policies.inactive");
policiesText = await document.l10n.formatValue("policies-inactive");
break;
case Services.policies.ACTIVE:
policiesText = strings.GetStringFromName("policies.active");
policiesText = await document.l10n.formatValue("policies-active");
aboutPolicies += "#active";
break;
default:
policiesText = strings.GetStringFromName("policies.error");
policiesText = await document.l10n.formatValue("policies-error");
aboutPolicies += "#errors";
break;
}
@ -105,23 +115,20 @@ var snapshotFormatters = {
}
let keyGoogleFound = data.keyGoogleFound ? "found" : "missing";
$("key-google-box").textContent = strings.GetStringFromName(keyGoogleFound);
document.l10n.setAttributes($("key-google-box"), keyGoogleFound);
let keyMozillaFound = data.keyMozillaFound ? "found" : "missing";
$("key-mozilla-box").textContent = strings.GetStringFromName(keyMozillaFound);
document.l10n.setAttributes($("key-mozilla-box"), keyMozillaFound);
$("safemode-box").textContent = data.safeMode;
},
crashes: function crashes(data) {
crashes(data) {
if (!AppConstants.MOZ_CRASHREPORTER)
return;
let strings = stringBundle();
let daysRange = Troubleshoot.kMaxCrashAge / (24 * 60 * 60 * 1000);
$("crashes-title").textContent =
PluralForm.get(daysRange, strings.GetStringFromName("crashesTitle"))
.replace("#1", daysRange);
document.l10n.setAttributes($("crashes-title"), "report-crash-for-days", { days: daysRange });
let reportURL;
try {
reportURL = Services.prefs.getCharPref("breakpad.reportURL");
@ -138,42 +145,38 @@ var snapshotFormatters = {
$("crashes-allReports").classList.remove("no-copy");
if (data.pending > 0) {
$("crashes-allReportsWithPending").textContent =
PluralForm.get(data.pending, strings.GetStringFromName("pendingReports"))
.replace("#1", data.pending);
document.l10n.setAttributes($("crashes-allReportsWithPending"), "pending-reports", { reports: data.pending });
}
let dateNow = new Date();
$.append($("crashes-tbody"), data.submitted.map(function(crash) {
let date = new Date(crash.date);
let timePassed = dateNow - date;
let formattedDate;
let formattedDateStrId;
let formattedDateStrArgs;
if (timePassed >= 24 * 60 * 60 * 1000) {
let daysPassed = Math.round(timePassed / (24 * 60 * 60 * 1000));
let daysPassedString = strings.GetStringFromName("crashesTimeDays");
formattedDate = PluralForm.get(daysPassed, daysPassedString)
.replace("#1", daysPassed);
formattedDateStrId = "crashes-time-days";
formattedDateStrArgs = { days: daysPassed };
} else if (timePassed >= 60 * 60 * 1000) {
let hoursPassed = Math.round(timePassed / (60 * 60 * 1000));
let hoursPassedString = strings.GetStringFromName("crashesTimeHours");
formattedDate = PluralForm.get(hoursPassed, hoursPassedString)
.replace("#1", hoursPassed);
formattedDateStrId = "crashes-time-hours";
formattedDateStrArgs = { hours: hoursPassed };
} else {
let minutesPassed = Math.max(Math.round(timePassed / (60 * 1000)), 1);
let minutesPassedString = strings.GetStringFromName("crashesTimeMinutes");
formattedDate = PluralForm.get(minutesPassed, minutesPassedString)
.replace("#1", minutesPassed);
formattedDateStrId = "crashes-time-minutes";
formattedDateStrArgs = { minutes: minutesPassed };
}
return $.new("tr", [
$.new("td", [
$.new("a", crash.id, null, {href: reportURL + crash.id}),
]),
$.new("td", formattedDate),
$.new("td", null, null, {"data-l10n-id": formattedDateStrId, "data-l10n-args": formattedDateStrArgs}),
]);
}));
},
extensions: function extensions(data) {
extensions(data) {
$.append($("extensions-tbody"), data.map(function(extension) {
return $.new("tr", [
$.new("td", extension.name),
@ -184,7 +187,7 @@ var snapshotFormatters = {
}));
},
securitySoftware: function securitySoftware(data) {
securitySoftware(data) {
if (!AppConstants.isPlatformAndVersionAtLeast("win", "6.2")) {
$("security-software-title").hidden = true;
$("security-software-table").hidden = true;
@ -196,7 +199,7 @@ var snapshotFormatters = {
$("security-software-firewall").textContent = data.registeredFirewall;
},
features: function features(data) {
features(data) {
$.append($("features-tbody"), data.map(function(feature) {
return $.new("tr", [
$.new("td", feature.name),
@ -206,7 +209,7 @@ var snapshotFormatters = {
}));
},
modifiedPreferences: function modifiedPreferences(data) {
modifiedPreferences(data) {
$.append($("prefs-tbody"), sortedArrayFromObject(data).map(
function([name, value]) {
return $.new("tr", [
@ -220,7 +223,7 @@ var snapshotFormatters = {
));
},
lockedPreferences: function lockedPreferences(data) {
lockedPreferences(data) {
$.append($("locked-prefs-tbody"), sortedArrayFromObject(data).map(
function([name, value]) {
return $.new("tr", [
@ -231,31 +234,10 @@ var snapshotFormatters = {
));
},
graphics: function graphics(data) {
let strings = stringBundle();
function localizedMsg(msgArray) {
let nameOrMsg = msgArray.shift();
if (msgArray.length) {
// formatStringFromName logs an NS_ASSERTION failure otherwise that says
// "use GetStringFromName". Lame.
try {
return strings.formatStringFromName(nameOrMsg, msgArray,
msgArray.length);
} catch (err) {
// Throws if nameOrMsg is not a name in the bundle. This shouldn't
// actually happen though, since msgArray.length > 1 => nameOrMsg is a
// name in the bundle, not a message, and the remaining msgArray
// elements are parameters.
return nameOrMsg;
}
}
try {
return strings.GetStringFromName(nameOrMsg);
} catch (err) {
// Throws if nameOrMsg is not a name in the bundle.
}
return nameOrMsg;
async graphics(data) {
function localizedMsg(msg) {
let msgId = toFluentID(msg);
return document.l10n.formatValue(msgId);
}
// Read APZ info out of data.info, stripping it out in the process.
@ -270,8 +252,7 @@ var snapshotFormatters = {
delete info[key];
let message = localizedMsg([type.toLowerCase() + "Enabled"]);
out.push(message);
out.push(toFluentID(type.toLowerCase() + "Enabled"));
}
return out;
@ -282,21 +263,14 @@ var snapshotFormatters = {
// @key Text in the key column. Localized automatically, unless starts with "#".
// @value Text in the value column. Not localized.
function buildRow(key, value) {
let title;
if (key[0] == "#") {
title = key.substr(1);
} else {
try {
title = strings.GetStringFromName(key);
} catch (e) {
title = key;
}
}
let td = $.new("td", value);
let title = key[0] == "#" ? key.substr(1) : key;
let keyStrId = toFluentID(key);
let valueStrId = Array.isArray(value) ? null : toFluentID(value);
let td = $.new("td", value, null, {"data-l10n-id": valueStrId});
td.style["white-space"] = "pre-wrap";
return $.new("tr", [
$.new("th", title, "column"),
$.new("th", title, "column", {"data-l10n-id": keyStrId}),
td,
]);
}
@ -314,7 +288,7 @@ var snapshotFormatters = {
addRows(where, [buildRow(key, value)]);
}
if (data.clearTypeParameters !== undefined) {
addRow("diagnostics", "clearTypeParameters", data.clearTypeParameters);
addRow("diagnostics", "clear-type-parameters", data.clearTypeParameters);
}
if ("info" in data) {
apzInfo = formatApzInfo(data.info);
@ -342,7 +316,7 @@ var snapshotFormatters = {
windowUtils.terminateGPUProcess();
});
gpuProcessKillButton.textContent = strings.GetStringFromName("gpuProcessKillButton");
document.l10n.setAttributes(gpuProcessKillButton, "gpu-process-kill-button");
}
addRow("diagnostics", "GPUProcessPid", gpuProcessPid);
@ -358,7 +332,7 @@ var snapshotFormatters = {
windowUtils.triggerDeviceReset();
});
gpuDeviceResetButton.textContent = strings.GetStringFromName("gpuDeviceResetButton");
document.l10n.setAttributes(gpuDeviceResetButton, "gpu-device-reset-button");
addRow("diagnostics", "Device Reset", [gpuDeviceResetButton]);
}
@ -399,7 +373,7 @@ var snapshotFormatters = {
// @where Table section to add to.
// @key Data key to use.
// @colKey The localization key to use, if different from key.
function addRowFromKey(where, key, colKey) {
async function addRowFromKey(where, key, colKey) {
if (!(key in data))
return;
colKey = colKey || key;
@ -407,7 +381,7 @@ var snapshotFormatters = {
let value;
let messageKey = key + "Message";
if (messageKey in data) {
value = localizedMsg(data[messageKey]);
value = await localizedMsg(data[messageKey]);
delete data[messageKey];
} else {
value = data[key];
@ -427,7 +401,8 @@ var snapshotFormatters = {
compositor += " (Advanced Layers)";
}
} else {
compositor = "BasicLayers (" + strings.GetStringFromName("mainThreadNoOMTC") + ")";
let noOMTCString = await document.l10n.formatValue("main-thread-no-omtc");
compositor = "BasicLayers (" + noOMTCString + ")";
}
addRow("features", "compositing", compositor);
delete data.windowLayerManagerRemote;
@ -439,44 +414,53 @@ var snapshotFormatters = {
addRow("features", "asyncPanZoom",
apzInfo.length
? apzInfo.join("; ")
: localizedMsg(["apzNone"]));
addRowFromKey("features", "webgl1WSIInfo");
addRowFromKey("features", "webgl1Renderer");
addRowFromKey("features", "webgl1Version");
addRowFromKey("features", "webgl1DriverExtensions");
addRowFromKey("features", "webgl1Extensions");
addRowFromKey("features", "webgl2WSIInfo");
addRowFromKey("features", "webgl2Renderer");
addRowFromKey("features", "webgl2Version");
addRowFromKey("features", "webgl2DriverExtensions");
addRowFromKey("features", "webgl2Extensions");
addRowFromKey("features", "supportsHardwareH264", "hardwareH264");
addRowFromKey("features", "direct2DEnabled", "#Direct2D");
addRowFromKey("features", "usesTiling");
addRowFromKey("features", "contentUsesTiling");
addRowFromKey("features", "offMainThreadPaintEnabled");
addRowFromKey("features", "offMainThreadPaintWorkerCount");
? (await document.l10n.formatValues(apzInfo.map(id => { return {id}; }))).join("; ")
: await localizedMsg("apz-none"));
let featureKeys = [
"webgl1WSIInfo",
"webgl1Renderer",
"webgl1Version",
"webgl1DriverExtensions",
"webgl1Extensions",
"webgl2WSIInfo",
"webgl2Renderer",
"webgl2Version",
"webgl2DriverExtensions",
"webgl2Extensions",
["supportsHardwareH264", "hardware-h264"],
["direct2DEnabled", "#Direct2D"],
"usesTiling",
"contentUsesTiling",
"offMainThreadPaintEnabled",
"offMainThreadPaintWorkerCount",
];
for (let feature of featureKeys) {
if (Array.isArray(feature)) {
await addRowFromKey("features", feature[0], feature[1]);
continue;
}
await addRowFromKey("features", feature);
}
if ("directWriteEnabled" in data) {
let message = data.directWriteEnabled;
if ("directWriteVersion" in data)
message += " (" + data.directWriteVersion + ")";
addRow("features", "#DirectWrite", message);
await addRow("features", "#DirectWrite", message);
delete data.directWriteEnabled;
delete data.directWriteVersion;
}
// Adapter tbodies.
let adapterKeys = [
["adapterDescription", "gpuDescription"],
["adapterVendorID", "gpuVendorID"],
["adapterDeviceID", "gpuDeviceID"],
["driverVersion", "gpuDriverVersion"],
["driverDate", "gpuDriverDate"],
["adapterDrivers", "gpuDrivers"],
["adapterSubsysID", "gpuSubsysID"],
["adapterRAM", "gpuRAM"],
["adapterDescription", "gpu-description"],
["adapterVendorID", "gpu-vendor-id"],
["adapterDeviceID", "gpu-device-id"],
["driverVersion", "gpu-driver-version"],
["driverDate", "gpu-driver-date"],
["adapterDrivers", "gpu-drivers"],
["adapterSubsysID", "gpu-subsys-id"],
["adapterRAM", "gpu-ram"],
];
function showGpu(id, suffix) {
@ -501,7 +485,8 @@ var snapshotFormatters = {
if ("isGPU2Active" in data && ((suffix == "2") != data.isGPU2Active)) {
active = "no";
}
addRow(id, "gpuActive", strings.GetStringFromName(active));
addRow(id, "gpu-active", active);
addRows(id, trs);
}
showGpu("gpu-1", "");
@ -539,16 +524,17 @@ var snapshotFormatters = {
let m = /#BLOCKLIST_FEATURE_FAILURE_BUG_(\d+)/.exec(entry.message);
if (m) {
let bugSpan = $.new("span");
bugSpan.textContent = strings.GetStringFromName("blocklistedBug") + "; ";
document.l10n.setAttributes(bugSpan, "blocklisted-bug");
let bugHref = $.new("a");
bugHref.href = "https://bugzilla.mozilla.org/show_bug.cgi?id=" + m[1];
bugHref.textContent = strings.formatStringFromName("bugLink", [m[1]], 1);
document.l10n.setAttributes(bugHref, "bug-link", { bugNumber: m[1]});
contents = [bugSpan, bugHref];
} else {
contents = strings.formatStringFromName(
"unknownFailure", [entry.message.substr(1)], 1);
let unknownFailure = $.new("span");
document.l10n.setAttributes(unknownFailure, "unknown-failure", { failureCode: entry.message.substr(1) });
contents = [unknownFailure];
}
} else {
contents = entry.status + " by " + entry.type + ": " + entry.message;
@ -584,7 +570,7 @@ var snapshotFormatters = {
resetButton.disabled = true;
};
resetButton.textContent = strings.GetStringFromName("resetOnNextRestart");
document.l10n.setAttributes(resetButton, "reset-on-next-restart");
resetButton.addEventListener("click", onClickReset);
addRow("crashguards", guard.type + "CrashGuard", [resetButton]);
@ -597,25 +583,20 @@ var snapshotFormatters = {
// the diagnostics section.
for (let key in data) {
let value = data[key];
if (Array.isArray(value)) {
value = localizedMsg(value);
}
addRow("diagnostics", key, value);
}
},
media: function media(data) {
let strings = stringBundle();
function insertBasicInfo(key, value) {
function createRow(key, value) {
let th = $.new("th", strings.GetStringFromName(key), "column");
async media(data) {
async function insertBasicInfo(key, value) {
async function createRow(key, value) {
let th = $.new("th", await document.l10n.formatValue(key), "column");
let td = $.new("td", value);
td.style["white-space"] = "pre-wrap";
td.colSpan = 8;
return $.new("tr", [th, td]);
}
$.append($("media-info-tbody"), [createRow(key, value)]);
$.append($("media-info-tbody"), [await createRow(key, value)]);
}
function createDeviceInfoRow(device) {
@ -698,9 +679,9 @@ var snapshotFormatters = {
}
// Basic information
insertBasicInfo("audioBackend", data.currentAudioBackend);
insertBasicInfo("maxAudioChannels", data.currentMaxAudioChannels);
insertBasicInfo("sampleRate", data.currentPreferredSampleRate);
await insertBasicInfo("audio-backend", data.currentAudioBackend);
await insertBasicInfo("max-audio-channels", data.currentMaxAudioChannels);
await insertBasicInfo("sample-rate", data.currentPreferredSampleRate);
// Output devices information
insertDeviceInfo("output", data.audioOutputDevices);
@ -709,11 +690,11 @@ var snapshotFormatters = {
insertDeviceInfo("input", data.audioInputDevices);
},
javaScript: function javaScript(data) {
javaScript(data) {
$("javascript-incremental-gc").textContent = data.incrementalGCEnabled;
},
accessibility: function accessibility(data) {
accessibility(data) {
$("a11y-activated").textContent = data.isActive;
$("a11y-force-disabled").textContent = data.forceDisabled || 0;
@ -728,13 +709,12 @@ var snapshotFormatters = {
}
},
libraryVersions: function libraryVersions(data) {
let strings = stringBundle();
async libraryVersions(data) {
let trs = [
$.new("tr", [
$.new("th", ""),
$.new("th", strings.GetStringFromName("minLibVersions")),
$.new("th", strings.GetStringFromName("loadedLibVersions")),
$.new("th", await document.l10n.formatValue("min-lib-versions")),
$.new("th", await document.l10n.formatValue("loaded-lib-versions")),
]),
];
sortedArrayFromObject(data).forEach(
@ -749,7 +729,7 @@ var snapshotFormatters = {
$.append($("libversions-tbody"), trs);
},
userJS: function userJS(data) {
userJS(data) {
if (!data.exists)
return;
let userJSFile = Services.dirsvc.get("PrefD", Ci.nsIFile);
@ -760,11 +740,10 @@ var snapshotFormatters = {
$("prefs-user-js-section").className = "";
},
sandbox: function sandbox(data) {
async sandbox(data) {
if (!AppConstants.MOZ_SANDBOX)
return;
let strings = stringBundle();
let tbody = $("sandbox-tbody");
for (let key in data) {
// Simplify the display a little in the common case.
@ -776,8 +755,9 @@ var snapshotFormatters = {
// Not in this table.
continue;
}
let keyStrId = toFluentID(key);
tbody.appendChild($.new("tr", [
$.new("th", strings.GetStringFromName(key), "column"),
$.new("th", await document.l10n.formatValue(keyStrId), "column"),
$.new("td", data[key]),
]));
}
@ -789,13 +769,13 @@ var snapshotFormatters = {
if (argsHead.colSpan < syscall.args.length) {
argsHead.colSpan = syscall.args.length;
}
let procTypeStrId = toFluentID(syscall.procType);
let cells = [
$.new("td", syscall.index, "integer"),
$.new("td", syscall.msecAgo / 1000),
$.new("td", syscall.pid, "integer"),
$.new("td", syscall.tid, "integer"),
$.new("td", strings.GetStringFromName("sandboxProcType." +
syscall.procType)),
$.new("td", await document.l10n.formatValue("sandbox-proc-type-" + procTypeStrId)),
$.new("td", syscall.syscall, "integer"),
];
for (let arg of syscall.args) {
@ -806,7 +786,7 @@ var snapshotFormatters = {
}
},
intl: function intl(data) {
intl(data) {
$("intl-locale-requested").textContent =
JSON.stringify(data.localeService.requested);
$("intl-locale-available").textContent =
@ -829,16 +809,29 @@ var $ = document.getElementById.bind(document);
$.new = function $_new(tag, textContentOrChildren, className, attributes) {
let elt = document.createElement(tag);
if (className)
if (className) {
elt.className = className;
if (attributes) {
for (let attrName in attributes)
elt.setAttribute(attrName, attributes[attrName]);
}
if (Array.isArray(textContentOrChildren))
if (attributes) {
if (attributes["data-l10n-id"]) {
document.l10n.setAttributes(elt,
attributes["data-l10n-id"],
attributes["data-l10n-args"]);
delete attributes["data-l10n-id"];
if (attributes["data-l10n-args"]) {
delete attributes["data-l10n-args"];
}
}
for (let attrName in attributes) {
elt.setAttribute(attrName, attributes[attrName]);
}
}
if (Array.isArray(textContentOrChildren)) {
this.append(elt, textContentOrChildren);
else
} else if (textContentOrChildren) {
elt.textContent = String(textContentOrChildren);
}
return elt;
};
@ -846,11 +839,6 @@ $.append = function $_append(parent, children) {
children.forEach(c => parent.appendChild(c));
};
function stringBundle() {
return Services.strings.createBundle(
"chrome://global/locale/aboutSupport.properties");
}
function assembleFromGraphicsFailure(i, data) {
// Only cover the cases we have today; for example, we do not have
// log failures that assert and we assume the log level is 1/error.
@ -888,7 +876,7 @@ function copyRawDataToClipboard(button) {
if (button)
button.disabled = true;
try {
Troubleshoot.snapshot(function(snapshot) {
Troubleshoot.snapshot(async function(snapshot) {
if (button)
button.disabled = false;
let str = Cc["@mozilla.org/supports-string;1"].
@ -903,8 +891,8 @@ function copyRawDataToClipboard(button) {
if (AppConstants.platform == "android") {
// Present a snackbar notification.
ChromeUtils.import("resource://gre/modules/Snackbars.jsm");
Snackbars.show(stringBundle().GetStringFromName("rawDataCopied"),
Snackbars.LENGTH_SHORT);
let rawDataCopiedString = await document.l10n.formatValue("raw-data-copied");
Snackbars.show(rawDataCopiedString, Snackbars.LENGTH_SHORT);
}
});
} catch (err) {
@ -918,7 +906,7 @@ function getLoadContext() {
return window.docShell.QueryInterface(Ci.nsILoadContext);
}
function copyContentsToClipboard() {
async function copyContentsToClipboard() {
// Get the HTML and text representations for the important part of the page.
let contentsDiv = $("contents");
let dataHtml = contentsDiv.innerHTML;
@ -949,8 +937,8 @@ function copyContentsToClipboard() {
if (AppConstants.platform == "android") {
// Present a snackbar notification.
ChromeUtils.import("resource://gre/modules/Snackbars.jsm");
Snackbars.show(stringBundle().GetStringFromName("textCopied"),
Snackbars.LENGTH_SHORT);
let textCopiedString = await document.l10n.formatValue("text-copied");
Snackbars.show(textCopiedString, Snackbars.LENGTH_SHORT);
}
}

Просмотреть файл

@ -6,15 +6,13 @@
<!DOCTYPE html [
<!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> %htmlDTD;
<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> %globalDTD;
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd"> %brandDTD;
<!ENTITY % aboutSupportDTD SYSTEM "chrome://global/locale/aboutSupport.dtd"> %aboutSupportDTD;
<!ENTITY % resetProfileDTD SYSTEM "chrome://global/locale/resetProfile.dtd"> %resetProfileDTD;
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&aboutSupport.pageTitle;</title>
<title data-l10n-id="page-title"/>
<link rel="icon" type="image/png" id="favicon"
href="chrome://branding/content/icon32.png"/>
@ -23,9 +21,11 @@
<script type="application/javascript"
src="chrome://global/content/aboutSupport.js"/>
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="toolkit/about/aboutSupport.ftl"/>
</head>
<body dir="&locale.dir;" class="wide-container">
<body class="wide-container">
#ifndef ANDROID
<div id="action-box" class="notice-box">
@ -36,77 +36,57 @@
</button>
</div>
<div id="safe-mode-box">
<h3>&aboutSupport.safeModeTitle;</h3>
<button id="restart-in-safe-mode-button">
&aboutSupport.restartInSafeMode.label;
</button>
<h3 data-l10n-id="safe-mode-title"/>
<button id="restart-in-safe-mode-button" data-l10n-id="restart-in-safe-mode-label"/>
</div>
</div>
#endif
<h1>
&aboutSupport.pageTitle;
</h1>
<h1 data-l10n-id="page-title"/>
<div class="page-subtitle">
&aboutSupport.pageSubtitle;
<div class="page-subtitle" data-l10n-id="page-subtitle">
<a id="supportLink" data-l10n-name="support-link"></a>
</div>
<div>
<button id="copy-raw-data-to-clipboard">
&aboutSupport.copyRawDataToClipboard.label;
</button>
<button id="copy-to-clipboard">
&aboutSupport.copyTextToClipboard.label;
</button>
<button id="copy-raw-data-to-clipboard" data-l10n-id="copy-raw-data-to-clipboard-label"/>
<button id="copy-to-clipboard" data-l10n-id="copy-text-to-clipboard-label"/>
</div>
<div id="contents">
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.appBasicsTitle;
</h2>
<h2 class="major-section" data-l10n-id="app-basics-title"/>
<table>
<tbody>
<tr>
<th class="column">
&aboutSupport.appBasicsName;
</th>
<th class="column" data-l10n-id="app-basics-name"/>
<td id="application-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsVersion;
</th>
<th class="column" data-l10n-id="app-basics-version"/>
<td id="version-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsBuildID;
</th>
<th class="column" data-l10n-id="app-basics-build-id"/>
<td id="buildid-box"></td>
</tr>
#ifndef ANDROID
#ifdef MOZ_UPDATER
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsUpdateHistory;
</th>
<th class="column" data-l10n-id="app-basics-update-history"/>
<td>
<button id="show-update-history-button">
&aboutSupport.appBasicsShowUpdateHistory;
</button>
<button id="show-update-history-button" data-l10n-id="app-basics-show-update-history"/>
</td>
</tr>
#endif
@ -114,65 +94,37 @@
#ifdef MOZ_UPDATER
<tr>
<th class="column">
&aboutSupport.appBasicsUpdateChannel;
</th>
<th class="column" data-l10n-id="app-basics-update-channel"/>
<td id="updatechannel-box"></td>
</tr>
#endif
<tr>
<th class="column">
&aboutSupport.appBasicsUserAgent;
</th>
<th class="column" data-l10n-id="app-basics-user-agent"/>
<td id="useragent-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsOS;
</th>
<th class="column" data-l10n-id="app-basics-os"/>
<td id="os-box">
</td>
</tr>
<tr id="profile-row" class="no-copy">
<th class="column">
#ifdef XP_WIN
&aboutSupport.appBasicsProfileDirWinMac;
#else
#ifdef XP_MACOSX
&aboutSupport.appBasicsProfileDirWinMac;
#else
&aboutSupport.appBasicsProfileDir;
#endif
#endif
</th>
<th class="column" data-l10n-id="app-basics-profile-dir"/>
<td>
<button id="profile-dir-button">
#ifdef XP_WIN
&aboutSupport.showWin2.label;
#else
#ifdef XP_MACOSX
&aboutSupport.showMac.label;
#else
&aboutSupport.showDir.label;
#endif
#endif
</button>
<button id="profile-dir-button" data-l10n-id="show-dir-label"/>
<span id="profile-dir-box">
</span>
</td>
</tr>
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsEnabledPlugins;
</th>
<th class="column" data-l10n-id="app-basics-enabled-plugins"/>
<td>
<a href="about:plugins">about:plugins</a>
@ -180,9 +132,7 @@
</tr>
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsBuildConfig;
</th>
<th class="column" data-l10n-id="app-basics-build-config"/>
<td>
<a href="about:buildconfig">about:buildconfig</a>
@ -190,9 +140,7 @@
</tr>
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsMemoryUse;
</th>
<th class="column" data-l10n-id="app-basics-memory-use"/>
<td>
<a href="about:memory">about:memory</a>
@ -200,9 +148,7 @@
</tr>
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsPerformance;
</th>
<th class="column" data-l10n-id="app-basics-performance"/>
<td>
<a href="about:performance">about:performance</a>
@ -210,9 +156,7 @@
</tr>
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsServiceWorkers;
</th>
<th class="column" data-l10n-id="app-basics-service-workers"/>
<td>
<a href="about:serviceworkers">about:serviceworkers</a>
@ -220,54 +164,44 @@
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsMultiProcessSupport;
</th>
<th class="column" data-l10n-id="app-basics-multi-process-support"/>
<td id="multiprocess-box">
<span id="multiprocess-box-process-count"/>
<span id="multiprocess-box-status" data-l10n-id="multi-process-status-unknown"/>
</td>
</tr>
<tr id="contentprocesses-row">
<th class="column">
&aboutSupport.appBasicsProcessCount;
</th>
<th class="column" data-l10n-id="app-basics-process-count"/>
<td id="contentprocesses-box">
</td>
</tr>
<tr id="policies-status-row">
<th class="column">
&aboutSupport.enterprisePolicies;
</th>
<th class="column" data-l10n-id="app-basics-enterprise-policies"/>
<td id="policies-status">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsKeyGoogle;
</th>
<th class="column" data-l10n-id="app-basics-key-google"/>
<td id="key-google-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsKeyMozilla;
</th>
<th class="column" data-l10n-id="app-basics-key-mozilla"/>
<td id="key-mozilla-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsSafeMode;
</th>
<th class="column" data-l10n-id="app-basics-safe-mode"/>
<td id="safemode-box">
</td>
@ -275,9 +209,7 @@
#ifndef ANDROID
<tr class="no-copy">
<th class="column">
&aboutSupport.appBasicsProfiles;
</th>
<th class="column" data-l10n-id="app-basics-profiles"/>
<td>
<a href="about:profiles">about:profiles</a>
@ -291,48 +223,35 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
#ifdef MOZ_CRASHREPORTER
<h2 class="major-section" id="crashes-title">
&aboutSupport.crashes.title;
</h2>
<h2 class="major-section" id="crashes-title" data-l10n-id="crashes-title"/>
<table id="crashes-table">
<thead>
<tr>
<th>
&aboutSupport.crashes.id;
</th>
<th>
&aboutSupport.crashes.sendDate;
</th>
<th data-l10n-id="crashes-id"/>
<th data-l10n-id="crashes-send-date"/>
</tr>
</thead>
<tbody id="crashes-tbody">
</tbody>
</table>
<p id="crashes-allReports" class="hidden no-copy">
<a href="about:crashes" id="crashes-allReportsWithPending" class="block">&aboutSupport.crashes.allReports;</a>
<a href="about:crashes" id="crashes-allReportsWithPending"
class="block" data-l10n-id="crashes-all-reports"/>
</p>
<p id="crashes-noConfig" class="hidden no-copy">&aboutSupport.crashes.noConfig;</p>
<p id="crashes-noConfig" class="hidden no-copy" data-l10n-id="crashes-no-config"/>
#endif
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.featuresTitle;
</h2>
<h2 class="major-section" data-l10n-id="features-title"/>
<table>
<thead>
<tr>
<th>
&aboutSupport.featureName;
</th>
<th>
&aboutSupport.featureVersion;
</th>
<th>
&aboutSupport.featureId;
</th>
<th data-l10n-id="features-name"/>
<th data-l10n-id="features-version"/>
<th data-l10n-id="features-id"/>
</tr>
</thead>
<tbody id="features-tbody">
@ -341,25 +260,15 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.extensionsTitle;
</h2>
<h2 class="major-section" data-l10n-id="extensions-title"/>
<table>
<thead>
<tr>
<th>
&aboutSupport.extensionName;
</th>
<th>
&aboutSupport.extensionVersion;
</th>
<th>
&aboutSupport.extensionEnabled;
</th>
<th>
&aboutSupport.extensionId;
</th>
<th data-l10n-id="extensions-name"/>
<th data-l10n-id="extensions-version"/>
<th data-l10n-id="extensions-enabled"/>
<th data-l10n-id="extensions-id"/>
</tr>
</thead>
<tbody id="extensions-tbody">
@ -368,44 +277,32 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section" id="security-software-title">
&aboutSupport.securitySoftwareTitle;
</h2>
<h2 class="major-section" id="security-software-title" data-l10n-id="security-software-title"/>
<table id="security-software-table">
<thead>
<tr>
<th>
&aboutSupport.securitySoftwareType;
</th>
<th>
&aboutSupport.securitySoftwareName;
</th>
<th data-l10n-id="security-software-type"/>
<th data-l10n-id="security-software-name"/>
</tr>
</thead>
<tbody>
<tr>
<th class="column">
&aboutSupport.securitySoftwareAntivirus;
</th>
<th class="column" data-l10n-id="security-software-antivirus"/>
<td id="security-software-antivirus">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.securitySoftwareAntiSpyware;
</th>
<th class="column" data-l10n-id="security-software-antispyware"/>
<td id="security-software-antispyware">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.securitySoftwareFirewall;
</th>
<th class="column" data-l10n-id="security-software-firewall"/>
<td id="security-software-firewall">
</td>
@ -415,16 +312,12 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.graphicsTitle;
</h2>
<h2 class="major-section" data-l10n-id="graphics-title"/>
<table>
<tbody id="graphics-features-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsFeaturesTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-features-title"/>
</tr>
</tbody>
@ -433,141 +326,85 @@
<tbody id="graphics-gpu-1-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsGPU1Title;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-gpu1-title"/>
</tr>
</tbody>
<tbody id="graphics-gpu-2-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsGPU2Title;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-gpu2-title"/>
</tr>
</tbody>
<tbody id="graphics-diagnostics-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsDiagnosticsTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-diagnostics-title"/>
</tr>
</tbody>
<tbody id="graphics-decisions-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsDecisionLogTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-decision-log-title"/>
</tr>
</tbody>
<tbody id="graphics-crashguards-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsCrashGuardsTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-crash-guards-title"/>
</tr>
</tbody>
<tbody id="graphics-workarounds-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsWorkaroundsTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-workarounds-title"/>
</tr>
</tbody>
<tbody id="graphics-failures-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.graphicsFailureLogTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="graphics-failure-log-title"/>
</tr>
</tbody>
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.mediaTitle;
</h2>
<h2 class="major-section" data-l10n-id="media-title"/>
<table>
<tbody id="media-info-tbody">
</tbody>
<tbody id="media-output-devices-tbody">
<tr>
<th colspan="9" class="title-column">
&aboutSupport.mediaOutputDevicesTitle;
</th>
<th colspan="9" class="title-column" data-l10n-id="media-output-devices-title"/>
</tr>
<tr>
<th>
&aboutSupport.mediaDeviceName;
</th>
<th>
&aboutSupport.mediaDeviceGroup;
</th>
<th>
&aboutSupport.mediaDeviceVendor;
</th>
<th>
&aboutSupport.mediaDeviceState;
</th>
<th>
&aboutSupport.mediaDevicePreferred;
</th>
<th>
&aboutSupport.mediaDeviceFormat;
</th>
<th>
&aboutSupport.mediaDeviceChannels;
</th>
<th>
&aboutSupport.mediaDeviceRate;
</th>
<th>
&aboutSupport.mediaDeviceLatency;
</th>
<th data-l10n-id="media-device-name"/>
<th data-l10n-id="media-device-group"/>
<th data-l10n-id="media-device-vendor"/>
<th data-l10n-id="media-device-state"/>
<th data-l10n-id="media-device-preferred"/>
<th data-l10n-id="media-device-format"/>
<th data-l10n-id="media-device-channels"/>
<th data-l10n-id="media-device-rate"/>
<th data-l10n-id="media-device-latency"/>
</tr>
</tbody>
<tbody id="media-input-devices-tbody">
<tr>
<th colspan="9" class="title-column">
&aboutSupport.mediaInputDevicesTitle;
</th>
<th colspan="9" class="title-column" data-l10n-id="media-input-devices-title"/>
</tr>
<tr>
<th>
&aboutSupport.mediaDeviceName;
</th>
<th>
&aboutSupport.mediaDeviceGroup;
</th>
<th>
&aboutSupport.mediaDeviceVendor;
</th>
<th>
&aboutSupport.mediaDeviceState;
</th>
<th>
&aboutSupport.mediaDevicePreferred;
</th>
<th>
&aboutSupport.mediaDeviceFormat;
</th>
<th>
&aboutSupport.mediaDeviceChannels;
</th>
<th>
&aboutSupport.mediaDeviceRate;
</th>
<th>
&aboutSupport.mediaDeviceLatency;
</th>
<th data-l10n-id="media-device-name"/>
<th data-l10n-id="media-device-group"/>
<th data-l10n-id="media-device-vendor"/>
<th data-l10n-id="media-device-state"/>
<th data-l10n-id="media-device-preferred"/>
<th data-l10n-id="media-device-format"/>
<th data-l10n-id="media-device-channels"/>
<th data-l10n-id="media-device-rate"/>
<th data-l10n-id="media-device-latency"/>
</tr>
</tbody>
@ -575,19 +412,13 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.modifiedKeyPrefsTitle;
</h2>
<h2 class="major-section" data-l10n-id="modified-key-prefs-title"/>
<table class="prefs-table">
<thead class="no-copy">
<th class="name">
&aboutSupport.modifiedPrefsName;
</th>
<th class="name" data-l10n-id="modified-prefs-name"/>
<th class="value">
&aboutSupport.modifiedPrefsValue;
</th>
<th class="value" data-l10n-id="modified-prefs-value"/>
</thead>
<tbody id="prefs-tbody">
@ -595,25 +426,21 @@
</table>
<section id="prefs-user-js-section" class="hidden no-copy">
<h3>&aboutSupport.userJSTitle;</h3>
<p>&aboutSupport.userJSDescription;</p>
<h3 data-l10n-id="user-js-title"/>
<p data-l10n-id="user-js-description">
<a id="prefs-user-js-link" data-l10n-name="user-js-link"></a>
</p>
</section>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.lockedKeyPrefsTitle;
</h2>
<h2 class="major-section" data-l10n-id="locked-key-prefs-title"/>
<table class="prefs-table">
<thead class="no-copy">
<th class="name">
&aboutSupport.lockedPrefsName;
</th>
<th class="name" data-l10n-id="locked-prefs-name"/>
<th class="value">
&aboutSupport.lockedPrefsValue;
</th>
<th class="value" data-l10n-id="locked-prefs-value"/>
</thead>
<tbody id="locked-prefs-tbody">
@ -623,20 +450,14 @@
#ifndef ANDROID
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.placeDatabaseTitle;
</h2>
<h2 class="major-section" data-l10n-id="place-database-title"/>
<table>
<tr class="no-copy">
<th class="column">
&aboutSupport.placeDatabaseIntegrity;
</th>
<th class="column" data-l10n-id="place-database-integrity"/>
<td>
<button id="verify-place-integrity-button">
&aboutSupport.placeDatabaseVerifyIntegrity;
</button>
<button id="verify-place-integrity-button" data-l10n-id="place-database-verify-integrity"/>
<pre id="verify-place-result" class="hidden no-copy"></pre>
</td>
</tr>
@ -644,16 +465,12 @@
#endif
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.jsTitle;
</h2>
<h2 class="major-section" data-l10n-id="js-title"/>
<table>
<tbody>
<tr>
<th class="column">
&aboutSupport.jsIncrementalGC;
</th>
<th class="column" data-l10n-id="js-incremental-gc"/>
<td id="javascript-incremental-gc">
</td>
@ -662,42 +479,32 @@
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.a11yTitle;
</h2>
<h2 class="major-section" data-l10n-id="a11y-title"/>
<table>
<tbody>
<tr>
<th class="column">
&aboutSupport.a11yActivated;
</th>
<th class="column" data-l10n-id="a11y-activated"/>
<td id="a11y-activated">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.a11yForceDisabled;
</th>
<th class="column" data-l10n-id="a11y-force-disabled"/>
<td id="a11y-force-disabled">
</td>
</tr>
#if defined(XP_WIN)
<tr>
<th class="column">
&aboutSupport.a11yHandlerUsed;
</th>
<th class="column" data-l10n-id="a11y-handler-used"/>
<td id="a11y-handler-used">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.a11yInstantiator;
</th>
<th class="column" data-l10n-id="a11y-instantiator"/>
<td id="a11y-instantiator">
</td>
@ -707,9 +514,7 @@
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.libraryVersionsTitle;
</h2>
<h2 class="major-section" data-l10n-id="library-version-title"/>
<table>
<tbody id="libversions-tbody">
@ -719,9 +524,7 @@
<!-- - - - - - - - - - - - - - - - - - - - - -->
#if defined(MOZ_SANDBOX)
<h2 class="major-section" id="sandbox">
&aboutSupport.sandboxTitle;
</h2>
<h2 class="major-section" id="sandbox" data-l10n-id="sandbox-title"/>
<table>
<tbody id="sandbox-tbody">
@ -729,31 +532,17 @@
</table>
#if defined(XP_LINUX)
<h4>&aboutSupport.sandboxSyscallLogTitle;</h4>
<h4 data-l10n-id="sandbox-sys-call-log-title"/>
<table>
<thead>
<tr>
<th>
&aboutSupport.sandboxSyscallIndex;
</th>
<th>
&aboutSupport.sandboxSyscallAge;
</th>
<th>
&aboutSupport.sandboxSyscallPID;
</th>
<th>
&aboutSupport.sandboxSyscallTID;
</th>
<th>
&aboutSupport.sandboxSyscallProcType;
</th>
<th>
&aboutSupport.sandboxSyscallNumber;
</th>
<th id="sandbox-syscalls-argshead">
&aboutSupport.sandboxSyscallArgs;
</th>
<th data-l10n-id="sandbox-sys-call-index"/>
<th data-l10n-id="sandbox-sys-call-age"/>
<th data-l10n-id="sandbox-sys-call-pid"/>
<th data-l10n-id="sandbox-sys-call-tid"/>
<th data-l10n-id="sandbox-sys-call-proc-type"/>
<th data-l10n-id="sandbox-sys-call-number"/>
<th id="sandbox-syscalls-argshead" data-l10n-id="sandbox-sys-call-args"/>
</tr>
</thead>
<tbody id="sandbox-syscalls-tbody">
@ -762,70 +551,50 @@
#endif
#endif
<h2 class="major-section">
&aboutSupport.intlTitle;
</h2>
<h2 class="major-section" data-l10n-id="intl-title"/>
<table>
<tbody id="intl-localeservice-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.intlAppTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="intl-app-title"/>
</tr>
<tr>
<th class="column">
&aboutSupport.intlLocalesRequested;
</th>
<th class="column" data-l10n-id="intl-locales-requested"/>
<td id="intl-locale-requested">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.intlLocalesAvailable;
</th>
<th class="column" data-l10n-id="intl-locales-available"/>
<td id="intl-locale-available">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.intlLocalesSupported;
</th>
<th class="column" data-l10n-id="intl-locales-supported"/>
<td id="intl-locale-supported">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.intlRegionalPrefs;
</th>
<th class="column" data-l10n-id="intl-regional-prefs"/>
<td id="intl-locale-regionalprefs">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.intlLocalesDefault;
</th>
<th class="column" data-l10n-id="intl-locales-default"/>
<td id="intl-locale-default">
</td>
</tr>
</tbody>
<tbody id="intl-ospreferences-tbody">
<tr>
<th colspan="2" class="title-column">
&aboutSupport.intlOSTitle;
</th>
<th colspan="2" class="title-column" data-l10n-id="intl-os-title"/>
</tr>
<tr>
<th class="column">
&aboutSupport.intlOSPrefsSystemLocales;
</th>
<th class="column" data-l10n-id="intl-os-prefs-system-locales"/>
<td id="intl-osprefs-systemlocales">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.intlRegionalPrefs;
</th>
<th class="column" data-l10n-id="intl-regional-prefs"/>
<td id="intl-osprefs-regionalprefs">
</td>
</tr>

Просмотреть файл

@ -1,167 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!ENTITY aboutSupport.pageTitle "Troubleshooting Information">
<!-- LOCALIZATION NOTE (aboutSupport.pageSubtitle): don't change the 'supportLink' id. -->
<!ENTITY aboutSupport.pageSubtitle "
This page contains technical information that might be useful when youre
trying to solve a problem. If you are looking for answers to common questions
about &brandShortName;, check out our <a id='supportLink'>support website</a>.
">
<!ENTITY aboutSupport.crashes.title "Crash Reports">
<!-- LOCALIZATION NOTE (aboutSupport.crashes.id):
This is likely the same like id.heading in aboutcrashes.ftl. -->
<!ENTITY aboutSupport.crashes.id "Report ID">
<!ENTITY aboutSupport.crashes.sendDate "Submitted">
<!ENTITY aboutSupport.crashes.allReports "All Crash Reports">
<!ENTITY aboutSupport.crashes.noConfig "This application has not been configured to display crash reports.">
<!ENTITY aboutSupport.extensionsTitle "Extensions">
<!ENTITY aboutSupport.extensionName "Name">
<!ENTITY aboutSupport.extensionEnabled "Enabled">
<!ENTITY aboutSupport.extensionVersion "Version">
<!ENTITY aboutSupport.extensionId "ID">
<!ENTITY aboutSupport.securitySoftwareTitle "Security Software">
<!ENTITY aboutSupport.securitySoftwareType "Type">
<!ENTITY aboutSupport.securitySoftwareName "Name">
<!ENTITY aboutSupport.securitySoftwareAntivirus "Antivirus">
<!ENTITY aboutSupport.securitySoftwareAntiSpyware "Antispyware">
<!ENTITY aboutSupport.securitySoftwareFirewall "Firewall">
<!ENTITY aboutSupport.featuresTitle "&brandShortName; Features">
<!ENTITY aboutSupport.featureName "Name">
<!ENTITY aboutSupport.featureVersion "Version">
<!ENTITY aboutSupport.featureId "ID">
<!ENTITY aboutSupport.appBasicsTitle "Application Basics">
<!ENTITY aboutSupport.appBasicsName "Name">
<!ENTITY aboutSupport.appBasicsVersion "Version">
<!ENTITY aboutSupport.appBasicsBuildID "Build ID">
<!-- LOCALIZATION NOTE (aboutSupport.appBasicsUpdateChannel, aboutSupport.appBasicsUpdateHistory, aboutSupport.appBasicsShowUpdateHistory):
"Update" is a noun here, not a verb. -->
<!ENTITY aboutSupport.appBasicsUpdateChannel "Update Channel">
<!ENTITY aboutSupport.appBasicsUpdateHistory "Update History">
<!ENTITY aboutSupport.appBasicsShowUpdateHistory "Show Update History">
<!ENTITY aboutSupport.appBasicsProfileDir "Profile Directory">
<!-- LOCALIZATION NOTE (aboutSupport.appBasicsProfileDirWinMac):
This is the Windows- and Mac-specific variant of aboutSupport.appBasicsProfileDir.
Windows/Mac use the term "Folder" instead of "Directory" -->
<!ENTITY aboutSupport.appBasicsProfileDirWinMac "Profile Folder">
<!ENTITY aboutSupport.appBasicsEnabledPlugins "Enabled Plugins">
<!ENTITY aboutSupport.appBasicsBuildConfig "Build Configuration">
<!ENTITY aboutSupport.appBasicsUserAgent "User Agent">
<!ENTITY aboutSupport.appBasicsOS "OS">
<!ENTITY aboutSupport.appBasicsMemoryUse "Memory Use">
<!ENTITY aboutSupport.appBasicsPerformance "Performance">
<!-- LOCALIZATION NOTE the term "Service Workers" should not be translated. -->
<!ENTITY aboutSupport.appBasicsServiceWorkers "Registered Service Workers">
<!ENTITY aboutSupport.appBasicsProfiles "Profiles">
<!ENTITY aboutSupport.appBasicsMultiProcessSupport "Multiprocess Windows">
<!ENTITY aboutSupport.appBasicsProcessCount "Web Content Processes">
<!ENTITY aboutSupport.enterprisePolicies "Enterprise Policies">
<!ENTITY aboutSupport.appBasicsKeyGoogle "Google Key">
<!ENTITY aboutSupport.appBasicsKeyMozilla "Mozilla Location Service Key">
<!ENTITY aboutSupport.appBasicsSafeMode "Safe Mode">
<!ENTITY aboutSupport.showDir.label "Open Directory">
<!-- LOCALIZATION NOTE (aboutSupport.showMac.label): This is the Mac-specific
variant of aboutSupport.showDir.label. This allows us to use the preferred
"Finder" terminology on Mac. -->
<!ENTITY aboutSupport.showMac.label "Show in Finder">
<!-- LOCALIZATION NOTE (aboutSupport.showWin2.label): This is the Windows-specific
variant of aboutSupport.showDir.label. -->
<!ENTITY aboutSupport.showWin2.label "Open Folder">
<!ENTITY aboutSupport.modifiedKeyPrefsTitle "Important Modified Preferences">
<!ENTITY aboutSupport.modifiedPrefsName "Name">
<!ENTITY aboutSupport.modifiedPrefsValue "Value">
<!-- LOCALIZATION NOTE (aboutSupport.userJSTitle, aboutSupport.userJSDescription): user.js is the name of the preference override file being checked. -->
<!ENTITY aboutSupport.userJSTitle "user.js Preferences">
<!ENTITY aboutSupport.userJSDescription "Your profile folder contains a <a id='prefs-user-js-link'>user.js file</a>, which includes preferences that were not created by &brandShortName;.">
<!ENTITY aboutSupport.lockedKeyPrefsTitle "Important Locked Preferences">
<!ENTITY aboutSupport.lockedPrefsName "Name">
<!ENTITY aboutSupport.lockedPrefsValue "Value">
<!ENTITY aboutSupport.graphicsTitle "Graphics">
<!ENTITY aboutSupport.placeDatabaseTitle "Places Database">
<!ENTITY aboutSupport.placeDatabaseIntegrity "Integrity">
<!ENTITY aboutSupport.placeDatabaseVerifyIntegrity "Verify Integrity">
<!ENTITY aboutSupport.jsTitle "JavaScript">
<!ENTITY aboutSupport.jsIncrementalGC "Incremental GC">
<!ENTITY aboutSupport.a11yTitle "Accessibility">
<!ENTITY aboutSupport.a11yActivated "Activated">
<!ENTITY aboutSupport.a11yForceDisabled "Prevent Accessibility">
<!ENTITY aboutSupport.a11yHandlerUsed "Accessible Handler Used">
<!ENTITY aboutSupport.a11yInstantiator "Accessibility Instantiator">
<!ENTITY aboutSupport.libraryVersionsTitle "Library Versions">
<!ENTITY aboutSupport.installationHistoryTitle "Installation History">
<!ENTITY aboutSupport.updateHistoryTitle "Update History">
<!ENTITY aboutSupport.copyTextToClipboard.label "Copy text to clipboard">
<!ENTITY aboutSupport.copyRawDataToClipboard.label "Copy raw data to clipboard">
<!ENTITY aboutSupport.sandboxTitle "Sandbox">
<!ENTITY aboutSupport.sandboxSyscallLogTitle "Rejected System Calls">
<!ENTITY aboutSupport.sandboxSyscallIndex "#">
<!ENTITY aboutSupport.sandboxSyscallAge "Seconds Ago">
<!ENTITY aboutSupport.sandboxSyscallPID "PID">
<!ENTITY aboutSupport.sandboxSyscallTID "TID">
<!ENTITY aboutSupport.sandboxSyscallProcType "Process Type">
<!ENTITY aboutSupport.sandboxSyscallNumber "Syscall">
<!ENTITY aboutSupport.sandboxSyscallArgs "Arguments">
<!ENTITY aboutSupport.safeModeTitle "Try Safe Mode">
<!ENTITY aboutSupport.restartInSafeMode.label "Restart with Add-ons Disabled…">
<!ENTITY aboutSupport.graphicsFeaturesTitle "Features">
<!ENTITY aboutSupport.graphicsDiagnosticsTitle "Diagnostics">
<!ENTITY aboutSupport.graphicsFailureLogTitle "Failure Log">
<!ENTITY aboutSupport.graphicsGPU1Title "GPU #1">
<!ENTITY aboutSupport.graphicsGPU2Title "GPU #2">
<!ENTITY aboutSupport.graphicsDecisionLogTitle "Decision Log">
<!ENTITY aboutSupport.graphicsCrashGuardsTitle "Crash Guard Disabled Features">
<!ENTITY aboutSupport.graphicsWorkaroundsTitle "Workarounds">
<!ENTITY aboutSupport.mediaTitle "Media">
<!ENTITY aboutSupport.mediaOutputDevicesTitle "Output Devices">
<!ENTITY aboutSupport.mediaInputDevicesTitle "Input Devices">
<!ENTITY aboutSupport.mediaDeviceName "Name">
<!ENTITY aboutSupport.mediaDeviceGroup "Group">
<!ENTITY aboutSupport.mediaDeviceVendor "Vendor">
<!ENTITY aboutSupport.mediaDeviceState "State">
<!ENTITY aboutSupport.mediaDevicePreferred "Preferred">
<!ENTITY aboutSupport.mediaDeviceFormat "Format">
<!ENTITY aboutSupport.mediaDeviceChannels "Channels">
<!ENTITY aboutSupport.mediaDeviceRate "Rate">
<!ENTITY aboutSupport.mediaDeviceLatency "Latency">
<!ENTITY aboutSupport.intlTitle "Internationalization &amp; Localization">
<!ENTITY aboutSupport.intlAppTitle "Application Settings">
<!ENTITY aboutSupport.intlLocalesRequested "Requested Locales">
<!ENTITY aboutSupport.intlLocalesAvailable "Available Locales">
<!ENTITY aboutSupport.intlLocalesSupported "App Locales">
<!ENTITY aboutSupport.intlLocalesDefault "Default Locale">
<!ENTITY aboutSupport.intlOSTitle "Operating System">
<!ENTITY aboutSupport.intlOSPrefsSystemLocales "System Locales">
<!ENTITY aboutSupport.intlRegionalPrefs "Regional Preferences">

Просмотреть файл

@ -2,39 +2,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# LOCALIZATION NOTE (crashesTitle): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 number of relevant days with crash reports
crashesTitle=Crash Reports for the Last #1 Day;Crash Reports for the Last #1 Days
# LOCALIZATION NOTE (crashesTimeMinutes): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 number of minutes (between 1 and 59) which have passed since the crash
crashesTimeMinutes=#1 minute ago;#1 minutes ago
# LOCALIZATION NOTE (crashesTimeHours): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 number of hours (between 1 and 23) which have passed since the crash
crashesTimeHours=#1 hour ago;#1 hours ago
# LOCALIZATION NOTE (crashesTimeDays): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 number of days (1 or more) which have passed since the crash
crashesTimeDays=#1 day ago;#1 days ago
# LOCALIZATION NOTE (pendingReports): Semi-colon list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 number of pending crash reports
pendingReports=All Crash Reports (including #1 pending crash in the given time range);All Crash Reports (including #1 pending crashes in the given time range)
# LOCALIZATION NOTE (rawDataCopied) Text displayed in a mobile "Toast" to user when the
# raw data is successfully copied to the clipboard via button press.
rawDataCopied=Raw data copied to clipboard
# LOCALIZATION NOTE (textCopied) Text displayed in a mobile "Toast" to user when the
# text is successfully copied to the clipboard via button press.
textCopied=Text copied to clipboard
# LOCALIZATION NOTE The verb "blocked" here refers to a graphics feature such as "Direct2D" or "OpenGL layers".
blockedDriver = Blocked for your graphics driver version.
@ -49,110 +16,3 @@ blockedOSVersion = Blocked for your operating system version.
# LOCALIZATION NOTE The verb "blocked" here refers to a graphics feature such as "Direct2D" or "OpenGL layers".
blockedMismatchedVersion = Blocked for your graphics driver version mismatch between registry and DLL.
# LOCALIZATION NOTE In the following strings, "Direct2D", "DirectWrite" and "ClearType"
# are proper nouns and should not be translated. Feel free to leave english strings if
# there are no good translations, these are only used in about:support
clearTypeParameters = ClearType Parameters
compositing = Compositing
hardwareH264 = Hardware H264 Decoding
mainThreadNoOMTC = main thread, no OMTC
yes = Yes
no = No
# LOCALIZATION NOTE The following strings indicate if an API key has been found.
# In some development versions, it's expected for some API keys that they are
# not found.
found = Found
missing = Missing
gpuDescription = Description
gpuVendorID = Vendor ID
gpuDeviceID = Device ID
gpuSubsysID = Subsys ID
gpuDrivers = Drivers
gpuRAM = RAM
gpuDriverVersion = Driver Version
gpuDriverDate = Driver Date
gpuActive = Active
webgl1WSIInfo = WebGL 1 Driver WSI Info
webgl1Renderer = WebGL 1 Driver Renderer
webgl1Version = WebGL 1 Driver Version
webgl1DriverExtensions = WebGL 1 Driver Extensions
webgl1Extensions = WebGL 1 Extensions
webgl2WSIInfo = WebGL 2 Driver WSI Info
webgl2Renderer = WebGL 2 Driver Renderer
webgl2Version = WebGL 2 Driver Version
webgl2DriverExtensions = WebGL 2 Driver Extensions
webgl2Extensions = WebGL 2 Extensions
GPU1 = GPU #1
GPU2 = GPU #2
blocklistedBug = Blocklisted due to known issues
# LOCALIZATION NOTE %1$S will be replaced with a bug number string.
bugLink = bug %1$S
# LOCALIZATION NOTE %1$S will be replaced with an arbitrary identifier
# string that can be searched on DXR/MXR or grepped in the source tree.
unknownFailure = Blocklisted; failure code %1$S
d3d11layersCrashGuard = D3D11 Compositor
d3d11videoCrashGuard = D3D11 Video Decoder
d3d9videoCrashGuard = D3D9 Video Decoder
glcontextCrashGuard = OpenGL
resetOnNextRestart = Reset on Next Restart
gpuProcessKillButton = Terminate GPU Process
gpuDeviceResetButton = Trigger Device Reset
usesTiling = Uses Tiling
contentUsesTiling = Uses Tiling (Content)
offMainThreadPaintEnabled = Off Main Thread Painting Enabled
offMainThreadPaintWorkerCount = Off Main Thread Painting Worker Count
audioBackend = Audio Backend
maxAudioChannels = Max Channels
channelLayout = Preferred Channel Layout
sampleRate = Preferred Sample Rate
minLibVersions = Expected minimum version
loadedLibVersions = Version in use
hasSeccompBPF = Seccomp-BPF (System Call Filtering)
hasSeccompTSync = Seccomp Thread Synchronization
hasUserNamespaces = User Namespaces
hasPrivilegedUserNamespaces = User Namespaces for privileged processes
canSandboxContent = Content Process Sandboxing
canSandboxMedia = Media Plugin Sandboxing
contentSandboxLevel = Content Process Sandbox Level
effectiveContentSandboxLevel = Effective Content Process Sandbox Level
sandboxProcType.content = content
sandboxProcType.file = file content
sandboxProcType.mediaPlugin = media plugin
# LOCALIZATION NOTE %1$S and %2$S will be replaced with the number of remote and the total number
# of windows, respectively, while %3$S will be replaced with one of the status strings below,
# which contains a description of the multi-process preference and status.
# Note: multiProcessStatus.3 doesn't exist because status=3 was deprecated.
multiProcessWindows = %1$S/%2$S (%3$S)
multiProcessStatus.0 = Enabled by user
multiProcessStatus.1 = Enabled by default
multiProcessStatus.2 = Disabled
multiProcessStatus.4 = Disabled by accessibility tools
multiProcessStatus.5 = Disabled by lack of graphics hardware acceleration on Mac OS X
multiProcessStatus.6 = Disabled by unsupported text input
multiProcessStatus.7 = Disabled by add-ons
multiProcessStatus.8 = Disabled forcibly
multiProcessStatus.unknown = Unknown status
asyncPanZoom = Asynchronous Pan/Zoom
apzNone = none
wheelEnabled = wheel input enabled
touchEnabled = touch input enabled
dragEnabled = scrollbar drag enabled
keyboardEnabled = keyboard enabled
autoscrollEnabled = autoscroll enabled
# LOCALIZATION NOTE %1 will be replaced with the key of a preference.
wheelWarning = async wheel input disabled due to unsupported pref: %S
touchWarning = async touch input disabled due to unsupported pref: %S
# LOCALIZATION NOTE Strings representing the status of the Enterprise Policies engine.
policies.inactive = Inactive
policies.active = Active
policies.error = Error

Просмотреть файл

@ -0,0 +1,276 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
page-title = Troubleshooting Information
page-subtitle =
This page contains technical information that might be useful when youre
trying to solve a problem. If you are looking for answers to common questions
about { -brand-short-name }, check out our <a data-l10n-name="support-link">support website</a>.
crashes-title = Crash Reports
crashes-id = Report ID
crashes-send-date = Submitted
crashes-all-reports = All Crash Reports
crashes-no-config = This application has not been configured to display crash reports.
extensions-title = Extensions
extensions-name = Name
extensions-enabled = Enabled
extensions-version = Version
extensions-id = ID
security-software-title = Security Software
security-software-type = Type
security-software-name = Name
security-software-antivirus = Antivirus
security-software-antispyware = Antispyware
security-software-firewall = Firewall
features-title = { -brand-short-name } Features
features-name = Name
features-version = Version
features-id = ID
app-basics-title = Application Basics
app-basics-name = Name
app-basics-version = Version
app-basics-build-id = Build ID
app-basics-update-channel = Update Channel
app-basics-update-history = Update History
app-basics-show-update-history = Show Update History
app-basics-profile-dir =
{ PLATFORM() ->
[linux] Profile Directory
*[other] Profile Folder
}
app-basics-enabled-plugins = Enabled Plugins
app-basics-build-config = Build Configuration
app-basics-user-agent = User Agent
app-basics-os = OS
app-basics-memory-use = Memory Use
app-basics-performance = Performance
app-basics-service-workers = Registered Service Workers
app-basics-profiles = Profiles
app-basics-multi-process-support = Multiprocess Windows
app-basics-process-count = Web Content Processes
app-basics-enterprise-policies = Enterprise Policies
app-basics-key-google = Google Key
app-basics-key-mozilla = Mozilla Location Service Key
app-basics-safe-mode = Safe Mode
show-dir-label =
{ PLATFORM() ->
[macos] Show in Finder
[windows] Open Folder
*[other] Open Directory
}
modified-key-prefs-title = Important Modified Preferences
modified-prefs-name = Name
modified-prefs-value = Value
user-js-title = user.js Preferences
user-js-description = Your profile folder contains a <a data-l10n-name="user-js-link">user.js file</a>, which includes preferences that were not created by { -brand-short-name }.
locked-key-prefs-title = Important Locked Preferences
locked-prefs-name = Name
locked-prefs-value = Value
graphics-title = Graphics
graphics-features-title = Features
graphics-diagnostics-title = Diagnostics
graphics-failure-log-title = Failure Log
graphics-gpu1-title = GPU #1
graphics-gpu2-title = GPU #2
graphics-decision-log-title = Decision Log
graphics-crash-guards-title = Crash Guard Disabled Features
graphics-workarounds-title = Workarounds
place-database-title = Places Database
place-database-integrity = Integrity
place-database-verify-integrity = Verify Integrity
js-title = JavaScript
js-incremental-gc = Incremental GC
a11y-title = Accessibility
a11y-activated = Activated
a11y-force-disabled = Prevent Accessibility
a11y-handler-used = Accessible Handler Used
a11y-instantiator = Accessibility Instantiator
library-version-title = Library Versions
copy-text-to-clipboard-label = Copy text to clipboard
copy-raw-data-to-clipboard-label = Copy raw data to clipboard
sandbox-title = Sandbox
sandbox-sys-call-log-title = Rejected System Calls
sandbox-sys-call-index = #
sandbox-sys-call-age = Seconds Ago
sandbox-sys-call-pid = PID
sandbox-sys-call-tid = TID
sandbox-sys-call-proc-type = Process Type
sandbox-sys-call-number = Syscall
sandbox-sys-call-args = Arguments
safe-mode-title = Try Safe Mode
restart-in-safe-mode-label = Restart with Add-ons Disabled…
media-title = Media
media-output-devices-title = Output Devices
media-input-devices-title = Input Devices
media-device-name = Name
media-device-group = Group
media-device-vendor = Vendor
media-device-state = State
media-device-preferred = Preferred
media-device-format = Format
media-device-channels = Channels
media-device-rate = Rate
media-device-latency = Latency
intl-title = Internationalization & Localization
intl-app-title = Application Settings
intl-locales-requested = Requested Locales
intl-locales-available = Available Locales
intl-locales-supported = App Locales
intl-locales-default = Default Locale
intl-os-title = Operating System
intl-os-prefs-system-locales = System Locales
intl-regional-prefs = Regional Preferences
# Variables
# $days (Integer) - Number of days of crashes to log
report-crash-for-days =
{ $days ->
[one] Crash Reports for the Last { $days } Day
*[other] Crash Reports for the Last { $days } Days
}
# Variables
# $minutes (integer) - Number of minutes since crash
crashes-time-minutes =
{ $minutes ->
[one] { $minutes } minute ago
*[other] { $minutes } minutes ago
}
# Variables
# $hours (integer) - Number of hours since crash
crashes-time-hours =
{ $hours ->
[one] { $hours } hour ago
*[other] { $hours } hours ago
}
# Variables
# $days (integer) - Number of days since crash
crashes-time-days =
{ $days ->
[one] { $days } day ago
*[other] { $days } days ago
}
# Variables
# $reports (integer) - Number of pending reports
pending-reports =
{ $reports ->
[one] All Crash Reports (including { $reports } pending crash in the given time range)
*[other] All Crash Reports (including { $reports } pending crashes in the given time range)
}
raw-data-copied = Raw data copied to clipboard
text-copied = Text copied to clipboard
# "ClearType" is a proper noun and should not be translated. Feel free to leave English strings if
# there are no good translations, these are only used in about:support
clear-type-parameters = ClearType Parameters
compositing = Compositing
hardware-h264 = Hardware H264 Decoding
main-thread-no-omtc = main thread, no OMTC
yes = Yes
no = No
## The following strings indicate if an API key has been found.
## In some development versions, it's expected for some API keys that they are
## not found.
found = Found
missing = Missing
gpu-description = Description
gpu-vendor-id = Vendor ID
gpu-device-id = Device ID
gpu-subsys-id = Subsys ID
gpu-drivers = Drivers
gpu-ram = RAM
gpu-driver-version = Driver Version
gpu-driver-date = Driver Date
gpu-active = Active
webgl1-wsiinfo = WebGL 1 Driver WSI Info
webgl1-renderer = WebGL 1 Driver Renderer
webgl1-version = WebGL 1 Driver Version
webgl1-driver-extensions = WebGL 1 Driver Extensions
webgl1-extensions = WebGL 1 Extensions
webgl2-wsiinfo = WebGL 2 Driver WSI Info
webgl2-renderer = WebGL 2 Driver Renderer
webgl2-version = WebGL 2 Driver Version
webgl2-driver-extensions = WebGL 2 Driver Extensions
webgl2-extensions = WebGL 2 Extensions
blocklisted-bug = Blocklisted due to known issues
# Variables
# $bugNumber (string) - String of bug number from Bugzilla
bug-link = bug { $bugNumber }
# Variables
# $failureCode (string) - String that can be searched in the source tree.
unknown-failure = Blocklisted; failure code { $failureCode }
d3d11layers-crash-guard = D3D11 Compositor
d3d11video-crash-guard = D3D11 Video Decoder
d3d9video-crash-buard = D3D9 Video Decoder
glcontext-crash-guard = OpenGL
reset-on-next-restart = Reset on Next Restart
gpu-process-kill-button = Terminate GPU Process
gpu-device-reset-button = Trigger Device Reset
uses-tiling = Uses Tiling
content-uses-tiling = Uses Tiling (Content)
off-main-thread-paint-enabled = Off Main Thread Painting Enabled
off-main-thread-paint-worker-count = Off Main Thread Painting Worker Count
audio-backend = Audio Backend
max-audio-channels = Max Channels
channel-layout = Preferred Channel Layout
sample-rate = Preferred Sample Rate
min-lib-versions = Expected minimum version
loaded-lib-versions = Version in use
has-seccomp-bpf = Seccomp-BPF (System Call Filtering)
has-seccomp-tsync = Seccomp Thread Synchronization
has-user-namespaces = User Namespaces
has-privileged-user-namespaces = User Namespaces for privileged processes
can-sandbox-content = Content Process Sandboxing
can-sandbox-media = Media Plugin Sandboxing
content-sandbox-level = Content Process Sandbox Level
effective-content-sandbox-level = Effective Content Process Sandbox Level
sandbox-proc-type-content = content
sandbox-proc-type-file = file content
sandbox-proc-type-media-plugin = media plugin
# Variables
# $remoteWindows (integer) - Number of remote windows
# $totalWindows (integer) - Number of total windows
multi-process-windows = { $remoteWindows }/{ $totalWindows }
multi-process-status-0 = Enabled by user
multi-process-status-1 = Enabled by default
multi-process-status-2 = Disabled
multi-process-status-4 = Disabled by accessibility tools
multi-process-status-6 = Disabled by unsupported text input
multi-process-status-7 = Disabled by add-ons
multi-process-status-8 = Disabled forcibly
multi-process-status-unknown = Unknown status
async-pan-zoom = Asynchronous Pan/Zoom
apz-none = none
wheel-enabled = wheel input enabled
touch-enabled = touch input enabled
drag-enabled = scrollbar drag enabled
keyboard-enabled = keyboard enabled
autoscroll-enabled = autoscroll enabled
## Variables
## $preferenceKey (string) - String ID of preference
wheel-warning = async wheel input disabled due to unsupported pref: { $preferenceKey }
touch-warning = async touch input disabled due to unsupported pref: { $preferenceKey }
## Strings representing the status of the Enterprise Policies engine.
policies-inactive = Inactive
policies-active = Active
policies-error = Error

Просмотреть файл

@ -12,7 +12,6 @@
locale/@AB_CD@/global/aboutReader.properties (%chrome/global/aboutReader.properties)
locale/@AB_CD@/global/aboutRights.dtd (%chrome/global/aboutRights.dtd)
locale/@AB_CD@/global/aboutStudies.properties (%chrome/global/aboutStudies.properties)
locale/@AB_CD@/global/aboutSupport.dtd (%chrome/global/aboutSupport.dtd)
locale/@AB_CD@/global/aboutSupport.properties (%chrome/global/aboutSupport.properties)
locale/@AB_CD@/global/aboutTelemetry.dtd (%chrome/global/aboutTelemetry.dtd)
locale/@AB_CD@/global/aboutTelemetry.properties (%chrome/global/aboutTelemetry.properties)