From d5d3d8b3f7aef8e62239955a4dfdfb359a33279c Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 6 Feb 2025 18:34:31 +0100 Subject: [PATCH] [GENERIC viewer] Add Fluent `PLATFORM` function (PR 19414 follow-up) This patch extends the `FeatureTest.platform` getter to provide the necessary information, and uses that one to implement a Fluent `PLATFORM` function based on: https://searchfox.org/mozilla-central/rev/d1fbe983fb7720f0a4aca0e748817af11c1a374e/intl/l10n/rust/fluent-ffi/src/bundle.rs#81-98 --- src/shared/util.js | 16 +++++++++++----- web/genericl10n.js | 23 +++++++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/shared/util.js b/src/shared/util.js index 03dedc365..30c1d4f5e 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -632,18 +632,24 @@ class FeatureTest { if ( (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) || (typeof navigator !== "undefined" && - typeof navigator?.platform === "string") + typeof navigator?.platform === "string" && + typeof navigator?.userAgent === "string") ) { + const { platform, userAgent } = navigator; + return shadow(this, "platform", { - isMac: navigator.platform.includes("Mac"), - isWindows: navigator.platform.includes("Win"), + isAndroid: userAgent.includes("Android"), + isLinux: platform.includes("Linux"), + isMac: platform.includes("Mac"), + isWindows: platform.includes("Win"), isFirefox: (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) || - (typeof navigator?.userAgent === "string" && - navigator.userAgent.includes("Firefox")), + userAgent.includes("Firefox"), }); } return shadow(this, "platform", { + isAndroid: false, + isLinux: false, isMac: false, isWindows: false, isFirefox: false, diff --git a/web/genericl10n.js b/web/genericl10n.js index 74b9e2385..03e63d929 100644 --- a/web/genericl10n.js +++ b/web/genericl10n.js @@ -15,14 +15,33 @@ /** @typedef {import("./interfaces").IL10n} IL10n */ +import { FeatureTest, fetchData } from "pdfjs-lib"; import { FluentBundle, FluentResource } from "fluent-bundle"; import { DOMLocalization } from "fluent-dom"; -import { fetchData } from "pdfjs-lib"; import { L10n } from "./l10n.js"; +function PLATFORM() { + const { isAndroid, isLinux, isMac, isWindows } = FeatureTest.platform; + if (isLinux) { + return "linux"; + } + if (isWindows) { + return "windows"; + } + if (isMac) { + return "macos"; + } + if (isAndroid) { + return "android"; + } + return "other"; +} + function createBundle(lang, text) { const resource = new FluentResource(text); - const bundle = new FluentBundle(lang); + const bundle = new FluentBundle(lang, { + functions: { PLATFORM }, + }); const errors = bundle.addResource(resource); if (errors.length) { console.error("L10n errors", errors);