From 057676336d9f6803eda884f75ae4c6eebd6be4b0 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Tue, 12 May 2026 15:10:59 +0200 Subject: [PATCH 1/9] Upgrade PNPM to 11 --- package.json | 9 ++++++++- pnpm-workspace.yaml | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 975e8826..2a04b2d5 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,12 @@ "navigator-html-injectables", "shared" ], - "packageManager": "pnpm@10.28.2" + "packageManager": "pnpm@11.1.1", + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": "11.1.0", + "onFail": "warn" + } + } } \ No newline at end of file diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f97a2b85..7f99f06f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,8 @@ packages: - 'shared' - 'navigator' - - 'navigator-html-injectables' \ No newline at end of file + - 'navigator-html-injectables' + +minimumReleaseAge: 4320 # 3 days +blockExoticSubdeps: true +trustPolicy: no-downgrade \ No newline at end of file From 829134d6cfa59d632a6d5c32e7b8f63e2af49fc1 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 09:24:53 +0200 Subject: [PATCH 2/9] Remove packageManager cf. Cannot use both "packageManager" and "devEngines.packageManager" in package.json. "packageManager" will be ignored --- package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2a04b2d5..402c880a 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,11 @@ "navigator-html-injectables", "shared" ], - "packageManager": "pnpm@11.1.1", "devEngines": { "packageManager": { - "name": "pnpm", - "version": "11.1.0", - "onFail": "warn" + "name": "pnpm", + "version": "11.1.0", + "onFail": "warn" } } } \ No newline at end of file From 87a2a4a9f7a0edb98aa8d3156079e4dc9f9dd95f Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 10:28:07 +0200 Subject: [PATCH 3/9] Update bundling --- navigator-html-injectables/package.json | 10 +- navigator-html-injectables/tsconfig.json | 2 +- navigator-html-injectables/vite.config.js | 16 +- navigator/package.json | 15 +- navigator/tsconfig.json | 6 +- navigator/vite.config.js | 17 +- pnpm-lock.yaml | 646 +--------------------- pnpm-workspace.yaml | 5 +- shared/package.json | 20 +- shared/tsconfig.json | 2 +- shared/vite.config.js | 9 +- 11 files changed, 67 insertions(+), 681 deletions(-) diff --git a/navigator-html-injectables/package.json b/navigator-html-injectables/package.json index b6332de2..71592e64 100644 --- a/navigator-html-injectables/package.json +++ b/navigator-html-injectables/package.json @@ -30,16 +30,14 @@ "clean": "rimraf types dist", "build": "pnpm clean && tsc && vite build" }, - "main": "./dist/index.umd.cjs", - "module": "./dist/index.js", "types": "./types/src/index.d.ts", "exports": { ".": { "types": "./types/src/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.umd.cjs" + "import": "./dist/index.js" } }, + "sideEffects": false, "files": [ "dist", "src", @@ -48,8 +46,10 @@ "engines": { "node": ">=18" }, + "dependencies": { + "@readium/shared": "workspace:*" + }, "devDependencies": { - "@readium/shared": "workspace:*", "css-selector-generator": "^3.8.0", "rimraf": "^6.1.2", "tslib": "^2.8.1", diff --git a/navigator-html-injectables/tsconfig.json b/navigator-html-injectables/tsconfig.json index dfcb9f49..5365467f 100644 --- a/navigator-html-injectables/tsconfig.json +++ b/navigator-html-injectables/tsconfig.json @@ -24,7 +24,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, // use Node's module resolution algorithm, instead of the legacy TS one - "moduleResolution": "node", + "moduleResolution": "bundler", // transpile JSX to React.createElement "jsx": "react", // interop between ESM and CJS modules. Recommended by TS diff --git a/navigator-html-injectables/vite.config.js b/navigator-html-injectables/vite.config.js index 0320baad..57b99b3b 100644 --- a/navigator-html-injectables/vite.config.js +++ b/navigator-html-injectables/vite.config.js @@ -6,18 +6,18 @@ export default defineConfig({ build: { lib: { entry: resolve(__dirname, "src/index.ts"), - name: "navigator-html-injectables", - fileName: "index" + formats: ["es"], + }, + rollupOptions: { + external: ["@readium/shared"], + output: { + preserveModules: true, + preserveModulesRoot: "src", + } } }, define: { "import.meta.env.PACKAGE_NAME": JSON.stringify(packageJson.name), "import.meta.env.PACKAGE_VERSION": JSON.stringify(packageJson.version), - }, - resolve: { - alias: { - // Treat shared as internal source code when building standalone - "@readium/shared": resolve(__dirname, "../shared/src") - } } }); \ No newline at end of file diff --git a/navigator/package.json b/navigator/package.json index 473392ce..1c5990c3 100644 --- a/navigator/package.json +++ b/navigator/package.json @@ -26,16 +26,14 @@ "reader", "viewer" ], - "main": "./dist/index.umd.cjs", - "module": "./dist/index.js", "types": "./types/src/index.d.ts", "exports": { ".": { "types": "./types/src/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.umd.cjs" + "import": "./dist/index.js" } }, + "sideEffects": false, "files": [ "dist", "src", @@ -49,17 +47,18 @@ "build": "pnpm clean && node scripts/generate-css-selector.js && tsc && vite build", "generate:css-selector": "node scripts/generate-css-selector.js" }, - "devDependencies": { - "@readium/css": "^2.0.4", + "dependencies": { "@readium/navigator-html-injectables": "workspace:*", - "@readium/shared": "workspace:*", + "@readium/shared": "workspace:*" + }, + "devDependencies": { + "@readium/css": "^2.0.5", "@types/path-browserify": "^1.0.3", "css-selector-generator": "^3.8.0", "path-browserify": "^1.0.1", "rimraf": "^6.1.2", "tslib": "^2.8.1", "typescript": "^5.9.3", - "typescript-plugin-css-modules": "^5.2.0", "user-agent-data-types": "^0.4.2", "vite": "^7.3.1" } diff --git a/navigator/tsconfig.json b/navigator/tsconfig.json index e3002302..fffadeb0 100644 --- a/navigator/tsconfig.json +++ b/navigator/tsconfig.json @@ -12,11 +12,7 @@ "dom", "dom.iterable" ], - "plugins": [ - { - "name": "typescript-plugin-css-modules" - } - ], + "importHelpers": true, // output .d.ts declaration files for consumers "declaration": true, diff --git a/navigator/vite.config.js b/navigator/vite.config.js index 24b1f0e7..0c70bbe2 100644 --- a/navigator/vite.config.js +++ b/navigator/vite.config.js @@ -6,19 +6,18 @@ export default defineConfig({ build: { lib: { entry: resolve(__dirname, "src/index.ts"), - name: "navigator", - fileName: "index" + formats: ["es"], + }, + rollupOptions: { + external: ["@readium/shared", "@readium/navigator-html-injectables"], + output: { + preserveModules: true, + preserveModulesRoot: "src", + } } }, define: { "import.meta.env.PACKAGE_NAME": JSON.stringify(packageJson.name), "import.meta.env.PACKAGE_VERSION": JSON.stringify(packageJson.version), - }, - resolve: { - alias: { - // Treat both packages as internal source code to eliminate duplication - "@readium/navigator-html-injectables": resolve(__dirname, "../navigator-html-injectables/src"), - "@readium/shared": resolve(__dirname, "../shared/src") - } } }); \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af942c7b..51aaf60a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,19 +16,20 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(less@4.5.1)(sass@1.97.2)(stylus@0.62.0) + version: 7.3.1(@types/node@25.0.9) navigator: - devDependencies: - '@readium/css': - specifier: ^2.0.4 - version: 2.0.4 + dependencies: '@readium/navigator-html-injectables': specifier: workspace:* version: link:../navigator-html-injectables '@readium/shared': specifier: workspace:* version: link:../shared + devDependencies: + '@readium/css': + specifier: ^2.0.5 + version: 2.0.5 '@types/path-browserify': specifier: ^1.0.3 version: 1.0.3 @@ -47,21 +48,19 @@ importers: typescript: specifier: ^5.9.3 version: 5.9.3 - typescript-plugin-css-modules: - specifier: ^5.2.0 - version: 5.2.0(typescript@5.9.3) user-agent-data-types: specifier: ^0.4.2 version: 0.4.2 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(less@4.5.1)(sass@1.97.2)(stylus@0.62.0) + version: 7.3.1(@types/node@25.0.9) navigator-html-injectables: - devDependencies: + dependencies: '@readium/shared': specifier: workspace:* version: link:../shared + devDependencies: css-selector-generator: specifier: ^3.8.0 version: 3.8.0 @@ -76,7 +75,7 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(less@4.5.1)(sass@1.97.2)(stylus@0.62.0) + version: 7.3.1(@types/node@25.0.9) shared: dependencies: @@ -93,9 +92,6 @@ importers: '@babel/preset-typescript': specifier: ^7.28.5 version: 7.28.5(@babel/core@7.28.6) - '@size-limit/file': - specifier: ^12.0.0 - version: 12.0.0(size-limit@12.0.0(jiti@2.6.1)) '@types/jest': specifier: ^30.0.0 version: 30.0.0 @@ -111,9 +107,6 @@ importers: rimraf: specifier: ^6.1.2 version: 6.1.2 - size-limit: - specifier: ^12.0.0 - version: 12.0.0(jiti@2.6.1) ts-jest: specifier: ^29.4.6 version: 29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.0.9))(typescript@5.9.3) @@ -125,13 +118,10 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(less@4.5.1)(sass@1.97.2)(stylus@0.62.0) + version: 7.3.1(@types/node@25.0.9) packages: - '@adobe/css-tools@4.3.3': - resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} - '@babel/code-frame@7.28.6': resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} engines: {node: '>=6.9.0'} @@ -1009,94 +999,6 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@parcel/watcher-android-arm64@2.5.4': - resolution: {integrity: sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.4': - resolution: {integrity: sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.4': - resolution: {integrity: sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.4': - resolution: {integrity: sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.4': - resolution: {integrity: sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm-musl@2.5.4': - resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-arm64-glibc@2.5.4': - resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm64-musl@2.5.4': - resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-x64-glibc@2.5.4': - resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-x64-musl@2.5.4': - resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@parcel/watcher-win32-arm64@2.5.4': - resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.4': - resolution: {integrity: sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.4': - resolution: {integrity: sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.4': - resolution: {integrity: sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==} - engines: {node: '>= 10.0.0'} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1105,8 +1007,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@readium/css@2.0.4': - resolution: {integrity: sha512-+WQoL7/GG0VECHtGd+XZlC5JyLBG6DiPEKDTz9QGg9CVaA7bZ0fcAVNB86MDHP+RGQ/DWDIuiw1stzpapylnrA==} + '@readium/css@2.0.5': + resolution: {integrity: sha512-rQWeDFSS9UfRTFFdWIhlko0jtkL9dOfNTqFjgMumlguromsyHC9/lGmbWDde7deEeE5ns+yBOSGKixMU0wqZ4A==} '@rollup/rollup-android-arm-eabi@4.55.2': resolution: {integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==} @@ -1255,12 +1157,6 @@ packages: '@sinonjs/fake-timers@13.0.5': resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - '@size-limit/file@12.0.0': - resolution: {integrity: sha512-OzKYpDzWJ2jo6cAIzVsaPuvzZTmMLDoVCViEvsctmImxpXzwJZcuBEpPohFKKdgVdZuNTU8WstmvywPq55Njdw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - size-limit: 12.0.0 - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1297,12 +1193,6 @@ packages: '@types/path-browserify@1.0.3': resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} - '@types/postcss-modules-local-by-default@4.0.2': - resolution: {integrity: sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==} - - '@types/postcss-modules-scope@3.0.4': - resolution: {integrity: sha512-//ygSisVq9kVI0sqx3UPLzWIMCmtSVrzdljtuaAEJtGoGnpjBikZ2sXO5MpH9SnWX9HRfXxHifDAXcQjupWnIQ==} - '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -1314,6 +1204,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -1521,10 +1412,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bytes-iec@3.1.1: - resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} - engines: {node: '>= 0.8'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1548,10 +1435,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - ci-info@4.3.1: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} @@ -1583,9 +1466,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - core-js-compat@3.47.0: resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} @@ -1596,11 +1476,6 @@ packages: css-selector-generator@3.8.0: resolution: {integrity: sha512-J+SN+2N+0IjBQ1BoAmqUkb8rLxMKiy4HuBydwNNOOPflov5mrlcxWsLZgJ7PTuCt/JTSIRbrgKfQ5K2I8Hp94g==} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1622,18 +1497,10 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1650,10 +1517,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -1747,6 +1610,7 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.0: @@ -1780,24 +1644,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} - import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -1821,10 +1667,6 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -1833,10 +1675,6 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1845,9 +1683,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2002,10 +1837,6 @@ packages: node-notifier: optional: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2026,23 +1857,10 @@ packages: engines: {node: '>=6'} hasBin: true - less@4.5.1: - resolution: {integrity: sha512-UKgI3/KON4u6ngSsnDADsUERqhZknsVZbnuzlRZXLQCmfC/MDld42fTydUE9B+Mla1AL6SJ/Pp6SlEFi/AVGfw==} - engines: {node: '>=14'} - hasBin: true - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2050,9 +1868,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -2069,10 +1884,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -2090,11 +1901,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2125,9 +1931,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanospinner@1.2.2: - resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} - napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2136,17 +1939,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} - engines: {node: '>= 4.4.x'} - hasBin: true - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -2191,10 +1986,6 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -2232,10 +2023,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -2244,43 +2031,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -2289,19 +2039,12 @@ packages: resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - regenerate-unicode-properties@10.2.2: resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} @@ -2324,9 +2067,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - reserved-words@0.1.2: - resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} - resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -2350,25 +2090,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sass@1.97.2: - resolution: {integrity: sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2393,16 +2114,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - size-limit@12.0.0: - resolution: {integrity: sha512-JBG8dioIs0m2kHOhs9jD6E/tZKD08vmbf2bfqj/rJyNWqJxk/ZcakixjhYtsqdbi+AKVbfPkt3g2RRZiKaizYA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - jiti: ^2.0.0 - peerDependenciesMeta: - jiti: - optional: true - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -2418,10 +2129,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -2449,10 +2156,6 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -2465,10 +2168,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - stylus@0.62.0: - resolution: {integrity: sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2490,7 +2189,7 @@ packages: engines: {node: '>=8'} thorium-locales@https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c: - resolution: {tarball: https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c} + resolution: {gitHosted: true, tarball: https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c} version: 1.0.0 tinyglobby@0.2.15: @@ -2531,10 +2230,6 @@ packages: jest-util: optional: true - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2550,11 +2245,6 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-plugin-css-modules@5.2.0: - resolution: {integrity: sha512-c5pAU5d+m3GciDr/WhkFldz1NIEGBafuP/3xhFt9BEXS2gmn/LvjkoZ11vEBIuP8LkXfPNhOt1BUhM5efFuwOw==} - peerDependencies: - typescript: '>=4.0.0' - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -2596,9 +2286,6 @@ packages: user-agent-data-types@0.4.2: resolution: {integrity: sha512-jXep3kO/dGNmDOkbDa8ccp4QArgxR4I76m3QVcJ1aOF0B9toc+YtSXtX5gLdDTZXyWlpQYQrABr6L1L2GZOghw==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -2676,10 +2363,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -2694,9 +2377,6 @@ packages: snapshots: - '@adobe/css-tools@4.3.3': - optional: true - '@babel/code-frame@7.28.6': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -3777,73 +3457,12 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@parcel/watcher-android-arm64@2.5.4': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.4': - optional: true - - '@parcel/watcher-darwin-x64@2.5.4': - optional: true - - '@parcel/watcher-freebsd-x64@2.5.4': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.5.4': - optional: true - - '@parcel/watcher-linux-arm-musl@2.5.4': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.5.4': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.5.4': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.5.4': - optional: true - - '@parcel/watcher-linux-x64-musl@2.5.4': - optional: true - - '@parcel/watcher-win32-arm64@2.5.4': - optional: true - - '@parcel/watcher-win32-ia32@2.5.4': - optional: true - - '@parcel/watcher-win32-x64@2.5.4': - optional: true - - '@parcel/watcher@2.5.4': - dependencies: - detect-libc: 2.1.2 - is-glob: 4.0.3 - node-addon-api: 7.1.1 - picomatch: 4.0.3 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.4 - '@parcel/watcher-darwin-arm64': 2.5.4 - '@parcel/watcher-darwin-x64': 2.5.4 - '@parcel/watcher-freebsd-x64': 2.5.4 - '@parcel/watcher-linux-arm-glibc': 2.5.4 - '@parcel/watcher-linux-arm-musl': 2.5.4 - '@parcel/watcher-linux-arm64-glibc': 2.5.4 - '@parcel/watcher-linux-arm64-musl': 2.5.4 - '@parcel/watcher-linux-x64-glibc': 2.5.4 - '@parcel/watcher-linux-x64-musl': 2.5.4 - '@parcel/watcher-win32-arm64': 2.5.4 - '@parcel/watcher-win32-ia32': 2.5.4 - '@parcel/watcher-win32-x64': 2.5.4 - optional: true - '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.2.9': {} - '@readium/css@2.0.4': {} + '@readium/css@2.0.5': {} '@rollup/rollup-android-arm-eabi@4.55.2': optional: true @@ -3930,10 +3549,6 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@size-limit/file@12.0.0(size-limit@12.0.0(jiti@2.6.1))': - dependencies: - size-limit: 12.0.0(jiti@2.6.1) - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -3983,14 +3598,6 @@ snapshots: '@types/path-browserify@1.0.3': {} - '@types/postcss-modules-local-by-default@4.0.2': - dependencies: - postcss: 8.5.6 - - '@types/postcss-modules-scope@3.0.4': - dependencies: - postcss: 8.5.6 - '@types/stack-utils@2.0.3': {} '@types/yargs-parser@21.0.3': {} @@ -4196,8 +3803,6 @@ snapshots: buffer-from@1.1.2: {} - bytes-iec@3.1.1: {} - callsites@3.1.0: {} camelcase@5.3.1: {} @@ -4213,10 +3818,6 @@ snapshots: char-regex@1.0.2: {} - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - ci-info@4.3.1: {} cjs-module-lexer@2.2.0: {} @@ -4241,10 +3842,6 @@ snapshots: convert-source-map@2.0.0: {} - copy-anything@2.0.6: - dependencies: - is-what: 3.14.1 - core-js-compat@3.47.0: dependencies: browserslist: 4.28.1 @@ -4257,8 +3854,6 @@ snapshots: css-selector-generator@3.8.0: {} - cssesc@3.0.0: {} - debug@4.4.3: dependencies: ms: 2.1.3 @@ -4267,13 +3862,8 @@ snapshots: deepmerge@4.3.1: {} - detect-libc@2.1.2: - optional: true - detect-newline@3.1.0: {} - dotenv@16.6.1: {} - eastasianwidth@0.2.0: {} electron-to-chromium@1.5.267: {} @@ -4284,11 +3874,6 @@ snapshots: emoji-regex@9.2.2: {} - errno@0.1.8: - dependencies: - prr: 1.0.1 - optional: true - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -4437,20 +4022,6 @@ snapshots: human-signals@2.1.0: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - - icss-utils@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - image-size@0.5.5: - optional: true - - immutable@5.1.4: {} - import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -4471,24 +4042,14 @@ snapshots: dependencies: hasown: 2.0.2 - is-extglob@2.1.1: - optional: true - is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - optional: true - is-number@7.0.0: {} is-stream@2.0.1: {} - is-what@3.14.1: {} - isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -4839,9 +4400,6 @@ snapshots: - supports-color - ts-node - jiti@2.6.1: - optional: true - js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -4855,34 +4413,14 @@ snapshots: json5@2.2.3: {} - less@4.5.1: - dependencies: - copy-anything: 2.0.6 - parse-node-version: 1.0.1 - tslib: 2.8.1 - optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.11 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 3.3.1 - source-map: 0.6.1 - leven@3.1.0: {} - lilconfig@2.1.0: {} - - lilconfig@3.1.3: {} - lines-and-columns@1.2.4: {} locate-path@5.0.0: dependencies: p-locate: 4.1.0 - lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} lodash.memoize@4.1.2: {} @@ -4895,12 +4433,6 @@ snapshots: dependencies: yallist: 3.1.1 - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 - optional: true - make-dir@4.0.0: dependencies: semver: 7.7.3 @@ -4918,9 +4450,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mime@1.6.0: - optional: true - mimic-fn@2.1.0: {} minimatch@10.1.1: @@ -4943,25 +4472,12 @@ snapshots: nanoid@3.3.11: {} - nanospinner@1.2.2: - dependencies: - picocolors: 1.1.1 - napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} - needle@3.3.1: - dependencies: - iconv-lite: 0.6.3 - sax: 1.4.4 - optional: true - neo-async@2.6.2: {} - node-addon-api@7.1.1: - optional: true - node-int64@0.4.0: {} node-releases@2.0.27: {} @@ -5003,8 +4519,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-node-version@1.0.1: {} - path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -5031,45 +4545,12 @@ snapshots: picomatch@4.0.3: {} - pify@4.0.1: - optional: true - pirates@4.0.7: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - postcss-load-config@3.1.4(postcss@8.5.6): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.5.6 - - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): - dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - postcss-value-parser: 4.2.0 - - postcss-modules-scope@3.2.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-selector-parser@7.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -5082,15 +4563,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prr@1.0.1: - optional: true - pure-rand@7.0.1: {} react-is@18.3.1: {} - readdirp@4.1.2: {} - regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -5114,8 +4590,6 @@ snapshots: require-directory@2.1.1: {} - reserved-words@0.1.2: {} - resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -5164,26 +4638,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.55.2 fsevents: 2.3.3 - safer-buffer@2.1.2: - optional: true - - sass@1.97.2: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.4 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.5.4 - - sax@1.3.0: - optional: true - - sax@1.4.4: - optional: true - - semver@5.7.2: - optional: true - semver@6.3.1: {} semver@7.7.3: {} @@ -5198,16 +4652,6 @@ snapshots: signal-exit@4.1.0: {} - size-limit@12.0.0(jiti@2.6.1): - dependencies: - bytes-iec: 3.1.1 - lilconfig: 3.1.3 - nanospinner: 1.2.2 - picocolors: 1.1.1 - tinyglobby: 0.2.15 - optionalDependencies: - jiti: 2.6.1 - slash@3.0.0: {} source-map-js@1.2.1: {} @@ -5219,9 +4663,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.6: - optional: true - sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -5253,25 +4694,12 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} strip-json-comments@3.1.1: {} - stylus@0.62.0: - dependencies: - '@adobe/css-tools': 4.3.3 - debug: 4.4.3 - glob: 7.2.3 - sax: 1.3.0 - source-map: 0.7.6 - transitivePeerDependencies: - - supports-color - optional: true - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -5325,12 +4753,6 @@ snapshots: babel-jest: 30.2.0(@babel/core@7.28.6) jest-util: 30.2.0 - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@2.8.1: {} type-detect@4.0.8: {} @@ -5339,30 +4761,6 @@ snapshots: type-fest@4.41.0: {} - typescript-plugin-css-modules@5.2.0(typescript@5.9.3): - dependencies: - '@types/postcss-modules-local-by-default': 4.0.2 - '@types/postcss-modules-scope': 3.0.4 - dotenv: 16.6.1 - icss-utils: 5.1.0(postcss@8.5.6) - less: 4.5.1 - lodash.camelcase: 4.3.0 - postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6) - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - reserved-words: 0.1.2 - sass: 1.97.2 - source-map-js: 1.2.1 - tsconfig-paths: 4.2.0 - typescript: 5.9.3 - optionalDependencies: - stylus: 0.62.0 - transitivePeerDependencies: - - supports-color - - ts-node - typescript@5.9.3: {} uglify-js@3.19.3: @@ -5413,15 +4811,13 @@ snapshots: user-agent-data-types@0.4.2: {} - util-deprecate@1.0.2: {} - v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(less@4.5.1)(sass@1.97.2)(stylus@0.62.0): + vite@7.3.1(@types/node@25.0.9): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -5432,10 +4828,6 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.5.1 - sass: 1.97.2 - stylus: 0.62.0 walker@1.0.8: dependencies: @@ -5470,8 +4862,6 @@ snapshots: yallist@3.1.1: {} - yaml@1.10.2: {} - yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7f99f06f..d48a04aa 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,7 @@ packages: minimumReleaseAge: 4320 # 3 days blockExoticSubdeps: true -trustPolicy: no-downgrade \ No newline at end of file +trustPolicy: no-downgrade +allowBuilds: + esbuild: true + unrs-resolver: true diff --git a/shared/package.json b/shared/package.json index 6d0b698b..096464d8 100644 --- a/shared/package.json +++ b/shared/package.json @@ -26,16 +26,19 @@ "parser", "tts" ], - "main": "./dist/index.umd.cjs", - "module": "./dist/index.js", "types": "./types/src/index.d.ts", "exports": { ".": { "types": "./types/src/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.umd.cjs" + "import": "./dist/index.js" } }, + "sideEffects": [ + "dist/publication/epub/**/*.js", + "dist/publication/opds/**/*.js", + "dist/publication/html/**/*.js", + "dist/publication/encryption/**/*.js" + ], "files": [ "dist", "src", @@ -49,16 +52,9 @@ "clean": "rimraf types dist", "build": "pnpm clean && tsc && vite build", "test": "jest", - "size": "size-limit", "check-locales": "node scripts/check-locales.mjs", "update-locales": "pnpm remove @edrlab/thorium-locales && pnpm add @edrlab/thorium-locales@github:edrlab/thorium-locales && pnpm check-locales" }, - "size-limit": [ - { - "path": "dist/index.js", - "limit": "50 KB" - } - ], "dependencies": { "@edrlab/thorium-locales": "github:edrlab/thorium-locales" }, @@ -66,13 +62,11 @@ "@babel/core": "^7.28.6", "@babel/preset-env": "^7.28.6", "@babel/preset-typescript": "^7.28.5", - "@size-limit/file": "^12.0.0", "@types/jest": "^30.0.0", "babel-jest": "^30.2.0", "css-selector-generator": "^3.8.0", "jest": "^30.2.0", "rimraf": "^6.1.2", - "size-limit": "^12.0.0", "ts-jest": "^29.4.6", "tslib": "^2.8.1", "typescript": "^5.9.3", diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 761a4854..29437d9a 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -24,7 +24,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, // use Node's module resolution algorithm, instead of the legacy TS one - "moduleResolution": "node", + "moduleResolution": "bundler", // Enable JSON imports and ESM/CJS interop "resolveJsonModule": true, "esModuleInterop": true, diff --git a/shared/vite.config.js b/shared/vite.config.js index ff8c49d8..7d31e933 100644 --- a/shared/vite.config.js +++ b/shared/vite.config.js @@ -6,8 +6,13 @@ export default defineConfig({ build: { lib: { entry: resolve(__dirname, "src/index.ts"), - name: "shared", - fileName: "index" + formats: ["es"], + }, + rollupOptions: { + output: { + preserveModules: true, + preserveModulesRoot: "src", + } } }, define: { From 51efa7c5e95a93af5261afa3a5006e4c0f0258f8 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 10:31:59 +0200 Subject: [PATCH 4/9] Update minor dependencies --- navigator-html-injectables/package.json | 2 +- navigator/package.json | 4 +- pnpm-lock.yaml | 128 ++++++++++++------------ shared/package.json | 2 +- 4 files changed, 68 insertions(+), 68 deletions(-) diff --git a/navigator-html-injectables/package.json b/navigator-html-injectables/package.json index 7321e118..16760b76 100644 --- a/navigator-html-injectables/package.json +++ b/navigator-html-injectables/package.json @@ -51,7 +51,7 @@ }, "devDependencies": { "css-selector-generator": "^3.8.0", - "rimraf": "^6.1.2", + "rimraf": "^6.1.3", "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.1" diff --git a/navigator/package.json b/navigator/package.json index 7f905f5f..697f55cd 100644 --- a/navigator/package.json +++ b/navigator/package.json @@ -56,10 +56,10 @@ "@types/path-browserify": "^1.0.3", "css-selector-generator": "^3.8.0", "path-browserify": "^1.0.1", - "rimraf": "^6.1.2", + "rimraf": "^6.1.3", "tslib": "^2.8.1", "typescript": "^5.9.3", - "user-agent-data-types": "^0.4.2", + "user-agent-data-types": "^0.4.3", "vite": "^7.3.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51aaf60a..831296a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,8 +40,8 @@ importers: specifier: ^1.0.1 version: 1.0.1 rimraf: - specifier: ^6.1.2 - version: 6.1.2 + specifier: ^6.1.3 + version: 6.1.3 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -49,8 +49,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 user-agent-data-types: - specifier: ^0.4.2 - version: 0.4.2 + specifier: ^0.4.3 + version: 0.4.3 vite: specifier: ^7.3.1 version: 7.3.1(@types/node@25.0.9) @@ -65,8 +65,8 @@ importers: specifier: ^3.8.0 version: 3.8.0 rimraf: - specifier: ^6.1.2 - version: 6.1.2 + specifier: ^6.1.3 + version: 6.1.3 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -105,8 +105,8 @@ importers: specifier: ^30.2.0 version: 30.2.0(@types/node@25.0.9) rimraf: - specifier: ^6.1.2 - version: 6.1.2 + specifier: ^6.1.3 + version: 6.1.3 ts-jest: specifier: ^29.4.6 version: 29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.0.9))(typescript@5.9.3) @@ -878,14 +878,6 @@ packages: cpu: [x64] os: [win32] - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1383,6 +1375,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + baseline-browser-mapping@2.9.15: resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==} hasBin: true @@ -1390,8 +1386,12 @@ packages: brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1613,13 +1613,13 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.0: - resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1877,8 +1877,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + lru-cache@11.5.0: + resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -1905,22 +1905,22 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} ms@2.1.3: @@ -2008,9 +2008,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2080,8 +2080,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rimraf@6.1.2: - resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + rimraf@6.1.3: + resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==} engines: {node: 20 || >=22} hasBin: true @@ -2283,8 +2283,8 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - user-agent-data-types@0.4.2: - resolution: {integrity: sha512-jXep3kO/dGNmDOkbDa8ccp4QArgxR4I76m3QVcJ1aOF0B9toc+YtSXtX5gLdDTZXyWlpQYQrABr6L1L2GZOghw==} + user-agent-data-types@0.4.3: + resolution: {integrity: sha512-Dn3fjwVgeM363mx1sEgOpOp9NNqHBj6Gn68dFbV1WoTr3s05CijKdxfH6A3Q5uzXnYNB6vdAfs/1HWFpObc7EQ==} v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} @@ -3227,12 +3227,6 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -3770,6 +3764,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + baseline-browser-mapping@2.9.15: {} brace-expansion@1.1.11: @@ -3777,10 +3773,14 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -3981,16 +3981,16 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.9 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@13.0.0: + glob@13.0.6: dependencies: - minimatch: 10.1.1 - minipass: 7.1.2 - path-scurry: 2.0.1 + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: @@ -4427,7 +4427,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.5: {} + lru-cache@11.5.0: {} lru-cache@5.1.1: dependencies: @@ -4452,21 +4452,21 @@ snapshots: mimic-fn@2.1.0: {} - minimatch@10.1.1: + minimatch@10.2.5: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.6 minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.5: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} ms@2.1.3: {} @@ -4532,12 +4532,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: - lru-cache: 11.2.5 - minipass: 7.1.2 + lru-cache: 11.5.0 + minipass: 7.1.3 picocolors@1.1.1: {} @@ -4602,9 +4602,9 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rimraf@6.1.2: + rimraf@6.1.3: dependencies: - glob: 13.0.0 + glob: 13.0.6 package-json-from-dist: 1.0.1 rollup@4.55.2: @@ -4809,7 +4809,7 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - user-agent-data-types@0.4.2: {} + user-agent-data-types@0.4.3: {} v8-to-istanbul@9.3.0: dependencies: diff --git a/shared/package.json b/shared/package.json index 1ae20f7f..f915e124 100644 --- a/shared/package.json +++ b/shared/package.json @@ -66,7 +66,7 @@ "babel-jest": "^30.2.0", "css-selector-generator": "^3.8.0", "jest": "^30.2.0", - "rimraf": "^6.1.2", + "rimraf": "^6.1.3", "ts-jest": "^29.4.6", "tslib": "^2.8.1", "typescript": "^5.9.3", From eb7ce870b00e7b50ccc6bc78058414726a254326 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 10:36:30 +0200 Subject: [PATCH 5/9] Switch back to packageManager Unsurprinsingly devEngines support is meh --- package.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/package.json b/package.json index 402c880a..e344645d 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,5 @@ "navigator-html-injectables", "shared" ], - "devEngines": { - "packageManager": { - "name": "pnpm", - "version": "11.1.0", - "onFail": "warn" - } - } + "packageManager": "pnpm@11.1.0" } \ No newline at end of file From 776b1af7b348c54bc50e29d78f99ccba6926929e Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 15:30:00 +0200 Subject: [PATCH 6/9] fix dist names --- navigator-html-injectables/vite.config.js | 11 ++++++----- navigator/vite.config.js | 11 ++++++----- shared/vite.config.js | 11 ++++++----- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/navigator-html-injectables/vite.config.js b/navigator-html-injectables/vite.config.js index 57b99b3b..34efc024 100644 --- a/navigator-html-injectables/vite.config.js +++ b/navigator-html-injectables/vite.config.js @@ -4,15 +4,16 @@ import packageJson from "./package.json"; export default defineConfig({ build: { - lib: { - entry: resolve(__dirname, "src/index.ts"), - formats: ["es"], - }, rollupOptions: { + input: resolve(__dirname, "src/index.ts"), external: ["@readium/shared"], + preserveEntrySignatures: "strict", output: { + format: "es", preserveModules: true, - preserveModulesRoot: "src", + preserveModulesRoot: resolve(__dirname, "src"), + dir: "dist", + entryFileNames: "[name].js", } } }, diff --git a/navigator/vite.config.js b/navigator/vite.config.js index 0c70bbe2..c9d9dfeb 100644 --- a/navigator/vite.config.js +++ b/navigator/vite.config.js @@ -4,15 +4,16 @@ import packageJson from "./package.json"; export default defineConfig({ build: { - lib: { - entry: resolve(__dirname, "src/index.ts"), - formats: ["es"], - }, rollupOptions: { + input: resolve(__dirname, "src/index.ts"), external: ["@readium/shared", "@readium/navigator-html-injectables"], + preserveEntrySignatures: "strict", output: { + format: "es", preserveModules: true, - preserveModulesRoot: "src", + preserveModulesRoot: resolve(__dirname, "src"), + dir: "dist", + entryFileNames: "[name].js", } } }, diff --git a/shared/vite.config.js b/shared/vite.config.js index 7d31e933..17db1017 100644 --- a/shared/vite.config.js +++ b/shared/vite.config.js @@ -4,14 +4,15 @@ import packageJson from "./package.json"; export default defineConfig({ build: { - lib: { - entry: resolve(__dirname, "src/index.ts"), - formats: ["es"], - }, rollupOptions: { + input: resolve(__dirname, "src/index.ts"), + preserveEntrySignatures: "strict", output: { + format: "es", preserveModules: true, - preserveModulesRoot: "src", + preserveModulesRoot: resolve(__dirname, "src"), + dir: "dist", + entryFileNames: "[name].js", } } }, From 957dab22240d62f9c54673fef55b03cf637e754f Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 28 May 2026 16:53:06 +0200 Subject: [PATCH 7/9] Bump node versions in CI --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index cf3efc78..d3f511ea 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,7 +16,7 @@ jobs: working-directory: ./shared strategy: matrix: - node: ['20.x', '22.x'] + node: ['22.x', '24.x'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: From f958757edf1f0b67e2e687eff16003b9b0e194eb Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Fri, 29 May 2026 15:31:26 +0200 Subject: [PATCH 8/9] Vendor thorium locales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PNPM treats github scheme as exotic subdependency so this is an issue for consumers of the project. Thorium locales not being a package with proper semver, fetch files manually – we need to run it manually anyway. --- pnpm-lock.yaml | 10 - shared/README.MD | 15 +- shared/package.json | 5 +- shared/scripts/check-locales.mjs | 2 +- shared/scripts/update-locales.mjs | 28 ++ .../src/locales/publication-metadata/ar.json | 402 ++++++++++++++++++ .../src/locales/publication-metadata/da.json | 310 ++++++++++++++ .../src/locales/publication-metadata/el.json | 126 ++++++ .../src/locales/publication-metadata/en.json | 310 ++++++++++++++ .../src/locales/publication-metadata/es.json | 333 +++++++++++++++ .../src/locales/publication-metadata/et.json | 310 ++++++++++++++ .../src/locales/publication-metadata/fi.json | 310 ++++++++++++++ .../src/locales/publication-metadata/fr.json | 333 +++++++++++++++ .../src/locales/publication-metadata/he.json | 9 + .../src/locales/publication-metadata/it.json | 333 +++++++++++++++ .../src/locales/publication-metadata/lt.json | 8 + .../src/locales/publication-metadata/pl.json | 333 +++++++++++++++ .../locales/publication-metadata/pt_PT.json | 329 ++++++++++++++ .../src/locales/publication-metadata/sv.json | 310 ++++++++++++++ .../src/locales/publication-metadata/tr.json | 51 +++ .../src/locales/publication-metadata/uk.json | 1 + .../publication/accessibility/Localization.ts | 25 +- .../accessibility/SupportedLanguages.ts | 2 +- 23 files changed, 3858 insertions(+), 37 deletions(-) create mode 100644 shared/scripts/update-locales.mjs create mode 100644 shared/src/locales/publication-metadata/ar.json create mode 100644 shared/src/locales/publication-metadata/da.json create mode 100644 shared/src/locales/publication-metadata/el.json create mode 100644 shared/src/locales/publication-metadata/en.json create mode 100644 shared/src/locales/publication-metadata/es.json create mode 100644 shared/src/locales/publication-metadata/et.json create mode 100644 shared/src/locales/publication-metadata/fi.json create mode 100644 shared/src/locales/publication-metadata/fr.json create mode 100644 shared/src/locales/publication-metadata/he.json create mode 100644 shared/src/locales/publication-metadata/it.json create mode 100644 shared/src/locales/publication-metadata/lt.json create mode 100644 shared/src/locales/publication-metadata/pl.json create mode 100644 shared/src/locales/publication-metadata/pt_PT.json create mode 100644 shared/src/locales/publication-metadata/sv.json create mode 100644 shared/src/locales/publication-metadata/tr.json create mode 100644 shared/src/locales/publication-metadata/uk.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 831296a5..bc9a8c60 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,10 +78,6 @@ importers: version: 7.3.1(@types/node@25.0.9) shared: - dependencies: - '@edrlab/thorium-locales': - specifier: github:edrlab/thorium-locales - version: thorium-locales@https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c devDependencies: '@babel/core': specifier: ^7.28.6 @@ -2188,10 +2184,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - thorium-locales@https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c: - resolution: {gitHosted: true, tarball: https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c} - version: 1.0.0 - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -4720,8 +4712,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - thorium-locales@https://codeload.github.com/edrlab/thorium-locales/tar.gz/5783c457bef097845917288a329cb1d7c346c50c: {} - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) diff --git a/shared/README.MD b/shared/README.MD index 50a0db7d..612be40c 100644 --- a/shared/README.MD +++ b/shared/README.MD @@ -11,17 +11,18 @@ pnpm run test It will output the results in your shell. -To build: +Locale files from [edrlab/thorium-locales](https://github.com/edrlab/thorium-locales) are vendored in `src/locales/` and must be present before building. Update them when upstream changes: ```sh -pnpm run build +pnpm run update-locales ``` -It will output 6 files (`shared.js` and `shared.umd.cjs`, `fetcher.js` and `fetcher.cjs`) in `dist`. +This fetches all available locale files from the upstream repository and runs a coverage check. -To check the size limit: +To build: ```sh -# Check ths size limit is not exceeded -pnpm run size -``` \ No newline at end of file +pnpm run build +``` + +It will output files in `dist`. \ No newline at end of file diff --git a/shared/package.json b/shared/package.json index f915e124..fa40f2bd 100644 --- a/shared/package.json +++ b/shared/package.json @@ -53,10 +53,7 @@ "build": "pnpm clean && tsc && vite build", "test": "jest", "check-locales": "node scripts/check-locales.mjs", - "update-locales": "pnpm remove @edrlab/thorium-locales && pnpm add @edrlab/thorium-locales@github:edrlab/thorium-locales && pnpm check-locales" - }, - "dependencies": { - "@edrlab/thorium-locales": "github:edrlab/thorium-locales" + "update-locales": "node scripts/update-locales.mjs && node scripts/check-locales.mjs" }, "devDependencies": { "@babel/core": "^7.28.6", diff --git a/shared/scripts/check-locales.mjs b/shared/scripts/check-locales.mjs index ca637c60..65155ea7 100644 --- a/shared/scripts/check-locales.mjs +++ b/shared/scripts/check-locales.mjs @@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const localesPath = join(__dirname, '..', 'node_modules', '@edrlab', 'thorium-locales', 'publication-metadata'); +const localesPath = join(__dirname, '..', 'src', 'locales', 'publication-metadata'); function countKeys(obj) { diff --git a/shared/scripts/update-locales.mjs b/shared/scripts/update-locales.mjs new file mode 100644 index 00000000..64692ec4 --- /dev/null +++ b/shared/scripts/update-locales.mjs @@ -0,0 +1,28 @@ +import { writeFile, mkdir } from 'node:fs/promises'; +import { join, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { rimraf } from 'rimraf'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const destDir = join(__dirname, '../src/locales/publication-metadata'); +const API_URL = 'https://api.github.com/repos/edrlab/thorium-locales/contents/publication-metadata'; + +const entries = await fetch(API_URL, { + headers: { 'Accept': 'application/vnd.github+json', 'User-Agent': 'ts-toolkit' } +}).then(r => r.json()); + +if (!Array.isArray(entries)) { + console.error('Unexpected GitHub API response:', entries); + process.exit(1); +} + +await rimraf(destDir); +await mkdir(destDir, { recursive: true }); + +for (const file of entries.filter(f => f.name.endsWith('.json'))) { + const content = await fetch(file.download_url).then(r => r.text()); + await writeFile(join(destDir, file.name), content, 'utf-8'); + console.log(` ✓ ${file.name}`); +} + +console.log('\nDone. Run check-locales to see coverage.'); diff --git a/shared/src/locales/publication-metadata/ar.json b/shared/src/locales/publication-metadata/ar.json new file mode 100644 index 00000000..14734dd4 --- /dev/null +++ b/shared/src/locales/publication-metadata/ar.json @@ -0,0 +1,402 @@ +{ + "publication": { + "format": { + "audiobook": "كتاب صوتي", + "audiobookJSON": "ملف تعريف الكتاب الصوتي", + "cbz": "أرشيف الكتب المصورة", + "divina": "منشور Divina", + "divinaJSON": "ملف تعريفي لمنشور Divina", + "epub": "EPUB", + "lcpa": "كتاب صوتي محمي بـLCP", + "lcpdf": "PDF محمي بـLCP", + "lcpl": "مستند ترخيص LCP", + "pdf": "PDF", + "rwp": "منشور Readium Web", + "rwpm": "ملف تعريفي لمنشور Readium Publication", + "zab": "أرشيف الكتب الصوتية", + "zip": "أرشيف ملفات ZIP" + }, + "kind": { + "audiobook_few": "كتب صوتية", + "audiobook_many": "كتاب صوتي", + "audiobook_one": "كتاب صوتي واحد", + "audiobook_other": "كتاب صوتي", + "audiobook_two": "كتابان صوتيان", + "audiobook_zero": "لا يوجد كتب صوتية", + "book_few": "كتب", + "book_many": "كتاب", + "book_one": "كتاب واحد", + "book_other": "كتاب", + "book_two": "كتابان", + "book_zero": "لا يوجد كتب", + "comic_few": "كتب مصورة", + "comic_many": "كتاب مصور", + "comic_one": "كتاب مصور واحد", + "comic_other": "كتاب مصور", + "comic_two": "كتابان مصوران", + "comic_zero": "لا يوجد كتب مصورة", + "document_few": "مستندات", + "document_many": "مستند", + "document_one": "مستند واحد", + "document_other": "مستند", + "document_two": "مستندان", + "document_zero": "لا يوجد مستندات" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "لا تتوفر أي معلومات", + "publisher-contact": "لمزيد من المعلومات حول إمكانية الوصول إلى هذا المنتج، يُرجى التواصل مع الناشر: ", + "title": "ملخص إمكانية الوصول" + }, + "additional-accessibility-information": { + "aria": { + "compact": "أدوار ARIA مدرَجة", + "descriptive": "يتم تعزيز المحتوى باستخدام أدوار ARIA لتحسين التنظيم وتيسير التنقّل" + }, + "audio-descriptions": "الوصف الصوتي", + "braille": "برايل", + "color-not-sole-means-of-conveying-information": "اللون ليس الوسيلة الوحيدة لنقل المعلومات", + "dyslexia-readability": "سهولة القراءة لذوي عُسر القراءة", + "full-ruby-annotations": "شروح روبي كاملة", + "high-contrast-between-foreground-and-background-audio": "تباين عالٍ بين الصوت الرئيسي وصوت الخلفية", + "high-contrast-between-text-and-background": "تباين عالٍ بين النص والخلفية", + "large-print": "خط كبير", + "page-breaks": { + "compact": "فواصل الصفحات متضمَّنة", + "descriptive": "فواصل الصفحات متضمَّنة من المصدر المطبوع الأصلي" + }, + "ruby-annotations": "بعض شروح الروبي", + "sign-language": "لغة الإشارة", + "tactile-graphics": { + "compact": "الرسوم اللمسية مدرجة", + "descriptive": "تم دمج الرسوم اللمسية لتيسير الوصول إلى العناصر البصرية للأشخاص المكفوفين" + }, + "tactile-objects": "مجسمات لمسية ثلاثية الأبعاد", + "text-to-speech-hinting": "إرشادات تحويل النص إلى كلام (TTS)متوفرة", + "title": "معلومات إضافية عن إمكانية الوصول", + "ultra-high-contrast-between-text-and-background": "تباين عالٍ جدًا بين النص والخلفية", + "visible-page-numbering": "ترقيم صفحات مرئي", + "without-background-sounds": "من دون أصوات في خلفية" + }, + "conformance": { + "a": { + "compact": "هذا المنشور يفي بالمعايير الدنيا لإمكانية الوصول", + "descriptive": "يحتوي هذا المنشور على بيان مطابقة يفيد بأنه يفي بمعيار إمكانية الوصول في EPUB وبمستوى A من معيار WCAG 2" + }, + "aa": { + "compact": "هذا المنشور يفي بالمعايير المعتمدة لإمكانية الوصول", + "descriptive": "يحتوي هذا المنشور على بيان مطابقة يفيد بأنه يفي بمعيار إمكانية الوصول في EPUB وبمستوى AA من معيار WCAG 2" + }, + "aaa": { + "compact": "هذا المنشور يفوق المعايير المقبولة لإمكانية الوصول", + "descriptive": "يحتوي هذا المنشور على بيان مطابقة يفيد بأنه يفي بمعيار إمكانية الوصول في EPUB وبمستوى AAA من معيار WCAG 2" + }, + "certifier": "تم اعتماد هذا المنشور من قبل ", + "certifier-credentials": "بيانات اعتماد جهة التصديق ", + "details": { + "certification-info": "تم اعتماد هذا المنشور في تاريخ ", + "certifier-report": "لمزيد من المعلومات، يرجى الرجوع إلى تقرير جهة التصديق", + "claim": "يدّعي هذا المنشور أنه يستوفي", + "epub-accessibility-1-0": "معيار إمكانية الوصول لـ EPUB إصدار 1.0", + "epub-accessibility-1-1": "معيار إمكانية الوصول لـ EPUB إصدار 1.1", + "level-a": "المستوى A", + "level-aa": "المستوى AA", + "level-aaa": "المستوى AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "مبادئ النفاذ إلى محتوى الويب (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "مبادئ النفاذ إلى محتوى الويب (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "مبادئ النفاذ إلى محتوى الويب (WCAG) 2.2" + } + }, + "details-title": "معلومات تفصيلية عن مدى المطابقة", + "no": "لا تتوفر أي معلومات", + "title": "المطابقة", + "unknown-standard": "لا يمكن التأكد من مدى مطابقة هذا المنشور للمعايير المقبولة لإمكانية الوصول" + }, + "hazards": { + "flashing": { + "compact": "محتوى وامض", + "descriptive": "يحتوي هذا المنشور على محتوى وامض قد يسبب نوبات حساسة للضوء" + }, + "flashing-none": { + "compact": "لا توجد مخاطر وميض", + "descriptive": "لا يحتوي هذا المنشور على محتوى وامض قد يسبب نوبات حساسة للضوء" + }, + "flashing-unknown": { + "compact": "مخاطر الوميض غير معروفة", + "descriptive": "لم يُمكن التأكد من وجود محتوى وامض قد يسبب نوبات حساسية للضوء" + }, + "motion": { + "compact": "محاكاة الحركة", + "descriptive": "يحتوي المنشور على محاكاة حركة قد تسبّب دوار الحركة" + }, + "motion-none": { + "compact": "لا توجد مخاطر محاكاة الحركة", + "descriptive": "لا يحتوي المنشور على محاكاة حركة قد تسبّب دوار الحركة" + }, + "motion-unknown": { + "compact": "مخاطر محاكاة الحركة غير معروفة", + "descriptive": "تعذّر تحديد ما إذا كانت هناك محاكاة للحركة قد تُسبب دوار الحركة" + }, + "no-metadata": "لا تتوفر أي معلومات", + "none": { + "compact": "لا توجد مخاطر", + "descriptive": "لا يحتوي المنشور على أي مخاطر" + }, + "sound": { + "compact": "أصوات", + "descriptive": "يحتوي المنشور على أصوات قد تؤدي إلى مشاكل حساسية صوتية" + }, + "sound-none": { + "compact": "لا توجد مخاطر صوتية", + "descriptive": "لا يحتوي المنشور على أصوات قد تؤدي إلى مشاكل حساسية صوتية" + }, + "sound-unknown": { + "compact": "مخاطر الصوت غير معروفة", + "descriptive": "تعذّر تحديد ما إذا كانت هناك أصوات قد تُسبب مشكلات في الحساسية" + }, + "title": "مخاطر", + "unknown": "وجود المخاطر غير معروف" + }, + "legal-considerations": { + "exempt": { + "compact": "يُعلن عن استثناء من متطلبات إمكانية الوصول من بعض السلطات القضائية", + "descriptive": "يُصرّح هذا المنشور بوجود استثناء من متطلبات إمكانية الوصول من بعض السلطات القضائية" + }, + "no-metadata": "لا تتوفر أي معلومات", + "title": "اعتبارات قانونية" + }, + "navigation": { + "index": { + "compact": "كشاف", + "descriptive": "كشاف يحتوي على روابط إلى الإدخالات المشار إليها" + }, + "no-metadata": "لا تتوفر أي معلومات", + "page-navigation": { + "compact": "الانتقال إلى صفحة", + "descriptive": "قائمة الصفحات للانتقال إلى صفحات من النسخة المطبوعة الأصلية" + }, + "structural": { + "compact": "العناوين", + "descriptive": "عناصر مثل العناوين والجداول وغيرها للتنقل المنظّم" + }, + "title": "التنقل", + "toc": { + "compact": "جدول المحتويات", + "descriptive": "جدول المحتويات لكل فصول النص عبر روابط" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "الصيغ الكيميائية بصيغة LaTeX", + "descriptive": "الصيغ الكيميائية بشكل ميسر (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "الصيغ الكيميائية بصيغة MathML", + "descriptive": "الصيغ الكيميائية بشكل ميسر (MathML)" + }, + "accessible-math-as-latex": { + "compact": "الرياضيات بصيغة LaTeX", + "descriptive": "الصيغ الرياضية بشكل ميسر (LaTeX)" + }, + "accessible-math-described": "تتوفر أوصاف نصية للصيغ الرياضية", + "closed-captions": { + "compact": "تحتوي الفيديوهات على شروح مغلقة", + "descriptive": "الفيديوهات الموجودة في المنشورات تحتوي على شروح مغلقة" + }, + "extended-descriptions": "يتم وصف الصور الغنية بالمعلومات بأوصاف مفصّلة", + "math-as-mathml": { + "compact": "الرياضيات بصيغة MathML", + "descriptive": "الصيغ الرياضية بشكل ميسر(MathML)" + }, + "open-captions": { + "compact": "تحتوي الفيديوهات على شروح مدمجة", + "descriptive": "الفيديوهات الموجودة في المنشورات تحتوي على شروح مدمجة" + }, + "title": "محتوى غني", + "transcript": "يتوفر نص(نصوص)", + "unknown": "لا تتوفر أي معلومات" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "يحتوي على نص بديل", + "descriptive": "يحتوي على أوصاف نصية بديلة للصور" + }, + "no-metadata": "لا تتوفر معلومات عن القراءة غير البصرية", + "none": { + "compact": "غير قابل للقراءة بصوتٍ عالٍ أو بطريقة برايل الديناميكية", + "descriptive": "المحتوى غير قابل للقراءة بصوتٍ عالٍ أو بطريقة برايل الديناميكية" + }, + "not-fully": { + "compact": "غير قابل للقراءة بالكامل بصوتٍ عالٍ أو بطريقة برايل الديناميكية", + "descriptive": "لن يكون كل المحتوى قابلًا للقراءة بصوتٍ عالٍ أو بطريقة برايل الديناميكية" + }, + "readable": { + "compact": "قابل للقراءة بصوتٍ عالٍ أو بطريقة برايل الديناميكية", + "descriptive": "يمكن قراءة كل المحتوى بصوتٍ عالٍ أو بطريقة برايل الديناميكية" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "مقاطع الصوت المسجّلة مسبقًا", + "descriptive": "مقاطع الصوت المسجّلة مسبقًا مدمجة في المحتوى" + }, + "no-metadata": "لا توجد معلومات عن الصوت المسجّل مسبقًا", + "only": { + "compact": "الصوت المسجّل مسبقًا فقط", + "descriptive": "كتاب صوتي بدون بديل نصي" + }, + "synchronized": { + "compact": "صوت مسجّل مسبقًا متزامن مع النص", + "descriptive": "كل المحتوى متوفر كصوت مسجّل مسبقًا متزامن مع النص" + } + }, + "title": "طرق القراءة", + "visual-adjustments": { + "modifiable": { + "compact": "يمكن تعديل المظهر", + "descriptive": "يمكن تعديل مظهر النص وتخطيط الصفحة وفقاً لإمكانات نظام القراءة (اسم الخط وحجمه، والمسافات بين الفقرات والجمل والكلمات والأحرف، بالإضافة إلى لون الخلفية والنص)" + }, + "unknown": "لا توجد معلومات عن إمكانية تعديل المظهر", + "unmodifiable": { + "compact": "لا يمكن تعديل المظهر", + "descriptive": "لا يمكن تعديل مظهر النص وتخطيط الصفحات لأن تجربة القراءة قريبة من النسخة المطبوعة، ولكن تطبيقات القراءة ما زالت تتيح خيارات التكبير" + } + } + } + } + }, + "altIdentifier_few": "رموز تعريفية بديلة", + "altIdentifier_many": "رمز تعريفي بديل", + "altIdentifier_one": "رمز تعريفي بديل واحد", + "altIdentifier_other": "رمز تعريفي بديل", + "altIdentifier_two": "رمزان تعريفيان بديلان", + "altIdentifier_zero": "لا يوجد رموز تعريفية بديلة", + "artist_few": "فنانون", + "artist_many": "فنان", + "artist_one": "فنان", + "artist_other": "فنانون", + "artist_two": "فنانان", + "artist_zero": "لا يوجد فنانون", + "author_few": "مؤلفون", + "author_many": "مؤلف", + "author_one": "مؤلف واحد", + "author_other": "مؤلفون", + "author_two": "مؤلفان", + "author_zero": "لا يوجد مؤلفون", + "collection_few": "سلاسل تحريرية", + "collection_many": "سلسلة تحريرية", + "collection_one": "سلسلة تحريرية", + "collection_other": "سلاسل تحريرية", + "collection_two": "سلسلتان تحريريتان", + "collection_zero": "لا يوجد أي سلسلة تحريرية", + "colorist_few": "ملوّنو الألوان", + "colorist_many": "ملون ألوان", + "colorist_one": "ملوّن الألوان", + "colorist_other": "ملوّنو الألوان", + "colorist_two": "ملونان ألوان", + "colorist_zero": "لا يوجد ملونو ألوان", + "contributor_few": "مساهمون", + "contributor_many": "مساهم", + "contributor_one": "مساهم", + "contributor_other": "مساهمون", + "contributor_two": "مساهمان", + "contributor_zero": "لا يوجد مساهمون", + "description": "وصف", + "duration": "مدة", + "editor_few": "محررون", + "editor_many": "محرر", + "editor_one": "محرر", + "editor_other": "محررون", + "editor_two": "محرران", + "editor_zero": "لا يوجد محررون", + "identifier_few": "رموز تعريفية", + "identifier_many": "رمز تعريفي", + "identifier_one": "رمز تعريفي", + "identifier_other": "رموز تعريفية", + "identifier_two": "رمزان تعريفيان", + "identifier_zero": "لا يوجد رموز تعريفية", + "illustrator_few": "رسّامون", + "illustrator_many": "رسّام", + "illustrator_one": "رسّام", + "illustrator_other": "رسامون", + "illustrator_two": "رسّامان", + "illustrator_zero": "لا يوجد رسّ امون", + "imprint_few": "علامات تجارية", + "imprint_many": "علامة تجارية", + "imprint_one": "العلامة التجارية للنشر", + "imprint_other": "العلامات التجارية للنشر", + "imprint_two": "علامتان تجاريتان", + "imprint_zero": "لا يوجد علامات تجارية", + "inker_few": "مُحَبِّرون", + "inker_many": "مُحَبّر", + "inker_one": "مُحَبِّر", + "inker_other": "مُحَبِّرون", + "inker_two": "مُحبّران", + "inker_zero": "لا يوجد مُحَبِّرون", + "language_few": "لغات", + "language_many": "لغة", + "language_one": "لغة", + "language_other": "لغة", + "language_two": "لغتان", + "language_zero": "لا يوجد لغات", + "letterer_few": "خطّاطون", + "letterer_many": "خطّاط", + "letterer_one": "خطّاط", + "letterer_other": "خطّاطون", + "letterer_two": "خطّاطان", + "letterer_zero": "لا يوجد خطّاطون", + "modified": "تاريخ التعديل", + "narrator_few": "قراء صوتيون", + "narrator_many": "قارئ صوتي", + "narrator_one": "قارئ صوتي", + "narrator_other": "قرّاء صوتيون", + "narrator_two": "قارئان صوتيان", + "narrator_zero": "لا يوجد قرّاء صوتيون", + "numberOfPages": "عدد الصفحات في النسخة المطبوعة", + "penciler_few": "رسّامون أوّليون", + "penciler_many": "رسّام أولي", + "penciler_one": "رسّام أولي", + "penciler_other": "رسّامون أوّليون", + "penciler_two": "رسامان أوّليان", + "penciler_zero": "لا يوجد رسّامون أوّليون", + "published": "تاريخ النشر", + "publisher_few": "ناشرون", + "publisher_many": "ناشر", + "publisher_one": "ناشر", + "publisher_other": "ناشرون", + "publisher_two": "ناشران", + "publisher_zero": "لا يوجد ناشرون", + "series_few": "سلاسل", + "series_many": "سلسلة", + "series_one": "سلسلة", + "series_other": "سلاسل", + "series_two": "سلسلتان", + "series_zero": "لا يوجد سلاسل", + "subject_few": "مواضيع", + "subject_many": "موضوع", + "subject_one": "موضوع", + "subject_other": "مواضيع", + "subject_two": "موضوعان", + "subject_zero": "لا يوجد مواضيع", + "subtitle": "عنوان فرعي", + "title": "العنوان", + "translator_few": "مترجمون", + "translator_many": "مترجم", + "translator_one": "مترجم", + "translator_other": "مترجمون", + "translator_two": "مترجمان", + "translator_zero": "لا يوجد مترجمون" + } + } +} diff --git a/shared/src/locales/publication-metadata/da.json b/shared/src/locales/publication-metadata/da.json new file mode 100644 index 00000000..44c968d2 --- /dev/null +++ b/shared/src/locales/publication-metadata/da.json @@ -0,0 +1,310 @@ +{ + "publication": { + "format": { + "audiobook": "Lydbog", + "audiobookJSON": "Lydbogs manifest", + "cbz": "Tegneserie (CBZ-arkiv)", + "divina": "Divina bog", + "divinaJSON": "Divina manifest", + "epub": "EPUB", + "lcpa": "LCP-beskyttet lydbog", + "lcpdf": "LCP-beskyttet PDF", + "lcpl": "LCP-licensdokument", + "pdf": "PDF", + "rwp": "Readium Web bog", + "rwpm": "Readium Web manifest", + "zab": "Lydbog (arkiv)", + "zip": "ZIP-arkiv" + }, + "kind": { + "audiobook_one": "lydbog", + "audiobook_other": "lydbøger", + "book_one": "bog", + "book_other": "bøger", + "comic_one": "tegneserie", + "comic_other": "tegneserier", + "document_one": "dokument", + "document_other": "dokumenter" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Ingen information tilgængelig", + "publisher-contact": "For mere information om tilgængeligheden af denne bog, kontakt venligst udgiveren: ", + "title": "Tilgængeligheds-oversigt" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Indeholder ARIA roller", + "descriptive": "Indhold forbedres med ARIA-roller for at optimere organisering og gøre navigation lettere" + }, + "audio-descriptions": "Lydbeskrivelser", + "braille": "Punktskrift (braille)", + "color-not-sole-means-of-conveying-information": "Information gives ikke udelukkende via farver", + "dyslexia-readability": "Læsbarhed for ordblinde", + "full-ruby-annotations": "Indeholder såkalde \"ruby\" notationer (til asiatiske sprog)", + "high-contrast-between-foreground-and-background-audio": "Høj kontrast imellem forgrunds- og baggrunds-lyd", + "high-contrast-between-text-and-background": "Høj kontrast imellem tekst og baggrunden", + "large-print": "Forstørret tekst", + "page-breaks": { + "compact": "Indeholder sideskift", + "descriptive": "Indeholder sideskift fra den trykte version af bogen" + }, + "ruby-annotations": "Nogle \"ruby\" annotationer (til asiatiske sprog)", + "sign-language": "Tegnsprog", + "tactile-graphics": { + "compact": "Indeholder taktil grafik", + "descriptive": "Indeholder taktil grafik for at muliggøre adgang til visuel information for blinde" + }, + "tactile-objects": "Taktile 3D objekter", + "text-to-speech-hinting": "Udtaleforbedringer til syntetisk tale", + "title": "Yderligere information om tilgængelighed", + "ultra-high-contrast-between-text-and-background": "Ultra høj kontrast imellem tekst og baggrund", + "visible-page-numbering": "Synlige sidenumre", + "without-background-sounds": "Uden baggrundslyd" + }, + "conformance": { + "a": { + "compact": "Denne bog overholder minimum-tilgængelighedskravene", + "descriptive": "Denne bog en overensstemmelseserklæring om, at den opfylder EPUB Tilgængelighedskrav og WCAG 2 standarden på niveau A" + }, + "aa": { + "compact": "Denne bog lever op til de accepterede tilgængelighedskrav", + "descriptive": "Denne bog en overensstemmelseserklæring om, at den opfylder EPUB Tilgængelighedskrav og WCAG 2 standarden på niveau AA" + }, + "aaa": { + "compact": "Denne bog mere end opfylder de accepterede tilgængelighedskrav", + "descriptive": "Denne bog en overensstemmelseserklæring om, at den opfylder EPUB Tilgængelighedskrav og WCAG 2 standarden på niveau AAA" + }, + "certifier": "Denne bog blev certificeret af ", + "certifier-credentials": "Certificeringsorganets legitimationsoplysninger er ", + "details": { + "certification-info": "Bogen blev certificeret den ", + "certifier-report": "Se certificeringsorganets rapport for mere information", + "claim": "Denne bog hævder at opfylde", + "epub-accessibility-1-0": "EPUB Tilgængelighed 1.0", + "epub-accessibility-1-1": "EPUB Tilgængelighed 1.1", + "level-a": "Niveau A", + "level-aa": "Niveau AA", + "level-aaa": "Niveau AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Retningslinjer for tilgængeligt webindhold (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Retningslinjer for tilgængeligt webindhold (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Retningslinjer for tilgængeligt webindhold (WCAG) 2.2" + } + }, + "details-title": "Detaljeret overholdelses-information", + "no": "Ingen information tilgængelig", + "title": "Overholdelse", + "unknown-standard": "Overholdelse af de accepterede tilgængelighedskrav kan ikke vurderes for denne bog" + }, + "hazards": { + "flashing": { + "compact": "Blinkende indhold", + "descriptive": "Bogen indeholder blinkende indhold der kan forårsage epileptiske anfald" + }, + "flashing-none": { + "compact": "Ingen blinkende indhold", + "descriptive": "Bogen indeholder ikke noget blinkende indhold, der kunne forårsage epileptiske anfald" + }, + "flashing-unknown": { + "compact": "Ingen information om bogen har blinkende indhold", + "descriptive": "Det kunne ikke afgøres om bogen indeholder blinkende indhold der kan lede til epileptiske anfald" + }, + "motion": { + "compact": "Simuleret bevægelse", + "descriptive": "Bogen indeholder simuleret bevægelse, der kan forårsage en følelse af køresyge" + }, + "motion-none": { + "compact": "Indeholder ikke simuleret bevægelse", + "descriptive": "Denne bog indeholder ikke noget indhold med simuleret bevægelse, der kunne lede til en følelse af køresyge" + }, + "motion-unknown": { + "compact": "Ingen information om simuleret bevægelse", + "descriptive": "Det kunne ikke vurderes om bogen indeholder simuleret bevægelse, der kan lede til en følelse af køresyge" + }, + "no-metadata": "Ingen information tilgængelig", + "none": { + "compact": "Ingen farer", + "descriptive": "Bogen indeholder ikke noget indhold der kategoriseres som farligt" + }, + "sound": { + "compact": "Lyde", + "descriptive": "Bogen indeholder lyde der kan være ubehagelige hvis man er sensitiv overfor lyde" + }, + "sound-none": { + "compact": "Ingen ubehagelige lyde", + "descriptive": "Bogen indeholder ikke lyde der kunne opleves som ubehagelige hvis man er sensitiv overfor lyde" + }, + "sound-unknown": { + "compact": "Ingen information om ubehagelige lyde", + "descriptive": "Det kunne ikke afgøres om bogen indeholder ubehagelige lyde" + }, + "title": "Farer", + "unknown": "Ingen information om farligt indhold" + }, + "legal-considerations": { + "exempt": { + "compact": "Gør krav på undtagelser fra tilgængelighedskrav", + "descriptive": "Denne bog gør krav på en tilgængelighedsundtagelse i en eller flere jurisdiktioner" + }, + "no-metadata": "Ingen information tilgængelig", + "title": "Juridiske overvejelser" + }, + "navigation": { + "index": { + "compact": "Indholdsfortegnelse", + "descriptive": "Indholdsfortegnelse med links til referencer" + }, + "no-metadata": "Ingen information tilgængelig", + "page-navigation": { + "compact": "Gå til side", + "descriptive": "Sideliste for at gå til sider fra den trykte kildeversion" + }, + "structural": { + "compact": "Overskrifter", + "descriptive": "Elementer så som overskrifter og tabeller til struktureret navigation" + }, + "title": "Navigation", + "toc": { + "compact": "Indholdsfortegnelse", + "descriptive": "Indholdsfortegnelse med links til alle kapitler" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Kemiske formularer i LaTeX", + "descriptive": "Kemiske formularer i tilgængeligt format (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Kemiske formularer i MathML notation", + "descriptive": "Kemiske formularer i tilgængeligt format (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matematik som LaTeX", + "descriptive": "Matematikformler i tilgængeligt format (LaTeX)" + }, + "accessible-math-described": "Tekstbeskrivelser til matematiske formler", + "closed-captions": { + "compact": "Videoer har undertekster", + "descriptive": "Videoer der optræder i bogen har undertekster" + }, + "extended-descriptions": "Informationsrige billeder beskrives med udvidede beskrivelser", + "math-as-mathml": { + "compact": "Matematik som MathML", + "descriptive": "Matematiske formler i tilgængeligt format (MathML)" + }, + "open-captions": { + "compact": "Videoer har indlejrede undertekster", + "descriptive": "Videoer der optræder i bogen har indlejrede undertekster" + }, + "title": "Komplekst indhold", + "transcript": "Indeholder transskription(er)", + "unknown": "Ingen information tilgængelig" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Har alternativ tekst", + "descriptive": "Har billedbeskrivelser" + }, + "no-metadata": "Ingen information omkring ikke-visuel læsning", + "none": { + "compact": "Ikke læsbar med oplæsning eller dynamisk punktskrift", + "descriptive": "Dette indhold er ikke læsbart med oplæsning eller dynamisk punktskrift" + }, + "not-fully": { + "compact": "Ikke fuldt læsbar med oplæsning eller dynamisk punktskrift", + "descriptive": "Alt indholdet er ikke fuldt læsbart med oplæsning eller dynamisk punktskrift" + }, + "readable": { + "compact": "Læsbar med oplæsning eller dynamisk punktskrift", + "descriptive": "Alt indholdet er læsbart med oplæsning eller dynamisk punktskrift" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Indlæste lydklip", + "descriptive": "Indlæste lydklip er indlejret i indholdet" + }, + "no-metadata": "Ingen information om indlæst lyd", + "only": { + "compact": "Kun indlæst lyd", + "descriptive": "Lydbog uden tekst alternativer" + }, + "synchronized": { + "compact": "Indlæst lyd med synkroniseret tekst", + "descriptive": "Alt indholdet er tilgængeligt med indlæst lyd og synkroniseret tekst" + } + }, + "title": "Læseformer", + "visual-adjustments": { + "modifiable": { + "compact": "Udseende kan ændres", + "descriptive": "Udseende af tekst og sidelayout kan ændres, så vidt muligt i læsesystemet (skrifttype, skriftstørrelse, afstand mellem afsnit, sætninger, ord og bogstaver, samt farven på tekst og baggrund)" + }, + "unknown": "Ingen information om mulighed for ændring af udseende", + "unmodifiable": { + "compact": "Udseende kan ikke ændres", + "descriptive": "Tekst og sidelayout kan ikke ændres, da læseoplevelsen afspejler den trykte version af materialet. Læsesystemet kan dog stadig give mulighed for zoom" + } + } + } + } + }, + "altIdentifier_one": "alternativ identifikator", + "altIdentifier_other": "alternative identifikatorer", + "artist_one": "kunstner", + "artist_other": "kunstnere", + "author_one": "forfatter", + "author_other": "forfattere", + "collection_one": "redaktionel samling", + "collection_other": "redaktionelle samlinger", + "colorist_one": "farvelægger", + "colorist_other": "farvelæggere", + "contributor_one": "bidragsyder", + "contributor_other": "bidragsydere", + "description": "beskrivelse", + "duration": "varighed", + "editor_one": "redaktør", + "editor_other": "redaktører", + "identifier_one": "identifikator", + "identifier_other": "identifikatorer", + "illustrator_one": "illustrator", + "illustrator_other": "illustratorer", + "imprint_one": "forlagsaftryk", + "imprint_other": "forlagsaftryk", + "inker_one": "tegner", + "inker_other": "tegnere", + "language_one": "sprog", + "language_other": "sprog", + "letterer_one": "taleboble-forfatter", + "letterer_other": "taleboble-forfattere", + "modified": "rettet dato", + "narrator_one": "indlæser", + "narrator_other": "indlæsere", + "numberOfPages": "printbare sider", + "penciler_one": "tegneseriekunstner", + "penciler_other": "tegneseriekunstnere", + "published": "udgivelsesdato", + "publisher_one": "udgiver", + "publisher_other": "udgivere", + "series_one": "serie", + "series_other": "serier", + "subject_one": "emne", + "subject_other": "emner", + "subtitle": "undertitel", + "title": "titel", + "translator_one": "oversætter", + "translator_other": "oversættere" + } + } +} diff --git a/shared/src/locales/publication-metadata/el.json b/shared/src/locales/publication-metadata/el.json new file mode 100644 index 00000000..fd340044 --- /dev/null +++ b/shared/src/locales/publication-metadata/el.json @@ -0,0 +1,126 @@ +{ + "publication": { + "format": { + "audiobook": "Ακουστικό βιβλίο", + "audiobookJSON": "Έκδοση ακουστικού βιβλίου", + "cbz": "Αρχείο βιβλίων κόμικς", + "divina": "Divina έκδοση", + "divinaJSON": "Διακήρυξη έκδοσης Divina", + "epub": "Μορφή EPUB", + "lcpa": "LCP προστατευμένο ακουστικό βιβλίο", + "lcpdf": "LCP προστατευμένο PDF", + "lcpl": "LCP Έγγραφο άδειας", + "pdf": "Έκδοση PDF", + "rwp": "Readium Web έκδοσης", + "rwpm": "Διακήρυξη Readium Web έκδοσης", + "zab": "Αρχείο ακουστικών βιβλίων", + "zip": "Αρχείο ZIP" + }, + "kind": { + "audiobook_one": "ακουστικό βιβλίο", + "audiobook_other": "ακουστικά βιβλίας", + "book_one": "βιβλίο", + "book_other": "βιβλία", + "comic_one": "κόμικ", + "comic_other": "κόμικς", + "document_one": "έγγραφο", + "document_other": "έγγραφα" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Καμιά πληροφορία διαθέσιμη", + "publisher-contact": "Για περισσότερες πληροφορίες σχετικά με αυτό τοτ προϊόν, παρακαλούμε επικοινωνήστε με τον εκδότη: ", + "title": "Σύνοψη προσβασιμότητας" + }, + "additional-accessibility-information": { + "aria": { + "compact": "ARIA roles περιέχονται", + "descriptive": "Το περιεχόμενο έχει εμπλουτιστεί με ARIA roles για τη βελτιστοποίηση της οργάνωσης και τη διευκόλυνση της πλοήγησης" + }, + "audio-descriptions": "Ακουστική περιγραφή", + "braille": "Braille μορφή", + "color-not-sole-means-of-conveying-information": "Το χρώμα δεν είναι το μόνο μέσο για τη διαβίβαση της πληροφορίας", + "dyslexia-readability": "Αναγνωσιμότητα προσαρμοσμένη σε άτομα με δυσλεξία", + "full-ruby-annotations": "Πλήρεις σχολιασμοί σε μορφή ruby", + "high-contrast-between-foreground-and-background-audio": "Υψηλή αντίθεση μεταξύ ήχου μπροστά και πίσω", + "high-contrast-between-text-and-background": "Υψηλή αντίθεση μεταξύ κείμενο πρώτου πλάνου και φόντου", + "large-print": "Μεγάλα στοιχεία", + "page-breaks": { + "compact": "Περιλαμβάνονται αλλαγές σελίδας", + "descriptive": "Περιλαμβάνονται αλλαγές σελίδας από την πρωτότυπη έντυπη έκδοση" + }, + "ruby-annotations": "Μερικά Ruby σχόλια", + "sign-language": "Νοηματική γλώσσα", + "tactile-graphics": { + "compact": "Περιλαμβάνονται απτικά γραφικά", + "descriptive": "Έχουν ενσωματωθεί απτικές γραφικές παραστάσεις για να διευκολύνουν την πρόσβαση των τυφλών σε οπτικά στοιχεία" + }, + "tactile-objects": "Απτικά 3D αντικείμενα", + "text-to-speech-hinting": "Παρέχεται υπόδειξη για βελτίωση απόδοσης κειμένου με συνθετική φωνή", + "title": "Πρόσθετες πληροφορίες προσβασιμότητας", + "ultra-high-contrast-between-text-and-background": "Εξαιρετικά υψηλή αντίθεση μεταξύ κειμένου και φόντου", + "visible-page-numbering": "Ορατή αρίθμηση σελίδων", + "without-background-sounds": "Χωρίς ήχους φόντου" + }, + "conformance": { + "a": { + "compact": "Η παρούσα έκδοση πληροί τα ελάχιστα πρότυπα προσβασιμότητας", + "descriptive": "Η έκδοση περιέχει δήλωση συμμόρφωσης ότι πληροί τα πρότυπα EPUB Accessibility και WCAG 2 Level A" + }, + "aa": { + "compact": "Η παρούσα έκδοση πληροί τα αποδεκτά πρότυπα προσβασιμότητας", + "descriptive": "Η έκδοση περιέχει δήλωση συμμόρφωσης ότι πληροί τα πρότυπα EPUB Accessibility και WCAG 2 Level AA" + }, + "aaa": { + "compact": "Αυτή η έκδοση υπερβαίνει τα αποδεκτά πρότυπα προσβασιμότητας", + "descriptive": "Η έκδοση περιέχει δήλωση συμμόρφωσης ότι πληροί τα πρότυπα EPUB Accessibility και WCAG 2 Level AAA" + }, + "certifier": "Η έκδοση έχει πιστοποιηθεί από ", + "certifier-credentials": "Τα διαπιστευτήρια του πιστοποιητή είναι ", + "details": { + "certification-info": "Η έκδοση πιστοποιήθηκε στις ", + "certifier-report": "Για περισσότερες πληροφορίες, δείτε την έκθεση του πιστοποιητή", + "claim": "Η παρούσα έκδοση υποστηρίζει ότι πληροί", + "epub-accessibility-1-0": "έκδοση EPUB Accessibility 1.0", + "epub-accessibility-1-1": "έκδοση EPUB Accessibility 1.1", + "level-a": "Επίπεδο Α", + "level-aa": "Επίπεδο ΑΑ", + "level-aaa": "Επίπεδο ΑΑΑ", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Οδηγίες προσβασιμότητας Web περιεχομένου (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Οδηγίες προσβασιμότητας Web περιεχομένου (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Οδηγίες προσβασιμότητας Web περιεχομένου (WCAG) 2.2" + } + }, + "details-title": "Πληροφορίες σχετικά με τη συμμόρφωση", + "no": "Δεν υπάρχουν διαθέσιμες πληροφορίες", + "title": "Συμμόρφωση", + "unknown-standard": "Η συμμόρφωση με τα αποδεκτά πρότυπα προσβασιμότητας της παρούσας έκδοσης δεν μπορεί να προσδιοριστεί" + }, + "hazards": { + "flashing": { + "compact": "Αναβοσβήνων περιεχόμενο", + "descriptive": "Η έκδοση περιέχει περιεχόμενο που αναβοσβήνει και μπορεί να προκαλέσει φωτοευαίσθητες κρίσεις" + }, + "flashing-none": { + "compact": "Χωρίς κίνδυνο από φλας", + "descriptive": "Η έκδοση δεν περιέχει περιεχόμενο που αναβοσβήνει, το οποίο μπορεί να προκαλέσει φωτοευαίσθητες κρίσεις" + }, + "flashing-unknown": { + "compact": "Δεν υπάρχουν πληροφορίες σχετικά με φωτεινές αναλαμπές" + } + } + } + } + } + } +} diff --git a/shared/src/locales/publication-metadata/en.json b/shared/src/locales/publication-metadata/en.json new file mode 100644 index 00000000..a09ab3f9 --- /dev/null +++ b/shared/src/locales/publication-metadata/en.json @@ -0,0 +1,310 @@ +{ + "publication": { + "format": { + "audiobook": "Audiobook", + "audiobookJSON": "Audiobook Manifest", + "cbz": "Comic Book Archive", + "divina": "Divina Publication", + "divinaJSON": "Divina Publication Manifest", + "epub": "EPUB", + "lcpa": "LCP Protected Audiobook", + "lcpdf": "LCP Protected PDF", + "lcpl": "LCP License Document", + "pdf": "PDF", + "rwp": "Readium Web Publication", + "rwpm": "Readium Web Publication Manifest", + "zab": "Audiobook Archive", + "zip": "ZIP Archive" + }, + "kind": { + "audiobook_one": "audiobook", + "audiobook_other": "audiobooks", + "book_one": "book", + "book_other": "books", + "comic_one": "comic", + "comic_other": "comics", + "document_one": "document", + "document_other": "documents" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "No information is available", + "publisher-contact": "For more information about the accessibility of this product, please contact the publisher: ", + "title": "Accessibility summary" + }, + "additional-accessibility-information": { + "aria": { + "compact": "ARIA roles included", + "descriptive": "Content is enhanced with ARIA roles to optimize organization and facilitate navigation" + }, + "audio-descriptions": "Audio descriptions", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "Color is not the sole means of conveying information", + "dyslexia-readability": "Dyslexia readability", + "full-ruby-annotations": "Full ruby annotations", + "high-contrast-between-foreground-and-background-audio": "High contrast between foreground and background audio", + "high-contrast-between-text-and-background": "High contrast between foreground text and background", + "large-print": "Large print", + "page-breaks": { + "compact": "Page breaks included", + "descriptive": "Page breaks included from the original print source" + }, + "ruby-annotations": "Some Ruby annotations", + "sign-language": "Sign language", + "tactile-graphics": { + "compact": "Tactile graphics included", + "descriptive": "Tactile graphics have been integrated to facilitate access to visual elements for blind people" + }, + "tactile-objects": "Tactile 3D objects", + "text-to-speech-hinting": "Text-to-speech hinting provided", + "title": "Additional accessibility information", + "ultra-high-contrast-between-text-and-background": "Ultra high contrast between text and background", + "visible-page-numbering": "Visible page numbering", + "without-background-sounds": "Without background sounds" + }, + "conformance": { + "a": { + "compact": "This publication meets minimum accessibility standards", + "descriptive": "The publication contains a conformance statement that it meets the EPUB Accessibility and WCAG 2 Level A standard" + }, + "aa": { + "compact": "This publication meets accepted accessibility standards", + "descriptive": "The publication contains a conformance statement that it meets the EPUB Accessibility and WCAG 2 Level AA standard" + }, + "aaa": { + "compact": "This publication exceeds accepted accessibility standards", + "descriptive": "The publication contains a conformance statement that it meets the EPUB Accessibility and WCAG 2 Level AAA standard" + }, + "certifier": "The publication was certified by ", + "certifier-credentials": "The certifier's credential is ", + "details": { + "certification-info": "The publication was certified on ", + "certifier-report": "For more information refer to the certifier's report", + "claim": "This publication claims to meet", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "Level A", + "level-aa": "Level AA", + "level-aaa": "Level AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.2" + } + }, + "details-title": "Detailed conformance information", + "no": "No information is available", + "title": "Conformance", + "unknown-standard": "Conformance to accepted standards for accessibility of this publication cannot be determined" + }, + "hazards": { + "flashing": { + "compact": "Flashing content", + "descriptive": "The publication contains flashing content that can cause photosensitive seizures" + }, + "flashing-none": { + "compact": "No flashing hazards", + "descriptive": "The publication does not contain flashing content that can cause photosensitive seizures" + }, + "flashing-unknown": { + "compact": "Flashing hazards not known", + "descriptive": "The presence of flashing content that can cause photosensitive seizures could not be determined" + }, + "motion": { + "compact": "Motion simulation", + "descriptive": "The publication contains motion simulations that can cause motion sickness" + }, + "motion-none": { + "compact": "No motion simulation hazards", + "descriptive": "The publication does not contain motion simulations that can cause motion sickness" + }, + "motion-unknown": { + "compact": "Motion simulation hazards not known", + "descriptive": "The presence of motion simulations that can cause motion sickness could not be determined" + }, + "no-metadata": "No information is available", + "none": { + "compact": "No hazards", + "descriptive": "The publication contains no hazards" + }, + "sound": { + "compact": "Sounds", + "descriptive": "The publication contains sounds that can cause sensitivity issues" + }, + "sound-none": { + "compact": "No sound hazards", + "descriptive": "The publication does not contain sounds that can cause sensitivity issues" + }, + "sound-unknown": { + "compact": "Sound hazards not known", + "descriptive": "The presence of sounds that can cause sensitivity issues could not be determined" + }, + "title": "Hazards", + "unknown": "The presence of hazards is unknown" + }, + "legal-considerations": { + "exempt": { + "compact": "Claims an accessibility exemption in some jurisdictions", + "descriptive": "This publication claims an accessibility exemption in some jurisdictions" + }, + "no-metadata": "No information is available", + "title": "Legal considerations" + }, + "navigation": { + "index": { + "compact": "Index", + "descriptive": "Index with links to referenced entries" + }, + "no-metadata": "No information is available", + "page-navigation": { + "compact": "Go to page", + "descriptive": "Page list to go to pages from the print source version" + }, + "structural": { + "compact": "Headings", + "descriptive": "Elements such as headings, tables, etc for structured navigation" + }, + "title": "Navigation", + "toc": { + "compact": "Table of contents", + "descriptive": "Table of contents to all chapters of the text via links" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Chemical formulas in LaTeX", + "descriptive": "Chemical formulas in accessible format (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Chemical formulas in MathML", + "descriptive": "Chemical formulas in accessible format (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Math as LaTeX", + "descriptive": "Math formulas in accessible format (LaTeX)" + }, + "accessible-math-described": "Text descriptions of math are provided", + "closed-captions": { + "compact": "Videos have closed captions", + "descriptive": "Videos included in publications have closed captions" + }, + "extended-descriptions": "Information-rich images are described by extended descriptions", + "math-as-mathml": { + "compact": "Math as MathML", + "descriptive": "Math formulas in accessible format (MathML)" + }, + "open-captions": { + "compact": "Videos have open captions", + "descriptive": "Videos included in publications have open captions" + }, + "title": "Rich content", + "transcript": "Transcript(s) provided", + "unknown": "No information is available" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Has alternative text", + "descriptive": "Has alternative text descriptions for images" + }, + "no-metadata": "No information about nonvisual reading is available", + "none": { + "compact": "Not readable in read aloud or dynamic braille", + "descriptive": "The content is not readable as read aloud speech or dynamic braille" + }, + "not-fully": { + "compact": "Not fully readable in read aloud or dynamic braille", + "descriptive": "Not all of the content will be readable as read aloud speech or dynamic braille" + }, + "readable": { + "compact": "Readable in read aloud or dynamic braille", + "descriptive": "All content can be read as read aloud speech or dynamic braille" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Prerecorded audio clips", + "descriptive": "Prerecorded audio clips are embedded in the content" + }, + "no-metadata": "No information about prerecorded audio is available", + "only": { + "compact": "Prerecorded audio only", + "descriptive": "Audiobook with no text alternative" + }, + "synchronized": { + "compact": "Prerecorded audio synchronized with text", + "descriptive": "All the content is available as prerecorded audio synchronized with text" + } + }, + "title": "Ways of reading", + "visual-adjustments": { + "modifiable": { + "compact": "Appearance can be modified", + "descriptive": "Appearance of the text and page layout can be modified according to the capabilities of the reading system (font family and font size, spaces between paragraphs, sentences, words, and letters, as well as color of background and text)" + }, + "unknown": "No information about appearance modifiability is available", + "unmodifiable": { + "compact": "Appearance cannot be modified", + "descriptive": "Text and page layout cannot be modified as the reading experience is close to a print version, but reading systems can still provide zooming options" + } + } + } + } + }, + "altIdentifier_one": "alternate identifier", + "altIdentifier_other": "alternate identifiers", + "artist_one": "artist", + "artist_other": "artists", + "author_one": "author", + "author_other": "authors", + "collection_one": "editorial collection", + "collection_other": "editorial collections", + "colorist_one": "colorist", + "colorist_other": "colorists", + "contributor_one": "contributor", + "contributor_other": "contributors", + "description": "description", + "duration": "duration", + "editor_one": "editor", + "editor_other": "editors", + "identifier_one": "identifier", + "identifier_other": "identifiers", + "illustrator_one": "illustrator", + "illustrator_other": "illustrators", + "imprint_one": "imprint", + "imprint_other": "imprints", + "inker_one": "inker", + "inker_other": "inkers", + "language_one": "language", + "language_other": "languages", + "letterer_one": "letterer", + "letterer_other": "letterers", + "modified": "modification date", + "narrator_one": "narrator", + "narrator_other": "narrators", + "numberOfPages": "print length", + "penciler_one": "penciler", + "penciler_other": "pencilers", + "published": "publication date", + "publisher_one": "publisher", + "publisher_other": "publishers", + "series_one": "series", + "series_other": "series", + "subject_one": "subject", + "subject_other": "subjects", + "subtitle": "subtitle", + "title": "title", + "translator_one": "translator", + "translator_other": "translators" + } + } +} diff --git a/shared/src/locales/publication-metadata/es.json b/shared/src/locales/publication-metadata/es.json new file mode 100644 index 00000000..8c217759 --- /dev/null +++ b/shared/src/locales/publication-metadata/es.json @@ -0,0 +1,333 @@ +{ + "publication": { + "format": { + "audiobook": "Audiolibro", + "audiobookJSON": "Manifiesto de Audiolibro", + "cbz": "Tira cómica", + "divina": "Publicación Divina", + "divinaJSON": "Manifiesto de Publicación Divina", + "epub": "EPUB", + "lcpa": "Audiolibro Protegido con LCP", + "lcpdf": "PDF Protegido con LCP", + "lcpl": "Documento de Licencia LCP", + "pdf": "PDF", + "rwp": "Publicación Web Readium", + "rwpm": "Manifiesto de Publicación Web Readium", + "zab": "Archivo de Audiolibro", + "zip": "Archivo ZIP" + }, + "kind": { + "audiobook_many": "audio‐libros", + "audiobook_one": "audio‐libro", + "audiobook_other": "audio‐libros", + "book_many": "libros", + "book_one": "libro", + "book_other": "libros", + "comic_many": "cómics", + "comic_one": "cómic", + "comic_other": "cómics", + "document_many": "documentos", + "document_one": "documento", + "document_other": "documentos" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "No hay información disponible", + "publisher-contact": "Para más información sobre la accesibilidad de este producto, póngase en contacto con la editorial: ", + "title": "Información adicional sobre accesibilidad proporcionada por la editorial" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Información enriquecida para tecnologías de asistencia", + "descriptive": "El contenido se ha enriquecido con roles ARIA para optimizar la organización y facilitar la navegación" + }, + "audio-descriptions": "Audiodescripciones", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "El color no es el único medio para transmitir información", + "dyslexia-readability": "Legibilidad para dislexia", + "full-ruby-annotations": "Anotaciones ruby completas", + "high-contrast-between-foreground-and-background-audio": "Alto contraste entre audio principal y de fondo", + "high-contrast-between-text-and-background": "Alto contraste entre texto principal y fondo", + "large-print": "Impresión grande", + "page-breaks": { + "compact": "Se incluyen saltos de página", + "descriptive": "Se incluyen saltos de página procedentes de la fuente original" + }, + "ruby-annotations": "Algunas anotaciones ruby", + "sign-language": "Lengua de signos", + "tactile-graphics": { + "compact": "Se incluyen gráficos táctiles", + "descriptive": "Se han incorporado gráficos táctiles para facilitar a personas ciegas el acceso a elementos visuales" + }, + "tactile-objects": "Objetos 3D táctiles", + "text-to-speech-hinting": "Se ofrecen indicaciones de texto a voz", + "title": "Información adicional sobre accesibilidad", + "ultra-high-contrast-between-text-and-background": "Contraste ultra alto entre texto principal y fondo", + "visible-page-numbering": "Numeración de página visible", + "without-background-sounds": "Sin sonidos de fondo" + }, + "conformance": { + "a": { + "compact": "Esta publicación cumple con estándares mínimos de accesibilidad", + "descriptive": "La publicación contiene una declaración de conformidad de cumplimiento del estándar de accesibilidad EPUB y WCAG 2 nivel A" + }, + "aa": { + "compact": "Esta publicación cumple con estándares aceptados de accesibilidad", + "descriptive": "La publicación contiene una declaración de conformidad de cumplimiento del estándar de accesibilidad EPUB y WCAG 2 nivel AA" + }, + "aaa": { + "compact": "Esta publicación sobrepasa los estándares aceptados de accesibilidad", + "descriptive": "La publicación contiene una declaración de conformidad de cumplimiento del estándar de accesibilidad EPUB y WCAG 2 nivel AAA" + }, + "certifier": "La publicación fue evaluada por ", + "certifier-credentials": "La credencial del evaluador es ", + "details": { + "certification-info": "La publicación fue evaluada en ", + "certifier-report": "Para más información, consulte el informe del evaluador", + "claim": "Esta publicación declara que cumple", + "epub-accessibility-1-0": "Accesibilidad EPUB 1.0", + "epub-accessibility-1-1": "Accesibilidad EPUB 1.1", + "level-a": "Nivel A", + "level-aa": "Nivel AA", + "level-aaa": "Nivel AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Reglas para la accesibilidad del contenido web (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Reglas para la accesibilidad del contenido web (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Reglas para la accesibilidad del contenido web (WCAG) 2.2" + } + }, + "details-title": "Información de conformidad detallada", + "no": "No hay información disponible", + "title": "Conformidad", + "unknown-standard": "No es posible determinar la conformidad con estándares para la accesibilidad de esta publicación" + }, + "hazards": { + "flashing": { + "compact": "Contenido con destellos", + "descriptive": "La publicación incluye contenido con destellos que puede causar convulsiones fotosensibles" + }, + "flashing-none": { + "compact": "No hay contenido con destellos", + "descriptive": "La publicación no incluye contenido con destellos" + }, + "flashing-unknown": { + "compact": "Se desconoce la presencia de contenido con destellos", + "descriptive": "Se desconoce la presencia de contenido con destellos que pueda causar convulsiones fotosensibles" + }, + "motion": { + "compact": "Simulación de movimiento", + "descriptive": "La publicación contiene simulaciones de movimiento que pueden causar mareo" + }, + "motion-none": { + "compact": "No hay simulación de movimiento", + "descriptive": "La publicación no incluye simulación de movimiento" + }, + "motion-unknown": { + "compact": "Se desconoce la presencia de simulación de movimiento", + "descriptive": "Se desconoce la presencia de simulaciones de movimiento que pueden causar mareo" + }, + "no-metadata": "No hay información disponible", + "none": { + "compact": "No hay incidencias", + "descriptive": "La publicación no incluye contenido con incidencias" + }, + "sound": { + "compact": "Sonidos", + "descriptive": "La publicación contiene sonidos que pueden ser incómodos" + }, + "sound-none": { + "compact": "No hay sonidos", + "descriptive": "La publicación no contiene sonidos" + }, + "sound-unknown": { + "compact": "No hay información sobre la presencia de sonidos", + "descriptive": "Se desconoce la presencia de sonidos que puedan causar problemas de sensibilidad" + }, + "title": "Incidencias", + "unknown": "Se desconoce si existen incidencias" + }, + "legal-considerations": { + "exempt": { + "compact": "Reclama una exención de accesibilidad en algunas jurisdicciones", + "descriptive": "Esta publicación reclama una exención de accesibilidad en algunas jurisdicciones" + }, + "no-metadata": "No hay información disponible", + "title": "Consideraciones legales" + }, + "navigation": { + "index": { + "compact": "Índice", + "descriptive": "Índice con enlaces a entradas referenciadas" + }, + "no-metadata": "No hay información disponible", + "page-navigation": { + "compact": "Ir a página", + "descriptive": "Lista de páginas para ir a páginas tomando como fuente la versión impresa" + }, + "structural": { + "compact": "Encabezados", + "descriptive": "Elementos como encabezados, tablas, etc. para una navegación estructurada" + }, + "title": "Navegación", + "toc": { + "compact": "Tabla de contenido", + "descriptive": "Tabla de contenido con enlaces a todos los capítulos del texto" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Fórmulas químicas en LaTeX", + "descriptive": "Fórmulas químicas en formato accesible (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Fórmulas químicas en MathML", + "descriptive": "Fórmulas químicas en formato accesible (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matemáticas como LaTeX", + "descriptive": "Matemáticas en formato accesible (LaTeX)" + }, + "accessible-math-described": "Se proporcionan descripciones de texto para matemáticas", + "closed-captions": { + "compact": "Los vídeos tienen subtítulos opcionales", + "descriptive": "Los vídeos incluidos en las publicaciones tienen subtítulos opcionales" + }, + "extended-descriptions": "Las imágenes con información abundante disponen de descripciones extensas", + "math-as-mathml": { + "compact": "Matemáticas como MathML", + "descriptive": "Fórmulas matemáticas en formato accesible (MathML)" + }, + "open-captions": { + "compact": "Los vídeos tienen subtítulos incrustados", + "descriptive": "Los vídeos incluidos en las publicaciones tienen subtítulos incrustados" + }, + "title": "Contenido enriquecido", + "transcript": "Se proporcionan transcripciones", + "unknown": "No hay información disponible" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Tiene texto alternativo", + "descriptive": "Tiene descripciones para imágenes mediante texto alternativo" + }, + "no-metadata": "No hay información disponible sobre lectura con síntesis de voz o en braille", + "none": { + "compact": "No se puede leer con síntesis de voz ni en braille", + "descriptive": "El contenido no se puede leer con síntesis de voz ni en braille" + }, + "not-fully": { + "compact": "No se puede leer completamente con síntesis de voz ni en braille", + "descriptive": "No todo el contenido podrá leerse con síntesis de voz ni en braille" + }, + "readable": { + "compact": "Se puede leer con síntesis de voz y en braille", + "descriptive": "Todo el contenido se puede leer con síntesis de voz y en braille" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Clips de audio pregrabados", + "descriptive": "En el contenido se integran clips de audio pregrabados" + }, + "no-metadata": "No hay información disponible sobre audio pregrabado", + "only": { + "compact": "Solo audio pregrabado", + "descriptive": "Audiolibro sin texto alternativo" + }, + "synchronized": { + "compact": "Audio pregrabado sincronizado con texto", + "descriptive": "Todo el contenido está disponible como audio pregrabado sincronizado con texto" + } + }, + "title": "Legibilidad", + "visual-adjustments": { + "modifiable": { + "compact": "Es posible modificar el aspecto visual", + "descriptive": "El aspecto visual del texto y el diseño de página se pueden modificar en función de las posibilidades del sistema de lectura (familia y tamaño de fuente, espacios entre párrafos, frases, palabras y letras, así como el color de fondo y texto)" + }, + "unknown": "No hay información disponible sobre la posibilidad de modificar el aspecto visual", + "unmodifiable": { + "compact": "No es posible modificar el aspecto visual", + "descriptive": "El texto y el diseño de página no se pueden modificar porque la experiencia de lectura es similar a la de la versión impresa, pero los sistemas de lectura pueden seguir ofreciendo opciones de ampliación" + } + } + } + } + }, + "altIdentifier_many": "identificador alternativo/s", + "altIdentifier_one": "identificador alternativo", + "altIdentifier_other": "identificadores alternativos", + "artist_many": "artista(s)", + "artist_one": "artista", + "artist_other": "artistas", + "author_many": "autor/es", + "author_one": "autor", + "author_other": "autores", + "collection_many": "colecciones editoriales", + "collection_one": "colección editorial", + "collection_other": "colecciones editoriales", + "colorist_many": "colorista(s)", + "colorist_one": "colorista", + "colorist_other": "coloristas", + "contributor_many": "colaborador(es)", + "contributor_one": "colaborador", + "contributor_other": "colaboradores", + "description": "descripción", + "duration": "duración", + "editor_many": "editor(es)", + "editor_one": "editor", + "editor_other": "editores", + "identifier_many": "identificador(es)", + "identifier_one": "identificador", + "identifier_other": "identificadores", + "illustrator_many": "ilustrador(es)", + "illustrator_one": "ilustrador", + "illustrator_other": "ilustradores", + "imprint_many": "marca(s) editorial(es)", + "imprint_one": "marca editorial", + "imprint_other": "marcas editoriales", + "inker_many": "entintador(es)", + "inker_one": "entintador", + "inker_other": "entintadores", + "language_many": "idioma(s)", + "language_one": "idioma", + "language_other": "idiomas", + "letterer_many": "rotulista(s)", + "letterer_one": "rotulista", + "letterer_other": "rotulistas", + "modified": "fecha de modificación", + "narrator_many": "narrador(es)", + "narrator_one": "narrador", + "narrator_other": "narradores", + "numberOfPages": "número de páginas", + "penciler_many": "dibujante(s)", + "penciler_one": "dibujante", + "penciler_other": "dibujantes", + "published": "fecha de publicación", + "publisher_many": "editorial(es)", + "publisher_one": "editorial", + "publisher_other": "editoriales", + "series_many": "serie(s)", + "series_one": "serie", + "series_other": "series", + "subject_many": "tema(s)", + "subject_one": "tema", + "subject_other": "temas", + "subtitle": "subtítulo", + "title": "título", + "translator_many": "traductor(es)", + "translator_one": "traductor", + "translator_other": "traductores" + } + } +} diff --git a/shared/src/locales/publication-metadata/et.json b/shared/src/locales/publication-metadata/et.json new file mode 100644 index 00000000..258e6549 --- /dev/null +++ b/shared/src/locales/publication-metadata/et.json @@ -0,0 +1,310 @@ +{ + "publication": { + "format": { + "audiobook": "Heliraamat", + "audiobookJSON": "Heliraamatu manifest", + "cbz": "Comic Booki arhiiv", + "divina": "Divina väljaanne", + "divinaJSON": "Divina väljaande manifest", + "epub": "EPUB", + "lcpa": "LCP-kaitsega heliraamat", + "lcpdf": "LCP-kaitsega PDF-fail", + "lcpl": "LCP-litsentsiga dokument", + "pdf": "PDF-fail", + "rwp": "Readiumi veebiväljaanne", + "rwpm": "Readiumi veebiväljaande manifest", + "zab": "Heliraamatu arhiiv", + "zip": "ZIP-arhiiv" + }, + "kind": { + "audiobook_one": "heliraamat", + "audiobook_other": "heliraamatud", + "book_one": "raamat", + "book_other": "raamatud", + "comic_one": "koomiks", + "comic_other": "koomiksid", + "document_one": "dokument", + "document_other": "dokumendid" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Teave pole saadaval", + "publisher-contact": "Selle toote saadavause osas palun küsi lisateavet kirjastusest: ", + "title": "Saadavuse kokkuvõte" + }, + "additional-accessibility-information": { + "aria": { + "compact": "ARIA rollid on lisatud", + "descriptive": "Sisu on täiendatud ARIA-rollidega, et optimeerida selle ülesehitust ja hõlbustada väljaandes liikumist" + }, + "audio-descriptions": "Helikirjeldus", + "braille": "Punktkiri (Braille'i kiri)", + "color-not-sole-means-of-conveying-information": "Värv pole ainus viis teabe edastamiseks", + "dyslexia-readability": "Kohandatud lugemisraskustega inimestele", + "full-ruby-annotations": "Täismahus märkused Ruby-vormingus (Aasia keeled)", + "high-contrast-between-foreground-and-background-audio": "Suur kontrast esiplaani ja taustahelide vahel", + "high-contrast-between-text-and-background": "Suur kontrast esiplaani teksti ja tausta vahel", + "large-print": "Suurte tähemärkidega kiri", + "page-breaks": { + "compact": "Lehevahetused on olemas", + "descriptive": "Lehevahetused on pärit algsest trükivariandist" + }, + "ruby-annotations": "Mõned märkused Ruby-vormingus (Aasia keeled)", + "sign-language": "Viipekeel", + "tactile-graphics": { + "compact": "Puutegraafika on olemas", + "descriptive": "Pimedatele inimestele visuaalsete elementide kättesaadavuse hõlbustamiseks on lisatud reljeefgraafika (puutegraafika)" + }, + "tactile-objects": "Puudutustundlikud kolmemõõtmelised objektid", + "text-to-speech-hinting": "Kõnesünteesi vihjed on lisatud", + "title": "Täiendav hõlbustusteave", + "ultra-high-contrast-between-text-and-background": "Teksti ja tausta vahel on äärmiselt suur kontrast", + "visible-page-numbering": "Nähtav lehtede nummerdus", + "without-background-sounds": "Ilma taustahelideta" + }, + "conformance": { + "a": { + "compact": "Käesolev väljaanne vastab hõlbustuse ja ligipääsetavuse miinimumnõuetele", + "descriptive": "Väljaanne sisaldab vastavusdeklaratsiooni, mille kohaselt vastab see EPUB-i hõlbustusstandardile ja WCAG 2. taseme A-nõuetele" + }, + "aa": { + "compact": "Käesolev väljaanne vastab kehtivatele hõlbustuse ja ligipääsetavuse standarditele", + "descriptive": "Väljaanne sisaldab vastavusdeklaratsiooni, mille kohaselt vastab see EPUB-i hõlbustusstandardile ja WCAG 2. taseme AA-nõuetele" + }, + "aaa": { + "compact": "Käesolev väljaanne ületab kehtivaid hõlbustuse ja ligipääsetavuse standardeid", + "descriptive": "Väljaanne sisaldab vastavusdeklaratsiooni, mille kohaselt vastab see EPUB-i hõlbustusstandardile ja WCAG 2. taseme AAA-nõuetele" + }, + "certifier": "Selle väljaande on sertifitseerinud ", + "certifier-credentials": "Sertifitseerija tunnus on ", + "details": { + "certification-info": "Sertifitseerimise ajatempel on ", + "certifier-report": "Lisateavet leiad sertifitseerija aruandest", + "claim": "Käesolev väljaanne väidab, et olemas on vastavus standardiga", + "epub-accessibility-1-0": "EPUB-i hõlbustusstandardi versioon 1.0", + "epub-accessibility-1-1": "EPUB-i hõlbustusstandardi versioon 1.1", + "level-a": "A-tase", + "level-aa": "AA-tase", + "level-aaa": "AAA-tase", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Veebisisu hõlbustuse juhised (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Veebisisu hõlbustuse juhised (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Veebisisu hõlbustuse juhised (WCAG) 2.2" + } + }, + "details-title": "Üksikasjalik teave vastavuse kohta", + "no": "Teave pole saadaval", + "title": "Vastavus", + "unknown-standard": "Selle väljaande vastavust kehtivatele hõlbustuse ja ligipääsetavuse standarditele ei ole võimalik kindlaks teha" + }, + "hazards": { + "flashing": { + "compact": "Vilkuv sisu", + "descriptive": "See väljaanne sisaldab vilkuvat sisu, mis võib põhjustada valgustundlikusest johtuvaid krampe" + }, + "flashing-none": { + "compact": "Vilkumisega seotud ohte pole", + "descriptive": "See väljaanne ei sisalda vilkuvat sisu, mis võib põhjustada valgustundlikusest johtuvaid krampe" + }, + "flashing-unknown": { + "compact": "Vilkumisega seotud ohud pole teada", + "descriptive": "Pole võimalik kindlaks teha, kas selles väljaandes leidub vilkuvat sisu, mis võib põhjustada valgustundlikusest johtuvaid krampe" + }, + "motion": { + "compact": "Simuleeritud liikumine", + "descriptive": "Väljaanne sisaldab liikumissimulatsioone, mis võivad põhjustada liikumistõbe" + }, + "motion-none": { + "compact": "Simuleeritud liikumisega seotud ohte pole", + "descriptive": "Väljaanne ei sisalda liikumissimulatsioone, mis võivad põhjustada liikumistõbe" + }, + "motion-unknown": { + "compact": "Simuleeritud liikumisega seotud ohud pole teada", + "descriptive": "Ei õnnestu tuvastada, kas väljaanne sisaldab liikumissimulatsioone, mis võivad põhjustada liikumistõbe" + }, + "no-metadata": "Teave pole saadaval", + "none": { + "compact": "Ohte pole", + "descriptive": "Selles väljaandes ei leidu ohte" + }, + "sound": { + "compact": "Helid", + "descriptive": "Väljaanne sisaldab helisid, mis võivad põhjustada tundlikkusega seotud probleeme" + }, + "sound-none": { + "compact": "Helidega seotud ohte pole", + "descriptive": "Väljaanne ei sisalda helisid, mis võivad põhjustada tundlikkusega seotud probleeme" + }, + "sound-unknown": { + "compact": "Helidega seotud ohud pole teada", + "descriptive": "Ei õnnestu tuvastada, kas väljaanne sisaldab helisid, mis võivad põhjustada tundlikkusega seotud probleeme" + }, + "title": "Ohud", + "unknown": "Ohtude olemasolu pole teada" + }, + "legal-considerations": { + "exempt": { + "compact": "Taotleb hõlbustus- ja juurdepääsupiirangute erandit teatud jurisdiktsioonides", + "descriptive": "See väljaanne taotleb hõlbustus- ja juurdepääsupiirangute erandit teatud jurisdiktsioonides" + }, + "no-metadata": "Teave pole saadaval", + "title": "Õiguslikud kaalutlused" + }, + "navigation": { + "index": { + "compact": "Indeks", + "descriptive": "Sisukord koos viidetega loetletud kirjetele" + }, + "no-metadata": "Teave pole saadaval", + "page-navigation": { + "compact": "Lehe avamine", + "descriptive": "Lehekülgede loend, mille kaudu saab minna trükiversiooni lehekülgedele" + }, + "structural": { + "compact": "Pealkirjad", + "descriptive": "Struktureeritud liikumise elemendid, nagu pealkirjad, tabelid jne" + }, + "title": "Väljaandes liikumine", + "toc": { + "compact": "Sisukord", + "descriptive": "Sisukord kõigi peatükkide juurde linkide kaudu" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Keemiavalemid LaTeX-is", + "descriptive": "Keemiavalemid loetavas ja hõlbustatud vormingus (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Keemiavalemid MathML-is", + "descriptive": "Keemiavalemid loetavas ja hõlbustatud vormingus (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matemaatika LaTeX-is", + "descriptive": "Matemaatika valemid loetavas ja hõlbustatud vormingus (LaTeX)" + }, + "accessible-math-described": "Matemaatilisel sisu on tekstilised kirjeldused", + "closed-captions": { + "compact": "Videotel on olemas väljalülitatavad subtiitrid", + "descriptive": "Väljaandes leiduvatel videotel on olemas väljalülitatavad subtiitrid" + }, + "extended-descriptions": "Inforikastel piltidel on täiendavad kirjeldused", + "math-as-mathml": { + "compact": "Matemaatika MathML-is", + "descriptive": "Matemaatilised valemid hõlbustusele ja ligipääsetavusele vastavas vormingus (MathML)" + }, + "open-captions": { + "compact": "Videotel on olemas pidevalt nähtavad subtiitrid", + "descriptive": "Väljaandes leiduvatel videotel on olemas pidevalt nähtavad subtiitrid" + }, + "title": "Mitmekülgses vormis sisu", + "transcript": "Heli- ja videosisul on olemas tekstiline vaste", + "unknown": "Teave pole saadaval" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Selgitustekstid on olemas", + "descriptive": "Piltidel on olemas selgitustekst (alt-tekst)" + }, + "no-metadata": "Puudub teave mittevisuaalse lugemise võimaluste kohta", + "none": { + "compact": "Ei ole loetav ettelugemise või dünaamilise punktkirja abil", + "descriptive": "Sisu ei ole loetav etteloetavana ega dünaamilise punktkirjana" + }, + "not-fully": { + "compact": "Ei ole täies mahus loetav ettelugemise või dünaamilise punktkirja abil", + "descriptive": "Kogu sisu ei ole loetav ettelugemise või dünaamilise punktkirja abil" + }, + "readable": { + "compact": "On loetav ettelugemise või dünaamilise punktkirja abil", + "descriptive": "Kogu sisu on loetav ettelugemise või dünaamilise punktkirja abil" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Eelsalvestatud heliklipid", + "descriptive": "Sisusse on lõimitud eelsalvestatud heliklipid" + }, + "no-metadata": "Puudub teave eelsalvestatud helilise sisu kohta", + "only": { + "compact": "Sisu koosneb ainult lõimitud eelsalvestatud heliklippidest", + "descriptive": "Heliraamat ilma tekstilise alternatiivita" + }, + "synchronized": { + "compact": "Eelsalvestatud heli, mis on sünkroonis tekstilise sisuga", + "descriptive": "Kogu sisu on saadaval eelsalvestatud helifailina, mis on sünkroonis tekstilise sisuga" + } + }, + "title": "Lugemise viisid ja võimalused", + "visual-adjustments": { + "modifiable": { + "compact": "Välimus on muudetav", + "descriptive": "Teksti välimust ja lehekülje paigutust saab kohandada vastavalt lugemissüsteemi võimalustele (kirjatüüp ja selle suurus, vahed lõikude, lausete, sõnade ja tähtede vahel ning tausta ja teksti värv)" + }, + "unknown": "Puudub teave välimuse muudetavuse kohta", + "unmodifiable": { + "compact": "Välimust ei saa muuta", + "descriptive": "Teksti ja lehekülje paigutust ei saa muuta ja lugemiskogemus on sarnane või sarnane trükiversiooniga, kuid lugemisvaated võimaldavad siiski suumimist" + } + } + } + } + }, + "altIdentifier_one": "alternatiivne tunnus", + "altIdentifier_other": "alternatiivset tunnust", + "artist_one": "kunstnik", + "artist_other": "kunstnikud", + "author_one": "kirjanik", + "author_other": "kirjanikud", + "collection_one": "toimetatud kogumik", + "collection_other": "toimetatud kogumikud", + "colorist_one": "värvija", + "colorist_other": "värvijad", + "contributor_one": "kaasautor", + "contributor_other": "kaasautorid", + "description": "kirjeldus", + "duration": "kestus", + "editor_one": "toimetaja", + "editor_other": "toimetajad", + "identifier_one": "tunnus", + "identifier_other": "tunnused", + "illustrator_one": "illustraator", + "illustrator_other": "illustraatorid", + "imprint_one": "kirjastaja kaubamärk", + "imprint_other": "kirjastaja kaubamärgid", + "inker_one": "(koomiksi) värvija", + "inker_other": "(koomiksi) värvijad", + "language_one": "keel", + "language_other": "keeled", + "letterer_one": "(koomiksi) tekstikirjutaja", + "letterer_other": "(koomiksi) tekstikirjutajad", + "modified": "muutmise kuupäev", + "narrator_one": "ettelugeja", + "narrator_other": "ettelugejad", + "numberOfPages": "trükise lehtede arv", + "penciler_one": "joonistaja", + "penciler_other": "joonistajad", + "published": "avaldamise kuupäev", + "publisher_one": "väljaandja", + "publisher_other": "väljaandjad", + "series_one": "sari", + "series_other": "sarjad", + "subject_one": "teema", + "subject_other": "teemad", + "subtitle": "alapealkiri", + "title": "pealkiri", + "translator_one": "tõlkija", + "translator_other": "tõlkijad" + } + } +} diff --git a/shared/src/locales/publication-metadata/fi.json b/shared/src/locales/publication-metadata/fi.json new file mode 100644 index 00000000..45916969 --- /dev/null +++ b/shared/src/locales/publication-metadata/fi.json @@ -0,0 +1,310 @@ +{ + "publication": { + "format": { + "audiobook": "Äänikirja", + "audiobookJSON": "Äänikirjaluettelo", + "cbz": "Sarjakuva-arkisto", + "divina": "Divina-julkaisu", + "divinaJSON": "Divina-julkaisuluettelo", + "epub": "EPUB", + "lcpa": "LCP-suojattu äänikirja", + "lcpdf": "LCP-suojattu PDF", + "lcpl": "LCP-lisenssi", + "pdf": "PDF", + "rwp": "Readium Web -julkaisu", + "rwpm": "Readium Web -julkaisuluettelo", + "zab": "Äänikirja-arkisto", + "zip": "ZIP-arkisto" + }, + "kind": { + "audiobook_one": "äänikirja", + "audiobook_other": "äänikirjaa", + "book_one": "kirja", + "book_other": "kirjaa", + "comic_one": "sarjakuva", + "comic_other": "sarjakuvaa", + "document_one": "tiedosto", + "document_other": "tiedostoa" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Tietoa ei saatavilla", + "publisher-contact": "Ota yhteyttä julkaisijaan, jos haluat lisää tietoa julkaisun saavutettavuudesta: ", + "title": "Saavutettavuuden yhteenveto" + }, + "additional-accessibility-information": { + "aria": { + "compact": "ARIA-rooleja on käytetty", + "descriptive": "Sisältöön on lisätty ARIA-rooleja, jotka selkeyttävät rakennetta ja voivat helpottaa navigaatiota" + }, + "audio-descriptions": "Kuvailutulkkaus", + "braille": "Pistekirjoitus", + "color-not-sole-means-of-conveying-information": "Väri ei ole ainoa keino välittää tietoa", + "dyslexia-readability": "Soveltuu henkilöille, joilla on lukivaikeus", + "full-ruby-annotations": "Kattavat rubi-merkinnät", + "high-contrast-between-foreground-and-background-audio": "Korkea kontrasti äänisisältöjen edusta- ja taustaäänen tasoissa", + "high-contrast-between-text-and-background": "Korkea kontrasti tekstin ja taustan välillä", + "large-print": "Isotekstinen", + "page-breaks": { + "compact": "Sivunvaihtokohdat on merkitty", + "descriptive": "Painetun julkaisun sivunvaihtokohdat on merkitty" + }, + "ruby-annotations": "Sisältää rubi-merkintöjä", + "sign-language": "Viittomakielinen", + "tactile-graphics": { + "compact": "Sisältää kohokuvia", + "descriptive": "Sisältää kohokuvia sokeille henkilöille" + }, + "tactile-objects": "Kolmiulotteisia taktiiliosia", + "text-to-speech-hinting": "Tekstistä puheeksi -vihjeitä", + "title": "Lisätietoa saavutettavuudesta", + "ultra-high-contrast-between-text-and-background": "Erittäin korkea kontrasti tekstin ja taustan välillä", + "visible-page-numbering": "Näkyvä sivunumerointi", + "without-background-sounds": "Ei taustaääniä" + }, + "conformance": { + "a": { + "compact": "Tämä julkaisu noudattaa saavutettavuusstandardien alinta tasoa", + "descriptive": "Tämä julkaisu ilmoittaa, että se noudattaa standardeja EPUB Accessibility ja WCAG 2, taso A" + }, + "aa": { + "compact": "Tämä julkaisu noudattaa saavutettavuusstandardien yleisesti hyväksyttyä tasoa", + "descriptive": "Tämä julkaisu ilmoittaa, että se noudattaa standardeja EPUB Accessibility ja WCAG 2, taso AA" + }, + "aaa": { + "compact": "Tämä julkaisu ylittää saavutettavuusstandardien yleisesti hyväksytyn tason", + "descriptive": "Tämä julkaisu ilmoittaa, että se noudattaa standardeja EPUB Accessibility ja WCAG 2, taso AAA" + }, + "certifier": "Julkaisun saavutettavuuden on arvioinut ", + "certifier-credentials": "Arvioijan sertifiointitunnus on ", + "details": { + "certification-info": "Julkaisu on arvioitu ", + "certifier-report": "Lisätietoja arvioijan raportissa", + "claim": "Tämän julkaisun ilmoitetaan noudattavan standardia", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "Taso A", + "level-aa": "Taso AA", + "level-aaa": "Taso AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Verkkosisällön saavutettavuusohjeet (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Verkkosisällön saavutettavuusohjeet (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Verkkosisällön saavutettavuusohjeet (WCAG) 2.2" + } + }, + "details-title": "Tarkat tiedot saavutettavuusstandardien noudattamisesta", + "no": "Tietoa ei ole saatavilla", + "title": "Saavutettavuusstandardien noudattaminen", + "unknown-standard": "Ei ole tiedossa, noudattaako julkaisu saavutettavuusstandardeja" + }, + "hazards": { + "flashing": { + "compact": "Välkkyvää sisältöä", + "descriptive": "Julkaisussa on välkkyvää sisältöä, joka voi olla haitallista valoherkille" + }, + "flashing-none": { + "compact": "Ei välkkyvää sisältöä", + "descriptive": "Julkaisussa ei ole välkkyvää sisältöä, joka voi olla haitallista valoherkille" + }, + "flashing-unknown": { + "compact": "Ei tietoa välkkyvästä sisällöstä", + "descriptive": "Ei ole tietoa, onko julkaisussa välkkyvää sisältöä" + }, + "motion": { + "compact": "Simuloitua liikettä", + "descriptive": "Julkaisu sisältää simuloitua liikettä, joka voi aiheuttaa liikepahoinvointia" + }, + "motion-none": { + "compact": "Ei simuloitua liikettä", + "descriptive": "Julkaisu ei sisällä simuloitua liikettä, joka voi aiheuttaa liikepahoinvointia" + }, + "motion-unknown": { + "compact": "Ei tietoa simuloidusta liikkeestä", + "descriptive": "Ei ole tietoa, onko julkaisussa simuloitua liikettä, joka voi aiheuttaa liikepahoinvointia" + }, + "no-metadata": "Tietoa ei ole saatavilla", + "none": { + "compact": "Ei vaaratekijöitä", + "descriptive": "Julkaisu ei sisällä vaaratekijöitä" + }, + "sound": { + "compact": "Ääniä", + "descriptive": "Julkaisu sisältää ääniä, jotka voivat olla häiritseviä" + }, + "sound-none": { + "compact": "Ei häiritseviä ääniä", + "descriptive": "Julkaisu ei sisällä häiritseviä ääniä" + }, + "sound-unknown": { + "compact": "Ei tietoa häiritsevistä äänistä", + "descriptive": "Ei ole tietoa, onko julkaisussa häiritseviä ääniä" + }, + "title": "Vaaratekijät", + "unknown": "Ei tietoa vaaratekijöistä" + }, + "legal-considerations": { + "exempt": { + "compact": "Vedotaan poikkeukseen saavutettavuusvaatimuksissa", + "descriptive": "Tämän julkaisun kohdalla vedotaan poikkeukseen saavutettavuusvaatimuksissa" + }, + "no-metadata": "Tietoa ei ole saatavilla", + "title": "Oikeudellisia huomioita" + }, + "navigation": { + "index": { + "compact": "Hakemisto", + "descriptive": "Hakemisto, jossa hakusanat on linkitetty sisältöön" + }, + "no-metadata": "Tietoa ei ole saatavilla", + "page-navigation": { + "compact": "Siirry sivulle", + "descriptive": "Sivuluettelo, jonka avulla voi siirtyä painetun version sivuja vastaaviin kohtiin" + }, + "structural": { + "compact": "Otsikot", + "descriptive": "Sisältää navigointia helpottavia rakenteita, kuten otsikoita" + }, + "title": "Siirtyminen", + "toc": { + "compact": "Sisällysluettelo", + "descriptive": "Sisällysluettelo, jossa on linkit kaikkiin lukuihin" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Kemialliset kaavat LaTeX-muodossa", + "descriptive": "Kemialliset kaavat saavutettavassa muodossa (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Kemialliset kaavat MathML-muodossa", + "descriptive": "Kemialliset kaavat saavutettavassa muodossa (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matematiikka LaTeX-muodossa", + "descriptive": "Matemaattiset kaavat saavutettavassa muodossa (LaTeX)" + }, + "accessible-math-described": "Matematiikalle on tekstikuvaukset", + "closed-captions": { + "compact": "Videoissa on tekstitys", + "descriptive": "Julkaisuihin sisältyvissä videoissa on tekstitys" + }, + "extended-descriptions": "Paljon tietoa sisältävillä kuvilla on pitkät selostukset", + "math-as-mathml": { + "compact": "Matematiikka MathML-muodossa", + "descriptive": "Matemaattiset kaavat saavutettavassa muodossa (MathML)" + }, + "open-captions": { + "compact": "Videoissa on kiinteä tekstitys", + "descriptive": "Julkaisuihin sisältyvissä videoissa on kiinteä tekstitys" + }, + "title": "Monimuotoinen sisältö", + "transcript": "Tekstivastine ääni- tai videosisällölle", + "unknown": "Tietoa ei ole saatavilla" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Sisältää vaihtoehtoiset tekstit", + "descriptive": "Sisältää vaihtoehtoiset tekstit kuville" + }, + "no-metadata": "Ei tietoa tukeeko muita kuin näköön perustuvia tapoja lukea", + "none": { + "compact": "Ei luettavissa ruudunlukuohjelmalla tai pistenäytöllä", + "descriptive": "Sisältö ei ole luettavissa ruudunlukuohjelmalla tai pistenäytöllä" + }, + "not-fully": { + "compact": "Ei kokonaan luettavissa ruudunlukuohjelmalla tai pistenäytöllä", + "descriptive": "Ei kokonaan luettavissa ruudunlukuohjelmalla tai pistenäytöllä" + }, + "readable": { + "compact": "Luettavissa ruudunlukuohjelmalla tai pistenäytöllä", + "descriptive": "Kaikki sisältö on luettavissa ruudunlukuohjelmalla tai pistenäytöllä" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Sisältää äänitteitä", + "descriptive": "Sisällössä on äänitettyjä osuuksia" + }, + "no-metadata": "Ei tietoa äänitteistä", + "only": { + "compact": "Sisältää vain ääntä", + "descriptive": "Äänikirja, jossa ei ole tekstiä" + }, + "synchronized": { + "compact": "Äänite on synkronoitu tekstin kanssa", + "descriptive": "Koko sisältö on käytettävissä äänitteenä, joka on synkronoitu tekstin kanssa" + } + }, + "title": "Lukemisen keinot", + "visual-adjustments": { + "modifiable": { + "compact": "Ulkoasua voi mukauttaa", + "descriptive": "Tekstin ja sivujen ulkoasua voi mukauttaa lukuohjelman toimintojen avulla (esimerkiksi muuttaa kirjaintyyppiä, tekstin kokoa ja välistyksiä sekä tekstin ja taustan värejä)" + }, + "unknown": "Ei tietoa siitä, voiko ulkoasua mukauttaa", + "unmodifiable": { + "compact": "Ulkoasua ei voi mukauttaa", + "descriptive": "Tekstin ja sivujen ulkoasu mukailee painettua versiota eikä ulkoasua voi mukauttaa. Lukuohjelmassa voi kuitenkin olla mahdollista zoomata." + } + } + } + } + }, + "altIdentifier_one": "vaihtoehtoinen tunniste", + "altIdentifier_other": "vaihtoehtoiset tunnisteet", + "artist_one": "taiteilija", + "artist_other": "taiteilijat", + "author_one": "kirjailija", + "author_other": "kirjailijat", + "collection_one": "toimituksellinen kirjasarja", + "collection_other": "toimitukselliset kirjasarjat", + "colorist_one": "värittäjä", + "colorist_other": "värittäjät", + "contributor_one": "avustaja", + "contributor_other": "avustajat", + "description": "kuvaus", + "duration": "kesto", + "editor_one": "toimittaja", + "editor_other": "toimittajat", + "identifier_one": "tunniste", + "identifier_other": "tunnisteet", + "illustrator_one": "kuvittaja", + "illustrator_other": "kuvittajat", + "imprint_one": "imprint-kustantamo", + "imprint_other": "imprint-kustantamot", + "inker_one": "puhtaaksipiirtäjä", + "inker_other": "puhtaaksipiirtäjät", + "language_one": "kieli", + "language_other": "kielet", + "letterer_one": "tekstaaja", + "letterer_other": "tekstaajat", + "modified": "muokkauspäivämäärä", + "narrator_one": "lukija", + "narrator_other": "lukijat", + "numberOfPages": "painetun kirjan sivumäärä", + "penciler_one": "piirtäjä", + "penciler_other": "piirtäjät", + "published": "julkaisupäivä", + "publisher_one": "kustantaja", + "publisher_other": "kustantajat", + "series_one": "sarja", + "series_other": "sarjat", + "subject_one": "aihe", + "subject_other": "aiheet", + "subtitle": "alaotsikko", + "title": "nimi", + "translator_one": "kääntäjä", + "translator_other": "kääntäjät" + } + } +} diff --git a/shared/src/locales/publication-metadata/fr.json b/shared/src/locales/publication-metadata/fr.json new file mode 100644 index 00000000..44677055 --- /dev/null +++ b/shared/src/locales/publication-metadata/fr.json @@ -0,0 +1,333 @@ +{ + "publication": { + "format": { + "audiobook": "Livre audio", + "audiobookJSON": "Manifeste de livre audio", + "cbz": "Bande dessinée", + "divina": "Bande dessinée Divina", + "divinaJSON": "Manifeste de bande dessinée Divina", + "epub": "EPUB", + "lcpa": "Livre audio protégé par LCP", + "lcpdf": "PDF protégé par LCP", + "lcpl": "Licence LCP", + "pdf": "PDF", + "rwp": "Publication web Readium", + "rwpm": "Manifeste de publication web Readium", + "zab": "Livre audio", + "zip": "Archive ZIP" + }, + "kind": { + "audiobook_many": "livres audio", + "audiobook_one": "livre audio", + "audiobook_other": "livres audio", + "book_many": "livres", + "book_one": "livre", + "book_other": "livres", + "comic_many": "bandes dessinées", + "comic_one": "bande dessinée", + "comic_other": "bandes dessinées", + "document_many": "documents", + "document_one": "document", + "document_other": "documents" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Aucune information disponible", + "publisher-contact": "Pour plus d'information à propos de l'accessibilité de cette publication, veuillez contacter l'éditeur : ", + "title": "Informations d'accessibilité supplémentaires fournies par l'éditeur" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Information enrichie pour les technologies d'assistances", + "descriptive": "La structure est enrichi de rôles ARIA afin d'optimiser l'organisation et de faciliter la navigation via les technologies d'assistances" + }, + "audio-descriptions": "Description audio", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "La couleur n'est pas la seule manière de communiquer de l'information", + "dyslexia-readability": "Lisibilité adapté aux publics dys", + "full-ruby-annotations": "Annotations complètes au format ruby (langues asiatiques)", + "high-contrast-between-foreground-and-background-audio": "Contraste sonore amélioré entre les différents plans", + "high-contrast-between-text-and-background": "Contraste élevé entre le texte et l'arrière-plan", + "large-print": "Grands caractères", + "page-breaks": { + "compact": "Pagination identique à l'imprimé", + "descriptive": "Contient une pagination identique à la version imprimée" + }, + "ruby-annotations": "Annotations partielles au format ruby (langues asiatiques)", + "sign-language": "Langue des signes", + "tactile-graphics": { + "compact": "Graphiques tactiles", + "descriptive": "Des graphiques tactiles ont été intégrés pour faciliter l'accès des personnes aveugles aux éléments visuels" + }, + "tactile-objects": "Objets 3D ou tactiles", + "text-to-speech-hinting": "Prononciation améliorée pour la synthèse vocale", + "title": "Informations complémentaires sur l'accessibilité", + "ultra-high-contrast-between-text-and-background": "Contraste très élevé entre le texte et l'arrière-plan", + "visible-page-numbering": "Numérotation de page visible", + "without-background-sounds": "Aucun bruit de fond" + }, + "conformance": { + "a": { + "compact": "Cette publication répond aux règles minimales d'accessibilité", + "descriptive": "La publication indique qu'elle respecte les règles d'accessibilité EPUB et WCAG 2 niveau A" + }, + "aa": { + "compact": "Cette publication répond aux règles d'accessibilité reconnues", + "descriptive": "La publication indique qu'elle respecte les règles d'accessibilité EPUB et WCAG 2 niveau AA" + }, + "aaa": { + "compact": "Cette publication dépasse les règles d'accessibilité reconnues", + "descriptive": "La publication indique qu'elle respecte les règles d'accessibilité EPUB et WCAG 2 niveau AAA" + }, + "certifier": "Accessibilité évaluée par ", + "certifier-credentials": "L'évaluateur est accrédité par ", + "details": { + "certification-info": "Cette publication a été certifié le", + "certifier-report": "Pour plus d'information, veuillez consulter le rapport de certification", + "claim": "Cette publication indique respecter", + "epub-accessibility-1-0": "EPUB Accessibilité 1.0", + "epub-accessibility-1-1": "EPUB Accessibilité 1.1", + "level-a": "Niveau A", + "level-aa": "Niveau AA", + "level-aaa": "Niveau AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Règles pour l’accessibilité des contenus Web (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Règles pour l’accessibilité des contenus Web (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Règles pour l’accessibilité des contenus Web (WCAG) 2.2" + } + }, + "details-title": "Information détaillée", + "no": "Aucune information disponible", + "title": "Règles d'accessibilité", + "unknown-standard": "Aucune indication concernant les normes d'accessibilité" + }, + "hazards": { + "flashing": { + "compact": "Flashs lumineux", + "descriptive": "La publication contient des flashs lumineux qui peuvent provoquer des crises d’épilepsie" + }, + "flashing-none": { + "compact": "Pas de flashs lumineux", + "descriptive": "La publication ne contient pas de flashs lumineux susceptibles de provoquer des crises d’épilepsie" + }, + "flashing-unknown": { + "compact": "Pas d'information concernant la présence de flashs lumineux", + "descriptive": "La présence de flashs lumineux susceptibles de provoquer des crises d’épilepsie n'a pas pu être déterminée" + }, + "motion": { + "compact": "Sensations de mouvement", + "descriptive": "La publication contient des images en mouvement qui peuvent provoquer des nausées, des vertiges et des maux de tête" + }, + "motion-none": { + "compact": "Pas de sensations de mouvement", + "descriptive": "La publication ne contient pas d'images en mouvement qui pourraient provoquer des nausées, des vertiges et des maux de tête" + }, + "motion-unknown": { + "compact": "Pas d'information concernant la présence d'images en mouvement", + "descriptive": "La présence d'images en mouvement susceptibles de provoquer des nausées, des vertiges et des maux de tête n'a pas pu être déterminée" + }, + "no-metadata": "Aucune information disponible", + "none": { + "compact": "Aucun points d'attention", + "descriptive": "La publication ne présente aucun risque lié à la présence de flashs lumineux, de sensations de mouvement ou de sons" + }, + "sound": { + "compact": "Sons", + "descriptive": "La publication contient des sons qui peuvent causer des troubles de la sensibilité" + }, + "sound-none": { + "compact": "Pas de risques sonores", + "descriptive": "La publication ne contient pas de sons susceptibles de provoquer des troubles de la sensibilité" + }, + "sound-unknown": { + "compact": "Pas d'information concernant la présence de sons", + "descriptive": "La présence de sons susceptibles de causer des troubles de sensibilité n'a pas pu être déterminée" + }, + "title": "Points d'attention", + "unknown": "La présence de risques est inconnue" + }, + "legal-considerations": { + "exempt": { + "compact": "Déclare être sous le coup d'une exemption dans certaines juridictions", + "descriptive": "Cette publication déclare être sous le coup d'une exemption dans certaines juridictions" + }, + "no-metadata": "Aucune information disponible", + "title": "Considérations légales" + }, + "navigation": { + "index": { + "compact": "Index", + "descriptive": "Index comportant des liens vers les entrées référencées" + }, + "no-metadata": "Aucune information disponible", + "page-navigation": { + "compact": "Aller à la page", + "descriptive": "Permet d'accéder aux pages de la version source imprimée" + }, + "structural": { + "compact": "Titres", + "descriptive": "Contient des titres pour une navigation structurée" + }, + "title": "Points de repère", + "toc": { + "compact": "Table des matières", + "descriptive": "Table des matières" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Formules chimiques en LaTeX", + "descriptive": "Formules chimiques en format accessible (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Formules chimiques en MathML", + "descriptive": "Formules chimiques en format accessible (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Mathématiques en LaTeX", + "descriptive": "Formules mathématiques en format accessible (LaTeX)" + }, + "accessible-math-described": "Des descriptions textuelles des formules mathématiques sont fournies", + "closed-captions": { + "compact": "Sous-titres disponibles pour les vidéos", + "descriptive": "Des sous titres sont disponibles pour les vidéos" + }, + "extended-descriptions": "Les images porteuses d'informations complexes sont décrites par des descriptions longues", + "math-as-mathml": { + "compact": "Mathématiques en MathML", + "descriptive": "Formules mathématiques en format accessible (MathML)" + }, + "open-captions": { + "compact": "Sous-titres incrustés", + "descriptive": "Des sous titres sont incrustés pour les vidéos" + }, + "title": "Contenus spécifiques", + "transcript": "Transcriptions fournies", + "unknown": "Aucune information disponible" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Images décrites", + "descriptive": "Les images sont décrites par un texte" + }, + "no-metadata": "Aucune information pour la lecture en voix de synthèse ou en braille", + "none": { + "compact": "Non lisible en voix de synthèse ou en braille", + "descriptive": "Le contenu n'est pas lisible en voix de synthèse ou en braille" + }, + "not-fully": { + "compact": "Pas entièrement lisible en voix de synthèse ou en braille", + "descriptive": "Tous les contenus ne pourront pas être lus à haute voix ou en braille" + }, + "readable": { + "compact": "Entièrement lisible en voix de synthèse ou en braille", + "descriptive": "Tous les contenus peuvent être lus en voix de synthèse ou en braille" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Clips audio préenregistrés", + "descriptive": "Des clips audio préenregistrés sont intégrés au contenu" + }, + "no-metadata": "Aucune information sur les enregistrements audio", + "only": { + "compact": "Audio préenregistré uniquement", + "descriptive": "Livre audio sans texte alternatif" + }, + "synchronized": { + "compact": "Audio préenregistré synchronisé avec du texte", + "descriptive": "Tous les contenus sont disponibles comme audio préenregistrés synchronisés avec le texte" + } + }, + "title": "Lisibilité", + "visual-adjustments": { + "modifiable": { + "compact": "L'affichage peut être adapté", + "descriptive": "L'apparence du texte et la mise en page peuvent être modifiées en fonction des capacités du système de lecture (famille et taille des polices, espaces entre les paragraphes, les phrases, les mots et les lettres, ainsi que la couleur de l'arrière-plan et du texte)" + }, + "unknown": "Aucune information sur les possibilités d'adaptation de l'affichage", + "unmodifiable": { + "compact": "L'affichage ne peut pas être adapté", + "descriptive": "Le texte et la mise en page ne peuvent pas être adaptés étant donné que l'expérience de lecture est proche de celle de la version imprimée, mais l'application de lecture peut tout de même proposer la capacité de zoomer" + } + } + } + } + }, + "altIdentifier_many": "", + "altIdentifier_one": "identifiant alternatif", + "altIdentifier_other": "identifiants alternatifs", + "artist_many": "", + "artist_one": "artiste", + "artist_other": "artiste", + "author_many": "", + "author_one": "auteur", + "author_other": "auteurs", + "collection_many": "", + "collection_one": "collection éditoriale", + "collection_other": "collections éditoriales", + "colorist_many": "", + "colorist_one": "coloriste", + "colorist_other": "coloristes", + "contributor_many": "", + "contributor_one": "contributeur", + "contributor_other": "contributeurs", + "description": "description", + "duration": "durée", + "editor_many": "", + "editor_one": "éditeur", + "editor_other": "éditeurs", + "identifier_many": "", + "identifier_one": "identifiant", + "identifier_other": "identifiants", + "illustrator_many": "", + "illustrator_one": "illustrateur", + "illustrator_other": "illustrateurs", + "imprint_many": "", + "imprint_one": "marque éditoriale", + "imprint_other": "marques éditoriales", + "inker_many": "", + "inker_one": "encreur", + "inker_other": "encreurs", + "language_many": "", + "language_one": "langue", + "language_other": "langues", + "letterer_many": "", + "letterer_one": "lettreur", + "letterer_other": "lettreurs", + "modified": "date de modification", + "narrator_many": "", + "narrator_one": "narrateur", + "narrator_other": "narrateurs", + "numberOfPages": "pagination papier", + "penciler_many": "", + "penciler_one": "dessinateur", + "penciler_other": "dessinateurs", + "published": "date de publication", + "publisher_many": "", + "publisher_one": "éditeur", + "publisher_other": "éditeurs", + "series_many": "", + "series_one": "série", + "series_other": "séries", + "subject_many": "", + "subject_one": "catégorie", + "subject_other": "catégories", + "subtitle": "sous-titre", + "title": "titre", + "translator_many": "", + "translator_one": "traducteur", + "translator_other": "traducteurs" + } + } +} diff --git a/shared/src/locales/publication-metadata/he.json b/shared/src/locales/publication-metadata/he.json new file mode 100644 index 00000000..43337df2 --- /dev/null +++ b/shared/src/locales/publication-metadata/he.json @@ -0,0 +1,9 @@ +{ + "publication": { + "format": { + "audiobook": "ספר קולי", + "audiobookJSON": "תגית: Manifest", + "cbz": "ארכיון ספרי קומיקס" + } + } +} diff --git a/shared/src/locales/publication-metadata/it.json b/shared/src/locales/publication-metadata/it.json new file mode 100644 index 00000000..8ffc2329 --- /dev/null +++ b/shared/src/locales/publication-metadata/it.json @@ -0,0 +1,333 @@ +{ + "publication": { + "format": { + "audiobook": "Audiolibro", + "audiobookJSON": "Audiobook Manifest", + "cbz": "Comic book archive", + "divina": "Divina Publication", + "divinaJSON": "Divina Publication Manifest", + "epub": "EPUB", + "lcpa": "Audiolibro protetto con LCP", + "lcpdf": "PDF protetto con LCP", + "lcpl": "Licenza LCP", + "pdf": "PDF", + "rwp": "Readium Web Publication", + "rwpm": "Readium Web Publication Manifest", + "zab": "Audiobook Archive", + "zip": "ZIP Archive" + }, + "kind": { + "audiobook_many": "audiolibri", + "audiobook_one": "audiolibro", + "audiobook_other": "audiolibri", + "book_many": "libri", + "book_one": "libro", + "book_other": "libri", + "comic_many": "fumetti", + "comic_one": "fumetto", + "comic_other": "fumetti", + "document_many": "documenti", + "document_one": "documento", + "document_other": "documenti" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Nessuna informazione disponibile", + "publisher-contact": "Per ulteriori informazioni sull'accessibilità di questa risorsa, contattare l'editore: ", + "title": "Informazioni aggiuntive sull'accessibilità fornite dall'editore" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Ruoli ARIA inclusi", + "descriptive": "Il contenuto è semanticamente arricchito con ruoli ARIA per ottimizzare l'organizzazione e facilitare la navigazione" + }, + "audio-descriptions": "Descrizioni audio", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "Il colore non è l'unico mezzo per trasmettere informazioni", + "dyslexia-readability": "Leggibilità adatta alla dislessia", + "full-ruby-annotations": "Annotazioni complete in Ruby", + "high-contrast-between-foreground-and-background-audio": "Elevato contrasto tra audio principale e sottofondo", + "high-contrast-between-text-and-background": "Contrasto elevato tra testo in primo piano e sfondo", + "large-print": "Stampa a caratteri ingranditi", + "page-breaks": { + "compact": "Interruzioni di pagina incluse", + "descriptive": "Interruzioni di pagina identiche alla versione originale a stampa" + }, + "ruby-annotations": "Alcune annotazioni in Ruby", + "sign-language": "Lingua dei segni", + "tactile-graphics": { + "compact": "Grafica tattile inclusa", + "descriptive": "La grafica tattile è stata integrata per facilitare l'accesso agli elementi visivi alle persone non vedenti" + }, + "tactile-objects": "Oggetti 3D tattili", + "text-to-speech-hinting": "Pronuncia migliorata per la sintesi vocale", + "title": "Ulteriori informazioni sull'accessibilità", + "ultra-high-contrast-between-text-and-background": "Contrasto molto elevato tra testo e sfondo", + "visible-page-numbering": "Numerazione delle pagine visibile", + "without-background-sounds": "Nessun suono in sottofondo" + }, + "conformance": { + "a": { + "compact": "Questa pubblicazione soddisfa gli standard minimi di accessibilità", + "descriptive": "La pubblicazione contiene una dichiarazione di conformità che attesta il rispetto degli standard EPUB Accessibility e WCAG 2 Livello A" + }, + "aa": { + "compact": "Questa pubblicazione soddisfa gli standard di accessibilità accettati", + "descriptive": "La pubblicazione contiene una dichiarazione di conformità che attesta il rispetto degli standard EPUB Accessibility e WCAG 2 Livello AA" + }, + "aaa": { + "compact": "Questa pubblicazione supera gli standard di accessibilità", + "descriptive": "La pubblicazione contiene una dichiarazione di conformità che attesta il rispetto degli standard EPUB Accessibility e WCAG 2 Livello AAA" + }, + "certifier": "La pubblicazione è stata certificata da ", + "certifier-credentials": "Le credenziali del certificatore sono ", + "details": { + "certification-info": "La pubblicazione è stata certificata il ", + "certifier-report": "Per ulteriori informazioni, consultare il rapporto d'accessibilità del certificatore", + "claim": "Questa pubblicazione è conforme ai requisiti di", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "Livello A", + "level-aa": "Livello AA", + "level-aaa": "Livello AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Linee guida per l'accessibilità dei contenuti web (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Linee guida per l'accessibilità dei contenuti web (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Linee guida per l'accessibilità dei contenuti web (WCAG) 2.2" + } + }, + "details-title": "Informazioni dettagliate sulla conformità", + "no": "Nessuna informazione disponibile", + "title": "Conformità", + "unknown-standard": "Nessuna indicazione sugli standard d'accessibilità" + }, + "hazards": { + "flashing": { + "compact": "Contenuto lampeggiante", + "descriptive": "La pubblicazione contiene contenuti lampeggianti che possono causare crisi d'epilessia fotosensibile" + }, + "flashing-none": { + "compact": "Nessun contenuto lampeggiante", + "descriptive": "La pubblicazione non presenta contenuti lampeggianti che possono causare crisi d'epilessia fotosensibile" + }, + "flashing-unknown": { + "compact": "Nessuna informazione sulla presenza di contenuti lampeggianti", + "descriptive": "Non è stato possibile determinare la presenza di contenuti lampeggianti che possono causare crisi d'epilessia fotosensibile" + }, + "motion": { + "compact": "Simulazione del movimento", + "descriptive": "La pubblicazione contiene simulazioni di movimento che possono provocare cinetosi" + }, + "motion-none": { + "compact": "Nessun rischio di simulazione del movimento", + "descriptive": "La pubblicazione non contiene simulazioni di movimento che possono causare la cinetosi" + }, + "motion-unknown": { + "compact": "Nessuna informazione relativa alla presenza di simulazioni di movimento", + "descriptive": "Non è stato possibile determinare la presenza di contenuti che possono provocare cinetosi" + }, + "no-metadata": "Nessuna informazione disponibile", + "none": { + "compact": "Nessuna problematica", + "descriptive": "La pubblicazione non presenta contenuti a rischio di simulazione di movimento, di suoni, o di contenuti lampeggianti" + }, + "sound": { + "compact": "Suoni", + "descriptive": "La pubblicazione contiene suoni che possono causare problemi di sensibilità" + }, + "sound-none": { + "compact": "Nessun rischio acustico", + "descriptive": "La pubblicazione non contiene suoni che possono causare problemi di sensibilità" + }, + "sound-unknown": { + "compact": "Nessuna informazione sulla presenza di suoni", + "descriptive": "Non è stato possibile determinare la presenza di suoni che potrebbero causare problemi di sensibilità" + }, + "title": "Problematiche", + "unknown": "La presenza di rischi è sconosciuta" + }, + "legal-considerations": { + "exempt": { + "compact": "Dichiara di godere dell'esenzione d'accessibilità in alcune giurisdizioni", + "descriptive": "Questa risorsa gode dell'esenzione d'accessibilità in alcune giurisdizioni" + }, + "no-metadata": "Nessuna informazione disponibile", + "title": "Note legali" + }, + "navigation": { + "index": { + "compact": "Indice analitico interattivo", + "descriptive": "Indice analitico con link alle voci di riferimento" + }, + "no-metadata": "Nessuna informazione disponibile", + "page-navigation": { + "compact": "Vai alla pagina", + "descriptive": "Sono presenti i riferimenti ai numeri di pagina della versione a stampa corrispondente" + }, + "structural": { + "compact": "Intestazioni", + "descriptive": "Contiene elementi come titoli, elenchi e tabelle per permettere una navigazione strutturata" + }, + "title": "Navigazione", + "toc": { + "compact": "Indice interattivo", + "descriptive": "L’indice permette l’accesso diretto a tutti i capitoli tramite link" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Formule chimiche in LaTeX", + "descriptive": "Formule chimiche in formato accessibile (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Formule chimiche in MathML", + "descriptive": "Formule chimiche in formato accessibile (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matematica in LaTeX", + "descriptive": "Formule matematiche in formato accessibile (LaTeX)" + }, + "accessible-math-described": "Sono disponibili descrizioni testuali per le formule matematiche", + "closed-captions": { + "compact": "Sottotitoli disponibili per i video", + "descriptive": "Per i video sono disponibili dei sottotitoli" + }, + "extended-descriptions": "Le immagini complesse presentano descrizioni estese", + "math-as-mathml": { + "compact": "Matematica in MathML", + "descriptive": "Formule matematiche in formato accessibile (MathML)" + }, + "open-captions": { + "compact": "I video hanno i sottotitoli", + "descriptive": "I video inclusi nella pubblicazione hanno i sottotitoli" + }, + "title": "Contenuti arricchiti", + "transcript": "Trascrizioni fornite", + "unknown": "Nessuna informazione disponibile" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Immagini descritte", + "descriptive": "Le immagini sono descritte da un testo" + }, + "no-metadata": "Nessuna informazione sulla lettura non visiva", + "none": { + "compact": "Non leggibile con lettura ad alta voce o in braille", + "descriptive": "Il contenuto non è leggibile con la lettura ad alta voce o in braille" + }, + "not-fully": { + "compact": "Non è interamente leggibile con lettura ad alta voce o in braille", + "descriptive": "Non tutti i contenuti potranno essere letti con lettura ad alta voce o in braille" + }, + "readable": { + "compact": "Interamente leggibile con lettura ad alta voce o in braille", + "descriptive": "Tutti i contenuti possono essere letti con la lettura ad alta voce o con il display braille" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Clip audio preregistrate", + "descriptive": "Le clip audio preregistrate sono integrate nel contenuto" + }, + "no-metadata": "Non sono disponibili informazioni sull'audio preregistrato", + "only": { + "compact": "Solo audio preregistrato", + "descriptive": "Audiolibro senza testi alternativi" + }, + "synchronized": { + "compact": "Audio preregistrato sincronizzato con il testo", + "descriptive": "Tutti i contenuti sono disponibili come audio preregistrato sincronizzato con il testo" + } + }, + "title": "Leggibilità", + "visual-adjustments": { + "modifiable": { + "compact": "La formattazione del testo e il layout della pagina possono essere modificati", + "descriptive": "La formattazione del testo e il layout della pagina possono essere modificati in base alle funzionalità presenti nella soluzione di lettura (ingrandimento dei caratteri del testo, modifica dei colori e dei contrasti per il testo e lo sfondo, modifica degli spazi tra lettere, parole, frasi e paragrafi)" + }, + "unknown": "Non sono disponibili informazioni sulla possibilità di formattare il testo", + "unmodifiable": { + "compact": "La formattazione del testo e il display della pagina non possono essere modificati", + "descriptive": "Il layout del testo e della pagina non può essere modificato poiché l'esperienza di lettura è simile a una versione di stampa, ma i sistemi di lettura possono ancora fornire opzioni di zoom" + } + } + } + } + }, + "altIdentifier_many": "identificatori alternativi", + "altIdentifier_one": "identificatore alternativo", + "altIdentifier_other": "identificatori alternativi", + "artist_many": "artisti", + "artist_one": "artista", + "artist_other": "artisti", + "author_many": "autori", + "author_one": "autore", + "author_other": "autori", + "collection_many": "collane", + "collection_one": "collana", + "collection_other": "collane", + "colorist_many": "coloristi", + "colorist_one": "colorista", + "colorist_other": "coloristi", + "contributor_many": "contributori", + "contributor_one": "contributore", + "contributor_other": "contributori", + "description": "descrizione", + "duration": "durata", + "editor_many": "editor", + "editor_one": "editor", + "editor_other": "editor", + "identifier_many": "identificatori", + "identifier_one": "identificatore", + "identifier_other": "identificatori", + "illustrator_many": "illustratori", + "illustrator_one": "illustratore", + "illustrator_other": "illustratori", + "imprint_many": "marche editoriali", + "imprint_one": "marca editoriale", + "imprint_other": "marche editoriali", + "inker_many": "inchiostratori", + "inker_one": "inchiostratore", + "inker_other": "inchiostratori", + "language_many": "lingue", + "language_one": "lingua", + "language_other": "lingue", + "letterer_many": "letteristi", + "letterer_one": "letterista", + "letterer_other": "letteristi", + "modified": "Data di modifica", + "narrator_many": "narratori", + "narrator_one": "narratore", + "narrator_other": "narratori", + "numberOfPages": "impaginazione versione cartacea", + "penciler_many": "disegnatori", + "penciler_one": "disegnatore", + "penciler_other": "disegnatori", + "published": "Data di pubblicazione", + "publisher_many": "editori", + "publisher_one": "editore", + "publisher_other": "editori", + "series_many": "serie", + "series_one": "serie", + "series_other": "serie", + "subject_many": "categorie", + "subject_one": "categoria", + "subject_other": "categorie", + "subtitle": "sottotitolo", + "title": "titolo", + "translator_many": "traduttori", + "translator_one": "traduttore", + "translator_other": "traduttori" + } + } +} diff --git a/shared/src/locales/publication-metadata/lt.json b/shared/src/locales/publication-metadata/lt.json new file mode 100644 index 00000000..f11a0ea2 --- /dev/null +++ b/shared/src/locales/publication-metadata/lt.json @@ -0,0 +1,8 @@ +{ + "publication": { + "format": { + "epub": "EPUB", + "pdf": "PDF" + } + } +} diff --git a/shared/src/locales/publication-metadata/pl.json b/shared/src/locales/publication-metadata/pl.json new file mode 100644 index 00000000..e68a429c --- /dev/null +++ b/shared/src/locales/publication-metadata/pl.json @@ -0,0 +1,333 @@ +{ + "publication": { + "format": { + "audiobook": "Audiobook", + "audiobookJSON": "Manifest audiobooka", + "cbz": "Archiwum komiksów", + "divina": "Publikacja Divina", + "divinaJSON": "Manifest publikacji Divina", + "epub": "EPUB", + "lcpa": "Audiobook chroniony przez LCP", + "lcpdf": "PDF chroniony przez LCP", + "lcpl": "Dokument licencji LCP", + "pdf": "PDF", + "rwp": "Publikacja internetowa Readium", + "rwpm": "Manifest publikacji internetowej Readium", + "zab": "Archiwum audiobooka", + "zip": "Archiwum ZIP" + }, + "kind": { + "audiobook_few": "audiobooki", + "audiobook_many": "audiobooków", + "audiobook_one": "audiobook", + "book_few": "książki", + "book_many": "książek", + "book_one": "książka", + "comic_few": "komiksy", + "comic_many": "komiksów", + "comic_one": "komiks", + "document_few": "dokumenty", + "document_many": "dokumentów", + "document_one": "dokument" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Brak dostępnych informacji", + "publisher-contact": "Aby uzyskać więcej informacji na temat dostępności tego produktu, prosimy o kontakt z wydawcą: ", + "title": "Podsumowanie dostępności" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Role ARIA uwzględnione", + "descriptive": "Treść jest wzbogacona o role ARIA w celu optymalizacji organizacji i ułatwienia nawigacji" + }, + "audio-descriptions": "Audiodeskrypcja", + "braille": "Brajl", + "color-not-sole-means-of-conveying-information": "Kolor nie jest jedynym środkiem przekazywania informacji", + "dyslexia-readability": "Czytelność dla dyslektyków", + "full-ruby-annotations": "Pełne adnotacje ruby", + "high-contrast-between-foreground-and-background-audio": "Wysoki kontrast między dźwiękami pierwszego i drugiego planu", + "high-contrast-between-text-and-background": "Wysoki kontrast między tekstem a tłem", + "large-print": "Duży druk", + "page-breaks": { + "compact": "Podziały stron uwzględnione", + "descriptive": "Podziały stron uwzględnione z oryginalnego źródła drukowanego" + }, + "ruby-annotations": "Niektóre adnotacje ruby", + "sign-language": "Język migowy", + "tactile-graphics": { + "compact": "Grafika dotykowa uwzględniona", + "descriptive": "Zintegrowano grafikę dotykową, aby ułatwić dostęp do elementów wizualnych osobom niewidomym" + }, + "tactile-objects": "Dotykowe obiekty 3D", + "text-to-speech-hinting": "Wskazówki zamiany tekstu na mowę są dostępne", + "title": "Dodatkowe informacje o dostępności", + "ultra-high-contrast-between-text-and-background": "Ultra wysoki kontrast między tekstem a tłem", + "visible-page-numbering": "Widoczna numeracja stron", + "without-background-sounds": "Bez dźwięków tła" + }, + "conformance": { + "a": { + "compact": "Ta publikacja spełnia minimalne standardy dostępności", + "descriptive": "Publikacja zawiera oświadczenie o zgodności ze standardem EPUB Accessibility i WCAG 2 na poziomie A" + }, + "aa": { + "compact": "Ta publikacja spełnia przyjęte standardy dostępności", + "descriptive": "Publikacja zawiera oświadczenie o zgodności ze standardem EPUB Accessibility i WCAG 2 na poziomie AA" + }, + "aaa": { + "compact": "Ta publikacja przekracza przyjęte standardy dostępności", + "descriptive": "Publikacja zawiera oświadczenie o zgodności ze standardem EPUB Accessibility i WCAG 2 na poziomie AAA" + }, + "certifier": "Publikacja została certyfikowana przez ", + "certifier-credentials": "Dane uwierzytelniające certyfikatora to ", + "details": { + "certification-info": "Publikacja została certyfikowana dnia ", + "certifier-report": "Aby uzyskać więcej informacji, zapoznaj się z raportem certyfikatora", + "claim": "Ta publikacja deklaruje spełnienie", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "Poziom A", + "level-aa": "Poziom AA", + "level-aaa": "Poziom AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Wytyczne dotyczące dostępności treści internetowych (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Wytyczne dotyczące dostępności treści internetowych (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Wytyczne dotyczące dostępności treści internetowych (WCAG) 2.2" + } + }, + "details-title": "Szczegółowe informacje o zgodności", + "no": "Brak dostępnych informacji", + "title": "Zgodność", + "unknown-standard": "Nie można określić zgodności tej publikacji z przyjętymi standardami dostępności" + }, + "hazards": { + "flashing": { + "compact": "Migające treści", + "descriptive": "Publikacja zawiera migające treści mogące powodować napady fotosensytywne" + }, + "flashing-none": { + "compact": "Brak migających treści", + "descriptive": "Publikacja nie zawiera migających treści mogących powodować napady fotosensytywne" + }, + "flashing-unknown": { + "compact": "Obecność migających treści nieznana", + "descriptive": "Nie można określić obecności migających treści mogących powodować napady fotosensytywne" + }, + "motion": { + "compact": "Symulacja ruchu", + "descriptive": "Publikacja zawiera symulacje ruchu mogące powodować chorobę lokomocyjną" + }, + "motion-none": { + "compact": "Brak symulacji ruchu", + "descriptive": "Publikacja nie zawiera symulacji ruchu mogących powodować chorobę lokomocyjną" + }, + "motion-unknown": { + "compact": "Obecność symulacji ruchu nieznana", + "descriptive": "Nie można określić obecności symulacji ruchu mogących powodować chorobę lokomocyjną" + }, + "no-metadata": "Brak dostępnych informacji", + "none": { + "compact": "Brak zagrożeń", + "descriptive": "Publikacja nie zawiera zagrożeń" + }, + "sound": { + "compact": "Dźwięki", + "descriptive": "Publikacja zawiera dźwięki mogące powodować problemy z wrażliwością" + }, + "sound-none": { + "compact": "Brak zagrożeń dźwiękowych", + "descriptive": "Publikacja nie zawiera dźwięków mogących powodować problemy z wrażliwością" + }, + "sound-unknown": { + "compact": "Obecność zagrożeń dźwiękowych nieznana", + "descriptive": "Nie można określić obecności dźwięków mogących powodować problemy z wrażliwością" + }, + "title": "Zagrożenia", + "unknown": "Obecność zagrożeń jest nieznana" + }, + "legal-considerations": { + "exempt": { + "compact": "Zgłasza zwolnienie z wymogów dostępności w niektórych jurysdykcjach", + "descriptive": "Ta publikacja zgłasza zwolnienie z wymogów dostępności w niektórych jurysdykcjach" + }, + "no-metadata": "Brak dostępnych informacji", + "title": "Kwestie prawne" + }, + "navigation": { + "index": { + "compact": "Indeks", + "descriptive": "Indeks z odnośnikami do przywołanych pozycji" + }, + "no-metadata": "Brak dostępnych informacji", + "page-navigation": { + "compact": "Przejdź do strony", + "descriptive": "Lista stron umożliwiająca przejście do stron z wersji drukowanej" + }, + "structural": { + "compact": "Nagłówki", + "descriptive": "Elementy takie jak nagłówki, tabele itp. do nawigacji strukturalnej" + }, + "title": "Nawigacja", + "toc": { + "compact": "Spis treści", + "descriptive": "Spis treści do wszystkich rozdziałów tekstu za pomocą odnośników" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Wzory chemiczne w LaTeX", + "descriptive": "Wzory chemiczne w dostępnym formacie (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Wzory chemiczne w MathML", + "descriptive": "Wzory chemiczne w dostępnym formacie (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matematyka w LaTeX", + "descriptive": "Wzory matematyczne w dostępnym formacie (LaTeX)" + }, + "accessible-math-described": "Dostępne są tekstowe opisy wzorów matematycznych", + "closed-captions": { + "compact": "Filmy mają napisy ukryte", + "descriptive": "Filmy zawarte w publikacji mają napisy ukryte" + }, + "extended-descriptions": "Bogate w informacje obrazy są opisane za pomocą rozszerzonych opisów", + "math-as-mathml": { + "compact": "Matematyka w MathML", + "descriptive": "Wzory matematyczne w dostępnym formacie (MathML)" + }, + "open-captions": { + "compact": "Filmy mają napisy otwarte", + "descriptive": "Filmy zawarte w publikacji mają napisy otwarte" + }, + "title": "Bogate treści", + "transcript": "Dostępny transkrypt(y)", + "unknown": "Brak dostępnych informacji" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Posiada tekst alternatywny", + "descriptive": "Posiada alternatywne opisy tekstowe dla obrazów" + }, + "no-metadata": "Brak informacji o czytaniu niewizuwalnym", + "none": { + "compact": "Niedostępne do odczytu głosowego lub dynamicznego brajla", + "descriptive": "Treść nie jest dostępna jako mowa odczytywana na głos ani dynamiczny brajl" + }, + "not-fully": { + "compact": "Nie w pełni dostępne do odczytu głosowego lub dynamicznego brajla", + "descriptive": "Nie cała treść będzie dostępna jako mowa odczytywana na głos lub dynamiczny brajl" + }, + "readable": { + "compact": "Dostępne do odczytu głosowego lub dynamicznego brajla", + "descriptive": "Cała treść może być odczytana jako mowa odczytywana na głos lub dynamiczny brajl" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Nagrania audio", + "descriptive": "Nagrania audio są osadzone w treści" + }, + "no-metadata": "Brak informacji o nagraniach audio", + "only": { + "compact": "Tylko nagrania audio", + "descriptive": "Audiobook bez alternatywy tekstowej" + }, + "synchronized": { + "compact": "Nagrania audio zsynchronizowane z tekstem", + "descriptive": "Cała treść jest dostępna jako nagrania audio zsynchronizowane z tekstem" + } + }, + "title": "Sposoby czytania", + "visual-adjustments": { + "modifiable": { + "compact": "Wygląd można modyfikować", + "descriptive": "Wygląd tekstu i układ strony można modyfikować zgodnie z możliwościami systemu czytania (rodzina i rozmiar czcionki, odstępy między akapitami, zdaniami, słowami i literami, a także kolor tła i tekstu)" + }, + "unknown": "Brak informacji o możliwości modyfikacji wyglądu", + "unmodifiable": { + "compact": "Wygląd nie może być modyfikowany", + "descriptive": "Tekstu i układu strony nie można modyfikować, ponieważ doświadczenie czytania jest zbliżone do wersji drukowanej, ale systemy czytania mogą nadal udostępniać opcje powiększania" + } + } + } + } + }, + "altIdentifier_few": "alternatywne identyfikatory", + "altIdentifier_many": "alternatywnych identyfikatorów", + "altIdentifier_one": "alternatywny identyfikator", + "artist_few": "artystów", + "artist_many": "artystów", + "artist_one": "artysta", + "author_few": "autorów", + "author_many": "autorów", + "author_one": "autor", + "collection_few": "kolekcje redakcyjne", + "collection_many": "kolekcji redakcyjnych", + "collection_one": "kolekcja redakcyjna", + "colorist_few": "kolorystów", + "colorist_many": "kolorystów", + "colorist_one": "kolorzysta", + "contributor_few": "współtwórców", + "contributor_many": "współtwórców", + "contributor_one": "współtwórca", + "description": "opis", + "duration": "czas trwania", + "editor_few": "redaktorów", + "editor_many": "redaktorów", + "editor_one": "redaktor", + "identifier_few": "identyfikatory", + "identifier_many": "identyfikatorów", + "identifier_one": "identyfikator", + "illustrator_few": "ilustratorów", + "illustrator_many": "ilustratorów", + "illustrator_one": "ilustrator", + "imprint_few": "wydawnictwa", + "imprint_many": "wydawnictw", + "imprint_one": "wydawnictwo", + "inker_few": "tuszowników", + "inker_many": "tuszowników", + "inker_one": "tuszownik", + "language_few": "języki", + "language_many": "języków", + "language_one": "język", + "letterer_few": "literników", + "letterer_many": "literników", + "letterer_one": "liternik", + "modified": "data modyfikacji", + "narrator_few": "narratorów", + "narrator_many": "narratorów", + "narrator_one": "narrator", + "numberOfPages": "liczba stron", + "penciler_few": "rysowników", + "penciler_many": "rysowników", + "penciler_one": "rysownik", + "published": "data publikacji", + "publisher_few": "wydawców", + "publisher_many": "wydawców", + "publisher_one": "wydawca", + "series_few": "serie", + "series_many": "serii", + "series_one": "seria", + "subject_few": "tematy", + "subject_many": "tematów", + "subject_one": "temat", + "subtitle": "podtytuł", + "title": "tytuł", + "translator_few": "tłumaczy", + "translator_many": "tłumaczy", + "translator_one": "tłumacz" + } + } +} diff --git a/shared/src/locales/publication-metadata/pt_PT.json b/shared/src/locales/publication-metadata/pt_PT.json new file mode 100644 index 00000000..a141fe4d --- /dev/null +++ b/shared/src/locales/publication-metadata/pt_PT.json @@ -0,0 +1,329 @@ +{ + "publication": { + "format": { + "audiobook": "Audiobook", + "audiobookJSON": "Manifesto do livro áudio", + "cbz": "Banda desenhada", + "divina": "Publicação Divina", + "divinaJSON": "Manifesto de publicação Divina", + "epub": "EPUB", + "pdf": "PDF", + "rwp": "Documento Web do Readium", + "zab": "Ficheiro Audiobook", + "zip": "Ficheiro ZIP" + }, + "kind": { + "audiobook_many": "Livros áudio", + "audiobook_one": "Livro áudio", + "audiobook_other": "Livros áudio", + "book_many": "livros", + "book_one": "livro", + "book_other": "livros", + "comic_many": "Bandas desenhadas", + "comic_one": "Banda desenhada", + "comic_other": "Bandas desenhadas", + "document_many": "documentos", + "document_one": "documento", + "document_other": "documentos" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Sem informação disponível", + "publisher-contact": "Para mais informações sobre a acessibilidade deste produto, contacte a editora: ", + "title": "Resumo de acessibilidade" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Inclui funções ARIA", + "descriptive": "O conteúdo foi otimizado com funções ARIA para melhorar a organização e facilitar a navegação" + }, + "audio-descriptions": "Descrições em áudio", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "A cor não é o único meio de transmitir informação", + "dyslexia-readability": "Otimizado para dislexia", + "full-ruby-annotations": "Anotações Ruby completas", + "high-contrast-between-foreground-and-background-audio": "Alto contraste entre som principal e fundo", + "high-contrast-between-text-and-background": "Alto contraste entre texto e fundo", + "large-print": "Impressão ampliada", + "page-breaks": { + "compact": "Inclui quebras de página", + "descriptive": "Inclui quebras de página da fonte impressa original" + }, + "ruby-annotations": "Algumas anotações Ruby", + "sign-language": "Língua gestual", + "tactile-graphics": { + "compact": "Inclui gráficos táteis", + "descriptive": "Inclui gráficos táteis que facilitam o acesso a elementos visuais para pessoas cegas" + }, + "tactile-objects": "Objetos táteis 3D", + "text-to-speech-hinting": "Sugestões para leitura em voz alta", + "title": "Informação adicional de acessibilidade", + "ultra-high-contrast-between-text-and-background": "Contraste muito elevado entre texto e fundo", + "visible-page-numbering": "Numeração de páginas visível", + "without-background-sounds": "Sem sons de fundo" + }, + "conformance": { + "a": { + "compact": "Cumpre as normas mínimas de acessibilidade", + "descriptive": "A publicação contém uma declaração de conformidade que indica que cumpre o padrão EPUB Accessibility e WCAG 2 nível A" + }, + "aa": { + "compact": "Cumpre as normas aceites de acessibilidade", + "descriptive": "A publicação contém uma declaração de conformidade que indica que cumpre o padrão EPUB Accessibility e WCAG 2 nível AA" + }, + "aaa": { + "compact": "Excede as normas aceites de acessibilidade", + "descriptive": "A publicação contém uma declaração de conformidade que indica que cumpre o padrão EPUB Accessibility e WCAG 2 nível AAA" + }, + "certifier": "A publicação foi certificada por ", + "certifier-credentials": "As credenciais do certificador são ", + "details": { + "certification-info": "A publicação foi certificada em ", + "certifier-report": "Para mais informações, consulte o relatório do certificador", + "claim": "Esta publicação declara conformidade com", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "Nível A", + "level-aa": "Nível AA", + "level-aaa": "Nível AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.2" + } + }, + "details-title": "Detalhes de conformidade", + "no": "Sem informação disponível", + "title": "Conformidade", + "unknown-standard": "Não foi possível determinar a conformidade com as normas de acessibilidade aceites para esta publicação" + }, + "hazards": { + "flashing": { + "compact": "Conteúdo intermitente", + "descriptive": "A publicação contém conteúdo intermitente que pode causar crises fotossensíveis" + }, + "flashing-none": { + "compact": "Sem perigos de intermitência", + "descriptive": "A publicação não contém conteúdo intermitente que possa causar crises fotossensíveis" + }, + "flashing-unknown": { + "compact": "Risco de intermitência desconhecido", + "descriptive": "Não foi possível determinar se existe conteúdo intermitente que possa causar crises fotossensíveis" + }, + "motion": { + "compact": "Simulação de movimento", + "descriptive": "A publicação contém simulações de movimento que podem causar enjoo" + }, + "motion-none": { + "compact": "Sem simulação de movimento", + "descriptive": "A publicação não contém simulações de movimento que possam causar enjoo" + }, + "motion-unknown": { + "compact": "Risco de movimento desconhecido", + "descriptive": "Não foi possível determinar se existem simulações de movimento que possam causar enjoo" + }, + "no-metadata": "Sem informação disponível", + "none": { + "compact": "Sem perigos", + "descriptive": "A publicação não contém perigos conhecidos" + }, + "sound": { + "compact": "Sons sensíveis", + "descriptive": "A publicação contém sons que podem causar sensibilidade auditiva" + }, + "sound-none": { + "compact": "Sem perigos sonoros", + "descriptive": "A publicação não contém sons que possam causar sensibilidade auditiva" + }, + "sound-unknown": { + "compact": "Risco sonoro desconhecido", + "descriptive": "Não foi possível determinar se a publicação contém sons que possam causar sensibilidade auditiva" + }, + "title": "Perigos", + "unknown": "Presença de perigos não determinada" + }, + "legal-considerations": { + "exempt": { + "compact": "Declara isenção de conformidade em algumas jurisdições", + "descriptive": "Esta publicação declara isenção de conformidade em algumas jurisdições" + }, + "no-metadata": "Sem informação disponível", + "title": "Considerações legais" + }, + "navigation": { + "index": { + "compact": "Índice", + "descriptive": "Índice com ligações para entradas referenciadas" + }, + "no-metadata": "Sem informação disponível", + "page-navigation": { + "compact": "Ir para página", + "descriptive": "Lista de páginas que permite aceder às páginas da versão impressa original" + }, + "structural": { + "compact": "Títulos e estrutura", + "descriptive": "Elementos como títulos, tabelas, etc., para navegação estruturada" + }, + "title": "Navegação", + "toc": { + "compact": "Índice", + "descriptive": "Índice de conteúdos com ligações para todos os capítulos do texto" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Fórmulas químicas em LaTeX", + "descriptive": "Fórmulas químicas em formato acessível (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Fórmulas químicas em MathML", + "descriptive": "Fórmulas químicas em formato acessível (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matemática em LaTeX", + "descriptive": "Fórmulas matemáticas em formato acessível (LaTeX)" + }, + "accessible-math-described": "Descrição textual das fórmulas matemáticas", + "closed-captions": { + "compact": "Vídeos com legendas ocultas", + "descriptive": "Os vídeos incluídos na publicação têm legendas ocultas" + }, + "extended-descriptions": "Imagens complexas com descrições detalhadas", + "math-as-mathml": { + "compact": "Matemática em MathML", + "descriptive": "Fórmulas matemáticas em formato acessível (MathML)" + }, + "open-captions": { + "compact": "Vídeos com legendas abertas", + "descriptive": "Os vídeos incluídos na publicação têm legendas abertas" + }, + "title": "Conteúdo rico", + "transcript": "Transcrição fornecida", + "unknown": "Sem informação disponível" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Contém texto alternativo", + "descriptive": "Inclui descrições alternativas de texto para imagens" + }, + "no-metadata": "Sem informação sobre leitura não visual", + "none": { + "compact": "Não legível em leitura em voz alta ou braille dinâmico", + "descriptive": "O conteúdo não é legível em voz alta ou através de braille dinâmico" + }, + "not-fully": { + "compact": "Parcialmente legível em leitura em voz alta ou braille dinâmico", + "descriptive": "Nem todo o conteúdo é legível em voz alta ou através de braille dinâmico" + }, + "readable": { + "compact": "Totalmente legível em leitura em voz alta ou braille dinâmico", + "descriptive": "Todo o conteúdo pode ser lido em voz alta ou através de braille dinâmico" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Contém clipes de áudio pré-gravados", + "descriptive": "O conteúdo contém clipes de áudio pré-gravados incorporados" + }, + "no-metadata": "Sem informação sobre áudio pré-gravado", + "only": { + "compact": "Apenas áudio pré-gravado", + "descriptive": "A publicação é apenas áudio e não possui alternativa em texto" + }, + "synchronized": { + "compact": "Áudio pré-gravado sincronizado com texto", + "descriptive": "Todo o conteúdo está disponível como áudio pré-gravado sincronizado com texto" + } + }, + "title": "Formas de leitura", + "visual-adjustments": { + "modifiable": { + "compact": "Aspeto personalizável", + "descriptive": "O aspeto do texto e o layout da página podem ser modificados de acordo com as capacidades do sistema de leitura (tipo e tamanho de letra, espaçamento entre parágrafos, frases, palavras e letras, bem como a cor de fundo e do texto)" + }, + "unknown": "Sem informação sobre personalização do aspeto", + "unmodifiable": { + "compact": "Aspeto não ajustável", + "descriptive": "O texto e o layout da página não podem ser modificados, uma vez que a experiência de leitura é semelhante à versão impressa, mas os sistemas de leitura ainda podem oferecer opções de ampliação" + } + } + } + } + }, + "altIdentifier_many": "identificadores alternativos", + "altIdentifier_one": "identificador alternativo", + "altIdentifier_other": "identificadores alternativos", + "artist_many": "artistas", + "artist_one": "artista", + "artist_other": "artistas", + "author_many": "autores", + "author_one": "autor", + "author_other": "autores", + "collection_many": "coleções", + "collection_one": "coleção", + "collection_other": "coleções", + "colorist_many": "coloristas", + "colorist_one": "colorista", + "colorist_other": "coloristas", + "contributor_many": "colaboradores", + "contributor_one": "colaborador", + "contributor_other": "colaboradores", + "description": "descrição", + "duration": "duração", + "editor_many": "editores", + "editor_one": "editor", + "editor_other": "editores", + "identifier_many": "identificadores", + "identifier_one": "identificador", + "identifier_other": "identificadores", + "illustrator_many": "ilustradores", + "illustrator_one": "ilustrador", + "illustrator_other": "ilustradores", + "imprint_many": "chancelas", + "imprint_one": "chancela", + "imprint_other": "chancelas", + "inker_many": "arte-finalistas", + "inker_one": "arte-finalista", + "inker_other": "arte-finalistas", + "language_many": "idiomas", + "language_one": "idioma", + "language_other": "idiomas", + "letterer_many": "letristas", + "letterer_one": "letrista", + "letterer_other": "letristas", + "modified": "data de modificação", + "narrator_many": "narradores", + "narrator_one": "narrador", + "narrator_other": "narradores", + "numberOfPages": "número de páginas", + "penciler_many": "desenhadores", + "penciler_one": "desenhador", + "penciler_other": "desenhadores", + "published": "data de publicação", + "publisher_many": "editoras", + "publisher_one": "editora", + "publisher_other": "editoras", + "series_many": "séries", + "series_one": "série", + "series_other": "séries", + "subject_many": "temas", + "subject_one": "tema", + "subject_other": "temas", + "subtitle": "subtítulo", + "title": "título", + "translator_many": "tradutores", + "translator_one": "tradutor", + "translator_other": "tradutores" + } + } +} diff --git a/shared/src/locales/publication-metadata/sv.json b/shared/src/locales/publication-metadata/sv.json new file mode 100644 index 00000000..aa3db50f --- /dev/null +++ b/shared/src/locales/publication-metadata/sv.json @@ -0,0 +1,310 @@ +{ + "publication": { + "format": { + "audiobook": "Ljudbok", + "audiobookJSON": "Ljudbok (manifest)", + "cbz": "Serietidning (CBZ-arkiv)", + "divina": "Divina-publikation", + "divinaJSON": "Divina (manifest)", + "epub": "EPUB", + "lcpa": "LCP-skyddad ljudbok", + "lcpdf": "LCP-skyddad PDF", + "lcpl": "LCP-licensdokument", + "pdf": "PDF", + "rwp": "Readium webbpublikation", + "rwpm": "Readium webbpublikation (manifest)", + "zab": "Ljudbok (arkiv)", + "zip": "ZIP-arkiv" + }, + "kind": { + "audiobook_one": "ljudbok", + "audiobook_other": "ljudböcker", + "book_one": "bok", + "book_other": "böcker", + "comic_one": "serietidning", + "comic_other": "serietidningar", + "document_one": "dokument", + "document_other": "dokument" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Information saknas", + "publisher-contact": "För mer information om den här publikationens tillgänglighet, kontakta utgivaren: ", + "title": "Kompletterande information om tillgänglighet" + }, + "additional-accessibility-information": { + "aria": { + "compact": "Innehåller ARIA-roller", + "descriptive": "Innehållet har försetts med ARIA-roller för att tydliggöra strukturen och underlätta navigering" + }, + "audio-descriptions": "Syntolkning", + "braille": "Punktskrift", + "color-not-sole-means-of-conveying-information": "Betydelse uttrycks aldrig enbart med färg", + "dyslexia-readability": "Förbättrad läsbarhet för personer med dyslexi", + "full-ruby-annotations": "Fullständig ruby-annotering", + "high-contrast-between-foreground-and-background-audio": "Hög kontrast mellan förgrundsljud och bakgrundsljud", + "high-contrast-between-text-and-background": "Hög kontrast mellan text och bakgrund", + "large-print": "Storstil", + "page-breaks": { + "compact": "Innehåller sidnummer", + "descriptive": "Innehåller sidnummer från tryckt förlaga" + }, + "ruby-annotations": "Viss ruby-annotering", + "sign-language": "Teckenspråk", + "tactile-graphics": { + "compact": "Innehåller taktila bilder", + "descriptive": "Taktila bilder har lagts till för att tillgängliggöra visuella element för personer med synnedsättning" + }, + "tactile-objects": "Taktila 3D-objekt", + "text-to-speech-hinting": "Innehåller uttalsinstruktioner för talsyntes", + "title": "Ytterligare tillgänglighetsinformation", + "ultra-high-contrast-between-text-and-background": "Extra hög kontrast mellan text och bakgrund", + "visible-page-numbering": "Synlig sidnumrering", + "without-background-sounds": "Utan bakgrundsljud" + }, + "conformance": { + "a": { + "compact": "Publikationen uppfyller tillgänglighetskrav på en grundläggande nivå", + "descriptive": "Publikationen anger att den uppfyller standarderna EPUB Accessibility och WCAG 2 nivå A" + }, + "aa": { + "compact": "Publikationen uppfyller tillgänglighetskrav på en vedertagen nivå", + "descriptive": "Publikationen anger att den uppfyller standarderna EPUB Accessibility och WCAG 2 nivå AA" + }, + "aaa": { + "compact": "Publikationen uppfyller tillgänglighetskrav utöver en vedertagen nivå", + "descriptive": "Publikationen anger att den uppfyller standarderna EPUB Accessibility och WCAG 2 nivå AAA" + }, + "certifier": "Publikationen är certifierad av ", + "certifier-credentials": "Certifierarens märkning är ", + "details": { + "certification-info": "Publikationen certifierades ", + "certifier-report": "Se certifieringsrapporten för mer information", + "claim": "Publikationen anger att den uppfyller kraven enligt", + "epub-accessibility-1-0": "EPUB Accessibility 1.0", + "epub-accessibility-1-1": "EPUB Accessibility 1.1", + "level-a": "nivå A", + "level-aa": "nivå AA", + "level-aaa": "nivå AAA", + "wcag-2-0": { + "compact": "WCAG 2.0", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.0" + }, + "wcag-2-1": { + "compact": "WCAG 2.1", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.1" + }, + "wcag-2-2": { + "compact": "WCAG 2.2", + "descriptive": "Web Content Accessibility Guidelines (WCAG) 2.2" + } + }, + "details-title": "Detaljerad information om tillgänglighetskrav", + "no": "Information saknas", + "title": "Tillgänglighetskrav", + "unknown-standard": "Det går inte att avgöra om publikationen uppfyller vedertagna tillgänglighetskrav" + }, + "hazards": { + "flashing": { + "compact": "Blinkande innehåll", + "descriptive": "Publikationen har blinkande innehåll som kan vara skadligt för ljuskänsliga personer" + }, + "flashing-none": { + "compact": "Inga risker med blinkande innehåll", + "descriptive": "Publikationen har inget blinkande innehåll som kan vara skadligt för ljuskänsliga personer" + }, + "flashing-unknown": { + "compact": "Inga kända risker med blinkande innehåll", + "descriptive": "Förekomst av blinkande innehåll som kan vara skadligt för ljuskänsliga personer är okänd" + }, + "motion": { + "compact": "Rörelsesimulering", + "descriptive": "Publikationen innehåller rörelsesimulering som skulle kunna orsaka illamående" + }, + "motion-none": { + "compact": "Inga risker med rörelsesimulering", + "descriptive": "Publikationen innehåller ingen rörelsesimulering som skulle kunna orsaka illamående" + }, + "motion-unknown": { + "compact": "Inga kända risker med rörelsesimulering", + "descriptive": "Förekomst av rörelsesimulering som skulle kunna orsaka illamående är okänd" + }, + "no-metadata": "Information saknas", + "none": { + "compact": "Inga risker", + "descriptive": "Publikationen innehåller inga risker" + }, + "sound": { + "compact": "Ljud", + "descriptive": "Publikationen innehåller ljud som kan orsaka obehag" + }, + "sound-none": { + "compact": "Inga ljudrelaterade risker", + "descriptive": "Publikationen innehåller inget ljud som kan orsaka obehag" + }, + "sound-unknown": { + "compact": "Inga kända ljudrelaterade risker", + "descriptive": "Förekomst av ljud som kan orsaka obehag är okänd" + }, + "title": "Risker", + "unknown": "Förekomst av risker är okänd" + }, + "legal-considerations": { + "exempt": { + "compact": "Åberopar ett undantag från vissa lagstadgade tillgänglighetskrav", + "descriptive": "Publikationen åberopar ett undantag från vissa lagstadgade tillgänglighetskrav" + }, + "no-metadata": "Information saknas", + "title": "Juridiska aspekter" + }, + "navigation": { + "index": { + "compact": "Register", + "descriptive": "Register med länkar till innehållet" + }, + "no-metadata": "Information saknas", + "page-navigation": { + "compact": "Gå till sida", + "descriptive": "Sidindelning för navigering enligt sidnummer i tryckt förlaga" + }, + "structural": { + "compact": "Rubriker", + "descriptive": "Navigerbara element såsom rubriker eller tabeller" + }, + "title": "Navigering", + "toc": { + "compact": "Innehållsförteckning", + "descriptive": "Innehållsförteckning med länkar till alla kapitel" + } + }, + "rich-content": { + "accessible-chemistry-as-latex": { + "compact": "Kemiska formler i LaTeX", + "descriptive": "Kemiska formler i tillgängligt format (LaTeX)" + }, + "accessible-chemistry-as-mathml": { + "compact": "Kemiska formler i MathML", + "descriptive": "Kemiska formler i tillgängligt format (MathML)" + }, + "accessible-math-as-latex": { + "compact": "Matematik som LaTeX", + "descriptive": "Matematiska formler i tillgängligt format (LaTeX)" + }, + "accessible-math-described": "Innehåller textbeskrivningar av matematik", + "closed-captions": { + "compact": "Videoklipp har undertext som kan sättas på/stängas av", + "descriptive": "Videoklipp som ingår i publikationen har undertext som kan sättas på och stängas av (stängda undertexter)" + }, + "extended-descriptions": "Informationsrika bilder har utökade bildbeskrivningar", + "math-as-mathml": { + "compact": "Matematik som MathML", + "descriptive": "Matematiska formler i tillgängligt format (MathML)" + }, + "open-captions": { + "compact": "Videoklipp har undertext som inte kan stängas av", + "descriptive": "Videoklipp som ingår i publikationen har undertext som inte kan stängas av (öppna undertexter)" + }, + "title": "Berikat innehåll", + "transcript": "Innehåller transkriptioner", + "unknown": "Information saknas" + }, + "ways-of-reading": { + "nonvisual-reading": { + "alt-text": { + "compact": "Har textalternativ (alt-texter)", + "descriptive": "Har textalternativ (alt-texter) till bilder" + }, + "no-metadata": "Information om icke-visuell läsbarhet saknas", + "none": { + "compact": "Kan inte läsas med uppläsningsfunktion eller punktskriftsskärm", + "descriptive": "Innehållet går inte att läsa med uppläsningsfunktion eller punktskriftsskärm" + }, + "not-fully": { + "compact": "Inte läsbart i sin helhet med uppläsningsfunktion eller punktskriftsskärm", + "descriptive": "Allt innehåll går inte att läsa med uppläsningsfunktion eller punktskriftsskärm" + }, + "readable": { + "compact": "Kan läsas med uppläsningsfunktion eller punktskriftsskärm", + "descriptive": "Hela innehållet går att läsa med uppläsningsfunktion eller punktskriftsskärm" + } + }, + "prerecorded-audio": { + "complementary": { + "compact": "Förinspelade ljudklipp", + "descriptive": "Innehåller förinspelade ljudklipp" + }, + "no-metadata": "Information om förinspelat ljud saknas", + "only": { + "compact": "Endast förinspelat ljud", + "descriptive": "Bok med ljud utan textalternativ" + }, + "synchronized": { + "compact": "Förinspelat ljud synkroniserat med texten", + "descriptive": "Hela innehållet finns tillgängligt som förinspelat ljud synkroniserat med texten" + } + }, + "title": "Olika sätt att läsa", + "visual-adjustments": { + "modifiable": { + "compact": "Utseendet kan justeras", + "descriptive": "Det går att justera text och layout i den utsträckning som läsprogrammet tillåter, till exempel typsnitt, storlek på text, avstånd mellan rader och stycken samt färg på text och bakgrund" + }, + "unknown": "Information om möjlighet att justera utseende saknas", + "unmodifiable": { + "compact": "Utseendet kan inte justeras", + "descriptive": "Text- och sidlayout kan inte justeras eftersom presentationen liknar en tryckt version, men läsprogram kan ha funktioner för att zooma in" + } + } + } + } + }, + "altIdentifier_one": "alternativ identifikator", + "altIdentifier_other": "alternativa identifikatorer", + "artist_one": "konstnär", + "artist_other": "konstnärer", + "author_one": "författare", + "author_other": "författare", + "collection_one": "samling", + "collection_other": "samlingar", + "colorist_one": "färgläggare", + "colorist_other": "färgläggare", + "contributor_one": "medverkande", + "contributor_other": "medverkande", + "description": "beskrivning", + "duration": "speltid", + "editor_one": "redaktör", + "editor_other": "redaktörer", + "identifier_one": "identifikator", + "identifier_other": "identifikatorer", + "illustrator_one": "illustratör", + "illustrator_other": "illustratörer", + "imprint_one": "avtryck", + "imprint_other": "flera avtryck", + "inker_one": "tuschare", + "inker_other": "tuschare", + "language_one": "språk", + "language_other": "språk", + "letterer_one": "textare", + "letterer_other": "textare", + "modified": "ändringsdatum", + "narrator_one": "berättare", + "narrator_other": "berättare", + "numberOfPages": "sidantal", + "penciler_one": "skissare", + "penciler_other": "skissare", + "published": "utgivningsdatum", + "publisher_one": "utgivare", + "publisher_other": "utgivare", + "series_one": "serie", + "series_other": "serier", + "subject_one": "ämne", + "subject_other": "ämnen", + "subtitle": "undertitel", + "title": "titel", + "translator_one": "översättare", + "translator_other": "översättare" + } + } +} diff --git a/shared/src/locales/publication-metadata/tr.json b/shared/src/locales/publication-metadata/tr.json new file mode 100644 index 00000000..3d989bdf --- /dev/null +++ b/shared/src/locales/publication-metadata/tr.json @@ -0,0 +1,51 @@ +{ + "publication": { + "format": { + "audiobook": "Sesli Kitap", + "audiobookJSON": "Sesli Kitap Manifest Dosyası", + "cbz": "Çizgi Roman Arşivi", + "divina": "Divina Yayını", + "divinaJSON": "Divina Yayını Manifest Dosyası", + "epub": "EPUB", + "lcpa": "LCP Korumalı Sesli Kitap", + "lcpdf": "LCP Korumalı PDF", + "lcpl": "LCP Lisans Belgesi", + "pdf": "PDF", + "rwp": "Readium Web Yayını", + "rwpm": "Readium Web Yayını Manifest Dosyası", + "zab": "Sesli Kitap Arşivi", + "zip": "ZIP Arşivi" + }, + "kind": { + "audiobook_one": "Sesli Kitap", + "audiobook_other": "Sesli Kitaplar", + "book_one": "kitap", + "book_other": "kitaplar", + "comic_one": "çizgi roman", + "comic_other": "çizgi romanlar", + "document_one": "belge", + "document_other": "belgeler" + }, + "metadata": { + "accessibility": { + "display-guide": { + "accessibility-summary": { + "no-metadata": "Bilgi mevcut değil", + "publisher-contact": "Bu ürünün erişilebilirliği hakkında daha fazla bilgi için lütfen yayıncıyla bağlantı kurun: ", + "title": "Erişilebilirlik özeti" + }, + "additional-accessibility-information": { + "aria": { + "compact": "ARIA rolleri dahildir", + "descriptive": "İçerik, düzeni en iyi hale getirmek ve gezinmeyi kolaylaştırmak için ARIA rolleriyle iyileştirilmiştir" + }, + "audio-descriptions": "Sesli betimlemeler", + "braille": "Braille", + "color-not-sole-means-of-conveying-information": "Renk, bilgi aktarmanın tek yolu değildir", + "dyslexia-readability": "Okuma güçlüğü olanlar için uyarlanmış okunabilirlik" + } + } + } + } + } +} diff --git a/shared/src/locales/publication-metadata/uk.json b/shared/src/locales/publication-metadata/uk.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/shared/src/locales/publication-metadata/uk.json @@ -0,0 +1 @@ +{} diff --git a/shared/src/publication/accessibility/Localization.ts b/shared/src/publication/accessibility/Localization.ts index eb40b690..d1a6f098 100644 --- a/shared/src/publication/accessibility/Localization.ts +++ b/shared/src/publication/accessibility/Localization.ts @@ -1,8 +1,5 @@ -// Localization.ts - import { SUPPORTED_LANGUAGES } from './SupportedLanguages.ts'; -// Static import for English (default locale) -import enLocale from '@edrlab/thorium-locales/publication-metadata/en.json'; +import enLocale from '../../locales/publication-metadata/en.json'; export interface L10nString { compact: string; @@ -16,16 +13,16 @@ interface LocaleData { // Dynamic imports for non-English locales const jsonLoaders: Record Promise<{ default: any }>> = { - 'fr': () => import('@edrlab/thorium-locales/publication-metadata/fr.json'), - 'ar': () => import('@edrlab/thorium-locales/publication-metadata/ar.json'), - 'da': () => import('@edrlab/thorium-locales/publication-metadata/da.json'), -// 'el': () => import('@edrlab/thorium-locales/publication-metadata/el.json'), -// 'et': () => import('@edrlab/thorium-locales/publication-metadata/et.json'), - 'it': () => import('@edrlab/thorium-locales/publication-metadata/it.json'), - 'pt_PT': () => import('@edrlab/thorium-locales/publication-metadata/pt_PT.json'), - 'sv': () => import('@edrlab/thorium-locales/publication-metadata/sv.json'), -// 'tr': () => import('@edrlab/thorium-locales/publication-metadata/tr.json'), -// 'uk': () => import('@edrlab/thorium-locales/publication-metadata/uk.json') + 'ar': () => import('../../locales/publication-metadata/ar.json'), + 'da': () => import('../../locales/publication-metadata/da.json'), + 'es': () => import('../../locales/publication-metadata/es.json'), + 'et': () => import('../../locales/publication-metadata/et.json'), + 'fi': () => import('../../locales/publication-metadata/fi.json'), + 'fr': () => import('../../locales/publication-metadata/fr.json'), + 'it': () => import('../../locales/publication-metadata/it.json'), + 'pl': () => import('../../locales/publication-metadata/pl.json'), + 'pt_PT': () => import('../../locales/publication-metadata/pt_PT.json'), + 'sv': () => import('../../locales/publication-metadata/sv.json') }; // Extract English accessibility data diff --git a/shared/src/publication/accessibility/SupportedLanguages.ts b/shared/src/publication/accessibility/SupportedLanguages.ts index 870c5065..fd6358a2 100644 --- a/shared/src/publication/accessibility/SupportedLanguages.ts +++ b/shared/src/publication/accessibility/SupportedLanguages.ts @@ -1 +1 @@ -export const SUPPORTED_LANGUAGES = ['en', 'ar', 'da', 'fr', 'it', 'pt_PT', 'sv']; \ No newline at end of file +export const SUPPORTED_LANGUAGES = ['en', 'ar', 'da', 'es', 'et', 'fi', 'fr', 'it', 'pl', 'pt_PT', 'sv']; \ No newline at end of file From 675448dd880ce48f879e0acbd9ae3db4316a2941 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 1 Jun 2026 14:29:53 +0200 Subject: [PATCH 9/9] Fix prototype augmentation --- navigator-html-injectables/src/index.ts | 2 + navigator-html-injectables/vite.config.js | 2 +- navigator/src/index.ts | 2 + navigator/vite.config.js | 2 +- shared/package.json | 23 ++- .../src/publication/encryption/Properties.ts | 14 +- shared/src/publication/encryption/index.ts | 2 +- shared/src/publication/epub/Metadata.ts | 14 +- shared/src/publication/epub/Properties.ts | 10 +- shared/src/publication/epub/Publication.ts | 40 ++--- shared/src/publication/epub/index.ts | 6 +- shared/src/publication/html/Locations.ts | 138 +++++++++--------- shared/src/publication/html/index.ts | 2 +- shared/src/publication/opds/Properties.ts | 70 ++++----- shared/src/publication/opds/Publication.ts | 10 +- shared/src/publication/opds/index.ts | 4 +- 16 files changed, 192 insertions(+), 149 deletions(-) diff --git a/navigator-html-injectables/src/index.ts b/navigator-html-injectables/src/index.ts index d136116d..b123c236 100644 --- a/navigator-html-injectables/src/index.ts +++ b/navigator-html-injectables/src/index.ts @@ -1,3 +1,5 @@ +export { __htmlLocations } from "@readium/shared/html"; + export * from './comms/index.ts'; export * from './modules/index.ts'; export * from './Loader.ts'; diff --git a/navigator-html-injectables/vite.config.js b/navigator-html-injectables/vite.config.js index 34efc024..e3f3038d 100644 --- a/navigator-html-injectables/vite.config.js +++ b/navigator-html-injectables/vite.config.js @@ -6,7 +6,7 @@ export default defineConfig({ build: { rollupOptions: { input: resolve(__dirname, "src/index.ts"), - external: ["@readium/shared"], + external: [/^@readium\/shared(\/.*)?$/], preserveEntrySignatures: "strict", output: { format: "es", diff --git a/navigator/src/index.ts b/navigator/src/index.ts index 38cb5040..b13fa9ec 100644 --- a/navigator/src/index.ts +++ b/navigator/src/index.ts @@ -1,3 +1,5 @@ +export { __htmlLocations } from "@readium/shared/html"; + export * from './Navigator.ts'; export * from './webpub/index.ts'; export * from './epub/index.ts'; diff --git a/navigator/vite.config.js b/navigator/vite.config.js index c9d9dfeb..fa3015c1 100644 --- a/navigator/vite.config.js +++ b/navigator/vite.config.js @@ -6,7 +6,7 @@ export default defineConfig({ build: { rollupOptions: { input: resolve(__dirname, "src/index.ts"), - external: ["@readium/shared", "@readium/navigator-html-injectables"], + external: [/^@readium\/shared(\/.*)?$/, "@readium/navigator-html-injectables"], preserveEntrySignatures: "strict", output: { format: "es", diff --git a/shared/package.json b/shared/package.json index fa40f2bd..5dc1a8b7 100644 --- a/shared/package.json +++ b/shared/package.json @@ -31,14 +31,25 @@ ".": { "types": "./types/src/index.d.ts", "import": "./dist/index.js" + }, + "./html": { + "types": "./types/src/publication/html/index.d.ts", + "import": "./dist/publication/html/index.js" + }, + "./epub": { + "types": "./types/src/publication/epub/index.d.ts", + "import": "./dist/publication/epub/index.js" + }, + "./opds": { + "types": "./types/src/publication/opds/index.d.ts", + "import": "./dist/publication/opds/index.js" + }, + "./encryption": { + "types": "./types/src/publication/encryption/index.d.ts", + "import": "./dist/publication/encryption/index.js" } }, - "sideEffects": [ - "dist/publication/epub/**/*.js", - "dist/publication/opds/**/*.js", - "dist/publication/html/**/*.js", - "dist/publication/encryption/**/*.js" - ], + "sideEffects": false, "files": [ "dist", "src", diff --git a/shared/src/publication/encryption/Properties.ts b/shared/src/publication/encryption/Properties.ts index 68f7150c..48b31af6 100644 --- a/shared/src/publication/encryption/Properties.ts +++ b/shared/src/publication/encryption/Properties.ts @@ -13,8 +13,12 @@ declare module '../Properties' { } } -Object.defineProperty(Properties.prototype, 'encryption', { - get: function(): Encryption | undefined { - return Encryption.deserialize(this.otherProperties.encrypted); - }, -}); +export const __encryptionProperties = ((): true => { + Object.defineProperty(Properties.prototype, 'encryption', { + get: function(): Encryption | undefined { + return Encryption.deserialize(this.otherProperties.encrypted); + }, + }); + + return true; +})(); diff --git a/shared/src/publication/encryption/index.ts b/shared/src/publication/encryption/index.ts index 96c39e94..6b3f965a 100644 --- a/shared/src/publication/encryption/index.ts +++ b/shared/src/publication/encryption/index.ts @@ -1,2 +1,2 @@ export * from './Encryption.ts'; -export * from './Properties.ts'; +export { __encryptionProperties } from './Properties.ts'; diff --git a/shared/src/publication/epub/Metadata.ts b/shared/src/publication/epub/Metadata.ts index 54663d8d..e7aff8ca 100644 --- a/shared/src/publication/epub/Metadata.ts +++ b/shared/src/publication/epub/Metadata.ts @@ -7,10 +7,14 @@ declare module '../Metadata' { } } -Metadata.prototype.getMediaOverlay = function(): MediaOverlay | undefined { - const mediaOverlay = this.otherMetadata?.['mediaOverlay']; +export const __epubMetadata = ((): true => { + Metadata.prototype.getMediaOverlay = function(): MediaOverlay | undefined { + const mediaOverlay = this.otherMetadata?.['mediaOverlay']; - if (!mediaOverlay) return; + if (!mediaOverlay) return; - return MediaOverlay.deserialize(mediaOverlay); -}; + return MediaOverlay.deserialize(mediaOverlay); + }; + + return true; +})(); diff --git a/shared/src/publication/epub/Properties.ts b/shared/src/publication/epub/Properties.ts index 8f6f3ab9..c2eea133 100644 --- a/shared/src/publication/epub/Properties.ts +++ b/shared/src/publication/epub/Properties.ts @@ -13,6 +13,10 @@ declare module '../Properties' { } } -Properties.prototype.getContains = function(): Set | undefined { - return new Set(this.otherProperties['contains'] || []); -}; +export const __epubProperties = ((): true => { + Properties.prototype.getContains = function(): Set | undefined { + return new Set(this.otherProperties['contains'] || []); + }; + + return true; +})(); diff --git a/shared/src/publication/epub/Publication.ts b/shared/src/publication/epub/Publication.ts index 6a12e736..22f9245d 100644 --- a/shared/src/publication/epub/Publication.ts +++ b/shared/src/publication/epub/Publication.ts @@ -26,26 +26,30 @@ declare module '../Publication' { } } -Publication.prototype.getPageList = function(): Links | undefined { - return this.linksWithRole('pageList'); -}; +export const __epubPublication = ((): true => { + Publication.prototype.getPageList = function(): Links | undefined { + return this.linksWithRole('pageList'); + }; -Publication.prototype.getLandmarks = function(): Links | undefined { - return this.linksWithRole('landmarks'); -}; + Publication.prototype.getLandmarks = function(): Links | undefined { + return this.linksWithRole('landmarks'); + }; -Publication.prototype.getListOfAudioClips = function(): Links | undefined { - return this.linksWithRole('loa'); -}; + Publication.prototype.getListOfAudioClips = function(): Links | undefined { + return this.linksWithRole('loa'); + }; -Publication.prototype.getListOfIllustrations = function(): Links | undefined { - return this.linksWithRole('loi'); -}; + Publication.prototype.getListOfIllustrations = function(): Links | undefined { + return this.linksWithRole('loi'); + }; -Publication.prototype.getListOfTables = function(): Links | undefined { - return this.linksWithRole('lot'); -}; + Publication.prototype.getListOfTables = function(): Links | undefined { + return this.linksWithRole('lot'); + }; -Publication.prototype.getListOfVideoClips = function(): Links | undefined { - return this.linksWithRole('lov'); -}; + Publication.prototype.getListOfVideoClips = function(): Links | undefined { + return this.linksWithRole('lov'); + }; + + return true; +})(); diff --git a/shared/src/publication/epub/index.ts b/shared/src/publication/epub/index.ts index a43d1be4..afd13142 100644 --- a/shared/src/publication/epub/index.ts +++ b/shared/src/publication/epub/index.ts @@ -1,4 +1,4 @@ export * from './MediaOverlay.ts'; -export * from './Metadata.ts'; -export * from './Properties.ts'; -export * from './Publication.ts'; +export { __epubMetadata } from './Metadata.ts'; +export { __epubProperties } from './Properties.ts'; +export { __epubPublication } from './Publication.ts'; diff --git a/shared/src/publication/html/Locations.ts b/shared/src/publication/html/Locations.ts index a2af36a3..97436fa7 100644 --- a/shared/src/publication/html/Locations.ts +++ b/shared/src/publication/html/Locations.ts @@ -56,74 +56,78 @@ declare module '../Locator' { } } -LocatorLocations.prototype.getCssSelector = function(): string | undefined { - return this.otherLocations?.get('cssSelector'); -}; - -LocatorLocations.prototype.getPartialCfi = function(): string | undefined { - return this.otherLocations?.get('partialCfi'); -}; - -LocatorLocations.prototype.getDomRange = function(): DomRange | undefined { - return DomRange.deserialize(this.otherLocations?.get('domRange')); -}; - -// Below is technically part of the Navigator's Locator extensions, we're putting it here for now - -// Reference: https://www.w3.org/TR/fragid-best-practices -LocatorLocations.prototype.fragmentParameters = function(): Map { - return new Map( - this.fragments - // Concatenates fragments together, after dropping any # - .map(f => f.startsWith("#") ? f.slice(1) : f) - .join("&") - // Splits parameters - .split("&") - .filter(f => !f.startsWith("#")) - .map(f => f.split("=")) - // Only keep named parameters - .filter(f => f.length === 2) - .map(f => [ - f[0].trim().toLowerCase(), - f[1].trim() - ]) - ); -}; - -LocatorLocations.prototype.htmlId = function(): string | undefined { - /* - The HTML 5 specification (used for WebPub) allows any character in an HTML ID, except spaces. - This is an issue to differentiate with named parameters, so we ignore any ID containing `=`. - */ - if(!this.fragments.length) return; - let f = this.fragments.find(f => f.length && !f.includes("=")); - if(!f) { - const fp = this.fragmentParameters(); - if(fp.has("id")) f = fp.get("id"); - else if(fp.has("name")) f = fp.get("name"); +export const __htmlLocations = ((): true => { + LocatorLocations.prototype.getCssSelector = function(): string | undefined { + return this.otherLocations?.get('cssSelector'); + }; + + LocatorLocations.prototype.getPartialCfi = function(): string | undefined { + return this.otherLocations?.get('partialCfi'); + }; + + LocatorLocations.prototype.getDomRange = function(): DomRange | undefined { + return DomRange.deserialize(this.otherLocations?.get('domRange')); + }; + + // Below is technically part of the Navigator's Locator extensions, we're putting it here for now + + // Reference: https://www.w3.org/TR/fragid-best-practices + LocatorLocations.prototype.fragmentParameters = function(): Map { + return new Map( + this.fragments + // Concatenates fragments together, after dropping any # + .map(f => f.startsWith("#") ? f.slice(1) : f) + .join("&") + // Splits parameters + .split("&") + .filter(f => !f.startsWith("#")) + .map(f => f.split("=")) + // Only keep named parameters + .filter(f => f.length === 2) + .map(f => [ + f[0].trim().toLowerCase(), + f[1].trim() + ]) + ); + }; + + LocatorLocations.prototype.htmlId = function(): string | undefined { + /* + The HTML 5 specification (used for WebPub) allows any character in an HTML ID, except spaces. + This is an issue to differentiate with named parameters, so we ignore any ID containing `=`. + */ + if(!this.fragments.length) return; + let f = this.fragments.find(f => f.length && !f.includes("=")); + if(!f) { + const fp = this.fragmentParameters(); + if(fp.has("id")) f = fp.get("id"); + else if(fp.has("name")) f = fp.get("name"); + } + return f?.startsWith("#") ? f.slice(1) : f; + }; + + LocatorLocations.prototype.page = function(): number | undefined { + const i = parseInt(this.fragmentParameters().get("page")!); + if(!isNaN(i) && i >= 0) return i; + return undefined; } - return f?.startsWith("#") ? f.slice(1) : f; -}; -LocatorLocations.prototype.page = function(): number | undefined { - const i = parseInt(this.fragmentParameters().get("page")!); - if(!isNaN(i) && i >= 0) return i; - return undefined; -} + LocatorLocations.prototype.time = function(): number | undefined { + // TODO more sophiticated parsing + const i = parseInt(this.fragmentParameters().get("t")!); + if(!isNaN(i)) return i; + return undefined; + } -LocatorLocations.prototype.time = function(): number | undefined { - // TODO more sophiticated parsing - const i = parseInt(this.fragmentParameters().get("t")!); - if(!isNaN(i)) return i; - return undefined; -} + LocatorLocations.prototype.space = function(): [number, number, number, number] | undefined { + const fp = this.fragmentParameters(); + if(!fp.has("xywh")) return; + // TODO more sophiticated parsing to handle the format + const xywh = fp.get("xywh")!.split(",").map(s => parseInt(s)); + if(xywh.length !== 4) return; // Must have four parts + if(xywh.some(isNaN)) return; // All parts must be numbers + return xywh as [number, number, number, number]; + } -LocatorLocations.prototype.space = function(): [number, number, number, number] | undefined { - const fp = this.fragmentParameters(); - if(!fp.has("xywh")) return; - // TODO more sophiticated parsing to handle the format - const xywh = fp.get("xywh")!.split(",").map(s => parseInt(s)); - if(xywh.length !== 4) return; // Must have four parts - if(xywh.some(isNaN)) return; // All parts must be numbers - return xywh as [number, number, number, number]; -} + return true; +})(); diff --git a/shared/src/publication/html/index.ts b/shared/src/publication/html/index.ts index 9a5b3d8b..af84f169 100644 --- a/shared/src/publication/html/index.ts +++ b/shared/src/publication/html/index.ts @@ -1,3 +1,3 @@ export * from './DomRange.ts'; export * from './DomRangePoint.ts'; -export * from './Locations.ts'; +export { __htmlLocations } from './Locations.ts'; diff --git a/shared/src/publication/opds/Properties.ts b/shared/src/publication/opds/Properties.ts index 7a67c2ab..b6e91658 100644 --- a/shared/src/publication/opds/Properties.ts +++ b/shared/src/publication/opds/Properties.ts @@ -49,36 +49,40 @@ declare module '../Properties' { } } -Properties.prototype.getNumberOfItems = function(): number | undefined { - return positiveNumberfromJSON(this.otherProperties['numberOfItems']); -}; - -Properties.prototype.getPrice = function(): Price | undefined { - return Price.deserialize(this.otherProperties['price']); -}; - -Properties.prototype.getIndirectAcquisitions = function(): - | Array - | undefined { - const json = this.otherProperties['indirectAcquisition']; - if (!(json && Array.isArray(json))) return; - return json - .map(item => Acquisition.deserialize(item) as Acquisition) - .filter(x => x !== undefined); -}; - -Properties.prototype.getHolds = function(): Holds | undefined { - return Holds.deserialize(this.otherProperties['holds']); -}; - -Properties.prototype.getCopies = function(): Copies | undefined { - return Copies.deserialize(this.otherProperties['copies']); -}; - -Properties.prototype.getAvailability = function(): Availability | undefined { - return Availability.deserialize(this.otherProperties['availability']); -}; - -Properties.prototype.getAuthenticate = function(): Link | undefined { - return Link.deserialize(this.otherProperties['authenticate']); -}; +export const __opdsProperties = ((): true => { + Properties.prototype.getNumberOfItems = function(): number | undefined { + return positiveNumberfromJSON(this.otherProperties['numberOfItems']); + }; + + Properties.prototype.getPrice = function(): Price | undefined { + return Price.deserialize(this.otherProperties['price']); + }; + + Properties.prototype.getIndirectAcquisitions = function(): + | Array + | undefined { + const json = this.otherProperties['indirectAcquisition']; + if (!(json && Array.isArray(json))) return; + return json + .map(item => Acquisition.deserialize(item) as Acquisition) + .filter(x => x !== undefined); + }; + + Properties.prototype.getHolds = function(): Holds | undefined { + return Holds.deserialize(this.otherProperties['holds']); + }; + + Properties.prototype.getCopies = function(): Copies | undefined { + return Copies.deserialize(this.otherProperties['copies']); + }; + + Properties.prototype.getAvailability = function(): Availability | undefined { + return Availability.deserialize(this.otherProperties['availability']); + }; + + Properties.prototype.getAuthenticate = function(): Link | undefined { + return Link.deserialize(this.otherProperties['authenticate']); + }; + + return true; +})(); diff --git a/shared/src/publication/opds/Publication.ts b/shared/src/publication/opds/Publication.ts index f3e42d68..83ece957 100644 --- a/shared/src/publication/opds/Publication.ts +++ b/shared/src/publication/opds/Publication.ts @@ -9,6 +9,10 @@ declare module '../Publication' { } } -Publication.prototype.getImages = function(): Links | undefined { - return this.linksWithRole('images'); -}; +export const __opdsPublication = ((): true => { + Publication.prototype.getImages = function(): Links | undefined { + return this.linksWithRole('images'); + }; + + return true; +})(); diff --git a/shared/src/publication/opds/index.ts b/shared/src/publication/opds/index.ts index d8246ae6..d6dfb26a 100644 --- a/shared/src/publication/opds/index.ts +++ b/shared/src/publication/opds/index.ts @@ -1,2 +1,2 @@ -export * from './Properties.ts'; -export * from './Publication.ts'; +export { __opdsProperties } from './Properties.ts'; +export { __opdsPublication } from './Publication.ts';