From 4471127cc955a79181e6e300824704a64a54a0b5 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Thu, 9 Apr 2026 07:29:33 -0700 Subject: [PATCH 01/13] docs(cli): update CLI documentation --- CLAUDE.md | 2 +- docs/cli.md | 200 ++++++++++++++++++++++++++++++++-------- docs/getting-started.md | 6 +- 3 files changed, 166 insertions(+), 42 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index ae9fb2b8..324bcb92 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -86,7 +86,7 @@ libs/ ### Application Responsibilities -- **CLI** (`apps/cli`): Commands for init, add-collection, delete-collection, add-resource. Supports both interactive (TTY) and non-interactive (CI/CD) modes. +- **CLI** (`apps/cli`): Commands for init, add-collection, delete-collection, add-resource, edit-resource, delete-resource, move, normalize, bundle, export, import, validate, find-similar, install-skill. Supports both interactive (TTY) and non-interactive (CI/CD) modes. - **API** (`apps/api`): REST endpoints at `/api/*`, serves static Tracker UI, uses mappers to convert between core domain models and DTOs. - **Tracker UI** (`apps/tracker`): Angular app with Material UI for browsing/managing translations, uses NgRx Signals for state management. diff --git a/docs/cli.md b/docs/cli.md index d39e8ffc..2f3aa13b 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -127,11 +127,11 @@ lingo-tracker add-collection [options] **Options:** -- `--collectionName ` - Name of the new collection (required in non-interactive mode) -- `--translationsFolder ` - Path to the translations directory for this collection (required in non-interactive mode) -- `--exportFolder ` - Override global export folder for this collection -- `--importFolder ` - Override global import folder for this collection -- `--baseLocale ` - Override global base locale +- `--collection-name ` - Name of the new collection (required in non-interactive mode) +- `--translations-folder ` - Path to the translations directory for this collection (required in non-interactive mode) +- `--export-folder ` - Override global export folder for this collection +- `--import-folder ` - Override global import folder for this collection +- `--base-locale ` - Override global base locale - `--locales ` - Override global locales list **Examples:** @@ -144,16 +144,16 @@ lingo-tracker add-collection Simple, using global defaults: ```bash lingo-tracker add-collection \ - --collectionName Admin \ - --translationsFolder apps/admin/src/assets/i18n + --collection-name Admin \ + --translations-folder apps/admin/src/assets/i18n ``` With collection-specific overrides (only differences are saved): ```bash lingo-tracker add-collection \ - --collectionName Mobile \ - --translationsFolder apps/mobile/src/i18n \ - --baseLocale en-GB + --collection-name Mobile \ + --translations-folder apps/mobile/src/i18n \ + --base-locale en-GB ``` **Notes:** @@ -176,7 +176,7 @@ lingo-tracker delete-collection [options] **Options:** -- `--collectionName ` - Name of the collection to delete (required in non-interactive mode) +- `--collection-name ` - Name of the collection to delete (required in non-interactive mode) **Examples:** @@ -187,7 +187,7 @@ lingo-tracker delete-collection Non-interactive mode: ```bash -lingo-tracker delete-collection --collectionName Mobile +lingo-tracker delete-collection --collection-name Mobile ``` **Notes:** @@ -216,7 +216,7 @@ lingo-tracker add-resource [options] - `--value ` - Base (source) text in the base locale (required in non-interactive mode) - `--comment ` - Optional context for translators - `--tags ` - Optional comma-separated tags for filtering/exporting -- `--targetFolder ` - Optional dot-delimited path override for folder placement +- `--target-folder ` - Optional dot-delimited path override for folder placement - `--translations ` - Optional JSON array with translation objects **Translation Object Format:** @@ -263,13 +263,13 @@ lingo-tracker add-resource \ --value OK \ --comment "OK button in dialogs" \ --tags "ui,buttons,dialogs" \ - --targetFolder apps.common \ + --target-folder apps.common \ --translations '[{"locale":"es","value":"Aceptar","status":"translated"},{"locale":"fr-ca","value":"OK","status":"new"}]' ``` **Notes:** - In interactive mode, you'll be prompted if you want to provide translations for each configured locale -- Resources are placed in the appropriate folder based on the key and optional `--targetFolder` +- Resources are placed in the appropriate folder based on the key and optional `--target-folder` - If a translation's checksum matches the base value's checksum, the status will automatically be set to `new` regardless of the provided status --- @@ -362,12 +362,12 @@ lingo-tracker edit-resource [options] - `--collection ` - Collection containing the resource (required in non-interactive mode) - `--key ` - Resource key (required in non-interactive mode) -- `--baseValue ` - New base value (updates source text) +- `--base-value ` - New base value (updates source text) - `--comment ` - New comment - `--tags ` - New tags (comma-separated, replaces existing) -- `--targetFolder ` - New target folder -- `--locale ` - Locale to update (requires `--localeValue`) -- `--localeValue ` - New translation value for the specified locale +- `--target-folder ` - New target folder +- `--locale ` - Locale to update (requires `--locale-value`) +- `--locale-value ` - New translation value for the specified locale **Examples:** @@ -381,7 +381,7 @@ Update base value (marks other locales as stale): lingo-tracker edit-resource \ --collection Main \ --key buttons.save \ - --baseValue "Save Item" + --base-value "Save Item" ``` Update a specific translation: @@ -390,7 +390,7 @@ lingo-tracker edit-resource \ --collection Main \ --key buttons.save \ --locale fr-ca \ - --localeValue "Enregistrer l'article" + --locale-value "Enregistrer l'article" ``` Update metadata: @@ -403,7 +403,7 @@ lingo-tracker edit-resource \ ``` **Notes:** -- Updating `baseValue` triggers a checksum update and marks all other existing translations as `stale`. +- Updating `--base-value` triggers a checksum update and marks all other existing translations as `stale`. - Updating a locale value sets its status to `translated` and updates its checksum. - If no changes are detected (values match existing), the command reports "No changes detected". @@ -424,7 +424,6 @@ lingo-tracker move [options] - `--collection ` - Collection to move resources in (required in non-interactive mode) - `--source ` - Source key or pattern (e.g., `common.buttons.ok` or `common.buttons.*`) (required in non-interactive mode) - `--dest ` - Destination key (e.g., `common.actions.ok` or `common.actions`) (required in non-interactive mode) -- `--destCollection ` - Optional destination collection (defaults to source collection) - `--override` - Overwrite destination if it already exists - `--verbose` - Print detailed output for each moved resource @@ -452,15 +451,6 @@ lingo-tracker move \ ``` *Result: `common.buttons.ok` -> `common.actions.ok`, `common.buttons.cancel` -> `common.actions.cancel`* -Move resource to another collection: -```bash -lingo-tracker move \ - --collection Main \ - --source common.buttons.ok \ - --dest common.buttons.ok \ - --destCollection Admin -``` - Force move (overwrite destination): ```bash lingo-tracker move \ @@ -619,6 +609,7 @@ lingo-tracker bundle [options] - `--locale ` - Specific locale(s) to generate (comma-separated). If not specified, generates all locales - `--token-casing ` - Casing style for generated type token keys: `upperCase` or `camelCase`. Overrides any `tokenCasing` set in the config file. Default: `upperCase` - `--token-constant-name ` - Custom name for the generated TypeScript constant. Must be a valid JavaScript identifier. Only works when targeting a single bundle (via `--name`). Overrides `tokenConstantName` in the bundle config +- `--no-transform-icu-to-transloco` - Disable ICU to Transloco format conversion in bundle output - `--verbose` - Show detailed output including all warnings **What Bundle Generation Does:** @@ -1056,6 +1047,8 @@ The validate command performs a comprehensive check: --- +## Data Exchange Commands + ### export Export translation resources to XLIFF or JSON format for integration with translation services, external systems, and third-party tools. @@ -1304,7 +1297,138 @@ Every export generates an `export-summary.md` file in the output directory conta - Multiple collections merge into single output file per locale (last write wins) - Base locale is excluded from export (use bundle command for base locale) - Dry-run shows accurate resource counts without creating files -- For detailed format specifications and examples, see [Export Feature Documentation](../features/export.md) +- For detailed format specifications and examples, see [Export Feature Documentation](./features/export.md) + +--- + +### import + +Import translation resources from XLIFF or JSON files into a collection. Supports professional translation workflows, language expert verification, system migrations, and bulk corrections. + +For full format specifications, workflow examples, and ICU auto-fix details, see the [Import Feature Documentation](./features/import.md). + +**Usage:** + +```bash +lingo-tracker import --source --locale [options] +``` + +**Options:** + +- `-f, --format ` - Import format: `xliff` or `json`. Default: auto-detected from file extension (`.xlf`/`.xliff` → xliff; `.json` → json) +- `-s, --source ` - Path to the import file (required) +- `-l, --locale ` - Target locale for the import, e.g., `es`, `fr-ca` (required) +- `-c, --collection ` - Target collection to import into. If not specified, prompts or auto-selects +- `--strategy ` - Import strategy (see below). Default: `translation-service` +- `--update-comments` - Update resource comments from import data. Default: `false` +- `--update-tags` - Update resource tags from rich JSON. Default: `false` +- `--preserve-status` - Allow rich JSON to specify status (advanced). Default: `false` +- `--create-missing` - Create new resources if they don't exist +- `--validate-base` - Warn if the source base value differs from existing. Default: `true` +- `--dry-run` - Preview what would be imported without modifying files. Default: `false` +- `--verbose` - Show detailed import progress. Default: `false` + +**Import Strategies:** + +| Strategy | Description | +|----------|-------------| +| `translation-service` (default) | Sets status to `translated`. For translation agencies. Does not create missing resources. | +| `verification` | Sets status to `verified`. For native-speaker review and approval. Does not create missing resources. | +| `migration` | Sets status to `translated`. Creates missing resources (`--create-missing` defaults to `true`). Resolves Transloco-style key refs. Updates comments and tags by default. | +| `update` | Preserves existing status. Bulk-updates values without changing metadata. Does not create missing resources. | + +**Examples:** + +Interactive mode (prompts for all required values): +```bash +lingo-tracker import +``` + +Import XLIFF from a translation service (default strategy): +```bash +lingo-tracker import \ + --source dist/lingo-import/es.xliff \ + --locale es +``` + +Import with explicit strategy: +```bash +lingo-tracker import \ + --source dist/lingo-import/fr.xliff \ + --locale fr \ + --strategy translation-service +``` + +Import for language expert verification: +```bash +lingo-tracker import \ + --source fr-reviewed.xliff \ + --locale fr \ + --strategy verification +``` + +Migrate from another translation system (creates missing resources): +```bash +lingo-tracker import \ + --source old-system-fr.json \ + --locale fr \ + --strategy migration +``` + +Bulk-correct existing translations without changing status: +```bash +lingo-tracker import \ + --source corrections-de.json \ + --locale de \ + --strategy update +``` + +Dry-run to preview what would be imported: +```bash +lingo-tracker import \ + --source translations-es.xliff \ + --locale es \ + --dry-run +``` + +Verbose output to see detailed progress: +```bash +lingo-tracker import \ + --source translations-es.xliff \ + --locale es \ + --verbose +``` + +Import into a specific collection: +```bash +lingo-tracker import \ + --source admin-es.xliff \ + --locale es \ + --collection Admin \ + --strategy translation-service +``` + +**Round-Trip Workflow:** + +```bash +# 1. Export resources needing translation +lingo-tracker export --format xliff --locale es --status new,stale + +# 2. (Send es.xliff to translation agency, receive back translated file) + +# 3. Import translated file +lingo-tracker import --source es.xliff --locale es --strategy translation-service + +# 4. Optionally verify with a language expert +lingo-tracker import --source es-reviewed.xliff --locale es --strategy verification +``` + +**Notes:** +- Format is auto-detected from the file extension; use `--format` to override +- Every import generates an `import-summary.md` in the import folder with statistics, status transitions, ICU auto-fixes, warnings, and errors +- ICU message placeholder errors (renamed or missing placeholders) are automatically detected and fixed where possible; all auto-fixes are reported in the summary +- Dry-run mode produces the same summary report using "Would" language, with no files modified +- In interactive mode, a wizard guides you through source file selection, locale, collection, and strategy --- @@ -1431,15 +1555,15 @@ All commands support non-interactive mode for use in CI/CD pipelines. To ensure ```bash # Initialize a project in CI lingo-tracker init \ - --collectionName Main \ - --translationsFolder src/assets/i18n \ - --baseLocale en \ + --collection-name Main \ + --translations-folder src/assets/i18n \ + --base-locale en \ --locales en fr-ca es # Add a collection in CI lingo-tracker add-collection \ - --collectionName Admin \ - --translationsFolder src/admin/i18n + --collection-name Admin \ + --translations-folder src/admin/i18n # Add a resource in CI lingo-tracker add-resource \ diff --git a/docs/getting-started.md b/docs/getting-started.md index 2afff585..0b63add9 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -12,13 +12,13 @@ npm install --save-dev @simoncodes-ca/lingo-tracker yarn add -D @simoncodes-ca/lingo-tracker ``` -Once installed, the use `npx lingo-tracker` command to interact with the CLI. +Once installed, use the `npx lingo-tracker` command to interact with the CLI. ### Run the Lingo Tracker App The `lingo-tracker` package ships a built-in API server that hosts the Lingo Tracker web interface. -### Then start the app server: +Then start the app server: ```bash npx lingo-tracker-app @@ -39,7 +39,7 @@ Or set the `LINGO_TRACKER_PORT` environment variable. The `--port` flag takes pr ```json { "scripts": { - "lingo-tracker-app": "lingo-tracker-api --port 4000" + "lingo-tracker-app": "lingo-tracker-app --port 4000" } } ``` From 1b854b4b1780dfc09e0d2d44d9b8bc71f132e3fc Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sat, 11 Apr 2026 01:01:42 -0700 Subject: [PATCH 02/13] docs(docs): update all docs --- .gitignore | 2 + apps/cli/src/commands/export-cmd.ts | 2 +- docs/about.md | 4 +- docs/api.md | 431 +++++++++++++++++++++++- docs/auto-translation.md | 21 +- docs/features/bundle-type-generation.md | 24 +- docs/features/export.md | 64 +++- docs/features/import.md | 45 +-- docs/features/validate.md | 284 +++++++--------- docs/guides/bundling.md | 214 ++++++------ docs/guides/migration.md | 187 +++++----- 11 files changed, 845 insertions(+), 433 deletions(-) diff --git a/.gitignore b/.gitignore index 882d635d..5c761ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -157,3 +157,5 @@ vitest.config.*.timestamp* .worktrees/ /apps/tracker/src/i18n-types/tracker-resources.ts /sample-translations/mock-design-system/ +/.playwright-cli/ +/.playwright/ diff --git a/apps/cli/src/commands/export-cmd.ts b/apps/cli/src/commands/export-cmd.ts index d85ec51f..08a50b96 100644 --- a/apps/cli/src/commands/export-cmd.ts +++ b/apps/cli/src/commands/export-cmd.ts @@ -477,7 +477,7 @@ async function promptForMissing( questions.push({ type: 'text', name: 'filename', - message: 'Custom filename pattern (optional, e.g., "translations-{locale}.{ext}")', + message: 'Custom filename pattern (optional, e.g., "translations-{locale}")', initial: '', }); } diff --git a/docs/about.md b/docs/about.md index 1fe50e62..b370dca7 100644 --- a/docs/about.md +++ b/docs/about.md @@ -16,12 +16,12 @@ LingoTracker streamlines the entire translation workflow by providing intelligen - **Type Safety**: Compile-time translation key validation with full IDE completion support - **Auto-Translation**: Machine translation via Google Translate with ICU-aware placeholder protection - **CI/CD Integration**: Powerful CLI for automated validation in build pipelines +- **REST API & Web UI**: Browser-based resource editor backed by a REST API, enabling team workflows and external integrations - **Format Flexibility**: Import/export support for JSON, XLIFF, and other translation formats - **Resource Linking**: Symlink support for sharing resources across projects - **Explicit Status Workflow**: `new`, `translated`, `stale`, `verified` with automatic updates on base changes - **Entry Tagging**: Tags stored alongside entries for rich filtering and export -- **Deterministic Checksums**: MD5-based checksums for both base and translated values -- **Strict Key Rules**: Dot-delimited keys; per-segment allowed chars `[A-Za-z0-9_-]+`; no de-duplication with target folder +- **Structured Key Naming**: Dot-delimited keys with strict character rules ensure predictable, conflict-free resource paths ## Who It's For diff --git a/docs/api.md b/docs/api.md index e1f20ed7..cb1bc283 100644 --- a/docs/api.md +++ b/docs/api.md @@ -148,7 +148,7 @@ interface LingoTrackerCollectionDto { ``` **Status Codes**: -- `200 OK`: Collection created successfully +- `201 Created`: Collection created successfully - `400 Bad Request`: Invalid request body or collection already exists - `500 Internal Server Error`: Unexpected error during collection creation @@ -188,6 +188,54 @@ Response: } ``` +### Update Collection + +Updates or renames an existing collection. + +**Endpoint**: `PUT /api/collections/:collectionName` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection to update (URL-encoded if necessary) + +**Request Body**: + +```typescript +interface UpdateCollectionDto { + /** Optional new name to rename the collection */ + name?: string; + /** Updated collection configuration */ + collection: LingoTrackerCollectionDto; +} +``` + +**Response**: + +```json +{ + "message": "Collection 'admin-portal' updated successfully" +} +``` + +**Status Codes**: +- `200 OK`: Collection updated successfully +- `400 Bad Request`: Invalid request body or collection not found +- `500 Internal Server Error`: Unexpected error during update + +**Example**: + +```bash +curl -X PUT http://localhost:3030/api/collections/admin-portal \ + -H "Content-Type: application/json" \ + -d '{ + "name": "admin-portal-v2", + "collection": { + "translationsFolder": "./apps/admin/src/i18n", + "baseLocale": "en", + "locales": ["en", "es", "fr", "de"] + } + }' +``` + ### Delete Collection Deletes a collection by name. @@ -358,6 +406,11 @@ interface CreateResourceResponseDto { entriesCreated: number; /** Whether at least one resource entry was newly created */ created: boolean; + /** + * Locales skipped during auto-translation (ICU message format not supported). + * Only present when auto-translation is enabled and some locales were skipped. + */ + skippedLocales?: string[]; } ``` @@ -371,7 +424,7 @@ interface CreateResourceResponseDto { ``` **Status Codes**: -- `200 OK`: Resources processed successfully (check `entriesCreated` to see how many were new) +- `201 Created`: Resources processed successfully (check `entriesCreated` to see how many were new) - `400 Bad Request`: Invalid request body, validation error, or empty resource array - `404 Not Found`: Collection not found - `500 Internal Server Error`: Unexpected error during resource creation @@ -717,11 +770,10 @@ interface UpdateResourceDto { tags?: string[]; /** Optional target folder override */ targetFolder?: string; - /** Optional base locale override */ - baseLocale?: string; /** Optional map of locale updates */ locales?: Record; } ``` @@ -750,6 +802,13 @@ interface UpdateResourceResponseDto { updated: boolean; /** Optional message (e.g., "No changes detected") */ message?: string; + /** The updated resource data (present when updated is true) */ + resource?: ResourceSummaryDto; + /** + * Locales skipped during auto-translation (ICU message format not supported). + * Only present when auto-translation is enabled and some locales were skipped. + */ + skippedLocales?: string[]; } ``` @@ -773,7 +832,7 @@ interface UpdateResourceResponseDto { - Updating a locale value will set its status to `translated` and update its checksums. - If no changes are detected (values match existing), `updated` will be `false`. -## Move Resource(s) +### Move Resource(s) Moves or renames translation resources within a collection. Supports single resource moves and wildcard pattern moves. @@ -857,7 +916,369 @@ interface MoveResourceResponseDto { - Wildcard moves (`source: "prefix.*"`) will move all matching resources to the `destination` prefix. - The operation is atomic per move entry but not transactional across all moves. +### Get Resource Tree + +Returns the resource tree for a collection, optionally scoped to a sub-path. The tree is built from an in-memory cache — the first request triggers background indexing and returns a `202 Accepted` with a status response until the cache is ready. + +**Endpoint**: `GET /api/collections/:collectionName/resources/tree` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection + +**Query Parameters**: +- `path` (string, optional): Dot-delimited folder path to scope the tree (e.g., `apps.common`) +- `includeNested` (boolean, optional): When `true` and `path` is set, returns all nested resources flattened into the `resources` array + +**Response** (cache ready — `200 OK`): + +```typescript +interface ResourceTreeDto { + /** Current folder path (dot-delimited, empty for root) */ + path: string; + /** Resources in this folder */ + resources: ResourceSummaryDto[]; + /** Child folders */ + children: FolderNodeDto[]; +} + +interface ResourceSummaryDto { + key: string; + translations: Record; + status: Record; + comment?: string; + tags?: string[]; +} + +interface FolderNodeDto { + name: string; + fullPath: string; + loaded: boolean; + tree?: ResourceTreeDto; +} +``` + +**Response** (cache not ready — `202 Accepted`): + +```typescript +interface TreeStatusResponseDto { + status: 'not-ready' | 'indexing'; + message: string; +} +``` + +**Status Codes**: +- `200 OK`: Tree returned successfully +- `202 Accepted`: Cache is indexing — retry shortly +- `404 Not Found`: Collection or path not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +# Full tree +curl http://localhost:3030/api/collections/web-app/resources/tree + +# Scoped subtree +curl "http://localhost:3030/api/collections/web-app/resources/tree?path=apps.common" + +# Scoped subtree with all nested resources +curl "http://localhost:3030/api/collections/web-app/resources/tree?path=apps.common&includeNested=true" +``` + +### Get Cache Status + +Returns the current indexing status of a collection's resource cache. + +**Endpoint**: `GET /api/collections/:collectionName/resources/cache/status` + +**Response**: + +```typescript +interface CacheStatusDto { + status: 'not-started' | 'indexing' | 'ready' | 'error'; + collectionName?: string; + /** ISO date string — present when status is 'ready' */ + indexedAt?: string; + /** Error message — present when status is 'error' */ + error?: string; + /** Collection statistics — present when status is 'ready' */ + stats?: { + totalKeys: number; + localeCount: number; + }; +} +``` + +**Example Response**: + +```json +{ + "status": "ready", + "collectionName": "web-app", + "indexedAt": "2026-04-09T12:00:00.000Z", + "stats": { + "totalKeys": 342, + "localeCount": 4 + } +} +``` + +**Status Codes**: +- `200 OK`: Status retrieved +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl http://localhost:3030/api/collections/web-app/resources/cache/status +``` + +### Search Translations + +Searches resources by key or translation value within a collection. Uses the in-memory cache when available, otherwise falls back to disk. + +**Endpoint**: `GET /api/collections/:collectionName/resources/search` + +**Query Parameters**: +- `query` (string, required): Search string (case-insensitive, matches keys and values) +- `maxResults` (number, optional): Maximum results to return. Default: `100`, max: `500` + +**Response**: + +```typescript +interface SearchResultsDto { + query: string; + results: SearchResultDto[]; + totalFound: number; + /** True when results were capped by maxResults */ + limited: boolean; +} + +interface SearchResultDto extends ResourceSummaryDto { + matchType: 'exact-key' | 'partial-key' | 'exact-value' | 'partial-value'; + /** Locales where value match was found */ + matchedLocales?: string[]; +} +``` + +**Example Response**: + +```json +{ + "query": "cancel", + "results": [ + { + "key": "apps.common.buttons.cancel", + "translations": { "en": "Cancel", "es": "Cancelar", "fr": "Annuler" }, + "status": { "en": null, "es": "verified", "fr": "translated" }, + "matchType": "partial-key" + } + ], + "totalFound": 1, + "limited": false +} +``` + +**Status Codes**: +- `200 OK`: Search completed +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl "http://localhost:3030/api/collections/web-app/resources/search?query=cancel&maxResults=50" +``` + +### Translate Resource + +Triggers auto-translation for a resource using the collection's configured translation provider. Returns an error if auto-translation is not enabled for the collection. + +**Endpoint**: `POST /api/collections/:collectionName/resources/translate` + +**Request Body**: + +```typescript +interface TranslateResourceDto { + /** Full dot-delimited key of the resource to translate */ + key: string; +} +``` + +**Response**: + +```typescript +interface TranslateResourceResponseDto { + /** The resource with translated values applied */ + resource: ResourceSummaryDto; + /** Number of locales successfully translated */ + translatedCount: number; + /** Locales skipped because the base value uses ICU message format */ + skippedLocales: string[]; +} +``` + +**Status Codes**: +- `201 Created`: Translation completed +- `404 Not Found`: Collection or resource not found +- `422 Unprocessable Entity`: Auto-translation not enabled for this collection +- `502 Bad Gateway`: Translation provider error +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl -X POST http://localhost:3030/api/collections/web-app/resources/translate \ + -H "Content-Type: application/json" \ + -d '{"key": "apps.common.buttons.cancel"}' +``` + +## Folders API + +All folder endpoints are scoped to a specific collection. + +### Create Folder + +Creates a new folder node in the resource hierarchy. + +**Endpoint**: `POST /api/collections/:collectionName/folders` + +**Request Body**: + +```typescript +interface CreateFolderDto { + /** Single-segment folder name (alphanumeric, dashes, underscores) */ + folderName: string; + /** Optional dot-delimited parent path (e.g., "apps.common"). Root if omitted. */ + parentPath?: string; +} +``` + +**Response**: + +```typescript +interface CreateFolderResponseDto { + /** Filesystem path of the created folder */ + folderPath: string; + /** False if the folder already existed */ + created: boolean; + /** The new folder node for inserting into the tree */ + folder: FolderNodeDto; +} +``` + +**Status Codes**: +- `201 Created`: Folder created (or already existed) +- `400 Bad Request`: Invalid folder name +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl -X POST http://localhost:3030/api/collections/web-app/folders \ + -H "Content-Type: application/json" \ + -d '{"folderName": "navigation", "parentPath": "apps.common"}' +``` + +### Delete Folder + +Deletes a folder and all resources within it. + +**Endpoint**: `DELETE /api/collections/:collectionName/folders` + +**Request Body**: + +```typescript +interface DeleteFolderDto { + /** Dot-delimited folder path to delete (e.g., "apps.common.buttons") */ + folderPath: string; +} +``` + +**Response**: + +```typescript +interface DeleteFolderResponseDto { + deleted: boolean; + folderPath: string; + /** Number of resource entries deleted with the folder */ + resourcesDeleted: number; + error?: string; +} +``` + +**Status Codes**: +- `200 OK`: Deletion attempted (check `deleted` and `error` fields) +- `400 Bad Request`: Invalid folder path +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl -X DELETE http://localhost:3030/api/collections/web-app/folders \ + -H "Content-Type: application/json" \ + -d '{"folderPath": "apps.common.buttons"}' +``` + +### Move Folder + +Moves a folder (and all its resources) to a new location. Supports cross-collection moves. + +**Endpoint**: `POST /api/collections/:collectionName/folders/move` + +**Request Body**: + +```typescript +interface MoveFolderDto { + /** Dot-delimited source folder path (e.g., "apps.common.buttons") */ + sourceFolderPath: string; + /** Dot-delimited destination folder path (e.g., "apps.shared") */ + destinationFolderPath: string; + /** If true, overwrite existing resources at destination. Default: false */ + override?: boolean; + /** Optional destination collection name for cross-collection moves */ + toCollection?: string; + /** + * When true, the source folder is nested under the destination as a child. + * Default: true + */ + nestUnderDestination?: boolean; +} +``` + +**Response**: + +```typescript +interface MoveFolderResponseDto { + movedCount: number; + foldersDeleted: number; + warnings: string[]; + errors: string[]; +} +``` + +**Status Codes**: +- `201 Created`: Move completed (check `movedCount` and `errors` for details) +- `400 Bad Request`: Invalid paths or validation error +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl -X POST http://localhost:3030/api/collections/web-app/folders/move \ + -H "Content-Type: application/json" \ + -d '{ + "sourceFolderPath": "apps.common.buttons", + "destinationFolderPath": "apps.shared", + "nestUnderDestination": true + }' +``` +## Error Handling All error responses follow a consistent format: diff --git a/docs/auto-translation.md b/docs/auto-translation.md index ded306ed..49a95c50 100644 --- a/docs/auto-translation.md +++ b/docs/auto-translation.md @@ -4,7 +4,7 @@ LingoTracker can automatically translate new and stale resources using machine t ## Overview -When auto-translation is enabled, adding or editing a resource can trigger machine translation for all target locales. The system classifies each string by its ICU content and applies the appropriate translation strategy: +When auto-translation is enabled, adding or editing a resource automatically triggers machine translation for all target locales — provided no explicit translations are supplied by the caller. The system classifies each string by its ICU content and applies the appropriate translation strategy: - **Plain text** is sent directly to the translation provider. - **Simple placeholders** (`{name}`, `{{ count }}`) are protected with markers before translation, then restored afterward. @@ -71,9 +71,7 @@ A collection can override the global translation config. This is useful when dif "Admin": { "translationsFolder": "apps/admin/src/assets/i18n", "translation": { - "enabled": false, - "provider": "google-translate", - "apiKeyEnv": "GOOGLE_TRANSLATE_API_KEY" + "enabled": false } } } @@ -100,9 +98,9 @@ The translation orchestrator sits between callers and the translation provider. 1. **Classifies** the string using the ICU classifier (see below). 2. **Routes** the string based on classification: - - `plain` -- sends to the provider directly. - - `simple-placeholders` -- protects placeholders, sends, then restores. - - `complex-icu` -- returns the original value unchanged with `kind: 'skipped'`. + 1. `plain` -- sends to the provider directly. + 2. `simple-placeholders` -- protects placeholders, sends, then restores. + 3. `complex-icu` -- returns the original value unchanged with `kind: 'skipped'`. 3. **Returns** a result with `kind` indicating what happened: - `'translated'` -- plain text was translated. - `'translated-with-placeholders'` -- simple-placeholder text was translated with marker protection. @@ -178,6 +176,15 @@ The classifier normalizes Transloco's double-brace format (`{{ name }}`) to sing ## Usage +### CLI (add-resource and edit-resource) + +Auto-translation runs automatically during the `add-resource` and `edit-resource` CLI commands when `translation.enabled` is `true` in your config. No extra flags are needed. + +- **add-resource**: When no explicit translations are provided (interactively or via flags), the command delegates all target locales to the translation provider instead of populating them with the base value. +- **edit-resource**: When the base value is updated, the command triggers translation for any locale whose status is `new` or `stale`. + +Skipped locales (complex ICU strings) are left at their current status and surfaced in the CLI output for manual handling. + ### Translating existing resources via the API The API exposes an endpoint to translate an existing resource entry. Send a POST request with the resource key: diff --git a/docs/features/bundle-type-generation.md b/docs/features/bundle-type-generation.md index 2573714e..e3bbaf48 100644 --- a/docs/features/bundle-type-generation.md +++ b/docs/features/bundle-type-generation.md @@ -11,7 +11,9 @@ LingoTracker can automatically generate TypeScript type definitions for your tra ## Configuration -To enable type generation, add the `typeDistFile` property to your bundle definition in `.lingo-tracker.json`. This property specifies the output file path for the generated TypeScript file. The path must end with `.ts` and must point to a file, not a directory. +To enable type generation, add the `typeDistFile` property to your bundle definition in `.lingo-tracker.json`. This property specifies the output file path for the generated TypeScript file. The path must end with `.ts` and must point to a file, not a directory. Intermediate directories are created automatically if they do not exist. + +> If you are migrating from the deprecated `typeDist` property, see the [Migration section](#migration-from-typedist) below. ```json { @@ -89,19 +91,19 @@ export const COMMON_TOKENS = { export type CommonTokens = typeof COMMON_TOKENS; ``` -**More Examples**: - -| Translation Key | `upperCase` (default) | `camelCase` | -|---|---|---| -| `file-upload` | `FILE_UPLOAD` | `fileUpload` | -| `common.buttons.ok` | `COMMON.BUTTONS.OK` | `common.buttons.ok` | - To use camelCase, set `tokenCasing` in your bundle config or pass `--token-casing camelCase` to the `bundle` CLI command: ```bash lingo-tracker bundle --token-casing camelCase ``` +**Property path comparison** (arrows indicate nested object levels): + +| Translation Key | `upperCase` (default) | `camelCase` | +|---|---|---| +| `file-upload` | `FILE_UPLOAD` | `fileUpload` | +| `common.buttons.ok` | `COMMON` → `BUTTONS` → `OK` | `common` → `buttons` → `ok` | + ## Token Casing Precedence The `tokenCasing` value is resolved in the following order (first match wins): @@ -115,7 +117,7 @@ The `tokenCasing` value is resolved in the following order (first match wins): By default, the generated constant name is derived from the bundle key (e.g., `common` → `COMMON_TOKENS`). You can override this with the `tokenConstantName` property in your bundle definition. -The value must be a valid JavaScript identifier. Any casing is accepted — the type name is always auto-derived as PascalCase from whatever you provide. +The value must be a valid JavaScript identifier using only ASCII characters (letters A–Z/a–z, digits, underscores `_`, and dollar signs `$`). Any casing is accepted — the type name is always auto-derived as PascalCase from whatever you provide. ```json { @@ -152,7 +154,7 @@ export type MyKeys = typeof MY_KEYS; | `MyKeys` | `MyKeys` | `MyKeys` | | `APP_TRANSLATION_TOKENS` | `APP_TRANSLATION_TOKENS` | `AppTranslationTokens` | -You can also override at the CLI level with `--token-constant-name`. This flag only works when targeting a single bundle: +You can also override at the CLI level with `--token-constant-name`. This flag requires exactly one bundle to be targeted via `--name`; it is not compatible with multi-bundle runs or "all bundles" mode: ```bash lingo-tracker bundle --name common --token-constant-name MY_KEYS @@ -165,6 +167,8 @@ lingo-tracker bundle --name common --token-constant-name MY_KEYS - **Key Segments (upperCase)**: Converted to `SCREAMING_SNAKE_CASE` (e.g., `buttons` -> `BUTTONS`, `file-upload` -> `FILE_UPLOAD`). - **Key Segments (camelCase)**: Converted to `camelCase` (e.g., `buttons` -> `buttons`, `file-upload` -> `fileUpload`). - **Numeric Segments**: Preserved as-is (e.g., `steps.1.title` -> `STEPS.1.TITLE` or `steps.1.title`). +- **Mixed nodes** (a key that is both a leaf and a parent, e.g., `buttons` and `buttons.ok` both exist): the leaf value is dropped and only the children are emitted. Standard i18n usage does not produce such keys. +- **Empty bundles**: if the bundle resolves to zero keys, type generation is skipped and a warning is printed. No `.ts` file is written. ## Migration from `typeDist` diff --git a/docs/features/export.md b/docs/features/export.md index 40f00e1b..73bd416f 100644 --- a/docs/features/export.md +++ b/docs/features/export.md @@ -19,11 +19,11 @@ lingo-tracker export --format [options] |--------|-------------|---------| | `-f, --format ` | Export format (`xliff` or `json`). | Required (or interactive) | | `-c, --collection ` | Comma-separated list of collections to export. | All collections | -| `-l, --locale ` | Comma-separated list of target locales. | All target locales | +| `-l, --locale ` | Comma-separated list of target locales. The base locale is always excluded. | All target locales | | `-s, --status ` | Filter by status (`new`, `translated`, `stale`, `verified`). | `new,stale` | | `-t, --tags ` | Filter by tags (comma-separated). | None | -| `-o, --output ` | Output directory. | `dist/lingo-export` | -| `--filename ` | Custom filename pattern. | `{target}.xliff` or `{locale}.json` | +| `-o, --output ` | Output directory. Defaults to `exportFolder` from config if set. | `dist/lingo-export` | +| `--filename ` | Custom filename pattern. The extension (`.xliff` or `.json`) is appended automatically if omitted. | `.xliff` or `.json` | | `--dry-run` | Preview export without writing files. | `false` | | `--verbose` | Show detailed progress. | `false` | @@ -32,18 +32,17 @@ lingo-tracker export --format [options] | Option | Description | Default | |--------|-------------|---------| | `--structure ` | `hierarchical` or `flat`. | `hierarchical` | -| `--rich` | Output rich objects with metadata. | `false` | -| `--include-base` | Include base locale value. | `false` | -| `--include-status` | Include status in rich objects. | `false` | -| `--include-comment` | Include comments in rich objects. | `true` | -| `--include-tags` | Include tags in rich objects. | `false` | +| `--rich` | Output rich objects with metadata instead of plain string values. | `false` | +| `--include-base` | Include base locale value. Only applies when `--rich` is set. | `false` | +| `--include-status` | Include translation status. Only applies when `--rich` is set. | `false` | +| `--include-comment` | Include comments. Only applies when `--rich` is set. | `true` | +| `--include-tags` | Include tags array. Only applies when `--rich` is set. | `false` | ### Filename Placeholders -You can use the following placeholders in `--filename`: +You can use the following placeholders in `--filename`. If no file extension is included, the correct extension for the format (`.xliff` or `.json`) is appended automatically. -- `{locale}`: The target locale code (e.g., `es`, `fr-ca`). -- `{target}`: Alias for `{locale}`. +- `{locale}` / `{target}`: The target locale code (e.g., `es`, `fr-ca`). These are interchangeable. - `{source}`: The base locale code (e.g., `en`). - `{date}`: Current date (YYYY-MM-DD). @@ -53,13 +52,46 @@ lingo-tracker export --format json --filename "translations-{source}-to-{target} # Generates: translations-en-to-es-2025-12-13.json ``` +## Examples + +Export all untranslated and stale strings to XLIFF for all target locales: +```bash +lingo-tracker export --format xliff +``` + +Export only Spanish strings with `new` or `stale` status from a specific collection: +```bash +lingo-tracker export --format xliff --locale es --collection marketing --status new,stale +``` + +Export all target locales to flat JSON with a custom filename: +```bash +lingo-tracker export --format json --structure flat --filename "{locale}-translations" +# Generates: es-translations.json, fr-translations.json, etc. +``` + +Export rich JSON including base values and comments (useful for translator context): +```bash +lingo-tracker export --format json --rich --include-base --include-comment +``` + +Preview an export without writing any files: +```bash +lingo-tracker export --format xliff --dry-run +``` + ## Export Summary -Every export generates an `export-summary.md` file in the output directory containing: -- Export statistics (resources count, files created). -- List of warnings (e.g., overwritten files). -- List of errors (e.g., malformed files, missing metadata). +Every export generates an `export-summary.md` file in the output directory. It contains: + +- **Metadata**: date, format, collections, target locales, status and tag filters applied. +- **Results**: resources exported, files created, output directory. +- **File list**: each file generated (or that would be generated in a dry run). +- **Warnings**: e.g., files that were overwritten. +- **Errors**: broken down into general errors, malformed files, resources omitted due to missing metadata, and hierarchical key conflicts (JSON only — when a key like `a.b.c` conflicts with a parent key `a.b`). + +In a dry run, the summary is printed to the console instead of written to disk. Note: even in dry-run mode, the output directory is created on disk if it does not already exist. ## Interactive Mode -If you run `lingo-tracker export` without the `--format` flag in a terminal, it will launch an interactive wizard to guide you through the options. +If you run `lingo-tracker export` without the `--format` flag **in a TTY terminal**, an interactive wizard guides you through all options. In non-interactive environments (CI, pipes), `--format` is required and omitting it is an error. All other unspecified options fall back silently to their documented defaults — pass all relevant flags explicitly in scripts rather than relying on interactive prompts. diff --git a/docs/features/import.md b/docs/features/import.md index 10b11e93..7309538d 100644 --- a/docs/features/import.md +++ b/docs/features/import.md @@ -5,6 +5,8 @@ The Import feature allows you to import translation resources from external sour ## Usage ```bash +lingo-tracker import -s -l [options] +# or lingo-tracker import --source --locale [options] ``` @@ -21,19 +23,21 @@ You can explicitly specify the format with `--format ` if needed. | Option | Description | Default | |--------|-------------|---------| -| `--source ` | Path to import file (required). | - | -| `--locale ` | Target locale for import (e.g., `es`, `fr-ca`). | - | -| `--format ` | Import format (`xliff` or `json`). | Auto-detect from extension | -| `--collection ` | Target collection to import into. | Default collection | +| `-s, --source ` | Path to import file (required). | - | +| `-l, --locale ` | Target locale for import (e.g., `es`, `fr-ca`). | - | +| `-f, --format ` | Import format (`xliff` or `json`). | Auto-detect from extension | +| `-c, --collection ` | Target collection to import into. | Default collection | | `--strategy ` | Import strategy (see below). | `translation-service` | -| `--update-comments` | Update resource comments from import data. | Strategy-dependent | -| `--update-tags` | Update resource tags from rich JSON. | Strategy-dependent | +| `--update-comments` | Update resource comments from import data. | `false` | +| `--update-tags` | Update resource tags from rich JSON. | `false` | | `--preserve-status` | Allow rich JSON to specify status (advanced). | `false` | | `--create-missing` | Create new resources if they don't exist. | Strategy-dependent | | `--validate-base` | Warn if source base value differs from existing. | `true` | | `--dry-run` | Preview import without modifying files. | `false` | | `--verbose` | Show detailed import progress. | `false` | +> **Note:** Files larger than 5 MB will show a warning before import begins. + ## Import Strategies Different import workflows require different approaches. The `--strategy` option selects the appropriate behavior: @@ -45,7 +49,7 @@ Different import workflows require different approaches. The `--strategy` option **Behavior**: - Sets status to `translated` for all imported values - Preserves existing base values (warns if source differs) -- Does NOT create new resources (skips with error if resource doesn't exist) +- Does NOT create new resources (skips missing resources; counted in Resources Skipped, not an error) - Does NOT update comments or tags by default **Typical Workflow**: @@ -80,19 +84,20 @@ lingo-tracker import --source verified-fr.xliff --locale fr --strategy verificat **Behavior**: - Creates new resources with base values from XLIFF `` or JSON `baseValue` -- Sets status to `translated` for all imports -- Expands Transloco key references (e.g., `{{t('other.key')}}`) into full values -- Updates comments and tags from import data by default +- Sets status to `translated` (use `--preserve-status` with rich JSON to honor source status) +- Resolves Transloco key references (e.g., `{{t('other.key')}}`, `{{key}}`) by inlining the referenced value; missing references emit a "Missing reference target" warning and circular references emit a "Circular reference detected" warning — both are preserved as literals +- Normalizes Transloco plural/select syntax to ICU format - Overwrites existing values and metadata **Flags Default**: -- `--create-missing`: `true` -- `--update-comments`: `true` -- `--update-tags`: `true` +- `--create-missing`: `true` (applied automatically for migration strategy) +- `--update-comments`: `false` (pass explicitly to enable) +- `--update-tags`: `false` (pass explicitly to enable) **Example**: ```bash -lingo-tracker import --source old-system-fr.json --locale fr --strategy migration +lingo-tracker import --source old-system-fr.json --locale fr --strategy migration \ + --update-comments --update-tags ``` ### update @@ -100,7 +105,7 @@ lingo-tracker import --source old-system-fr.json --locale fr --strategy migratio **Use Case**: Bulk updates to existing translations (maintaining existing status) **Behavior**: -- Updates only existing resources (skips with warning if resource not found) +- Updates only existing resources (skips missing resources; counted in Resources Skipped, not an error) - Preserves existing status (does NOT change to `translated`) - Does NOT create new resources - Useful for fixing typos or updating specific translations @@ -193,7 +198,7 @@ LingoTracker automatically fixes common ICU message format placeholder errors ma **What Gets Reported**: - All auto-fixes are logged in the import summary with before/after values -- Errors for unfixable cases (multiple missing placeholders, malformed syntax) +- Errors for unfixable cases (multiple missing placeholders, malformed syntax) — the resource import fails and is counted in Resources Failed **Example**: ``` @@ -205,7 +210,7 @@ This ensures translations work correctly even when translators accidentally modi ## Import Summary -Every import generates an `import-summary.md` file with detailed change tracking: +Every completed import writes `import-summary.md` to the translations folder (e.g., `src/assets/i18n/import-summary.md`) with detailed change tracking: - Import statistics (resources imported, created, updated, skipped, failed) - Status transitions (e.g., "new → translated", "stale → verified") @@ -214,6 +219,8 @@ Every import generates an `import-summary.md` file with detailed change tracking - Warnings and errors - Detailed change log (first 20 resources) +> **Exit code:** The command exits with code `1` when any resources fail or errors occur. Skipped resources (missing from storage) do not cause a non-zero exit, so CI pipelines will not fail on skips alone. + ### Dry-Run Mode Use `--dry-run` to preview what would be imported without modifying files: @@ -222,13 +229,13 @@ Use `--dry-run` to preview what would be imported without modifying files: lingo-tracker import --source translations-es.xliff --locale es --dry-run ``` -The dry-run summary shows exactly what would happen, using "Would" language to indicate no changes were made. +The dry-run summary shows exactly what would happen, using "Would" language to indicate no changes were made. The summary file is not written in dry-run mode, but the path where it would be written is still printed to the console. ## Interactive Mode If you run `lingo-tracker import` without required options in a terminal, it will launch an interactive wizard to guide you through: -- Source file selection (with file picker/autocomplete) +- Source file path entry (with path validation) - Format auto-detection - Target locale selection (from configured locales) - Collection selection (if multiple exist) diff --git a/docs/features/validate.md b/docs/features/validate.md index 544d1230..45e8885b 100644 --- a/docs/features/validate.md +++ b/docs/features/validate.md @@ -29,8 +29,8 @@ lingo-tracker validate [options] ### Exit Codes -- `0` - All validations passed (all resources verified) -- `1` - Validation failures found (new/stale resources or translated without flag) +- `0` - All validations passed (all resources verified or only warnings) +- `1` - Validation failures found, OR configuration errors (config file missing or invalid JSON, no collections configured, no target locales configured) ## Validation Rules @@ -42,6 +42,7 @@ The validate command categorizes resources based on their translation status: | `stale` | ❌ Failure | ❌ Failure | Base value changed, translation out of sync | | `translated` | ❌ Failure | ⚠️ Warning | Has translation but not verified | | `verified` | ✅ Success | ✅ Success | Reviewed and approved | +| *(missing)* | ❌ Failure | ❌ Failure | No status entry for this locale — treated as `new` | ### Validation Philosophy @@ -75,7 +76,8 @@ The validate command categorizes resources based on their translation status: - Base locale (source translations are authoritative by definition) - ICU message format syntax (use separate linting tools) - File structure or JSON validity (handled during resource loading) -- Missing metadata (resources without metadata are skipped with warnings) + +Resources with no status entry for a locale are treated as `new` (failure), not skipped. ## Examples @@ -96,16 +98,28 @@ lingo-tracker validate --allow-translated #### All Verified (Success) ``` -✅ Translation Validation PASSED - -Validation Summary by Locale: - es: - verified: 51 - - fr-ca: - verified: 51 - -Total: 0 failures, 0 warnings +✅ Validation PASSED + +📊 Validation Statistics: +────────────────────────────────────────────────── + Total Resources Validated: 102 + Unique Resource Keys: 51 + Locales Validated: 2 + Collections Validated: 1 + +📈 Status Breakdown: +────────────────────────────────────────────────── + ✅ Verified: 102 + ✏️ Translated: 0 + ⚠️ Stale: 0 + ❌ New: 0 + +────────────────────────────────────────────────── +📋 Summary: + Total Failures: 0 + Total Successes: 102 + +✅ Validation passed successfully! ``` Exit code: `0` @@ -113,36 +127,43 @@ Exit code: `0` #### Mixed Status (Failure) ``` -❌ Translation Validation FAILED - -Validation Summary by Locale: - es: - new: 3 - stale: 2 - translated: 1 - verified: 45 - - fr-ca: - new: 1 - stale: 0 - translated: 2 - verified: 48 - -Failures (6 resources): - es: - - apps.common.buttons.submit (new) - - apps.common.errors.network (new) - - apps.features.dashboard.title (new) - - apps.common.buttons.save (stale) - - apps.features.settings.label (stale) - - apps.common.buttons.cancel (translated) - - fr-ca: - - apps.common.buttons.submit (new) - - apps.features.dashboard.subtitle (translated) - - apps.features.profile.header (translated) - -Total: 6 failures, 0 warnings +❌ Validation FAILED + +📊 Validation Statistics: +────────────────────────────────────────────────── + Total Resources Validated: 102 + Unique Resource Keys: 51 + Locales Validated: 2 + Collections Validated: 1 + +📈 Status Breakdown: +────────────────────────────────────────────────── + ✅ Verified: 93 + ✏️ Translated: 3 + ⚠️ Stale: 2 + ❌ New: 4 + +❌ Failures (9): +────────────────────────────────────────────────── + Locale: es (6 failures) + ❌ [main] apps.common.buttons.submit (new) + ❌ [main] apps.common.errors.network (new) + ❌ [main] apps.features.dashboard.title (new) + ⚠️ [main] apps.common.buttons.save (stale) + ⚠️ [main] apps.features.settings.label (stale) + ✏️ [main] apps.common.buttons.cancel (translated) + + Locale: fr-ca (3 failures) + ❌ [main] apps.common.buttons.submit (new) + ✏️ [main] apps.features.dashboard.subtitle (translated) + ✏️ [main] apps.features.profile.header (translated) + +────────────────────────────────────────────────── +📋 Summary: + Total Failures: 9 + Total Successes: 93 + +❌ Validation failed. Please review the failures above. ``` Exit code: `1` @@ -150,31 +171,40 @@ Exit code: `1` #### With --allow-translated Flag (Warnings) ``` -⚠️ Translation Validation PASSED with warnings - -Validation Summary by Locale: - es: - new: 0 - stale: 0 - translated: 3 - verified: 48 - - fr-ca: - new: 0 - stale: 0 - translated: 1 - verified: 50 - -Warnings (4 resources): - es: - - apps.common.buttons.cancel (translated) - - apps.features.dashboard.subtitle (translated) - - apps.features.profile.header (translated) - - fr-ca: - - apps.common.buttons.apply (translated) - -Total: 0 failures, 4 warnings +✅ Validation PASSED + +📊 Validation Statistics: +────────────────────────────────────────────────── + Total Resources Validated: 102 + Unique Resource Keys: 51 + Locales Validated: 2 + Collections Validated: 1 + +📈 Status Breakdown: +────────────────────────────────────────────────── + ✅ Verified: 98 + ✏️ Translated: 4 + ⚠️ Stale: 0 + ❌ New: 0 + +⚠️ Warnings (4): +────────────────────────────────────────────────── + Resources with "translated" status (not yet verified): + Locale: es (3 warnings) + ✏️ [main] apps.common.buttons.cancel (translated) + ✏️ [main] apps.features.dashboard.subtitle (translated) + ✏️ [main] apps.features.profile.header (translated) + + Locale: fr-ca (1 warnings) + ✏️ [main] apps.common.buttons.apply (translated) + +────────────────────────────────────────────────── +📋 Summary: + Total Failures: 0 + Total Warnings: 4 + Total Successes: 98 + +✅ Validation passed with warnings. ``` Exit code: `0` @@ -247,91 +277,6 @@ jobs: run: pnpm run deploy:staging ``` -### GitLab CI - -```yaml -stages: - - validate - - build - - deploy - -validate-translations: - stage: validate - script: - - lingo-tracker validate - only: - - main - -validate-translations-staging: - stage: validate - script: - - lingo-tracker validate --allow-translated - only: - - develop -``` - -### Jenkins - -```groovy -pipeline { - agent any - - stages { - stage('Validate Translations') { - steps { - sh 'lingo-tracker validate' - } - } - - stage('Build') { - steps { - sh 'pnpm run build' - } - } - - stage('Deploy') { - steps { - sh 'pnpm run deploy' - } - } - } -} -``` - -### CircleCI - -```yaml -version: 2.1 - -jobs: - validate-and-deploy: - docker: - - image: cimg/node:22.16 - steps: - - checkout - - run: - name: Install dependencies - command: pnpm install - - run: - name: Validate translations - command: lingo-tracker validate - - run: - name: Build - command: pnpm run build - - run: - name: Deploy - command: pnpm run deploy - -workflows: - version: 2 - build-and-deploy: - jobs: - - validate-and-deploy: - filters: - branches: - only: main -``` - ### Custom Script Integration ```bash @@ -526,20 +471,23 @@ The validate feature is implemented across two layers: The validate command reuses the existing `loadResourcesFromCollections` utility from the core library, ensuring consistency with export/import operations. -### Status Determination +### Translation Status Semantics -Translation status is determined by examining metadata checksums: +Validate reads pre-computed status values from resource metadata — it does not re-evaluate checksums. The status for each resource/locale pair is determined during resource loading by `loadResourcesFromCollections`. Validate maps a missing status entry to `new` via a null-coalescing fallback. -- **new**: No translation or translation checksum matches base checksum -- **stale**: Base checksum changed since translation was created -- **translated**: Translation exists with non-matching checksums, not verified -- **verified**: Translation exists and marked as verified +The meaning of each status value: + +- **new**: Resource has been added but not yet translated (explicitly stored status) +- **stale**: Base checksum changed since the translation was last updated (source drifted) +- **translated**: Translation exists and matches the current base checksum, but not yet verified +- **verified**: Translation exists and has been explicitly marked as verified + +A missing metadata entry for a locale is coalesced to `new` at validation time (already covered by the *(missing)* row in the Validation Rules table above). ### Performance - **Fast**: Validation only reads metadata, no heavy computation - **Scalable**: Handles projects with 10,000+ resources efficiently -- **Memory-efficient**: Streams through resources, no large in-memory accumulation ## Limitations @@ -554,13 +502,21 @@ Validate always checks ALL collections and ALL target locales. There is no optio ### No Verbose Mode -Unlike export/import commands, validate does not have a `--verbose` flag. Output is always concise, showing only: -- Summary counts by locale -- List of failures -- List of warnings +Unlike export/import commands, validate does not have a `--verbose` flag. Output always includes: +- Statistics (total resources, unique keys, locales, collections validated) +- Status breakdown by count (verified, translated, stale, new) +- Failures grouped by locale (with collection name and status) +- Warnings grouped by locale (when `--allow-translated` is used) +- Summary footer with total counts and final verdict + +Verified resources are not listed individually. **Rationale**: CI logs should be concise. Showing all verified resources adds noise. +### Output Truncation + +Within each locale group, at most 100 failures or warnings are shown. The cap is applied independently per locale — a project with 5 locales could show up to 500 failure lines. When the per-locale limit is exceeded, the output includes `... and N more failures` (or `... and N more warnings` for the warnings section) to indicate additional items. This prevents extremely long CI logs for large projects with many missing translations. + ### No JSON Output Validate only outputs human-readable text. There is no `--json` flag for structured output. diff --git a/docs/guides/bundling.md b/docs/guides/bundling.md index e7bf9876..35cc84ea 100644 --- a/docs/guides/bundling.md +++ b/docs/guides/bundling.md @@ -21,7 +21,9 @@ This guide provides comprehensive examples and best practices for using LingoTra ### What Are Bundles? -Bundles are **deployment-ready translation files** generated from LingoTracker's source translations. +LingoTracker stores translations in a structured format optimized for management — version control friendly, metadata-rich, and split across many small files. Your application, however, needs deployment-ready JSON files per locale at runtime. Bundles are that output: **one or more domain-specific translation files** assembled from LingoTracker's source translations. + +A single app might ship a `core` bundle loaded eagerly, an `admin` bundle loaded only for admin users, and a `reports` bundle lazy-loaded on demand. Each bundle is independently configured — you control which collections and keys go into it using key patterns, tags, or both. Tags in particular enable a high degree of customization: you can slice your translations by any cross-cutting concern (feature, audience, environment) regardless of how keys are structured in the folder hierarchy. **Source (LingoTracker)**: ``` @@ -52,6 +54,8 @@ translations/ ## Quick Start +> **Prerequisites**: Complete the [Getting Started](../getting-started.md) guide first. You should already have a `.lingo-tracker.json` with at least one collection configured. + ### 1. Add Bundle Configuration Edit `.lingo-tracker.json`: @@ -95,6 +99,8 @@ src/assets/i18n/ Each file contains hierarchical JSON with all translations for that locale. +> **Want TypeScript type safety?** Add `typeDistFile` to your bundle config and LingoTracker will generate a typed constants file alongside the JSON bundles. See [Bundle Type Generation](../features/bundle-type-generation.md). + --- ## Bundle Configuration @@ -177,29 +183,15 @@ Generate different bundles for different purposes: ### Filename Patterns -The `{locale}` placeholder is replaced with each locale: +The `{locale}` placeholder in `bundleName` is replaced with each locale at generation time: -```json -{ - "bundles": { - "example1": { - "bundleName": "{locale}", // en.json, fr-ca.json - "dist": "./dist/i18n", - "collections": "All" - }, - "example2": { - "bundleName": "app.{locale}", // app.en.json, app.fr-ca.json - "dist": "./dist", - "collections": "All" - }, - "example3": { - "bundleName": "{locale}/main", // en/main.json, fr-ca/main.json - "dist": "./dist/i18n", - "collections": "All" - } - } -} -``` +| `bundleName` | Output files (locales: `en`, `fr-ca`) | +|---|---| +| `{locale}` | `dist/i18n/en.json`, `dist/i18n/fr-ca.json` | +| `app.{locale}` | `dist/app.en.json`, `dist/app.fr-ca.json` | +| `{locale}/main` | `dist/i18n/en/main.json`, `dist/i18n/fr-ca/main.json` | + +The subdirectory form (`{locale}/main`) is useful for frameworks that expect one folder per locale. --- @@ -220,13 +212,11 @@ When multiple collections contribute the same key, merge strategies determine wh "collections": [ { "name": "Common", - "entriesSelectionRules": "All", - "mergeStrategy": "merge" + "entriesSelectionRules": "All" }, { "name": "App", - "entriesSelectionRules": "All", - "mergeStrategy": "merge" + "entriesSelectionRules": "All" } ] } @@ -234,6 +224,8 @@ When multiple collections contribute the same key, merge strategies determine wh } ``` +> `merge` is the default strategy, so you don't need to specify it explicitly. + **Example**: Common collection has: `apps.buttons.ok = "OK"` @@ -526,69 +518,7 @@ export class TranslocoHttpLoader implements TranslocoLoader { export class AppComponent {} ``` ---- - -### react-i18next - -**Bundle Configuration**: -```json -{ - "bundles": { - "react": { - "bundleName": "{locale}/translation", - "dist": "./public/locales", - "collections": "All" - } - } -} -``` - -**Generates**: -``` -public/locales/ -├── en/translation.json -├── fr-ca/translation.json -└── es/translation.json -``` - -**i18next Setup** (`i18n.js`): -```javascript -import i18n from 'i18next'; -import { initReactI18next } from 'react-i18next'; -import HttpBackend from 'i18next-http-backend'; - -i18n - .use(HttpBackend) - .use(initReactI18next) - .init({ - fallbackLng: 'en', - supportedLngs: ['en', 'fr-ca', 'es'], - backend: { - loadPath: '/locales/{{lng}}/{{ns}}.json' - }, - interpolation: { - escapeValue: false - } - }); - -export default i18n; -``` - -**Usage in Components**: -```jsx -import { useTranslation } from 'react-i18next'; - -function App() { - const { t } = useTranslation(); - - return ( -
-

{t('apps.common.title')}

- -
- ); -} -``` +> LingoTracker currently has first-class integration guidance for Angular/Transloco. Other frameworks (React, Vue, etc.) work the same way — configure `bundleName` and `dist` to match where your i18n library expects to load files from. --- @@ -782,6 +712,73 @@ this.translocoService.setActiveLang('en'); this.translocoService.load('admin').subscribe(); ``` +### Tag-Driven Multi-Bundle Split + +Tags let you split a single collection into multiple bundles without relying on key structure. This is useful when translations don't follow a clean folder hierarchy, or when the same key might need to appear in more than one bundle. + +In this example, a single `App` collection is tagged per feature area. Each bundle selects only the keys tagged for it: + +**Tagging your resources** (in LingoTracker UI or via CLI): +- `apps.common.*` keys → tagged `core` +- `apps.admin.*` keys → tagged `admin` +- `apps.reports.*` keys → tagged `reports` + +**Bundle configuration**: + +```json +{ + "bundles": { + "core": { + "bundleName": "core.{locale}", + "dist": "./src/assets/i18n", + "collections": [ + { + "name": "App", + "entriesSelectionRules": [ + { + "matchingPattern": "*", + "matchingTags": ["core"] + } + ] + } + ] + }, + "admin": { + "bundleName": "admin.{locale}", + "dist": "./src/assets/i18n", + "collections": [ + { + "name": "App", + "entriesSelectionRules": [ + { + "matchingPattern": "*", + "matchingTags": ["admin"] + } + ] + } + ] + }, + "reports": { + "bundleName": "reports.{locale}", + "dist": "./src/assets/i18n", + "collections": [ + { + "name": "App", + "entriesSelectionRules": [ + { + "matchingPattern": "*", + "matchingTags": ["reports"] + } + ] + } + ] + } + } +} +``` + +The same approach works for any cross-cutting split: by audience (`public` / `internal`), by feature flag, or by release stage. A key can carry multiple tags, so it can appear in more than one bundle if needed. + ### Environment-Specific Bundles Different bundles for different environments: @@ -814,12 +811,13 @@ Different bundles for different environments: } ``` -Generate specific bundle: +By default `lingo-tracker bundle` generates all configured bundles. Use `--name` to target a single bundle by its key in `.lingo-tracker.json`: + ```bash lingo-tracker bundle --name production ``` -Override token casing from the CLI: +Override token casing for a single bundle run: ```bash lingo-tracker bundle --name core --token-casing camelCase ``` @@ -869,7 +867,11 @@ Different bundles for different tenants: ### Bundled Key Prefixes -Add prefixes to avoid key conflicts: +`bundledKeyPrefix` prepends a namespace segment to every key from a collection before merging. This is useful when two collections have overlapping key structures and you need to keep them separate in the output. + +For example, if both `AppTranslations` and `LibraryTranslations` have a `buttons.ok` key, including both without a prefix would cause a collision (only one value survives). With `bundledKeyPrefix`, each collection's keys live under their own namespace. + +**Example**: ```json { @@ -902,6 +904,8 @@ Add prefixes to avoid key conflicts: ## Troubleshooting +> **Tip**: Run `lingo-tracker bundle --help` for a full list of flags. Add `--verbose` to any bundle command to see detailed output about which keys each collection contributes. + ### Empty Bundle Warning **Problem**: "Bundle 'main' for locale 'en' is empty" @@ -976,17 +980,19 @@ Add prefixes to avoid key conflicts: ## Summary -Bundle generation is a powerful feature that separates translation management from application deployment: +Bundle generation bridges translation management and application deployment: LingoTracker manages your translations in a structured, version-control-friendly format, and `lingo-tracker bundle` produces the runtime files your app actually loads. -- **Configure once** in `.lingo-tracker.json` -- **Generate anytime** with `lingo-tracker bundle` -- **Integrate seamlessly** with any framework or build tool -- **Filter flexibly** with patterns and tags -- **Customize output** with merge strategies and prefixes +**Recommended next step**: Add bundle generation to your `prebuild` npm script so bundles are always up to date before each build: -For more information: -- [CLI Reference](../cli.md) - Complete command documentation -- [Getting Started](../getting-started.md) - Initial setup guide -- [API Reference](../api.md) - REST API endpoints +```json +{ + "scripts": { + "prebuild": "lingo-tracker bundle" + } +} +``` -**Next Steps**: Add bundle generation to your build pipeline and start deploying optimized translation files! +**Further reading**: +- [Bundle Type Generation](../features/bundle-type-generation.md) — generate TypeScript constants for type-safe translation keys +- [CLI Reference](../cli.md) — full `bundle` command options and flags +- [Getting Started](../getting-started.md) — initial project setup diff --git a/docs/guides/migration.md b/docs/guides/migration.md index f9bd0457..d8649732 100644 --- a/docs/guides/migration.md +++ b/docs/guides/migration.md @@ -78,20 +78,34 @@ Always create a backup of your original translation files before migration: cp -r ./src/i18n ./src/i18n.backup ``` +If something goes wrong, restore with: + +```bash +cp -r ./src/i18n.backup ./src/i18n +``` + ### 3. Choose Migration Strategy LingoTracker's import feature has a dedicated `migration` strategy that: -- Creates new resources (base + translations) -- Resolves Transloco-style key references -- Updates comments and tags by default +- Creates new resources when `--create-missing` is specified +- Resolves Transloco-style key references (`{{t('key')}}`) +- Updates comments and tags when `--update-comments` / `--update-tags` are specified - Sets all imported translations to `translated` status +> **Tip**: Always do a dry run first to preview what will be created before committing to the import: +> ```bash +> lingo-tracker import --source en.json --locale en --strategy migration \ +> --create-missing --dry-run +> ``` + --- ## Migrating from Transloco Transloco is Angular's internationalization library. LingoTracker provides specialized support for Transloco migrations. +> **After completing the steps below**, follow the [Post-Migration Steps](#post-migration-steps) to normalize resources, configure bundles, and test your application. + ### Source Format Transloco typically uses one JSON file per locale: @@ -120,92 +134,24 @@ src/assets/i18n/ } ``` -### Step 1: Export Base Locale with Rich Metadata +### Step 1: Import Base Locale -If your Transloco files don't have base values, create a rich JSON export: - -```bash -# Export existing Transloco translations to get structure -lingo-tracker export --format json --locale en --rich --include-base \ - --output ./migration-prep -``` - -This creates `migration-prep/en.json` with rich format that includes base values. - -### Step 2: Prepare Translation Files - -For each target locale, you need to prepare a JSON file with base values. - -**Option A: Transform existing Transloco files manually** - -Create a script to add base values to your Transloco files: - -```javascript -// transform-transloco.js -const fs = require('fs'); - -const baseTranslations = JSON.parse(fs.readFileSync('./src/assets/i18n/en.json', 'utf8')); -const targetTranslations = JSON.parse(fs.readFileSync('./src/assets/i18n/es.json', 'utf8')); - -function addBaseValues(base, target, prefix = '') { - const result = {}; - - for (const [key, value] of Object.entries(target)) { - const fullKey = prefix ? `${prefix}.${key}` : key; - - if (typeof value === 'object' && !Array.isArray(value)) { - // Recurse for nested objects - Object.assign(result, addBaseValues(base[key] || {}, value, fullKey)); - } else { - // Create rich object with base value - result[fullKey] = { - value: value, - baseValue: getNestedValue(base, fullKey.split('.')) || value - }; - } - } - - return result; -} - -function getNestedValue(obj, path) { - return path.reduce((current, key) => current?.[key], obj); -} - -const richFormat = addBaseValues(baseTranslations, targetTranslations); -fs.writeFileSync('./migration/es-rich.json', JSON.stringify(richFormat, null, 2)); - -console.log('Created migration/es-rich.json'); -``` - -Run the script: -```bash -node transform-transloco.js -``` - -**Option B: Use hierarchical format with manual base values** - -Simply use your existing Transloco JSON files and add base values during import: - -1. Keep your Transloco files as-is -2. Import with `--strategy migration` -3. LingoTracker will use the base locale file for base values - -### Step 3: Import Base Locale - -Import the base locale first to create the resource structure: +Import the base locale first to create the resource structure. If you have multiple collections, add `--collection `: ```bash lingo-tracker import \ --source ./src/assets/i18n/en.json \ --locale en \ --strategy migration \ + --create-missing \ + --update-comments \ + --update-tags \ --verbose ``` -**Note**: When importing into the base locale during migration, LingoTracker creates resources with the base locale value. This is a special case only for the `migration` strategy. +**Note**: Importing into the base locale is only supported with the `migration` strategy. It creates resources with the base locale value set from the JSON values. -### Step 4: Import Target Locales +### Step 2: Import Target Locales Import each target locale: @@ -215,6 +161,9 @@ lingo-tracker import \ --source ./src/assets/i18n/es.json \ --locale es \ --strategy migration \ + --create-missing \ + --update-comments \ + --update-tags \ --verbose # Import French @@ -222,17 +171,23 @@ lingo-tracker import \ --source ./src/assets/i18n/fr.json \ --locale fr \ --strategy migration \ - --verbose + --create-missing \ + --update-comments \ + --update-tags # Import German lingo-tracker import \ --source ./src/assets/i18n/de.json \ --locale de \ --strategy migration \ - --verbose + --create-missing \ + --update-comments \ + --update-tags ``` -### Step 5: Handle Transloco References +> **If your target locale files are missing base values**, you can add them with a transformation script before importing. See [Migrating from Other Systems > Generic JSON](#from-json-files-generic) for an example transform. + +### Step 3: Handle Transloco References If your Transloco files use references like `{{t('other.key')}}`, LingoTracker automatically resolves them during migration: @@ -254,11 +209,12 @@ If your Transloco files use references like `{{t('other.key')}}`, LingoTracker a This happens automatically with the `migration` strategy. -### Step 6: Verify Migration +### Step 4: Verify Migration -Check the import summary for statistics and warnings: +Check the import summary — the exact path is printed at the end of each import command output (typically `{translationsFolder}/import-summary.md`): ```bash +# Example — adjust path to match your translationsFolder config cat translations/import-summary.md ``` @@ -268,7 +224,7 @@ Verify a few resources were created correctly: cat translations/common/buttons/resource_entries.json ``` -### Step 7: Update Transloco Configuration +### Step 5: Update Transloco Configuration After migration, update your Transloco loader to use LingoTracker bundles: @@ -308,6 +264,8 @@ loader: TranslocoHttpLoader // Loads from src/assets/i18n i18next is a popular internationalization framework for JavaScript. LingoTracker can import i18next JSON files directly. +> **After completing the steps below**, follow the [Post-Migration Steps](#post-migration-steps) to normalize resources, configure bundles, and test your application. + ### Source Format i18next typically organizes translations by namespace: @@ -417,13 +375,16 @@ node combine-namespaces.js ### Step 2: Import Base Locale -Import the base locale (usually English): +Import the base locale (usually English). If you have multiple collections, add `--collection `: ```bash lingo-tracker import \ --source ./migration/en.json \ --locale en \ --strategy migration \ + --create-missing \ + --update-comments \ + --update-tags \ --verbose ``` @@ -436,13 +397,19 @@ Import each target locale: lingo-tracker import \ --source ./migration/es.json \ --locale es \ - --strategy migration + --strategy migration \ + --create-missing \ + --update-comments \ + --update-tags # Import French lingo-tracker import \ --source ./migration/fr.json \ --locale fr \ - --strategy migration + --strategy migration \ + --create-missing \ + --update-comments \ + --update-tags ``` ### Step 4: Update i18next Configuration @@ -529,12 +496,14 @@ Create a transformation script to convert your format to LingoTracker's expected lingo-tracker import \ --source ./transformed-en.json \ --locale en \ - --strategy migration + --strategy migration \ + --create-missing lingo-tracker import \ --source ./transformed-es.json \ --locale es \ - --strategy migration + --strategy migration \ + --create-missing ``` ### From XLIFF Files @@ -559,6 +528,7 @@ lingo-tracker import \ --source ./es.xliff \ --locale es \ --strategy migration \ + --create-missing \ --verbose ``` @@ -612,7 +582,8 @@ fs.writeFileSync('./es-transformed.json', JSON.stringify(transformed, null, 2)); lingo-tracker import \ --source ./es-transformed.json \ --locale es \ - --strategy migration + --strategy migration \ + --create-missing ``` ### From CSV Files @@ -667,9 +638,9 @@ buttons.ok,OK,Aceptar,OK,OK #### Step 2: Import ```bash -lingo-tracker import --source ./es.json --locale es --strategy migration -lingo-tracker import --source ./fr.json --locale fr --strategy migration -lingo-tracker import --source ./de.json --locale de --strategy migration +lingo-tracker import --source ./es.json --locale es --strategy migration --create-missing +lingo-tracker import --source ./fr.json --locale fr --strategy migration --create-missing +lingo-tracker import --source ./de.json --locale de --strategy migration --create-missing ``` --- @@ -678,9 +649,10 @@ lingo-tracker import --source ./de.json --locale de --strategy migration ### 1. Verify Import Summary -Check the import summary for each locale: +The import command prints the summary file path at the end of its output. Open it to check each locale import: ```bash +# Path depends on your translationsFolder config — check the import output cat translations/import-summary.md ``` @@ -708,6 +680,8 @@ Export resources with `new` or `stale` status to identify missing translations: lingo-tracker export --format json --status new,stale --output ./review ``` +If you have multiple collections, add `--collection ` to target a specific one. + ### 4. Configure Bundles Set up bundle generation for your framework: @@ -883,12 +857,12 @@ cat translations/path/to/resource/resource_entries.json ### Import Summary Shows Skipped Resources -**Cause**: Using wrong strategy. Default `translation-service` strategy doesn't create new resources. +**Cause**: Using wrong strategy or missing `--create-missing`. Default `translation-service` strategy doesn't create new resources. -**Solution**: Use `--strategy migration` for migration imports: +**Solution**: Use `--strategy migration --create-missing` for migration imports: ```bash -lingo-tracker import --source file.json --locale es --strategy migration +lingo-tracker import --source file.json --locale es --strategy migration --create-missing ``` --- @@ -897,9 +871,9 @@ lingo-tracker import --source file.json --locale es --strategy migration Migrating to LingoTracker involves: -1. **Export** from source system (or use existing files) -2. **Transform** to JSON or XLIFF format -3. **Import** with `--strategy migration` +1. **Prepare** source files (transform format if needed) +2. **Dry run** with `--dry-run` to preview what will be created +3. **Import** with `--strategy migration --create-missing` 4. **Normalize** to add missing locale entries 5. **Configure** bundles for your framework 6. **Test** thoroughly before removing old files @@ -907,16 +881,19 @@ Migrating to LingoTracker involves: ### Quick Reference ```bash -# Migration workflow -lingo-tracker import --source en.json --locale en --strategy migration -lingo-tracker import --source es.json --locale es --strategy migration -lingo-tracker import --source fr.json --locale fr --strategy migration +# Migration workflow (base locale first, then target locales) +lingo-tracker import --source en.json --locale en --strategy migration \ + --create-missing --update-comments --update-tags +lingo-tracker import --source es.json --locale es --strategy migration \ + --create-missing --update-comments --update-tags +lingo-tracker import --source fr.json --locale fr --strategy migration \ + --create-missing --update-comments --update-tags # Post-migration lingo-tracker normalize --all lingo-tracker bundle -# Verify +# Verify (path printed at end of each import command) cat translations/import-summary.md ``` From 684f185c27c9900f780717c550332f0e1b9277f2 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sat, 11 Apr 2026 21:02:36 -0700 Subject: [PATCH 03/13] feat(cli): add ability to translate a locale --- apps/api/src/app/app.module.ts | 3 +- .../resources/resources.controller.spec.ts | 153 +++++++ .../resources/resources.controller.ts | 126 ++++-- .../translation-job.service.spec.ts | 163 +++++++ .../translation-job.service.ts | 139 ++++++ apps/cli/src/commands/translate-locale.ts | 179 ++++++++ apps/cli/src/main.ts | 11 + docs/api.md | 112 +++++ docs/auto-translation.md | 64 ++- docs/cli.md | 73 +++ libs/core/src/config/translation-config.ts | 4 + libs/core/src/lib/translation/index.ts | 2 + .../lib/translation/translate-locale.spec.ts | 422 ++++++++++++++++++ .../src/lib/translation/translate-locale.ts | 305 +++++++++++++ .../translation-orchestrator.spec.ts | 109 +++++ .../translation/translation-orchestrator.ts | 91 ++++ libs/data-transfer/src/index.ts | 1 + .../src/lib/translate-locale.dto.ts | 18 + .../src/lib/translation-config.dto.ts | 4 + 19 files changed, 1950 insertions(+), 29 deletions(-) create mode 100644 apps/api/src/app/translation-job/translation-job.service.spec.ts create mode 100644 apps/api/src/app/translation-job/translation-job.service.ts create mode 100644 apps/cli/src/commands/translate-locale.ts create mode 100644 libs/core/src/lib/translation/translate-locale.spec.ts create mode 100644 libs/core/src/lib/translation/translate-locale.ts create mode 100644 libs/data-transfer/src/lib/translate-locale.dto.ts diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index e40d63b1..ae14d91a 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -7,11 +7,12 @@ import { CollectionsController } from './collections/collections.controller'; import { ResourcesController } from './collections/resources/resources.controller'; import { FoldersController } from './collections/folders/folders.controller'; import { CollectionCacheService } from './cache/collection-cache.service'; +import { TranslationJobService } from './translation-job/translation-job.service'; @Module({ imports: [], controllers: [AppController, ConfigController, CollectionsController, ResourcesController, FoldersController], - providers: [AppService, ConfigService, CollectionCacheService], + providers: [AppService, ConfigService, CollectionCacheService, TranslationJobService], }) export class AppModule { constructor() { diff --git a/apps/api/src/app/collections/resources/resources.controller.spec.ts b/apps/api/src/app/collections/resources/resources.controller.spec.ts index bddfb054..d2bd844b 100644 --- a/apps/api/src/app/collections/resources/resources.controller.spec.ts +++ b/apps/api/src/app/collections/resources/resources.controller.spec.ts @@ -6,6 +6,7 @@ import type { ResourceTreeDto } from '@simoncodes-ca/data-transfer'; import { ResourcesController } from './resources.controller'; import { ConfigService } from '../../config/config.service'; import { CollectionCacheService, CacheStatus } from '../../cache/collection-cache.service'; +import { TranslationJobService } from '../../translation-job/translation-job.service'; import * as core from '@simoncodes-ca/core'; // Mock the core module @@ -133,6 +134,13 @@ describe('ResourcesController', () => { provide: CollectionCacheService, useValue: mockCacheService, }, + { + provide: TranslationJobService, + useValue: { + startJob: jest.fn().mockReturnValue('mock-job-id'), + getJob: jest.fn().mockReturnValue(null), + }, + }, ], }).compile(); @@ -1509,4 +1517,149 @@ describe('ResourcesController', () => { expect(result.skippedLocales).toEqual(['fr-ca', 'es']); }); }); + + describe('translateLocale (POST translate-locale)', () => { + const configWithTranslation = { + ...mockConfig, + translation: { + enabled: true, + provider: 'google-translate', + apiKeyEnv: 'GOOGLE_TRANSLATE_API_KEY', + }, + }; + + const mockJobDto = { + jobId: 'mock-job-id', + collectionName: 'test-collection', + targetLocale: 'fr-ca', + status: 'pending' as const, + totalResources: 0, + translatedCount: 0, + failedCount: 0, + skippedCount: 0, + }; + + it('should return 202 with a job DTO when valid', async () => { + const translationJobService = resourcesModule.get(TranslationJobService); + (translationJobService.startJob as jest.Mock).mockReturnValue('mock-job-id'); + (translationJobService.getJob as jest.Mock).mockReturnValue(mockJobDto); + (configService.getConfig as jest.Mock).mockReturnValue(configWithTranslation); + + const mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + }; + + await resourcesController.translateLocale('test-collection', { locale: 'fr-ca' }, mockResponse as any); + + expect(mockResponse.status).toHaveBeenCalledWith(202); + expect(mockResponse.json).toHaveBeenCalledWith(mockJobDto); + }); + + it('should return 404 when collection not found', async () => { + (configService.getConfig as jest.Mock).mockReturnValue({ ...mockConfig, collections: {} }); + + const mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + }; + + await expect( + resourcesController.translateLocale('unknown-collection', { locale: 'fr-ca' }, mockResponse as any), + ).rejects.toThrow(NotFoundException); + }); + + it('should return 422 when translation is not enabled for the collection', async () => { + // mockConfig has no translation config — auto-translation is disabled by default + const mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + }; + + try { + await resourcesController.translateLocale('test-collection', { locale: 'fr-ca' }, mockResponse as any); + fail('expected HttpException to be thrown'); + } catch (error: unknown) { + expect(error).toBeInstanceOf(HttpException); + expect((error as HttpException).getStatus()).toBe(422); + } + }); + + it('should return 400 when locale equals the base locale', async () => { + (configService.getConfig as jest.Mock).mockReturnValue(configWithTranslation); + + const mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + }; + + try { + await resourcesController.translateLocale('test-collection', { locale: 'en' }, mockResponse as any); + fail('expected HttpException to be thrown'); + } catch (error: unknown) { + expect(error).toBeInstanceOf(HttpException); + expect((error as HttpException).getStatus()).toBe(400); + } + }); + + it('should return 400 when locale is not in the collection locales list', async () => { + (configService.getConfig as jest.Mock).mockReturnValue(configWithTranslation); + + const mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + }; + + try { + await resourcesController.translateLocale('test-collection', { locale: 'de' }, mockResponse as any); + fail('expected HttpException to be thrown'); + } catch (error: unknown) { + expect(error).toBeInstanceOf(HttpException); + expect((error as HttpException).getStatus()).toBe(400); + } + }); + }); + + describe('getTranslateLocaleJob (GET translate-locale/:jobId)', () => { + const mockJobDto = { + jobId: 'known-job-id', + collectionName: 'test-collection', + targetLocale: 'fr-ca', + status: 'completed' as const, + totalResources: 10, + translatedCount: 9, + failedCount: 1, + skippedCount: 0, + }; + + it('should return the job DTO when found and collection matches', async () => { + const translationJobService = resourcesModule.get(TranslationJobService); + (translationJobService.getJob as jest.Mock).mockReturnValue(mockJobDto); + + const result = await resourcesController.getTranslateLocaleJob('test-collection', 'known-job-id'); + + expect(result).toEqual(mockJobDto); + }); + + it('should return 404 when job not found', async () => { + const translationJobService = resourcesModule.get(TranslationJobService); + (translationJobService.getJob as jest.Mock).mockReturnValue(undefined); + + await expect(resourcesController.getTranslateLocaleJob('test-collection', 'unknown-id')).rejects.toThrow( + NotFoundException, + ); + }); + + it('should return 404 when job exists but collectionName does not match', async () => { + const translationJobService = resourcesModule.get(TranslationJobService); + (translationJobService.getJob as jest.Mock).mockReturnValue({ + ...mockJobDto, + collectionName: 'other-collection', + }); + + await expect(resourcesController.getTranslateLocaleJob('test-collection', 'known-job-id')).rejects.toThrow( + NotFoundException, + ); + }); + }); }); diff --git a/apps/api/src/app/collections/resources/resources.controller.ts b/apps/api/src/app/collections/resources/resources.controller.ts index 50ba798d..64859baf 100644 --- a/apps/api/src/app/collections/resources/resources.controller.ts +++ b/apps/api/src/app/collections/resources/resources.controller.ts @@ -48,21 +48,32 @@ import type { TreeStatusResponseDto, TranslateResourceDto, TranslateResourceResponseDto, + TranslateLocaleRequestDto, + TranslateLocaleJobDto, } from '@simoncodes-ca/data-transfer'; import { ConfigService } from '../../config/config.service'; import { mapDtoToAddResourceParams } from '../../mappers/resource.mapper'; import { mapResourceTreeToDto, mapResourceEntryToSummary } from '../../mappers/resource-tree.mapper'; import { mapSearchResultsToDto } from '../../mappers/search-result.mapper'; import { CollectionCacheService, CacheStatus } from '../../cache/collection-cache.service'; +import { TranslationJobService } from '../../translation-job/translation-job.service'; @Controller('collections/:collectionName/resources') export class ResourcesController { readonly #logger = new Logger(ResourcesController.name); + readonly #configService: ConfigService; + readonly #cacheService: CollectionCacheService; + readonly #translationJobService: TranslationJobService; constructor( - private readonly configService: ConfigService, - private readonly cacheService: CollectionCacheService, - ) {} + configService: ConfigService, + cacheService: CollectionCacheService, + translationJobService: TranslationJobService, + ) { + this.#configService = configService; + this.#cacheService = cacheService; + this.#translationJobService = translationJobService; + } @Post('translate') async translateResource( @@ -71,7 +82,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -97,7 +108,7 @@ export class ResourcesController { cwd: process.cwd(), }); - this.cacheService.addResourceToCache( + this.#cacheService.addResourceToCache( decodedCollectionName, result.entry, dto.key.split('.').slice(0, -1).join('.'), @@ -136,7 +147,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -225,7 +236,7 @@ export class ResourcesController { ...(resource.tags && resource.tags.length > 0 && { tags: resource.tags }), }; - this.cacheService.addResourceToCache(decodedCollectionName, cacheEntry, folderPath); + this.#cacheService.addResourceToCache(decodedCollectionName, cacheEntry, folderPath); } catch (error: unknown) { // Validation errors (invalid key, etc.) should return 400 const errorMessage = error instanceof Error ? error.message : ''; @@ -266,7 +277,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -286,7 +297,7 @@ export class ResourcesController { // Clear cache after successful resource deletion if (result.entriesDeleted > 0) { - this.cacheService.clearCache(); + this.#cacheService.clearCache(); } return { @@ -314,7 +325,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -369,7 +380,7 @@ export class ResourcesController { // Clear cache after successful resource move if (result.movedCount > 0) { - this.cacheService.clearCache(); + this.#cacheService.clearCache(); } return result; @@ -390,7 +401,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -418,11 +429,11 @@ export class ResourcesController { if (dto.targetFolder !== undefined && dto.targetFolder !== oldFolderPath) { // Resource moved to a different folder — remove from old location, insert at new - this.cacheService.removeResourceFromCache(decodedCollectionName, entryKey, oldFolderPath); - this.cacheService.addResourceToCache(decodedCollectionName, result.entry, dto.targetFolder ?? ''); + this.#cacheService.removeResourceFromCache(decodedCollectionName, entryKey, oldFolderPath); + this.#cacheService.addResourceToCache(decodedCollectionName, result.entry, dto.targetFolder ?? ''); } else { // In-place edit — upsert in the same folder - this.cacheService.addResourceToCache(decodedCollectionName, result.entry, oldFolderPath); + this.#cacheService.addResourceToCache(decodedCollectionName, result.entry, oldFolderPath); } resourceDto = mapResourceEntryToSummary(result.entry); @@ -482,7 +493,7 @@ export class ResourcesController { isIncludeNested = false; } - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -492,13 +503,13 @@ export class ResourcesController { const translationsFolder = collection.translationsFolder; // Check cache status - const cacheStatus = this.cacheService.getCacheStatus(decodedCollectionName); + const cacheStatus = this.#cacheService.getCacheStatus(decodedCollectionName); // Handle cache states if (cacheStatus === CacheStatus.NOT_STARTED || cacheStatus === CacheStatus.ERROR) { // Trigger indexing asynchronously (don't await) const locales = collection.locales ?? config.locales ?? []; - this.cacheService.indexCollection(decodedCollectionName, translationsFolder, locales.length).catch((error) => { + this.#cacheService.indexCollection(decodedCollectionName, translationsFolder, locales.length).catch((error) => { this.#logger.warn(`Async indexing failed for ${decodedCollectionName}`, error); }); @@ -531,7 +542,7 @@ export class ResourcesController { } // Cache is READY - retrieve cached tree - const cachedTree = this.cacheService.getCache(decodedCollectionName); + const cachedTree = this.#cacheService.getCache(decodedCollectionName); if (!cachedTree) { throw new HttpException('Cache is marked as ready but tree is not available', HttpStatus.INTERNAL_SERVER_ERROR); @@ -611,13 +622,13 @@ export class ResourcesController { async getCacheStatus(@Param('collectionName') collectionName: string): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); } - const cacheStatus = this.cacheService.getCacheStatus(decodedCollectionName); + const cacheStatus = this.#cacheService.getCacheStatus(decodedCollectionName); // If cache is not started, trigger indexing asynchronously const collection = config.collections[decodedCollectionName]; @@ -625,13 +636,13 @@ export class ResourcesController { const translationsFolder = collection.translationsFolder; const locales = collection.locales ?? config.locales ?? []; - this.cacheService.indexCollection(decodedCollectionName, translationsFolder, locales.length).catch((error) => { + this.#cacheService.indexCollection(decodedCollectionName, translationsFolder, locales.length).catch((error) => { this.#logger.warn(`Async indexing failed for ${decodedCollectionName}`, error); }); } // Get additional cache metadata - const metadata = this.cacheService.getCacheMetadata(decodedCollectionName); + const metadata = this.#cacheService.getCacheMetadata(decodedCollectionName); // Map CacheStatus enum to CacheStatusType string literal const statusType = cacheStatus as 'not-started' | 'indexing' | 'ready' | 'error'; @@ -651,7 +662,7 @@ export class ResourcesController { // Include stats when cache is ready if (cacheStatus === CacheStatus.READY) { - const stats = this.cacheService.getCacheStats(decodedCollectionName); + const stats = this.#cacheService.getCacheStats(decodedCollectionName); if (stats) { statusDto.stats = stats; } @@ -679,7 +690,7 @@ export class ResourcesController { ): Promise { try { const decodedCollectionName = decodeURIComponent(collectionName); - const config = this.configService.getConfig(); + const config = this.#configService.getConfig(); if (!config.collections || !config.collections[decodedCollectionName]) { throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); @@ -703,7 +714,7 @@ export class ResourcesController { const maxResults = Math.min(dto.maxResults || 100, 500); // Try to use cached tree for faster search - const cachedTree = this.cacheService.getCache(decodedCollectionName); + const cachedTree = this.#cacheService.getCache(decodedCollectionName); let searchResults: SearchResult[]; if (cachedTree) { @@ -748,4 +759,67 @@ export class ResourcesController { throw new HttpException(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR); } } + + @Post('translate-locale') + async translateLocale( + @Param('collectionName') collectionName: string, + @Body() dto: TranslateLocaleRequestDto, + @Res() response: Response, + ): Promise { + const decodedCollectionName = decodeURIComponent(collectionName); + const config = this.#configService.getConfig(); + + if (!config.collections || !config.collections[decodedCollectionName]) { + throw new NotFoundException(`Collection "${decodedCollectionName}" not found`); + } + + const collection = config.collections[decodedCollectionName]; + const translationConfig = collection.translation ?? config.translation; + + if (!translationConfig?.enabled) { + throw new HttpException('Auto-translation is not enabled for this collection', HttpStatus.UNPROCESSABLE_ENTITY); + } + + const baseLocale = collection.baseLocale || config.baseLocale || 'en'; + const allLocales = collection.locales ?? config.locales ?? []; + + if (dto.locale === baseLocale || !allLocales.includes(dto.locale)) { + throw new HttpException( + `Invalid locale "${dto.locale}": must be a non-base locale defined in the collection's locales`, + HttpStatus.BAD_REQUEST, + ); + } + + const jobId = this.#translationJobService.startJob({ + collectionName: decodedCollectionName, + translationsFolder: collection.translationsFolder, + translationConfig, + targetLocale: dto.locale, + baseLocale, + allLocales, + cwd: process.cwd(), + }); + + const job = this.#translationJobService.getJob(jobId); + (response as unknown as import('express').Response).status(HttpStatus.ACCEPTED).json(job); + } + + @Get('translate-locale/:jobId') + async getTranslateLocaleJob( + @Param('collectionName') collectionName: string, + @Param('jobId') jobId: string, + ): Promise { + const decodedCollectionName = decodeURIComponent(collectionName); + const job = this.#translationJobService.getJob(jobId); + + if (job === undefined) { + throw new NotFoundException(`Translation job "${jobId}" not found`); + } + + if (job.collectionName !== decodedCollectionName) { + throw new NotFoundException(`Translation job "${jobId}" not found`); + } + + return job; + } } diff --git a/apps/api/src/app/translation-job/translation-job.service.spec.ts b/apps/api/src/app/translation-job/translation-job.service.spec.ts new file mode 100644 index 00000000..25a41b1b --- /dev/null +++ b/apps/api/src/app/translation-job/translation-job.service.spec.ts @@ -0,0 +1,163 @@ +import { TranslationJobService } from './translation-job.service'; +import { TranslationError } from '@simoncodes-ca/core'; +import type { TranslateLocaleResult, TranslateLocaleProgress } from '@simoncodes-ca/core'; + +const mockTranslateLocale = jest.fn(); + +jest.mock('@simoncodes-ca/core', () => { + const actual = jest.requireActual('@simoncodes-ca/core'); + return { + ...actual, + translateLocale: (params: unknown) => mockTranslateLocale(params), + }; +}); + +const makeSuccessResult = (overrides: Partial = {}): TranslateLocaleResult => ({ + totalResources: 10, + translatedCount: 9, + failedCount: 1, + skippedCount: 0, + failures: [{ key: 'apps.button.ok', error: 'Rate limit exceeded' }], + skippedKeys: [], + ...overrides, +}); + +const makeStartJobParams = () => ({ + collectionName: 'my-collection', + translationsFolder: '/path/to/translations', + translationConfig: { enabled: true, provider: 'google', apiKeyEnv: 'GOOGLE_API_KEY' }, + targetLocale: 'fr', + baseLocale: 'en', + allLocales: ['en', 'fr', 'de'], + cwd: '/workspace', +}); + +describe('TranslationJobService', () => { + let service: TranslationJobService; + + beforeEach(() => { + jest.clearAllMocks(); + service = new TranslationJobService(); + }); + + it('startJob returns a non-empty job ID', () => { + mockTranslateLocale.mockReturnValue(new Promise(() => {})); // never resolves + + const jobId = service.startJob(makeStartJobParams()); + + expect(jobId).toBeTruthy(); + expect(typeof jobId).toBe('string'); + }); + + it('getJob returns undefined for an unknown job ID', () => { + const result = service.getJob('non-existent-id'); + + expect(result).toBeUndefined(); + }); + + it('getJob returns a running job immediately after startJob (before async completes)', () => { + mockTranslateLocale.mockReturnValue(new Promise(() => {})); // never resolves + + const jobId = service.startJob(makeStartJobParams()); + const job = service.getJob(jobId); + + expect(job).toBeDefined(); + expect(job!.jobId).toBe(jobId); + expect(job!.collectionName).toBe('my-collection'); + expect(job!.targetLocale).toBe('fr'); + expect(['pending', 'running']).toContain(job!.status); + }); + + it('job status becomes completed with correct counts after async resolves', async () => { + const result = makeSuccessResult(); + mockTranslateLocale.mockResolvedValue(result); + + const jobId = service.startJob(makeStartJobParams()); + + // Wait for the microtask queue to flush the resolved promise + await Promise.resolve(); + await Promise.resolve(); + + const job = service.getJob(jobId)!; + expect(job.status).toBe('completed'); + expect(job.totalResources).toBe(result.totalResources); + expect(job.translatedCount).toBe(result.translatedCount); + expect(job.failedCount).toBe(result.failedCount); + expect(job.skippedCount).toBe(result.skippedCount); + expect(job.failures).toEqual(result.failures); + expect(job.completedAt).toBeDefined(); + }); + + it('job status becomes failed when translateLocale throws a TranslationError', async () => { + mockTranslateLocale.mockRejectedValue(new TranslationError('API quota exceeded', 'QUOTA_EXCEEDED', false)); + + const jobId = service.startJob(makeStartJobParams()); + + await Promise.resolve(); + await Promise.resolve(); + + const job = service.getJob(jobId)!; + expect(job.status).toBe('failed'); + expect(job.completedAt).toBeDefined(); + }); + + it('job status becomes failed when translateLocale throws a generic Error', async () => { + mockTranslateLocale.mockRejectedValue(new Error('Unexpected network failure')); + + const jobId = service.startJob(makeStartJobParams()); + + await Promise.resolve(); + await Promise.resolve(); + + const job = service.getJob(jobId)!; + expect(job.status).toBe('failed'); + }); + + it('getJob omits optional fields when there are no failures or skipped keys', async () => { + mockTranslateLocale.mockResolvedValue(makeSuccessResult({ failures: [], skippedKeys: [] })); + + const jobId = service.startJob(makeStartJobParams()); + + await Promise.resolve(); + await Promise.resolve(); + + const job = service.getJob(jobId)!; + expect(job.failures).toBeUndefined(); + expect(job.skippedKeys).toBeUndefined(); + }); + + it('updates job counts when onProgress is called', async () => { + let resolveTranslation!: (result: TranslateLocaleResult) => void; + + mockTranslateLocale.mockImplementationOnce( + (params: { onProgress?: (p: TranslateLocaleProgress) => void }) => + new Promise((resolve) => { + resolveTranslation = resolve; + params.onProgress?.({ + totalResources: 10, + translatedCount: 3, + failedCount: 0, + skippedCount: 1, + currentBatch: 1, + totalBatches: 2, + }); + }), + ); + + const jobId = service.startJob(makeStartJobParams()); + + // Give the microtask queue a tick so the async function runs up to its first await + // (the Promise constructor callback runs synchronously, so onProgress has already been called) + await new Promise((resolve) => setImmediate(resolve)); + + // The promise has NOT resolved yet — the progress counts should reflect the onProgress call + const jobDuringProgress = service.getJob(jobId); + expect(jobDuringProgress?.translatedCount).toBe(3); + expect(jobDuringProgress?.totalResources).toBe(10); + + // Clean up by resolving the translation so no unhandled promise dangles + resolveTranslation(makeSuccessResult({ totalResources: 10, translatedCount: 10, failedCount: 0, skippedCount: 0 })); + await Promise.resolve(); + await Promise.resolve(); + }); +}); diff --git a/apps/api/src/app/translation-job/translation-job.service.ts b/apps/api/src/app/translation-job/translation-job.service.ts new file mode 100644 index 00000000..57dd26a6 --- /dev/null +++ b/apps/api/src/app/translation-job/translation-job.service.ts @@ -0,0 +1,139 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { randomUUID } from 'node:crypto'; +import { translateLocale, TranslationError } from '@simoncodes-ca/core'; +import type { TranslateLocaleParams, TranslateLocaleProgress } from '@simoncodes-ca/core'; +import type { TranslateLocaleJobDto } from '@simoncodes-ca/data-transfer'; + +interface TranslationJob { + jobId: string; + collectionName: string; + targetLocale: string; + status: 'pending' | 'running' | 'completed' | 'failed'; + totalResources: number; + translatedCount: number; + failedCount: number; + skippedCount: number; + failures: Array<{ key: string; error: string }>; + skippedKeys: string[]; + startedAt?: Date; + completedAt?: Date; + error?: string; +} + +@Injectable() +export class TranslationJobService { + readonly #logger = new Logger(TranslationJobService.name); + readonly #jobs = new Map(); + + /** + * Kicks off an async translate-locale job and returns its ID immediately. + * The caller can poll `getJob(jobId)` to track progress. + */ + startJob(params: TranslateLocaleParams & { collectionName: string }): string { + const jobId = randomUUID(); + + const job: TranslationJob = { + jobId, + collectionName: params.collectionName, + targetLocale: params.targetLocale, + status: 'pending', + totalResources: 0, + translatedCount: 0, + failedCount: 0, + skippedCount: 0, + failures: [], + skippedKeys: [], + }; + + this.#jobs.set(jobId, job); + + this.#runJob(jobId, params); + + return jobId; + } + + /** Returns the current snapshot of a job as a DTO, or undefined if the job ID is unknown. */ + getJob(jobId: string): TranslateLocaleJobDto | undefined { + const job = this.#jobs.get(jobId); + + if (!job) { + return undefined; + } + + return this.#toDto(job); + } + + #runJob(jobId: string, params: TranslateLocaleParams & { collectionName: string }): void { + const { collectionName: _collectionName, ...translateParams } = params; + + const onProgress = (progress: TranslateLocaleProgress): void => { + const job = this.#jobs.get(jobId); + + if (!job) { + return; + } + + job.totalResources = progress.totalResources; + job.translatedCount = progress.translatedCount; + job.failedCount = progress.failedCount; + job.skippedCount = progress.skippedCount; + }; + + const runningJob = this.#jobs.get(jobId)!; + runningJob.status = 'running'; + runningJob.startedAt = new Date(); + + translateLocale({ ...translateParams, onProgress }) + .then((result) => { + const completedJob = this.#jobs.get(jobId); + + if (!completedJob) { + return; + } + + completedJob.status = 'completed'; + completedJob.completedAt = new Date(); + completedJob.totalResources = result.totalResources; + completedJob.translatedCount = result.translatedCount; + completedJob.failedCount = result.failedCount; + completedJob.skippedCount = result.skippedCount; + completedJob.failures = [...result.failures]; + completedJob.skippedKeys = [...result.skippedKeys]; + }) + .catch((error: unknown) => { + const failedJob = this.#jobs.get(jobId); + + if (!failedJob) { + return; + } + + failedJob.status = 'failed'; + failedJob.completedAt = new Date(); + + if (error instanceof TranslationError || error instanceof Error) { + failedJob.error = error.message; + } else { + failedJob.error = 'An unexpected error occurred'; + } + + this.#logger.error(`Translation job ${jobId} failed: ${failedJob.error}`); + }); + } + + #toDto(job: TranslationJob): TranslateLocaleJobDto { + return { + jobId: job.jobId, + collectionName: job.collectionName, + targetLocale: job.targetLocale, + status: job.status, + totalResources: job.totalResources, + translatedCount: job.translatedCount, + failedCount: job.failedCount, + skippedCount: job.skippedCount, + ...(job.failures.length > 0 && { failures: job.failures }), + ...(job.skippedKeys.length > 0 && { skippedKeys: job.skippedKeys }), + ...(job.startedAt && { startedAt: job.startedAt.toISOString() }), + ...(job.completedAt && { completedAt: job.completedAt.toISOString() }), + }; + } +} diff --git a/apps/cli/src/commands/translate-locale.ts b/apps/cli/src/commands/translate-locale.ts new file mode 100644 index 00000000..6b749bd7 --- /dev/null +++ b/apps/cli/src/commands/translate-locale.ts @@ -0,0 +1,179 @@ +import prompts from 'prompts'; +import { translateLocale } from '@simoncodes-ca/core'; +import { loadConfiguration, resolveCollection, ConsoleFormatter, ErrorMessages } from '../utils'; + +export interface TranslateLocaleOptions { + collection?: string; + locale?: string; + verbose?: boolean; +} + +/** + * CLI command that auto-translates all `new` and `stale` resources for a + * single target locale within a collection. + * + * In TTY mode, missing `collection` and `locale` options trigger interactive + * prompts. In non-TTY mode both flags are required. + */ +export async function translateLocaleCommand(options: TranslateLocaleOptions): Promise { + const loaded = loadConfiguration({ exitOnError: false }); + if (!loaded) return; + const { config, cwd } = loaded; + + // ------------------------------------------------------------------------- + // Resolve collection + // ------------------------------------------------------------------------- + + let collectionName = options.collection; + + if (!collectionName) { + const collectionNames = Object.keys(config.collections ?? {}); + + if (collectionNames.length === 0) { + ConsoleFormatter.error(ErrorMessages.NO_COLLECTIONS); + return; + } + + if (!process.stdout.isTTY) { + ConsoleFormatter.error(ErrorMessages.MISSING_OPTION('collection')); + return; + } + + const answer = await prompts( + { + type: 'select', + name: 'collection', + message: 'Select collection to translate', + choices: collectionNames.map((name) => ({ title: name, value: name })), + }, + { onCancel: () => process.exit(0) }, + ); + + collectionName = answer.collection as string; + } + + const collection = resolveCollection(collectionName, config, cwd); + if (!collection) return; + + // ------------------------------------------------------------------------- + // Validate translation is enabled + // ------------------------------------------------------------------------- + + const translationEnabled = collection.config.translation?.enabled ?? config.translation?.enabled ?? false; + if (!translationEnabled) { + ConsoleFormatter.error( + `Auto-translation is not enabled for collection "${collectionName}". ` + + `Set translation.enabled = true in your configuration.`, + ); + return; + } + + const baseLocale = collection.config.baseLocale ?? config.baseLocale ?? 'en'; + const allLocales = collection.config.locales ?? config.locales ?? []; + + const nonBaseLocales = allLocales.filter((locale) => locale !== baseLocale); + + if (nonBaseLocales.length === 0) { + ConsoleFormatter.error(`No target locales configured. Add locales other than the base locale "${baseLocale}".`); + return; + } + + // ------------------------------------------------------------------------- + // Resolve target locale + // ------------------------------------------------------------------------- + + let targetLocale = options.locale; + + if (!targetLocale) { + if (!process.stdout.isTTY) { + ConsoleFormatter.error(ErrorMessages.MISSING_OPTION('locale')); + return; + } + + const answer = await prompts( + { + type: 'select', + name: 'locale', + message: 'Select target locale to translate', + choices: nonBaseLocales.map((locale) => ({ title: locale, value: locale })), + }, + { onCancel: () => process.exit(0) }, + ); + + targetLocale = answer.locale as string; + } + + if (targetLocale === baseLocale) { + ConsoleFormatter.error(`Cannot translate to the base locale "${baseLocale}".`); + return; + } + + if (!allLocales.includes(targetLocale)) { + ConsoleFormatter.error(`Locale "${targetLocale}" is not configured. Available locales: ${allLocales.join(', ')}`); + return; + } + + // ------------------------------------------------------------------------- + // Resolve translation config + // ------------------------------------------------------------------------- + + const translationConfig = collection.config.translation ?? config.translation; + if (!translationConfig) { + ConsoleFormatter.error('Translation configuration is missing. Check your .lingo-tracker.json.'); + return; + } + + // ------------------------------------------------------------------------- + // Run translation + // ------------------------------------------------------------------------- + + const translationsFolder = collection.config.translationsFolder; + + console.log(''); + ConsoleFormatter.progress(`Translating locale '${targetLocale}' in collection '${collectionName}'...`); + + try { + const result = await translateLocale({ + translationsFolder, + translationConfig, + targetLocale, + baseLocale, + allLocales, + cwd, + onProgress: options.verbose + ? (progress) => { + ConsoleFormatter.indent( + `[batch ${progress.currentBatch}/${progress.totalBatches}] ` + + `translated: ${progress.translatedCount}, skipped: ${progress.skippedCount}, failed: ${progress.failedCount}`, + ); + } + : undefined, + }); + + // ------------------------------------------------------------------------- + // Summary + // ------------------------------------------------------------------------- + + console.log(''); + ConsoleFormatter.success(`Translated locale '${targetLocale}' in collection '${collectionName}'`); + ConsoleFormatter.keyValue('Translated', result.translatedCount); + ConsoleFormatter.keyValue('Skipped (ICU)', result.skippedCount); + ConsoleFormatter.keyValue('Failed', result.failedCount); + + if (result.failures.length > 0) { + console.log(''); + ConsoleFormatter.section('Failures'); + for (const failure of result.failures) { + ConsoleFormatter.indent(`${failure.key}: ${failure.error}`); + } + } + + if (result.failedCount > 0) { + process.exit(1); + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + ConsoleFormatter.error(`Translation failed: ${message}`); + process.exit(1); + } +} diff --git a/apps/cli/src/main.ts b/apps/cli/src/main.ts index 176c22ed..64ef2c80 100644 --- a/apps/cli/src/main.ts +++ b/apps/cli/src/main.ts @@ -136,6 +136,17 @@ program await normalizeCommand(options); }); +program + .command('translate-locale') + .description('Auto-translate all new/stale resources for a target locale') + .option('--collection ', 'Collection name') + .option('--locale ', 'Target locale to translate') + .option('--verbose', 'Show per-batch progress') + .action(async (options) => { + const { translateLocaleCommand } = await import('./commands/translate-locale'); + await translateLocaleCommand(options); + }); + program .command('bundle') .description('Generate translation bundles for deployment') diff --git a/docs/api.md b/docs/api.md index cb1bc283..c199d7cf 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1134,6 +1134,118 @@ curl -X POST http://localhost:3030/api/collections/web-app/resources/translate \ -d '{"key": "apps.common.buttons.cancel"}' ``` +### Start Bulk Locale Translation Job + +Starts an async job that translates all `new` and `stale` resources in a collection for a single target locale. Returns immediately with a `jobId` that can be polled for progress. Requires auto-translation to be enabled for the collection. + +**Endpoint**: `POST /api/collections/:collectionName/resources/translate-locale` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection + +**Request Body**: + +```json +{ + "locale": "fr" +} +``` + +**Response** (202 Accepted): + +```typescript +interface TranslateLocaleJobDto { + jobId: string; + collectionName: string; + targetLocale: string; + status: 'pending' | 'running' | 'completed' | 'failed'; + totalResources: number; + translatedCount: number; + failedCount: number; + skippedCount: number; + failures?: Array<{ key: string; error: string }>; + skippedKeys?: string[]; + startedAt?: string; + completedAt?: string; +} +``` + +**Example Response**: + +```json +{ + "jobId": "uuid-here", + "collectionName": "playground", + "targetLocale": "fr", + "status": "pending", + "totalResources": 0, + "translatedCount": 0, + "failedCount": 0, + "skippedCount": 0 +} +``` + +**Status Codes**: +- `202 Accepted`: Job started — poll the GET endpoint for progress +- `400 Bad Request`: Invalid or missing locale +- `422 Unprocessable Entity`: Auto-translation not enabled for this collection +- `404 Not Found`: Collection not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl -X POST http://localhost:3030/api/collections/playground/resources/translate-locale \ + -H 'Content-Type: application/json' \ + -d '{"locale":"fr"}' +``` + +### Get Bulk Locale Translation Job Status + +Returns the current status and progress of a bulk locale translation job. Poll this endpoint every 2–5 seconds until `status` is `completed` or `failed`. + +**Endpoint**: `GET /api/collections/:collectionName/resources/translate-locale/:jobId` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection +- `jobId` (string, required): The job ID returned by the POST endpoint + +**Response**: + +`TranslateLocaleJobDto` with current status. See the POST endpoint above for the full type definition. + +**Status progression**: `pending` → `running` → `completed` / `failed` + +**Example Response** (completed): + +```json +{ + "jobId": "uuid-here", + "collectionName": "playground", + "targetLocale": "fr", + "status": "completed", + "totalResources": 48, + "translatedCount": 45, + "failedCount": 0, + "skippedCount": 3, + "failures": [], + "skippedKeys": ["forms.upload.acceptedFormats"], + "startedAt": "2026-04-11T12:00:00.000Z", + "completedAt": "2026-04-11T12:00:15.000Z" +} +``` + +**Status Codes**: +- `200 OK`: Job status returned +- `404 Not Found`: Collection or job not found +- `500 Internal Server Error`: Unexpected error + +**Example**: + +```bash +curl http://localhost:3030/api/collections/playground/resources/translate-locale/uuid-here +``` + ## Folders API All folder endpoints are scoped to a specific collection. diff --git a/docs/auto-translation.md b/docs/auto-translation.md index 49a95c50..4a777635 100644 --- a/docs/auto-translation.md +++ b/docs/auto-translation.md @@ -35,7 +35,9 @@ Add a `translation` block at the top level of your config file: "translation": { "enabled": true, "provider": "google-translate", - "apiKeyEnv": "GOOGLE_TRANSLATE_API_KEY" + "apiKeyEnv": "GOOGLE_TRANSLATE_API_KEY", + "batchSize": 5, + "delayMs": 1000 }, "collections": { "Main": { @@ -45,13 +47,15 @@ Add a `translation` block at the top level of your config file: } ``` -The `translation` block accepts three fields: +The `translation` block accepts the following fields: | Field | Type | Description | |---|---|---| | `enabled` | `boolean` | Whether auto-translation is active. Set to `false` to disable without removing the config. | | `provider` | `string` | The translation provider to use. Currently only `"google-translate"` is supported. | | `apiKeyEnv` | `string` | Name of the environment variable that holds the API key. The key is never stored in the config file. | +| `batchSize` | `number` | Number of resources to translate per API batch during bulk locale translation. Default: `5`. | +| `delayMs` | `number` | Milliseconds to wait between batches during bulk locale translation. Default: `1000`. | ### 2. Per-collection overrides @@ -222,6 +226,62 @@ If the base value uses complex ICU, `skippedLocales` will list the locales that Auto-translation targets locales where the translation status is `new` or `stale`, or where no metadata entry exists yet. Locales with status `translated` or `verified` are left unchanged. The base locale is always excluded. +## Bulk Locale Translation + +The `translate-locale` operation translates **all** `new` and `stale` resources in a collection for a single target locale in one command. This is useful for bootstrapping a new locale or catching up after a large batch of authoring changes. + +### CLI + +```bash +lingo-tracker translate-locale --collection --locale [--verbose] +``` + +In interactive mode (TTY), the command prompts for collection and locale when they are not provided. In non-interactive mode (CI/CD), both `--collection` and `--locale` are required. + +**Summary mode (default):** + +``` +Translating locale 'fr' in collection 'playground'... +Done. + +Translated: 45 resources +Skipped (ICU): 3 resources +Failed: 0 resources +``` + +**Verbose mode (`--verbose`):** + +``` +[batch 1/9] translated: 5, skipped: 0, failed: 0 +[batch 2/9] translated: 10, skipped: 0, failed: 0 +... +``` + +### API + +Bulk locale translation is exposed as an async job because large collections can take tens of seconds to translate. The workflow is: + +1. **Start the job** — `POST` to receive a `202 Accepted` response with a `jobId`. +2. **Poll for status** — `GET` with the `jobId` every 2–5 seconds until the status is `completed` or `failed`. + +See the [API reference](./api.md) for full endpoint documentation. + +### Throttling + +The `batchSize` and `delayMs` config fields control how aggressively the bulk operation calls the translation provider: + +- **`batchSize`** — how many resources are sent in each API call. Larger batches are faster but increase the risk of hitting per-request quotas. +- **`delayMs`** — how long to wait between batches. A non-zero delay smooths out rate-limit exposure over time. + +**Recommended settings:** + +| Tier | `batchSize` | `delayMs` | +|---|---|---| +| Free tier | `5` | `1000` | +| Paid tier | `50` | `0` | + +Start with the free-tier defaults and increase `batchSize` once you have confirmed your quota headroom. + ## Error Handling The translation system uses typed `TranslationError` instances with error codes: diff --git a/docs/cli.md b/docs/cli.md index 2f3aa13b..0291bed8 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -409,6 +409,79 @@ lingo-tracker edit-resource \ --- +### translate-locale + +Auto-translate all `new` and `stale` resources in a collection for a single target locale. Requires auto-translation to be enabled in `.lingo-tracker.json`. + +**Usage:** + +```bash +lingo-tracker translate-locale [options] +``` + +**Options:** + +- `--collection ` - Collection name (prompted if not provided) +- `--locale ` - Target locale to translate (prompted if not provided) +- `--verbose` - Show per-batch progress (default: summary only) + +**Interactive mode:** + +When running in a TTY environment without `--collection` or `--locale`, the command prompts for the missing values. + +**Non-interactive mode:** + +Both `--collection` and `--locale` are required. The command exits with a non-zero code if either is missing. + +**Examples:** + +Interactive mode (prompts for collection and locale): +```bash +lingo-tracker translate-locale +``` + +Non-interactive mode: +```bash +lingo-tracker translate-locale \ + --collection Main \ + --locale fr +``` + +With verbose progress: +```bash +lingo-tracker translate-locale \ + --collection Main \ + --locale fr \ + --verbose +``` + +**Output (summary mode):** + +``` +Translating locale 'fr' in collection 'playground'... +Done. + +Translated: 45 resources +Skipped (ICU): 3 resources +Failed: 0 resources +``` + +**Output (verbose mode):** + +``` +[batch 1/9] translated: 5, skipped: 0, failed: 0 +[batch 2/9] translated: 10, skipped: 0, failed: 0 +... +``` + +**Notes:** +- Only resources with status `new` or `stale` are translated; `translated` and `verified` resources are left unchanged +- Resources whose base value uses complex ICU syntax are skipped and reported in the "Skipped (ICU)" count +- Throttling is controlled by `batchSize` and `delayMs` in the `translation` config block; see [Auto-Translation](./auto-translation.md) for recommended settings +- Requires `translation.enabled: true` in `.lingo-tracker.json` + +--- + ### move Move or rename translation resources. Supports moving single resources as well as bulk moves using wildcard patterns. diff --git a/libs/core/src/config/translation-config.ts b/libs/core/src/config/translation-config.ts index 83369b22..5fb27a52 100644 --- a/libs/core/src/config/translation-config.ts +++ b/libs/core/src/config/translation-config.ts @@ -7,4 +7,8 @@ export interface TranslationConfig { readonly enabled: boolean; readonly provider: string; readonly apiKeyEnv: string; + /** Number of resources to send per API batch when translating a full locale. Defaults to 5. */ + readonly batchSize?: number; + /** Milliseconds to wait between batches to avoid rate-limit errors. Defaults to 1000. */ + readonly delayMs?: number; } diff --git a/libs/core/src/lib/translation/index.ts b/libs/core/src/lib/translation/index.ts index f6ad4b6a..c0065e6c 100644 --- a/libs/core/src/lib/translation/index.ts +++ b/libs/core/src/lib/translation/index.ts @@ -17,3 +17,5 @@ export { autoTranslateResource } from './auto-translate-resources'; export type { AutoTranslateParams, AutoTranslatedEntry, AutoTranslateResult } from './auto-translate-resources'; export { translateExistingResource } from './translate-existing-resource'; export type { TranslateExistingResourceOptions, TranslateExistingResourceResult } from './translate-existing-resource'; +export { translateLocale } from './translate-locale'; +export type { TranslateLocaleParams, TranslateLocaleProgress, TranslateLocaleResult } from './translate-locale'; diff --git a/libs/core/src/lib/translation/translate-locale.spec.ts b/libs/core/src/lib/translation/translate-locale.spec.ts new file mode 100644 index 00000000..c37f1229 --- /dev/null +++ b/libs/core/src/lib/translation/translate-locale.spec.ts @@ -0,0 +1,422 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { TranslationError } from './translation-provider'; +import type { TranslationConfig } from '../../config/translation-config'; +import type { TranslateTextResult } from './translation-orchestrator'; +import type { ResourceTreeNode } from '../resource/load-resource-tree'; + +// --------------------------------------------------------------------------- +// Module mocks — must be declared before any imports that reference them +// --------------------------------------------------------------------------- + +vi.mock('../resource/load-resource-tree'); +vi.mock('../resource/extract-subtree'); +vi.mock('../file-io/json-file-operations'); +vi.mock('./translation-provider-factory'); +vi.mock('./translation-orchestrator'); + +import { loadResourceTree } from '../resource/load-resource-tree'; +import { extractResourcesRecursively } from '../resource/extract-subtree'; +import { readResourceEntries, readTrackerMetadata, writeJsonFile } from '../file-io/json-file-operations'; +import { createTranslationProvider } from './translation-provider-factory'; +import { TranslationOrchestrator } from './translation-orchestrator'; +import { translateLocale } from './translate-locale'; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +const EMPTY_TREE: ResourceTreeNode = { + folderPathSegments: [], + resources: [], + children: [], +}; + +const BASE_CONFIG: TranslationConfig = { + enabled: true, + provider: 'google-translate', + apiKeyEnv: 'GOOGLE_TRANSLATE_API_KEY', + batchSize: 5, + delayMs: 0, // no delay in tests +}; + +function translated(value: string): TranslateTextResult { + return { kind: 'translated', value }; +} + +function skipped(value: string): TranslateTextResult { + return { kind: 'skipped', value }; +} + +function makeResource( + key: string, + source: string, + targetLocaleStatus?: 'new' | 'stale' | 'translated' | 'verified', + targetLocale = 'fr', +) { + return { + key, + source, + translations: {}, + metadata: targetLocaleStatus + ? { + [targetLocale]: { checksum: 'abc', status: targetLocaleStatus }, + en: { checksum: '123' }, + } + : { en: { checksum: '123' } }, + }; +} + +// --------------------------------------------------------------------------- +// Setup +// --------------------------------------------------------------------------- + +const mockTranslateBatchForLocale = vi.fn(); + +beforeEach(() => { + vi.clearAllMocks(); + + process.env.GOOGLE_TRANSLATE_API_KEY = 'test-api-key'; + + vi.mocked(loadResourceTree).mockReturnValue(EMPTY_TREE); + vi.mocked(extractResourcesRecursively).mockReturnValue([]); + + vi.mocked(createTranslationProvider).mockReturnValue({ + translate: vi.fn(), + getCapabilities: vi.fn(), + }); + + vi.mocked(TranslationOrchestrator).mockImplementation( + () => + ({ + translateBatchForLocale: mockTranslateBatchForLocale, + }) as unknown as TranslationOrchestrator, + ); + + // Default mocks return generic entries so any entryKey resolves correctly. + vi.mocked(readResourceEntries).mockReturnValue({ + ok: { source: 'OK' }, + cancel: { source: 'Cancel' }, + a: { source: 'A' }, + b: { source: 'B' }, + c: { source: 'C' }, + key0: { source: 'Text 0' }, + key1: { source: 'Text 1' }, + key2: { source: 'Text 2' }, + key3: { source: 'Text 3' }, + key4: { source: 'Text 4' }, + key5: { source: 'Text 5' }, + } as ReturnType); + vi.mocked(readTrackerMetadata).mockReturnValue({ + ok: { en: { checksum: '123' } }, + cancel: { en: { checksum: '456' } }, + a: { en: { checksum: '111' } }, + b: { en: { checksum: '222' } }, + c: { en: { checksum: '333' } }, + }); + vi.mocked(writeJsonFile).mockImplementation(() => undefined); +}); + +afterEach(() => { + delete process.env.GOOGLE_TRANSLATE_API_KEY; +}); + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe('translateLocale', () => { + const defaultParams = { + translationsFolder: 'src/i18n', + translationConfig: BASE_CONFIG, + targetLocale: 'fr', + baseLocale: 'en', + allLocales: ['en', 'fr'], + cwd: '/project', + }; + + // ------------------------------------------------------------------------- + // Early exit — nothing to translate + // ------------------------------------------------------------------------- + + describe('early exit when nothing needs translating', () => { + it('returns zeroed result when there are no resources at all', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([]); + const onProgress = vi.fn(); + + const result = await translateLocale({ ...defaultParams, onProgress }); + + expect(result).toEqual({ + totalResources: 0, + translatedCount: 0, + failedCount: 0, + skippedCount: 0, + failures: [], + skippedKeys: [], + }); + expect(mockTranslateBatchForLocale).not.toHaveBeenCalled(); + expect(onProgress).not.toHaveBeenCalled(); + }); + + it('returns zeroed result when all resources are already translated', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([ + makeResource('apps.ok', 'OK', 'translated'), + makeResource('apps.cancel', 'Cancel', 'verified'), + ]); + const onProgress = vi.fn(); + + const result = await translateLocale({ ...defaultParams, onProgress }); + + expect(result.totalResources).toBe(0); + expect(mockTranslateBatchForLocale).not.toHaveBeenCalled(); + expect(onProgress).not.toHaveBeenCalled(); + }); + + it('skips resources with verified status', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('apps.ok', 'OK', 'verified')]); + const onProgress = vi.fn(); + + const result = await translateLocale({ ...defaultParams, onProgress }); + + expect(result.totalResources).toBe(0); + expect(mockTranslateBatchForLocale).not.toHaveBeenCalled(); + expect(onProgress).not.toHaveBeenCalled(); + }); + }); + + // ------------------------------------------------------------------------- + // Status filtering + // ------------------------------------------------------------------------- + + describe('status filtering', () => { + it('translates resources with new status', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'new')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr')]); + + const result = await translateLocale(defaultParams); + + expect(result.totalResources).toBe(1); + expect(result.translatedCount).toBe(1); + }); + + it('translates resources with stale status', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'stale')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr')]); + + const result = await translateLocale(defaultParams); + + expect(result.totalResources).toBe(1); + expect(result.translatedCount).toBe(1); + }); + + it('translates resources with no metadata for the target locale', async () => { + // makeResource without a status means no 'fr' metadata entry. + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr')]); + + const result = await translateLocale(defaultParams); + + expect(result.totalResources).toBe(1); + expect(result.translatedCount).toBe(1); + }); + + it('does not translate resources with translated status', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'translated')]); + + const result = await translateLocale(defaultParams); + + expect(result.totalResources).toBe(0); + expect(mockTranslateBatchForLocale).not.toHaveBeenCalled(); + }); + }); + + // ------------------------------------------------------------------------- + // Batching + // ------------------------------------------------------------------------- + + describe('batch processing', () => { + it('calls onProgress for each batch', async () => { + const resources = [makeResource('a', 'A', 'new'), makeResource('b', 'B', 'new'), makeResource('c', 'C', 'new')]; + vi.mocked(extractResourcesRecursively).mockReturnValue(resources); + + mockTranslateBatchForLocale + .mockResolvedValueOnce([translated('A-fr'), translated('B-fr')]) + .mockResolvedValueOnce([translated('C-fr')]); + + const progressEvents: number[] = []; + await translateLocale({ + ...defaultParams, + translationConfig: { ...BASE_CONFIG, batchSize: 2, delayMs: 0 }, + onProgress: (p) => progressEvents.push(p.currentBatch), + }); + + expect(progressEvents).toEqual([1, 2]); + }); + + it('respects batchSize when calling the orchestrator', async () => { + const resources = Array.from({ length: 6 }, (_, i) => makeResource(`key${i}`, `Text ${i}`, 'new')); + vi.mocked(extractResourcesRecursively).mockReturnValue(resources); + + mockTranslateBatchForLocale.mockResolvedValue([translated('t1'), translated('t2'), translated('t3')]); + + await translateLocale({ + ...defaultParams, + translationConfig: { ...BASE_CONFIG, batchSize: 3, delayMs: 0 }, + }); + + expect(mockTranslateBatchForLocale).toHaveBeenCalledTimes(2); + }); + + it('reports accurate progress counts in onProgress', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'new')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr')]); + + let capturedProgress: Parameters>[0] | undefined; + + await translateLocale({ + ...defaultParams, + onProgress: (p) => { + capturedProgress = p; + }, + }); + + expect(capturedProgress).toMatchObject({ + totalResources: 1, + translatedCount: 1, + failedCount: 0, + skippedCount: 0, + currentBatch: 1, + totalBatches: 1, + }); + }); + }); + + // ------------------------------------------------------------------------- + // ICU skipping + // ------------------------------------------------------------------------- + + describe('ICU skipping', () => { + it('adds skipped-ICU resource keys to skippedKeys', async () => { + const icuSource = '{count, plural, one {# item} other {# items}}'; + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', icuSource, 'new')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([skipped(icuSource)]); + + const result = await translateLocale(defaultParams); + + expect(result.skippedKeys).toContain('ok'); + expect(result.skippedCount).toBe(1); + expect(result.translatedCount).toBe(0); + }); + + it('does not call writeJsonFile for skipped resources', async () => { + const icuSource = '{count, plural, one {# item} other {# items}}'; + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', icuSource, 'new')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([skipped(icuSource)]); + + await translateLocale(defaultParams); + + expect(writeJsonFile).not.toHaveBeenCalled(); + }); + + it('skips writing and increments skippedCount when entryKey is missing from disk entries', async () => { + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'new')]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr')]); + + // Return an empty object — the 'ok' entry is absent from disk + vi.mocked(readResourceEntries).mockReturnValue({} as ReturnType); + + const result = await translateLocale(defaultParams); + + expect(result.skippedCount).toBe(1); + expect(result.translatedCount).toBe(0); + expect(writeJsonFile).not.toHaveBeenCalled(); + }); + }); + + // ------------------------------------------------------------------------- + // File I/O + // ------------------------------------------------------------------------- + + describe('file I/O', () => { + it('writes entries and meta files once per unique folder', async () => { + // Both resources share the same root folder — grouped write produces 2 files. + vi.mocked(extractResourcesRecursively).mockReturnValue([ + makeResource('ok', 'OK', 'new'), + makeResource('cancel', 'Cancel', 'new'), + ]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr'), translated('Annuler')]); + + await translateLocale(defaultParams); + + // Two resources in the same folder → one read-modify-write cycle → 2 file writes. + expect(writeJsonFile).toHaveBeenCalledTimes(2); + }); + + it('writes entries and meta files once per unique folder across multiple folders', async () => { + // Resources in two different folders each get their own write cycle. + vi.mocked(extractResourcesRecursively).mockReturnValue([ + makeResource('folderA.ok', 'OK', 'new'), + makeResource('folderB.cancel', 'Cancel', 'new'), + ]); + mockTranslateBatchForLocale.mockResolvedValueOnce([translated('OK-fr'), translated('Annuler')]); + + await translateLocale(defaultParams); + + // Two distinct folders → 2 read-modify-write cycles → 4 file writes. + expect(writeJsonFile).toHaveBeenCalledTimes(4); + }); + }); + + // ------------------------------------------------------------------------- + // Error handling + // ------------------------------------------------------------------------- + + describe('error handling', () => { + it('throws TranslationError with MISSING_API_KEY when the env var is absent', async () => { + delete process.env.GOOGLE_TRANSLATE_API_KEY; + vi.mocked(extractResourcesRecursively).mockReturnValue([makeResource('ok', 'OK', 'new')]); + + await expect(translateLocale(defaultParams)).rejects.toMatchObject({ + code: 'MISSING_API_KEY', + retryable: false, + }); + }); + + it('records all resources in a failed batch as failures and continues', async () => { + const resources = [makeResource('a', 'A', 'new'), makeResource('b', 'B', 'new'), makeResource('c', 'C', 'new')]; + vi.mocked(extractResourcesRecursively).mockReturnValue(resources); + + const providerError = new TranslationError('quota exceeded', 'RATE_LIMIT', true); + + mockTranslateBatchForLocale + .mockRejectedValueOnce(providerError) // batch 1 fails + .mockResolvedValueOnce([translated('C-fr')]); // batch 2 succeeds + + const result = await translateLocale({ + ...defaultParams, + translationConfig: { ...BASE_CONFIG, batchSize: 2, delayMs: 0 }, + }); + + expect(result.failedCount).toBe(2); + expect(result.translatedCount).toBe(1); + expect(result.failures).toHaveLength(2); + expect(result.failures[0].key).toBe('a'); + expect(result.failures[1].key).toBe('b'); + }); + + it('continues processing subsequent batches after a batch failure', async () => { + const resources = [makeResource('a', 'A', 'new'), makeResource('b', 'B', 'new')]; + vi.mocked(extractResourcesRecursively).mockReturnValue(resources); + + const providerError = new TranslationError('fail', 'SERVER_ERROR', true); + mockTranslateBatchForLocale.mockRejectedValueOnce(providerError).mockResolvedValueOnce([translated('B-fr')]); + + const result = await translateLocale({ + ...defaultParams, + translationConfig: { ...BASE_CONFIG, batchSize: 1, delayMs: 0 }, + }); + + expect(result.failedCount).toBe(1); + expect(result.translatedCount).toBe(1); + }); + }); +}); diff --git a/libs/core/src/lib/translation/translate-locale.ts b/libs/core/src/lib/translation/translate-locale.ts new file mode 100644 index 00000000..991a0804 --- /dev/null +++ b/libs/core/src/lib/translation/translate-locale.ts @@ -0,0 +1,305 @@ +/** + * Bulk locale translation. + * + * Translates all `new` and `stale` resources in a translations folder for a + * single target locale. Resources are processed in batches so that the number + * of API calls is bounded regardless of how many resources exist. + * + * Complex ICU resources (plural, select, etc.) are automatically skipped by + * the underlying {@link TranslationOrchestrator} and reported in `skippedKeys`. + * + * @module translate-locale + */ + +import * as path from 'node:path'; +import { loadResourceTree } from '../resource/load-resource-tree'; +import { extractResourcesRecursively } from '../resource/extract-subtree'; +import { readResourceEntries, readTrackerMetadata, writeJsonFile } from '../file-io/json-file-operations'; +import { calculateChecksum } from '../../resource/checksum'; +import { createTranslationProvider } from './translation-provider-factory'; +import { TranslationOrchestrator } from './translation-orchestrator'; +import { TranslationError } from './translation-provider'; +import { RESOURCE_ENTRIES_FILENAME, TRACKER_META_FILENAME } from '../../constants'; +import type { TranslationConfig } from '../../config/translation-config'; +import type { ResourceTreeEntry } from '../resource/load-resource-tree'; + +// --------------------------------------------------------------------------- +// Public interfaces +// --------------------------------------------------------------------------- + +export interface TranslateLocaleParams { + readonly translationsFolder: string; + readonly translationConfig: TranslationConfig; + readonly targetLocale: string; + readonly baseLocale: string; + readonly allLocales: string[]; + readonly cwd?: string; + readonly onProgress?: (progress: TranslateLocaleProgress) => void; +} + +export interface TranslateLocaleProgress { + /** + * Number of resources eligible for translation (status `new`, `stale`, or missing metadata + * for the target locale). Does NOT represent the total collection size. + * Returns 0 when no resources needed translation. + */ + readonly totalResources: number; + readonly translatedCount: number; + readonly failedCount: number; + readonly skippedCount: number; + readonly currentBatch: number; + readonly totalBatches: number; +} + +export interface TranslateLocaleResult { + /** + * Number of resources eligible for translation (status `new`, `stale`, or missing metadata + * for the target locale). Does NOT represent the total collection size. + * Returns 0 when no resources needed translation. + */ + readonly totalResources: number; + readonly translatedCount: number; + readonly failedCount: number; + readonly skippedCount: number; + readonly failures: ReadonlyArray<{ key: string; error: string }>; + readonly skippedKeys: string[]; +} + +// --------------------------------------------------------------------------- +// Internal helpers +// --------------------------------------------------------------------------- + +function sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +/** + * Returns true when a resource needs translation for `targetLocale`. + * A resource needs translation when its status is `new`, `stale`, + * or when there is no metadata at all for the locale. + */ +function needsTranslation(resource: ResourceTreeEntry, targetLocale: string): boolean { + const meta = resource.metadata[targetLocale]; + if (!meta) return true; + return meta.status === 'new' || meta.status === 'stale'; +} + +/** + * Converts a dot-delimited composite key (e.g. `apps.common.buttons.ok`) + * into the filesystem folder path (e.g. `apps/common/buttons`) and the + * entry key (`ok`). + */ +function resolveResourcePath( + compositeKey: string, + absoluteTranslationsFolder: string, +): { folderPath: string; entryKey: string } { + const segments = compositeKey.split('.'); + const entryKey = segments[segments.length - 1]; + const folderSegments = segments.slice(0, -1); + const folderPath = + folderSegments.length > 0 ? path.join(absoluteTranslationsFolder, ...folderSegments) : absoluteTranslationsFolder; + + return { folderPath, entryKey }; +} + +// --------------------------------------------------------------------------- +// Internal types +// --------------------------------------------------------------------------- + +interface FolderWriteEntry { + readonly entryKey: string; + readonly result: { kind: string; value: string }; + readonly source: string; + readonly resourceKey: string; +} + +// --------------------------------------------------------------------------- +// Internal helpers (continued) +// --------------------------------------------------------------------------- + +/** + * Reads the entries and metadata files for a folder once, applies all + * translated resources for that folder, and writes both files back once. + * Resources whose entry key is missing from disk are silently skipped. + * + * @returns How many entries were actually written (missing entries are 0). + */ +function writeTranslatedResources( + folderPath: string, + entries: readonly FolderWriteEntry[], + targetLocale: string, + baseLocale: string, +): { + writtenKeys: string[]; + skippedKeys: string[]; +} { + const entriesFilePath = path.join(folderPath, RESOURCE_ENTRIES_FILENAME); + const metaFilePath = path.join(folderPath, TRACKER_META_FILENAME); + + const resourceEntries = readResourceEntries(entriesFilePath, {}); + const trackerMeta = readTrackerMetadata(metaFilePath, {}); + + const writtenKeys: string[] = []; + const skippedKeys: string[] = []; + + for (const entry of entries) { + if (!resourceEntries[entry.entryKey]) { + skippedKeys.push(entry.resourceKey); + continue; + } + + (resourceEntries[entry.entryKey] as Record)[targetLocale] = entry.result.value; + + const baseChecksum = trackerMeta[entry.entryKey]?.[baseLocale]?.checksum ?? calculateChecksum(entry.source); + trackerMeta[entry.entryKey] = { + ...trackerMeta[entry.entryKey], + [targetLocale]: { + checksum: calculateChecksum(entry.result.value), + baseChecksum, + status: 'translated', + }, + }; + + writtenKeys.push(entry.resourceKey); + } + + if (writtenKeys.length > 0) { + writeJsonFile({ filePath: entriesFilePath, data: resourceEntries }); + writeJsonFile({ filePath: metaFilePath, data: trackerMeta }); + } + + return { writtenKeys, skippedKeys }; +} + +// --------------------------------------------------------------------------- +// Main export +// --------------------------------------------------------------------------- + +/** + * Translates all `new` and `stale` resources in `translationsFolder` for the + * given `targetLocale`, writing the results back to disk. + * + * Resources are processed in batches of `translationConfig.batchSize` (default 5). + * A configurable delay (`translationConfig.delayMs`, default 1000 ms) is inserted + * between batches to avoid hitting provider rate limits. + * + * Complex ICU messages (plural, select, etc.) are silently skipped and their keys + * are included in `TranslateLocaleResult.skippedKeys`. Provider-level errors mark + * all resources in the failing batch as failed but do not abort the run. + * + * @param params - Translation parameters. + * @returns A summary of how many resources were translated, skipped, or failed. + * @throws {TranslationError} with code `MISSING_API_KEY` when the env var is absent. + */ +export async function translateLocale(params: TranslateLocaleParams): Promise { + const { translationConfig, targetLocale, baseLocale, cwd = process.cwd(), onProgress } = params; + + const absoluteFolder = path.resolve(cwd, params.translationsFolder); + + // Load the entire resource tree. + const tree = loadResourceTree({ translationsFolder: absoluteFolder, depth: 999, cwd }); + const allResources = extractResourcesRecursively(tree); + + // Filter to only those that need translating for the target locale. + const resourcesToTranslate = allResources.filter((resource) => needsTranslation(resource, targetLocale)); + + if (resourcesToTranslate.length === 0) { + return { + totalResources: 0, + translatedCount: 0, + failedCount: 0, + skippedCount: 0, + failures: [], + skippedKeys: [], + }; + } + + // Resolve the API key once — fail fast before doing any I/O. + const apiKey = process.env[translationConfig.apiKeyEnv]; + if (!apiKey) { + throw new TranslationError( + `Translation API key not found. Set the ${translationConfig.apiKeyEnv} environment variable.`, + 'MISSING_API_KEY', + false, + ); + } + + const provider = createTranslationProvider(translationConfig.provider, apiKey); + const orchestrator = new TranslationOrchestrator(provider); + + const batchSize = translationConfig.batchSize ?? 5; + const delayMs = translationConfig.delayMs ?? 1000; + + const totalResources = resourcesToTranslate.length; + const totalBatches = Math.ceil(totalResources / batchSize); + + let translatedCount = 0; + let failedCount = 0; + let skippedCount = 0; + const failures: Array<{ key: string; error: string }> = []; + const skippedKeys: string[] = []; + + for (let batchIndex = 0; batchIndex < totalBatches; batchIndex++) { + const batchStart = batchIndex * batchSize; + const batch = resourcesToTranslate.slice(batchStart, batchStart + batchSize); + const sourceTexts = batch.map((resource) => resource.source); + + try { + const batchResults = await orchestrator.translateBatchForLocale(sourceTexts, baseLocale, targetLocale); + + // Group translated results by folder so each folder's files are read and + // written only once, even when multiple resources share the same folder. + const byFolder = new Map(); + + for (let i = 0; i < batch.length; i++) { + const resource = batch[i]; + const result = batchResults[i]; + + if (result.kind === 'skipped') { + skippedKeys.push(resource.key); + skippedCount++; + continue; + } + + const { folderPath, entryKey } = resolveResourcePath(resource.key, absoluteFolder); + const folderEntries = byFolder.get(folderPath) ?? []; + folderEntries.push({ entryKey, result, source: resource.source, resourceKey: resource.key }); + byFolder.set(folderPath, folderEntries); + } + + for (const [folderPath, folderEntries] of byFolder) { + const { writtenKeys, skippedKeys: folderSkippedKeys } = writeTranslatedResources( + folderPath, + folderEntries, + targetLocale, + baseLocale, + ); + translatedCount += writtenKeys.length; + skippedCount += folderSkippedKeys.length; + skippedKeys.push(...folderSkippedKeys); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + for (const resource of batch) { + failures.push({ key: resource.key, error: errorMessage }); + failedCount++; + } + } + + onProgress?.({ + totalResources, + translatedCount, + failedCount, + skippedCount, + currentBatch: batchIndex + 1, + totalBatches, + }); + + // Pause between batches (skip after the last one). + if (batchIndex < totalBatches - 1) { + await sleep(delayMs); + } + } + + return { totalResources, translatedCount, failedCount, skippedCount, failures, skippedKeys }; +} diff --git a/libs/core/src/lib/translation/translation-orchestrator.spec.ts b/libs/core/src/lib/translation/translation-orchestrator.spec.ts index 5929e79e..e01a8404 100644 --- a/libs/core/src/lib/translation/translation-orchestrator.spec.ts +++ b/libs/core/src/lib/translation/translation-orchestrator.spec.ts @@ -306,4 +306,113 @@ describe('TranslationOrchestrator', () => { expect(provider.translate).toHaveBeenCalledOnce(); }); }); + + // ------------------------------------------------------------------------- + // translateBatchForLocale + // ------------------------------------------------------------------------- + + describe('translateBatchForLocale', () => { + it('returns an empty array for an empty input without calling the provider', async () => { + const results = await orchestrator.translateBatchForLocale([], 'en', 'de'); + + expect(results).toEqual([]); + expect(provider.translate).not.toHaveBeenCalled(); + }); + + it('returns results in the same order as the input texts', async () => { + provider.translate.mockResolvedValueOnce([makeResult('Hallo'), makeResult('Tschüss')]); + + const results = await orchestrator.translateBatchForLocale(['Hello', 'Goodbye'], 'en', 'de'); + + expect(results[0]).toEqual({ kind: 'translated', value: 'Hallo' }); + expect(results[1]).toEqual({ kind: 'translated', value: 'Tschüss' }); + }); + + it('skips complex ICU texts immediately without including them in the provider call', async () => { + const icuText = '{count, plural, one {# item} other {# items}}'; + + const results = await orchestrator.translateBatchForLocale([icuText], 'en', 'de'); + + expect(results).toEqual([{ kind: 'skipped', value: icuText }]); + expect(provider.translate).not.toHaveBeenCalled(); + }); + + it('sends all plain texts to the provider in a single call', async () => { + provider.translate.mockResolvedValueOnce([makeResult('Hallo'), makeResult('Welt')]); + + await orchestrator.translateBatchForLocale(['Hello', 'World'], 'en', 'de'); + + expect(provider.translate).toHaveBeenCalledOnce(); + expect(provider.translate).toHaveBeenCalledWith([ + { text: 'Hello', sourceLocale: 'en', targetLocale: 'de' }, + { text: 'World', sourceLocale: 'en', targetLocale: 'de' }, + ]); + }); + + it('protects and restores placeholders for simple-placeholder texts', async () => { + provider.translate.mockImplementation(async (requests: TranslateRequest[]) => { + // Simulate translation of surrounding text while leaving span markers intact. + return requests.map((req) => makeResult(req.text.replace('Hello', 'Hallo'))); + }); + + const results = await orchestrator.translateBatchForLocale(['Hello {name}'], 'en', 'de'); + + expect(results[0].kind).toBe('translated-with-placeholders'); + expect(results[0].value).toBe('Hallo {name}'); + }); + + it('falls back to skipped when the provider drops a placeholder marker', async () => { + provider.translate.mockResolvedValueOnce([makeResult('Hallo')]); + + const results = await orchestrator.translateBatchForLocale(['Hello {name}'], 'en', 'de'); + + expect(results[0]).toEqual({ kind: 'skipped', value: 'Hello {name}' }); + }); + + it('calls the provider exactly once for a mixed batch of plain, simple-placeholder, and complex ICU texts', async () => { + const complexIcu = '{count, plural, one {# item} other {# items}}'; + + // Provider receives: plain text + protected simple-placeholder text (complex ICU is excluded). + provider.translate.mockImplementation(async (requests: TranslateRequest[]) => { + return requests.map((req) => makeResult(req.text.replace('Hello', 'Hallo'))); + }); + + const results = await orchestrator.translateBatchForLocale(['Hello', 'Hello {name}', complexIcu], 'en', 'de'); + + expect(provider.translate).toHaveBeenCalledOnce(); + expect(results[0]).toEqual({ kind: 'translated', value: 'Hallo' }); + expect(results[1].kind).toBe('translated-with-placeholders'); + expect(results[1].value).toBe('Hallo {name}'); + expect(results[2]).toEqual({ kind: 'skipped', value: complexIcu }); + }); + + it('returns kind: skipped for all items and never calls the provider when every item is complex ICU', async () => { + const icuPlural = '{count, plural, one {# item} other {# items}}'; + const icuSelect = '{gender, select, male {he} female {she} other {they}}'; + const icuMixed = 'Hello {name}, {count, plural, one {# item} other {# items}}'; + + const results = await orchestrator.translateBatchForLocale([icuPlural, icuSelect, icuMixed], 'en', 'de'); + + expect(provider.translate).not.toHaveBeenCalled(); + expect(results).toHaveLength(3); + expect(results[0]).toEqual({ kind: 'skipped', value: icuPlural }); + expect(results[1]).toEqual({ kind: 'skipped', value: icuSelect }); + expect(results[2]).toEqual({ kind: 'skipped', value: icuMixed }); + }); + + it('preserves order when complex ICU items are interspersed with translatable items', async () => { + const complexIcu = '{gender, select, male {he} female {she} other {they}}'; + + provider.translate.mockResolvedValueOnce([makeResult('Hallo'), makeResult('Tschüss')]); + + const results = await orchestrator.translateBatchForLocale(['Hello', complexIcu, 'Goodbye'], 'en', 'de'); + + expect(results[0]).toEqual({ kind: 'translated', value: 'Hallo' }); + expect(results[1]).toEqual({ kind: 'skipped', value: complexIcu }); + expect(results[2]).toEqual({ kind: 'translated', value: 'Tschüss' }); + // Only two texts were sent to the provider (Hello and Goodbye, not the ICU). + expect(provider.translate).toHaveBeenCalledOnce(); + expect(provider.translate.mock.calls[0][0]).toHaveLength(2); + }); + }); }); diff --git a/libs/core/src/lib/translation/translation-orchestrator.ts b/libs/core/src/lib/translation/translation-orchestrator.ts index b7442518..fdb8c328 100644 --- a/libs/core/src/lib/translation/translation-orchestrator.ts +++ b/libs/core/src/lib/translation/translation-orchestrator.ts @@ -123,6 +123,97 @@ export class TranslationOrchestrator { return results; } + /** + * Translates multiple texts for a single target locale in one provider call. + * + * This is the key optimization for bulk locale translation: rather than making + * one provider call per resource, all translatable texts are collected and sent + * in a single call (the provider handles its own internal chunking at 128 items). + * + * Complex ICU texts are classified and skipped immediately without any API call. + * Simple-placeholder texts have their placeholders protected before sending and + * restored from the translated result; a marker mismatch falls back to `kind: 'skipped'`. + * + * Results are returned in the same order as the input `texts` array. + * + * @param texts - Array of source strings to translate. + * @param sourceLocale - BCP 47 locale code of the source texts. + * @param targetLocale - BCP 47 locale code to translate into. + * @returns Results in the same order as the input. + * @throws {TranslationError} for any provider-level failure. + */ + async translateBatchForLocale( + texts: string[], + sourceLocale: string, + targetLocale: string, + ): Promise { + if (texts.length === 0) { + return []; + } + + type TextKind = 'plain' | 'simple-placeholders' | 'complex-icu'; + const classifications: TextKind[] = texts.map((text) => classifyICUContent(text)); + + // Collect translatable texts (plain + protected simple-placeholder) in one flat array, + // preserving an index so we can map results back to the original input positions. + const providerInputs: Array<{ text: string; originalIndex: number }> = []; + + // For simple-placeholder items we need the protect result to restore later. + const placeholderMaps = new Map['placeholders']>(); + + for (let i = 0; i < texts.length; i++) { + const kind = classifications[i]; + if (kind === 'complex-icu') continue; + + if (kind === 'plain') { + providerInputs.push({ text: texts[i], originalIndex: i }); + } else { + // simple-placeholders + const { protectedText, placeholders } = protectPlaceholders(texts[i]); + placeholderMaps.set(i, placeholders); + providerInputs.push({ text: protectedText, originalIndex: i }); + } + } + + let providerResults: Array<{ translatedText: string }> = []; + if (providerInputs.length > 0) { + providerResults = await this.#provider.translate( + providerInputs.map(({ text }) => ({ text, sourceLocale, targetLocale })), + ); + } + + const results: TranslateTextResult[] = new Array(texts.length); + + // Fill complex-ICU skips first. + for (let i = 0; i < texts.length; i++) { + if (classifications[i] === 'complex-icu') { + results[i] = { kind: 'skipped', value: texts[i] }; + } + } + + // Fill translated results. + for (let providerIdx = 0; providerIdx < providerInputs.length; providerIdx++) { + const { originalIndex } = providerInputs[providerIdx]; + const translatedText = providerResults[providerIdx].translatedText; + const kind = classifications[originalIndex]; + + if (kind === 'plain') { + results[originalIndex] = { kind: 'translated', value: translatedText }; + } else { + // simple-placeholders — restore markers + const placeholders = placeholderMaps.get(originalIndex)!; + const restoreResult = restorePlaceholders(translatedText, placeholders); + if (!restoreResult.success) { + results[originalIndex] = { kind: 'skipped', value: texts[originalIndex] }; + } else { + results[originalIndex] = { kind: 'translated-with-placeholders', value: restoreResult.value }; + } + } + } + + return results; + } + /** * Protects simple placeholders with markers, translates the protected text, * then restores the original placeholder syntax. diff --git a/libs/data-transfer/src/index.ts b/libs/data-transfer/src/index.ts index 0593f777..64285620 100644 --- a/libs/data-transfer/src/index.ts +++ b/libs/data-transfer/src/index.ts @@ -22,3 +22,4 @@ export * from './lib/tree-status-response.dto'; export * from './lib/translation-config.dto'; export * from './lib/translate-resource.dto'; export * from './lib/translate-resource-response.dto'; +export * from './lib/translate-locale.dto'; diff --git a/libs/data-transfer/src/lib/translate-locale.dto.ts b/libs/data-transfer/src/lib/translate-locale.dto.ts new file mode 100644 index 00000000..3bd0dcfc --- /dev/null +++ b/libs/data-transfer/src/lib/translate-locale.dto.ts @@ -0,0 +1,18 @@ +export interface TranslateLocaleRequestDto { + readonly locale: string; +} + +export interface TranslateLocaleJobDto { + readonly jobId: string; + readonly collectionName: string; + readonly targetLocale: string; + readonly status: 'pending' | 'running' | 'completed' | 'failed'; + readonly totalResources: number; + readonly translatedCount: number; + readonly failedCount: number; + readonly skippedCount: number; + readonly failures?: ReadonlyArray<{ key: string; error: string }>; + readonly skippedKeys?: readonly string[]; + readonly startedAt?: string; + readonly completedAt?: string; +} diff --git a/libs/data-transfer/src/lib/translation-config.dto.ts b/libs/data-transfer/src/lib/translation-config.dto.ts index d8b83fb1..43306c1a 100644 --- a/libs/data-transfer/src/lib/translation-config.dto.ts +++ b/libs/data-transfer/src/lib/translation-config.dto.ts @@ -2,4 +2,8 @@ export interface TranslationConfigDto { readonly enabled: boolean; readonly provider: string; readonly apiKeyEnv: string; + /** Number of resources to send per API batch when translating a full locale. Defaults to 5. */ + readonly batchSize?: number; + /** Milliseconds to wait between batches to avoid rate-limit errors. Defaults to 1000. */ + readonly delayMs?: number; } From 07417e7397fee8fccd78380175cc1fe250eb4201 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 17:05:55 -0700 Subject: [PATCH 04/13] feat(cli): add ability to add and remove locales --- CLAUDE.md | 6 + apps/api/src/app/app.module.ts | 5 +- .../locales/locales.controller.spec.ts | 227 ++++++++++++++++++ .../collections/locales/locales.controller.ts | 99 ++++++++ .../translation-job.service.spec.ts | 49 ++-- .../translation-job.service.ts | 9 +- apps/cli/src/commands/add-locale.spec.ts | 129 ++++++++++ apps/cli/src/commands/add-locale.ts | 51 ++++ apps/cli/src/commands/remove-locale.spec.ts | 129 ++++++++++ apps/cli/src/commands/remove-locale.ts | 62 +++++ apps/cli/src/main.ts | 20 ++ docs/api.md | 82 +++++++ docs/cli.md | 73 ++++++ .../add-locale-to-collection.spec.ts | 184 ++++++++++++++ .../add-locale-to-collection.ts | 124 ++++++++++ libs/core/src/collections-manager/index.ts | 2 + .../locale-spec-helpers.spec.ts | 17 ++ .../locale-spec-helpers.ts | 58 +++++ .../remove-locale-from-collection.spec.ts | 193 +++++++++++++++ .../remove-locale-from-collection.ts | 116 +++++++++ libs/core/src/lib/errors/error-messages.ts | 9 + .../translation/translation-orchestrator.ts | 6 +- libs/data-transfer/src/index.ts | 3 + .../src/lib/add-locale-response.dto.ts | 5 + libs/data-transfer/src/lib/add-locale.dto.ts | 3 + .../src/lib/remove-locale-response.dto.ts | 5 + 26 files changed, 1640 insertions(+), 26 deletions(-) create mode 100644 apps/api/src/app/collections/locales/locales.controller.spec.ts create mode 100644 apps/api/src/app/collections/locales/locales.controller.ts create mode 100644 apps/cli/src/commands/add-locale.spec.ts create mode 100644 apps/cli/src/commands/add-locale.ts create mode 100644 apps/cli/src/commands/remove-locale.spec.ts create mode 100644 apps/cli/src/commands/remove-locale.ts create mode 100644 libs/core/src/collections-manager/add-locale-to-collection.spec.ts create mode 100644 libs/core/src/collections-manager/add-locale-to-collection.ts create mode 100644 libs/core/src/collections-manager/locale-spec-helpers.spec.ts create mode 100644 libs/core/src/collections-manager/locale-spec-helpers.ts create mode 100644 libs/core/src/collections-manager/remove-locale-from-collection.spec.ts create mode 100644 libs/core/src/collections-manager/remove-locale-from-collection.ts create mode 100644 libs/data-transfer/src/lib/add-locale-response.dto.ts create mode 100644 libs/data-transfer/src/lib/add-locale.dto.ts create mode 100644 libs/data-transfer/src/lib/remove-locale-response.dto.ts diff --git a/CLAUDE.md b/CLAUDE.md index 324bcb92..634d4993 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -154,6 +154,12 @@ export class ExampleComponent implements OnInit { } ``` +### TypeScript Safety + +- **No non-null assertions**: Never use the `!` operator. The linter (`lint/style/noNonNullAssertion`) forbids it. + - In production code: use an explicit null-guard (`if (!x) return;` or `if (!x) throw`) before accessing the value + - In tests: use `expect(value).toBeDefined()` followed by optional chaining (`value?.property`) for subsequent assertions + ### Code Organization - **Domain Logic** (`@simoncodes-ca/domain`): Pure business logic with **zero Node.js dependencies** — importable by all apps including the browser-based Tracker UI. This is where platform-agnostic logic belongs: key validation/parsing, translation status helpers, ICU↔Transloco format conversion, validation utilities (locale, key length, duplicates, hierarchical conflicts), and shared types (`TranslationStatus`, `LocaleMetadata`). diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index ae14d91a..d4d08fc1 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -6,13 +6,14 @@ import { ConfigController } from './config/config.controller'; import { CollectionsController } from './collections/collections.controller'; import { ResourcesController } from './collections/resources/resources.controller'; import { FoldersController } from './collections/folders/folders.controller'; +import { LocalesController } from './collections/locales/locales.controller'; import { CollectionCacheService } from './cache/collection-cache.service'; import { TranslationJobService } from './translation-job/translation-job.service'; @Module({ imports: [], - controllers: [AppController, ConfigController, CollectionsController, ResourcesController, FoldersController], - providers: [AppService, ConfigService, CollectionCacheService, TranslationJobService], + controllers: [AppController, ConfigController, CollectionsController, ResourcesController, FoldersController, LocalesController], + providers: [AppService, ConfigService, CollectionCacheService, TranslationJobService, Logger], }) export class AppModule { constructor() { diff --git a/apps/api/src/app/collections/locales/locales.controller.spec.ts b/apps/api/src/app/collections/locales/locales.controller.spec.ts new file mode 100644 index 00000000..00d77856 --- /dev/null +++ b/apps/api/src/app/collections/locales/locales.controller.spec.ts @@ -0,0 +1,227 @@ +import { Test, type TestingModule } from '@nestjs/testing'; +import { HttpException, NotFoundException } from '@nestjs/common'; +import { LocalesController } from './locales.controller'; +import { ConfigService } from '../../config/config.service'; +import { CollectionCacheService } from '../../cache/collection-cache.service'; +import * as core from '@simoncodes-ca/core'; + +jest.mock('@simoncodes-ca/core', () => { + const actual = jest.requireActual('@simoncodes-ca/core'); + return { + ...actual, + addLocaleToCollection: jest.fn(), + removeLocaleFromCollection: jest.fn(), + }; +}); + +describe('LocalesController', () => { + let localesModule: TestingModule; + let localesController: LocalesController; + let cacheService: CollectionCacheService; + + const mockConfig = { + baseLocale: 'en', + locales: ['en', 'fr'], + collections: { + 'test-collection': { + translationsFolder: './translations/test', + baseLocale: 'en', + locales: ['en', 'fr'], + }, + }, + }; + + const mockCacheService = { + clearCache: jest.fn(), + }; + + beforeEach(async () => { + localesModule = await Test.createTestingModule({ + controllers: [LocalesController], + providers: [ + { + provide: ConfigService, + useValue: { + getConfig: jest.fn().mockReturnValue(mockConfig), + }, + }, + { + provide: CollectionCacheService, + useValue: mockCacheService, + }, + ], + }).compile(); + + localesController = localesModule.get(LocalesController); + cacheService = localesModule.get(CollectionCacheService); + + jest.clearAllMocks(); + }); + + describe('POST /locales (addLocale)', () => { + it('returns 200 with message, entriesBackfilled, and filesUpdated on success', async () => { + const mockResult = { + message: 'Locale "de" added to collection "test-collection" successfully', + entriesBackfilled: 4, + filesUpdated: 2, + }; + (core.addLocaleToCollection as jest.Mock).mockResolvedValue(mockResult); + + const result = await localesController.addLocale('test-collection', { locale: 'de' }); + + expect(core.addLocaleToCollection).toHaveBeenCalledWith('test-collection', 'de'); + expect(cacheService.clearCache).toHaveBeenCalled(); + expect(result).toEqual(mockResult); + }); + + it('returns 400 when locale already exists in collection', async () => { + (core.addLocaleToCollection as jest.Mock).mockRejectedValue( + new Error('Locale "fr" already exists in collection "test-collection"'), + ); + + await expect( + localesController.addLocale('test-collection', { locale: 'fr' }), + ).rejects.toThrow(HttpException); + + const error = await localesController + .addLocale('test-collection', { locale: 'fr' }) + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 404 when collection is not in config', async () => { + await expect( + localesController.addLocale('nonexistent-collection', { locale: 'de' }), + ).rejects.toThrow(NotFoundException); + }); + + it('returns 400 when trying to add the base locale', async () => { + (core.addLocaleToCollection as jest.Mock).mockRejectedValue( + new Error('Cannot add or remove the base locale "en"'), + ); + + const error = await localesController + .addLocale('test-collection', { locale: 'en' }) + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 400 when locale format is invalid', async () => { + (core.addLocaleToCollection as jest.Mock).mockRejectedValue( + new Error('Invalid locale format: "not-valid-123"'), + ); + + const error = await localesController + .addLocale('test-collection', { locale: 'not-valid-123' }) + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 500 for unexpected errors', async () => { + (core.addLocaleToCollection as jest.Mock).mockRejectedValue(new Error('Disk write failure')); + + const error = await localesController + .addLocale('test-collection', { locale: 'de' }) + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(500); + }); + + it('does not clear cache when collection lookup fails before core is called', async () => { + await localesController.addLocale('nonexistent-collection', { locale: 'de' }).catch(() => undefined); + + expect(cacheService.clearCache).not.toHaveBeenCalled(); + }); + }); + + describe('DELETE /locales/:locale (removeLocale)', () => { + it('returns 200 with message, entriesPurged, and filesUpdated on success', async () => { + const mockResult = { + message: 'Locale "fr" removed from collection "test-collection" successfully', + entriesPurged: 3, + filesUpdated: 2, + }; + (core.removeLocaleFromCollection as jest.Mock).mockResolvedValue(mockResult); + + const result = await localesController.removeLocale('test-collection', 'fr'); + + expect(core.removeLocaleFromCollection).toHaveBeenCalledWith('test-collection', 'fr'); + expect(cacheService.clearCache).toHaveBeenCalled(); + expect(result).toEqual(mockResult); + }); + + it('returns 404 when collection is not in config', async () => { + await expect( + localesController.removeLocale('nonexistent-collection', 'fr'), + ).rejects.toThrow(NotFoundException); + }); + + it('returns 400 when locale is not in the collection', async () => { + (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue( + new Error('Locale "ja" not found in collection "test-collection"'), + ); + + const error = await localesController + .removeLocale('test-collection', 'ja') + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 400 when trying to remove the base locale', async () => { + (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue( + new Error('Cannot add or remove the base locale "en"'), + ); + + const error = await localesController + .removeLocale('test-collection', 'en') + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 400 when locale format is invalid', async () => { + (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue( + new Error('Invalid locale format: "bad!"'), + ); + + const error = await localesController + .removeLocale('test-collection', 'bad!') + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(400); + }); + + it('returns 500 for unexpected errors', async () => { + (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue(new Error('Disk write failure')); + + const error = await localesController + .removeLocale('test-collection', 'fr') + .catch((e: HttpException) => e); + + expect((error as HttpException).getStatus()).toBe(500); + }); + + it('does not clear cache when collection lookup fails before core is called', async () => { + await localesController.removeLocale('nonexistent-collection', 'fr').catch(() => undefined); + + expect(cacheService.clearCache).not.toHaveBeenCalled(); + }); + + it('passes collection name and locale directly to core function', async () => { + const mockResult = { + message: 'Locale "fr" removed from collection "test-collection" successfully', + entriesPurged: 1, + filesUpdated: 1, + }; + (core.removeLocaleFromCollection as jest.Mock).mockResolvedValue(mockResult); + + await localesController.removeLocale('test-collection', 'fr'); + + expect(core.removeLocaleFromCollection).toHaveBeenCalledWith('test-collection', 'fr'); + }); + }); +}); diff --git a/apps/api/src/app/collections/locales/locales.controller.ts b/apps/api/src/app/collections/locales/locales.controller.ts new file mode 100644 index 00000000..71242c82 --- /dev/null +++ b/apps/api/src/app/collections/locales/locales.controller.ts @@ -0,0 +1,99 @@ +import { Controller, Post, Delete, Param, Body, HttpException, HttpStatus, NotFoundException } from '@nestjs/common'; +import { addLocaleToCollection, removeLocaleFromCollection } from '@simoncodes-ca/core'; +import type { AddLocaleDto, AddLocaleResponseDto, RemoveLocaleResponseDto } from '@simoncodes-ca/data-transfer'; +import { ConfigService } from '../../config/config.service'; +import { CollectionCacheService } from '../../cache/collection-cache.service'; + +@Controller('collections/:collectionName/locales') +export class LocalesController { + readonly #configService: ConfigService; + readonly #cacheService: CollectionCacheService; + + constructor(configService: ConfigService, cacheService: CollectionCacheService) { + this.#configService = configService; + this.#cacheService = cacheService; + } + + @Post() + async addLocale( + @Param('collectionName') collectionName: string, + @Body() body: AddLocaleDto, + ): Promise { + try { + const config = this.#configService.getConfig(); + + if (!config.collections || !config.collections[collectionName]) { + throw new NotFoundException(`Collection "${collectionName}" not found`); + } + + const result = await addLocaleToCollection(collectionName, body.locale); + + this.#cacheService.clearCache(); + + return result; + } catch (error: unknown) { + if (error instanceof NotFoundException || error instanceof HttpException) { + throw error; + } + + const errorMessage = error instanceof Error ? error.message : 'Error adding locale'; + + if ( + errorMessage.includes('not found') || + errorMessage.includes('not found in collection') + ) { + throw new NotFoundException(errorMessage); + } + + if ( + errorMessage.includes('already exists') || + errorMessage.includes('base locale') || + errorMessage.includes('Invalid locale') + ) { + throw new HttpException(errorMessage, HttpStatus.BAD_REQUEST); + } + + throw new HttpException(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Delete(':locale') + async removeLocale( + @Param('collectionName') collectionName: string, + @Param('locale') locale: string, + ): Promise { + try { + const config = this.#configService.getConfig(); + + if (!config.collections || !config.collections[collectionName]) { + throw new NotFoundException(`Collection "${collectionName}" not found`); + } + + const result = await removeLocaleFromCollection(collectionName, locale); + + this.#cacheService.clearCache(); + + return result; + } catch (error: unknown) { + if (error instanceof NotFoundException || error instanceof HttpException) { + throw error; + } + + const errorMessage = error instanceof Error ? error.message : 'Error removing locale'; + + if (errorMessage.includes('Collection') && errorMessage.includes('not found')) { + throw new NotFoundException(errorMessage); + } + + if ( + errorMessage.includes('not found in collection') || + errorMessage.includes('base locale') || + errorMessage.includes('Invalid locale') + ) { + throw new HttpException(errorMessage, HttpStatus.BAD_REQUEST); + } + + throw new HttpException(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/apps/api/src/app/translation-job/translation-job.service.spec.ts b/apps/api/src/app/translation-job/translation-job.service.spec.ts index 25a41b1b..864d9987 100644 --- a/apps/api/src/app/translation-job/translation-job.service.spec.ts +++ b/apps/api/src/app/translation-job/translation-job.service.spec.ts @@ -1,3 +1,4 @@ +import { Logger } from '@nestjs/common'; import { TranslationJobService } from './translation-job.service'; import { TranslationError } from '@simoncodes-ca/core'; import type { TranslateLocaleResult, TranslateLocaleProgress } from '@simoncodes-ca/core'; @@ -34,10 +35,12 @@ const makeStartJobParams = () => ({ describe('TranslationJobService', () => { let service: TranslationJobService; + let mockLogger: jest.Mocked>; beforeEach(() => { jest.clearAllMocks(); - service = new TranslationJobService(); + mockLogger = { error: jest.fn(), log: jest.fn(), warn: jest.fn() }; + service = new TranslationJobService(mockLogger as unknown as Logger); }); it('startJob returns a non-empty job ID', () => { @@ -62,10 +65,10 @@ describe('TranslationJobService', () => { const job = service.getJob(jobId); expect(job).toBeDefined(); - expect(job!.jobId).toBe(jobId); - expect(job!.collectionName).toBe('my-collection'); - expect(job!.targetLocale).toBe('fr'); - expect(['pending', 'running']).toContain(job!.status); + expect(job?.jobId).toBe(jobId); + expect(job?.collectionName).toBe('my-collection'); + expect(job?.targetLocale).toBe('fr'); + expect(['pending', 'running']).toContain(job?.status); }); it('job status becomes completed with correct counts after async resolves', async () => { @@ -78,14 +81,15 @@ describe('TranslationJobService', () => { await Promise.resolve(); await Promise.resolve(); - const job = service.getJob(jobId)!; - expect(job.status).toBe('completed'); - expect(job.totalResources).toBe(result.totalResources); - expect(job.translatedCount).toBe(result.translatedCount); - expect(job.failedCount).toBe(result.failedCount); - expect(job.skippedCount).toBe(result.skippedCount); - expect(job.failures).toEqual(result.failures); - expect(job.completedAt).toBeDefined(); + const job = service.getJob(jobId); + expect(job).toBeDefined(); + expect(job?.status).toBe('completed'); + expect(job?.totalResources).toBe(result.totalResources); + expect(job?.translatedCount).toBe(result.translatedCount); + expect(job?.failedCount).toBe(result.failedCount); + expect(job?.skippedCount).toBe(result.skippedCount); + expect(job?.failures).toEqual(result.failures); + expect(job?.completedAt).toBeDefined(); }); it('job status becomes failed when translateLocale throws a TranslationError', async () => { @@ -96,9 +100,10 @@ describe('TranslationJobService', () => { await Promise.resolve(); await Promise.resolve(); - const job = service.getJob(jobId)!; - expect(job.status).toBe('failed'); - expect(job.completedAt).toBeDefined(); + const job = service.getJob(jobId); + expect(job).toBeDefined(); + expect(job?.status).toBe('failed'); + expect(job?.completedAt).toBeDefined(); }); it('job status becomes failed when translateLocale throws a generic Error', async () => { @@ -109,8 +114,9 @@ describe('TranslationJobService', () => { await Promise.resolve(); await Promise.resolve(); - const job = service.getJob(jobId)!; - expect(job.status).toBe('failed'); + const job = service.getJob(jobId); + expect(job).toBeDefined(); + expect(job?.status).toBe('failed'); }); it('getJob omits optional fields when there are no failures or skipped keys', async () => { @@ -121,9 +127,10 @@ describe('TranslationJobService', () => { await Promise.resolve(); await Promise.resolve(); - const job = service.getJob(jobId)!; - expect(job.failures).toBeUndefined(); - expect(job.skippedKeys).toBeUndefined(); + const job = service.getJob(jobId); + expect(job).toBeDefined(); + expect(job?.failures).toBeUndefined(); + expect(job?.skippedKeys).toBeUndefined(); }); it('updates job counts when onProgress is called', async () => { diff --git a/apps/api/src/app/translation-job/translation-job.service.ts b/apps/api/src/app/translation-job/translation-job.service.ts index 57dd26a6..a30fcf90 100644 --- a/apps/api/src/app/translation-job/translation-job.service.ts +++ b/apps/api/src/app/translation-job/translation-job.service.ts @@ -22,9 +22,13 @@ interface TranslationJob { @Injectable() export class TranslationJobService { - readonly #logger = new Logger(TranslationJobService.name); + readonly #logger: Logger; readonly #jobs = new Map(); + constructor(logger: Logger) { + this.#logger = logger; + } + /** * Kicks off an async translate-locale job and returns its ID immediately. * The caller can poll `getJob(jobId)` to track progress. @@ -79,7 +83,8 @@ export class TranslationJobService { job.skippedCount = progress.skippedCount; }; - const runningJob = this.#jobs.get(jobId)!; + const runningJob = this.#jobs.get(jobId); + if (!runningJob) return; runningJob.status = 'running'; runningJob.startedAt = new Date(); diff --git a/apps/cli/src/commands/add-locale.spec.ts b/apps/cli/src/commands/add-locale.spec.ts new file mode 100644 index 00000000..5887323b --- /dev/null +++ b/apps/cli/src/commands/add-locale.spec.ts @@ -0,0 +1,129 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { addLocaleCommand, type AddLocaleOptions } from './add-locale'; + +vi.mock('@simoncodes-ca/core', () => ({ + addLocaleToCollection: vi.fn(), +})); + +vi.mock('../utils', () => ({ + loadConfiguration: vi.fn(), + promptForCollection: vi.fn(), + resolveCollection: vi.fn(), + ConsoleFormatter: { + error: vi.fn(), + success: vi.fn(), + keyValue: vi.fn(), + }, +})); + +vi.mock('prompts', () => ({ + default: vi.fn(), +})); + +import { addLocaleToCollection } from '@simoncodes-ca/core'; +import { loadConfiguration, promptForCollection, resolveCollection, ConsoleFormatter } from '../utils'; + +const BASE_CONFIG = { + baseLocale: 'en', + locales: ['en', 'fr'], + collections: { + main: { translationsFolder: 'src/i18n' }, + }, +}; + +const LOADED_CONFIG = { + config: BASE_CONFIG, + configPath: '/project/.lingo-tracker.json', + cwd: '/project', +}; + +const RESOLVED_COLLECTION = { + name: 'main', + config: { translationsFolder: 'src/i18n' }, + translationsFolderPath: '/project/src/i18n', +}; + +describe('addLocaleCommand', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.mocked(loadConfiguration).mockReturnValue(LOADED_CONFIG); + vi.mocked(promptForCollection).mockResolvedValue('main'); + vi.mocked(resolveCollection).mockReturnValue(RESOLVED_COLLECTION); + }); + + it('returns early when loadConfiguration returns null', async () => { + vi.mocked(loadConfiguration).mockReturnValue(null); + + await addLocaleCommand({ locale: 'de' }); + + expect(addLocaleToCollection).not.toHaveBeenCalled(); + }); + + it('returns early when promptForCollection returns null', async () => { + vi.mocked(promptForCollection).mockResolvedValue(null); + + await addLocaleCommand({ locale: 'de' }); + + expect(addLocaleToCollection).not.toHaveBeenCalled(); + }); + + it('returns early when resolveCollection returns null', async () => { + vi.mocked(resolveCollection).mockReturnValue(null); + + await addLocaleCommand({ locale: 'de' }); + + expect(addLocaleToCollection).not.toHaveBeenCalled(); + }); + + describe('non-TTY mode', () => { + beforeEach(() => { + Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true }); + }); + + it('calls addLocaleToCollection and prints success when --locale is provided', async () => { + vi.mocked(addLocaleToCollection).mockResolvedValue({ + message: 'Locale "de" added to collection "main" successfully', + entriesBackfilled: 3, + filesUpdated: 2, + }); + + const options: AddLocaleOptions = { collection: 'main', locale: 'de' }; + await addLocaleCommand(options); + + expect(addLocaleToCollection).toHaveBeenCalledWith('main', 'de', { cwd: '/project' }); + expect(ConsoleFormatter.success).toHaveBeenCalledWith( + 'Locale "de" added to collection "main" successfully', + ); + expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Entries backfilled', 3); + expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Files updated', 2); + }); + + it('prints error and returns without calling core when --locale is missing', async () => { + const options: AddLocaleOptions = { collection: 'main' }; + await addLocaleCommand(options); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Missing required option: --locale'); + expect(addLocaleToCollection).not.toHaveBeenCalled(); + }); + + it('prints error via ConsoleFormatter.error when core function throws', async () => { + vi.mocked(addLocaleToCollection).mockRejectedValue( + new Error('Locale "de" already exists in collection "main"'), + ); + + await addLocaleCommand({ collection: 'main', locale: 'de' }); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith( + 'Locale "de" already exists in collection "main"', + ); + }); + + it('prints generic error message when core throws a non-Error value', async () => { + vi.mocked(addLocaleToCollection).mockRejectedValue('unexpected'); + + await addLocaleCommand({ collection: 'main', locale: 'de' }); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Failed to add locale'); + }); + }); +}); diff --git a/apps/cli/src/commands/add-locale.ts b/apps/cli/src/commands/add-locale.ts new file mode 100644 index 00000000..a0f18aaf --- /dev/null +++ b/apps/cli/src/commands/add-locale.ts @@ -0,0 +1,51 @@ +import prompts from 'prompts'; +import { addLocaleToCollection } from '@simoncodes-ca/core'; +import { loadConfiguration, promptForCollection, resolveCollection, ConsoleFormatter } from '../utils'; + +export interface AddLocaleOptions { + collection?: string; + locale?: string; +} + +export async function addLocaleCommand(options: AddLocaleOptions): Promise { + const loaded = loadConfiguration({ exitOnError: false }); + if (!loaded) return; + const { config, cwd } = loaded; + + const collectionName = await promptForCollection(config, options.collection); + if (!collectionName) return; + + const collection = resolveCollection(collectionName, config, cwd); + if (!collection) return; + + let locale = options.locale; + + if (!locale) { + if (!process.stdout.isTTY) { + ConsoleFormatter.error('Missing required option: --locale'); + return; + } + + const answer = await prompts( + { + type: 'text', + name: 'locale', + message: 'Enter locale to add (e.g. fr-ca, de, es)', + }, + { onCancel: () => process.exit(0) }, + ); + + locale = answer.locale as string; + } + + if (!locale) return; + + try { + const result = await addLocaleToCollection(collectionName, locale, { cwd }); + ConsoleFormatter.success(result.message); + ConsoleFormatter.keyValue('Entries backfilled', result.entriesBackfilled); + ConsoleFormatter.keyValue('Files updated', result.filesUpdated); + } catch (e: unknown) { + ConsoleFormatter.error(e instanceof Error ? e.message : 'Failed to add locale'); + } +} diff --git a/apps/cli/src/commands/remove-locale.spec.ts b/apps/cli/src/commands/remove-locale.spec.ts new file mode 100644 index 00000000..a340257a --- /dev/null +++ b/apps/cli/src/commands/remove-locale.spec.ts @@ -0,0 +1,129 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { removeLocaleCommand, type RemoveLocaleOptions } from './remove-locale'; + +vi.mock('@simoncodes-ca/core', () => ({ + removeLocaleFromCollection: vi.fn(), +})); + +vi.mock('../utils', () => ({ + loadConfiguration: vi.fn(), + promptForCollection: vi.fn(), + resolveCollection: vi.fn(), + ConsoleFormatter: { + error: vi.fn(), + success: vi.fn(), + keyValue: vi.fn(), + }, +})); + +vi.mock('prompts', () => ({ + default: vi.fn(), +})); + +import { removeLocaleFromCollection } from '@simoncodes-ca/core'; +import { loadConfiguration, promptForCollection, resolveCollection, ConsoleFormatter } from '../utils'; + +const BASE_CONFIG = { + baseLocale: 'en', + locales: ['en', 'fr', 'de'], + collections: { + main: { translationsFolder: 'src/i18n' }, + }, +}; + +const LOADED_CONFIG = { + config: BASE_CONFIG, + configPath: '/project/.lingo-tracker.json', + cwd: '/project', +}; + +const RESOLVED_COLLECTION = { + name: 'main', + config: { translationsFolder: 'src/i18n', locales: ['en', 'fr', 'de'] }, + translationsFolderPath: '/project/src/i18n', +}; + +describe('removeLocaleCommand', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.mocked(loadConfiguration).mockReturnValue(LOADED_CONFIG); + vi.mocked(promptForCollection).mockResolvedValue('main'); + vi.mocked(resolveCollection).mockReturnValue(RESOLVED_COLLECTION); + }); + + it('returns early when loadConfiguration returns null', async () => { + vi.mocked(loadConfiguration).mockReturnValue(null); + + await removeLocaleCommand({ locale: 'fr' }); + + expect(removeLocaleFromCollection).not.toHaveBeenCalled(); + }); + + it('returns early when promptForCollection returns null', async () => { + vi.mocked(promptForCollection).mockResolvedValue(null); + + await removeLocaleCommand({ locale: 'fr' }); + + expect(removeLocaleFromCollection).not.toHaveBeenCalled(); + }); + + it('returns early when resolveCollection returns null', async () => { + vi.mocked(resolveCollection).mockReturnValue(null); + + await removeLocaleCommand({ locale: 'fr' }); + + expect(removeLocaleFromCollection).not.toHaveBeenCalled(); + }); + + describe('non-TTY mode', () => { + beforeEach(() => { + Object.defineProperty(process.stdout, 'isTTY', { value: false, configurable: true }); + }); + + it('calls removeLocaleFromCollection and prints success when --locale is provided', async () => { + vi.mocked(removeLocaleFromCollection).mockResolvedValue({ + message: 'Locale "fr" removed from collection "main" successfully', + entriesPurged: 5, + filesUpdated: 3, + }); + + const options: RemoveLocaleOptions = { collection: 'main', locale: 'fr' }; + await removeLocaleCommand(options); + + expect(removeLocaleFromCollection).toHaveBeenCalledWith('main', 'fr', { cwd: '/project' }); + expect(ConsoleFormatter.success).toHaveBeenCalledWith( + 'Locale "fr" removed from collection "main" successfully', + ); + expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Entries purged', 5); + expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Files updated', 3); + }); + + it('prints error and returns without calling core when --locale is missing', async () => { + const options: RemoveLocaleOptions = { collection: 'main' }; + await removeLocaleCommand(options); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Missing required option: --locale'); + expect(removeLocaleFromCollection).not.toHaveBeenCalled(); + }); + + it('prints error via ConsoleFormatter.error when core function throws', async () => { + vi.mocked(removeLocaleFromCollection).mockRejectedValue( + new Error('Locale "fr" not found in collection "main"'), + ); + + await removeLocaleCommand({ collection: 'main', locale: 'fr' }); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith( + 'Locale "fr" not found in collection "main"', + ); + }); + + it('prints generic error message when core throws a non-Error value', async () => { + vi.mocked(removeLocaleFromCollection).mockRejectedValue('unexpected'); + + await removeLocaleCommand({ collection: 'main', locale: 'fr' }); + + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Failed to remove locale'); + }); + }); +}); diff --git a/apps/cli/src/commands/remove-locale.ts b/apps/cli/src/commands/remove-locale.ts new file mode 100644 index 00000000..972abb9d --- /dev/null +++ b/apps/cli/src/commands/remove-locale.ts @@ -0,0 +1,62 @@ +import prompts from 'prompts'; +import { removeLocaleFromCollection } from '@simoncodes-ca/core'; +import { loadConfiguration, promptForCollection, resolveCollection, ConsoleFormatter } from '../utils'; + +export interface RemoveLocaleOptions { + collection?: string; + locale?: string; +} + +export async function removeLocaleCommand(options: RemoveLocaleOptions): Promise { + const loaded = loadConfiguration({ exitOnError: false }); + if (!loaded) return; + const { config, cwd } = loaded; + + const collectionName = await promptForCollection(config, options.collection); + if (!collectionName) return; + + const collection = resolveCollection(collectionName, config, cwd); + if (!collection) return; + + const baseLocale = collection.config.baseLocale ?? config.baseLocale; + const effectiveLocales = (collection.config.locales ?? config.locales ?? []).filter( + (l) => baseLocale === undefined || l !== baseLocale, + ); + + let locale = options.locale; + + if (!locale) { + if (!process.stdout.isTTY) { + ConsoleFormatter.error('Missing required option: --locale'); + return; + } + + if (effectiveLocales.length === 0) { + ConsoleFormatter.error(`No removable locales in collection "${collectionName}".`); + return; + } + + const answer = await prompts( + { + type: 'select', + name: 'locale', + message: 'Select locale to remove', + choices: effectiveLocales.map((l) => ({ title: l, value: l })), + }, + { onCancel: () => process.exit(0) }, + ); + + locale = answer.locale as string; + } + + if (!locale) return; + + try { + const result = await removeLocaleFromCollection(collectionName, locale, { cwd }); + ConsoleFormatter.success(result.message); + ConsoleFormatter.keyValue('Entries purged', result.entriesPurged); + ConsoleFormatter.keyValue('Files updated', result.filesUpdated); + } catch (e: unknown) { + ConsoleFormatter.error(e instanceof Error ? e.message : 'Failed to remove locale'); + } +} diff --git a/apps/cli/src/main.ts b/apps/cli/src/main.ts index 64ef2c80..f35cbd36 100644 --- a/apps/cli/src/main.ts +++ b/apps/cli/src/main.ts @@ -62,6 +62,26 @@ program await deleteCollectionCommand(options); }); +program + .command('add-locale') + .description('Add a locale to a collection and backfill all existing resources') + .option('--collection ', 'Name of the collection') + .option('--locale ', 'Locale to add (e.g., fr-ca, de, es)') + .action(async (options) => { + const { addLocaleCommand } = await import('./commands/add-locale'); + await addLocaleCommand(options); + }); + +program + .command('remove-locale') + .description('Remove a locale from a collection and purge all locale data') + .option('--collection ', 'Name of the collection') + .option('--locale ', 'Locale to remove') + .action(async (options) => { + const { removeLocaleCommand } = await import('./commands/remove-locale'); + await removeLocaleCommand(options); + }); + program .command('add-resource') .description('Add a translation resource to a collection') diff --git a/docs/api.md b/docs/api.md index c199d7cf..aa0b2f5c 100644 --- a/docs/api.md +++ b/docs/api.md @@ -285,6 +285,88 @@ Response: } ``` +## Locales API + +Manage locales within a specific collection. + +### Add Locale + +Adds a locale to a collection and backfills all existing resources with the new locale (value set to the base value, `status: "new"`). + +**Endpoint**: `POST /api/collections/:collectionName/locales` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection (URL-encoded if necessary) + +**Request Body**: + +```json +{ + "locale": "de" +} +``` + +**Response**: + +```json +{ + "message": "Locale \"de\" added to collection \"main\" successfully", + "entriesBackfilled": 42, + "filesUpdated": 8 +} +``` + +**Status Codes**: +- `200 OK`: Locale added and resources backfilled +- `400 Bad Request`: Invalid locale format, locale already exists, cannot modify base locale, or collection not found + +**Example**: + +```bash +curl -X POST http://localhost:3030/api/collections/main/locales \ + -H 'Content-Type: application/json' \ + -d '{"locale": "de"}' +``` + +--- + +### Remove Locale + +Removes a locale from a collection and purges all translation data for that locale from resource files. + +**Endpoint**: `DELETE /api/collections/:collectionName/locales/:locale` + +**Path Parameters**: +- `collectionName` (string, required): The name of the collection (URL-encoded if necessary) +- `locale` (string, required): The locale to remove (URL-encoded if necessary) + +**Response**: + +```json +{ + "message": "Locale \"de\" removed from collection \"main\" successfully", + "entriesPurged": 42, + "filesUpdated": 8 +} +``` + +**Status Codes**: +- `200 OK`: Locale removed and data purged +- `400 Bad Request`: Invalid locale format, locale not found in collection, cannot modify base locale, or collection not found + +**Example**: + +```bash +curl -X DELETE http://localhost:3030/api/collections/main/locales/de +``` + +**Notes**: +- Translation data for the removed locale is permanently deleted from files (recoverable via git) +- Removing the last non-base locale is allowed +- Cannot remove the base locale + +--- + ## Resources API All resource endpoints are scoped to a specific collection. diff --git a/docs/cli.md b/docs/cli.md index 0291bed8..056e1d69 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -197,6 +197,79 @@ lingo-tracker delete-collection --collection-name Mobile --- +### add-locale + +Add a locale to a collection and backfill all existing resources with the new locale. + +**Usage:** + +```bash +lingo-tracker add-locale [options] +``` + +**Options:** + +- `--collection ` - Name of the collection (required in non-interactive mode) +- `--locale ` - Locale to add, e.g. `fr-ca`, `de`, `es` (required in non-interactive mode) + +**Examples:** + +Interactive mode (prompts for collection and locale): +```bash +lingo-tracker add-locale +``` + +Non-interactive mode: +```bash +lingo-tracker add-locale --collection Main --locale de +``` + +**Notes:** +- Validates locale format (e.g. `en`, `fr-ca`, `zh-Hans`) +- Errors if the locale already exists in the collection +- Cannot add the base locale +- If the collection inherits global locales (no explicit `locales` in its config), global locales are copied into the collection first, then the new locale is appended +- All existing `resource_entries.json` files are updated with the new locale value set to the base (`source`) value, and `tracker_meta.json` is updated with `status: "new"` + +--- + +### remove-locale + +Remove a locale from a collection and purge all of its translation data from resource files. + +**Usage:** + +```bash +lingo-tracker remove-locale [options] +``` + +**Options:** + +- `--collection ` - Name of the collection (required in non-interactive mode) +- `--locale ` - Locale to remove (required in non-interactive mode) + +**Examples:** + +Interactive mode (prompts for collection, then shows a list of removable locales): +```bash +lingo-tracker remove-locale +``` + +Non-interactive mode: +```bash +lingo-tracker remove-locale --collection Main --locale de +``` + +**Notes:** +- Errors if the locale does not exist in the collection +- Cannot remove the base locale +- Removes the locale key from all `resource_entries.json` and `tracker_meta.json` files in the collection +- Translation data for the locale is permanently deleted from files (recoverable via git) +- Removing the last non-base locale is allowed (results in a monolingual collection) +- If the collection inherits global locales, global locales are copied into the collection first, then the target locale is removed + +--- + ## Resource Commands ### add-resource diff --git a/libs/core/src/collections-manager/add-locale-to-collection.spec.ts b/libs/core/src/collections-manager/add-locale-to-collection.spec.ts new file mode 100644 index 00000000..a5265935 --- /dev/null +++ b/libs/core/src/collections-manager/add-locale-to-collection.spec.ts @@ -0,0 +1,184 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import fs from 'fs'; +import path from 'path'; +import { addLocaleToCollection } from './add-locale-to-collection'; +import { calculateChecksum } from '../resource/checksum'; +import type { ResourceEntries } from '../resource/resource-entry'; +import type { TrackerMetadata } from '../resource/tracker-metadata'; +import type { SafeAny } from '../constants'; +import { setupMockFs, makeBaseConfig } from './locale-spec-helpers'; + +vi.mock('fs'); + +const CWD = '/test'; +const CONFIG_PATH = path.join(CWD, '.lingo-tracker.json'); +const TRANSLATIONS_FOLDER = path.join(CWD, 'src/i18n'); + +function makeConfig(overrides: SafeAny = {}) { + return makeBaseConfig(overrides); +} + +describe('addLocaleToCollection', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it('adds locale to config and backfills resource entries', async () => { + const entries: ResourceEntries = { + ok: { source: 'OK', fr: 'OK' }, + }; + const meta: TrackerMetadata = { + ok: { en: { checksum: calculateChecksum('OK') }, fr: { checksum: calculateChecksum('OK'), baseChecksum: calculateChecksum('OK'), status: 'new' } }, + }; + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: ['resource_entries.json', 'tracker_meta.json'] }, + [path.join(TRANSLATIONS_FOLDER, 'resource_entries.json')]: { type: 'file', content: JSON.stringify(entries) }, + [path.join(TRANSLATIONS_FOLDER, 'tracker_meta.json')]: { type: 'file', content: JSON.stringify(meta) }, + }); + + const result = await addLocaleToCollection('main', 'de', { cwd: CWD }); + + expect(result.message).toBe('Locale "de" added to collection "main" successfully'); + expect(result.entriesBackfilled).toBe(1); + expect(result.filesUpdated).toBe(1); + + const writeCalls = vi.mocked(fs.writeFileSync).mock.calls; + // First call: config file + const configWrite = JSON.parse(writeCalls[0][1] as string); + expect(configWrite.collections.main.locales).toContain('de'); + + // Second call: resource_entries.json — de entry should be source value + const entriesWrite = JSON.parse(writeCalls[1][1] as string); + expect(entriesWrite.ok.de).toBe('OK'); + + // Third call: tracker_meta.json — de metadata should be status 'new' + const metaWrite = JSON.parse(writeCalls[2][1] as string); + expect(metaWrite.ok.de).toMatchObject({ + checksum: calculateChecksum('OK'), + baseChecksum: calculateChecksum('OK'), + status: 'new', + }); + }); + + it('copies global locales into collection when collection has no locales override', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + const result = await addLocaleToCollection('main', 'de', { cwd: CWD }); + + expect(result.message).toContain('de'); + + const configWriteCall = vi.mocked(fs.writeFileSync).mock.calls[0]; + const writtenConfig = JSON.parse(configWriteCall[1] as string); + // Should have copied global locales AND added de + expect(writtenConfig.collections.main.locales).toEqual(['en', 'fr', 'de']); + }); + + it('does not copy global locales when collection already has explicit locales', async () => { + const config = makeConfig({ + locales: ['en', 'fr'], + collections: { + main: { translationsFolder: 'src/i18n', locales: ['en', 'fr'] }, + }, + }); + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(config) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + await addLocaleToCollection('main', 'de', { cwd: CWD }); + + const configWriteCall = vi.mocked(fs.writeFileSync).mock.calls[0]; + const writtenConfig = JSON.parse(configWriteCall[1] as string); + expect(writtenConfig.collections.main.locales).toEqual(['en', 'fr', 'de']); + }); + + it('handles empty translations folder gracefully (no resource files)', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + const result = await addLocaleToCollection('main', 'de', { cwd: CWD }); + + expect(result.entriesBackfilled).toBe(0); + expect(result.filesUpdated).toBe(0); + }); + + it('handles non-existent translations folder gracefully', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + // translations folder not in mockFs + }); + + const result = await addLocaleToCollection('main', 'de', { cwd: CWD }); + + expect(result.entriesBackfilled).toBe(0); + expect(result.filesUpdated).toBe(0); + }); + + it('throws when locale already exists in collection', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(addLocaleToCollection('main', 'fr', { cwd: CWD })).rejects.toThrow( + 'Locale "fr" already exists in collection "main"', + ); + }); + + it('throws when trying to add the base locale', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(addLocaleToCollection('main', 'en', { cwd: CWD })).rejects.toThrow( + 'Cannot add or remove the base locale "en"', + ); + }); + + it('throws when collection does not exist', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(addLocaleToCollection('nonexistent', 'de', { cwd: CWD })).rejects.toThrow( + 'Collection "nonexistent" not found', + ); + }); + + it('throws when locale format is invalid', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(addLocaleToCollection('main', 'not-valid-123', { cwd: CWD })).rejects.toThrow( + 'Invalid locale format', + ); + }); + + it('uses collection-level baseLocale when blocking base locale add', async () => { + const config = makeConfig({ + collections: { + main: { translationsFolder: 'src/i18n', baseLocale: 'fr' }, + }, + }); + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(config) }, + }); + + await expect(addLocaleToCollection('main', 'fr', { cwd: CWD })).rejects.toThrow( + 'Cannot add or remove the base locale "fr"', + ); + }); +}); diff --git a/libs/core/src/collections-manager/add-locale-to-collection.ts b/libs/core/src/collections-manager/add-locale-to-collection.ts new file mode 100644 index 00000000..d2e6b8e4 --- /dev/null +++ b/libs/core/src/collections-manager/add-locale-to-collection.ts @@ -0,0 +1,124 @@ +import * as path from 'node:path'; +import * as fs from 'node:fs'; +import { validateLocale } from '@simoncodes-ca/domain'; +import { updateConfig } from '../lib/config/config-file-operations'; +import { walkFolders } from '../lib/normalize/iterative-folder-walker'; +import { readResourceEntries, readTrackerMetadata, writeJsonFile } from '../lib/file-io/json-file-operations'; +import { calculateChecksum } from '../resource/checksum'; +import { ErrorMessages } from '../lib/errors/error-messages'; +import { RESOURCE_ENTRIES_FILENAME, TRACKER_META_FILENAME } from '../constants'; + +export interface AddLocaleToCollectionOptions { + readonly cwd?: string; +} + +export interface AddLocaleToCollectionResult { + readonly message: string; + readonly entriesBackfilled: number; + readonly filesUpdated: number; +} + +export async function addLocaleToCollection( + collectionName: string, + locale: string, + options: AddLocaleToCollectionOptions = {}, +): Promise { + const cwd = options.cwd ?? process.cwd(); + + validateLocale(locale); + + const updatedConfig = updateConfig((config) => { + if (!config.collections?.[collectionName]) { + throw new Error(ErrorMessages.collectionNotFound(collectionName)); + } + + const collection = config.collections[collectionName]; + const baseLocale = collection.baseLocale ?? config.baseLocale; + + if (locale === baseLocale) { + throw new Error(ErrorMessages.cannotModifyBaseLocale(locale)); + } + + const effectiveLocales = collection.locales ?? config.locales ?? []; + + if (effectiveLocales.includes(locale)) { + throw new Error(ErrorMessages.localeAlreadyExists(locale, collectionName)); + } + + const newLocales = [...effectiveLocales, locale]; + + return { + ...config, + collections: { + ...config.collections, + [collectionName]: { + ...collection, + locales: newLocales, + }, + }, + }; + }, cwd); + + const collection = updatedConfig.collections[collectionName]; + const translationsFolderPath = path.resolve(cwd, collection.translationsFolder); + + let entriesBackfilled = 0; + let filesUpdated = 0; + + for (const visit of walkFolders(translationsFolderPath)) { + const resourceEntriesPath = path.join(visit.absolutePath, RESOURCE_ENTRIES_FILENAME); + const trackerMetaPath = path.join(visit.absolutePath, TRACKER_META_FILENAME); + + if (!fs.existsSync(resourceEntriesPath)) continue; + + const resourceEntries = readResourceEntries(resourceEntriesPath); + + const trackerMetadata = readTrackerMetadata(trackerMetaPath, {}); + + let folderModified = false; + + for (const entryKey of Object.keys(resourceEntries)) { + const entry = resourceEntries[entryKey]; + + if (typeof entry !== 'object' || entry === null || typeof entry.source !== 'string') { + continue; + } + + if (typeof entry[locale] === 'string') { + continue; + } + + // Seed the new locale with the base (source) value and status 'new' — + // this matches the convention used by normalizeEntry/ensureLocaleEntryExists, + // which also seeds missing locales with baseValue and marks them 'new'. + const baseValue = entry.source; + const checksum = calculateChecksum(baseValue); + + entry[locale] = baseValue; + + if (!trackerMetadata[entryKey]) { + trackerMetadata[entryKey] = {}; + } + trackerMetadata[entryKey][locale] = { + checksum, + baseChecksum: checksum, + status: 'new', + }; + + entriesBackfilled++; + folderModified = true; + } + + if (folderModified) { + writeJsonFile({ filePath: resourceEntriesPath, data: resourceEntries }); + writeJsonFile({ filePath: trackerMetaPath, data: trackerMetadata }); + filesUpdated++; + } + } + + return { + message: `Locale "${locale}" added to collection "${collectionName}" successfully`, + entriesBackfilled, + filesUpdated, + }; +} diff --git a/libs/core/src/collections-manager/index.ts b/libs/core/src/collections-manager/index.ts index ef860e15..676a72e4 100644 --- a/libs/core/src/collections-manager/index.ts +++ b/libs/core/src/collections-manager/index.ts @@ -1,3 +1,5 @@ export * from './delete-collection-by-name'; export * from './add-collection'; export * from './update-collection'; +export * from './add-locale-to-collection'; +export * from './remove-locale-from-collection'; diff --git a/libs/core/src/collections-manager/locale-spec-helpers.spec.ts b/libs/core/src/collections-manager/locale-spec-helpers.spec.ts new file mode 100644 index 00000000..8662e2ef --- /dev/null +++ b/libs/core/src/collections-manager/locale-spec-helpers.spec.ts @@ -0,0 +1,17 @@ +import { describe, it, expect } from 'vitest'; +import { makeBaseConfig } from './locale-spec-helpers'; + +describe('locale-spec-helpers', () => { + it('makeBaseConfig returns the expected shape', () => { + const config = makeBaseConfig(); + expect(config).toMatchObject({ + baseLocale: 'en', + locales: ['en', 'fr'], + collections: { + main: { + translationsFolder: 'src/i18n', + }, + }, + }); + }); +}); diff --git a/libs/core/src/collections-manager/locale-spec-helpers.ts b/libs/core/src/collections-manager/locale-spec-helpers.ts new file mode 100644 index 00000000..fb40f4ae --- /dev/null +++ b/libs/core/src/collections-manager/locale-spec-helpers.ts @@ -0,0 +1,58 @@ +import { vi } from 'vitest'; +import * as fs from 'fs'; +import * as path from 'path'; +import type { SafeAny } from '../constants'; + +export interface MockFile { + type: 'file' | 'directory'; + content?: string; + children?: string[]; +} + +export function setupMockFs(mockFs: Record): void { + vi.mocked(fs.existsSync).mockImplementation((p: fs.PathLike) => (p as string) in mockFs); + + vi.mocked(fs.readdirSync).mockImplementation(((p: fs.PathLike, opts?: SafeAny) => { + const entry = mockFs[p as string]; + if (!entry || entry.type !== 'directory') return []; + const childNames = entry.children ?? []; + if (opts && typeof opts === 'object' && (opts as { withFileTypes?: boolean }).withFileTypes) { + return childNames.map((name) => { + const childPath = path.join(p as string, name); + const isDir = mockFs[childPath]?.type === 'directory'; + return { + name, + isDirectory: () => isDir, + isFile: () => !isDir, + isSymbolicLink: () => false, + isBlockDevice: () => false, + isCharacterDevice: () => false, + isFIFO: () => false, + isSocket: () => false, + } as unknown as fs.Dirent; + }); + } + return childNames as unknown as fs.Dirent[]; + }) as SafeAny); + + vi.mocked(fs.readFileSync).mockImplementation((p: fs.PathOrFileDescriptor) => { + const entry = mockFs[p as string]; + if (!entry || entry.type !== 'file') throw new Error(`ENOENT: ${p}`); + return entry.content ?? ''; + }); + + vi.mocked(fs.writeFileSync).mockImplementation(() => undefined); +} + +export function makeBaseConfig(overrides: SafeAny = {}): SafeAny { + return { + baseLocale: 'en', + locales: ['en', 'fr'], + collections: { + main: { + translationsFolder: 'src/i18n', + }, + }, + ...overrides, + }; +} diff --git a/libs/core/src/collections-manager/remove-locale-from-collection.spec.ts b/libs/core/src/collections-manager/remove-locale-from-collection.spec.ts new file mode 100644 index 00000000..54efff07 --- /dev/null +++ b/libs/core/src/collections-manager/remove-locale-from-collection.spec.ts @@ -0,0 +1,193 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import fs from 'fs'; +import path from 'path'; +import { removeLocaleFromCollection } from './remove-locale-from-collection'; +import { calculateChecksum } from '../resource/checksum'; +import type { ResourceEntries } from '../resource/resource-entry'; +import type { TrackerMetadata } from '../resource/tracker-metadata'; +import type { SafeAny } from '../constants'; +import { setupMockFs, makeBaseConfig } from './locale-spec-helpers'; + +vi.mock('fs'); + +const CWD = '/test'; +const CONFIG_PATH = path.join(CWD, '.lingo-tracker.json'); +const TRANSLATIONS_FOLDER = path.join(CWD, 'src/i18n'); + +function makeConfig(overrides: SafeAny = {}) { + return makeBaseConfig({ + locales: ['en', 'fr', 'de'], + ...overrides, + }); +} + +describe('removeLocaleFromCollection', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it('removes locale from config and purges resource entries', async () => { + const entries: ResourceEntries = { + ok: { source: 'OK', fr: 'OK FR', de: 'OK DE' }, + }; + const meta: TrackerMetadata = { + ok: { + en: { checksum: calculateChecksum('OK') }, + fr: { checksum: calculateChecksum('OK FR'), baseChecksum: calculateChecksum('OK'), status: 'translated' }, + de: { checksum: calculateChecksum('OK DE'), baseChecksum: calculateChecksum('OK'), status: 'translated' }, + }, + }; + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: ['resource_entries.json', 'tracker_meta.json'] }, + [path.join(TRANSLATIONS_FOLDER, 'resource_entries.json')]: { type: 'file', content: JSON.stringify(entries) }, + [path.join(TRANSLATIONS_FOLDER, 'tracker_meta.json')]: { type: 'file', content: JSON.stringify(meta) }, + }); + + const result = await removeLocaleFromCollection('main', 'fr', { cwd: CWD }); + + expect(result.message).toBe('Locale "fr" removed from collection "main" successfully'); + expect(result.entriesPurged).toBe(1); + expect(result.filesUpdated).toBe(1); + + const writeCalls = vi.mocked(fs.writeFileSync).mock.calls; + + // First write: updated config (fr removed from locales) + const configWrite = JSON.parse(writeCalls[0][1] as string); + expect(configWrite.collections.main.locales).not.toContain('fr'); + expect(configWrite.collections.main.locales).toContain('de'); + + // Second write: updated resource_entries.json (fr key removed) + const entriesWrite = JSON.parse(writeCalls[1][1] as string); + expect(entriesWrite.ok.fr).toBeUndefined(); + expect(entriesWrite.ok.de).toBe('OK DE'); + + // Third write: updated tracker_meta.json (fr metadata removed) + const metaWrite = JSON.parse(writeCalls[2][1] as string); + expect(metaWrite.ok.fr).toBeUndefined(); + expect(metaWrite.ok.de).toBeDefined(); + }); + + it('copies global locales into collection when collection has no locales override', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + const result = await removeLocaleFromCollection('main', 'fr', { cwd: CWD }); + + expect(result.message).toContain('fr'); + + const configWriteCall = vi.mocked(fs.writeFileSync).mock.calls[0]; + const writtenConfig = JSON.parse(configWriteCall[1] as string); + // Should have copied global locales and removed fr + expect(writtenConfig.collections.main.locales).toEqual(['en', 'de']); + }); + + it('allows removing the last non-base locale (monolingual collection)', async () => { + const config = makeConfig({ + locales: ['en', 'fr'], + collections: { + main: { translationsFolder: 'src/i18n', locales: ['en', 'fr'] }, + }, + }); + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(config) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + const result = await removeLocaleFromCollection('main', 'fr', { cwd: CWD }); + + expect(result.message).toContain('fr'); + + const configWriteCall = vi.mocked(fs.writeFileSync).mock.calls[0]; + const writtenConfig = JSON.parse(configWriteCall[1] as string); + expect(writtenConfig.collections.main.locales).toEqual(['en']); + }); + + it('handles empty translations folder gracefully (no resource files)', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + [TRANSLATIONS_FOLDER]: { type: 'directory', children: [] }, + }); + + const result = await removeLocaleFromCollection('main', 'fr', { cwd: CWD }); + + expect(result.entriesPurged).toBe(0); + expect(result.filesUpdated).toBe(0); + }); + + it('handles non-existent translations folder gracefully', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + // no translations folder + }); + + const result = await removeLocaleFromCollection('main', 'fr', { cwd: CWD }); + + expect(result.entriesPurged).toBe(0); + expect(result.filesUpdated).toBe(0); + }); + + it('throws when locale does not exist in collection', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(removeLocaleFromCollection('main', 'ja', { cwd: CWD })).rejects.toThrow( + 'Locale "ja" not found in collection "main"', + ); + }); + + it('throws when trying to remove the base locale', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(removeLocaleFromCollection('main', 'en', { cwd: CWD })).rejects.toThrow( + 'Cannot add or remove the base locale "en"', + ); + }); + + it('throws when collection does not exist', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(removeLocaleFromCollection('nonexistent', 'fr', { cwd: CWD })).rejects.toThrow( + 'Collection "nonexistent" not found', + ); + }); + + it('throws when locale format is invalid', async () => { + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, + }); + + await expect(removeLocaleFromCollection('main', 'not-valid-123', { cwd: CWD })).rejects.toThrow( + 'Invalid locale format', + ); + }); + + it('uses collection-level baseLocale when blocking base locale removal', async () => { + const config = makeConfig({ + collections: { + main: { translationsFolder: 'src/i18n', baseLocale: 'fr', locales: ['fr', 'de'] }, + }, + }); + + setupMockFs({ + [CONFIG_PATH]: { type: 'file', content: JSON.stringify(config) }, + }); + + await expect(removeLocaleFromCollection('main', 'fr', { cwd: CWD })).rejects.toThrow( + 'Cannot add or remove the base locale "fr"', + ); + }); +}); diff --git a/libs/core/src/collections-manager/remove-locale-from-collection.ts b/libs/core/src/collections-manager/remove-locale-from-collection.ts new file mode 100644 index 00000000..288f23fc --- /dev/null +++ b/libs/core/src/collections-manager/remove-locale-from-collection.ts @@ -0,0 +1,116 @@ +import * as path from 'node:path'; +import * as fs from 'node:fs'; +import { validateLocale } from '@simoncodes-ca/domain'; +import { updateConfig } from '../lib/config/config-file-operations'; +import { walkFolders } from '../lib/normalize/iterative-folder-walker'; +import { readResourceEntries, readTrackerMetadata, writeJsonFile } from '../lib/file-io/json-file-operations'; +import { ErrorMessages } from '../lib/errors/error-messages'; +import { RESOURCE_ENTRIES_FILENAME, TRACKER_META_FILENAME } from '../constants'; + +export interface RemoveLocaleFromCollectionOptions { + readonly cwd?: string; +} + +export interface RemoveLocaleFromCollectionResult { + readonly message: string; + readonly entriesPurged: number; + readonly filesUpdated: number; +} + +export async function removeLocaleFromCollection( + collectionName: string, + locale: string, + options: RemoveLocaleFromCollectionOptions = {}, +): Promise { + const cwd = options.cwd ?? process.cwd(); + + validateLocale(locale); + + const updatedConfig = updateConfig((config) => { + if (!config.collections?.[collectionName]) { + throw new Error(ErrorMessages.collectionNotFound(collectionName)); + } + + const collection = config.collections[collectionName]; + const baseLocale = collection.baseLocale ?? config.baseLocale; + + if (locale === baseLocale) { + throw new Error(ErrorMessages.cannotModifyBaseLocale(locale)); + } + + const effectiveLocales = collection.locales ?? config.locales ?? []; + + if (!effectiveLocales.includes(locale)) { + throw new Error(ErrorMessages.localeNotFound(locale, collectionName)); + } + + const newLocales = effectiveLocales.filter((l) => l !== locale); + + return { + ...config, + collections: { + ...config.collections, + [collectionName]: { + ...collection, + locales: newLocales, + }, + }, + }; + }, cwd); + + const collection = updatedConfig.collections[collectionName]; + const translationsFolderPath = path.resolve(cwd, collection.translationsFolder); + + let entriesPurged = 0; + let filesUpdated = 0; + + for (const visit of walkFolders(translationsFolderPath)) { + const resourceEntriesPath = path.join(visit.absolutePath, RESOURCE_ENTRIES_FILENAME); + const trackerMetaPath = path.join(visit.absolutePath, TRACKER_META_FILENAME); + + if (!fs.existsSync(resourceEntriesPath)) continue; + + const resourceEntries = readResourceEntries(resourceEntriesPath); + + const trackerMetadata = readTrackerMetadata(trackerMetaPath, {}); + + let folderModified = false; + + for (const entryKey of Object.keys(resourceEntries)) { + const entry = resourceEntries[entryKey]; + + if (typeof entry !== 'object' || entry === null) { + continue; + } + + let entryModified = false; + + if (locale in entry) { + delete entry[locale]; + entryModified = true; + } + + if (trackerMetadata[entryKey] && locale in trackerMetadata[entryKey]) { + delete trackerMetadata[entryKey][locale]; + entryModified = true; + } + + if (entryModified) { + entriesPurged++; + folderModified = true; + } + } + + if (folderModified) { + writeJsonFile({ filePath: resourceEntriesPath, data: resourceEntries }); + writeJsonFile({ filePath: trackerMetaPath, data: trackerMetadata }); + filesUpdated++; + } + } + + return { + message: `Locale "${locale}" removed from collection "${collectionName}" successfully`, + entriesPurged, + filesUpdated, + }; +} diff --git a/libs/core/src/lib/errors/error-messages.ts b/libs/core/src/lib/errors/error-messages.ts index b508b171..65b2329c 100644 --- a/libs/core/src/lib/errors/error-messages.ts +++ b/libs/core/src/lib/errors/error-messages.ts @@ -24,5 +24,14 @@ export const ErrorMessages = { collectionAlreadyExists: (name: string) => `Collection "${name}" already exists`, + localeAlreadyExists: (locale: string, collection: string) => + `Locale "${locale}" already exists in collection "${collection}"`, + + localeNotFound: (locale: string, collection: string) => + `Locale "${locale}" not found in collection "${collection}"`, + + cannotModifyBaseLocale: (locale: string) => + `Cannot add or remove the base locale "${locale}"`, + invalidKey: (key: string, reason: string) => `Invalid resource key "${key}": ${reason}`, } as const; diff --git a/libs/core/src/lib/translation/translation-orchestrator.ts b/libs/core/src/lib/translation/translation-orchestrator.ts index fdb8c328..b8593c2d 100644 --- a/libs/core/src/lib/translation/translation-orchestrator.ts +++ b/libs/core/src/lib/translation/translation-orchestrator.ts @@ -201,7 +201,11 @@ export class TranslationOrchestrator { results[originalIndex] = { kind: 'translated', value: translatedText }; } else { // simple-placeholders — restore markers - const placeholders = placeholderMaps.get(originalIndex)!; + const placeholders = placeholderMaps.get(originalIndex); + if (!placeholders) { + results[originalIndex] = { kind: 'skipped', value: texts[originalIndex] }; + continue; + } const restoreResult = restorePlaceholders(translatedText, placeholders); if (!restoreResult.success) { results[originalIndex] = { kind: 'skipped', value: texts[originalIndex] }; diff --git a/libs/data-transfer/src/index.ts b/libs/data-transfer/src/index.ts index 64285620..34ca98f2 100644 --- a/libs/data-transfer/src/index.ts +++ b/libs/data-transfer/src/index.ts @@ -23,3 +23,6 @@ export * from './lib/translation-config.dto'; export * from './lib/translate-resource.dto'; export * from './lib/translate-resource-response.dto'; export * from './lib/translate-locale.dto'; +export * from './lib/add-locale.dto'; +export * from './lib/add-locale-response.dto'; +export * from './lib/remove-locale-response.dto'; diff --git a/libs/data-transfer/src/lib/add-locale-response.dto.ts b/libs/data-transfer/src/lib/add-locale-response.dto.ts new file mode 100644 index 00000000..13d0f19d --- /dev/null +++ b/libs/data-transfer/src/lib/add-locale-response.dto.ts @@ -0,0 +1,5 @@ +export interface AddLocaleResponseDto { + message: string; + entriesBackfilled: number; + filesUpdated: number; +} diff --git a/libs/data-transfer/src/lib/add-locale.dto.ts b/libs/data-transfer/src/lib/add-locale.dto.ts new file mode 100644 index 00000000..41b58d9d --- /dev/null +++ b/libs/data-transfer/src/lib/add-locale.dto.ts @@ -0,0 +1,3 @@ +export interface AddLocaleDto { + locale: string; +} diff --git a/libs/data-transfer/src/lib/remove-locale-response.dto.ts b/libs/data-transfer/src/lib/remove-locale-response.dto.ts new file mode 100644 index 00000000..0da1b42a --- /dev/null +++ b/libs/data-transfer/src/lib/remove-locale-response.dto.ts @@ -0,0 +1,5 @@ +export interface RemoveLocaleResponseDto { + message: string; + entriesPurged: number; + filesUpdated: number; +} From 1b2d4a7184b3393c37c3a26096087dee76a3f916 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 17:06:50 -0700 Subject: [PATCH 05/13] docs(ai): remove obsolete docs --- ai/diagrams/apps.md | 80 ------- ai/diagrams/ui-routes.md | 470 --------------------------------------- ai/diagrams/ui.md | 311 -------------------------- 3 files changed, 861 deletions(-) delete mode 100644 ai/diagrams/apps.md delete mode 100644 ai/diagrams/ui-routes.md delete mode 100644 ai/diagrams/ui.md diff --git a/ai/diagrams/apps.md b/ai/diagrams/apps.md deleted file mode 100644 index 240cfecc..00000000 --- a/ai/diagrams/apps.md +++ /dev/null @@ -1,80 +0,0 @@ -# LingoTracker Monorepo Architecture - -## Overall Monorepo Structure - -```mermaid -graph TB - subgraph Applications["📱 Applications"] - CLI["apps/cli
CLI Interface
(Commander, Node.js)"] - API["apps/api
REST API
(NestJS, Express)"] - TRACKER["apps/tracker
Web UI
(Angular 20, Material)"] - end - - subgraph Libraries["📚 Libraries"] - CORE["libs/core
Core Business Logic"] - DATATRANSFER["libs/data-transfer
DTOs & Contracts"] - end - - subgraph CoreModules["🔧 Core Modules"] - CONFIG["config/
Configuration"] - RESOURCE["resource/
CRUD & Metadata"] - FILEIO["file-io/
File Operations"] - FOLDER["folder/
Folder Management"] - BUNDLE["bundle/
Bundles & Types"] - VALIDATE["validate/
Validation"] - EXPORT["export/
Export (XLIFF, JSON)"] - IMPORT["import/
Import (XLIFF, JSON)"] - NORMALIZE["normalize/
Normalization"] - ERRORS["errors/
Error Handling"] - end - - subgraph SharedDTOs["📦 Shared Data Contracts"] - DTO_COLLECTION["Collection DTOs
CreateCollection, UpdateCollection"] - DTO_RESOURCE["Resource DTOs
CreateResource, UpdateResource, DeleteResource"] - DTO_FOLDER["Folder DTOs
CreateFolder, MoveResource"] - DTO_SEARCH["Search DTOs
SearchResult, SearchTranslations"] - DTO_TREE["Tree DTOs
ResourceTree, TreeStatusResponse"] - DTO_CONFIG["Config DTOs
Collection, Global Config"] - end - - %% Application Dependencies - CLI -->|imports| CORE - CLI -->|uses| DATATRANSFER - API -->|imports| CORE - API -->|imports| DATATRANSFER - TRACKER -->|imports| DATATRANSFER - - %% Core Module Structure - CORE --> CONFIG - CORE --> RESOURCE - CORE --> FILEIO - CORE --> FOLDER - CORE --> BUNDLE - CORE --> VALIDATE - CORE --> EXPORT - CORE --> IMPORT - CORE --> NORMALIZE - CORE --> ERRORS - - %% Internal Core Dependencies - RESOURCE -->|uses| CONFIG - RESOURCE -->|uses| FILEIO - RESOURCE -->|uses| ERRORS - BUNDLE -->|uses| RESOURCE - VALIDATE -->|uses| RESOURCE - EXPORT -->|uses| RESOURCE - IMPORT -->|uses| RESOURCE - NORMALIZE -->|uses| RESOURCE - - %% DTO Dependencies - DATATRANSFER --> DTO_COLLECTION - DATATRANSFER --> DTO_RESOURCE - DATATRANSFER --> DTO_FOLDER - DATATRANSFER --> DTO_SEARCH - DATATRANSFER --> DTO_TREE - DATATRANSFER --> DTO_CONFIG - - style Applications fill:#e1f5ff - style Libraries fill:#f3e5f5 - style CoreModules fill:#fff3e0 - style SharedDTOs fill:#e8f5e9 diff --git a/ai/diagrams/ui-routes.md b/ai/diagrams/ui-routes.md deleted file mode 100644 index 6523175b..00000000 --- a/ai/diagrams/ui-routes.md +++ /dev/null @@ -1,470 +0,0 @@ -# Angular Routing & Data Flow - -## Route Structure - -```mermaid -graph TB - ROOT["/ ROOT"] - - REDIRECT["Redirect to /collections"] - - COLLECTIONS_ROUTE["/collections"] - BROWSER_ROUTE["/browser/:collectionName"] - - ROOT -->|redirects| REDIRECT - REDIRECT --> COLLECTIONS_ROUTE - ROOT -->|navigates| BROWSER_ROUTE - COLLECTIONS_ROUTE -->|navigates| BROWSER_ROUTE - - style ROOT fill:#e1f5ff - style COLLECTIONS_ROUTE fill:#f3e5f5 - style BROWSER_ROUTE fill:#e8f5e9 -``` - -## Route: /collections - Collections Manager - -```mermaid -graph TB - subgraph Route["Route: /collections"] - COMPONENT["CollectionsManager
(Main Component)"] - end - - subgraph DataStore["🏪 State Management"] - COLLECTIONS_STORE["CollectionsStore"] - STATE["State:
• config
• isLoading
• error"] - COMPUTED["Computed:
• collectionEntries
• collectionEntriesWithLocales
• hasCollections"] - end - - subgraph Services["🔌 Services"] - COLLECTIONS_API["CollectionsApiService"] - HTTP["HttpClient"] - end - - subgraph UITree["📊 Component Tree"] - COMPONENT - HEADER["AppHeader
(Theme Control)"] - GRID["Collection Grid
(Material Table)"] - DIALOG["CollectionFormDialog
(Create/Edit)"] - CONFIRM["ConfirmationDialog
(Delete)"] - end - - subgraph DataFlow["📡 Data Flow"] - LOAD["1. Load collections on init"] - DISPLAY["2. Display in grid from computed"] - CREATE["3. User action: Create/Edit/Delete"] - CALL["4. Call API"] - UPDATE["5. Store updates state"] - REFRESH["6. UI re-renders via signals"] - end - - Route --> COMPONENT - COMPONENT -->|injects| COLLECTIONS_STORE - COMPONENT -->|injects| MAT_DIALOG["MatDialog"] - - COLLECTIONS_STORE --> STATE - COLLECTIONS_STORE --> COMPUTED - COLLECTIONS_STORE -->|uses| COLLECTIONS_API - - COLLECTIONS_API -->|HTTP GET| HTTP - HTTP -->|calls| API["API: GET /api/config"] - - COMPONENT --> UITree - UITree --> HEADER - UITree --> GRID - UITree -.->|launch| DIALOG - UITree -.->|launch| CONFIRM - - DIALOG -->|create/update| COLLECTIONS_API - CONFIRM -->|delete| COLLECTIONS_API - - COLLECTIONS_API -->|patchState| COLLECTIONS_STORE - COLLECTIONS_STORE -->|computed signals| COMPONENT - COMPONENT -->|bound to template| GRID - - LOAD --> DISPLAY --> CREATE --> CALL --> UPDATE --> REFRESH - - style Route fill:#f3e5f5 - style DataStore fill:#c8e6c9 - style Services fill:#bbdefb - style UITree fill:#ffe0b2 - style DataFlow fill:#f8bbd0 -``` - -## Route: /browser/:collectionName - Translation Browser - -```mermaid -graph TB - subgraph Route["Route: /browser/:collectionName"] - COMPONENT["TranslationBrowser
(Master-Detail Layout)"] - end - - subgraph DataStore["🏪 State Management"] - COLLECTIONS_STORE["CollectionsStore"] - BROWSER_STORE["BrowserStore"] - BROWSER_STATE["Browser State:
• selectedCollection
• currentFolderPath
• translations[]
• searchQuery
• densityMode
• selectedLocales
• selectedStatuses
... (60+ properties)"] - BROWSER_COMPUTED["Computed:
• breadcrumbs()
• filteredFolders()
• sortedTranslations()
• displayedTranslations()
• isCacheReady()
• translationCount()"] - end - - subgraph Services["🔌 Services"] - BROWSER_API["BrowserApiService"] - COLLECTIONS_API["CollectionsApiService"] - HTTP["HttpClient"] - LOCAL_STORAGE["localStorage
(View Prefs)"] - end - - subgraph Initialization["🚀 Initialization (OnInit)"] - STEP1["1. Extract collectionName from route"] - STEP2["2. Load collection config from CollectionsStore"] - STEP3["3. Restore view preferences from localStorage"] - STEP4["4. Initialize BrowserStore with collection"] - STEP5["5. Load root folders"] - STEP6["6. Trigger cache status check"] - end - - subgraph Sidebar["📁 Sidebar Components"] - HEADER["SidebarHeader"] - SEARCH["TranslationSearch
(Global search input)"] - FOLDER_TREE["FolderTree
(Hierarchical navigation)"] - LOCALE_FILTER["LocaleFilter
(Multi-select locales)"] - STATUS_FILTER["StatusFilter
(Filter by status)"] - end - - subgraph MainContent["📝 Main Content Components"] - MAIN_HEADER["TranslationMainHeader
(Breadcrumb, controls)"] - LIST["TranslationList
(Virtual scrolled list)"] - ITEMS["TranslationItem[]"] - end - - subgraph DataLoadingFlow["📡 Data Loading Patterns"] - PATTERN1["Pattern 1: Folder Navigation
User clicks folder → loadFolderChildren()
→ API: GET /resources/tree?path=
→ Update translations[] → Display"] - - PATTERN2["Pattern 2: Search
User types search → searchTranslations(query)
→ API: GET /resources/search?q=
→ isSearchMode = true
→ Display searchResults[]"] - - PATTERN3["Pattern 3: Filter
User selects filter → setSelectedLocales/Statuses()
→ filteredFolders() recomputes
→ displayedTranslations() filtered → Display"] - - PATTERN4["Pattern 4: Edit/Create
User opens dialog → TranslationEditorDialog
→ similarResourcesWarning searches
→ Submit → API: POST/PATCH /resources
→ patchState BrowserStore
→ Display updates via signals"] - end - - Route --> COMPONENT - COMPONENT -->|injects| COLLECTIONS_STORE - COMPONENT -->|injects| BROWSER_STORE - COMPONENT -->|effect| STEP1 - - STEP1 --> STEP2 - STEP2 --> STEP3 - STEP3 --> STEP4 - STEP4 --> STEP5 - STEP5 --> STEP6 - - BROWSER_STORE --> BROWSER_STATE - BROWSER_STORE --> BROWSER_COMPUTED - BROWSER_STORE -->|uses| BROWSER_API - COLLECTIONS_STORE -->|uses| COLLECTIONS_API - - BROWSER_API -->|HTTP| HTTP - COLLECTIONS_API -->|HTTP| HTTP - BROWSER_STORE -->|auto-save| LOCAL_STORAGE - LOCAL_STORAGE -->|auto-restore| BROWSER_STORE - - COMPONENT --> Sidebar - COMPONENT --> MainContent - - Sidebar --> SEARCH - Sidebar --> FOLDER_TREE - Sidebar --> LOCALE_FILTER - Sidebar --> STATUS_FILTER - - MainContent --> MAIN_HEADER - MainContent --> LIST - LIST --> ITEMS - - SEARCH -->|updates| BROWSER_STORE - FOLDER_TREE -->|selectFolder()| BROWSER_STORE - LOCALE_FILTER -->|setSelectedLocales()| BROWSER_STORE - STATUS_FILTER -->|setSelectedStatuses()| BROWSER_STORE - - BROWSER_COMPUTED -->|signals| ITEMS - BROWSER_STATE -->|signals| LIST - - Sidebar -.->|uses| PATTERN1 - Sidebar -.->|uses| PATTERN2 - ITEMS -.->|uses| PATTERN3 - ITEMS -.->|uses| PATTERN4 - - style Route fill:#e8f5e9 - style DataStore fill:#c8e6c9 - style Services fill:#bbdefb - style Initialization fill:#fff9c4 - style Sidebar fill:#f1f8e9 - style MainContent fill:#fce4ec - style DataLoadingFlow fill:#ede7f6 -``` - -## Component Tree & Service Injection - Sidebar - -```mermaid -graph TB - BROWSER["TranslationBrowser
(CollectionsStore, BrowserStore)"] - - SIDEBAR["Sidebar"] - HEADER["SidebarHeader
(BrowserStore)"] - SEARCH["TranslationSearch
(BrowserStore)"] - FOLDER_TREE["FolderTree
(BrowserStore)"] - LOCALE_FILTER["LocaleFilter
(BrowserStore)"] - STATUS_FILTER["StatusFilter
(BrowserStore)"] - - FOLDER_NODE["FolderNode (Recursive)
(BrowserStore, emit select)"] - INLINE_INPUT["InlineFolderInput
(BrowserStore)"] - - BROWSER --> SIDEBAR - SIDEBAR --> HEADER - SIDEBAR --> SEARCH - SIDEBAR --> FOLDER_TREE - SIDEBAR --> LOCALE_FILTER - SIDEBAR --> STATUS_FILTER - - FOLDER_TREE --> FOLDER_NODE - FOLDER_NODE -->|recursive| FOLDER_NODE - FOLDER_NODE --> INLINE_INPUT - - %% Signal Bindings - HEADER -->|reads| BREADCRUMBS["breadcrumbs()"] - HEADER -->|reads| COLLECTION["selectedCollection"] - - SEARCH -->|reads| SEARCH_Q["searchQuery"] - SEARCH -->|writes| "searchTranslations()" - - FOLDER_TREE -->|reads| FOLDERS["rootFolders"] - FOLDER_TREE -->|reads| EXPANDED["expandedFolders"] - FOLDER_TREE -->|reads| FILTER["folderTreeFilter"] - FOLDER_TREE -->|writes| "selectFolder()" - - FOLDER_NODE -->|reads| CHILDREN["children (computed)"] - FOLDER_NODE -->|reads| IS_SELECTED["isSelected (computed)"] - FOLDER_NODE -->|emit| SELECT_EVENT["selectFolder()"] - - INLINE_INPUT -->|writes| "createFolder()" - - LOCALE_FILTER -->|reads| LOCALES["filteredLocales()"] - LOCALE_FILTER -->|reads| SEL_LOC["selectedLocales"] - LOCALE_FILTER -->|writes| "setSelectedLocales()" - - STATUS_FILTER -->|reads| SEL_STATUS["selectedStatuses"] - STATUS_FILTER -->|writes| "setSelectedStatuses()" - - style BROWSER fill:#e8f5e9 - style SIDEBAR fill:#f1f8e9 - style FOLDER_TREE fill:#81c784 - style FOLDER_NODE fill:#66bb6a - style HEADER fill:#a5d6a7 - style SEARCH fill:#c8e6c9 - style LOCALE_FILTER fill:#a1887f - style STATUS_FILTER fill:#a1887f -``` - -## Component Tree & Service Injection - Main Content - -```mermaid -graph TB - BROWSER["TranslationBrowser
(CollectionsStore, BrowserStore)"] - - MAIN_CONTENT["Main Content Area"] - MAIN_HEADER["TranslationMainHeader"] - LIST["TranslationList
(BrowserStore, BrowserApiService)"] - ITEM["TranslationItem
(BrowserStore, MatDialog)"] - - ITEM_HEADER["ItemHeader
(Display key, status)"] - ITEM_LOCALES["ItemLocales
(Display translations)"] - ITEM_CONTROLS["ItemCompactControls
(Action buttons)"] - ITEM_ROLLUP["TranslationRollup
(Aggregated locale state)"] - - DIALOGS["Dialogs (lazy-loaded)"] - EDITOR_DIALOG["TranslationEditorDialog
(Create/Edit, BrowserApiService)"] - MOVE_DIALOG["MoveResourceDialog
(BrowserApiService)"] - CONFIRM_DIALOG["ConfirmationDialog
(Delete confirmation)"] - - POPOVERS["Popovers (context menus)"] - COMMENT_POPOVER["CommentPopover
(View/edit comments)"] - TAG_POPOVER["TagListPopover
(View/edit tags)"] - - PIPES["Pipes"] - HIGHLIGHT_PIPE["HighlightPipe
(Search highlighting)"] - TRUNCATE_PIPE["TruncateKeyPipe
(Key truncation)"] - - UI_COMPONENTS["UI Components"] - INDEXING_OVERLAY["IndexingOverlay
(Full-screen loading)"] - SEARCH_INPUT["SearchInput
(Reusable search)"] - TAG_LIST["TagList
(Display tags)"] - - BROWSER --> MAIN_CONTENT - MAIN_CONTENT --> MAIN_HEADER - MAIN_CONTENT --> LIST - - LIST --> ITEM - ITEM --> ITEM_HEADER - ITEM --> ITEM_LOCALES - ITEM --> ITEM_CONTROLS - ITEM --> ITEM_ROLLUP - - ITEM -.->|launch| DIALOGS - DIALOGS --> EDITOR_DIALOG - DIALOGS --> MOVE_DIALOG - DIALOGS --> CONFIRM_DIALOG - - ITEM_HEADER -.->|show| POPOVERS - POPOVERS --> COMMENT_POPOVER - POPOVERS --> TAG_POPOVER - - ITEM_HEADER -->|use| HIGHLIGHT_PIPE - ITEM_HEADER -->|use| TRUNCATE_PIPE - - MAIN_CONTENT -.->|show| UI_COMPONENTS - UI_COMPONENTS --> INDEXING_OVERLAY - UI_COMPONENTS --> SEARCH_INPUT - UI_COMPONENTS --> TAG_LIST - - %% Signal Bindings for List - LIST -->|reads| DISPLAYED["displayedTranslations()"] - LIST -->|reads| SORTED["sortedTranslations()"] - LIST -->|reads| COUNT["translationCount"] - LIST -->|reads| LOADING["isTranslationsLoading"] - - %% Signal Bindings for Items - ITEM -->|reads| KEY["key"] - ITEM -->|reads| BASE_VALUE["baseValue"] - ITEM -->|reads| STATUS["status"] - ITEM -->|reads| TRANSLATIONS["translations { [locale]: value }"] - ITEM -->|reads| SEARCH_Q["searchQuery (for highlighting)"] - ITEM -->|reads| COMPACT_LOCALE["compactLocale (single-locale mode)"] - - %% API Calls - EDITOR_DIALOG -->|POST/PATCH| "BrowserApiService.createResource() / updateResource()" - MOVE_DIALOG -->|PATCH| "BrowserApiService.moveResource()" - CONFIRM_DIALOG -->|DELETE| "BrowserApiService.deleteResource()" - - %% State Updates - "BrowserApiService calls" -->|patchState| "BrowserStore" - "BrowserStore" -->|recompute| "displayedTranslations()" - "displayedTranslations()" -->|signal| ITEM - - style BROWSER fill:#e8f5e9 - style MAIN_CONTENT fill:#fce4ec - style LIST fill:#f48fb1 - style ITEM fill:#ec407a - style ITEM_HEADER fill:#e91e63 - style ITEM_LOCALES fill:#ad1457 - style ITEM_CONTROLS fill:#c2185b - style DIALOGS fill:#ede7f6 - style POPOVERS fill:#f3e5f5 - style PIPES fill:#fff9c4 - style UI_COMPONENTS fill:#e0f2f1 -``` - -## State Update Flow - Creating a Translation - -```mermaid -sequenceDiagram - participant User as User - participant Dialog as TranslationEditorDialog - participant Store as BrowserStore - participant API as BrowserApiService - participant Server as API Server - participant List as TranslationList - - User->>Dialog: Click "Create" button - Dialog->>Dialog: Fill form (key, base value, locales) - User->>Dialog: Submit form - Dialog->>Store: showSimilarWarning() search - Store->>API: searchTranslations(query) - API->>Server: GET /resources/search?q= - Server-->>API: results[] - API-->>Dialog: Display warning - - User->>Dialog: Confirm creation - Dialog->>API: createResource(dto) - API->>Server: POST /collections/{name}/resources - Server->>Server: Create resource file - Server-->>API: { id, key, created_at, ... } - - API->>Store: patchState({ translations: [..., newResource] }) - Store->>Store: Recompute displayedTranslations() - Store->>List: Signal updated - List->>List: Re-render with new item - List-->>User: ✅ New item visible in list - - Dialog->>Dialog: Close - Dialog-->>User: Success notification -``` - -## State Update Flow - Searching Translations - -```mermaid -sequenceDiagram - participant User as User - participant Search as TranslationSearch - participant Store as BrowserStore - participant API as BrowserApiService - participant Server as API Server - participant List as TranslationList - - User->>Search: Type search query "button" - Search->>Store: debounce 300ms (searchQuery) - Store->>Store: isSearchMode = true - Store->>Store: Trigger searchTranslations() rxMethod - Store->>API: searchTranslations(query) - API->>Server: GET /collections/{name}/resources/search?q=button - Server->>Server: Full-text search across all resources - Server-->>API: searchResults[] - API->>Store: patchState({ searchResults, isSearchLoading: false }) - Store->>Store: Recompute displayedTranslations() from searchResults - Store->>List: Signal updated - List->>List: Re-render filtered items - List-->>User: ✅ Display search results - - User->>Search: Clear search - Search->>Store: searchQuery = "" - Store->>Store: isSearchMode = false - Store->>Store: Recompute displayedTranslations() from currentFolder - List->>List: Re-render folder contents - List-->>User: ✅ Back to folder view -``` - -## Storage & Persistence - -```mermaid -graph TB - subgraph Browser["Browser Storage"] - LOCAL_STORAGE["localStorage"] - end - - subgraph Preferences["View Preferences per Collection"] - DENSITY["densityMode: 'compact' | 'medium' | 'full'"] - LOCALES["selectedLocales: string[]"] - NESTED["showNestedResources: boolean"] - SORT_FIELD["sortField: 'key' | 'status'"] - SORT_DIR["sortDirection: 'asc' | 'desc'"] - STATUSES["selectedStatuses: TranslationStatus[]"] - COMPACT_LOCALE["compactLocale: string"] - MANUAL_CHANGE["compactLocaleManuallyChanged: boolean"] - end - - subgraph Key["Storage Key"] - KEY_FORMAT["lingo-tracker:view-prefs:{collectionName}"] - end - - subgraph Lifecycle["Lifecycle"] - ON_INIT["On route init:
Restore preferences from localStorage"] - ON_CHANGE["On user change:
Auto-save to localStorage"] - ON_SELECT["On collection change:
Restore different collection preferences"] - end - - BrowserStore -->|auto-save| LOCAL_STORAGE - LOCAL_STORAGE -->|stores| Preferences - Preferences -->|uses| KEY_FORMAT - Lifecycle -->|controls| BrowserStore - - style Browser fill:#e0f2f1 - style Preferences fill:#b2dfdb - style Key fill:#80cbc4 - style Lifecycle fill:#4db6ac -``` diff --git a/ai/diagrams/ui.md b/ai/diagrams/ui.md deleted file mode 100644 index c29b962e..00000000 --- a/ai/diagrams/ui.md +++ /dev/null @@ -1,311 +0,0 @@ -# Angular UI Architecture - Components & Services - -## Component Hierarchy - -```mermaid -graph TB - subgraph App["🎯 Root Component"] - ROOT["app.ts
Router Outlet"] - end - - subgraph Collections["📋 Collections Module"] - COLLECTIONS_MGR["CollectionsManager"] - COLLECTION_FORM["CollectionFormDialog"] - end - - subgraph Header["🎨 Top Navigation"] - APP_HEADER["AppHeader"] - THEME_SWITCHER["Theme Control
(Light/Dark/System)"] - end - - subgraph Browser["🌐 Translation Browser"] - BROWSER_ROOT["TranslationBrowser
(Master-Detail Layout)"] - - subgraph Sidebar["📁 Sidebar"] - SIDEBAR_HEADER["SidebarHeader"] - FOLDER_TREE["FolderTree
(Hierarchical Navigation)"] - FOLDER_NODE["FolderNode
(Recursive)"] - INLINE_FOLDER_INPUT["InlineFolderInput
(Create Folder)"] - LOCALE_FILTER["LocaleFilter
(Multi-select)"] - STATUS_FILTER["StatusFilter
(new/translated/stale/verified)"] - TRANSLATION_SEARCH["TranslationSearch
(Global Search)"] - end - - subgraph MainContent["📝 Main Content"] - MAIN_HEADER["TranslationMainHeader
(Breadcrumb & Controls)"] - TRANSLATION_LIST["TranslationList
(Virtual Scrolled List)"] - TRANSLATION_ITEM["TranslationItem"] - ITEM_HEADER["ItemHeader
(Key & Status)"] - ITEM_LOCALES["ItemLocales
(Translated Values)"] - ITEM_CONTROLS["ItemCompactControls"] - TRANSLATION_ROLLUP["TranslationRollup
(Aggregated State)"] - end - - subgraph Dialogs["💬 Modal Dialogs"] - EDITOR_DIALOG["TranslationEditorDialog
(Create/Edit)"] - FOLDER_PICKER["FolderPicker"] - SIMILAR_WARNING["SimilarResourcesWarning"] - MOVE_DIALOG["MoveResourceDialog"] - CONFIRM_DIALOG["ConfirmationDialog
(Delete)"] - end - - subgraph UIComponents["🔘 UI Components"] - COMMENT_POPOVER["CommentPopover"] - TAG_LIST_POPOVER["TagListPopover"] - INDEXING_OVERLAY["IndexingOverlay
(Loading State)"] - SEARCH_INPUT["SearchInput"] - TAG_LIST["TagList"] - end - end - - subgraph Pipes["🔄 Pipes"] - HIGHLIGHT_PIPE["HighlightPipe
(Search Highlighting)"] - TRUNCATE_PIPE["TruncateKeyPipe
(Key Truncation)"] - end - - %% App Structure - ROOT --> Collections - ROOT --> Header - ROOT --> Browser - - %% Header - Header --> APP_HEADER - APP_HEADER --> THEME_SWITCHER - - %% Collections - Collections --> COLLECTIONS_MGR - COLLECTIONS_MGR -.->|launch dialog| COLLECTION_FORM - - %% Browser Structure - Browser --> BROWSER_ROOT - BROWSER_ROOT --> Sidebar - BROWSER_ROOT --> MainContent - BROWSER_ROOT --> Dialogs - BROWSER_ROOT --> UIComponents - - %% Sidebar Components - Sidebar --> SIDEBAR_HEADER - Sidebar --> FOLDER_TREE - FOLDER_TREE --> FOLDER_NODE - FOLDER_NODE -->|recursive| FOLDER_NODE - FOLDER_NODE --> INLINE_FOLDER_INPUT - Sidebar --> LOCALE_FILTER - Sidebar --> STATUS_FILTER - Sidebar --> TRANSLATION_SEARCH - - %% Main Content - MainContent --> MAIN_HEADER - MAIN_HEADER --> TRANSLATION_SEARCH - MAIN_HEADER --> LOCALE_FILTER - MAIN_HEADER --> STATUS_FILTER - MainContent --> TRANSLATION_LIST - TRANSLATION_LIST --> TRANSLATION_ITEM - TRANSLATION_ITEM --> ITEM_HEADER - TRANSLATION_ITEM --> ITEM_LOCALES - TRANSLATION_ITEM --> ITEM_CONTROLS - TRANSLATION_ITEM --> TRANSLATION_ROLLUP - TRANSLATION_ITEM -->|pipes| HIGHLIGHT_PIPE - TRANSLATION_ITEM -->|pipes| TRUNCATE_PIPE - - %% Dialogs - TRANSLATION_ITEM -.->|launch| EDITOR_DIALOG - TRANSLATION_ITEM -.->|launch| MOVE_DIALOG - TRANSLATION_ITEM -.->|launch| CONFIRM_DIALOG - EDITOR_DIALOG --> FOLDER_PICKER - EDITOR_DIALOG --> SIMILAR_WARNING - FOLDER_PICKER --> FOLDER_TREE - - %% UI Components - TRANSLATION_ITEM -.->|popover| COMMENT_POPOVER - TRANSLATION_ITEM -.->|popover| TAG_LIST_POPOVER - UIComponents --> TAG_LIST - Browser -.->|full screen| INDEXING_OVERLAY - - style App fill:#e1f5ff - style Collections fill:#f3e5f5 - style Header fill:#fff3e0 - style Browser fill:#e8f5e9 - style Sidebar fill:#f1f8e9 - style MainContent fill:#fce4ec - style Dialogs fill:#ede7f6 - style UIComponents fill:#e0f2f1 - style Pipes fill:#fff9c4 -``` - -## Service Dependencies - -```mermaid -graph LR - subgraph Stores["🏪 NgRx Signals Stores"] - COLLECTIONS_STORE["CollectionsStore
Collections Management"] - BROWSER_STORE["BrowserStore
Translation Browsing"] - end - - subgraph APIServices["🔌 API Services"] - COLLECTIONS_API["CollectionsApiService"] - BROWSER_API["BrowserApiService"] - end - - subgraph SharedServices["🎯 Shared Services"] - THEME_SERVICE["ThemeService
(Light/Dark/System)"] - TRANSLOCO_SERVICE["TranslocoService
(i18n)"] - TRANSLOCO_LOADER["TranslocoHttpLoader"] - end - - subgraph Infrastructure["⚙️ Angular"] - HTTP_CLIENT["HttpClient"] - ROUTER["Router"] - MAT_DIALOG["MatDialog"] - LOCAL_STORAGE["localStorage"] - end - - %% Store Dependencies - COLLECTIONS_STORE -->|uses| COLLECTIONS_API - BROWSER_STORE -->|uses| BROWSER_API - BROWSER_STORE -->|persists| LOCAL_STORAGE - - %% API Services - COLLECTIONS_API -->|HTTP| HTTP_CLIENT - BROWSER_API -->|HTTP| HTTP_CLIENT - - %% Component Injections - Collections -->|inject| COLLECTIONS_STORE - Browser -->|inject| COLLECTIONS_STORE - Browser -->|inject| BROWSER_STORE - APP_HEADER -->|inject| THEME_SERVICE - TRANSLATION_ITEM -->|inject| MAT_DIALOG - - %% Service Dependencies - THEME_SERVICE -->|reads/writes| LOCAL_STORAGE - THEME_SERVICE -->|listens| window.matchMedia - TRANSLOCO_SERVICE -->|uses| TRANSLOCO_LOADER - TRANSLOCO_LOADER -->|HTTP| HTTP_CLIENT - - style Stores fill:#c8e6c9 - style APIServices fill:#bbdefb - style SharedServices fill:#ffe0b2 - style Infrastructure fill:#f0f4c3 -``` - -## Store Architecture - CollectionsStore - -```mermaid -graph TB - subgraph CollectionsStore["CollectionsStore State"] - State["State:
• config
• isLoading
• error"] - Computed["Computed:
• collectionEntries
• collectionEntriesWithLocales
• hasCollections"] - end - - subgraph CollectionsMethods["Store Methods"] - LoadCollections["loadCollections()"] - CreateCollection["createCollection(name, config)"] - UpdateCollection["updateCollection(name, config)"] - DeleteCollection["deleteCollection(name)"] - end - - State --> Computed - Computed --> CollectionsMethods - - style CollectionsStore fill:#c8e6c9 - style CollectionsMethods fill:#a5d6a7 -``` - -## Store Architecture - BrowserStore - -```mermaid -graph TB - subgraph BrowserState["BrowserStore State"] - CollectionState["📦 Collection State
• selectedCollection
• availableLocales
• baseLocale"] - - FolderState["📁 Folder Navigation
• currentFolderPath
• expandedFolders
• rootFolders
• folderTreeFilter
• isFolderTreeLoading
• isAddingFolder"] - - TranslationState["📝 Translation Display
• translations[]
• isTranslationsLoading
• showNestedResources"] - - SearchState["🔍 Search
• searchQuery
• isSearchMode
• searchResults[]
• isSearchLoading"] - - ViewState["🎨 View Preferences
• densityMode (compact|medium|full)
• compactLocale
• sortField (key|status)
• sortDirection
• selectedStatuses[]"] - - CacheState["💾 Cache & Stats
• cacheStatus
• collectionStats"] - - UIState["🖥️ UI State
• isDisabled
• error
• selectedLocales"] - end - - subgraph BrowserComputed["Computed Signals"] - FilteredFolders["filteredFolders()"] - Breadcrumbs["breadcrumbs()"] - DisplayedTranslations["displayedTranslations()"] - SortedTranslations["sortedTranslations()"] - FilteredLocales["filteredLocales()"] - TranslationCount["translationCount()"] - CacheReady["isCacheReady()"] - CanShowMultiple["canShowMultipleLocales()"] - end - - subgraph BrowserMethods["RxMethods - Async Operations"] - SelectFolder["selectFolder(path)"] - LoadRootFolders["loadRootFolders()"] - LoadFolderChildren["loadFolderChildren(path)"] - SearchTranslations["searchTranslations(query)"] - CheckCache["checkCacheStatus()"] - CreateFolder["createFolder(parentPath, name)"] - SetCollection["setSelectedCollection(name)"] - end - - subgraph BrowserFilters["Sync Methods - Filters & View"] - SetDensity["setDensityMode(mode)"] - SetLocales["setSelectedLocales(locales[])"] - SetStatus["setSelectedStatuses(statuses[])"] - SetSort["setSort(field, direction)"] - ToggleNested["toggleShowNestedResources()"] - SetCompactLocale["setCompactLocale(locale)"] - end - - subgraph Persistence["💾 Persistence"] - SavePrefs["Auto-saved to localStorage
Key: lingo-tracker:view-prefs:{collectionName}"] - RestorePrefs["Auto-restored on collection selection"] - end - - BrowserState --> BrowserComputed - BrowserState --> BrowserMethods - BrowserState --> BrowserFilters - BrowserMethods --> Persistence - BrowserFilters --> Persistence - - style BrowserState fill:#bbdefb - style BrowserComputed fill:#90caf9 - style BrowserMethods fill:#64b5f6 - style BrowserFilters fill:#42a5f5 - style Persistence fill:#f8bbd0 -``` - -## API Endpoints Used by UI - -```mermaid -graph LR - API["NestJS API
/api"] - - Config["GET /config"] - Collections["POST /collections/:name
GET /collections/:name
PUT /collections/:name
DELETE /collections/:name"] - Resources["GET /collections/:name/resources/tree
GET /collections/:name/resources/search
POST /collections/:name/resources
PATCH /collections/:name/resources/:id
DELETE /collections/:name/resources/:id"] - Folders["POST /collections/:name/folders"] - Cache["GET /collections/:name/resources/cache/status"] - - API --> Config - API --> Collections - API --> Resources - API --> Folders - API --> Cache - - Config -.->|CollectionsStore| COLLECTIONS_STORE - Collections -.->|CollectionsStore| COLLECTIONS_STORE - Resources -.->|BrowserStore| BROWSER_STORE - Folders -.->|BrowserStore| BROWSER_STORE - Cache -.->|BrowserStore| BROWSER_STORE - - style API fill:#ffccbc - style Config fill:#ffe0b2 - style Collections fill:#ffd699 - style Resources fill:#ffcc80 - style Folders fill:#ffb74d - style Cache fill:#ffa726 -``` From ef95a753ef8c86ca86b95c81d1c4b8ed5a52e7c0 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 17:30:06 -0700 Subject: [PATCH 06/13] chore(tracker): add Russian translations --- .lingo-tracker.json | 39 +++- .../src/i18n/app/footer/resource_entries.json | 37 ++-- .../src/i18n/app/footer/tracker_meta.json | 27 ++- .../src/i18n/app/resource_entries.json | 9 +- apps/tracker/src/i18n/app/tracker_meta.json | 7 +- .../browser/density/resource_entries.json | 37 ++-- .../i18n/browser/density/tracker_meta.json | 27 ++- .../dialog/deleteFolder/resource_entries.json | 16 +- .../dialog/deleteFolder/tracker_meta.json | 12 +- .../deleteResource/resource_entries.json | 16 +- .../dialog/deleteResource/tracker_meta.json | 12 +- .../dialog/moveFolder/resource_entries.json | 16 +- .../dialog/moveFolder/tracker_meta.json | 12 +- .../browser/folderInput/resource_entries.json | 23 ++- .../browser/folderInput/tracker_meta.json | 17 +- .../browser/folderNode/resource_entries.json | 30 ++- .../i18n/browser/folderNode/tracker_meta.json | 22 ++- .../folderPicker/resource_entries.json | 93 ++++++--- .../browser/folderPicker/tracker_meta.json | 67 ++++++- .../browser/folderTree/resource_entries.json | 37 ++-- .../i18n/browser/folderTree/tracker_meta.json | 27 ++- .../indexingOverlay/resource_entries.json | 23 ++- .../browser/indexingOverlay/tracker_meta.json | 17 +- .../localeFilter/resource_entries.json | 9 +- .../browser/localeFilter/tracker_meta.json | 7 +- .../browser/placeholder/resource_entries.json | 11 +- .../browser/placeholder/tracker_meta.json | 17 +- .../src/i18n/browser/resource_entries.json | 115 ++++++++---- .../similarTranslations/resource_entries.json | 37 ++-- .../similarTranslations/tracker_meta.json | 27 ++- .../i18n/browser/status/resource_entries.json | 30 ++- .../src/i18n/browser/status/tracker_meta.json | 22 ++- .../statusFilter/resource_entries.json | 16 +- .../browser/statusFilter/tracker_meta.json | 12 +- .../i18n/browser/toast/resource_entries.json | 177 +++++++++++++----- .../src/i18n/browser/toast/tracker_meta.json | 127 ++++++++++++- .../src/i18n/browser/tracker_meta.json | 117 +++++++++++- .../commentConfirm/resource_entries.json | 30 ++- .../commentConfirm/tracker_meta.json | 22 ++- .../conflict/resource_entries.json | 30 ++- .../conflict/tracker_meta.json | 22 ++- .../error/resource_entries.json | 51 +++-- .../translationEditor/error/tracker_meta.json | 37 +++- .../translationEditor/resource_entries.json | 177 +++++++++++++----- .../tab/resource_entries.json | 23 ++- .../translationEditor/tab/tracker_meta.json | 17 +- .../translationEditor/tracker_meta.json | 127 ++++++++++++- .../translationItem/resource_entries.json | 65 +++++-- .../browser/translationItem/tracker_meta.json | 47 ++++- .../translationList/resource_entries.json | 9 +- .../browser/translationList/tracker_meta.json | 7 +- .../translationSearch/resource_entries.json | 9 +- .../translationSearch/tracker_meta.json | 7 +- .../collections/card/resource_entries.json | 25 ++- .../i18n/collections/card/tracker_meta.json | 17 +- .../dialog/create/resource_entries.json | 5 +- .../dialog/create/tracker_meta.json | 7 +- .../dialog/delete/resource_entries.json | 8 +- .../dialog/delete/tracker_meta.json | 12 +- .../dialog/edit/resource_entries.json | 5 +- .../collections/dialog/edit/tracker_meta.json | 7 +- .../collections/dialog/resource_entries.json | 35 ++-- .../i18n/collections/dialog/tracker_meta.json | 57 +++++- .../emptyState/resource_entries.json | 8 +- .../collections/emptyState/tracker_meta.json | 12 +- .../form/errors/resource_entries.json | 5 +- .../collections/form/errors/tracker_meta.json | 7 +- .../collections/form/resource_entries.json | 14 +- .../i18n/collections/form/tracker_meta.json | 22 ++- .../i18n/collections/resource_entries.json | 8 +- .../collections/toast/resource_entries.json | 42 +++-- .../i18n/collections/toast/tracker_meta.json | 42 ++++- .../src/i18n/collections/tracker_meta.json | 12 +- .../i18n/common/actions/resource_entries.json | 80 +++++--- .../src/i18n/common/actions/tracker_meta.json | 72 ++++++- .../src/i18n/data/resource_entries.json | 9 +- apps/tracker/src/i18n/data/tracker_meta.json | 7 +- .../src/i18n/header/resource_entries.json | 30 ++- .../tracker/src/i18n/header/tracker_meta.json | 22 ++- .../src/i18n/locale/resource_entries.json | 16 +- .../tracker/src/i18n/locale/tracker_meta.json | 12 +- .../src/i18n/theme/resource_entries.json | 14 +- apps/tracker/src/i18n/theme/tracker_meta.json | 22 ++- 83 files changed, 2182 insertions(+), 479 deletions(-) diff --git a/.lingo-tracker.json b/.lingo-tracker.json index 9e7dbc22..715e632d 100644 --- a/.lingo-tracker.json +++ b/.lingo-tracker.json @@ -2,20 +2,49 @@ "exportFolder": "dist/lingo-export", "importFolder": "dist/lingo-import", "baseLocale": "en", - "locales": ["en", "fr-ca", "es", "de", "ja"], + "locales": [ + "en", + "fr-ca", + "es", + "de", + "ja" + ], "collections": { "TestDataPlayground": { "translationsFolder": "sample-translations/playground", - "locales": ["en", "fr-ca", "es", "de", "ja"] + "locales": [ + "en", + "fr-ca", + "es", + "de", + "ja" + ] }, "trackerResources": { "translationsFolder": "apps/tracker/src/i18n", - "locales": ["en", "es", "fr-ca"] + "locales": [ + "en", + "es", + "fr-ca", + "ru" + ] }, "mockDesignSystem": { "translationsFolder": "sample-translations/mock-design-system", "importFolder": "dist/ds-translations", - "locales": ["ar", "de", "es", "fr-ca", "fr-fr", "is", "ja", "ko", "nl", "pt-br", "sv"] + "locales": [ + "ar", + "de", + "es", + "fr-ca", + "fr-fr", + "is", + "ja", + "ko", + "nl", + "pt-br", + "sv" + ] } }, "translation": { @@ -42,4 +71,4 @@ "typeDistFile": "./apps/tracker/src/i18n-types/tracker-resources.ts" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/footer/resource_entries.json b/apps/tracker/src/i18n/app/footer/resource_entries.json index e470340b..a0963a8f 100644 --- a/apps/tracker/src/i18n/app/footer/resource_entries.json +++ b/apps/tracker/src/i18n/app/footer/resource_entries.json @@ -2,36 +2,51 @@ "madeBy": { "source": "Tools by SimonCodes-CA", "comment": "Footer attribution text; SimonCodes-CA is a brand name and should not be translated", - "tags": ["app"], + "tags": [ + "app" + ], "es": "Herramientas de SimonCodes-CA", - "fr-ca": "Outils de SimonCodes-CA" + "fr-ca": "Outils de SimonCodes-CA", + "ru": "Инструменты от SimonCodes-CA" }, "githubTitle": { "source": "GitHub Repository", "comment": "Tooltip/title for the GitHub link in the footer", - "tags": ["app"], + "tags": [ + "app" + ], "es": "Repositorio de GitHub", - "fr-ca": "Dépôt GitHub" + "fr-ca": "Dépôt GitHub", + "ru": "Репозиторий GitHub" }, "githubLabel": { "source": "GitHub", "comment": "Visible label for the GitHub link in the footer", - "tags": ["app"], + "tags": [ + "app" + ], "es": "GitHub", - "fr-ca": "GitHub" + "fr-ca": "GitHub", + "ru": "GitHub" }, "issuesTitle": { "source": "Report an Issue", "comment": "Tooltip/title for the Issues link in the footer", - "tags": ["app"], + "tags": [ + "app" + ], "es": "Informar un problema", - "fr-ca": "Signaler un problème" + "fr-ca": "Signaler un problème", + "ru": "Сообщить о проблеме" }, "issuesLabel": { "source": "Issues", "comment": "Visible label for the Issues link in the footer", - "tags": ["app"], + "tags": [ + "app" + ], "es": "Asuntos", - "fr-ca": "Problèmes" + "fr-ca": "Problèmes", + "ru": "Проблемы" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/footer/tracker_meta.json b/apps/tracker/src/i18n/app/footer/tracker_meta.json index fb04a1bd..b62b1889 100644 --- a/apps/tracker/src/i18n/app/footer/tracker_meta.json +++ b/apps/tracker/src/i18n/app/footer/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "3b5b0ef2d1ba39310908b2533bfad938", "baseChecksum": "228e177a7df025238b894f2ae0026f34", "status": "translated" + }, + "ru": { + "checksum": "bff63c3ad261cf3012d39009a567b8d2", + "baseChecksum": "228e177a7df025238b894f2ae0026f34", + "status": "translated" } }, "githubTitle": { @@ -27,6 +32,11 @@ "checksum": "6dec98956e678475c578da6924a7b582", "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", "status": "translated" + }, + "ru": { + "checksum": "4e7b4d27eeda52dff555a4c657e5dd96", + "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", + "status": "translated" } }, "githubLabel": { @@ -42,6 +52,11 @@ "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "status": "translated" + }, + "ru": { + "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "status": "translated" } }, "issuesTitle": { @@ -57,6 +72,11 @@ "checksum": "5238d59077988c93ae554981b20fc64e", "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", "status": "translated" + }, + "ru": { + "checksum": "0949cf4c28d447f70367d086dec62847", + "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", + "status": "translated" } }, "issuesLabel": { @@ -72,6 +92,11 @@ "checksum": "e040a699fc6d0d5808cfdaf3d1fa7146", "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", "status": "translated" + }, + "ru": { + "checksum": "f9890ec0744946bb63769a8bebab69d3", + "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/resource_entries.json b/apps/tracker/src/i18n/app/resource_entries.json index b3f9ae51..d7cc4d9f 100644 --- a/apps/tracker/src/i18n/app/resource_entries.json +++ b/apps/tracker/src/i18n/app/resource_entries.json @@ -2,8 +2,11 @@ "skipToMainContent": { "source": "Skip to main content", "comment": "Accessibility link at top of page for keyboard navigation", - "tags": ["app"], + "tags": [ + "app" + ], "es": "Saltar al contenido principal", - "fr-ca": "Passer au contenu principal" + "fr-ca": "Passer au contenu principal", + "ru": "Перейти к основному содержимому" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/tracker_meta.json b/apps/tracker/src/i18n/app/tracker_meta.json index 788352ee..f06d2634 100644 --- a/apps/tracker/src/i18n/app/tracker_meta.json +++ b/apps/tracker/src/i18n/app/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "1b832d4bc3ea43f017b16032aff04f57", "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", "status": "translated" + }, + "ru": { + "checksum": "26915f78356945d1b403f0c694a320b7", + "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/resource_entries.json b/apps/tracker/src/i18n/browser/density/resource_entries.json index b2b65e9b..c8c4579a 100644 --- a/apps/tracker/src/i18n/browser/density/resource_entries.json +++ b/apps/tracker/src/i18n/browser/density/resource_entries.json @@ -2,36 +2,51 @@ "compactTooltip": { "source": "Compact — 2-line view, high density", "comment": "Tooltip for compact density mode toggle button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Compacto: vista de 2 líneas, alta densidad", - "fr-ca": "Compact — affichage sur 2 lignes, haute densité" + "fr-ca": "Compact — affichage sur 2 lignes, haute densité", + "ru": "Компактный — двухстрочный режим отображения, высокая плотность пикселей." }, "fullTooltip": { "source": "Full — detailed view with comments and all locales", "comment": "Tooltip for full density mode toggle button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Completo: vista detallada con comentarios y todas las configuraciones regionales", - "fr-ca": "Vue complète et détaillée avec commentaires et toutes les langues" + "fr-ca": "Vue complète et détaillée avec commentaires et toutes les langues", + "ru": "Полный — подробный просмотр с комментариями и всеми локалями." }, "modeAriaLabel": { "source": "Density mode", "comment": "Aria-label for the density mode button toggle group in the translation header", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Modo de densidad", - "fr-ca": "Mode de densité" + "fr-ca": "Mode de densité", + "ru": "Режим плотности" }, "compactAriaLabel": { "source": "Compact density", "comment": "Aria-label for the compact density toggle button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Densidad compacta", - "fr-ca": "Densité compacte" + "fr-ca": "Densité compacte", + "ru": "Плотная компактность" }, "fullAriaLabel": { "source": "Full density", "comment": "Aria-label for the full density toggle button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Densidad completa", - "fr-ca": "Densité maximale" + "fr-ca": "Densité maximale", + "ru": "Полная плотность" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/tracker_meta.json b/apps/tracker/src/i18n/browser/density/tracker_meta.json index bfa76b92..7e44cfc1 100644 --- a/apps/tracker/src/i18n/browser/density/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/density/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "025c48513c4533a98b4139d4e8f67586", "baseChecksum": "99ec7955eb135928d0c239b3521140c3", "status": "translated" + }, + "ru": { + "checksum": "7a9e12bfd5f2b9d7d515dd12bc1e1648", + "baseChecksum": "99ec7955eb135928d0c239b3521140c3", + "status": "translated" } }, "fullTooltip": { @@ -27,6 +32,11 @@ "checksum": "7b767ce788c57fcd14e10cdb49971793", "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", "status": "translated" + }, + "ru": { + "checksum": "9253533a9c6f633f47a7a31e6d70967f", + "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", + "status": "translated" } }, "modeAriaLabel": { @@ -42,6 +52,11 @@ "checksum": "a8deb5c9ddf138a8c9a5e5380b4b8840", "baseChecksum": "cee89fa354411866e20092652b6b8b07", "status": "translated" + }, + "ru": { + "checksum": "d2294477be4875018ebaf26767da8417", + "baseChecksum": "cee89fa354411866e20092652b6b8b07", + "status": "translated" } }, "compactAriaLabel": { @@ -57,6 +72,11 @@ "checksum": "44b0660e4de6ad0ce2f92157587e7436", "baseChecksum": "e44615f2f134cfe073e2960672aa7489", "status": "translated" + }, + "ru": { + "checksum": "20eb9947c9abcea7710df5bd48843039", + "baseChecksum": "e44615f2f134cfe073e2960672aa7489", + "status": "translated" } }, "fullAriaLabel": { @@ -72,6 +92,11 @@ "checksum": "903502f8b1f4972daef6f8d171fd5b71", "baseChecksum": "02474f847ab2138e522a31349e7aec0f", "status": "translated" + }, + "ru": { + "checksum": "f00efad4d0bd99baff6504bfb45dc3e8", + "baseChecksum": "02474f847ab2138e522a31349e7aec0f", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json index f019db43..f1f5d94b 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json @@ -2,15 +2,21 @@ "title": { "source": "Delete Folder", "comment": "Title of the confirmation dialog when deleting a folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Eliminar carpeta", - "fr-ca": "Supprimer le dossier" + "fr-ca": "Supprimer le dossier", + "ru": "Удалить папку" }, "messageX": { "source": "Delete \"{name}\" and all its contents?", "comment": "Confirmation message when deleting a folder, interpolated with the folder name", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "¿Eliminar \"{name}\" y todo su contenido?", - "fr-ca": "Supprimer \"{name}\" et tout son contenu ?" + "fr-ca": "Supprimer \"{name}\" et tout son contenu ?", + "ru": "Удалить \"{name}\" и всё его содержимое?" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json index d5dc682d..f4f0d637 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "7710100989dd0487c8751db81bca3901", "baseChecksum": "991e322cd8225c369a963bb60b0a9688", "status": "translated" + }, + "ru": { + "checksum": "134da182ff56e65fa18a6e704a316e02", + "baseChecksum": "991e322cd8225c369a963bb60b0a9688", + "status": "translated" } }, "messageX": { @@ -27,6 +32,11 @@ "checksum": "db2c2daa6645cda8f415809bbec8bba2", "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", "status": "stale" + }, + "ru": { + "checksum": "8820a2771dfcb540ed217136d4e67460", + "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json index 88995a4d..a151cec6 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json @@ -2,15 +2,21 @@ "title": { "source": "Delete Resource", "comment": "Title of the confirmation dialog when deleting a resource", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Eliminar recurso", - "fr-ca": "Supprimer la ressource" + "fr-ca": "Supprimer la ressource", + "ru": "Удалить ресурс" }, "messageX": { "source": "Are you sure you want to delete the resource \"{key}\"? This action cannot be undone.", "comment": "Confirmation message when deleting a resource, interpolated with the resource key", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "¿Seguro que desea eliminar el recurso \"{key}\"? Esta acción no se puede deshacer.", - "fr-ca": "Êtes-vous certain de vouloir supprimer la ressource « {key} » ? Cette action est irréversible." + "fr-ca": "Êtes-vous certain de vouloir supprimer la ressource « {key} » ? Cette action est irréversible.", + "ru": "Вы уверены, что хотите удалить ресурс \"{key}\"? Это действие необратимо." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json index c5032198..a0055034 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "a56e2e5c2d55f4ee33b68aa628d0fa3e", "baseChecksum": "7091aa93a78122401125a34800f9a1ac", "status": "translated" + }, + "ru": { + "checksum": "30058d276a708b6f046031fed91baf35", + "baseChecksum": "7091aa93a78122401125a34800f9a1ac", + "status": "translated" } }, "messageX": { @@ -27,6 +32,11 @@ "checksum": "8c4dc291d4e9879be2c9a5e2faae5df7", "baseChecksum": "ac83571aec2e065433da7fd905696d5f", "status": "stale" + }, + "ru": { + "checksum": "80a3d311146ea968e4debaa343339da6", + "baseChecksum": "ac83571aec2e065433da7fd905696d5f", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json index eebc8b99..fed0a3c5 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json @@ -2,15 +2,21 @@ "title": { "source": "Move Folder", "comment": "Title of the confirmation dialog when moving a folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Mover carpeta", - "fr-ca": "Déplacer le dossier" + "fr-ca": "Déplacer le dossier", + "ru": "Переместить папку" }, "messageX": { "source": "Move folder \"{name}\" and all its contents to \"{dest}\"?", "comment": "Confirmation message when moving a folder, interpolated with folder name and destination", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "¿Mover la carpeta \"{name}\" y todo su contenido a \"{dest}\"?", - "fr-ca": "Déplacer le dossier \"{name}\" et tout son contenu vers \"{dest}\" ?" + "fr-ca": "Déplacer le dossier \"{name}\" et tout son contenu vers \"{dest}\" ?", + "ru": "Переместить папку \"{name}\" и все ее содержимое в \"{dest}\"?" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json index b8ee7c7f..1fb3b3a8 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "b3009170157da9eb03bd31db89b85c04", "baseChecksum": "1c10ed990d6445081dfd3828812355e5", "status": "translated" + }, + "ru": { + "checksum": "2506a41030af5ca68c85b9a0f7adef40", + "baseChecksum": "1c10ed990d6445081dfd3828812355e5", + "status": "translated" } }, "messageX": { @@ -27,6 +32,11 @@ "checksum": "8f741688880541fe5c8fc950c9006d6f", "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", "status": "stale" + }, + "ru": { + "checksum": "1f0f24b76f5ae12fc19a83863b053b7b", + "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json index 5c6868e7..d52e291b 100644 --- a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json @@ -2,22 +2,31 @@ "placeholder": { "source": "Folder name", "comment": "Placeholder text in the inline folder name input field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Nombre de la carpeta", - "fr-ca": "Nom du dossier" + "fr-ca": "Nom du dossier", + "ru": "Название папки" }, "nameRequired": { "source": "Folder name is required", "comment": "Validation error when folder name input is empty", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "El nombre de la carpeta es obligatorio", - "fr-ca": "Le nom du dossier est requis." + "fr-ca": "Le nom du dossier est requis.", + "ru": "Название папки обязательно для указания." }, "namePatternError": { "source": "Only letters, numbers, dashes, and underscores allowed", "comment": "Validation error when folder name contains invalid characters", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Solo se permiten letras, números, guiones y guiones bajos.", - "fr-ca": "Seules les lettres, les chiffres, les tirets et les traits de soulignement sont autorisés." + "fr-ca": "Seules les lettres, les chiffres, les tirets et les traits de soulignement sont autorisés.", + "ru": "Разрешается использовать только буквы, цифры, дефисы и подчеркивания." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json index 3562d4c2..93760d9e 100644 --- a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "49e66c56efe7e867c359433ad728ac90", "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", "status": "translated" + }, + "ru": { + "checksum": "16f4890b29f8f7a793855f9b5ac7724b", + "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", + "status": "translated" } }, "nameRequired": { @@ -27,6 +32,11 @@ "checksum": "014a2178e84ad240b882e4adff49127e", "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", "status": "translated" + }, + "ru": { + "checksum": "52eded3a97c8d5c4ce2d1becc044f39a", + "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", + "status": "translated" } }, "namePatternError": { @@ -42,6 +52,11 @@ "checksum": "a83915a6f013b0e5f19b3a807145e8eb", "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", "status": "translated" + }, + "ru": { + "checksum": "b4dfbb94d2174527e3e49435e8d37cdf", + "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json index 112cfecf..9391fa49 100644 --- a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json @@ -2,29 +2,41 @@ "newChip": { "source": "New", "comment": "Badge shown on a folder node immediately after it is created", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Nuevo", - "fr-ca": "Nouveau" + "fr-ca": "Nouveau", + "ru": "Новый" }, "folderAriaLabelX": { "source": "Folder { name }", "comment": "Aria-label for a folder node in the tree. { name } is the folder name", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Carpeta { nombre }", - "fr-ca": "Dossier { nom }" + "fr-ca": "Dossier { nom }", + "ru": "Папка { имя }" }, "dragToMoveFolderAriaLabel": { "source": "Drag to move folder", "comment": "Aria-label for the drag handle icon on a folder node", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Arrastrar para mover la carpeta", - "fr-ca": "Faites glisser pour déplacer le dossier" + "fr-ca": "Faites glisser pour déplacer le dossier", + "ru": "Перетащите, чтобы переместить папку." }, "deleteFolderAriaLabelX": { "source": "Delete folder { name }", "comment": "Aria-label for the delete button on a folder node. { name } is the folder name", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Eliminar carpeta { nombre }", - "fr-ca": "Supprimer le dossier { nom }" + "fr-ca": "Supprimer le dossier { nom }", + "ru": "Удалить папку {имя}" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json index 2ed93420..ace8d063 100644 --- a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "9ea17b10f506b881fed906aab0a50f8d", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "ru": { + "checksum": "97ae6e0bca16b37dbdc5e324d0ecaf60", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "folderAriaLabelX": { @@ -27,6 +32,11 @@ "checksum": "aaf5400b2f5e2d034201e563be05efd9", "baseChecksum": "2807ee06f9cee829069ff722e0076f63", "status": "translated" + }, + "ru": { + "checksum": "6c01295f55133a6381deaa9b19f298ed", + "baseChecksum": "2807ee06f9cee829069ff722e0076f63", + "status": "translated" } }, "dragToMoveFolderAriaLabel": { @@ -42,6 +52,11 @@ "checksum": "99ddcde95a1ca2801821826f38b538b4", "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", "status": "translated" + }, + "ru": { + "checksum": "c02424c40807563ededc26e70ee7764d", + "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", + "status": "translated" } }, "deleteFolderAriaLabelX": { @@ -57,6 +72,11 @@ "checksum": "1b45ccc834ef6f20800df6bb073ab938", "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", "status": "translated" + }, + "ru": { + "checksum": "4ece16ddf1acf1166eda7b86121240de", + "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json index 0642cad6..b84bba4d 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json @@ -2,92 +2,131 @@ "folderAriaLabelX": { "source": "Folder {name}", "comment": "Aria-label for a folder node in the picker tree", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Carpeta {name}", - "fr-ca": "Dossier {name}" + "fr-ca": "Dossier {name}", + "ru": "Папка {name}" }, "collapse": { "source": "Collapse", "comment": "Aria-label for collapse button on a folder tree node", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Colapsar", - "fr-ca": "Effondrement" + "fr-ca": "Effondrement", + "ru": "Крах" }, "expand": { "source": "Expand", "comment": "Aria-label for expand button on a folder tree node", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Expandir", - "fr-ca": "Élargir" + "fr-ca": "Élargir", + "ru": "Расширять" }, "addSubfolderToX": { "source": "Add subfolder to {name}", "comment": "Aria-label for add subfolder button on a folder node", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Agregar subcarpeta a {name}", - "fr-ca": "Ajouter un sous-dossier à {name}" + "fr-ca": "Ajouter un sous-dossier à {name}", + "ru": "Добавить подпапку в {name}" }, "folderLabel": { "source": "Folder:", "comment": "Label prefix for the selected folder path in the folder picker", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Carpeta:", - "fr-ca": "Dossier :" + "fr-ca": "Dossier :", + "ru": "Папка:" }, "noFoldersYet": { "source": "No folders yet", "comment": "Empty state message in folder picker when there are no folders", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No hay carpetas todavía", - "fr-ca": "Aucun dossier pour le moment" + "fr-ca": "Aucun dossier pour le moment", + "ru": "Папок пока нет." }, "createFirstFolder": { "source": "Create First Folder", "comment": "Button text to create the first folder when there are none", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Crear la primera carpeta", - "fr-ca": "Créer le premier dossier" + "fr-ca": "Créer le premier dossier", + "ru": "Создать первую папку" }, "folderCreated": { "source": "Folder created successfully", "comment": "Snackbar message after creating a folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Carpeta creada exitosamente", - "fr-ca": "Dossier créé avec succès" + "fr-ca": "Dossier créé avec succès", + "ru": "Папка успешно создана." }, "folderAlreadyExists": { "source": "Folder already exists", "comment": "Snackbar message when trying to create a folder that already exists", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "La carpeta ya existe", - "fr-ca": "Le dossier existe déjà." + "fr-ca": "Le dossier existe déjà.", + "ru": "Папка уже существует" }, "createFolderFailed": { "source": "Failed to create folder", "comment": "Snackbar error message when folder creation fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo crear la carpeta", - "fr-ca": "Impossible de créer le dossier" + "fr-ca": "Impossible de créer le dossier", + "ru": "Не удалось создать папку." }, "rootLabel": { "source": "root", "comment": "Label displayed when the selected folder is the root (empty path)", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "raíz", - "fr-ca": "racine" + "fr-ca": "racine", + "ru": "корень" }, "selectorAriaLabelX": { "source": "Folder selector, currently: { path }", "comment": "Aria-label for the folder picker header button. { path } is the currently selected folder path", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Selector de carpeta, actualmente: { ruta }", - "fr-ca": "Sélecteur de dossier, présentement : { chemin }" + "fr-ca": "Sélecteur de dossier, présentement : { chemin }", + "ru": "Селектор папки, в данный момент: { путь }" }, "treeAriaLabel": { "source": "Folder tree", "comment": "Aria-label for the folder tree container in the folder picker", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Árbol de carpetas", - "fr-ca": "Arborescence des dossiers" + "fr-ca": "Arborescence des dossiers", + "ru": "Дерево папок" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json index 52cc66fd..1c104515 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "579125b969a55e9f1429775d20e2faa5", "baseChecksum": "16708b0cacde01471507891eb88bcf2b", "status": "stale" + }, + "ru": { + "checksum": "91946bcd8bb4cbac5db6c724fee19b1f", + "baseChecksum": "16708b0cacde01471507891eb88bcf2b", + "status": "translated" } }, "collapse": { @@ -27,6 +32,11 @@ "checksum": "0296e4551eb2a71666f3b95299fabc4d", "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", "status": "translated" + }, + "ru": { + "checksum": "f4c615603939c75033535b2c78761789", + "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", + "status": "translated" } }, "expand": { @@ -42,6 +52,11 @@ "checksum": "0f16886ce9ef9bd31180b466a01600b1", "baseChecksum": "8098b34f582537833b36b58273c3545b", "status": "translated" + }, + "ru": { + "checksum": "b9db830bf9c8d16e36fcd353c4fb95e8", + "baseChecksum": "8098b34f582537833b36b58273c3545b", + "status": "translated" } }, "addSubfolderToX": { @@ -57,6 +72,11 @@ "checksum": "7a3c0707dbd14091260a5aca97d25f02", "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", "status": "stale" + }, + "ru": { + "checksum": "da6ae24598b43f425bbeb36a05a35bed", + "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", + "status": "translated" } }, "folderLabel": { @@ -72,6 +92,11 @@ "checksum": "c836c1633a42ce6abf860a6770e3fe9e", "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", "status": "translated" + }, + "ru": { + "checksum": "0bde293383ace742393f9d7ab4c6d6f2", + "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", + "status": "translated" } }, "noFoldersYet": { @@ -87,6 +112,11 @@ "checksum": "cd295ee735fe0fd2a8702978f20719f3", "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", "status": "translated" + }, + "ru": { + "checksum": "22b8692bfbcda0a1e43ca4521408a6cb", + "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", + "status": "translated" } }, "createFirstFolder": { @@ -102,6 +132,11 @@ "checksum": "6dbbbf38d3d3d6ce8cc6eb844d606427", "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", "status": "translated" + }, + "ru": { + "checksum": "65b1dd36c11ac5a40d271a0c9f24e964", + "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", + "status": "translated" } }, "folderCreated": { @@ -117,6 +152,11 @@ "checksum": "163f36c9e2f540d418bcfdb38974dfc0", "baseChecksum": "a849da990cd1a54faca8b4923561fc60", "status": "translated" + }, + "ru": { + "checksum": "bf70d281db45c6bd47d2f85bbba6c854", + "baseChecksum": "a849da990cd1a54faca8b4923561fc60", + "status": "translated" } }, "folderAlreadyExists": { @@ -132,6 +172,11 @@ "checksum": "7644a84d1884b115c717bf5e59b5072b", "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", "status": "translated" + }, + "ru": { + "checksum": "460636e13b11c535f44497a274ac16cb", + "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", + "status": "translated" } }, "createFolderFailed": { @@ -147,6 +192,11 @@ "checksum": "3a8006f316f0b8e692ca464c5c728c70", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "ru": { + "checksum": "5c86bb3f4b6b381f42094b79f6e2ba62", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "rootLabel": { @@ -162,6 +212,11 @@ "checksum": "29be74725a0760c1c05e11fa9de518e6", "baseChecksum": "63a9f0ea7bb98050796b649e85481845", "status": "translated" + }, + "ru": { + "checksum": "590f13873371c8324f9c1653ebb33b3c", + "baseChecksum": "63a9f0ea7bb98050796b649e85481845", + "status": "translated" } }, "selectorAriaLabelX": { @@ -177,6 +232,11 @@ "checksum": "944c1bba8a4b6cdb6d462fa4cd6cab58", "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", "status": "translated" + }, + "ru": { + "checksum": "d622603fd981f67772ec7f1bc7845ff3", + "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", + "status": "translated" } }, "treeAriaLabel": { @@ -192,6 +252,11 @@ "checksum": "0046b816158dd1dd70458ce6b0b0dd9e", "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", "status": "translated" + }, + "ru": { + "checksum": "9c33ac0b6e28b319e2c6ac24de0e54b0", + "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json index a030e776..de709012 100644 --- a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json @@ -2,36 +2,51 @@ "filterFoldersAriaLabel": { "source": "Filter folders", "comment": "Aria-label for the folder search input in the folder tree sidebar", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Filtrar carpetas", - "fr-ca": "dossiers de filtrage" + "fr-ca": "dossiers de filtrage", + "ru": "Фильтрация папок" }, "showCurrentFolderTooltip": { "source": "Show only current folder", "comment": "Tooltip and aria-label for the toggle button to show only the current folder's resources", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Mostrar solo la carpeta actual", - "fr-ca": "Afficher uniquement le dossier actuel" + "fr-ca": "Afficher uniquement le dossier actuel", + "ru": "Показать только текущую папку" }, "showNestedResourcesTooltip": { "source": "Show all nested resources", "comment": "Tooltip and aria-label for the toggle button to show all nested resources recursively", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Mostrar todos los recursos anidados", - "fr-ca": "Afficher toutes les ressources imbriquées" + "fr-ca": "Afficher toutes les ressources imbriquées", + "ru": "Показать все вложенные ресурсы" }, "addFolderAriaLabel": { "source": "Add folder", "comment": "Aria-label for the add folder button in the folder tree", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Agregar carpeta", - "fr-ca": "Ajouter un dossier" + "fr-ca": "Ajouter un dossier", + "ru": "Добавить папку" }, "addFolderTooltip": { "source": "Add folder (Ctrl+Shift+N)", "comment": "Tooltip for the add folder button, includes keyboard shortcut", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Agregar carpeta (Ctrl+Shift+N)", - "fr-ca": "Ajouter un dossier (Ctrl+Maj+N)" + "fr-ca": "Ajouter un dossier (Ctrl+Maj+N)", + "ru": "Добавить папку (Ctrl+Shift+N)" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json index 071753bb..58536e8d 100644 --- a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "155631a10eacdcd6d715db7ed8c28196", "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", "status": "translated" + }, + "ru": { + "checksum": "f57d9699734d8deab0bc3f9f0f060be3", + "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", + "status": "translated" } }, "showCurrentFolderTooltip": { @@ -27,6 +32,11 @@ "checksum": "de031154ace17104f7b3f283dfe398df", "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", "status": "translated" + }, + "ru": { + "checksum": "222cea24291a7d6423cfb9b054bd9e47", + "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", + "status": "translated" } }, "showNestedResourcesTooltip": { @@ -42,6 +52,11 @@ "checksum": "6d3f087cfbe8ddfbb48108e78bcd06d9", "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", "status": "translated" + }, + "ru": { + "checksum": "1cf4cbf25a09e2c5d6c5726732ab6bf7", + "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", + "status": "translated" } }, "addFolderAriaLabel": { @@ -57,6 +72,11 @@ "checksum": "72b188201ce2984052b2d7c8b9945c60", "baseChecksum": "b60bc90c77f58812129670659f977dbe", "status": "translated" + }, + "ru": { + "checksum": "ffa55f40fbdf1182b30fc5247a1432c0", + "baseChecksum": "b60bc90c77f58812129670659f977dbe", + "status": "translated" } }, "addFolderTooltip": { @@ -72,6 +92,11 @@ "checksum": "f92b21768583c08ddfde329bbe1b7d03", "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", "status": "translated" + }, + "ru": { + "checksum": "2395fc181f2131519801b06b85121cc8", + "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json index ed92a120..efcda8de 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json @@ -2,22 +2,31 @@ "message": { "source": "Indexing collection...", "comment": "Message shown while the collection cache is being built", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Colección de indexación...", - "fr-ca": "Collection d'indexation..." + "fr-ca": "Collection d'indexation...", + "ru": "Индексирование коллекции..." }, "errorTitle": { "source": "Indexing Failed", "comment": "Title of the error card shown when indexing fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Error de indexación", - "fr-ca": "L'indexation a échoué" + "fr-ca": "L'indexation a échoué", + "ru": "Индексирование не удалось" }, "defaultError": { "source": "An error occurred while indexing the collection.", "comment": "Default error message shown in the indexing overlay when no specific error is available", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se produjo un error al indexar la colección.", - "fr-ca": "Une erreur s'est produite lors de l'indexation de la collection." + "fr-ca": "Une erreur s'est produite lors de l'indexation de la collection.", + "ru": "Произошла ошибка при индексировании коллекции." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json index fd09b0fd..4e04beba 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "2a184dd464b0f6a7199e01d15f1f185b", "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", "status": "translated" + }, + "ru": { + "checksum": "e6be89a9e89333c4134ca0260c94b521", + "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", + "status": "translated" } }, "errorTitle": { @@ -27,6 +32,11 @@ "checksum": "ec2254857a194f7e76c7ac5d14e7337c", "baseChecksum": "bdb612b5237ec3727393283341b07e0e", "status": "translated" + }, + "ru": { + "checksum": "668e2616a7e2ad25f5c5414c3232adbb", + "baseChecksum": "bdb612b5237ec3727393283341b07e0e", + "status": "translated" } }, "defaultError": { @@ -42,6 +52,11 @@ "checksum": "d1352f09b538c934478dc5f0050c8b0d", "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", "status": "translated" + }, + "ru": { + "checksum": "15092bbfb45097e6177acd73307896f3", + "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json index 7030375b..7fe8dd6e 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json @@ -2,8 +2,11 @@ "ariaLabelX": { "source": "Filter locales. Currently showing: { text }", "comment": "Aria-label for the locale filter button. { text } is the current filter display text (e.g. 'All' or a locale code)", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Filtrar regiones. Actualmente se muestra: {texto}", - "fr-ca": "Filtrer les paramètres régionaux. Affichage actuel : { texte }" + "fr-ca": "Filtrer les paramètres régionaux. Affichage actuel : { texte }", + "ru": "Фильтр по языкам. В данный момент отображается: { текст }" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json index d8ffd773..3c234077 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "ac4c82f234ba7f6fb0ac78e8d8dc395b", "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", "status": "translated" + }, + "ru": { + "checksum": "d44d30a0dbadd7dbcaebfe9f596e7a6a", + "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json index 8a9c6096..cd9ab3d8 100644 --- a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json @@ -3,18 +3,21 @@ "source": "Translation Browser Coming Soon", "comment": "Placeholder title for browser feature", "es": "Navegador de traducción disponible próximamente", - "fr-ca": "Navigateur de traduction bientôt disponible" + "fr-ca": "Navigateur de traduction bientôt disponible", + "ru": "Браузер для перевода скоро появится." }, "message": { "source": "The translation browser feature is currently under development. Soon you'll be able to view, edit, and manage all translations within this collection.", "comment": "Placeholder message explaining feature status", "es": "La función de búsqueda de traducciones está en desarrollo. Pronto podrás ver, editar y gestionar todas las traducciones de esta colección.", - "fr-ca": "La fonctionnalité du navigateur de traductions est en cours de développement. Vous pourrez bientôt consulter, modifier et gérer toutes les traductions de cette collection." + "fr-ca": "La fonctionnalité du navigateur de traductions est en cours de développement. Vous pourrez bientôt consulter, modifier et gérer toutes les traductions de cette collection.", + "ru": "Функция просмотра переводов в настоящее время находится в разработке. Вскоре вы сможете просматривать, редактировать и управлять всеми переводами в этой коллекции." }, "collection": { "source": "Collection", "comment": "Label for collection name display", "es": "Recopilación", - "fr-ca": "Collection" + "fr-ca": "Collection", + "ru": "Коллекция" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json index db00838f..a0a97ead 100644 --- a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "531e79f4739df35a25f6ebd479c2aa67", "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", "status": "translated" + }, + "ru": { + "checksum": "e66e399449da382ed3c954e8f5e4a915", + "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", + "status": "translated" } }, "message": { @@ -27,6 +32,11 @@ "checksum": "8fbb0a3a0e5c526770762bb6c09da9ce", "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", "status": "translated" + }, + "ru": { + "checksum": "506d3a73c9cb4d2a7d596359925ddc26", + "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", + "status": "translated" } }, "collection": { @@ -42,6 +52,11 @@ "checksum": "d15b505cce09406de9f918cb1f8c641c", "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", "status": "translated" + }, + "ru": { + "checksum": "e383e52780ab039fa602807bc784b3ac", + "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/resource_entries.json b/apps/tracker/src/i18n/browser/resource_entries.json index b29df8b8..2e9d4054 100644 --- a/apps/tracker/src/i18n/browser/resource_entries.json +++ b/apps/tracker/src/i18n/browser/resource_entries.json @@ -3,140 +3,185 @@ "source": "Back to collections", "comment": "Aria-label for back button in browser", "es": "Volver a las colecciones", - "fr-ca": "Retour aux collections" + "fr-ca": "Retour aux collections", + "ru": "Вернуться к коллекциям" }, "filterFolders": { "source": "Filter folders...", "comment": "Placeholder text in a filter input that filters a list of folders", "es": "Filtrar carpetas...", - "fr-ca": "Dossiers de filtrage..." + "fr-ca": "Dossiers de filtrage...", + "ru": "Фильтрация папок..." }, "loadingFolders": { "source": "Loading folders...", "es": "Cargando carpetas...", - "fr-ca": "Chargement des dossiers..." + "fr-ca": "Chargement des dossiers...", + "ru": "Загрузка папок..." }, "noFoldersMatchSearch": { "source": "No folders match your search", "es": "No se encontraron carpetas que coincidan con su búsqueda.", - "fr-ca": "Aucun dossier ne correspond à votre recherche" + "fr-ca": "Aucun dossier ne correspond à votre recherche", + "ru": "Папки не соответствуют вашему запросу." }, "noFoldersFound": { "source": "No folders found", "es": "No se encontraron carpetas", - "fr-ca": "Aucun dossier trouvé" + "fr-ca": "Aucun dossier trouvé", + "ru": "Папки не найдены" }, "clickToLoad": { "source": "click to load", "comment": "Message shown to user on a hierarchy item that is not loaded yet from the backend", "es": "Haz clic para cargar", - "fr-ca": "cliquer pour charger" + "fr-ca": "cliquer pour charger", + "ru": "нажмите для загрузки" }, "loadingCollectionConfiguration": { "source": "Loading collection configuration...", "es": "Cargando configuración de la colección...", - "fr-ca": "Chargement de la configuration de la collection..." + "fr-ca": "Chargement de la configuration de la collection...", + "ru": "Загрузка конфигурации коллекции..." }, "loadingTranslations": { "source": "Loading translations...", "es": "Cargando traducciones...", - "fr-ca": "Chargement des traductions..." + "fr-ca": "Chargement des traductions...", + "ru": "Загрузка переводов..." }, "noTranslationsFoundInFolder": { "source": "No translations found in this folder.", "es": "No se encontraron traducciones en esta carpeta.", - "fr-ca": "Aucune traduction trouvée dans ce dossier." + "fr-ca": "Aucune traduction trouvée dans ce dossier.", + "ru": "В этой папке не найдено ни одного перевода." }, "searchTranslations": { "source": "Search (min 3 characters)...", "es": "Buscar (mínimo 3 caracteres)...", - "fr-ca": "Recherche (3 caractères minimum)..." + "fr-ca": "Recherche (3 caractères minimum)...", + "ru": "Поиск (минимум 3 символа)..." }, "showingSearchResultsForX": { "source": "Showing search results for \"{query}\"", "es": "Mostrando resultados de búsqueda para \"{query}\"", - "fr-ca": "Affichage des résultats de recherche pour \"{query}\"" + "fr-ca": "Affichage des résultats de recherche pour \"{query}\"", + "ru": "Показаны результаты поиска по запросу \"{query}\"" }, "clearSearch": { "source": "Clear Search", "es": "Búsqueda clara", - "fr-ca": "Effacer la recherche" + "fr-ca": "Effacer la recherche", + "ru": "Очистить поиск" }, "noFolderSelected": { "source": "No resource folder selected", "comment": "Breadcrumb empty state when no folder is selected", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se seleccionó ninguna carpeta de recursos", - "fr-ca": "Aucun dossier de ressources sélectionné" + "fr-ca": "Aucun dossier de ressources sélectionné", + "ru": "Папка ресурсов не выбрана" }, "addTranslationButton": { "source": "Add Translation", "comment": "Button text to add a new translation", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Añadir traducción", - "fr-ca": "Ajouter une traduction" + "fr-ca": "Ajouter une traduction", + "ru": "Добавить перевод" }, "sortAscending": { "source": "Sort ascending", "comment": "Aria-label for sort ascending button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ordenar ascendentemente", - "fr-ca": "Trier en ordre croissant" + "fr-ca": "Trier en ordre croissant", + "ru": "Сортировка по возрастанию" }, "sortDescending": { "source": "Sort descending", "comment": "Aria-label for sort descending button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ordenar descendentemente", - "fr-ca": "Trier par ordre décroissant" + "fr-ca": "Trier par ordre décroissant", + "ru": "Сортировать по убыванию" }, "sortAscendingTooltip": { "source": "Sort ascending (A→Z)", "comment": "Tooltip for sort ascending button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ordenar ascendentemente (A→Z)", - "fr-ca": "Trier par ordre croissant (A→Z)" + "fr-ca": "Trier par ordre croissant (A→Z)", + "ru": "Сортировка по возрастанию (от А до Я)" }, "sortDescendingTooltip": { "source": "Sort descending (Z→A)", "comment": "Tooltip for sort descending button", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ordenar descendentemente (Z→A)", - "fr-ca": "Trier par ordre décroissant (Z→A)" + "fr-ca": "Trier par ordre décroissant (Z→A)", + "ru": "Сортировка по убыванию (Z→A)" }, "selectFolderFirst": { "source": "Select a folder first", "comment": "Tooltip shown on Add Translation button when no folder is selected", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Seleccione una carpeta primero", - "fr-ca": "Sélectionnez d'abord un dossier" + "fr-ca": "Sélectionnez d'abord un dossier", + "ru": "Сначала выберите папку." }, "addNewTranslationTooltip": { "source": "Add a new translation", "comment": "Tooltip shown on Add Translation button when a folder is selected", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Añadir una nueva traducción", - "fr-ca": "Ajouter une nouvelle traduction" + "fr-ca": "Ajouter une nouvelle traduction", + "ru": "Добавить новый перевод" }, "noTranslation": { "source": "No translation", "comment": "Placeholder when a translation value is empty", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Sin traducción", - "fr-ca": "Aucune traduction" + "fr-ca": "Aucune traduction", + "ru": "Нет перевода" }, "commentPrefix": { "source": "Comment:", "comment": "Label prefix before a comment text", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Comentario:", - "fr-ca": "Commentaire:" + "fr-ca": "Commentaire:", + "ru": "Комментарий:" }, "toggleExpansion": { "source": "Toggle expansion", "comment": "Aria-label for the expand/collapse button on a translation item", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Activar o desactivar la expansión", - "fr-ca": "Basculer l'extension" + "fr-ca": "Basculer l'extension", + "ru": "Переключить расширение" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json index 60e64dcd..cf5ef3d3 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json @@ -2,36 +2,51 @@ "title": { "source": "Similar Translations", "comment": "Header title for similar translations panel", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Traducciones similares", - "fr-ca": "Traductions similaires" + "fr-ca": "Traductions similaires", + "ru": "Похожие переводы" }, "idle": { "source": "Similar translations will appear as you type", "comment": "Message shown when no search query entered yet", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Aparecerán traducciones similares a medida que escribas.", - "fr-ca": "Des traductions semblables apparaîtront au fur et à mesure que vous taperez." + "fr-ca": "Des traductions semblables apparaîtront au fur et à mesure que vous taperez.", + "ru": "Похожие переводы будут появляться по мере ввода текста." }, "loading": { "source": "Searching for similar translations...", "comment": "Loading message while searching for similar translations", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Buscando traducciones similares...", - "fr-ca": "Recherche de traductions similaires..." + "fr-ca": "Recherche de traductions similaires...", + "ru": "Ищу похожие переводы..." }, "empty": { "source": "No similar translations found", "comment": "Message when search returns no results", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se encontraron traducciones similares", - "fr-ca": "Aucune traduction semblable trouvée" + "fr-ca": "Aucune traduction semblable trouvée", + "ru": "Похожие переводы не найдены" }, "showMoreX": { "source": "Show {count} more", "comment": "Button to show remaining similar translation results, count is the number of hidden results", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Mostrar {count} más", - "fr-ca": "Show {count} more" + "fr-ca": "Show {count} more", + "ru": "Показать {count} больше" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json index 840cc2ae..d019dbc0 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "ff906b3e968bf0ca20cb9bffc71ba0a7", "baseChecksum": "fdf7dc519363415a82c0e19d15661480", "status": "translated" + }, + "ru": { + "checksum": "629d4cce6035f21e2325986627891758", + "baseChecksum": "fdf7dc519363415a82c0e19d15661480", + "status": "translated" } }, "idle": { @@ -27,6 +32,11 @@ "checksum": "44b95b68f10286428c104922a11d1909", "baseChecksum": "fc1752e501589956925c6d7ec51b4737", "status": "translated" + }, + "ru": { + "checksum": "49f3d721c042bb712edd44ab31254825", + "baseChecksum": "fc1752e501589956925c6d7ec51b4737", + "status": "translated" } }, "loading": { @@ -42,6 +52,11 @@ "checksum": "fcf85f1ec4d1f574ea2a1a5687dc8f10", "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", "status": "translated" + }, + "ru": { + "checksum": "0c9e8dbe3c7bee3c1564d9beafcbf6bc", + "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", + "status": "translated" } }, "empty": { @@ -57,6 +72,11 @@ "checksum": "aa117d0c03a1cc44ee64639f87971072", "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", "status": "translated" + }, + "ru": { + "checksum": "153764e3ac7828a26b9e80f7a3612530", + "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", + "status": "translated" } }, "showMoreX": { @@ -72,6 +92,11 @@ "checksum": "b39ae93853f9b177650ca742f758312d", "baseChecksum": "b39ae93853f9b177650ca742f758312d", "status": "new" + }, + "ru": { + "checksum": "ed667cad5e2af69efc1eca00c60429b8", + "baseChecksum": "b39ae93853f9b177650ca742f758312d", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/resource_entries.json b/apps/tracker/src/i18n/browser/status/resource_entries.json index e586490c..5833c930 100644 --- a/apps/tracker/src/i18n/browser/status/resource_entries.json +++ b/apps/tracker/src/i18n/browser/status/resource_entries.json @@ -2,29 +2,41 @@ "new": { "source": "New", "comment": "Translation status label: new, not yet translated", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Nuevo", - "fr-ca": "Nouveau" + "fr-ca": "Nouveau", + "ru": "Новый" }, "stale": { "source": "Stale", "comment": "Translation status label: source has changed and translation is outdated", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Duro", - "fr-ca": "Vicié" + "fr-ca": "Vicié", + "ru": "Залежалый" }, "translated": { "source": "Translated", "comment": "Translation status label: translated but not yet verified", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Traducido", - "fr-ca": "Traduit" + "fr-ca": "Traduit", + "ru": "Переведено" }, "verified": { "source": "Verified", "comment": "Translation status label: reviewed and approved", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Verificado", - "fr-ca": "Vérifié" + "fr-ca": "Vérifié", + "ru": "Подтверждено" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/tracker_meta.json b/apps/tracker/src/i18n/browser/status/tracker_meta.json index d7e10d14..37693657 100644 --- a/apps/tracker/src/i18n/browser/status/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/status/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "9ea17b10f506b881fed906aab0a50f8d", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "ru": { + "checksum": "97ae6e0bca16b37dbdc5e324d0ecaf60", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "stale": { @@ -27,6 +32,11 @@ "checksum": "3ae88690725fe012389643e0056634b6", "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", "status": "translated" + }, + "ru": { + "checksum": "0fa45772724dbd2cf9e99b15e04d7efa", + "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", + "status": "translated" } }, "translated": { @@ -42,6 +52,11 @@ "checksum": "a1ed4f81da1f1862174ed8ef5cd3a279", "baseChecksum": "532220dbf680ea98d665427b145e72ca", "status": "translated" + }, + "ru": { + "checksum": "abcbcb3b8d5c0f82b5129dc554ffe62e", + "baseChecksum": "532220dbf680ea98d665427b145e72ca", + "status": "translated" } }, "verified": { @@ -57,6 +72,11 @@ "checksum": "f180a2dcfad57fa4f4955babdc4c13ec", "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", "status": "translated" + }, + "ru": { + "checksum": "fe630d9925eeab434088f5ec6439fb33", + "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json index 60c068bc..387b986c 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json @@ -2,15 +2,21 @@ "needsWork": { "source": "Needs Work", "comment": "Quick filter button that selects new and stale statuses", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Necesita trabajo", - "fr-ca": "Nécessite des travaux" + "fr-ca": "Nécessite des travaux", + "ru": "Требуется доработка" }, "ariaLabelX": { "source": "Filter by status. Currently showing: { text }", "comment": "Aria-label for the status filter button. { text } is the current filter display text (e.g. 'All' or status name)", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Filtrar por estado. Actualmente se muestra: {texto}", - "fr-ca": "Filtrer par statut. Affichage actuel : { texte }" + "fr-ca": "Filtrer par statut. Affichage actuel : { texte }", + "ru": "Фильтр по статусу. В данный момент отображается: { текст }" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json index 10d85696..94b42238 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "3c388b094f2f1d561d99a41462f02279", "baseChecksum": "82198ade859bc9f4034a6dd31276d473", "status": "translated" + }, + "ru": { + "checksum": "58291dae413e4204dd1dc0adb831c6a7", + "baseChecksum": "82198ade859bc9f4034a6dd31276d473", + "status": "translated" } }, "ariaLabelX": { @@ -27,6 +32,11 @@ "checksum": "ba99ae2f5ef8f8da0cf7140ab17fc4ee", "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", "status": "translated" + }, + "ru": { + "checksum": "046b8a36af662a632097d5e0ae2611ac", + "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/resource_entries.json b/apps/tracker/src/i18n/browser/toast/resource_entries.json index 12efc703..1850682f 100644 --- a/apps/tracker/src/i18n/browser/toast/resource_entries.json +++ b/apps/tracker/src/i18n/browser/toast/resource_entries.json @@ -2,176 +2,251 @@ "copiedToClipboard": { "source": "Copied to clipboard", "comment": "Snackbar message after copying a key to clipboard", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Copiado al portapapeles", - "fr-ca": "Copié dans le presse-papiers" + "fr-ca": "Copié dans le presse-papiers", + "ru": "Скопировано в буфер обмена" }, "copyFailed": { "source": "Failed to copy", "comment": "Snackbar error message when clipboard copy fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo copiar", - "fr-ca": "Échec de la copie" + "fr-ca": "Échec de la copie", + "ru": "Не удалось скопировать" }, "resourceDeleted": { "source": "Resource deleted successfully", "comment": "Snackbar message after successfully deleting a resource", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Recurso eliminado exitosamente", - "fr-ca": "Ressource supprimée avec succès" + "fr-ca": "Ressource supprimée avec succès", + "ru": "Ресурс успешно удален" }, "deleteFailed": { "source": "Failed to delete resource", "comment": "Snackbar error message when resource deletion fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo eliminar el recurso", - "fr-ca": "Échec de la suppression de la ressource" + "fr-ca": "Échec de la suppression de la ressource", + "ru": "Не удалось удалить ресурс" }, "translateFailed": { "source": "Failed to auto-translate resource", "comment": "Snackbar error message when auto-translation fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo traducir automáticamente el recurso", - "fr-ca": "Échec de la traduction automatique de la ressource" + "fr-ca": "Échec de la traduction automatique de la ressource", + "ru": "Не удалось выполнить автоматический перевод ресурса." }, "translationUpdated": { "source": "Translation updated successfully", "comment": "Snackbar message after successfully updating a translation", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Traducción actualizada exitosamente", - "fr-ca": "Traduction mise à jour avec succès" + "fr-ca": "Traduction mise à jour avec succès", + "ru": "Перевод успешно обновлен." }, "localeTranslated": { "source": "1 locale translated successfully", "comment": "Snackbar message when exactly 1 locale was auto-translated", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "1 configuración regional traducida correctamente", - "fr-ca": "1 langue traduite avec succès" + "fr-ca": "1 langue traduite avec succès", + "ru": "1 локализация успешно переведена" }, "localesTranslatedX": { "source": "{count} locales translated successfully", "comment": "Snackbar message when multiple locales were auto-translated", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "{count} locales traducidos correctamente", - "fr-ca": "{count} Les paramètres régionaux ont été traduits avec succès" + "fr-ca": "{count} Les paramètres régionaux ont été traduits avec succès", + "ru": "{count} Локали успешно переведены" }, "allLocalesUpToDate": { "source": "All locales are already up to date", "comment": "Snackbar message when auto-translate finds nothing to update", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Todas las configuraciones regionales ya están actualizadas", - "fr-ca": "Tous les emplacements sont déjà à jour." + "fr-ca": "Tous les emplacements sont déjà à jour.", + "ru": "Все языковые версии уже обновлены." }, "skippedLocalesX": { "source": "Skipped locales (ICU format): {locales}", "comment": "Snackbar warning when some locales were skipped because they use ICU format", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Configuraciones regionales omitidas (formato ICU): {locales}", - "fr-ca": "Paramètres régionaux ignorés (format ICU) : {locales}" + "fr-ca": "Paramètres régionaux ignorés (format ICU) : {locales}", + "ru": "Пропущенные локали (формат ICU): {locales}" }, "resourceCreated": { "source": "Resource created successfully", "comment": "Snackbar message after successfully creating a new resource", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Recurso creado exitosamente", - "fr-ca": "Ressource créée avec succès" + "fr-ca": "Ressource créée avec succès", + "ru": "Ресурс успешно создан." }, "autoTranslationSkippedX": { "source": "Auto-translation skipped for {locales} (ICU format not supported)", "comment": "Snackbar warning when auto-translation was skipped for some locales due to ICU format", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se omitió la traducción automática para {locales} (formato ICU no compatible)", - "fr-ca": "Traduction automatique ignorée pour {locales} (format ICU non pris en charge)" + "fr-ca": "Traduction automatique ignorée pour {locales} (format ICU non pris en charge)", + "ru": "Автоматический перевод пропущен для {locales} (формат ICU не поддерживается)" }, "resourceAlreadyInFolder": { "source": "Resource is already in this folder", "comment": "Snackbar message when user drops a resource onto its current folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "El recurso ya está en esta carpeta", - "fr-ca": "La ressource se trouve déjà dans ce dossier." + "fr-ca": "La ressource se trouve déjà dans ce dossier.", + "ru": "Ресурс уже находится в этой папке." }, "resourceMovedX": { "source": "Moved \"{name}\" to {folder}", "comment": "Snackbar message after moving a resource to a different folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se movió \"{name}\" a {folder}", - "fr-ca": "Déplacé « {name} » vers {folder}" + "fr-ca": "Déplacé « {name} » vers {folder}", + "ru": "Перемещено \"{name}\" в {folder}" }, "folderAlreadyAtLocation": { "source": "Folder is already at this location", "comment": "Snackbar message when user drops a folder onto its current parent location", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "La carpeta ya está en esta ubicación", - "fr-ca": "Le dossier est déjà à cet emplacement." + "fr-ca": "Le dossier est déjà à cet emplacement.", + "ru": "Папка уже находится по этому адресу." }, "folderMovedX": { "source": "Moved \"{name}\" into {dest}", "comment": "Snackbar message after successfully moving a folder", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se movió \"{name}\" a {dest}", - "fr-ca": "Déplacé « {name} » dans {dest}" + "fr-ca": "Déplacé « {name} » dans {dest}", + "ru": "Перемещено \"{name}\" в {dest}" }, "moveResourceFailed": { "source": "Failed to move resource", "comment": "Snackbar error message when moving a resource fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo mover el recurso", - "fr-ca": "Échec du déplacement de la ressource" + "fr-ca": "Échec du déplacement de la ressource", + "ru": "Не удалось переместить ресурс." }, "moveFolderFailed": { "source": "Failed to move folder", "comment": "Snackbar error message when moving a folder fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo mover la carpeta", - "fr-ca": "Impossible de déplacer le dossier" + "fr-ca": "Impossible de déplacer le dossier", + "ru": "Не удалось переместить папку." }, "loadFoldersFailed": { "source": "Failed to load folders", "comment": "Snackbar/error message when loading the folder tree fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudieron cargar las carpetas", - "fr-ca": "Échec du chargement des dossiers" + "fr-ca": "Échec du chargement des dossiers", + "ru": "Не удалось загрузить папки." }, "loadFolderChildrenFailed": { "source": "Failed to load folder contents", "comment": "Snackbar/error message when loading a folder's children fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo cargar el contenido de la carpeta", - "fr-ca": "Impossible de charger le contenu du dossier" + "fr-ca": "Impossible de charger le contenu du dossier", + "ru": "Не удалось загрузить содержимое папки." }, "createFolderFailed": { "source": "Failed to create folder", "comment": "Snackbar/error message when creating a folder fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Error al crear la carpeta", - "fr-ca": "Impossible de créer le dossier" + "fr-ca": "Impossible de créer le dossier", + "ru": "Не удалось создать папку." }, "deleteFolderFailed": { "source": "Failed to delete folder", "comment": "Snackbar/error message when deleting a folder fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo eliminar la carpeta", - "fr-ca": "Échec de la suppression du dossier" + "fr-ca": "Échec de la suppression du dossier", + "ru": "Не удалось удалить папку." }, "loadTranslationsFailed": { "source": "Failed to load translations", "comment": "Snackbar/error message when loading translations for a folder fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudieron cargar las traducciones", - "fr-ca": "Impossible de charger les traductions" + "fr-ca": "Impossible de charger les traductions", + "ru": "Не удалось загрузить переводы." }, "searchTranslationsFailed": { "source": "Failed to search translations", "comment": "Snackbar/error message when searching translations fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo buscar traducciones", - "fr-ca": "Échec de la recherche de traductions" + "fr-ca": "Échec de la recherche de traductions", + "ru": "Поиск переводов не удался." }, "checkCacheStatusFailed": { "source": "Failed to check cache status", "comment": "Snackbar/error message when checking cache status fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo comprobar el estado de la caché", - "fr-ca": "Échec de la vérification de l'état du cache" + "fr-ca": "Échec de la vérification de l'état du cache", + "ru": "Не удалось проверить состояние кэша." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/tracker_meta.json b/apps/tracker/src/i18n/browser/toast/tracker_meta.json index 46ec82b8..1e68f8c2 100644 --- a/apps/tracker/src/i18n/browser/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/toast/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "268147c8e3596b09d44cb181b561428a", "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", "status": "translated" + }, + "ru": { + "checksum": "ec92bc41e416d8493fcdeb3629e87e12", + "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", + "status": "translated" } }, "copyFailed": { @@ -27,6 +32,11 @@ "checksum": "7ceeff034e95092dd8798b12ba572014", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "ru": { + "checksum": "c63eb8553a973244e9929fb545ba6a68", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "resourceDeleted": { @@ -42,6 +52,11 @@ "checksum": "92d90883ff585b842a35c8363f678655", "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", "status": "translated" + }, + "ru": { + "checksum": "cdef260bd827cc2954ca546bd851a2ed", + "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", + "status": "translated" } }, "deleteFailed": { @@ -57,6 +72,11 @@ "checksum": "05975cae9b6c3501daec707df958e785", "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", "status": "translated" + }, + "ru": { + "checksum": "75514f822bae3ee2a45d8fe6d3e8e421", + "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", + "status": "translated" } }, "translateFailed": { @@ -72,6 +92,11 @@ "checksum": "a2adc3c747b0f69549289f153cecfee1", "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", "status": "translated" + }, + "ru": { + "checksum": "06b361d1480d6c99691ae65506106ce0", + "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", + "status": "translated" } }, "translationUpdated": { @@ -87,6 +112,11 @@ "checksum": "2cc24444af0b79d681653805cd376e9c", "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", "status": "translated" + }, + "ru": { + "checksum": "8758846c4d762ef7ae23f64c9e8a37ee", + "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", + "status": "translated" } }, "localeTranslated": { @@ -102,6 +132,11 @@ "checksum": "10c74d6d7bb35c14ba0780659f54fddb", "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", "status": "translated" + }, + "ru": { + "checksum": "67fd8872d020382bd67558d32e6820df", + "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", + "status": "translated" } }, "localesTranslatedX": { @@ -117,6 +152,11 @@ "checksum": "4f6287f9046e691e34937001de08903a", "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", "status": "stale" + }, + "ru": { + "checksum": "f9eb75bd7974a61268f85076bdc71336", + "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", + "status": "translated" } }, "allLocalesUpToDate": { @@ -132,6 +172,11 @@ "checksum": "03f4b571a5a6cf7479d0309b7c715c64", "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", "status": "translated" + }, + "ru": { + "checksum": "025845ef981f5263abff0bc625c0bb26", + "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", + "status": "translated" } }, "skippedLocalesX": { @@ -147,6 +192,11 @@ "checksum": "3e2002568171f1bdc4522b46ec7ec405", "baseChecksum": "12a69e024b35f9a21939d29f767e0821", "status": "stale" + }, + "ru": { + "checksum": "ef143d7f4fd08c61ba32621f5857a02f", + "baseChecksum": "12a69e024b35f9a21939d29f767e0821", + "status": "translated" } }, "resourceCreated": { @@ -162,6 +212,11 @@ "checksum": "d52e76c679ab1c16c0cc9af2deb506f3", "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", "status": "translated" + }, + "ru": { + "checksum": "fe46f75147afda125972f7952101f910", + "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", + "status": "translated" } }, "autoTranslationSkippedX": { @@ -177,6 +232,11 @@ "checksum": "cefd9cff1fd03bfbdd9c599dc415fcde", "baseChecksum": "760c64588bcdc219130e6209f46db428", "status": "stale" + }, + "ru": { + "checksum": "e7141f32408f357995b006d9ad1fc8db", + "baseChecksum": "760c64588bcdc219130e6209f46db428", + "status": "translated" } }, "resourceAlreadyInFolder": { @@ -192,6 +252,11 @@ "checksum": "abcc113acafc2cc0585ca1265e97f775", "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", "status": "translated" + }, + "ru": { + "checksum": "649e37b9c72cdc2b1391f6a007f09bde", + "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", + "status": "translated" } }, "resourceMovedX": { @@ -207,6 +272,11 @@ "checksum": "c1adc37f0a52cd2c618c0f58cb80ae7e", "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", "status": "stale" + }, + "ru": { + "checksum": "57ed621db988e0ff2452dd3ceba888de", + "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", + "status": "translated" } }, "folderAlreadyAtLocation": { @@ -222,6 +292,11 @@ "checksum": "75bd782c6687cca95a821b7ecb035c26", "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", "status": "translated" + }, + "ru": { + "checksum": "6cdea52f8679f1066433331ba737c10b", + "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", + "status": "translated" } }, "folderMovedX": { @@ -237,6 +312,11 @@ "checksum": "0401d563667e407bac3518529dc6de20", "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", "status": "stale" + }, + "ru": { + "checksum": "0a01d88a69798347a9f7c46d2737fb00", + "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", + "status": "translated" } }, "moveResourceFailed": { @@ -252,6 +332,11 @@ "checksum": "8323fd4409ccd85e74540da933d6a7ae", "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", "status": "translated" + }, + "ru": { + "checksum": "aee0145a06c50bf66cd84d7cf9a89166", + "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", + "status": "translated" } }, "moveFolderFailed": { @@ -267,6 +352,11 @@ "checksum": "6217e64964af6ca91846202a3f8f8ca1", "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", "status": "translated" + }, + "ru": { + "checksum": "0327a27e4d4b75e0667b8c931f45248d", + "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", + "status": "translated" } }, "loadFoldersFailed": { @@ -282,6 +372,11 @@ "checksum": "a4bcca17dbf208208f3165169c0f958a", "baseChecksum": "5066e552105a8542039601e3df9b26c8", "status": "translated" + }, + "ru": { + "checksum": "2bb1d38671ee0d072212e76a04238167", + "baseChecksum": "5066e552105a8542039601e3df9b26c8", + "status": "translated" } }, "loadFolderChildrenFailed": { @@ -297,6 +392,11 @@ "checksum": "78b55839e8544cf842b43d3023f63e54", "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", "status": "translated" + }, + "ru": { + "checksum": "e269d5b86aed9cb090df1bf0802d9384", + "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", + "status": "translated" } }, "createFolderFailed": { @@ -312,6 +412,11 @@ "checksum": "3a8006f316f0b8e692ca464c5c728c70", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "ru": { + "checksum": "5c86bb3f4b6b381f42094b79f6e2ba62", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "deleteFolderFailed": { @@ -327,6 +432,11 @@ "checksum": "a9663707070e677cbf3f693a6dc9864d", "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", "status": "translated" + }, + "ru": { + "checksum": "7c833db5ea6801e338392f8251288b6c", + "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", + "status": "translated" } }, "loadTranslationsFailed": { @@ -342,6 +452,11 @@ "checksum": "cb2f25e022138485885b48ec4c92214c", "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", "status": "translated" + }, + "ru": { + "checksum": "5d7464d26544e7d3f675d1760886bfcb", + "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", + "status": "translated" } }, "searchTranslationsFailed": { @@ -357,6 +472,11 @@ "checksum": "e56b3fca1a74fb8ec065a62f26ae0120", "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", "status": "translated" + }, + "ru": { + "checksum": "80ba7aef9d007e5515bbf8b82a5e5e58", + "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", + "status": "translated" } }, "checkCacheStatusFailed": { @@ -372,6 +492,11 @@ "checksum": "f32ed5ed5b787f4bb8d41daf1bebdb14", "baseChecksum": "c36227ebfa47873e719514df95f28888", "status": "translated" + }, + "ru": { + "checksum": "cac79a23a3050bf41a3458c7829a65f1", + "baseChecksum": "c36227ebfa47873e719514df95f28888", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/tracker_meta.json b/apps/tracker/src/i18n/browser/tracker_meta.json index 2dd36671..589702dd 100644 --- a/apps/tracker/src/i18n/browser/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "73586b8c21ceaebfb82eeaaf5378439c", "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", "status": "translated" + }, + "ru": { + "checksum": "fa210ccd7b7d9347d63fbc720faeb1bf", + "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", + "status": "translated" } }, "filterFolders": { @@ -27,6 +32,11 @@ "checksum": "061ee375bfde90bfce0720a21d2313b9", "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", "status": "translated" + }, + "ru": { + "checksum": "9078189387de2fe62f86b0d851c68b7b", + "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", + "status": "translated" } }, "loadingFolders": { @@ -42,6 +52,11 @@ "checksum": "649d4e3e7edf9dceba52abc26c37b7f7", "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", "status": "translated" + }, + "ru": { + "checksum": "df5432f9517649a4f409d30cc2e9d8a5", + "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", + "status": "translated" } }, "noFoldersMatchSearch": { @@ -57,6 +72,11 @@ "checksum": "11c5d6f0f3bdb3ec235782d7cfa73cf9", "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", "status": "translated" + }, + "ru": { + "checksum": "2859dc31bb46a00eb851216edaeb81e2", + "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", + "status": "translated" } }, "noFoldersFound": { @@ -72,6 +92,11 @@ "checksum": "38ea1e5ce43d5c68b87ce14ca60d6b3d", "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", "status": "translated" + }, + "ru": { + "checksum": "5e9f67a2b830d84f57632a0835ddaa1b", + "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", + "status": "translated" } }, "clickToLoad": { @@ -87,6 +112,11 @@ "checksum": "7141789d79a55dd857a5d689f99134fd", "baseChecksum": "73c67a917acc1f58d962462b80209a2d", "status": "translated" + }, + "ru": { + "checksum": "3d9a1da51f9facd70f9fca121afc47f8", + "baseChecksum": "73c67a917acc1f58d962462b80209a2d", + "status": "translated" } }, "loadingCollectionConfiguration": { @@ -102,6 +132,11 @@ "checksum": "8caaf7bef2d55d92cdfb8f13d25ea92d", "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", "status": "translated" + }, + "ru": { + "checksum": "0ef07a4f718fb85f3a3faae1347bfff8", + "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", + "status": "translated" } }, "loadingTranslations": { @@ -117,6 +152,11 @@ "checksum": "f622bdfabe2c272bd0a46f7fa6132266", "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", "status": "translated" + }, + "ru": { + "checksum": "bd9770c77e861ad2ab36e46e4044fbde", + "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", + "status": "translated" } }, "noTranslationsFoundInFolder": { @@ -132,6 +172,11 @@ "checksum": "a00261766c6d528c1579a34454baa740", "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", "status": "translated" + }, + "ru": { + "checksum": "2527f79457eacc89234bc006d8d7489c", + "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", + "status": "translated" } }, "searchTranslations": { @@ -147,6 +192,11 @@ "checksum": "e2f36f41dc8108041a066fdddff7a139", "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", "status": "stale" + }, + "ru": { + "checksum": "c5510b402837c0bbc123de68a1d0f7a3", + "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", + "status": "translated" } }, "showingSearchResultsForX": { @@ -162,6 +212,11 @@ "checksum": "a22904d2b9649f73fbe9345e9fd6cbb7", "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", "status": "stale" + }, + "ru": { + "checksum": "db3a954f90518769a688706acec4b614", + "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", + "status": "translated" } }, "clearSearch": { @@ -177,6 +232,11 @@ "checksum": "00b965402c9687499607c2b4792a5bdf", "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", "status": "translated" + }, + "ru": { + "checksum": "30e2d4974208e7be2d9a8e7e58f8adf4", + "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", + "status": "translated" } }, "noFolderSelected": { @@ -192,6 +252,11 @@ "checksum": "5e226109277717898c62d35e01a0b102", "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", "status": "translated" + }, + "ru": { + "checksum": "bd56afdcb901f2da743aa5d1aaae8c18", + "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", + "status": "translated" } }, "addTranslationButton": { @@ -207,6 +272,11 @@ "checksum": "49b452807807f78aa4c6921db1eef68f", "baseChecksum": "cb00aa2dec0df9333114919825e4883b", "status": "translated" + }, + "ru": { + "checksum": "b4978cefca449b5f01784658cdc3af50", + "baseChecksum": "cb00aa2dec0df9333114919825e4883b", + "status": "translated" } }, "sortAscending": { @@ -222,6 +292,11 @@ "checksum": "ba4a2dcd0ab328476a0708224ac1579a", "baseChecksum": "bc01377158f11789893c21fac7a21477", "status": "translated" + }, + "ru": { + "checksum": "df24ffa5304e28ab9c2040d9de5321ef", + "baseChecksum": "bc01377158f11789893c21fac7a21477", + "status": "translated" } }, "sortDescending": { @@ -237,6 +312,11 @@ "checksum": "a569b2bb297a2a71dbd8de8954108932", "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", "status": "translated" + }, + "ru": { + "checksum": "5cbc68bf05d0bb56bfb3958d010713ae", + "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", + "status": "translated" } }, "sortAscendingTooltip": { @@ -252,6 +332,11 @@ "checksum": "2ca0ed42a9fee5256e3eaf78b52169b6", "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", "status": "translated" + }, + "ru": { + "checksum": "5d9f4c7ce1400ef1e553973d3179b3c3", + "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", + "status": "translated" } }, "sortDescendingTooltip": { @@ -267,6 +352,11 @@ "checksum": "e9e2a83a580e5b183df4a6e9694dc239", "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", "status": "translated" + }, + "ru": { + "checksum": "4fb2227228b1fd2c3d45482ae824414d", + "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", + "status": "translated" } }, "selectFolderFirst": { @@ -282,6 +372,11 @@ "checksum": "2d975dbf2e3f83915e39ce6f550724cb", "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", "status": "translated" + }, + "ru": { + "checksum": "55a41223d9c642c59c0ff06f085d27a6", + "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", + "status": "translated" } }, "addNewTranslationTooltip": { @@ -297,6 +392,11 @@ "checksum": "302876a521da0e33b18705d2f776008c", "baseChecksum": "e26fd2bf951546994a81c53bc593e520", "status": "translated" + }, + "ru": { + "checksum": "e621eb5ad060a4a7d05465cc3c6c7096", + "baseChecksum": "e26fd2bf951546994a81c53bc593e520", + "status": "translated" } }, "noTranslation": { @@ -312,6 +412,11 @@ "checksum": "d3492fb7d6874d46221bc3c6b6e54a8d", "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", "status": "translated" + }, + "ru": { + "checksum": "f8b534beda4cc6ab2f67295048a56fea", + "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", + "status": "translated" } }, "commentPrefix": { @@ -327,6 +432,11 @@ "checksum": "c3b1fbaf8c6b65e312a0e4920cc19b42", "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", "status": "translated" + }, + "ru": { + "checksum": "499b9bd346e02b97baf20bb8f649cb37", + "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", + "status": "translated" } }, "toggleExpansion": { @@ -342,6 +452,11 @@ "checksum": "6c0219acbdc6307898118a325d8ff138", "baseChecksum": "a600b0cbba3359d934a659341e5b727b", "status": "translated" + }, + "ru": { + "checksum": "73ccd74271a9e6b138f4b699c3bf78d8", + "baseChecksum": "a600b0cbba3359d934a659341e5b727b", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json index 10d31869..56e4d7d2 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json @@ -2,29 +2,41 @@ "title": { "source": "No Comment Added", "comment": "Dialog title when submitting without a comment", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Sin comentarios añadidos", - "fr-ca": "Aucun commentaire ajouté" + "fr-ca": "Aucun commentaire ajouté", + "ru": "Комментарий не добавлен" }, "message": { "source": "Comments help other translators understand context. Are you sure you want to save without a comment?", "comment": "Confirmation message about missing comment", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Los comentarios ayudan a otros traductores a comprender el contexto. ¿Seguro que quieres guardar sin comentarios?", - "fr-ca": "Les commentaires aident les autres traducteurs à comprendre le contexte. Voulez-vous vraiment enregistrer sans commentaire ?" + "fr-ca": "Les commentaires aident les autres traducteurs à comprendre le contexte. Voulez-vous vraiment enregistrer sans commentaire ?", + "ru": "Комментарии помогают другим переводчикам понять контекст. Вы уверены, что хотите сохранить документ без комментария?" }, "saveAnyway": { "source": "Save Anyway", "comment": "Button to proceed without comment", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Guardar de todos modos", - "fr-ca": "Sauvegarder quand même" + "fr-ca": "Sauvegarder quand même", + "ru": "В любом случае сохранить" }, "addComment": { "source": "Add Comment", "comment": "Button to go back and add a comment", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Añadir comentario", - "fr-ca": "Ajouter un commentaire" + "fr-ca": "Ajouter un commentaire", + "ru": "Добавить комментарий" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json index 9d37b1a0..3fe76e96 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "c64a94c7605203f3cd268369aef501db", "baseChecksum": "530d98327e030fcb737f5821d32684f4", "status": "translated" + }, + "ru": { + "checksum": "2c3a45454b973f06cd5ebdf1959dae25", + "baseChecksum": "530d98327e030fcb737f5821d32684f4", + "status": "translated" } }, "message": { @@ -27,6 +32,11 @@ "checksum": "d589cdbb0b05a9a0180e3047221fdcbd", "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", "status": "translated" + }, + "ru": { + "checksum": "a891cc739cae53e981ea9a4823e6fcc1", + "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", + "status": "translated" } }, "saveAnyway": { @@ -42,6 +52,11 @@ "checksum": "4d784e8a28ffb470384928bac41e1ad6", "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", "status": "translated" + }, + "ru": { + "checksum": "68025402bb82a18da19a787c6f7b138b", + "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", + "status": "translated" } }, "addComment": { @@ -57,6 +72,11 @@ "checksum": "04979267671e33bcd261434689879386", "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", "status": "translated" + }, + "ru": { + "checksum": "86571d3b73c9fcf90635997b576007bb", + "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json index e4fcf755..6d687f00 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json @@ -2,29 +2,41 @@ "title": { "source": "Translation Key Already Exists", "comment": "Dialog title when key conflicts with existing resource", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "La clave de traducción ya existe", - "fr-ca": "La clé de traduction existe déjà." + "fr-ca": "La clé de traduction existe déjà.", + "ru": "Ключ перевода уже существует" }, "messageX": { "source": "The translation key \"{key}\" already exists in this collection. Would you like to edit the existing translation or choose a different key?", "comment": "Conflict dialog message with the conflicting key name", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "La clave de traducción \"{key}\" ya existe en esta colección. ¿Desea editar la traducción existente o elegir una clave diferente?", - "fr-ca": "La clé de traduction « {key} » existe déjà dans cette collection. Souhaitez-vous modifier la traduction existante ou choisir une autre clé ?" + "fr-ca": "La clé de traduction « {key} » existe déjà dans cette collection. Souhaitez-vous modifier la traduction existante ou choisir une autre clé ?", + "ru": "Ключ перевода \"{key}\" уже существует в этой коллекции. Хотите отредактировать существующий перевод или выбрать другой ключ?" }, "editExisting": { "source": "Edit Existing", "comment": "Button to open the existing resource for editing", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Editar existente", - "fr-ca": "Modifier l'existant" + "fr-ca": "Modifier l'existant", + "ru": "Редактировать существующий" }, "chooseDifferentKey": { "source": "Choose Different Key", "comment": "Button to go back and pick a different key", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Elija una clave diferente", - "fr-ca": "Choisir une autre clé" + "fr-ca": "Choisir une autre clé", + "ru": "Выберите другой ключ" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json index 06d737e3..bae475ce 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "3f960e9f62b448593af4f4e6268f37eb", "baseChecksum": "045a806cdff0da04ef93312480a9934e", "status": "translated" + }, + "ru": { + "checksum": "c63d79c96c3134a0f4ba01d0249ff134", + "baseChecksum": "045a806cdff0da04ef93312480a9934e", + "status": "translated" } }, "messageX": { @@ -27,6 +32,11 @@ "checksum": "1228373b337d25fe96d944ad0103a4bc", "baseChecksum": "765a0106f27fce3620418e6a5afece18", "status": "stale" + }, + "ru": { + "checksum": "5dcee4e9669d158cef1d3bcfbe2d985c", + "baseChecksum": "765a0106f27fce3620418e6a5afece18", + "status": "translated" } }, "editExisting": { @@ -42,6 +52,11 @@ "checksum": "acc8b3c3f491614fb6a457067a5f07c0", "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", "status": "translated" + }, + "ru": { + "checksum": "c96691855499f791f0427d9b91503d4b", + "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", + "status": "translated" } }, "chooseDifferentKey": { @@ -57,6 +72,11 @@ "checksum": "d5805e73f15774b7eaa44003b35e3e30", "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", "status": "translated" + }, + "ru": { + "checksum": "7dec38b22dfbcb03964b55056be92d57", + "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json index 91109188..fc0ffa88 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json @@ -2,50 +2,71 @@ "missingResource": { "source": "Cannot update: resource data is missing", "comment": "Error when resource data is unavailable during edit", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se puede actualizar: faltan datos del recurso", - "fr-ca": "Impossible de mettre à jour : les données de ressources sont manquantes." + "fr-ca": "Impossible de mettre à jour : les données de ressources sont manquantes.", + "ru": "Невозможно обновить: отсутствуют данные ресурса." }, "keyRenamingNotSupported": { "source": "Key renaming is not yet supported. Please use the same key or create a new resource.", "comment": "Error when user tries to change resource key", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Aún no se admite el cambio de nombre de clave. Utilice la misma clave o cree un nuevo recurso.", - "fr-ca": "Le renommage des clés n'est pas encore pris en charge. Veuillez utiliser la même clé ou créer une nouvelle ressource." + "fr-ca": "Le renommage des clés n'est pas encore pris en charge. Veuillez utiliser la même clé ou créer une nouvelle ressource.", + "ru": "Функция переименования ключей пока не поддерживается. Пожалуйста, используйте тот же ключ или создайте новый ресурс." }, "notFound": { "source": "Resource not found. It may have been deleted.", "comment": "Error when resource no longer exists on server", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Recurso no encontrado. Es posible que se haya eliminado.", - "fr-ca": "Ressource introuvable. Elle a peut-être été supprimée." + "fr-ca": "Ressource introuvable. Elle a peut-être été supprimée.", + "ru": "Ресурс не найден. Возможно, он был удален." }, "invalidRequest": { "source": "Invalid request", "comment": "Fallback error message for 400 status responses", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Solicitud no válida", - "fr-ca": "Requête invalide" + "fr-ca": "Requête invalide", + "ru": "Неверный запрос" }, "createFailed": { "source": "Failed to create translation", "comment": "Fallback error when resource creation fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo crear la traducción", - "fr-ca": "Échec de la traduction" + "fr-ca": "Échec de la traduction", + "ru": "Не удалось создать перевод" }, "updateFailed": { "source": "Failed to update translation", "comment": "Fallback error when resource update fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo actualizar la traducción", - "fr-ca": "Échec de la mise à jour de la traduction" + "fr-ca": "Échec de la mise à jour de la traduction", + "ru": "Не удалось обновить перевод" }, "unexpected": { "source": "An unexpected error occurred", "comment": "Fallback error for non-HTTP errors", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se produjo un error inesperado", - "fr-ca": "Une erreur inattendue s'est produite." + "fr-ca": "Une erreur inattendue s'est produite.", + "ru": "Произошла непредвиденная ошибка." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json index c4d74183..2cbb5b38 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "60a05d3a9bc1a83a449f3397e81b54a2", "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", "status": "translated" + }, + "ru": { + "checksum": "f367dff2a5b4ba833696a76796dea8bd", + "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", + "status": "translated" } }, "keyRenamingNotSupported": { @@ -27,6 +32,11 @@ "checksum": "90d61297c3b4fbac388c4be2b71bcc64", "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", "status": "translated" + }, + "ru": { + "checksum": "2bb377f62e8cd28ed1f101cf11565bb0", + "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", + "status": "translated" } }, "notFound": { @@ -42,6 +52,11 @@ "checksum": "31f68ee8d39879dc72fbc7a13727fa91", "baseChecksum": "a7e38d0533724516bbacee18834f67a5", "status": "translated" + }, + "ru": { + "checksum": "ff9cd65e3847be6d65913357ff266b62", + "baseChecksum": "a7e38d0533724516bbacee18834f67a5", + "status": "translated" } }, "invalidRequest": { @@ -57,6 +72,11 @@ "checksum": "d6ee1ca377f0f08728472801722d1ad5", "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", "status": "translated" + }, + "ru": { + "checksum": "343c7ad78b07f5457b637432b7ff6bda", + "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", + "status": "translated" } }, "createFailed": { @@ -72,6 +92,11 @@ "checksum": "fa7979919d970f5fd2df5d63a36735d9", "baseChecksum": "20a64455184899c3fb2e93b4566c8860", "status": "translated" + }, + "ru": { + "checksum": "3b7de41d823bcb5109f394af407c9d21", + "baseChecksum": "20a64455184899c3fb2e93b4566c8860", + "status": "translated" } }, "updateFailed": { @@ -87,6 +112,11 @@ "checksum": "a63fdd90ff3ce2dbfa649a37ee6e503d", "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", "status": "translated" + }, + "ru": { + "checksum": "5108d70d09cb4b6066e975ce887c6c04", + "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", + "status": "translated" } }, "unexpected": { @@ -102,6 +132,11 @@ "checksum": "1493006d4d13050b985dce812a2b7b15", "baseChecksum": "9789e322478c6f2d59e93d020808642a", "status": "translated" + }, + "ru": { + "checksum": "660b970b7d6a7be830945cf28709dd59", + "baseChecksum": "9789e322478c6f2d59e93d020808642a", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json index 5e5d30e9..c8f52b12 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json @@ -2,176 +2,251 @@ "closeDialog": { "source": "Close dialog", "comment": "Aria-label for close button on translation editor dialog", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Cerrar diálogo", - "fr-ca": "Fermer la boîte de dialogue" + "fr-ca": "Fermer la boîte de dialogue", + "ru": "Закрыть диалог" }, "translationKey": { "source": "Translation Key", "comment": "Label for the translation key input field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Clave de traducción", - "fr-ca": "Clé de traduction" + "fr-ca": "Clé de traduction", + "ru": "Ключ перевода" }, "keyHint": { "source": "Use only letters, numbers, underscores, and hyphens", "comment": "Hint text below translation key input", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Utilice únicamente letras, números, guiones bajos y guiones.", - "fr-ca": "Utilisez seulement des lettres, des chiffres, des traits de soulignement et des tirets." + "fr-ca": "Utilisez seulement des lettres, des chiffres, des traits de soulignement et des tirets.", + "ru": "Используйте только буквы, цифры, подчеркивания и дефисы." }, "baseBadge": { "source": "Base", "comment": "Badge label indicating the base locale", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Base", - "fr-ca": "Base" + "fr-ca": "Base", + "ru": "База" }, "locationLabel": { "source": "Location:", "comment": "Label prefix for the current folder location in the translation editor dialog", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ubicación:", - "fr-ca": "Emplacement :" + "fr-ca": "Emplacement :", + "ru": "Расположение:" }, "locationTabHint": { "source": "Choose a different folder for this translation resource.", "comment": "Hint text shown at the top of the Change Location tab in the translation editor", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Elija una carpeta diferente para este recurso de traducción.", - "fr-ca": "Choisissez un autre dossier pour cette ressource de traduction." + "fr-ca": "Choisissez un autre dossier pour cette ressource de traduction.", + "ru": "Выберите другую папку для этого ресурса перевода." }, "localeTranslationX": { "source": "{locale} Translation", "comment": "Label for locale translation input field, locale is uppercased locale code", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "{locale} Traducción", - "fr-ca": "{locale} Traduction" + "fr-ca": "{locale} Traduction", + "ru": "{locale} Перевод" }, "enterTranslationX": { "source": "Enter {locale} translation...", "comment": "Placeholder for locale translation input field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ingrese la traducción de {locale}...", - "fr-ca": "Entrez la traduction {locale}..." + "fr-ca": "Entrez la traduction {locale}...", + "ru": "Введите {locale} перевод..." }, "baseValueRequired": { "source": "Base translation is required", "comment": "Error shown when base translation value is empty", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se requiere traducción base", - "fr-ca": "La traduction de base est requise" + "fr-ca": "La traduction de base est requise", + "ru": "Требуется базовый перевод." }, "commentLabel": { "source": "Comment (Optional)", "comment": "Label for optional comment field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Comentario (opcional)", - "fr-ca": "Commentaire (facultatif)" + "fr-ca": "Commentaire (facultatif)", + "ru": "Комментарий (необязательно)" }, "commentPlaceholder": { "source": "Add context for translators...", "comment": "Placeholder for comment input field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Añadir contexto para los traductores...", - "fr-ca": "Ajouter du contexte pour les traducteurs..." + "fr-ca": "Ajouter du contexte pour les traducteurs...", + "ru": "Добавьте контекст для переводчиков..." }, "commentHint": { "source": "Provide context or instructions for translators", "comment": "Hint text below comment field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Proporcionar contexto o instrucciones para los traductores", - "fr-ca": "Fournir un contexte ou des instructions aux traducteurs" + "fr-ca": "Fournir un contexte ou des instructions aux traducteurs", + "ru": "Предоставьте контекст или инструкции для переводчиков." }, "otherLocalesToggleX": { "source": "Add translations for other locales ({count} available)", "comment": "Toggle label showing number of additional locales", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Agregar traducciones para otras configuraciones regionales ({count} disponible)", - "fr-ca": "Ajouter des traductions pour d'autres langues ({count} disponibles)" + "fr-ca": "Ajouter des traductions pour d'autres langues ({count} disponibles)", + "ru": "Добавить переводы для других языковых версий ({count} доступны)" }, "status": { "source": "Status", "comment": "Label for translation status dropdown", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Estado", - "fr-ca": "Statut" + "fr-ca": "Statut", + "ru": "Статус" }, "saving": { "source": "Saving...", "comment": "Button text shown while form is submitting", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ahorro...", - "fr-ca": "Économie..." + "fr-ca": "Économie...", + "ru": "Сохранение..." }, "editTitle": { "source": "Edit Translation", "comment": "Dialog title when editing an existing translation", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Editar traducción", - "fr-ca": "Modifier la traduction" + "fr-ca": "Modifier la traduction", + "ru": "Редактировать перевод" }, "createTitle": { "source": "Create Translation", "comment": "Dialog title when creating a new translation", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Crear traducción", - "fr-ca": "Créer une traduction" + "fr-ca": "Créer une traduction", + "ru": "Создать перевод" }, "editSubtitle": { "source": "Update translation values and metadata", "comment": "Dialog subtitle in edit mode", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Actualizar los valores de traducción y los metadatos", - "fr-ca": "Mise à jour des valeurs de traduction et des métadonnées" + "fr-ca": "Mise à jour des valeurs de traduction et des métadonnées", + "ru": "Обновите значения перевода и метаданные." }, "createSubtitle": { "source": "Add a new translation entry to your collection", "comment": "Dialog subtitle in create mode", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Añade una nueva entrada de traducción a tu colección", - "fr-ca": "Ajoutez une nouvelle entrée de traduction à votre collection" + "fr-ca": "Ajoutez une nouvelle entrée de traduction à votre collection", + "ru": "Добавьте новую запись о переводе в свою коллекцию." }, "updateButton": { "source": "Update Translation", "comment": "Submit button label in edit mode", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Actualizar traducción", - "fr-ca": "Mise à jour de la traduction" + "fr-ca": "Mise à jour de la traduction", + "ru": "Обновить перевод" }, "saveButton": { "source": "Save Translation", "comment": "Submit button label in create mode", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Guardar traducción", - "fr-ca": "Enregistrer la traduction" + "fr-ca": "Enregistrer la traduction", + "ru": "Сохранить перевод" }, "keyCopied": { "source": "Similar resource key copied", "comment": "Snackbar message after copying a similar resource key", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Clave de recurso similar copiada", - "fr-ca": "Clé de ressource similaire copiée" + "fr-ca": "Clé de ressource similaire copiée", + "ru": "Аналогичный ключ ресурса скопирован." }, "copyFailed": { "source": "Failed to copy", "comment": "Snackbar message when clipboard copy fails", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "No se pudo copiar", - "fr-ca": "Échec de la copie" + "fr-ca": "Échec de la copie", + "ru": "Не удалось скопировать" }, "keyRequired": { "source": "Translation key is required", "comment": "Validation error for empty key field", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Se requiere clave de traducción", - "fr-ca": "Une clé de traduction est requise." + "fr-ca": "Une clé de traduction est requise.", + "ru": "Требуется ключ перевода" }, "keyPatternError": { "source": "Only letters, numbers, underscores, and hyphens allowed", "comment": "Validation error for invalid key characters", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Solo se permiten letras, números, guiones bajos y guiones.", - "fr-ca": "Seules les lettres, les chiffres, les traits de soulignement et les tirets sont autorisés." + "fr-ca": "Seules les lettres, les chiffres, les traits de soulignement et les tirets sont autorisés.", + "ru": "Разрешаются только буквы, цифры, подчеркивания и дефисы." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json index 7913089f..9275a43c 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json @@ -2,22 +2,31 @@ "baseInfo": { "source": "Base Info", "comment": "Tab label for the base translation info section in the editor dialog", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Información básica", - "fr-ca": "Informations de base" + "fr-ca": "Informations de base", + "ru": "Базовая информация" }, "changeLocation": { "source": "Change Location", "comment": "Tab label for the change location section in the editor dialog", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Cambiar ubicación", - "fr-ca": "Changer d'emplacement" + "fr-ca": "Changer d'emplacement", + "ru": "Изменить местоположение" }, "otherLocales": { "source": "Other Locales", "comment": "Tab label for the other locales section in the editor dialog", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Otros lugares", - "fr-ca": "Autres localités" + "fr-ca": "Autres localités", + "ru": "Другие населенные пункты" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json index 46a15ee8..0369adf3 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "e7c2ebf83638051fcfc3bffd2697e2ec", "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", "status": "translated" + }, + "ru": { + "checksum": "1d0d6fe6f6c7d24f49c30c25806eeb00", + "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", + "status": "translated" } }, "changeLocation": { @@ -27,6 +32,11 @@ "checksum": "dc49addffb6da2de09e5a3fa596dcdfb", "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", "status": "translated" + }, + "ru": { + "checksum": "86568c4f274d53ddbd5c0ca909838948", + "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", + "status": "translated" } }, "otherLocales": { @@ -42,6 +52,11 @@ "checksum": "7d4be744a78b006182b35c9d056b566e", "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", "status": "translated" + }, + "ru": { + "checksum": "dae4ccfa3a748a5236612c9cb07dafac", + "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json index 1e2a109a..f80642bd 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "1c5aa21be0d1004a8d54df134f55e348", "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", "status": "translated" + }, + "ru": { + "checksum": "edff72b736205b30a294a01077e603af", + "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", + "status": "translated" } }, "translationKey": { @@ -27,6 +32,11 @@ "checksum": "92816cfd37b340742301c8b626623651", "baseChecksum": "482823ac52ef47827d3f18f259387366", "status": "translated" + }, + "ru": { + "checksum": "ad67eeaf79c8f882b6eb5cecf892322a", + "baseChecksum": "482823ac52ef47827d3f18f259387366", + "status": "translated" } }, "keyHint": { @@ -42,6 +52,11 @@ "checksum": "b7b58d7abbfe1d258bea836ce70eb4ec", "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", "status": "translated" + }, + "ru": { + "checksum": "a4309f56e3d6a57faf9ce6ba06d0af93", + "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", + "status": "translated" } }, "baseBadge": { @@ -57,6 +72,11 @@ "checksum": "095a1b43effec73955e31e790438de49", "baseChecksum": "095a1b43effec73955e31e790438de49", "status": "translated" + }, + "ru": { + "checksum": "131622d25aebdc15c77aa76c29aaf3ee", + "baseChecksum": "095a1b43effec73955e31e790438de49", + "status": "translated" } }, "locationLabel": { @@ -72,6 +92,11 @@ "checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", "status": "translated" + }, + "ru": { + "checksum": "2be7ebd9f9cac1aa575397e3d0b12b01", + "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", + "status": "translated" } }, "locationTabHint": { @@ -87,6 +112,11 @@ "checksum": "f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1", "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", "status": "translated" + }, + "ru": { + "checksum": "8278d26bbaa2462e777e00884338a749", + "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", + "status": "translated" } }, "localeTranslationX": { @@ -102,6 +132,11 @@ "checksum": "6d2fd9fc703c835e836365104ce929c6", "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", "status": "stale" + }, + "ru": { + "checksum": "820a9f699c16f046f7c80778834ec280", + "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", + "status": "translated" } }, "enterTranslationX": { @@ -117,6 +152,11 @@ "checksum": "9e1e2e4cd501aeb8196a6b20217bfd1d", "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", "status": "stale" + }, + "ru": { + "checksum": "684070f154dc864269f0fc71bf86ca36", + "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", + "status": "translated" } }, "baseValueRequired": { @@ -132,6 +172,11 @@ "checksum": "37b5ac851fba5aa202b33019e04050e9", "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", "status": "translated" + }, + "ru": { + "checksum": "c2f37cd200003c3621956195646dcf09", + "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", + "status": "translated" } }, "commentLabel": { @@ -147,6 +192,11 @@ "checksum": "91a81b9ea21a3a27b3ad7732cd9466be", "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", "status": "translated" + }, + "ru": { + "checksum": "7d9f639233478a28d6bbedf16807a142", + "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", + "status": "translated" } }, "commentPlaceholder": { @@ -162,6 +212,11 @@ "checksum": "cb30420c45287765b0c246e6b7b0f16f", "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", "status": "translated" + }, + "ru": { + "checksum": "e045e9980e2ca2330e2d9809884de776", + "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", + "status": "translated" } }, "commentHint": { @@ -177,6 +232,11 @@ "checksum": "ce2f8d8be24963472f82d4b2b9d50ade", "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", "status": "translated" + }, + "ru": { + "checksum": "1b226402bd8bdd4118f24dc87d0a6ea4", + "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", + "status": "translated" } }, "otherLocalesToggleX": { @@ -192,6 +252,11 @@ "checksum": "bc079033bb772e8a21525f9064bd47b7", "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", "status": "stale" + }, + "ru": { + "checksum": "0bd39f06176ffb76f44bfb101e822487", + "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", + "status": "translated" } }, "status": { @@ -207,6 +272,11 @@ "checksum": "87a831bc99060c55b50dbe91c6aab6e9", "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", "status": "translated" + }, + "ru": { + "checksum": "7203f7a4ff564cb876e8db54c903dbfc", + "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", + "status": "translated" } }, "saving": { @@ -222,6 +292,11 @@ "checksum": "c6b16cb467ec9ee9a2f3e4c7f6f7ac30", "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", "status": "translated" + }, + "ru": { + "checksum": "c15f152fce72c2e173576d2915651fd4", + "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", + "status": "translated" } }, "editTitle": { @@ -237,6 +312,11 @@ "checksum": "faddb24e4a6d65187240a73f67279d41", "baseChecksum": "305253475cc868103805068f45a90468", "status": "translated" + }, + "ru": { + "checksum": "420f0d3ce399f2011c6ed08db0966aeb", + "baseChecksum": "305253475cc868103805068f45a90468", + "status": "translated" } }, "createTitle": { @@ -252,6 +332,11 @@ "checksum": "6dace602a9413456da723a74ccea1247", "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", "status": "translated" + }, + "ru": { + "checksum": "44dadb05d363f38d2b90a564e5aa5cde", + "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", + "status": "translated" } }, "editSubtitle": { @@ -267,6 +352,11 @@ "checksum": "1a04f0f7a053bfba0aee45213a2d446f", "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", "status": "translated" + }, + "ru": { + "checksum": "87072ea6ecc477a8a303d165f40707fa", + "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", + "status": "translated" } }, "createSubtitle": { @@ -282,6 +372,11 @@ "checksum": "31a8eb02e385879908aa6189c52e9cd7", "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", "status": "translated" + }, + "ru": { + "checksum": "b63e40a456682ec423e0093a38ca5325", + "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", + "status": "translated" } }, "updateButton": { @@ -297,6 +392,11 @@ "checksum": "932e59c4532010533cca59bdfc93fc9f", "baseChecksum": "e8d2af23aa47989c080ffc7252646485", "status": "translated" + }, + "ru": { + "checksum": "e3301cba3a8328585a5d8da49efabae7", + "baseChecksum": "e8d2af23aa47989c080ffc7252646485", + "status": "translated" } }, "saveButton": { @@ -312,6 +412,11 @@ "checksum": "0a65eff2cde1b1c920bc8bfca7fb0a6f", "baseChecksum": "d503198287eeadd483ae40abef48027a", "status": "translated" + }, + "ru": { + "checksum": "56c170b801d292304f7d51848bbbb5b1", + "baseChecksum": "d503198287eeadd483ae40abef48027a", + "status": "translated" } }, "keyCopied": { @@ -327,6 +432,11 @@ "checksum": "85f05ad1c3d4d31a2d7e9528908c6b9e", "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", "status": "translated" + }, + "ru": { + "checksum": "daff2f6a15fc189a32b84e96842f40b8", + "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", + "status": "translated" } }, "copyFailed": { @@ -342,6 +452,11 @@ "checksum": "7ceeff034e95092dd8798b12ba572014", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "ru": { + "checksum": "c63eb8553a973244e9929fb545ba6a68", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "keyRequired": { @@ -357,6 +472,11 @@ "checksum": "ea28c6adb63a2757e793c1cd43c4ec9b", "baseChecksum": "a2f067165e800ad99feffdad954be4de", "status": "translated" + }, + "ru": { + "checksum": "2d03396b3c9738a779c930607eec3737", + "baseChecksum": "a2f067165e800ad99feffdad954be4de", + "status": "translated" } }, "keyPatternError": { @@ -372,6 +492,11 @@ "checksum": "7552d3fca2f3b4d304ddf128cd1619f6", "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", "status": "translated" + }, + "ru": { + "checksum": "9f5fa4fee28b782fab639f3433c9d2eb", + "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json index 2d41e4e7..f8665960 100644 --- a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json @@ -2,64 +2,91 @@ "dragToMoveAriaLabel": { "source": "Drag to move translation", "comment": "Aria-label for the drag handle on a translation item", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Arrastrar para mover la traducción", - "fr-ca": "Faites glisser pour déplacer la traduction" + "fr-ca": "Faites glisser pour déplacer la traduction", + "ru": "Перетащите, чтобы переместить перевод." }, "copyKeyAriaLabel": { "source": "Copy key", "comment": "Aria-label for the copy key button on a translation item header", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Copiar clave", - "fr-ca": "Copier la clé" + "fr-ca": "Copier la clé", + "ru": "Копировать ключ" }, "hideCommentAriaLabel": { "source": "Hide comment", "comment": "Aria-label for the comment toggle button when comment is currently shown", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Ocultar comentario", - "fr-ca": "Masquer le commentaire" + "fr-ca": "Masquer le commentaire", + "ru": "Скрыть комментарий" }, "showCommentAriaLabel": { "source": "Show comment", "comment": "Aria-label for the comment toggle button when comment is currently hidden", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Mostrar comentario", - "fr-ca": "Afficher le commentaire" + "fr-ca": "Afficher le commentaire", + "ru": "Показать комментарий" }, "moreActionsAriaLabel": { "source": "More actions", "comment": "Aria-label for the more actions menu trigger button on a translation item", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Más acciones", - "fr-ca": "Plus d'actions" + "fr-ca": "Plus d'actions", + "ru": "Дополнительные действия" }, "editAriaLabel": { "source": "Edit translation", "comment": "Aria-label for the Edit menu item in the translation item actions menu", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Editar traducción", - "fr-ca": "Modifier la traduction" + "fr-ca": "Modifier la traduction", + "ru": "Редактировать перевод" }, "translateAriaLabel": { "source": "Translate resource", "comment": "Aria-label for the Translate menu item in the translation item actions menu", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Traducir recurso", - "fr-ca": "ressource de traduction" + "fr-ca": "ressource de traduction", + "ru": "Перевести ресурс" }, "deleteAriaLabel": { "source": "Delete translation", "comment": "Aria-label for the Delete menu item in the translation item actions menu", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Eliminar traducción", - "fr-ca": "Supprimer la traduction" + "fr-ca": "Supprimer la traduction", + "ru": "Удалить перевод" }, "noStatuses": { "source": "No statuses", "comment": "Screen-reader text shown in status breakdown when no translation statuses are available", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Sin estados", - "fr-ca": "Aucun statut" + "fr-ca": "Aucun statut", + "ru": "Нет статусов" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json index 94244e79..d76adbac 100644 --- a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "09dbbc85f5e11013eb9067bf66405f44", "baseChecksum": "68124efca03350fd7d6da755400d15c0", "status": "translated" + }, + "ru": { + "checksum": "2128d13dfe14d26e4f3fcf78b43f2953", + "baseChecksum": "68124efca03350fd7d6da755400d15c0", + "status": "translated" } }, "copyKeyAriaLabel": { @@ -27,6 +32,11 @@ "checksum": "b2581a92e7db3a59b61db2e29cd5379b", "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", "status": "translated" + }, + "ru": { + "checksum": "0825c26b70c6f32db71b9705d16f7382", + "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", + "status": "translated" } }, "hideCommentAriaLabel": { @@ -42,6 +52,11 @@ "checksum": "db457af4e0e015ded09a75087331b01b", "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", "status": "translated" + }, + "ru": { + "checksum": "d2578e5524e6d239d2fd4c13454080ab", + "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", + "status": "translated" } }, "showCommentAriaLabel": { @@ -57,6 +72,11 @@ "checksum": "b586ba13de37dc60e1ba12d73a553586", "baseChecksum": "ba109df70b5131f0f40f1726498c620e", "status": "translated" + }, + "ru": { + "checksum": "318ab77d48ee4f17a9e63b35b7d22132", + "baseChecksum": "ba109df70b5131f0f40f1726498c620e", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -72,6 +92,11 @@ "checksum": "42d9477a48c9538ad547198f86bfb226", "baseChecksum": "284716247b12b363fd6b6a71bff0918e", "status": "translated" + }, + "ru": { + "checksum": "480a85fa79cb183ea54cfd5c53e52888", + "baseChecksum": "284716247b12b363fd6b6a71bff0918e", + "status": "translated" } }, "editAriaLabel": { @@ -87,6 +112,11 @@ "checksum": "faddb24e4a6d65187240a73f67279d41", "baseChecksum": "a7f6326fc128712ffaee83351ea67525", "status": "translated" + }, + "ru": { + "checksum": "420f0d3ce399f2011c6ed08db0966aeb", + "baseChecksum": "a7f6326fc128712ffaee83351ea67525", + "status": "translated" } }, "translateAriaLabel": { @@ -102,6 +132,11 @@ "checksum": "c0241b4e360b27cca2b09dd7bfb4779d", "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", "status": "translated" + }, + "ru": { + "checksum": "3f22abe764ae7932bee7be351c1daa11", + "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", + "status": "translated" } }, "deleteAriaLabel": { @@ -117,6 +152,11 @@ "checksum": "78033b482df4030cef566343dbb0f639", "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", "status": "translated" + }, + "ru": { + "checksum": "9cdcd35d38e395a10dc8fd5021239714", + "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", + "status": "translated" } }, "noStatuses": { @@ -132,6 +172,11 @@ "checksum": "5473390fc7c6e2799032cec4df13b34c", "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", "status": "translated" + }, + "ru": { + "checksum": "d949136208fa1d59d72e8fa04becd3bb", + "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/resource_entries.json b/apps/tracker/src/i18n/browser/translationList/resource_entries.json index fc09c849..3d3b8dfc 100644 --- a/apps/tracker/src/i18n/browser/translationList/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationList/resource_entries.json @@ -2,8 +2,11 @@ "ariaLabel": { "source": "Translation list", "comment": "Aria-label for the virtual scroll viewport containing the list of translations", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Lista de traducciones", - "fr-ca": "Liste de traductions" + "fr-ca": "Liste de traductions", + "ru": "Список переводов" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json index e17bad1a..89278fd0 100644 --- a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "ccdfbdc83b7ed690c123b9cb9787dfc2", "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", "status": "translated" + }, + "ru": { + "checksum": "38cbe2fba73233baff4d365eefb00a4a", + "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json index 13c63cdf..81033d5f 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json @@ -2,8 +2,11 @@ "ariaLabel": { "source": "Search translations", "comment": "Aria-label for the translation search input in the main translation header", - "tags": ["browser"], + "tags": [ + "browser" + ], "es": "Buscar traducciones", - "fr-ca": "Recherche de traductions" + "fr-ca": "Recherche de traductions", + "ru": "Поиск переводов" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json index 13f1ff5a..efcbff2e 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "f20cd2443adc8f77c8e0e12c8fcaf7a7", "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", "status": "translated" + }, + "ru": { + "checksum": "3970fa93ce20322f721cdc90ddc0ec39", + "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/resource_entries.json b/apps/tracker/src/i18n/collections/card/resource_entries.json index 0c94e253..8bb69d66 100644 --- a/apps/tracker/src/i18n/collections/card/resource_entries.json +++ b/apps/tracker/src/i18n/collections/card/resource_entries.json @@ -2,22 +2,33 @@ "edit": { "source": "Edit collection", "comment": "Accessible label for edit icon button on collection card", - "tags": ["card", "collection"], + "tags": [ + "card", + "collection" + ], "es": "Editar colección", - "fr-ca": "Modifier la collection" + "fr-ca": "Modifier la collection", + "ru": "Редактировать коллекцию" }, "delete": { "source": "Delete collection", "comment": "Accessible label for delete icon button on collection card", - "tags": ["card", "collection"], + "tags": [ + "card", + "collection" + ], "es": "Eliminar colección", - "fr-ca": "Supprimer la collection" + "fr-ca": "Supprimer la collection", + "ru": "Удалить коллекцию" }, "moreActionsAriaLabel": { "source": "More actions for collection", "comment": "Aria label for the more actions button on a collection card", - "tags": ["collections"], + "tags": [ + "collections" + ], "es": "Más acciones para la recolección", - "fr-ca": "Plus d'actions pour la collecte" + "fr-ca": "Plus d'actions pour la collecte", + "ru": "Дополнительные действия для сбора" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/tracker_meta.json b/apps/tracker/src/i18n/collections/card/tracker_meta.json index ff6abe3e..5e8f09d0 100644 --- a/apps/tracker/src/i18n/collections/card/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/card/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "29ab3c9f022d5d28e6d5ea87be010057", "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", "status": "new" + }, + "ru": { + "checksum": "fc542666f0b02b7b83ef1c93f694726c", + "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", + "status": "translated" } }, "delete": { @@ -27,6 +32,11 @@ "checksum": "66a9a5432f50dc163fec6cb64d2c88b3", "baseChecksum": "611307b7abf62c8f6ffc374701393f29", "status": "new" + }, + "ru": { + "checksum": "0f440420a40b59ebe5a8eae593b4bc31", + "baseChecksum": "611307b7abf62c8f6ffc374701393f29", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -42,6 +52,11 @@ "checksum": "7178ecf6f4ecbdfbfae955ae5d30452c", "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", "status": "translated" + }, + "ru": { + "checksum": "9909138ddecc5b4abe148b463dc91387", + "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json index c7fc4159..3e7173c2 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json @@ -3,6 +3,7 @@ "source": "Create Collection", "comment": "Dialog title when creating a new collection", "es": "Crear Colección", - "fr-ca": "Créer une Collection" + "fr-ca": "Créer une Collection", + "ru": "Создать коллекцию" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json index 61c79ed2..9fb09620 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "ede7465a10ac320690ce98a92a9515ce", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "new" + }, + "ru": { + "checksum": "f2758a5f11d0f14b901f83f75ca4b178", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json index 2462f95a..e7c3a48b 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json @@ -3,12 +3,14 @@ "source": "Delete Collection", "comment": "Confirmation dialog title when deleting a collection", "es": "Eliminar Colección", - "fr-ca": "Supprimer la Collection" + "fr-ca": "Supprimer la Collection", + "ru": "Удалить коллекцию" }, "message": { "source": "Are you sure you want to delete {name}?", "comment": "Confirmation message with collection name placeholder", "es": "¿Estás seguro de que deseas eliminar {name}?", - "fr-ca": "Êtes-vous sûr de vouloir supprimer {name}?" + "fr-ca": "Êtes-vous sûr de vouloir supprimer {name}?", + "ru": "Вы уверены, что хотите удалить {name}?" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json index 0ed6aadd..2f9c72b6 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "48beba344a9bf3fe590da79bd990c1ad", "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", "status": "new" + }, + "ru": { + "checksum": "0f440420a40b59ebe5a8eae593b4bc31", + "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", + "status": "translated" } }, "message": { @@ -27,6 +32,11 @@ "checksum": "07447e6ba3a9f5a7b53190d3ceded3ad", "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", "status": "stale" + }, + "ru": { + "checksum": "8e9636f32d40af6bd958012fed558f26", + "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json index 16cf4a2a..f9654696 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json @@ -3,6 +3,7 @@ "source": "Edit Collection", "comment": "Dialog title when editing an existing collection", "es": "Editar Colección", - "fr-ca": "Modifier la Collection" + "fr-ca": "Modifier la Collection", + "ru": "Редактировать коллекцию" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json index fa2a9114..902793e5 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "4eccf5449475d38715d4d54aa6fdad49", "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", "status": "new" + }, + "ru": { + "checksum": "fc542666f0b02b7b83ef1c93f694726c", + "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/resource_entries.json index cd4df0ce..93fa8847 100644 --- a/apps/tracker/src/i18n/collections/dialog/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/resource_entries.json @@ -3,65 +3,76 @@ "source": "Collection Name", "comment": "Label for collection name input field", "es": "Nombre de la Colección", - "fr-ca": "Nom de la Collection" + "fr-ca": "Nom de la Collection", + "ru": "Название коллекции" }, "namePlaceholder": { "source": "e.g., my-app-i18n", "comment": "Placeholder text for collection name input", "es": "ej., mi-app-i18n", - "fr-ca": "p. ex., mon-app-i18n" + "fr-ca": "p. ex., mon-app-i18n", + "ru": "например, my-app-i18n" }, "nameRequired": { "source": "Collection name is required", "comment": "Error message when name is required", "es": "El nombre de la colección es obligatorio", - "fr-ca": "Le nom de la collection est requis" + "fr-ca": "Le nom de la collection est requis", + "ru": "Название коллекции обязательно для указания." }, "folderLabel": { "source": "Translations Folder", "comment": "Label for translations folder input field", "es": "Carpeta de Traducciones", - "fr-ca": "Dossier de Traductions" + "fr-ca": "Dossier de Traductions", + "ru": "Папка переводов" }, "folderPlaceholder": { "source": "e.g., ./src/assets/i18n", "comment": "Placeholder text for folder path input", "es": "ej., ./src/assets/i18n", - "fr-ca": "p. ex., ./src/assets/i18n" + "fr-ca": "p. ex., ./src/assets/i18n", + "ru": "например, ./src/assets/i18n" }, "folderRequired": { "source": "Translations folder is required", "comment": "Error message when folder is required", "es": "La carpeta de traducciones es obligatoria", - "fr-ca": "Le dossier de traductions est requis" + "fr-ca": "Le dossier de traductions est requis", + "ru": "Необходима папка «Переводы»." }, "localesLabel": { "source": "Locales (Optional)", "comment": "Label for locales input field", "es": "Idiomas (Opcional)", - "fr-ca": "Langues (Optionnel)" + "fr-ca": "Langues (Optionnel)", + "ru": "Локали (необязательно)" }, "localesHint": { "source": "Comma-separated list of locale codes. Leave empty to use global config.", "comment": "Hint text for locales input", "es": "Lista de códigos de idioma separados por comas. Dejar vacío para usar la configuración global.", - "fr-ca": "Liste de codes de langue séparés par des virgules. Laisser vide pour utiliser la configuration globale." + "fr-ca": "Liste de codes de langue séparés par des virgules. Laisser vide pour utiliser la configuration globale.", + "ru": "Список кодов локали, разделённых запятыми. Оставьте пустым, чтобы использовать глобальную конфигурацию." }, "createButton": { "source": "Create", "comment": "Create button text in create mode", "es": "Crear", - "fr-ca": "Créer" + "fr-ca": "Créer", + "ru": "Создавать" }, "localesPlaceholder": { "source": "e.g., en, fr, es", "comment": "Placeholder text for locales input", "es": "ej., en, fr, es", - "fr-ca": "p. ex., en, fr, es" + "fr-ca": "p. ex., en, fr, es", + "ru": "например, en, fr, es" }, "createTitle": { "source": "Create Collection", "es": "Crear Colección", - "fr-ca": "Créer une Collection" + "fr-ca": "Créer une Collection", + "ru": "Создать коллекцию" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json index 521aec75..36e4b7b1 100644 --- a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "9b2e0addbf8c52f70c4f21afc6d04424", "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", "status": "new" + }, + "ru": { + "checksum": "f413c774d4c7f12fa4a133e70df40da7", + "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", + "status": "translated" } }, "namePlaceholder": { @@ -27,6 +32,11 @@ "checksum": "2f3f2ffc5064f3443abc44a2aa173875", "baseChecksum": "e02e22429e66e242217bdbbde92eb081", "status": "new" + }, + "ru": { + "checksum": "905b562f5dbea9c60fe502f92ef9f7ba", + "baseChecksum": "e02e22429e66e242217bdbbde92eb081", + "status": "translated" } }, "nameRequired": { @@ -42,6 +52,11 @@ "checksum": "c3bc94f03a64aaa01c7f498608c466be", "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", "status": "new" + }, + "ru": { + "checksum": "3ddda324919658f2bbbcc76b75f9aa18", + "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", + "status": "translated" } }, "folderLabel": { @@ -57,6 +72,11 @@ "checksum": "f37e78057d928d7ad6d26fbdaf01a48a", "baseChecksum": "cec5a0934dba090c47144036ce5101ec", "status": "new" + }, + "ru": { + "checksum": "f69386fcfa4438d5c16063cda4e553c0", + "baseChecksum": "cec5a0934dba090c47144036ce5101ec", + "status": "translated" } }, "folderPlaceholder": { @@ -72,6 +92,11 @@ "checksum": "276e83e426793d29498da9cb5318ff33", "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", "status": "new" + }, + "ru": { + "checksum": "2054bcc0a9d2e4bd618a1940a77b9841", + "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", + "status": "translated" } }, "folderRequired": { @@ -87,6 +112,11 @@ "checksum": "dcb2957fece9aa9124e57ad9b85f5e27", "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", "status": "new" + }, + "ru": { + "checksum": "d19d7edeff0e11f5d558af2888567da0", + "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", + "status": "translated" } }, "localesLabel": { @@ -102,6 +132,11 @@ "checksum": "560244d0702fce943b9c7b6cb2d6bf1f", "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", "status": "new" + }, + "ru": { + "checksum": "51e92ed44afc8b2916ff528507039a05", + "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", + "status": "translated" } }, "localesHint": { @@ -117,6 +152,11 @@ "checksum": "5ef803e770f90d2498d6a6e036df43ed", "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", "status": "new" + }, + "ru": { + "checksum": "8378c4bbbbcfcf9461b193618fa29297", + "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", + "status": "translated" } }, "createButton": { @@ -132,6 +172,11 @@ "checksum": "205be9be7dda08c4608df07c0295340b", "baseChecksum": "686e697538050e4664636337cc3b834f", "status": "new" + }, + "ru": { + "checksum": "a0100b2077f85b2b147c6a93ee953756", + "baseChecksum": "686e697538050e4664636337cc3b834f", + "status": "translated" } }, "localesPlaceholder": { @@ -147,6 +192,11 @@ "checksum": "6372844998585a033d8c4dfff24f0125", "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", "status": "new" + }, + "ru": { + "checksum": "7ffe6d90c1ccf4183b4c42d3aef15dee", + "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", + "status": "translated" } }, "createTitle": { @@ -162,6 +212,11 @@ "checksum": "ede7465a10ac320690ce98a92a9515ce", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "new" + }, + "ru": { + "checksum": "f2758a5f11d0f14b901f83f75ca4b178", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json index e9539446..39de3015 100644 --- a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json +++ b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json @@ -3,12 +3,14 @@ "source": "No collections yet", "comment": "Message shown when user has no collections", "es": "Aún no hay colecciones", - "fr-ca": "Aucune collection pour l'instant" + "fr-ca": "Aucune collection pour l'instant", + "ru": "Коллекций пока нет." }, "cta": { "source": "Create your first collection", "comment": "Call-to-action button in empty state to create first collection", "es": "Crea tu primera colección", - "fr-ca": "Créez votre première collection" + "fr-ca": "Créez votre première collection", + "ru": "Создайте свою первую коллекцию" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json index c1a38276..233cbcfd 100644 --- a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "48c6722c28f703c0dcf3134c8cb30156", "baseChecksum": "be7253840e621510212e49959ed1c8ad", "status": "new" + }, + "ru": { + "checksum": "17977a7157daae9f845b5147d189ea2e", + "baseChecksum": "be7253840e621510212e49959ed1c8ad", + "status": "translated" } }, "cta": { @@ -27,6 +32,11 @@ "checksum": "3bee4397201fc7e7bb847f6bea7ff859", "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", "status": "new" + }, + "ru": { + "checksum": "e3c8236d95bb0ee4367024ec8f2e5b46", + "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json index d6dd0fa6..aa77ea2e 100644 --- a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json @@ -3,6 +3,7 @@ "source": "This field is required", "comment": "Validation error for required fields", "es": "Este campo es obligatorio", - "fr-ca": "Ce champ est requis" + "fr-ca": "Ce champ est requis", + "ru": "Это поле обязательно к заполнению" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json index 5d4663fc..2775dc78 100644 --- a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "b56d54bd932dd0fae2f7e6862ede6ac7", "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", "status": "new" + }, + "ru": { + "checksum": "0216d22927cb8af67c93b6e665c6d2a6", + "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/resource_entries.json b/apps/tracker/src/i18n/collections/form/resource_entries.json index e8b6bfa3..e715e0b4 100644 --- a/apps/tracker/src/i18n/collections/form/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/resource_entries.json @@ -3,24 +3,28 @@ "source": "Collection name", "comment": "Label for collection name input field", "es": "Nombre de la colección", - "fr-ca": "Nom de la collection" + "fr-ca": "Nom de la collection", + "ru": "Название коллекции" }, "translationsFolder": { "source": "Translations folder", "comment": "Label for translations folder path input field", "es": "Carpeta de traducciones", - "fr-ca": "Dossier de traductions" + "fr-ca": "Dossier de traductions", + "ru": "Папка «Переводы»" }, "locales": { "source": "Locales", "comment": "Label for locales input field", "es": "Idiomas", - "fr-ca": "Langues" + "fr-ca": "Langues", + "ru": "Локалы" }, "localesPlaceholder": { "source": "Comma-separated (e.g., en,fr,es)", "comment": "Placeholder text showing format for locale input", "es": "Separados por comas (ej., en,fr,es)", - "fr-ca": "Séparés par des virgules (p. ex., en,fr,es)" + "fr-ca": "Séparés par des virgules (p. ex., en,fr,es)", + "ru": "Через запятую (например, en,fr,es)" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/tracker_meta.json b/apps/tracker/src/i18n/collections/form/tracker_meta.json index 728ec648..16704d16 100644 --- a/apps/tracker/src/i18n/collections/form/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "71a55f5613a683335f179aabae068dba", "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", "status": "new" + }, + "ru": { + "checksum": "f413c774d4c7f12fa4a133e70df40da7", + "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", + "status": "translated" } }, "translationsFolder": { @@ -27,6 +32,11 @@ "checksum": "1adaec0c3a5232d67a57d9be21d6986f", "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", "status": "new" + }, + "ru": { + "checksum": "707cdce5f3be49e5ac8ab4d6a87bb519", + "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", + "status": "translated" } }, "locales": { @@ -42,6 +52,11 @@ "checksum": "1ea21417b4fc870a18d6a244983be72b", "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", "status": "new" + }, + "ru": { + "checksum": "9178af860bce312048c5866c8f386f00", + "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", + "status": "translated" } }, "localesPlaceholder": { @@ -57,6 +72,11 @@ "checksum": "0ecdcd628ee785eca45aaccef0413f35", "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", "status": "new" + }, + "ru": { + "checksum": "dab66c93ccf68c9c3c50bb597c026753", + "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/resource_entries.json b/apps/tracker/src/i18n/collections/resource_entries.json index 798d4655..1f90757d 100644 --- a/apps/tracker/src/i18n/collections/resource_entries.json +++ b/apps/tracker/src/i18n/collections/resource_entries.json @@ -3,12 +3,14 @@ "source": "Collections", "comment": "Page title for collections management dashboard", "es": "Colecciones", - "fr-ca": "Collections" + "fr-ca": "Collections", + "ru": "Коллекции" }, "addButton": { "source": "Add Collection", "comment": "Button text to open dialog for creating a new collection", "es": "Agregar Colección", - "fr-ca": "Ajouter une Collection" + "fr-ca": "Ajouter une Collection", + "ru": "Добавить коллекцию" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/resource_entries.json b/apps/tracker/src/i18n/collections/toast/resource_entries.json index 35980fc1..612fcb2a 100644 --- a/apps/tracker/src/i18n/collections/toast/resource_entries.json +++ b/apps/tracker/src/i18n/collections/toast/resource_entries.json @@ -3,52 +3,68 @@ "source": "Collection created successfully", "comment": "Success message after creating a collection", "es": "Colección creada exitosamente", - "fr-ca": "Collection créée avec succès" + "fr-ca": "Collection créée avec succès", + "ru": "Коллекция успешно создана." }, "updated": { "source": "Collection updated successfully", "comment": "Success message after editing a collection", "es": "Colección actualizada exitosamente", - "fr-ca": "Collection mise à jour avec succès" + "fr-ca": "Collection mise à jour avec succès", + "ru": "Коллекция успешно обновлена." }, "deleted": { "source": "Collection deleted successfully", "comment": "Success message after deleting a collection", "es": "Colección eliminada exitosamente", - "fr-ca": "Collection supprimée avec succès" + "fr-ca": "Collection supprimée avec succès", + "ru": "Коллекция успешно удалена." }, "error": { "source": "An error occurred. Please try again.", "comment": "Generic error message for failed operations", "es": "Ocurrió un error. Por favor, inténtalo de nuevo.", - "fr-ca": "Une erreur s'est produite. Veuillez réessayer." + "fr-ca": "Une erreur s'est produite. Veuillez réessayer.", + "ru": "Произошла ошибка. Пожалуйста, попробуйте еще раз." }, "loadFailed": { "source": "Failed to load collections", "comment": "Error toast when loading collections fails", - "tags": ["collections"], + "tags": [ + "collections" + ], "es": "No se pudieron cargar las colecciones", - "fr-ca": "Échec du chargement des collections" + "fr-ca": "Échec du chargement des collections", + "ru": "Не удалось загрузить коллекции." }, "createFailed": { "source": "Failed to create collection", "comment": "Error toast when creating a collection fails", - "tags": ["collections"], + "tags": [ + "collections" + ], "es": "No se pudo crear la colección", - "fr-ca": "Impossible de créer la collection" + "fr-ca": "Impossible de créer la collection", + "ru": "Не удалось создать коллекцию." }, "updateFailed": { "source": "Failed to update collection", "comment": "Error toast when updating a collection fails", - "tags": ["collections"], + "tags": [ + "collections" + ], "es": "No se pudo actualizar la colección", - "fr-ca": "Échec de la mise à jour de la collection" + "fr-ca": "Échec de la mise à jour de la collection", + "ru": "Не удалось обновить коллекцию." }, "deleteFailed": { "source": "Failed to delete collection", "comment": "Error toast when deleting a collection fails", - "tags": ["collections"], + "tags": [ + "collections" + ], "es": "No se pudo eliminar la colección", - "fr-ca": "Échec de la suppression de la collection" + "fr-ca": "Échec de la suppression de la collection", + "ru": "Не удалось удалить коллекцию." } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/tracker_meta.json b/apps/tracker/src/i18n/collections/toast/tracker_meta.json index 42cac44d..84386d9a 100644 --- a/apps/tracker/src/i18n/collections/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/toast/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "f0c46edea5b3228182d4bd2a8526d41c", "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", "status": "new" + }, + "ru": { + "checksum": "a2c6e00d4666f43c732eac744c3a6de4", + "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", + "status": "translated" } }, "updated": { @@ -27,6 +32,11 @@ "checksum": "229631219826952bae7825d648a129c9", "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", "status": "new" + }, + "ru": { + "checksum": "9416053d46ee2878a0dd68a37cc8315e", + "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", + "status": "translated" } }, "deleted": { @@ -42,6 +52,11 @@ "checksum": "700ae16628d36c1192dcf0599e14161d", "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", "status": "new" + }, + "ru": { + "checksum": "fa821a55c33c9ccfe0abde0c039d98e3", + "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", + "status": "translated" } }, "error": { @@ -57,6 +72,11 @@ "checksum": "9870ec90fee1aba84a4990f1edcea33a", "baseChecksum": "b028ccd04708b8c3c7722956e149a718", "status": "new" + }, + "ru": { + "checksum": "01480858a5404da77d5aa893ea7926f5", + "baseChecksum": "b028ccd04708b8c3c7722956e149a718", + "status": "translated" } }, "loadFailed": { @@ -72,6 +92,11 @@ "checksum": "946a6b6d2a9aa580f76aff594ab251ed", "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", "status": "translated" + }, + "ru": { + "checksum": "9f7cd6b4931a75e4235408e7bdfdb494", + "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", + "status": "translated" } }, "createFailed": { @@ -87,6 +112,11 @@ "checksum": "18a29481584edbea016b424941562d95", "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", "status": "translated" + }, + "ru": { + "checksum": "f73849f7f695c0b7fffeafec0b211e23", + "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", + "status": "translated" } }, "updateFailed": { @@ -102,6 +132,11 @@ "checksum": "925e9bb8f2574f47c6dac64472fcf85b", "baseChecksum": "af9daa27991b1108df98277da9d19a38", "status": "translated" + }, + "ru": { + "checksum": "6c6688811503d773644f8d390ddf8b32", + "baseChecksum": "af9daa27991b1108df98277da9d19a38", + "status": "translated" } }, "deleteFailed": { @@ -117,6 +152,11 @@ "checksum": "0a24bee9edc2d6eddb79efe6a0fc8419", "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", "status": "translated" + }, + "ru": { + "checksum": "427da9de524038ca6370fac8b9fa22c9", + "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/tracker_meta.json b/apps/tracker/src/i18n/collections/tracker_meta.json index c80a1f3d..eb4db9a6 100644 --- a/apps/tracker/src/i18n/collections/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "a9fc91939a389c7c73e7a3f3cbf411cd", "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", "status": "new" + }, + "ru": { + "checksum": "306e41fce3bc9de4911363df9a80a5ba", + "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", + "status": "translated" } }, "addButton": { @@ -27,6 +32,11 @@ "checksum": "8415e183eef3d657a530bbd6c1fb5ef0", "baseChecksum": "10ac958235fe83036f8e5244454f7c78", "status": "new" + }, + "ru": { + "checksum": "8e290a022048d2cf84f456d1170ce6aa", + "baseChecksum": "10ac958235fe83036f8e5244454f7c78", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/resource_entries.json b/apps/tracker/src/i18n/common/actions/resource_entries.json index 4fc0b54e..89bfe7af 100644 --- a/apps/tracker/src/i18n/common/actions/resource_entries.json +++ b/apps/tracker/src/i18n/common/actions/resource_entries.json @@ -2,92 +2,124 @@ "edit": { "source": "Edit", "comment": "Text on a button or link that will display edit form for an entity", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Editar", - "fr-ca": "Modifier" + "fr-ca": "Modifier", + "ru": "Редактировать" }, "delete": { "source": "Delete", "comment": "Text on a button that will cause an entity to be deleted", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Eliminar", - "fr-ca": "Supprimer" + "fr-ca": "Supprimer", + "ru": "Удалить" }, "retry": { "source": "Retry", "comment": "Text on a button to cause an action to retry operation", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Reintentar", - "fr-ca": "Réessayer" + "fr-ca": "Réessayer", + "ru": "Повторить попытку" }, "cancel": { "source": "Cancel", "comment": "Text on a button to cancel whatever opration the user was about to do", "es": "Cancelar", - "fr-ca": "Annuler" + "fr-ca": "Annuler", + "ru": "Отмена" }, "ok": { "source": "OK", "es": "OK", - "fr-ca": "OK" + "fr-ca": "OK", + "ru": "ХОРОШО" }, "save": { "source": "Save", "comment": "Save button text in edit mode", "es": "Guardar", - "fr-ca": "Enregistrer" + "fr-ca": "Enregistrer", + "ru": "Сохранять" }, "back": { "source": "Back", "es": "Volver", - "fr-ca": "Retour" + "fr-ca": "Retour", + "ru": "Назад" }, "clickToCopy": { "source": "click to copy", "comment": "Message to user that item can be copied to clipboard", "es": "clic para copiar", - "fr-ca": "cliquer pour copier" + "fr-ca": "cliquer pour copier", + "ru": "нажмите, чтобы скопировать" }, "move": { "source": "Move", "comment": "Action label to move an item to a different location", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Mover", - "fr-ca": "Déplacer" + "fr-ca": "Déplacer", + "ru": "Двигаться" }, "translate": { "source": "Translate", "comment": "Action button to auto-translate a resource", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Traducir", - "fr-ca": "Traduire" + "fr-ca": "Traduire", + "ru": "Переводить" }, "selectAll": { "source": "Select All", "comment": "Button to select all items in a list or filter", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Seleccionar todo", - "fr-ca": "Sélectionner tout" + "fr-ca": "Sélectionner tout", + "ru": "Выбрать все" }, "clearAll": { "source": "Clear All", "comment": "Button to clear all selections in a list or filter", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Borrar todo", - "fr-ca": "Effacer tout" + "fr-ca": "Effacer tout", + "ru": "Очистить все" }, "close": { "source": "Close", "comment": "Button to close a dialog or dismiss a notification", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Cerca", - "fr-ca": "Fermer" + "fr-ca": "Fermer", + "ru": "Закрывать" }, "dismiss": { "source": "Dismiss", "comment": "Button to dismiss a notification or snackbar", - "tags": ["common"], + "tags": [ + "common" + ], "es": "Despedir", - "fr-ca": "Rejeter" + "fr-ca": "Rejeter", + "ru": "Увольнять" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/tracker_meta.json b/apps/tracker/src/i18n/common/actions/tracker_meta.json index 16f7e139..db1014c7 100644 --- a/apps/tracker/src/i18n/common/actions/tracker_meta.json +++ b/apps/tracker/src/i18n/common/actions/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "898c079d2e62a4b1971dfbad9d860838", "baseChecksum": "7dce122004969d56ae2e0245cb754d35", "status": "new" + }, + "ru": { + "checksum": "1706282c5244c8e988f76c5eb939b754", + "baseChecksum": "7dce122004969d56ae2e0245cb754d35", + "status": "translated" } }, "delete": { @@ -27,6 +32,11 @@ "checksum": "ccfd9851b50aaa671513b50d158ed579", "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", "status": "new" + }, + "ru": { + "checksum": "ed2bbfbc53d83d3ad81f7fd6485ac6e8", + "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", + "status": "translated" } }, "retry": { @@ -42,6 +52,11 @@ "checksum": "ed7abe3ce03a238f04222a1eec48f1f5", "baseChecksum": "6327b4e59f58137083214a1fec358855", "status": "new" + }, + "ru": { + "checksum": "e791d60a16de757b90bb404911991ea4", + "baseChecksum": "6327b4e59f58137083214a1fec358855", + "status": "translated" } }, "cancel": { @@ -57,6 +72,11 @@ "checksum": "d12c3b0dcf75614dafb2ac6bdaa77a26", "baseChecksum": "ea4788705e6873b424c65e91c2846b19", "status": "new" + }, + "ru": { + "checksum": "987b33c664dce148f1d17f6eb9ab3e79", + "baseChecksum": "ea4788705e6873b424c65e91c2846b19", + "status": "translated" } }, "ok": { @@ -72,6 +92,11 @@ "checksum": "e0aa021e21dddbd6d8cecec71e9cf564", "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", "status": "new" + }, + "ru": { + "checksum": "3094fd4ad571cc9b65de310d2164b5b0", + "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", + "status": "translated" } }, "save": { @@ -87,6 +112,11 @@ "checksum": "aed88202e2432ee2a613f9120ef7486b", "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", "status": "new" + }, + "ru": { + "checksum": "9ef62ebfb3ea5b3a1a4901f15142efae", + "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", + "status": "translated" } }, "back": { @@ -102,6 +132,11 @@ "checksum": "7727eb7488be3ef30da590f1f667181e", "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", "status": "new" + }, + "ru": { + "checksum": "2b0b0225a86bb67048840d3da9b899bc", + "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", + "status": "translated" } }, "clickToCopy": { @@ -117,6 +152,11 @@ "checksum": "abe872e54b785c715e340a066cf0dddf", "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", "status": "new" + }, + "ru": { + "checksum": "e62609fc5e015317c78fbbf228b9a778", + "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", + "status": "translated" } }, "move": { @@ -132,6 +172,11 @@ "checksum": "d7f3edbd8fd82a7d4d5a722dbbe36dc8", "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", "status": "new" + }, + "ru": { + "checksum": "1ce26faf65044371b40bd95cbb5c3a69", + "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", + "status": "translated" } }, "translate": { @@ -147,6 +192,11 @@ "checksum": "608b1b1fed86319b97f5c65b0fda9b5d", "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", "status": "translated" + }, + "ru": { + "checksum": "f80abd27695cafd474055fcf84d161c4", + "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", + "status": "translated" } }, "selectAll": { @@ -162,6 +212,11 @@ "checksum": "444c87852bd465ff516372130cdbab62", "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", "status": "translated" + }, + "ru": { + "checksum": "4d09821e5f0ae6b496ac3211da10f88b", + "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", + "status": "translated" } }, "clearAll": { @@ -177,6 +232,11 @@ "checksum": "d34c9c47ced7d0d930e781495194fa3c", "baseChecksum": "e77fef0167598bb39846637ac3915f4e", "status": "translated" + }, + "ru": { + "checksum": "60e71159f846d33df09e27565f81dea6", + "baseChecksum": "e77fef0167598bb39846637ac3915f4e", + "status": "translated" } }, "close": { @@ -192,6 +252,11 @@ "checksum": "7d206237f9912ea010005db2c20b60ce", "baseChecksum": "d3d2e617335f08df83599665eef8a418", "status": "translated" + }, + "ru": { + "checksum": "08969efbfd249fd88df5db4464118740", + "baseChecksum": "d3d2e617335f08df83599665eef8a418", + "status": "translated" } }, "dismiss": { @@ -207,6 +272,11 @@ "checksum": "9757a390d15b48413b06d6469d8b36cd", "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", "status": "translated" + }, + "ru": { + "checksum": "9e6d70043b0014003f34e770dea3985b", + "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/resource_entries.json b/apps/tracker/src/i18n/data/resource_entries.json index 8453cf11..a359e8de 100644 --- a/apps/tracker/src/i18n/data/resource_entries.json +++ b/apps/tracker/src/i18n/data/resource_entries.json @@ -2,8 +2,11 @@ "loading": { "source": "Loading", "comment": "Message shown while data is loading", - "tags": ["data"], + "tags": [ + "data" + ], "es": "Cargando", - "fr-ca": "Chargement" + "fr-ca": "Chargement", + "ru": "Загрузка" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/tracker_meta.json b/apps/tracker/src/i18n/data/tracker_meta.json index c172d6b4..f1776253 100644 --- a/apps/tracker/src/i18n/data/tracker_meta.json +++ b/apps/tracker/src/i18n/data/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "2f9c752cf48e056f11e3a7c1ff886422", "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", "status": "new" + }, + "ru": { + "checksum": "2cadf42b2a044fe2b3c8e7574d845867", + "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/resource_entries.json b/apps/tracker/src/i18n/header/resource_entries.json index 1a2e0c8d..82813675 100644 --- a/apps/tracker/src/i18n/header/resource_entries.json +++ b/apps/tracker/src/i18n/header/resource_entries.json @@ -2,29 +2,41 @@ "goToCollections": { "source": "Go to Collections", "comment": "Aria-label and tooltip for the brand link in the app header", - "tags": ["header"], + "tags": [ + "header" + ], "es": "Ir a Colecciones", - "fr-ca": "Accéder aux collections" + "fr-ca": "Accéder aux collections", + "ru": "Перейти в Коллекции" }, "backToCollections": { "source": "Back to Collections", "comment": "Aria-label and tooltip for the back button in the app header when viewing a collection", - "tags": ["header"], + "tags": [ + "header" + ], "es": "Volver a Colecciones", - "fr-ca": "Retour aux collections" + "fr-ca": "Retour aux collections", + "ru": "Вернуться к коллекциям" }, "keysCountX": { "source": "{ count, plural, =1 {1 key} other {{count} keys} }", "comment": "Pluralized count of translation keys shown in the app header stats", - "tags": ["header"], + "tags": [ + "header" + ], "es": "{ count, plural, =1 {1 key} other {{count} keys} }", - "fr-ca": "{ count, plural, =1 {1 key} other {{count} keys} }" + "fr-ca": "{ count, plural, =1 {1 key} other {{count} keys} }", + "ru": "{ count, plural, =1 {1 key} other {{count} keys} }" }, "localesCountX": { "source": "{ count, plural, =1 {1 locale} other {{count} locales} }", "comment": "Pluralized count of locales shown in the app header stats", - "tags": ["header"], + "tags": [ + "header" + ], "es": "{ count, plural, =1 {1 locale} other {{count} locales} }", - "fr-ca": "{ count, plural, =1 {1 locale} other {{count} locales} }" + "fr-ca": "{ count, plural, =1 {1 locale} other {{count} locales} }", + "ru": "{ count, plural, =1 {1 locale} other {{count} locales} }" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/tracker_meta.json b/apps/tracker/src/i18n/header/tracker_meta.json index fa0addc9..254fb6c6 100644 --- a/apps/tracker/src/i18n/header/tracker_meta.json +++ b/apps/tracker/src/i18n/header/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "bd6e679d65eb7508feac07a4a808906b", "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", "status": "translated" + }, + "ru": { + "checksum": "7dde960bec7839181d20fc35537bf20a", + "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", + "status": "translated" } }, "backToCollections": { @@ -27,6 +32,11 @@ "checksum": "73586b8c21ceaebfb82eeaaf5378439c", "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", "status": "translated" + }, + "ru": { + "checksum": "fa210ccd7b7d9347d63fbc720faeb1bf", + "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", + "status": "translated" } }, "keysCountX": { @@ -42,6 +52,11 @@ "checksum": "2ccecfa93e0d0c95b7f229684871db68", "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", "status": "new" + }, + "ru": { + "checksum": "2ccecfa93e0d0c95b7f229684871db68", + "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", + "status": "new" } }, "localesCountX": { @@ -57,6 +72,11 @@ "checksum": "ab692b642031b8646162616db0a399cf", "baseChecksum": "ab692b642031b8646162616db0a399cf", "status": "new" + }, + "ru": { + "checksum": "ab692b642031b8646162616db0a399cf", + "baseChecksum": "ab692b642031b8646162616db0a399cf", + "status": "new" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/resource_entries.json b/apps/tracker/src/i18n/locale/resource_entries.json index 27648faa..92296118 100644 --- a/apps/tracker/src/i18n/locale/resource_entries.json +++ b/apps/tracker/src/i18n/locale/resource_entries.json @@ -2,15 +2,21 @@ "currentLanguage": { "source": "Current language: {language}", "comment": "Aria-label for the locale picker button showing the current language", - "tags": ["locale"], + "tags": [ + "locale" + ], "es": "Idioma actual: {language}", - "fr-ca": "Langue actuelle : {language}" + "fr-ca": "Langue actuelle : {language}", + "ru": "Текущий язык: {language}" }, "selectLanguage": { "source": "Select language", "comment": "Aria-label for the locale selection dropdown menu", - "tags": ["locale"], + "tags": [ + "locale" + ], "es": "Seleccionar idioma", - "fr-ca": "Choisir la langue" + "fr-ca": "Choisir la langue", + "ru": "Выберите язык" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/tracker_meta.json b/apps/tracker/src/i18n/locale/tracker_meta.json index efb1efe8..a511375b 100644 --- a/apps/tracker/src/i18n/locale/tracker_meta.json +++ b/apps/tracker/src/i18n/locale/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "4f2162f0ff303cdc0003e23b2a584b53", "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", "status": "translated" + }, + "ru": { + "checksum": "6075bee7aeb0bb25c7548bbdb3c6b99a", + "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", + "status": "translated" } }, "selectLanguage": { @@ -27,6 +32,11 @@ "checksum": "232df4332952b6a2c6cf987ece661e60", "baseChecksum": "653777801f96237326d65205bc9129e3", "status": "translated" + }, + "ru": { + "checksum": "792386035adece6656d97f676b6a7c87", + "baseChecksum": "653777801f96237326d65205bc9129e3", + "status": "translated" } } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/resource_entries.json b/apps/tracker/src/i18n/theme/resource_entries.json index c35159b4..7cc45c19 100644 --- a/apps/tracker/src/i18n/theme/resource_entries.json +++ b/apps/tracker/src/i18n/theme/resource_entries.json @@ -3,24 +3,28 @@ "source": "Light", "comment": "Theme switcher light mode label", "es": "Claro", - "fr-ca": "Clair" + "fr-ca": "Clair", + "ru": "Свет" }, "dark": { "source": "Dark", "comment": "Theme switcher dark mode label", "es": "Oscuro", - "fr-ca": "Sombre" + "fr-ca": "Sombre", + "ru": "Темный" }, "system": { "source": "System", "comment": "Theme switcher system mode label", "es": "Sistema", - "fr-ca": "Système" + "fr-ca": "Système", + "ru": "Система" }, "settings": { "source": "Theme settings", "comment": "Aria-label for theme settings button", "es": "Configuración del tema", - "fr-ca": "Paramètres du thème" + "fr-ca": "Paramètres du thème", + "ru": "Настройки темы" } -} +} \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/tracker_meta.json b/apps/tracker/src/i18n/theme/tracker_meta.json index b4ef4b2b..02b48aa3 100644 --- a/apps/tracker/src/i18n/theme/tracker_meta.json +++ b/apps/tracker/src/i18n/theme/tracker_meta.json @@ -12,6 +12,11 @@ "checksum": "c7e206a03eb924b8cf6f15e8c70f1f07", "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", "status": "new" + }, + "ru": { + "checksum": "64f29ae4503509124973fbba7b822d88", + "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", + "status": "translated" } }, "dark": { @@ -27,6 +32,11 @@ "checksum": "19bdcdffdcb06cb2f0a62af523ec7fea", "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", "status": "new" + }, + "ru": { + "checksum": "1d20f24767fa50f6c6846bec0a3b6bad", + "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", + "status": "translated" } }, "system": { @@ -42,6 +52,11 @@ "checksum": "b222ce1d25f19d7b8ca005440c794baf", "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", "status": "new" + }, + "ru": { + "checksum": "8d8c85f7294619318a9064c198372b09", + "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", + "status": "translated" } }, "settings": { @@ -57,6 +72,11 @@ "checksum": "30aa80ebeaa3348e9dcefee1ac3ae5fe", "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", "status": "new" + }, + "ru": { + "checksum": "e11e346c34aa99447a5979976e69905e", + "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", + "status": "translated" } } -} +} \ No newline at end of file From 621ff9c44ed6c8009f51d1dd88bd17ef2925b359 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 17:32:18 -0700 Subject: [PATCH 07/13] chore(tracker): add Japaneese translations --- .lingo-tracker.json | 3 +- .../src/i18n/app/footer/resource_entries.json | 15 ++- .../src/i18n/app/footer/tracker_meta.json | 25 ++++ .../src/i18n/app/resource_entries.json | 3 +- apps/tracker/src/i18n/app/tracker_meta.json | 5 + .../browser/density/resource_entries.json | 15 ++- .../i18n/browser/density/tracker_meta.json | 25 ++++ .../dialog/deleteFolder/resource_entries.json | 6 +- .../dialog/deleteFolder/tracker_meta.json | 10 ++ .../deleteResource/resource_entries.json | 6 +- .../dialog/deleteResource/tracker_meta.json | 10 ++ .../dialog/moveFolder/resource_entries.json | 6 +- .../dialog/moveFolder/tracker_meta.json | 10 ++ .../browser/folderInput/resource_entries.json | 9 +- .../browser/folderInput/tracker_meta.json | 15 +++ .../browser/folderNode/resource_entries.json | 12 +- .../i18n/browser/folderNode/tracker_meta.json | 20 +++ .../folderPicker/resource_entries.json | 39 ++++-- .../browser/folderPicker/tracker_meta.json | 65 +++++++++ .../browser/folderTree/resource_entries.json | 15 ++- .../i18n/browser/folderTree/tracker_meta.json | 25 ++++ .../indexingOverlay/resource_entries.json | 9 +- .../browser/indexingOverlay/tracker_meta.json | 15 +++ .../localeFilter/resource_entries.json | 3 +- .../browser/localeFilter/tracker_meta.json | 5 + .../browser/placeholder/resource_entries.json | 9 +- .../browser/placeholder/tracker_meta.json | 15 +++ .../src/i18n/browser/resource_entries.json | 69 ++++++---- .../similarTranslations/resource_entries.json | 15 ++- .../similarTranslations/tracker_meta.json | 25 ++++ .../i18n/browser/status/resource_entries.json | 12 +- .../src/i18n/browser/status/tracker_meta.json | 20 +++ .../statusFilter/resource_entries.json | 6 +- .../browser/statusFilter/tracker_meta.json | 10 ++ .../i18n/browser/toast/resource_entries.json | 75 +++++++---- .../src/i18n/browser/toast/tracker_meta.json | 125 ++++++++++++++++++ .../src/i18n/browser/tracker_meta.json | 115 ++++++++++++++++ .../commentConfirm/resource_entries.json | 12 +- .../commentConfirm/tracker_meta.json | 20 +++ .../conflict/resource_entries.json | 12 +- .../conflict/tracker_meta.json | 20 +++ .../error/resource_entries.json | 21 ++- .../translationEditor/error/tracker_meta.json | 35 +++++ .../translationEditor/resource_entries.json | 75 +++++++---- .../tab/resource_entries.json | 9 +- .../translationEditor/tab/tracker_meta.json | 15 +++ .../translationEditor/tracker_meta.json | 125 ++++++++++++++++++ .../translationItem/resource_entries.json | 27 ++-- .../browser/translationItem/tracker_meta.json | 45 +++++++ .../translationList/resource_entries.json | 3 +- .../browser/translationList/tracker_meta.json | 5 + .../translationSearch/resource_entries.json | 3 +- .../translationSearch/tracker_meta.json | 5 + .../collections/card/resource_entries.json | 9 +- .../i18n/collections/card/tracker_meta.json | 15 +++ .../dialog/create/resource_entries.json | 3 +- .../dialog/create/tracker_meta.json | 5 + .../dialog/delete/resource_entries.json | 6 +- .../dialog/delete/tracker_meta.json | 10 ++ .../dialog/edit/resource_entries.json | 3 +- .../collections/dialog/edit/tracker_meta.json | 5 + .../collections/dialog/resource_entries.json | 33 +++-- .../i18n/collections/dialog/tracker_meta.json | 55 ++++++++ .../emptyState/resource_entries.json | 6 +- .../collections/emptyState/tracker_meta.json | 10 ++ .../form/errors/resource_entries.json | 3 +- .../collections/form/errors/tracker_meta.json | 5 + .../collections/form/resource_entries.json | 12 +- .../i18n/collections/form/tracker_meta.json | 20 +++ .../i18n/collections/resource_entries.json | 6 +- .../collections/toast/resource_entries.json | 24 ++-- .../i18n/collections/toast/tracker_meta.json | 40 ++++++ .../src/i18n/collections/tracker_meta.json | 10 ++ .../i18n/common/actions/resource_entries.json | 42 ++++-- .../src/i18n/common/actions/tracker_meta.json | 70 ++++++++++ .../src/i18n/data/resource_entries.json | 3 +- apps/tracker/src/i18n/data/tracker_meta.json | 5 + .../src/i18n/header/resource_entries.json | 12 +- .../tracker/src/i18n/header/tracker_meta.json | 20 +++ .../src/i18n/locale/resource_entries.json | 6 +- .../tracker/src/i18n/locale/tracker_meta.json | 10 ++ .../src/i18n/theme/resource_entries.json | 12 +- apps/tracker/src/i18n/theme/tracker_meta.json | 20 +++ 83 files changed, 1556 insertions(+), 223 deletions(-) diff --git a/.lingo-tracker.json b/.lingo-tracker.json index 715e632d..2e386781 100644 --- a/.lingo-tracker.json +++ b/.lingo-tracker.json @@ -26,7 +26,8 @@ "en", "es", "fr-ca", - "ru" + "ru", + "ja" ] }, "mockDesignSystem": { diff --git a/apps/tracker/src/i18n/app/footer/resource_entries.json b/apps/tracker/src/i18n/app/footer/resource_entries.json index a0963a8f..a8d58f1f 100644 --- a/apps/tracker/src/i18n/app/footer/resource_entries.json +++ b/apps/tracker/src/i18n/app/footer/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Herramientas de SimonCodes-CA", "fr-ca": "Outils de SimonCodes-CA", - "ru": "Инструменты от SimonCodes-CA" + "ru": "Инструменты от SimonCodes-CA", + "ja": "SimonCodes-CAによるツール" }, "githubTitle": { "source": "GitHub Repository", @@ -17,7 +18,8 @@ ], "es": "Repositorio de GitHub", "fr-ca": "Dépôt GitHub", - "ru": "Репозиторий GitHub" + "ru": "Репозиторий GitHub", + "ja": "GitHubリポジトリ" }, "githubLabel": { "source": "GitHub", @@ -27,7 +29,8 @@ ], "es": "GitHub", "fr-ca": "GitHub", - "ru": "GitHub" + "ru": "GitHub", + "ja": "GitHub" }, "issuesTitle": { "source": "Report an Issue", @@ -37,7 +40,8 @@ ], "es": "Informar un problema", "fr-ca": "Signaler un problème", - "ru": "Сообщить о проблеме" + "ru": "Сообщить о проблеме", + "ja": "問題を報告する" }, "issuesLabel": { "source": "Issues", @@ -47,6 +51,7 @@ ], "es": "Asuntos", "fr-ca": "Problèmes", - "ru": "Проблемы" + "ru": "Проблемы", + "ja": "問題" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/footer/tracker_meta.json b/apps/tracker/src/i18n/app/footer/tracker_meta.json index b62b1889..6fddf48d 100644 --- a/apps/tracker/src/i18n/app/footer/tracker_meta.json +++ b/apps/tracker/src/i18n/app/footer/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "bff63c3ad261cf3012d39009a567b8d2", "baseChecksum": "228e177a7df025238b894f2ae0026f34", "status": "translated" + }, + "ja": { + "checksum": "5094ff9d5b9514b745dd2fb92f16ff3b", + "baseChecksum": "228e177a7df025238b894f2ae0026f34", + "status": "translated" } }, "githubTitle": { @@ -37,6 +42,11 @@ "checksum": "4e7b4d27eeda52dff555a4c657e5dd96", "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", "status": "translated" + }, + "ja": { + "checksum": "12a12fb5f7e5802e5b4c8a450b719c14", + "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", + "status": "translated" } }, "githubLabel": { @@ -57,6 +67,11 @@ "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "status": "translated" + }, + "ja": { + "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "status": "translated" } }, "issuesTitle": { @@ -77,6 +92,11 @@ "checksum": "0949cf4c28d447f70367d086dec62847", "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", "status": "translated" + }, + "ja": { + "checksum": "655422ca284cf1a1aabf2ce72ffb66f7", + "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", + "status": "translated" } }, "issuesLabel": { @@ -97,6 +117,11 @@ "checksum": "f9890ec0744946bb63769a8bebab69d3", "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", "status": "translated" + }, + "ja": { + "checksum": "25486ad4e541ea9a04632f8c28ba14f8", + "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/resource_entries.json b/apps/tracker/src/i18n/app/resource_entries.json index d7cc4d9f..0867df4d 100644 --- a/apps/tracker/src/i18n/app/resource_entries.json +++ b/apps/tracker/src/i18n/app/resource_entries.json @@ -7,6 +7,7 @@ ], "es": "Saltar al contenido principal", "fr-ca": "Passer au contenu principal", - "ru": "Перейти к основному содержимому" + "ru": "Перейти к основному содержимому", + "ja": "メインコンテンツへスキップ" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/tracker_meta.json b/apps/tracker/src/i18n/app/tracker_meta.json index f06d2634..efba7246 100644 --- a/apps/tracker/src/i18n/app/tracker_meta.json +++ b/apps/tracker/src/i18n/app/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "26915f78356945d1b403f0c694a320b7", "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", "status": "translated" + }, + "ja": { + "checksum": "cd757fa937839fce931945543637e8a4", + "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/resource_entries.json b/apps/tracker/src/i18n/browser/density/resource_entries.json index c8c4579a..6aa60807 100644 --- a/apps/tracker/src/i18n/browser/density/resource_entries.json +++ b/apps/tracker/src/i18n/browser/density/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Compacto: vista de 2 líneas, alta densidad", "fr-ca": "Compact — affichage sur 2 lignes, haute densité", - "ru": "Компактный — двухстрочный режим отображения, высокая плотность пикселей." + "ru": "Компактный — двухстрочный режим отображения, высокая плотность пикселей.", + "ja": "コンパクト - 2行表示、高密度" }, "fullTooltip": { "source": "Full — detailed view with comments and all locales", @@ -17,7 +18,8 @@ ], "es": "Completo: vista detallada con comentarios y todas las configuraciones regionales", "fr-ca": "Vue complète et détaillée avec commentaires et toutes les langues", - "ru": "Полный — подробный просмотр с комментариями и всеми локалями." + "ru": "Полный — подробный просмотр с комментариями и всеми локалями.", + "ja": "完全版 — コメントとすべての地域を含む詳細表示" }, "modeAriaLabel": { "source": "Density mode", @@ -27,7 +29,8 @@ ], "es": "Modo de densidad", "fr-ca": "Mode de densité", - "ru": "Режим плотности" + "ru": "Режим плотности", + "ja": "密度モード" }, "compactAriaLabel": { "source": "Compact density", @@ -37,7 +40,8 @@ ], "es": "Densidad compacta", "fr-ca": "Densité compacte", - "ru": "Плотная компактность" + "ru": "Плотная компактность", + "ja": "高密度" }, "fullAriaLabel": { "source": "Full density", @@ -47,6 +51,7 @@ ], "es": "Densidad completa", "fr-ca": "Densité maximale", - "ru": "Полная плотность" + "ru": "Полная плотность", + "ja": "完全密度" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/tracker_meta.json b/apps/tracker/src/i18n/browser/density/tracker_meta.json index 7e44cfc1..80c51b04 100644 --- a/apps/tracker/src/i18n/browser/density/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/density/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "7a9e12bfd5f2b9d7d515dd12bc1e1648", "baseChecksum": "99ec7955eb135928d0c239b3521140c3", "status": "translated" + }, + "ja": { + "checksum": "8d4293530065fed7ec05336a71a83410", + "baseChecksum": "99ec7955eb135928d0c239b3521140c3", + "status": "translated" } }, "fullTooltip": { @@ -37,6 +42,11 @@ "checksum": "9253533a9c6f633f47a7a31e6d70967f", "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", "status": "translated" + }, + "ja": { + "checksum": "d30b5f58f77896dd48a5faac933aeb4f", + "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", + "status": "translated" } }, "modeAriaLabel": { @@ -57,6 +67,11 @@ "checksum": "d2294477be4875018ebaf26767da8417", "baseChecksum": "cee89fa354411866e20092652b6b8b07", "status": "translated" + }, + "ja": { + "checksum": "2fabe94b844462169d8c335da7ef8453", + "baseChecksum": "cee89fa354411866e20092652b6b8b07", + "status": "translated" } }, "compactAriaLabel": { @@ -77,6 +92,11 @@ "checksum": "20eb9947c9abcea7710df5bd48843039", "baseChecksum": "e44615f2f134cfe073e2960672aa7489", "status": "translated" + }, + "ja": { + "checksum": "f7dcc0ac9e61ac8abd64bfcc171be0a0", + "baseChecksum": "e44615f2f134cfe073e2960672aa7489", + "status": "translated" } }, "fullAriaLabel": { @@ -97,6 +117,11 @@ "checksum": "f00efad4d0bd99baff6504bfb45dc3e8", "baseChecksum": "02474f847ab2138e522a31349e7aec0f", "status": "translated" + }, + "ja": { + "checksum": "82ad02096571402a315e21e5b3b7a9cd", + "baseChecksum": "02474f847ab2138e522a31349e7aec0f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json index f1f5d94b..7ae394ce 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Eliminar carpeta", "fr-ca": "Supprimer le dossier", - "ru": "Удалить папку" + "ru": "Удалить папку", + "ja": "フォルダを削除する" }, "messageX": { "source": "Delete \"{name}\" and all its contents?", @@ -17,6 +18,7 @@ ], "es": "¿Eliminar \"{name}\" y todo su contenido?", "fr-ca": "Supprimer \"{name}\" et tout son contenu ?", - "ru": "Удалить \"{name}\" и всё его содержимое?" + "ru": "Удалить \"{name}\" и всё его содержимое?", + "ja": "「{name}」とその内容をすべて削除しますか?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json index f4f0d637..99060f6c 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "134da182ff56e65fa18a6e704a316e02", "baseChecksum": "991e322cd8225c369a963bb60b0a9688", "status": "translated" + }, + "ja": { + "checksum": "562f7fe2b9f1c1f4ebc16d39c39f8b7f", + "baseChecksum": "991e322cd8225c369a963bb60b0a9688", + "status": "translated" } }, "messageX": { @@ -37,6 +42,11 @@ "checksum": "8820a2771dfcb540ed217136d4e67460", "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", "status": "translated" + }, + "ja": { + "checksum": "67608fe71d95541b9933d39a2e7cb626", + "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json index a151cec6..8c08a84e 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Eliminar recurso", "fr-ca": "Supprimer la ressource", - "ru": "Удалить ресурс" + "ru": "Удалить ресурс", + "ja": "リソースを削除する" }, "messageX": { "source": "Are you sure you want to delete the resource \"{key}\"? This action cannot be undone.", @@ -17,6 +18,7 @@ ], "es": "¿Seguro que desea eliminar el recurso \"{key}\"? Esta acción no se puede deshacer.", "fr-ca": "Êtes-vous certain de vouloir supprimer la ressource « {key} » ? Cette action est irréversible.", - "ru": "Вы уверены, что хотите удалить ресурс \"{key}\"? Это действие необратимо." + "ru": "Вы уверены, что хотите удалить ресурс \"{key}\"? Это действие необратимо.", + "ja": "リソース「{key}」を削除してもよろしいですか?この操作は元に戻せません。" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json index a0055034..0b6b4298 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "30058d276a708b6f046031fed91baf35", "baseChecksum": "7091aa93a78122401125a34800f9a1ac", "status": "translated" + }, + "ja": { + "checksum": "aa7622a8f3cdec64553738d3a180ade9", + "baseChecksum": "7091aa93a78122401125a34800f9a1ac", + "status": "translated" } }, "messageX": { @@ -37,6 +42,11 @@ "checksum": "80a3d311146ea968e4debaa343339da6", "baseChecksum": "ac83571aec2e065433da7fd905696d5f", "status": "translated" + }, + "ja": { + "checksum": "8fc4d60dca252625969f6139dc19c349", + "baseChecksum": "ac83571aec2e065433da7fd905696d5f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json index fed0a3c5..13bd2db1 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Mover carpeta", "fr-ca": "Déplacer le dossier", - "ru": "Переместить папку" + "ru": "Переместить папку", + "ja": "フォルダーを移動する" }, "messageX": { "source": "Move folder \"{name}\" and all its contents to \"{dest}\"?", @@ -17,6 +18,7 @@ ], "es": "¿Mover la carpeta \"{name}\" y todo su contenido a \"{dest}\"?", "fr-ca": "Déplacer le dossier \"{name}\" et tout son contenu vers \"{dest}\" ?", - "ru": "Переместить папку \"{name}\" и все ее содержимое в \"{dest}\"?" + "ru": "Переместить папку \"{name}\" и все ее содержимое в \"{dest}\"?", + "ja": "フォルダ「{name}」とその中のすべての内容を「{dest}」に移動しますか?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json index 1fb3b3a8..519af48f 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "2506a41030af5ca68c85b9a0f7adef40", "baseChecksum": "1c10ed990d6445081dfd3828812355e5", "status": "translated" + }, + "ja": { + "checksum": "dcb7ba7c1d903a09f83b7fd2ae8d18d9", + "baseChecksum": "1c10ed990d6445081dfd3828812355e5", + "status": "translated" } }, "messageX": { @@ -37,6 +42,11 @@ "checksum": "1f0f24b76f5ae12fc19a83863b053b7b", "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", "status": "translated" + }, + "ja": { + "checksum": "a6606371456d1428db6cd20ed4c740bc", + "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json index d52e291b..5fd84d36 100644 --- a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Nombre de la carpeta", "fr-ca": "Nom du dossier", - "ru": "Название папки" + "ru": "Название папки", + "ja": "フォルダ名" }, "nameRequired": { "source": "Folder name is required", @@ -17,7 +18,8 @@ ], "es": "El nombre de la carpeta es obligatorio", "fr-ca": "Le nom du dossier est requis.", - "ru": "Название папки обязательно для указания." + "ru": "Название папки обязательно для указания.", + "ja": "フォルダ名は必須です" }, "namePatternError": { "source": "Only letters, numbers, dashes, and underscores allowed", @@ -27,6 +29,7 @@ ], "es": "Solo se permiten letras, números, guiones y guiones bajos.", "fr-ca": "Seules les lettres, les chiffres, les tirets et les traits de soulignement sont autorisés.", - "ru": "Разрешается использовать только буквы, цифры, дефисы и подчеркивания." + "ru": "Разрешается использовать только буквы, цифры, дефисы и подчеркивания.", + "ja": "使用できる文字、数字、ハイフン、アンダースコアのみです。" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json index 93760d9e..b80a4015 100644 --- a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "16f4890b29f8f7a793855f9b5ac7724b", "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", "status": "translated" + }, + "ja": { + "checksum": "8e075835352ff89cf377cd81d97900be", + "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", + "status": "translated" } }, "nameRequired": { @@ -37,6 +42,11 @@ "checksum": "52eded3a97c8d5c4ce2d1becc044f39a", "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", "status": "translated" + }, + "ja": { + "checksum": "efab011f753b9e16f84893e0af2a520b", + "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", + "status": "translated" } }, "namePatternError": { @@ -57,6 +67,11 @@ "checksum": "b4dfbb94d2174527e3e49435e8d37cdf", "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", "status": "translated" + }, + "ja": { + "checksum": "e3d0f4d45bbf2ac57c31082d458ee87a", + "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json index 9391fa49..84f563ed 100644 --- a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Nuevo", "fr-ca": "Nouveau", - "ru": "Новый" + "ru": "Новый", + "ja": "新しい" }, "folderAriaLabelX": { "source": "Folder { name }", @@ -17,7 +18,8 @@ ], "es": "Carpeta { nombre }", "fr-ca": "Dossier { nom }", - "ru": "Папка { имя }" + "ru": "Папка { имя }", + "ja": "フォルダ {名前}" }, "dragToMoveFolderAriaLabel": { "source": "Drag to move folder", @@ -27,7 +29,8 @@ ], "es": "Arrastrar para mover la carpeta", "fr-ca": "Faites glisser pour déplacer le dossier", - "ru": "Перетащите, чтобы переместить папку." + "ru": "Перетащите, чтобы переместить папку.", + "ja": "フォルダをドラッグして移動" }, "deleteFolderAriaLabelX": { "source": "Delete folder { name }", @@ -37,6 +40,7 @@ ], "es": "Eliminar carpeta { nombre }", "fr-ca": "Supprimer le dossier { nom }", - "ru": "Удалить папку {имя}" + "ru": "Удалить папку {имя}", + "ja": "フォルダ {名前} を削除します" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json index ace8d063..f9730476 100644 --- a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "97ae6e0bca16b37dbdc5e324d0ecaf60", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "ja": { + "checksum": "ad4b0bd55882d4f7164630d4158d3c39", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "folderAriaLabelX": { @@ -37,6 +42,11 @@ "checksum": "6c01295f55133a6381deaa9b19f298ed", "baseChecksum": "2807ee06f9cee829069ff722e0076f63", "status": "translated" + }, + "ja": { + "checksum": "b279d2cfed0ba56b787c597461de81bb", + "baseChecksum": "2807ee06f9cee829069ff722e0076f63", + "status": "translated" } }, "dragToMoveFolderAriaLabel": { @@ -57,6 +67,11 @@ "checksum": "c02424c40807563ededc26e70ee7764d", "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", "status": "translated" + }, + "ja": { + "checksum": "08c276e541d0aa7d1836c9ba7eb7414e", + "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", + "status": "translated" } }, "deleteFolderAriaLabelX": { @@ -77,6 +92,11 @@ "checksum": "4ece16ddf1acf1166eda7b86121240de", "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", "status": "translated" + }, + "ja": { + "checksum": "5f068424ca259e11241a275b3e4887b1", + "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json index b84bba4d..d875ef79 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Carpeta {name}", "fr-ca": "Dossier {name}", - "ru": "Папка {name}" + "ru": "Папка {name}", + "ja": "フォルダ {name}" }, "collapse": { "source": "Collapse", @@ -17,7 +18,8 @@ ], "es": "Colapsar", "fr-ca": "Effondrement", - "ru": "Крах" + "ru": "Крах", + "ja": "崩壊" }, "expand": { "source": "Expand", @@ -27,7 +29,8 @@ ], "es": "Expandir", "fr-ca": "Élargir", - "ru": "Расширять" + "ru": "Расширять", + "ja": "拡大する" }, "addSubfolderToX": { "source": "Add subfolder to {name}", @@ -37,7 +40,8 @@ ], "es": "Agregar subcarpeta a {name}", "fr-ca": "Ajouter un sous-dossier à {name}", - "ru": "Добавить подпапку в {name}" + "ru": "Добавить подпапку в {name}", + "ja": "{name} にサブフォルダを追加します" }, "folderLabel": { "source": "Folder:", @@ -47,7 +51,8 @@ ], "es": "Carpeta:", "fr-ca": "Dossier :", - "ru": "Папка:" + "ru": "Папка:", + "ja": "フォルダ:" }, "noFoldersYet": { "source": "No folders yet", @@ -57,7 +62,8 @@ ], "es": "No hay carpetas todavía", "fr-ca": "Aucun dossier pour le moment", - "ru": "Папок пока нет." + "ru": "Папок пока нет.", + "ja": "まだフォルダはありません" }, "createFirstFolder": { "source": "Create First Folder", @@ -67,7 +73,8 @@ ], "es": "Crear la primera carpeta", "fr-ca": "Créer le premier dossier", - "ru": "Создать первую папку" + "ru": "Создать первую папку", + "ja": "最初のフォルダを作成する" }, "folderCreated": { "source": "Folder created successfully", @@ -77,7 +84,8 @@ ], "es": "Carpeta creada exitosamente", "fr-ca": "Dossier créé avec succès", - "ru": "Папка успешно создана." + "ru": "Папка успешно создана.", + "ja": "フォルダが正常に作成されました" }, "folderAlreadyExists": { "source": "Folder already exists", @@ -87,7 +95,8 @@ ], "es": "La carpeta ya existe", "fr-ca": "Le dossier existe déjà.", - "ru": "Папка уже существует" + "ru": "Папка уже существует", + "ja": "フォルダは既に存在します" }, "createFolderFailed": { "source": "Failed to create folder", @@ -97,7 +106,8 @@ ], "es": "No se pudo crear la carpeta", "fr-ca": "Impossible de créer le dossier", - "ru": "Не удалось создать папку." + "ru": "Не удалось создать папку.", + "ja": "フォルダの作成に失敗しました" }, "rootLabel": { "source": "root", @@ -107,7 +117,8 @@ ], "es": "raíz", "fr-ca": "racine", - "ru": "корень" + "ru": "корень", + "ja": "根" }, "selectorAriaLabelX": { "source": "Folder selector, currently: { path }", @@ -117,7 +128,8 @@ ], "es": "Selector de carpeta, actualmente: { ruta }", "fr-ca": "Sélecteur de dossier, présentement : { chemin }", - "ru": "Селектор папки, в данный момент: { путь }" + "ru": "Селектор папки, в данный момент: { путь }", + "ja": "フォルダセレクター、現在の値: { パス }" }, "treeAriaLabel": { "source": "Folder tree", @@ -127,6 +139,7 @@ ], "es": "Árbol de carpetas", "fr-ca": "Arborescence des dossiers", - "ru": "Дерево папок" + "ru": "Дерево папок", + "ja": "フォルダーツリー" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json index 1c104515..d529b59d 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "91946bcd8bb4cbac5db6c724fee19b1f", "baseChecksum": "16708b0cacde01471507891eb88bcf2b", "status": "translated" + }, + "ja": { + "checksum": "eac7a0a1e12765c214b1085965f45fb7", + "baseChecksum": "16708b0cacde01471507891eb88bcf2b", + "status": "translated" } }, "collapse": { @@ -37,6 +42,11 @@ "checksum": "f4c615603939c75033535b2c78761789", "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", "status": "translated" + }, + "ja": { + "checksum": "043901ea2022bf1c3b7c9f1feeda07fd", + "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", + "status": "translated" } }, "expand": { @@ -57,6 +67,11 @@ "checksum": "b9db830bf9c8d16e36fcd353c4fb95e8", "baseChecksum": "8098b34f582537833b36b58273c3545b", "status": "translated" + }, + "ja": { + "checksum": "4615433abf3e1131172d9a8f5dffb2f2", + "baseChecksum": "8098b34f582537833b36b58273c3545b", + "status": "translated" } }, "addSubfolderToX": { @@ -77,6 +92,11 @@ "checksum": "da6ae24598b43f425bbeb36a05a35bed", "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", "status": "translated" + }, + "ja": { + "checksum": "157c9e9aa46efb7353525d7e13eedee9", + "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", + "status": "translated" } }, "folderLabel": { @@ -97,6 +117,11 @@ "checksum": "0bde293383ace742393f9d7ab4c6d6f2", "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", "status": "translated" + }, + "ja": { + "checksum": "7a2b94c75981c521deea7118a39b0c38", + "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", + "status": "translated" } }, "noFoldersYet": { @@ -117,6 +142,11 @@ "checksum": "22b8692bfbcda0a1e43ca4521408a6cb", "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", "status": "translated" + }, + "ja": { + "checksum": "821d3a354e82dec319a31f7392352969", + "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", + "status": "translated" } }, "createFirstFolder": { @@ -137,6 +167,11 @@ "checksum": "65b1dd36c11ac5a40d271a0c9f24e964", "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", "status": "translated" + }, + "ja": { + "checksum": "d7bbc4cde5e4080f2b18b38c261eb03d", + "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", + "status": "translated" } }, "folderCreated": { @@ -157,6 +192,11 @@ "checksum": "bf70d281db45c6bd47d2f85bbba6c854", "baseChecksum": "a849da990cd1a54faca8b4923561fc60", "status": "translated" + }, + "ja": { + "checksum": "251d9199ea2c2febe0c2464c333ef75c", + "baseChecksum": "a849da990cd1a54faca8b4923561fc60", + "status": "translated" } }, "folderAlreadyExists": { @@ -177,6 +217,11 @@ "checksum": "460636e13b11c535f44497a274ac16cb", "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", "status": "translated" + }, + "ja": { + "checksum": "585693643f563620986e9fd5aa7ffae6", + "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", + "status": "translated" } }, "createFolderFailed": { @@ -197,6 +242,11 @@ "checksum": "5c86bb3f4b6b381f42094b79f6e2ba62", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "ja": { + "checksum": "653707d6996bec51f6bbd51b29d7aee7", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "rootLabel": { @@ -217,6 +267,11 @@ "checksum": "590f13873371c8324f9c1653ebb33b3c", "baseChecksum": "63a9f0ea7bb98050796b649e85481845", "status": "translated" + }, + "ja": { + "checksum": "99ef7b0d0959faa61bef232697dae9c4", + "baseChecksum": "63a9f0ea7bb98050796b649e85481845", + "status": "translated" } }, "selectorAriaLabelX": { @@ -237,6 +292,11 @@ "checksum": "d622603fd981f67772ec7f1bc7845ff3", "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", "status": "translated" + }, + "ja": { + "checksum": "08175456a2012dc021d7a17f35b7f4e1", + "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", + "status": "translated" } }, "treeAriaLabel": { @@ -257,6 +317,11 @@ "checksum": "9c33ac0b6e28b319e2c6ac24de0e54b0", "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", "status": "translated" + }, + "ja": { + "checksum": "b000acc997070fce721426d6c3738ab0", + "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json index de709012..2ede01c8 100644 --- a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Filtrar carpetas", "fr-ca": "dossiers de filtrage", - "ru": "Фильтрация папок" + "ru": "Фильтрация папок", + "ja": "フォルダーをフィルタリングする" }, "showCurrentFolderTooltip": { "source": "Show only current folder", @@ -17,7 +18,8 @@ ], "es": "Mostrar solo la carpeta actual", "fr-ca": "Afficher uniquement le dossier actuel", - "ru": "Показать только текущую папку" + "ru": "Показать только текущую папку", + "ja": "現在のフォルダーのみを表示する" }, "showNestedResourcesTooltip": { "source": "Show all nested resources", @@ -27,7 +29,8 @@ ], "es": "Mostrar todos los recursos anidados", "fr-ca": "Afficher toutes les ressources imbriquées", - "ru": "Показать все вложенные ресурсы" + "ru": "Показать все вложенные ресурсы", + "ja": "ネストされたリソースをすべて表示する" }, "addFolderAriaLabel": { "source": "Add folder", @@ -37,7 +40,8 @@ ], "es": "Agregar carpeta", "fr-ca": "Ajouter un dossier", - "ru": "Добавить папку" + "ru": "Добавить папку", + "ja": "フォルダーを追加する" }, "addFolderTooltip": { "source": "Add folder (Ctrl+Shift+N)", @@ -47,6 +51,7 @@ ], "es": "Agregar carpeta (Ctrl+Shift+N)", "fr-ca": "Ajouter un dossier (Ctrl+Maj+N)", - "ru": "Добавить папку (Ctrl+Shift+N)" + "ru": "Добавить папку (Ctrl+Shift+N)", + "ja": "フォルダを追加する(Ctrl+Shift+N)" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json index 58536e8d..10fb3ac3 100644 --- a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "f57d9699734d8deab0bc3f9f0f060be3", "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", "status": "translated" + }, + "ja": { + "checksum": "fea11c950afd6ad47292eb99e4e40ed7", + "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", + "status": "translated" } }, "showCurrentFolderTooltip": { @@ -37,6 +42,11 @@ "checksum": "222cea24291a7d6423cfb9b054bd9e47", "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", "status": "translated" + }, + "ja": { + "checksum": "f090ff3a99674445f3d75beadfb801f0", + "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", + "status": "translated" } }, "showNestedResourcesTooltip": { @@ -57,6 +67,11 @@ "checksum": "1cf4cbf25a09e2c5d6c5726732ab6bf7", "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", "status": "translated" + }, + "ja": { + "checksum": "20c2914867f9af50fb54675c28e8fc36", + "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", + "status": "translated" } }, "addFolderAriaLabel": { @@ -77,6 +92,11 @@ "checksum": "ffa55f40fbdf1182b30fc5247a1432c0", "baseChecksum": "b60bc90c77f58812129670659f977dbe", "status": "translated" + }, + "ja": { + "checksum": "3bfda665313f438a5c1f8b67a0a5f767", + "baseChecksum": "b60bc90c77f58812129670659f977dbe", + "status": "translated" } }, "addFolderTooltip": { @@ -97,6 +117,11 @@ "checksum": "2395fc181f2131519801b06b85121cc8", "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", "status": "translated" + }, + "ja": { + "checksum": "dcc7e150442bdf9e0e99890e676d94ef", + "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json index efcda8de..d6a82742 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Colección de indexación...", "fr-ca": "Collection d'indexation...", - "ru": "Индексирование коллекции..." + "ru": "Индексирование коллекции...", + "ja": "コレクションのインデックスを作成しています..." }, "errorTitle": { "source": "Indexing Failed", @@ -17,7 +18,8 @@ ], "es": "Error de indexación", "fr-ca": "L'indexation a échoué", - "ru": "Индексирование не удалось" + "ru": "Индексирование не удалось", + "ja": "インデックス作成に失敗しました" }, "defaultError": { "source": "An error occurred while indexing the collection.", @@ -27,6 +29,7 @@ ], "es": "Se produjo un error al indexar la colección.", "fr-ca": "Une erreur s'est produite lors de l'indexation de la collection.", - "ru": "Произошла ошибка при индексировании коллекции." + "ru": "Произошла ошибка при индексировании коллекции.", + "ja": "コレクションのインデックス作成中にエラーが発生しました。" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json index 4e04beba..ba7d8dcc 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "e6be89a9e89333c4134ca0260c94b521", "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", "status": "translated" + }, + "ja": { + "checksum": "27a2ccde5f10886237423e9be9e0678e", + "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", + "status": "translated" } }, "errorTitle": { @@ -37,6 +42,11 @@ "checksum": "668e2616a7e2ad25f5c5414c3232adbb", "baseChecksum": "bdb612b5237ec3727393283341b07e0e", "status": "translated" + }, + "ja": { + "checksum": "16d3d677155ea8fe7712686c7b2c8e63", + "baseChecksum": "bdb612b5237ec3727393283341b07e0e", + "status": "translated" } }, "defaultError": { @@ -57,6 +67,11 @@ "checksum": "15092bbfb45097e6177acd73307896f3", "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", "status": "translated" + }, + "ja": { + "checksum": "1b735119013f84e4351bafbcbc6c79a4", + "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json index 7fe8dd6e..f901ae7b 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json @@ -7,6 +7,7 @@ ], "es": "Filtrar regiones. Actualmente se muestra: {texto}", "fr-ca": "Filtrer les paramètres régionaux. Affichage actuel : { texte }", - "ru": "Фильтр по языкам. В данный момент отображается: { текст }" + "ru": "Фильтр по языкам. В данный момент отображается: { текст }", + "ja": "地域をフィルタリングします。現在表示中: { テキスト }" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json index 3c234077..1d4bde7f 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "d44d30a0dbadd7dbcaebfe9f596e7a6a", "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", "status": "translated" + }, + "ja": { + "checksum": "a9125be4e99103ed768fb2f81ed360ed", + "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json index cd9ab3d8..80b85bd0 100644 --- a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json @@ -4,20 +4,23 @@ "comment": "Placeholder title for browser feature", "es": "Navegador de traducción disponible próximamente", "fr-ca": "Navigateur de traduction bientôt disponible", - "ru": "Браузер для перевода скоро появится." + "ru": "Браузер для перевода скоро появится.", + "ja": "翻訳ブラウザ近日公開予定" }, "message": { "source": "The translation browser feature is currently under development. Soon you'll be able to view, edit, and manage all translations within this collection.", "comment": "Placeholder message explaining feature status", "es": "La función de búsqueda de traducciones está en desarrollo. Pronto podrás ver, editar y gestionar todas las traducciones de esta colección.", "fr-ca": "La fonctionnalité du navigateur de traductions est en cours de développement. Vous pourrez bientôt consulter, modifier et gérer toutes les traductions de cette collection.", - "ru": "Функция просмотра переводов в настоящее время находится в разработке. Вскоре вы сможете просматривать, редактировать и управлять всеми переводами в этой коллекции." + "ru": "Функция просмотра переводов в настоящее время находится в разработке. Вскоре вы сможете просматривать, редактировать и управлять всеми переводами в этой коллекции.", + "ja": "翻訳ブラウザ機能は現在開発中です。まもなく、このコレクション内のすべての翻訳を表示、編集、管理できるようになります。" }, "collection": { "source": "Collection", "comment": "Label for collection name display", "es": "Recopilación", "fr-ca": "Collection", - "ru": "Коллекция" + "ru": "Коллекция", + "ja": "コレクション" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json index a0a97ead..ba8a2c2f 100644 --- a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "e66e399449da382ed3c954e8f5e4a915", "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", "status": "translated" + }, + "ja": { + "checksum": "5e7cd0c3a357e01a8377e570c101d36b", + "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", + "status": "translated" } }, "message": { @@ -37,6 +42,11 @@ "checksum": "506d3a73c9cb4d2a7d596359925ddc26", "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", "status": "translated" + }, + "ja": { + "checksum": "d028883676b3802bd56b4fc3a1bcb523", + "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", + "status": "translated" } }, "collection": { @@ -57,6 +67,11 @@ "checksum": "e383e52780ab039fa602807bc784b3ac", "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", "status": "translated" + }, + "ja": { + "checksum": "695b82464aee401b828677a0100f6cba", + "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/resource_entries.json b/apps/tracker/src/i18n/browser/resource_entries.json index 2e9d4054..e389cc00 100644 --- a/apps/tracker/src/i18n/browser/resource_entries.json +++ b/apps/tracker/src/i18n/browser/resource_entries.json @@ -4,75 +4,87 @@ "comment": "Aria-label for back button in browser", "es": "Volver a las colecciones", "fr-ca": "Retour aux collections", - "ru": "Вернуться к коллекциям" + "ru": "Вернуться к коллекциям", + "ja": "コレクション一覧に戻る" }, "filterFolders": { "source": "Filter folders...", "comment": "Placeholder text in a filter input that filters a list of folders", "es": "Filtrar carpetas...", "fr-ca": "Dossiers de filtrage...", - "ru": "Фильтрация папок..." + "ru": "Фильтрация папок...", + "ja": "フォルダをフィルタリング..." }, "loadingFolders": { "source": "Loading folders...", "es": "Cargando carpetas...", "fr-ca": "Chargement des dossiers...", - "ru": "Загрузка папок..." + "ru": "Загрузка папок...", + "ja": "フォルダを読み込んでいます..." }, "noFoldersMatchSearch": { "source": "No folders match your search", "es": "No se encontraron carpetas que coincidan con su búsqueda.", "fr-ca": "Aucun dossier ne correspond à votre recherche", - "ru": "Папки не соответствуют вашему запросу." + "ru": "Папки не соответствуют вашему запросу.", + "ja": "検索条件に一致するフォルダはありません" }, "noFoldersFound": { "source": "No folders found", "es": "No se encontraron carpetas", "fr-ca": "Aucun dossier trouvé", - "ru": "Папки не найдены" + "ru": "Папки не найдены", + "ja": "フォルダが見つかりませんでした" }, "clickToLoad": { "source": "click to load", "comment": "Message shown to user on a hierarchy item that is not loaded yet from the backend", "es": "Haz clic para cargar", "fr-ca": "cliquer pour charger", - "ru": "нажмите для загрузки" + "ru": "нажмите для загрузки", + "ja": "クリックして読み込む" }, "loadingCollectionConfiguration": { "source": "Loading collection configuration...", "es": "Cargando configuración de la colección...", "fr-ca": "Chargement de la configuration de la collection...", - "ru": "Загрузка конфигурации коллекции..." + "ru": "Загрузка конфигурации коллекции...", + "ja": "コレクション設定を読み込んでいます..." }, "loadingTranslations": { "source": "Loading translations...", "es": "Cargando traducciones...", "fr-ca": "Chargement des traductions...", - "ru": "Загрузка переводов..." + "ru": "Загрузка переводов...", + "ja": "翻訳を読み込んでいます..." }, "noTranslationsFoundInFolder": { "source": "No translations found in this folder.", "es": "No se encontraron traducciones en esta carpeta.", "fr-ca": "Aucune traduction trouvée dans ce dossier.", - "ru": "В этой папке не найдено ни одного перевода." + "ru": "В этой папке не найдено ни одного перевода.", + "ja": "このフォルダには翻訳ファイルが見つかりませんでした。" }, "searchTranslations": { "source": "Search (min 3 characters)...", "es": "Buscar (mínimo 3 caracteres)...", "fr-ca": "Recherche (3 caractères minimum)...", - "ru": "Поиск (минимум 3 символа)..." + "ru": "Поиск (минимум 3 символа)...", + "ja": "検索(最低3文字)..." }, "showingSearchResultsForX": { "source": "Showing search results for \"{query}\"", "es": "Mostrando resultados de búsqueda para \"{query}\"", "fr-ca": "Affichage des résultats de recherche pour \"{query}\"", - "ru": "Показаны результаты поиска по запросу \"{query}\"" + "ru": "Показаны результаты поиска по запросу \"{query}\"", + "ja": "「{query}」の検索結果を表示しています。" }, "clearSearch": { "source": "Clear Search", "es": "Búsqueda clara", "fr-ca": "Effacer la recherche", - "ru": "Очистить поиск" + "ru": "Очистить поиск", + "ja": "検索をクリア" }, "noFolderSelected": { "source": "No resource folder selected", @@ -82,7 +94,8 @@ ], "es": "No se seleccionó ninguna carpeta de recursos", "fr-ca": "Aucun dossier de ressources sélectionné", - "ru": "Папка ресурсов не выбрана" + "ru": "Папка ресурсов не выбрана", + "ja": "リソースフォルダが選択されていません" }, "addTranslationButton": { "source": "Add Translation", @@ -92,7 +105,8 @@ ], "es": "Añadir traducción", "fr-ca": "Ajouter une traduction", - "ru": "Добавить перевод" + "ru": "Добавить перевод", + "ja": "翻訳を追加" }, "sortAscending": { "source": "Sort ascending", @@ -102,7 +116,8 @@ ], "es": "Ordenar ascendentemente", "fr-ca": "Trier en ordre croissant", - "ru": "Сортировка по возрастанию" + "ru": "Сортировка по возрастанию", + "ja": "昇順で並べ替え" }, "sortDescending": { "source": "Sort descending", @@ -112,7 +127,8 @@ ], "es": "Ordenar descendentemente", "fr-ca": "Trier par ordre décroissant", - "ru": "Сортировать по убыванию" + "ru": "Сортировать по убыванию", + "ja": "降順で並べ替え" }, "sortAscendingTooltip": { "source": "Sort ascending (A→Z)", @@ -122,7 +138,8 @@ ], "es": "Ordenar ascendentemente (A→Z)", "fr-ca": "Trier par ordre croissant (A→Z)", - "ru": "Сортировка по возрастанию (от А до Я)" + "ru": "Сортировка по возрастанию (от А до Я)", + "ja": "昇順(A→Z)に並べ替え" }, "sortDescendingTooltip": { "source": "Sort descending (Z→A)", @@ -132,7 +149,8 @@ ], "es": "Ordenar descendentemente (Z→A)", "fr-ca": "Trier par ordre décroissant (Z→A)", - "ru": "Сортировка по убыванию (Z→A)" + "ru": "Сортировка по убыванию (Z→A)", + "ja": "降順でソート(Z→A)" }, "selectFolderFirst": { "source": "Select a folder first", @@ -142,7 +160,8 @@ ], "es": "Seleccione una carpeta primero", "fr-ca": "Sélectionnez d'abord un dossier", - "ru": "Сначала выберите папку." + "ru": "Сначала выберите папку.", + "ja": "まずフォルダを選択してください。" }, "addNewTranslationTooltip": { "source": "Add a new translation", @@ -152,7 +171,8 @@ ], "es": "Añadir una nueva traducción", "fr-ca": "Ajouter une nouvelle traduction", - "ru": "Добавить новый перевод" + "ru": "Добавить новый перевод", + "ja": "新しい翻訳を追加する" }, "noTranslation": { "source": "No translation", @@ -162,7 +182,8 @@ ], "es": "Sin traducción", "fr-ca": "Aucune traduction", - "ru": "Нет перевода" + "ru": "Нет перевода", + "ja": "翻訳なし" }, "commentPrefix": { "source": "Comment:", @@ -172,7 +193,8 @@ ], "es": "Comentario:", "fr-ca": "Commentaire:", - "ru": "Комментарий:" + "ru": "Комментарий:", + "ja": "コメント:" }, "toggleExpansion": { "source": "Toggle expansion", @@ -182,6 +204,7 @@ ], "es": "Activar o desactivar la expansión", "fr-ca": "Basculer l'extension", - "ru": "Переключить расширение" + "ru": "Переключить расширение", + "ja": "展開を切り替える" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json index cf5ef3d3..98575dc6 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Traducciones similares", "fr-ca": "Traductions similaires", - "ru": "Похожие переводы" + "ru": "Похожие переводы", + "ja": "類似の翻訳" }, "idle": { "source": "Similar translations will appear as you type", @@ -17,7 +18,8 @@ ], "es": "Aparecerán traducciones similares a medida que escribas.", "fr-ca": "Des traductions semblables apparaîtront au fur et à mesure que vous taperez.", - "ru": "Похожие переводы будут появляться по мере ввода текста." + "ru": "Похожие переводы будут появляться по мере ввода текста.", + "ja": "入力すると類似の翻訳が表示されます" }, "loading": { "source": "Searching for similar translations...", @@ -27,7 +29,8 @@ ], "es": "Buscando traducciones similares...", "fr-ca": "Recherche de traductions similaires...", - "ru": "Ищу похожие переводы..." + "ru": "Ищу похожие переводы...", + "ja": "類似の翻訳を検索中..." }, "empty": { "source": "No similar translations found", @@ -37,7 +40,8 @@ ], "es": "No se encontraron traducciones similares", "fr-ca": "Aucune traduction semblable trouvée", - "ru": "Похожие переводы не найдены" + "ru": "Похожие переводы не найдены", + "ja": "類似の翻訳は見つかりませんでした" }, "showMoreX": { "source": "Show {count} more", @@ -47,6 +51,7 @@ ], "es": "Mostrar {count} más", "fr-ca": "Show {count} more", - "ru": "Показать {count} больше" + "ru": "Показать {count} больше", + "ja": "{count} を表示" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json index d019dbc0..d2a4786b 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "629d4cce6035f21e2325986627891758", "baseChecksum": "fdf7dc519363415a82c0e19d15661480", "status": "translated" + }, + "ja": { + "checksum": "eb97498a7f0cecf1062b1b0e7e1f1e8f", + "baseChecksum": "fdf7dc519363415a82c0e19d15661480", + "status": "translated" } }, "idle": { @@ -37,6 +42,11 @@ "checksum": "49f3d721c042bb712edd44ab31254825", "baseChecksum": "fc1752e501589956925c6d7ec51b4737", "status": "translated" + }, + "ja": { + "checksum": "fb9debff3b7b68b88e0b061292bb8567", + "baseChecksum": "fc1752e501589956925c6d7ec51b4737", + "status": "translated" } }, "loading": { @@ -57,6 +67,11 @@ "checksum": "0c9e8dbe3c7bee3c1564d9beafcbf6bc", "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", "status": "translated" + }, + "ja": { + "checksum": "e8a3a290283e520f5d3f6a399422ac01", + "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", + "status": "translated" } }, "empty": { @@ -77,6 +92,11 @@ "checksum": "153764e3ac7828a26b9e80f7a3612530", "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", "status": "translated" + }, + "ja": { + "checksum": "cefdcff170cce639ea0ba9c6ad5b4ea1", + "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", + "status": "translated" } }, "showMoreX": { @@ -97,6 +117,11 @@ "checksum": "ed667cad5e2af69efc1eca00c60429b8", "baseChecksum": "b39ae93853f9b177650ca742f758312d", "status": "translated" + }, + "ja": { + "checksum": "1a3b363e63a99737336b9f0bcca01221", + "baseChecksum": "b39ae93853f9b177650ca742f758312d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/resource_entries.json b/apps/tracker/src/i18n/browser/status/resource_entries.json index 5833c930..159ceca5 100644 --- a/apps/tracker/src/i18n/browser/status/resource_entries.json +++ b/apps/tracker/src/i18n/browser/status/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Nuevo", "fr-ca": "Nouveau", - "ru": "Новый" + "ru": "Новый", + "ja": "新しい" }, "stale": { "source": "Stale", @@ -17,7 +18,8 @@ ], "es": "Duro", "fr-ca": "Vicié", - "ru": "Залежалый" + "ru": "Залежалый", + "ja": "古くなった" }, "translated": { "source": "Translated", @@ -27,7 +29,8 @@ ], "es": "Traducido", "fr-ca": "Traduit", - "ru": "Переведено" + "ru": "Переведено", + "ja": "翻訳済み" }, "verified": { "source": "Verified", @@ -37,6 +40,7 @@ ], "es": "Verificado", "fr-ca": "Vérifié", - "ru": "Подтверждено" + "ru": "Подтверждено", + "ja": "検証済み" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/tracker_meta.json b/apps/tracker/src/i18n/browser/status/tracker_meta.json index 37693657..89a3a69a 100644 --- a/apps/tracker/src/i18n/browser/status/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/status/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "97ae6e0bca16b37dbdc5e324d0ecaf60", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "ja": { + "checksum": "ad4b0bd55882d4f7164630d4158d3c39", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "stale": { @@ -37,6 +42,11 @@ "checksum": "0fa45772724dbd2cf9e99b15e04d7efa", "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", "status": "translated" + }, + "ja": { + "checksum": "1720f89d6728615fff1b1d0bd2baf6fa", + "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", + "status": "translated" } }, "translated": { @@ -57,6 +67,11 @@ "checksum": "abcbcb3b8d5c0f82b5129dc554ffe62e", "baseChecksum": "532220dbf680ea98d665427b145e72ca", "status": "translated" + }, + "ja": { + "checksum": "6ccccd1019356b7c3d14daebbbc5c507", + "baseChecksum": "532220dbf680ea98d665427b145e72ca", + "status": "translated" } }, "verified": { @@ -77,6 +92,11 @@ "checksum": "fe630d9925eeab434088f5ec6439fb33", "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", "status": "translated" + }, + "ja": { + "checksum": "56bde30703e7f2b67f711269f4596632", + "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json index 387b986c..3b52ee18 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Necesita trabajo", "fr-ca": "Nécessite des travaux", - "ru": "Требуется доработка" + "ru": "Требуется доработка", + "ja": "改善が必要" }, "ariaLabelX": { "source": "Filter by status. Currently showing: { text }", @@ -17,6 +18,7 @@ ], "es": "Filtrar por estado. Actualmente se muestra: {texto}", "fr-ca": "Filtrer par statut. Affichage actuel : { texte }", - "ru": "Фильтр по статусу. В данный момент отображается: { текст }" + "ru": "Фильтр по статусу. В данный момент отображается: { текст }", + "ja": "ステータスで絞り込み。現在表示中:{テキスト}" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json index 94b42238..d67f8ddc 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "58291dae413e4204dd1dc0adb831c6a7", "baseChecksum": "82198ade859bc9f4034a6dd31276d473", "status": "translated" + }, + "ja": { + "checksum": "8b5d48d121784c6c800b9e719ea02926", + "baseChecksum": "82198ade859bc9f4034a6dd31276d473", + "status": "translated" } }, "ariaLabelX": { @@ -37,6 +42,11 @@ "checksum": "046b8a36af662a632097d5e0ae2611ac", "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", "status": "translated" + }, + "ja": { + "checksum": "ecf1e9344fc9256c2f55bc99d58b833d", + "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/resource_entries.json b/apps/tracker/src/i18n/browser/toast/resource_entries.json index 1850682f..736f9feb 100644 --- a/apps/tracker/src/i18n/browser/toast/resource_entries.json +++ b/apps/tracker/src/i18n/browser/toast/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Copiado al portapapeles", "fr-ca": "Copié dans le presse-papiers", - "ru": "Скопировано в буфер обмена" + "ru": "Скопировано в буфер обмена", + "ja": "クリップボードにコピーされました" }, "copyFailed": { "source": "Failed to copy", @@ -17,7 +18,8 @@ ], "es": "No se pudo copiar", "fr-ca": "Échec de la copie", - "ru": "Не удалось скопировать" + "ru": "Не удалось скопировать", + "ja": "コピーに失敗しました" }, "resourceDeleted": { "source": "Resource deleted successfully", @@ -27,7 +29,8 @@ ], "es": "Recurso eliminado exitosamente", "fr-ca": "Ressource supprimée avec succès", - "ru": "Ресурс успешно удален" + "ru": "Ресурс успешно удален", + "ja": "リソースは正常に削除されました" }, "deleteFailed": { "source": "Failed to delete resource", @@ -37,7 +40,8 @@ ], "es": "No se pudo eliminar el recurso", "fr-ca": "Échec de la suppression de la ressource", - "ru": "Не удалось удалить ресурс" + "ru": "Не удалось удалить ресурс", + "ja": "リソースの削除に失敗しました" }, "translateFailed": { "source": "Failed to auto-translate resource", @@ -47,7 +51,8 @@ ], "es": "No se pudo traducir automáticamente el recurso", "fr-ca": "Échec de la traduction automatique de la ressource", - "ru": "Не удалось выполнить автоматический перевод ресурса." + "ru": "Не удалось выполнить автоматический перевод ресурса.", + "ja": "リソースの自動翻訳に失敗しました" }, "translationUpdated": { "source": "Translation updated successfully", @@ -57,7 +62,8 @@ ], "es": "Traducción actualizada exitosamente", "fr-ca": "Traduction mise à jour avec succès", - "ru": "Перевод успешно обновлен." + "ru": "Перевод успешно обновлен.", + "ja": "翻訳が正常に更新されました" }, "localeTranslated": { "source": "1 locale translated successfully", @@ -67,7 +73,8 @@ ], "es": "1 configuración regional traducida correctamente", "fr-ca": "1 langue traduite avec succès", - "ru": "1 локализация успешно переведена" + "ru": "1 локализация успешно переведена", + "ja": "1つのロケールが正常に翻訳されました" }, "localesTranslatedX": { "source": "{count} locales translated successfully", @@ -77,7 +84,8 @@ ], "es": "{count} locales traducidos correctamente", "fr-ca": "{count} Les paramètres régionaux ont été traduits avec succès", - "ru": "{count} Локали успешно переведены" + "ru": "{count} Локали успешно переведены", + "ja": "{count}ロケールが正常に翻訳されました" }, "allLocalesUpToDate": { "source": "All locales are already up to date", @@ -87,7 +95,8 @@ ], "es": "Todas las configuraciones regionales ya están actualizadas", "fr-ca": "Tous les emplacements sont déjà à jour.", - "ru": "Все языковые версии уже обновлены." + "ru": "Все языковые версии уже обновлены.", + "ja": "すべての地域は既に最新の状態です" }, "skippedLocalesX": { "source": "Skipped locales (ICU format): {locales}", @@ -97,7 +106,8 @@ ], "es": "Configuraciones regionales omitidas (formato ICU): {locales}", "fr-ca": "Paramètres régionaux ignorés (format ICU) : {locales}", - "ru": "Пропущенные локали (формат ICU): {locales}" + "ru": "Пропущенные локали (формат ICU): {locales}", + "ja": "スキップされたロケール (ICU 形式): {locales}" }, "resourceCreated": { "source": "Resource created successfully", @@ -107,7 +117,8 @@ ], "es": "Recurso creado exitosamente", "fr-ca": "Ressource créée avec succès", - "ru": "Ресурс успешно создан." + "ru": "Ресурс успешно создан.", + "ja": "リソースが正常に作成されました" }, "autoTranslationSkippedX": { "source": "Auto-translation skipped for {locales} (ICU format not supported)", @@ -117,7 +128,8 @@ ], "es": "Se omitió la traducción automática para {locales} (formato ICU no compatible)", "fr-ca": "Traduction automatique ignorée pour {locales} (format ICU non pris en charge)", - "ru": "Автоматический перевод пропущен для {locales} (формат ICU не поддерживается)" + "ru": "Автоматический перевод пропущен для {locales} (формат ICU не поддерживается)", + "ja": "{locales} の自動翻訳はスキップされました(ICU形式はサポートされていません)。" }, "resourceAlreadyInFolder": { "source": "Resource is already in this folder", @@ -127,7 +139,8 @@ ], "es": "El recurso ya está en esta carpeta", "fr-ca": "La ressource se trouve déjà dans ce dossier.", - "ru": "Ресурс уже находится в этой папке." + "ru": "Ресурс уже находится в этой папке.", + "ja": "リソースは既にこのフォルダにあります" }, "resourceMovedX": { "source": "Moved \"{name}\" to {folder}", @@ -137,7 +150,8 @@ ], "es": "Se movió \"{name}\" a {folder}", "fr-ca": "Déplacé « {name} » vers {folder}", - "ru": "Перемещено \"{name}\" в {folder}" + "ru": "Перемещено \"{name}\" в {folder}", + "ja": "\"{name}\" を {folder} に移動しました。" }, "folderAlreadyAtLocation": { "source": "Folder is already at this location", @@ -147,7 +161,8 @@ ], "es": "La carpeta ya está en esta ubicación", "fr-ca": "Le dossier est déjà à cet emplacement.", - "ru": "Папка уже находится по этому адресу." + "ru": "Папка уже находится по этому адресу.", + "ja": "フォルダは既にこの場所にあります" }, "folderMovedX": { "source": "Moved \"{name}\" into {dest}", @@ -157,7 +172,8 @@ ], "es": "Se movió \"{name}\" a {dest}", "fr-ca": "Déplacé « {name} » dans {dest}", - "ru": "Перемещено \"{name}\" в {dest}" + "ru": "Перемещено \"{name}\" в {dest}", + "ja": "\"{name}\" を {dest} に移動しました。" }, "moveResourceFailed": { "source": "Failed to move resource", @@ -167,7 +183,8 @@ ], "es": "No se pudo mover el recurso", "fr-ca": "Échec du déplacement de la ressource", - "ru": "Не удалось переместить ресурс." + "ru": "Не удалось переместить ресурс.", + "ja": "リソースの移動に失敗しました" }, "moveFolderFailed": { "source": "Failed to move folder", @@ -177,7 +194,8 @@ ], "es": "No se pudo mover la carpeta", "fr-ca": "Impossible de déplacer le dossier", - "ru": "Не удалось переместить папку." + "ru": "Не удалось переместить папку.", + "ja": "フォルダの移動に失敗しました" }, "loadFoldersFailed": { "source": "Failed to load folders", @@ -187,7 +205,8 @@ ], "es": "No se pudieron cargar las carpetas", "fr-ca": "Échec du chargement des dossiers", - "ru": "Не удалось загрузить папки." + "ru": "Не удалось загрузить папки.", + "ja": "フォルダの読み込みに失敗しました" }, "loadFolderChildrenFailed": { "source": "Failed to load folder contents", @@ -197,7 +216,8 @@ ], "es": "No se pudo cargar el contenido de la carpeta", "fr-ca": "Impossible de charger le contenu du dossier", - "ru": "Не удалось загрузить содержимое папки." + "ru": "Не удалось загрузить содержимое папки.", + "ja": "フォルダの内容の読み込みに失敗しました" }, "createFolderFailed": { "source": "Failed to create folder", @@ -207,7 +227,8 @@ ], "es": "Error al crear la carpeta", "fr-ca": "Impossible de créer le dossier", - "ru": "Не удалось создать папку." + "ru": "Не удалось создать папку.", + "ja": "フォルダの作成に失敗しました" }, "deleteFolderFailed": { "source": "Failed to delete folder", @@ -217,7 +238,8 @@ ], "es": "No se pudo eliminar la carpeta", "fr-ca": "Échec de la suppression du dossier", - "ru": "Не удалось удалить папку." + "ru": "Не удалось удалить папку.", + "ja": "フォルダの削除に失敗しました" }, "loadTranslationsFailed": { "source": "Failed to load translations", @@ -227,7 +249,8 @@ ], "es": "No se pudieron cargar las traducciones", "fr-ca": "Impossible de charger les traductions", - "ru": "Не удалось загрузить переводы." + "ru": "Не удалось загрузить переводы.", + "ja": "翻訳の読み込みに失敗しました" }, "searchTranslationsFailed": { "source": "Failed to search translations", @@ -237,7 +260,8 @@ ], "es": "No se pudo buscar traducciones", "fr-ca": "Échec de la recherche de traductions", - "ru": "Поиск переводов не удался." + "ru": "Поиск переводов не удался.", + "ja": "翻訳の検索に失敗しました" }, "checkCacheStatusFailed": { "source": "Failed to check cache status", @@ -247,6 +271,7 @@ ], "es": "No se pudo comprobar el estado de la caché", "fr-ca": "Échec de la vérification de l'état du cache", - "ru": "Не удалось проверить состояние кэша." + "ru": "Не удалось проверить состояние кэша.", + "ja": "キャッシュの状態を確認できませんでした" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/tracker_meta.json b/apps/tracker/src/i18n/browser/toast/tracker_meta.json index 1e68f8c2..42204318 100644 --- a/apps/tracker/src/i18n/browser/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/toast/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "ec92bc41e416d8493fcdeb3629e87e12", "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", "status": "translated" + }, + "ja": { + "checksum": "567229e0a6700867940999093ce6c150", + "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", + "status": "translated" } }, "copyFailed": { @@ -37,6 +42,11 @@ "checksum": "c63eb8553a973244e9929fb545ba6a68", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "ja": { + "checksum": "a3be8780485e9d6cb6ac1b61fe24e2cb", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "resourceDeleted": { @@ -57,6 +67,11 @@ "checksum": "cdef260bd827cc2954ca546bd851a2ed", "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", "status": "translated" + }, + "ja": { + "checksum": "ed7e19297885ad43185af933ad4b591a", + "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", + "status": "translated" } }, "deleteFailed": { @@ -77,6 +92,11 @@ "checksum": "75514f822bae3ee2a45d8fe6d3e8e421", "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", "status": "translated" + }, + "ja": { + "checksum": "65c480803307a8e07e3d746049e9a2c9", + "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", + "status": "translated" } }, "translateFailed": { @@ -97,6 +117,11 @@ "checksum": "06b361d1480d6c99691ae65506106ce0", "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", "status": "translated" + }, + "ja": { + "checksum": "83f4cb2702bdddf2fb205fa75e256699", + "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", + "status": "translated" } }, "translationUpdated": { @@ -117,6 +142,11 @@ "checksum": "8758846c4d762ef7ae23f64c9e8a37ee", "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", "status": "translated" + }, + "ja": { + "checksum": "fee19bc8be44363a06fa197fa44bc1c1", + "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", + "status": "translated" } }, "localeTranslated": { @@ -137,6 +167,11 @@ "checksum": "67fd8872d020382bd67558d32e6820df", "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", "status": "translated" + }, + "ja": { + "checksum": "d8d473fa85d270c7dc402ed06e3512ab", + "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", + "status": "translated" } }, "localesTranslatedX": { @@ -157,6 +192,11 @@ "checksum": "f9eb75bd7974a61268f85076bdc71336", "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", "status": "translated" + }, + "ja": { + "checksum": "a89ae0122ac838d74151d8fdc99b0f41", + "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", + "status": "translated" } }, "allLocalesUpToDate": { @@ -177,6 +217,11 @@ "checksum": "025845ef981f5263abff0bc625c0bb26", "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", "status": "translated" + }, + "ja": { + "checksum": "4babafabb40626c8ba9b8c1ac9e46e42", + "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", + "status": "translated" } }, "skippedLocalesX": { @@ -197,6 +242,11 @@ "checksum": "ef143d7f4fd08c61ba32621f5857a02f", "baseChecksum": "12a69e024b35f9a21939d29f767e0821", "status": "translated" + }, + "ja": { + "checksum": "38a1151aec569dbf7cca1278a65ca866", + "baseChecksum": "12a69e024b35f9a21939d29f767e0821", + "status": "translated" } }, "resourceCreated": { @@ -217,6 +267,11 @@ "checksum": "fe46f75147afda125972f7952101f910", "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", "status": "translated" + }, + "ja": { + "checksum": "621251f5001e39bcce4c88ab48dafaa6", + "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", + "status": "translated" } }, "autoTranslationSkippedX": { @@ -237,6 +292,11 @@ "checksum": "e7141f32408f357995b006d9ad1fc8db", "baseChecksum": "760c64588bcdc219130e6209f46db428", "status": "translated" + }, + "ja": { + "checksum": "b702c32653d30d3b174ade0acc4c0d1c", + "baseChecksum": "760c64588bcdc219130e6209f46db428", + "status": "translated" } }, "resourceAlreadyInFolder": { @@ -257,6 +317,11 @@ "checksum": "649e37b9c72cdc2b1391f6a007f09bde", "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", "status": "translated" + }, + "ja": { + "checksum": "03360edfbb1d351e04a12caaa6b4f0a7", + "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", + "status": "translated" } }, "resourceMovedX": { @@ -277,6 +342,11 @@ "checksum": "57ed621db988e0ff2452dd3ceba888de", "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", "status": "translated" + }, + "ja": { + "checksum": "b9747d860acd91f2caeacf54b50aa10f", + "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", + "status": "translated" } }, "folderAlreadyAtLocation": { @@ -297,6 +367,11 @@ "checksum": "6cdea52f8679f1066433331ba737c10b", "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", "status": "translated" + }, + "ja": { + "checksum": "1c280dce184bc9507906e14f5d58e70a", + "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", + "status": "translated" } }, "folderMovedX": { @@ -317,6 +392,11 @@ "checksum": "0a01d88a69798347a9f7c46d2737fb00", "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", "status": "translated" + }, + "ja": { + "checksum": "85b8f85868a900049b2b053d2f358252", + "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", + "status": "translated" } }, "moveResourceFailed": { @@ -337,6 +417,11 @@ "checksum": "aee0145a06c50bf66cd84d7cf9a89166", "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", "status": "translated" + }, + "ja": { + "checksum": "0ca4fd45835da010826489a941689033", + "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", + "status": "translated" } }, "moveFolderFailed": { @@ -357,6 +442,11 @@ "checksum": "0327a27e4d4b75e0667b8c931f45248d", "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", "status": "translated" + }, + "ja": { + "checksum": "196bfc492480dc88d3629161a5b12a07", + "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", + "status": "translated" } }, "loadFoldersFailed": { @@ -377,6 +467,11 @@ "checksum": "2bb1d38671ee0d072212e76a04238167", "baseChecksum": "5066e552105a8542039601e3df9b26c8", "status": "translated" + }, + "ja": { + "checksum": "851684cb4047dee5dc52c288ce2e6c5f", + "baseChecksum": "5066e552105a8542039601e3df9b26c8", + "status": "translated" } }, "loadFolderChildrenFailed": { @@ -397,6 +492,11 @@ "checksum": "e269d5b86aed9cb090df1bf0802d9384", "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", "status": "translated" + }, + "ja": { + "checksum": "9306c7d6e961819940e1c6583167cfe8", + "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", + "status": "translated" } }, "createFolderFailed": { @@ -417,6 +517,11 @@ "checksum": "5c86bb3f4b6b381f42094b79f6e2ba62", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "ja": { + "checksum": "653707d6996bec51f6bbd51b29d7aee7", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "deleteFolderFailed": { @@ -437,6 +542,11 @@ "checksum": "7c833db5ea6801e338392f8251288b6c", "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", "status": "translated" + }, + "ja": { + "checksum": "7b0bd7e619dd498dac3d246131c18b6a", + "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", + "status": "translated" } }, "loadTranslationsFailed": { @@ -457,6 +567,11 @@ "checksum": "5d7464d26544e7d3f675d1760886bfcb", "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", "status": "translated" + }, + "ja": { + "checksum": "5a7c357a2dce728b5b7b92beee873151", + "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", + "status": "translated" } }, "searchTranslationsFailed": { @@ -477,6 +592,11 @@ "checksum": "80ba7aef9d007e5515bbf8b82a5e5e58", "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", "status": "translated" + }, + "ja": { + "checksum": "0dda7860a9bbfab0b96d9291d72cf9c4", + "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", + "status": "translated" } }, "checkCacheStatusFailed": { @@ -497,6 +617,11 @@ "checksum": "cac79a23a3050bf41a3458c7829a65f1", "baseChecksum": "c36227ebfa47873e719514df95f28888", "status": "translated" + }, + "ja": { + "checksum": "0c38c42a7b104d56898638166bf15cb1", + "baseChecksum": "c36227ebfa47873e719514df95f28888", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/tracker_meta.json b/apps/tracker/src/i18n/browser/tracker_meta.json index 589702dd..1a919474 100644 --- a/apps/tracker/src/i18n/browser/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "fa210ccd7b7d9347d63fbc720faeb1bf", "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", "status": "translated" + }, + "ja": { + "checksum": "826da54bd00eb095a391f518f9241381", + "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", + "status": "translated" } }, "filterFolders": { @@ -37,6 +42,11 @@ "checksum": "9078189387de2fe62f86b0d851c68b7b", "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", "status": "translated" + }, + "ja": { + "checksum": "5fcf227d8db466f32f42733156da35e1", + "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", + "status": "translated" } }, "loadingFolders": { @@ -57,6 +67,11 @@ "checksum": "df5432f9517649a4f409d30cc2e9d8a5", "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", "status": "translated" + }, + "ja": { + "checksum": "b5dabea2eb0cea29b27b97dbf2407923", + "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", + "status": "translated" } }, "noFoldersMatchSearch": { @@ -77,6 +92,11 @@ "checksum": "2859dc31bb46a00eb851216edaeb81e2", "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", "status": "translated" + }, + "ja": { + "checksum": "216553c9108f0e0516a4de96430bd572", + "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", + "status": "translated" } }, "noFoldersFound": { @@ -97,6 +117,11 @@ "checksum": "5e9f67a2b830d84f57632a0835ddaa1b", "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", "status": "translated" + }, + "ja": { + "checksum": "d20464ad8dd7a7fa6ab1ad8eaebab662", + "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", + "status": "translated" } }, "clickToLoad": { @@ -117,6 +142,11 @@ "checksum": "3d9a1da51f9facd70f9fca121afc47f8", "baseChecksum": "73c67a917acc1f58d962462b80209a2d", "status": "translated" + }, + "ja": { + "checksum": "753b3a43383a36cbbfe5dca93544d005", + "baseChecksum": "73c67a917acc1f58d962462b80209a2d", + "status": "translated" } }, "loadingCollectionConfiguration": { @@ -137,6 +167,11 @@ "checksum": "0ef07a4f718fb85f3a3faae1347bfff8", "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", "status": "translated" + }, + "ja": { + "checksum": "b5045b5c8ccce22507cdd309cea075dc", + "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", + "status": "translated" } }, "loadingTranslations": { @@ -157,6 +192,11 @@ "checksum": "bd9770c77e861ad2ab36e46e4044fbde", "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", "status": "translated" + }, + "ja": { + "checksum": "abc27a8d5e2687c524c2d8952d5dc814", + "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", + "status": "translated" } }, "noTranslationsFoundInFolder": { @@ -177,6 +217,11 @@ "checksum": "2527f79457eacc89234bc006d8d7489c", "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", "status": "translated" + }, + "ja": { + "checksum": "5804cbd021df71d58e6abdb672a54214", + "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", + "status": "translated" } }, "searchTranslations": { @@ -197,6 +242,11 @@ "checksum": "c5510b402837c0bbc123de68a1d0f7a3", "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", "status": "translated" + }, + "ja": { + "checksum": "a08e08bcd107b1987fc75bcfcc06d088", + "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", + "status": "translated" } }, "showingSearchResultsForX": { @@ -217,6 +267,11 @@ "checksum": "db3a954f90518769a688706acec4b614", "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", "status": "translated" + }, + "ja": { + "checksum": "2d11da26c6236435857b7c04a6974b78", + "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", + "status": "translated" } }, "clearSearch": { @@ -237,6 +292,11 @@ "checksum": "30e2d4974208e7be2d9a8e7e58f8adf4", "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", "status": "translated" + }, + "ja": { + "checksum": "2b4c324620a1bbb4bb69b5c878b817f8", + "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", + "status": "translated" } }, "noFolderSelected": { @@ -257,6 +317,11 @@ "checksum": "bd56afdcb901f2da743aa5d1aaae8c18", "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", "status": "translated" + }, + "ja": { + "checksum": "a451284da105a6a43b836b542ea3fe6d", + "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", + "status": "translated" } }, "addTranslationButton": { @@ -277,6 +342,11 @@ "checksum": "b4978cefca449b5f01784658cdc3af50", "baseChecksum": "cb00aa2dec0df9333114919825e4883b", "status": "translated" + }, + "ja": { + "checksum": "1ed69309dc713cdd954e5288f6af6cb2", + "baseChecksum": "cb00aa2dec0df9333114919825e4883b", + "status": "translated" } }, "sortAscending": { @@ -297,6 +367,11 @@ "checksum": "df24ffa5304e28ab9c2040d9de5321ef", "baseChecksum": "bc01377158f11789893c21fac7a21477", "status": "translated" + }, + "ja": { + "checksum": "0f4cb7f9d1776c7b209e278dcdc769f0", + "baseChecksum": "bc01377158f11789893c21fac7a21477", + "status": "translated" } }, "sortDescending": { @@ -317,6 +392,11 @@ "checksum": "5cbc68bf05d0bb56bfb3958d010713ae", "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", "status": "translated" + }, + "ja": { + "checksum": "2166a8d2c8d100de97fdc0864f2784d8", + "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", + "status": "translated" } }, "sortAscendingTooltip": { @@ -337,6 +417,11 @@ "checksum": "5d9f4c7ce1400ef1e553973d3179b3c3", "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", "status": "translated" + }, + "ja": { + "checksum": "1e31674cda89acfc45e3c2783a9e4d60", + "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", + "status": "translated" } }, "sortDescendingTooltip": { @@ -357,6 +442,11 @@ "checksum": "4fb2227228b1fd2c3d45482ae824414d", "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", "status": "translated" + }, + "ja": { + "checksum": "1dacc5dc70f308a5805a13f5723db6f4", + "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", + "status": "translated" } }, "selectFolderFirst": { @@ -377,6 +467,11 @@ "checksum": "55a41223d9c642c59c0ff06f085d27a6", "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", "status": "translated" + }, + "ja": { + "checksum": "9586322b0e1c3ac2016a8878266fde6e", + "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", + "status": "translated" } }, "addNewTranslationTooltip": { @@ -397,6 +492,11 @@ "checksum": "e621eb5ad060a4a7d05465cc3c6c7096", "baseChecksum": "e26fd2bf951546994a81c53bc593e520", "status": "translated" + }, + "ja": { + "checksum": "2bbb8dcf1c9c55839402701666ef6888", + "baseChecksum": "e26fd2bf951546994a81c53bc593e520", + "status": "translated" } }, "noTranslation": { @@ -417,6 +517,11 @@ "checksum": "f8b534beda4cc6ab2f67295048a56fea", "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", "status": "translated" + }, + "ja": { + "checksum": "bc42db0a02f61c45c64c3a56b158aa6b", + "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", + "status": "translated" } }, "commentPrefix": { @@ -437,6 +542,11 @@ "checksum": "499b9bd346e02b97baf20bb8f649cb37", "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", "status": "translated" + }, + "ja": { + "checksum": "ed114a48e97e3ec41713209a0c66b9f8", + "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", + "status": "translated" } }, "toggleExpansion": { @@ -457,6 +567,11 @@ "checksum": "73ccd74271a9e6b138f4b699c3bf78d8", "baseChecksum": "a600b0cbba3359d934a659341e5b727b", "status": "translated" + }, + "ja": { + "checksum": "40786f814610f633f1b322b0caf01025", + "baseChecksum": "a600b0cbba3359d934a659341e5b727b", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json index 56e4d7d2..ec670390 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Sin comentarios añadidos", "fr-ca": "Aucun commentaire ajouté", - "ru": "Комментарий не добавлен" + "ru": "Комментарий не добавлен", + "ja": "コメントは追加されていません" }, "message": { "source": "Comments help other translators understand context. Are you sure you want to save without a comment?", @@ -17,7 +18,8 @@ ], "es": "Los comentarios ayudan a otros traductores a comprender el contexto. ¿Seguro que quieres guardar sin comentarios?", "fr-ca": "Les commentaires aident les autres traducteurs à comprendre le contexte. Voulez-vous vraiment enregistrer sans commentaire ?", - "ru": "Комментарии помогают другим переводчикам понять контекст. Вы уверены, что хотите сохранить документ без комментария?" + "ru": "Комментарии помогают другим переводчикам понять контекст. Вы уверены, что хотите сохранить документ без комментария?", + "ja": "コメントは他の翻訳者が文脈を理解するのに役立ちます。コメントなしで保存してもよろしいですか?" }, "saveAnyway": { "source": "Save Anyway", @@ -27,7 +29,8 @@ ], "es": "Guardar de todos modos", "fr-ca": "Sauvegarder quand même", - "ru": "В любом случае сохранить" + "ru": "В любом случае сохранить", + "ja": "とにかく保存する" }, "addComment": { "source": "Add Comment", @@ -37,6 +40,7 @@ ], "es": "Añadir comentario", "fr-ca": "Ajouter un commentaire", - "ru": "Добавить комментарий" + "ru": "Добавить комментарий", + "ja": "コメントを追加" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json index 3fe76e96..6769886b 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "2c3a45454b973f06cd5ebdf1959dae25", "baseChecksum": "530d98327e030fcb737f5821d32684f4", "status": "translated" + }, + "ja": { + "checksum": "8422c999f7ca634b16fb41454b36cfca", + "baseChecksum": "530d98327e030fcb737f5821d32684f4", + "status": "translated" } }, "message": { @@ -37,6 +42,11 @@ "checksum": "a891cc739cae53e981ea9a4823e6fcc1", "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", "status": "translated" + }, + "ja": { + "checksum": "2d5750a29bf55220f1e6685c2bd435f4", + "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", + "status": "translated" } }, "saveAnyway": { @@ -57,6 +67,11 @@ "checksum": "68025402bb82a18da19a787c6f7b138b", "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", "status": "translated" + }, + "ja": { + "checksum": "0ceece09d9645df4510d92c685f5ad61", + "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", + "status": "translated" } }, "addComment": { @@ -77,6 +92,11 @@ "checksum": "86571d3b73c9fcf90635997b576007bb", "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", "status": "translated" + }, + "ja": { + "checksum": "49c9ea90a9ab1f73d3cd2c0626430d9a", + "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json index 6d687f00..1e525593 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "La clave de traducción ya existe", "fr-ca": "La clé de traduction existe déjà.", - "ru": "Ключ перевода уже существует" + "ru": "Ключ перевода уже существует", + "ja": "翻訳キーは既に存在します" }, "messageX": { "source": "The translation key \"{key}\" already exists in this collection. Would you like to edit the existing translation or choose a different key?", @@ -17,7 +18,8 @@ ], "es": "La clave de traducción \"{key}\" ya existe en esta colección. ¿Desea editar la traducción existente o elegir una clave diferente?", "fr-ca": "La clé de traduction « {key} » existe déjà dans cette collection. Souhaitez-vous modifier la traduction existante ou choisir une autre clé ?", - "ru": "Ключ перевода \"{key}\" уже существует в этой коллекции. Хотите отредактировать существующий перевод или выбрать другой ключ?" + "ru": "Ключ перевода \"{key}\" уже существует в этой коллекции. Хотите отредактировать существующий перевод или выбрать другой ключ?", + "ja": "翻訳キー「{key}」は既にこのコレクションに存在します。既存の翻訳を編集しますか、それとも別のキーを選択しますか?" }, "editExisting": { "source": "Edit Existing", @@ -27,7 +29,8 @@ ], "es": "Editar existente", "fr-ca": "Modifier l'existant", - "ru": "Редактировать существующий" + "ru": "Редактировать существующий", + "ja": "既存のものを編集する" }, "chooseDifferentKey": { "source": "Choose Different Key", @@ -37,6 +40,7 @@ ], "es": "Elija una clave diferente", "fr-ca": "Choisir une autre clé", - "ru": "Выберите другой ключ" + "ru": "Выберите другой ключ", + "ja": "別のキーを選択してください" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json index bae475ce..9e6fa7fd 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "c63d79c96c3134a0f4ba01d0249ff134", "baseChecksum": "045a806cdff0da04ef93312480a9934e", "status": "translated" + }, + "ja": { + "checksum": "eae01e38b9130eda454eee100fa18b6d", + "baseChecksum": "045a806cdff0da04ef93312480a9934e", + "status": "translated" } }, "messageX": { @@ -37,6 +42,11 @@ "checksum": "5dcee4e9669d158cef1d3bcfbe2d985c", "baseChecksum": "765a0106f27fce3620418e6a5afece18", "status": "translated" + }, + "ja": { + "checksum": "d4ed5eccd890b1df12a412e06953ac19", + "baseChecksum": "765a0106f27fce3620418e6a5afece18", + "status": "translated" } }, "editExisting": { @@ -57,6 +67,11 @@ "checksum": "c96691855499f791f0427d9b91503d4b", "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", "status": "translated" + }, + "ja": { + "checksum": "85ca194852efd9073f380df903e2f608", + "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", + "status": "translated" } }, "chooseDifferentKey": { @@ -77,6 +92,11 @@ "checksum": "7dec38b22dfbcb03964b55056be92d57", "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", "status": "translated" + }, + "ja": { + "checksum": "391ea33afe4c7850f21ab4aab09ff836", + "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json index fc0ffa88..fa572272 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "No se puede actualizar: faltan datos del recurso", "fr-ca": "Impossible de mettre à jour : les données de ressources sont manquantes.", - "ru": "Невозможно обновить: отсутствуют данные ресурса." + "ru": "Невозможно обновить: отсутствуют данные ресурса.", + "ja": "更新できません: リソースデータが不足しています" }, "keyRenamingNotSupported": { "source": "Key renaming is not yet supported. Please use the same key or create a new resource.", @@ -17,7 +18,8 @@ ], "es": "Aún no se admite el cambio de nombre de clave. Utilice la misma clave o cree un nuevo recurso.", "fr-ca": "Le renommage des clés n'est pas encore pris en charge. Veuillez utiliser la même clé ou créer une nouvelle ressource.", - "ru": "Функция переименования ключей пока не поддерживается. Пожалуйста, используйте тот же ключ или создайте новый ресурс." + "ru": "Функция переименования ключей пока не поддерживается. Пожалуйста, используйте тот же ключ или создайте новый ресурс.", + "ja": "キー名の変更はまだサポートされていません。同じキーを使用するか、新しいリソースを作成してください。" }, "notFound": { "source": "Resource not found. It may have been deleted.", @@ -27,7 +29,8 @@ ], "es": "Recurso no encontrado. Es posible que se haya eliminado.", "fr-ca": "Ressource introuvable. Elle a peut-être été supprimée.", - "ru": "Ресурс не найден. Возможно, он был удален." + "ru": "Ресурс не найден. Возможно, он был удален.", + "ja": "リソースが見つかりません。削除された可能性があります。" }, "invalidRequest": { "source": "Invalid request", @@ -37,7 +40,8 @@ ], "es": "Solicitud no válida", "fr-ca": "Requête invalide", - "ru": "Неверный запрос" + "ru": "Неверный запрос", + "ja": "無効なリクエスト" }, "createFailed": { "source": "Failed to create translation", @@ -47,7 +51,8 @@ ], "es": "No se pudo crear la traducción", "fr-ca": "Échec de la traduction", - "ru": "Не удалось создать перевод" + "ru": "Не удалось создать перевод", + "ja": "翻訳の作成に失敗しました" }, "updateFailed": { "source": "Failed to update translation", @@ -57,7 +62,8 @@ ], "es": "No se pudo actualizar la traducción", "fr-ca": "Échec de la mise à jour de la traduction", - "ru": "Не удалось обновить перевод" + "ru": "Не удалось обновить перевод", + "ja": "翻訳の更新に失敗しました" }, "unexpected": { "source": "An unexpected error occurred", @@ -67,6 +73,7 @@ ], "es": "Se produjo un error inesperado", "fr-ca": "Une erreur inattendue s'est produite.", - "ru": "Произошла непредвиденная ошибка." + "ru": "Произошла непредвиденная ошибка.", + "ja": "予期せぬエラーが発生しました" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json index 2cbb5b38..4a4f8208 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "f367dff2a5b4ba833696a76796dea8bd", "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", "status": "translated" + }, + "ja": { + "checksum": "d5d568690e6d54e50b191a46ec907e6e", + "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", + "status": "translated" } }, "keyRenamingNotSupported": { @@ -37,6 +42,11 @@ "checksum": "2bb377f62e8cd28ed1f101cf11565bb0", "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", "status": "translated" + }, + "ja": { + "checksum": "fb129524f433be0cb204402f3e85e9e1", + "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", + "status": "translated" } }, "notFound": { @@ -57,6 +67,11 @@ "checksum": "ff9cd65e3847be6d65913357ff266b62", "baseChecksum": "a7e38d0533724516bbacee18834f67a5", "status": "translated" + }, + "ja": { + "checksum": "8dba597c97c3e2d906f1a68252f022b8", + "baseChecksum": "a7e38d0533724516bbacee18834f67a5", + "status": "translated" } }, "invalidRequest": { @@ -77,6 +92,11 @@ "checksum": "343c7ad78b07f5457b637432b7ff6bda", "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", "status": "translated" + }, + "ja": { + "checksum": "202965d477812eed4ee85904d9312b62", + "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", + "status": "translated" } }, "createFailed": { @@ -97,6 +117,11 @@ "checksum": "3b7de41d823bcb5109f394af407c9d21", "baseChecksum": "20a64455184899c3fb2e93b4566c8860", "status": "translated" + }, + "ja": { + "checksum": "b163306edd3646085650b155d84c7284", + "baseChecksum": "20a64455184899c3fb2e93b4566c8860", + "status": "translated" } }, "updateFailed": { @@ -117,6 +142,11 @@ "checksum": "5108d70d09cb4b6066e975ce887c6c04", "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", "status": "translated" + }, + "ja": { + "checksum": "5e669e72e0db8ae03175cf1edb5a501e", + "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", + "status": "translated" } }, "unexpected": { @@ -137,6 +167,11 @@ "checksum": "660b970b7d6a7be830945cf28709dd59", "baseChecksum": "9789e322478c6f2d59e93d020808642a", "status": "translated" + }, + "ja": { + "checksum": "08b714614a930ce585efec212bcc5581", + "baseChecksum": "9789e322478c6f2d59e93d020808642a", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json index c8f52b12..cecb7658 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Cerrar diálogo", "fr-ca": "Fermer la boîte de dialogue", - "ru": "Закрыть диалог" + "ru": "Закрыть диалог", + "ja": "ダイアログを閉じる" }, "translationKey": { "source": "Translation Key", @@ -17,7 +18,8 @@ ], "es": "Clave de traducción", "fr-ca": "Clé de traduction", - "ru": "Ключ перевода" + "ru": "Ключ перевода", + "ja": "翻訳キー" }, "keyHint": { "source": "Use only letters, numbers, underscores, and hyphens", @@ -27,7 +29,8 @@ ], "es": "Utilice únicamente letras, números, guiones bajos y guiones.", "fr-ca": "Utilisez seulement des lettres, des chiffres, des traits de soulignement et des tirets.", - "ru": "Используйте только буквы, цифры, подчеркивания и дефисы." + "ru": "Используйте только буквы, цифры, подчеркивания и дефисы.", + "ja": "文字、数字、アンダースコア、ハイフンのみを使用してください。" }, "baseBadge": { "source": "Base", @@ -37,7 +40,8 @@ ], "es": "Base", "fr-ca": "Base", - "ru": "База" + "ru": "База", + "ja": "ベース" }, "locationLabel": { "source": "Location:", @@ -47,7 +51,8 @@ ], "es": "Ubicación:", "fr-ca": "Emplacement :", - "ru": "Расположение:" + "ru": "Расположение:", + "ja": "位置:" }, "locationTabHint": { "source": "Choose a different folder for this translation resource.", @@ -57,7 +62,8 @@ ], "es": "Elija una carpeta diferente para este recurso de traducción.", "fr-ca": "Choisissez un autre dossier pour cette ressource de traduction.", - "ru": "Выберите другую папку для этого ресурса перевода." + "ru": "Выберите другую папку для этого ресурса перевода.", + "ja": "この翻訳リソースの保存先フォルダを別のフォルダに選択してください。" }, "localeTranslationX": { "source": "{locale} Translation", @@ -67,7 +73,8 @@ ], "es": "{locale} Traducción", "fr-ca": "{locale} Traduction", - "ru": "{locale} Перевод" + "ru": "{locale} Перевод", + "ja": "{locale} 翻訳" }, "enterTranslationX": { "source": "Enter {locale} translation...", @@ -77,7 +84,8 @@ ], "es": "Ingrese la traducción de {locale}...", "fr-ca": "Entrez la traduction {locale}...", - "ru": "Введите {locale} перевод..." + "ru": "Введите {locale} перевод...", + "ja": "{locale} 翻訳を入力してください..." }, "baseValueRequired": { "source": "Base translation is required", @@ -87,7 +95,8 @@ ], "es": "Se requiere traducción base", "fr-ca": "La traduction de base est requise", - "ru": "Требуется базовый перевод." + "ru": "Требуется базовый перевод.", + "ja": "基本翻訳が必要です" }, "commentLabel": { "source": "Comment (Optional)", @@ -97,7 +106,8 @@ ], "es": "Comentario (opcional)", "fr-ca": "Commentaire (facultatif)", - "ru": "Комментарий (необязательно)" + "ru": "Комментарий (необязательно)", + "ja": "コメント(任意)" }, "commentPlaceholder": { "source": "Add context for translators...", @@ -107,7 +117,8 @@ ], "es": "Añadir contexto para los traductores...", "fr-ca": "Ajouter du contexte pour les traducteurs...", - "ru": "Добавьте контекст для переводчиков..." + "ru": "Добавьте контекст для переводчиков...", + "ja": "翻訳者向けに背景情報を追加してください..." }, "commentHint": { "source": "Provide context or instructions for translators", @@ -117,7 +128,8 @@ ], "es": "Proporcionar contexto o instrucciones para los traductores", "fr-ca": "Fournir un contexte ou des instructions aux traducteurs", - "ru": "Предоставьте контекст или инструкции для переводчиков." + "ru": "Предоставьте контекст или инструкции для переводчиков.", + "ja": "翻訳者向けに背景情報や指示を提供する" }, "otherLocalesToggleX": { "source": "Add translations for other locales ({count} available)", @@ -127,7 +139,8 @@ ], "es": "Agregar traducciones para otras configuraciones regionales ({count} disponible)", "fr-ca": "Ajouter des traductions pour d'autres langues ({count} disponibles)", - "ru": "Добавить переводы для других языковых версий ({count} доступны)" + "ru": "Добавить переводы для других языковых версий ({count} доступны)", + "ja": "他のロケールの翻訳を追加してください({count} が利用可能です)" }, "status": { "source": "Status", @@ -137,7 +150,8 @@ ], "es": "Estado", "fr-ca": "Statut", - "ru": "Статус" + "ru": "Статус", + "ja": "状態" }, "saving": { "source": "Saving...", @@ -147,7 +161,8 @@ ], "es": "Ahorro...", "fr-ca": "Économie...", - "ru": "Сохранение..." + "ru": "Сохранение...", + "ja": "保存中..." }, "editTitle": { "source": "Edit Translation", @@ -157,7 +172,8 @@ ], "es": "Editar traducción", "fr-ca": "Modifier la traduction", - "ru": "Редактировать перевод" + "ru": "Редактировать перевод", + "ja": "翻訳を編集する" }, "createTitle": { "source": "Create Translation", @@ -167,7 +183,8 @@ ], "es": "Crear traducción", "fr-ca": "Créer une traduction", - "ru": "Создать перевод" + "ru": "Создать перевод", + "ja": "翻訳を作成する" }, "editSubtitle": { "source": "Update translation values and metadata", @@ -177,7 +194,8 @@ ], "es": "Actualizar los valores de traducción y los metadatos", "fr-ca": "Mise à jour des valeurs de traduction et des métadonnées", - "ru": "Обновите значения перевода и метаданные." + "ru": "Обновите значения перевода и метаданные.", + "ja": "翻訳値とメタデータを更新する" }, "createSubtitle": { "source": "Add a new translation entry to your collection", @@ -187,7 +205,8 @@ ], "es": "Añade una nueva entrada de traducción a tu colección", "fr-ca": "Ajoutez une nouvelle entrée de traduction à votre collection", - "ru": "Добавьте новую запись о переводе в свою коллекцию." + "ru": "Добавьте новую запись о переводе в свою коллекцию.", + "ja": "コレクションに新しい翻訳エントリを追加する" }, "updateButton": { "source": "Update Translation", @@ -197,7 +216,8 @@ ], "es": "Actualizar traducción", "fr-ca": "Mise à jour de la traduction", - "ru": "Обновить перевод" + "ru": "Обновить перевод", + "ja": "翻訳を更新" }, "saveButton": { "source": "Save Translation", @@ -207,7 +227,8 @@ ], "es": "Guardar traducción", "fr-ca": "Enregistrer la traduction", - "ru": "Сохранить перевод" + "ru": "Сохранить перевод", + "ja": "翻訳を保存" }, "keyCopied": { "source": "Similar resource key copied", @@ -217,7 +238,8 @@ ], "es": "Clave de recurso similar copiada", "fr-ca": "Clé de ressource similaire copiée", - "ru": "Аналогичный ключ ресурса скопирован." + "ru": "Аналогичный ключ ресурса скопирован.", + "ja": "同様のリソースキーがコピーされました" }, "copyFailed": { "source": "Failed to copy", @@ -227,7 +249,8 @@ ], "es": "No se pudo copiar", "fr-ca": "Échec de la copie", - "ru": "Не удалось скопировать" + "ru": "Не удалось скопировать", + "ja": "コピーに失敗しました" }, "keyRequired": { "source": "Translation key is required", @@ -237,7 +260,8 @@ ], "es": "Se requiere clave de traducción", "fr-ca": "Une clé de traduction est requise.", - "ru": "Требуется ключ перевода" + "ru": "Требуется ключ перевода", + "ja": "翻訳キーが必要です" }, "keyPatternError": { "source": "Only letters, numbers, underscores, and hyphens allowed", @@ -247,6 +271,7 @@ ], "es": "Solo se permiten letras, números, guiones bajos y guiones.", "fr-ca": "Seules les lettres, les chiffres, les traits de soulignement et les tirets sont autorisés.", - "ru": "Разрешаются только буквы, цифры, подчеркивания и дефисы." + "ru": "Разрешаются только буквы, цифры, подчеркивания и дефисы.", + "ja": "使用できる文字は、英字、数字、アンダースコア、ハイフンのみです。" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json index 9275a43c..ea0ce627 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Información básica", "fr-ca": "Informations de base", - "ru": "Базовая информация" + "ru": "Базовая информация", + "ja": "基本情報" }, "changeLocation": { "source": "Change Location", @@ -17,7 +18,8 @@ ], "es": "Cambiar ubicación", "fr-ca": "Changer d'emplacement", - "ru": "Изменить местоположение" + "ru": "Изменить местоположение", + "ja": "場所を変更する" }, "otherLocales": { "source": "Other Locales", @@ -27,6 +29,7 @@ ], "es": "Otros lugares", "fr-ca": "Autres localités", - "ru": "Другие населенные пункты" + "ru": "Другие населенные пункты", + "ja": "その他の地域" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json index 0369adf3..6a1ed38b 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "1d0d6fe6f6c7d24f49c30c25806eeb00", "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", "status": "translated" + }, + "ja": { + "checksum": "1ea1bc9ca57838426391b54659ec0235", + "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", + "status": "translated" } }, "changeLocation": { @@ -37,6 +42,11 @@ "checksum": "86568c4f274d53ddbd5c0ca909838948", "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", "status": "translated" + }, + "ja": { + "checksum": "1b8bf802cd4b26490f8d9ea9033c1b10", + "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", + "status": "translated" } }, "otherLocales": { @@ -57,6 +67,11 @@ "checksum": "dae4ccfa3a748a5236612c9cb07dafac", "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", "status": "translated" + }, + "ja": { + "checksum": "5d191996e0ef3a0e2d45658ad517e8c1", + "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json index f80642bd..e8f4cc9e 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "edff72b736205b30a294a01077e603af", "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", "status": "translated" + }, + "ja": { + "checksum": "1198f0cc49d5b11d45c557bf14464b39", + "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", + "status": "translated" } }, "translationKey": { @@ -37,6 +42,11 @@ "checksum": "ad67eeaf79c8f882b6eb5cecf892322a", "baseChecksum": "482823ac52ef47827d3f18f259387366", "status": "translated" + }, + "ja": { + "checksum": "ad653346ad1c2bf5be218a569429dafa", + "baseChecksum": "482823ac52ef47827d3f18f259387366", + "status": "translated" } }, "keyHint": { @@ -57,6 +67,11 @@ "checksum": "a4309f56e3d6a57faf9ce6ba06d0af93", "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", "status": "translated" + }, + "ja": { + "checksum": "838d654d1155ba342ba1f05995265764", + "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", + "status": "translated" } }, "baseBadge": { @@ -77,6 +92,11 @@ "checksum": "131622d25aebdc15c77aa76c29aaf3ee", "baseChecksum": "095a1b43effec73955e31e790438de49", "status": "translated" + }, + "ja": { + "checksum": "f8ccaf5926eb52b58809ea1a6481bba2", + "baseChecksum": "095a1b43effec73955e31e790438de49", + "status": "translated" } }, "locationLabel": { @@ -97,6 +117,11 @@ "checksum": "2be7ebd9f9cac1aa575397e3d0b12b01", "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", "status": "translated" + }, + "ja": { + "checksum": "4c856befb87ffa52b70b527023d634d4", + "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", + "status": "translated" } }, "locationTabHint": { @@ -117,6 +142,11 @@ "checksum": "8278d26bbaa2462e777e00884338a749", "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", "status": "translated" + }, + "ja": { + "checksum": "16b48a57e9983e810366f033cd23422c", + "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", + "status": "translated" } }, "localeTranslationX": { @@ -137,6 +167,11 @@ "checksum": "820a9f699c16f046f7c80778834ec280", "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", "status": "translated" + }, + "ja": { + "checksum": "5325b66f18cc4eb7baa08543e6e50008", + "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", + "status": "translated" } }, "enterTranslationX": { @@ -157,6 +192,11 @@ "checksum": "684070f154dc864269f0fc71bf86ca36", "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", "status": "translated" + }, + "ja": { + "checksum": "f8df8394699f29d7ee64a8b57e40bb87", + "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", + "status": "translated" } }, "baseValueRequired": { @@ -177,6 +217,11 @@ "checksum": "c2f37cd200003c3621956195646dcf09", "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", "status": "translated" + }, + "ja": { + "checksum": "e1f23a927b1fe254bb5ce734809ce3f9", + "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", + "status": "translated" } }, "commentLabel": { @@ -197,6 +242,11 @@ "checksum": "7d9f639233478a28d6bbedf16807a142", "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", "status": "translated" + }, + "ja": { + "checksum": "6386c833772eb5bbd9b351816b8609ba", + "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", + "status": "translated" } }, "commentPlaceholder": { @@ -217,6 +267,11 @@ "checksum": "e045e9980e2ca2330e2d9809884de776", "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", "status": "translated" + }, + "ja": { + "checksum": "35cd45233f06236bdf391a00c1fded6b", + "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", + "status": "translated" } }, "commentHint": { @@ -237,6 +292,11 @@ "checksum": "1b226402bd8bdd4118f24dc87d0a6ea4", "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", "status": "translated" + }, + "ja": { + "checksum": "2e8eeeb380e984cdcccd9de325bdf498", + "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", + "status": "translated" } }, "otherLocalesToggleX": { @@ -257,6 +317,11 @@ "checksum": "0bd39f06176ffb76f44bfb101e822487", "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", "status": "translated" + }, + "ja": { + "checksum": "d67637567b1cf7744bbb08f2bb17901f", + "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", + "status": "translated" } }, "status": { @@ -277,6 +342,11 @@ "checksum": "7203f7a4ff564cb876e8db54c903dbfc", "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", "status": "translated" + }, + "ja": { + "checksum": "c70d256fb435a533d8ec2bbbcded1614", + "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", + "status": "translated" } }, "saving": { @@ -297,6 +367,11 @@ "checksum": "c15f152fce72c2e173576d2915651fd4", "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", "status": "translated" + }, + "ja": { + "checksum": "2a33020e5b56902e4a5609063f5428d7", + "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", + "status": "translated" } }, "editTitle": { @@ -317,6 +392,11 @@ "checksum": "420f0d3ce399f2011c6ed08db0966aeb", "baseChecksum": "305253475cc868103805068f45a90468", "status": "translated" + }, + "ja": { + "checksum": "68977133e365bb4aabaa769438bbd99b", + "baseChecksum": "305253475cc868103805068f45a90468", + "status": "translated" } }, "createTitle": { @@ -337,6 +417,11 @@ "checksum": "44dadb05d363f38d2b90a564e5aa5cde", "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", "status": "translated" + }, + "ja": { + "checksum": "171e5294db84907dcb90354c51dda198", + "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", + "status": "translated" } }, "editSubtitle": { @@ -357,6 +442,11 @@ "checksum": "87072ea6ecc477a8a303d165f40707fa", "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", "status": "translated" + }, + "ja": { + "checksum": "524e3e2cae828d746543516784ca8e59", + "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", + "status": "translated" } }, "createSubtitle": { @@ -377,6 +467,11 @@ "checksum": "b63e40a456682ec423e0093a38ca5325", "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", "status": "translated" + }, + "ja": { + "checksum": "9cff0b30b42d5a2e7c813a494c3cafd1", + "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", + "status": "translated" } }, "updateButton": { @@ -397,6 +492,11 @@ "checksum": "e3301cba3a8328585a5d8da49efabae7", "baseChecksum": "e8d2af23aa47989c080ffc7252646485", "status": "translated" + }, + "ja": { + "checksum": "1540d03eec10bf998ff2bb5e35a24073", + "baseChecksum": "e8d2af23aa47989c080ffc7252646485", + "status": "translated" } }, "saveButton": { @@ -417,6 +517,11 @@ "checksum": "56c170b801d292304f7d51848bbbb5b1", "baseChecksum": "d503198287eeadd483ae40abef48027a", "status": "translated" + }, + "ja": { + "checksum": "b0b41dcc457c3d6888856ad2784a5114", + "baseChecksum": "d503198287eeadd483ae40abef48027a", + "status": "translated" } }, "keyCopied": { @@ -437,6 +542,11 @@ "checksum": "daff2f6a15fc189a32b84e96842f40b8", "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", "status": "translated" + }, + "ja": { + "checksum": "c7bda30afa60f8e97716d6dd6733d296", + "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", + "status": "translated" } }, "copyFailed": { @@ -457,6 +567,11 @@ "checksum": "c63eb8553a973244e9929fb545ba6a68", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "ja": { + "checksum": "a3be8780485e9d6cb6ac1b61fe24e2cb", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "keyRequired": { @@ -477,6 +592,11 @@ "checksum": "2d03396b3c9738a779c930607eec3737", "baseChecksum": "a2f067165e800ad99feffdad954be4de", "status": "translated" + }, + "ja": { + "checksum": "77718f9d7783ee2e6cb1879121aed163", + "baseChecksum": "a2f067165e800ad99feffdad954be4de", + "status": "translated" } }, "keyPatternError": { @@ -497,6 +617,11 @@ "checksum": "9f5fa4fee28b782fab639f3433c9d2eb", "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", "status": "translated" + }, + "ja": { + "checksum": "1e1b5c2f4f5aed3d88fab601e91f55f7", + "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json index f8665960..e4439997 100644 --- a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Arrastrar para mover la traducción", "fr-ca": "Faites glisser pour déplacer la traduction", - "ru": "Перетащите, чтобы переместить перевод." + "ru": "Перетащите, чтобы переместить перевод.", + "ja": "ドラッグして翻訳を移動" }, "copyKeyAriaLabel": { "source": "Copy key", @@ -17,7 +18,8 @@ ], "es": "Copiar clave", "fr-ca": "Copier la clé", - "ru": "Копировать ключ" + "ru": "Копировать ключ", + "ja": "コピーキー" }, "hideCommentAriaLabel": { "source": "Hide comment", @@ -27,7 +29,8 @@ ], "es": "Ocultar comentario", "fr-ca": "Masquer le commentaire", - "ru": "Скрыть комментарий" + "ru": "Скрыть комментарий", + "ja": "コメントを非表示にする" }, "showCommentAriaLabel": { "source": "Show comment", @@ -37,7 +40,8 @@ ], "es": "Mostrar comentario", "fr-ca": "Afficher le commentaire", - "ru": "Показать комментарий" + "ru": "Показать комментарий", + "ja": "コメントを表示" }, "moreActionsAriaLabel": { "source": "More actions", @@ -47,7 +51,8 @@ ], "es": "Más acciones", "fr-ca": "Plus d'actions", - "ru": "Дополнительные действия" + "ru": "Дополнительные действия", + "ja": "その他の操作" }, "editAriaLabel": { "source": "Edit translation", @@ -57,7 +62,8 @@ ], "es": "Editar traducción", "fr-ca": "Modifier la traduction", - "ru": "Редактировать перевод" + "ru": "Редактировать перевод", + "ja": "翻訳を編集する" }, "translateAriaLabel": { "source": "Translate resource", @@ -67,7 +73,8 @@ ], "es": "Traducir recurso", "fr-ca": "ressource de traduction", - "ru": "Перевести ресурс" + "ru": "Перевести ресурс", + "ja": "リソースを翻訳する" }, "deleteAriaLabel": { "source": "Delete translation", @@ -77,7 +84,8 @@ ], "es": "Eliminar traducción", "fr-ca": "Supprimer la traduction", - "ru": "Удалить перевод" + "ru": "Удалить перевод", + "ja": "翻訳を削除" }, "noStatuses": { "source": "No statuses", @@ -87,6 +95,7 @@ ], "es": "Sin estados", "fr-ca": "Aucun statut", - "ru": "Нет статусов" + "ru": "Нет статусов", + "ja": "ステータスなし" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json index d76adbac..6d444a3e 100644 --- a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "2128d13dfe14d26e4f3fcf78b43f2953", "baseChecksum": "68124efca03350fd7d6da755400d15c0", "status": "translated" + }, + "ja": { + "checksum": "b651e01207671b538231c80fa0d49546", + "baseChecksum": "68124efca03350fd7d6da755400d15c0", + "status": "translated" } }, "copyKeyAriaLabel": { @@ -37,6 +42,11 @@ "checksum": "0825c26b70c6f32db71b9705d16f7382", "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", "status": "translated" + }, + "ja": { + "checksum": "40388375ca056587f52bebf7aa1c6f01", + "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", + "status": "translated" } }, "hideCommentAriaLabel": { @@ -57,6 +67,11 @@ "checksum": "d2578e5524e6d239d2fd4c13454080ab", "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", "status": "translated" + }, + "ja": { + "checksum": "28da42e28fcfb4002d34b713612753d4", + "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", + "status": "translated" } }, "showCommentAriaLabel": { @@ -77,6 +92,11 @@ "checksum": "318ab77d48ee4f17a9e63b35b7d22132", "baseChecksum": "ba109df70b5131f0f40f1726498c620e", "status": "translated" + }, + "ja": { + "checksum": "7e7a3bd986703ee6b48bfc76a415f9da", + "baseChecksum": "ba109df70b5131f0f40f1726498c620e", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -97,6 +117,11 @@ "checksum": "480a85fa79cb183ea54cfd5c53e52888", "baseChecksum": "284716247b12b363fd6b6a71bff0918e", "status": "translated" + }, + "ja": { + "checksum": "e334d8acd386b855251c8e086546d3d4", + "baseChecksum": "284716247b12b363fd6b6a71bff0918e", + "status": "translated" } }, "editAriaLabel": { @@ -117,6 +142,11 @@ "checksum": "420f0d3ce399f2011c6ed08db0966aeb", "baseChecksum": "a7f6326fc128712ffaee83351ea67525", "status": "translated" + }, + "ja": { + "checksum": "68977133e365bb4aabaa769438bbd99b", + "baseChecksum": "a7f6326fc128712ffaee83351ea67525", + "status": "translated" } }, "translateAriaLabel": { @@ -137,6 +167,11 @@ "checksum": "3f22abe764ae7932bee7be351c1daa11", "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", "status": "translated" + }, + "ja": { + "checksum": "87d4481c4eab0e8f22b481081f8f5828", + "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", + "status": "translated" } }, "deleteAriaLabel": { @@ -157,6 +192,11 @@ "checksum": "9cdcd35d38e395a10dc8fd5021239714", "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", "status": "translated" + }, + "ja": { + "checksum": "ab1412c6f45b4215c15f900b24c7948e", + "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", + "status": "translated" } }, "noStatuses": { @@ -177,6 +217,11 @@ "checksum": "d949136208fa1d59d72e8fa04becd3bb", "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", "status": "translated" + }, + "ja": { + "checksum": "ba459d648257e215392475f073532d54", + "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/resource_entries.json b/apps/tracker/src/i18n/browser/translationList/resource_entries.json index 3d3b8dfc..379f1518 100644 --- a/apps/tracker/src/i18n/browser/translationList/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationList/resource_entries.json @@ -7,6 +7,7 @@ ], "es": "Lista de traducciones", "fr-ca": "Liste de traductions", - "ru": "Список переводов" + "ru": "Список переводов", + "ja": "翻訳リスト" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json index 89278fd0..e0c9d102 100644 --- a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "38cbe2fba73233baff4d365eefb00a4a", "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", "status": "translated" + }, + "ja": { + "checksum": "a7229f7cacfc120fcd463a552a0367bb", + "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json index 81033d5f..8364f3d9 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json @@ -7,6 +7,7 @@ ], "es": "Buscar traducciones", "fr-ca": "Recherche de traductions", - "ru": "Поиск переводов" + "ru": "Поиск переводов", + "ja": "翻訳を検索" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json index efcbff2e..fb0fd721 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "3970fa93ce20322f721cdc90ddc0ec39", "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", "status": "translated" + }, + "ja": { + "checksum": "80573c73a72040dad26c737a0c300ddf", + "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/resource_entries.json b/apps/tracker/src/i18n/collections/card/resource_entries.json index 8bb69d66..6683e3a3 100644 --- a/apps/tracker/src/i18n/collections/card/resource_entries.json +++ b/apps/tracker/src/i18n/collections/card/resource_entries.json @@ -8,7 +8,8 @@ ], "es": "Editar colección", "fr-ca": "Modifier la collection", - "ru": "Редактировать коллекцию" + "ru": "Редактировать коллекцию", + "ja": "コレクションを編集" }, "delete": { "source": "Delete collection", @@ -19,7 +20,8 @@ ], "es": "Eliminar colección", "fr-ca": "Supprimer la collection", - "ru": "Удалить коллекцию" + "ru": "Удалить коллекцию", + "ja": "コレクションを削除" }, "moreActionsAriaLabel": { "source": "More actions for collection", @@ -29,6 +31,7 @@ ], "es": "Más acciones para la recolección", "fr-ca": "Plus d'actions pour la collecte", - "ru": "Дополнительные действия для сбора" + "ru": "Дополнительные действия для сбора", + "ja": "収集のためのその他のアクション" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/tracker_meta.json b/apps/tracker/src/i18n/collections/card/tracker_meta.json index 5e8f09d0..a9876862 100644 --- a/apps/tracker/src/i18n/collections/card/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/card/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "fc542666f0b02b7b83ef1c93f694726c", "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", "status": "translated" + }, + "ja": { + "checksum": "62c71b3f7f45a8b6da35ef6a135cc061", + "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", + "status": "translated" } }, "delete": { @@ -37,6 +42,11 @@ "checksum": "0f440420a40b59ebe5a8eae593b4bc31", "baseChecksum": "611307b7abf62c8f6ffc374701393f29", "status": "translated" + }, + "ja": { + "checksum": "f87f76e7fdb4ade8d4a1a42261f66690", + "baseChecksum": "611307b7abf62c8f6ffc374701393f29", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -57,6 +67,11 @@ "checksum": "9909138ddecc5b4abe148b463dc91387", "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", "status": "translated" + }, + "ja": { + "checksum": "e0313b185e9d3b4110e78b7f93aa09d6", + "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json index 3e7173c2..ebfe62dc 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json @@ -4,6 +4,7 @@ "comment": "Dialog title when creating a new collection", "es": "Crear Colección", "fr-ca": "Créer une Collection", - "ru": "Создать коллекцию" + "ru": "Создать коллекцию", + "ja": "コレクションを作成する" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json index 9fb09620..5825a65a 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "f2758a5f11d0f14b901f83f75ca4b178", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "translated" + }, + "ja": { + "checksum": "5cc609a13047f3b1cb6388fd6e9583c1", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json index e7c3a48b..5634933e 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json @@ -4,13 +4,15 @@ "comment": "Confirmation dialog title when deleting a collection", "es": "Eliminar Colección", "fr-ca": "Supprimer la Collection", - "ru": "Удалить коллекцию" + "ru": "Удалить коллекцию", + "ja": "コレクションを削除" }, "message": { "source": "Are you sure you want to delete {name}?", "comment": "Confirmation message with collection name placeholder", "es": "¿Estás seguro de que deseas eliminar {name}?", "fr-ca": "Êtes-vous sûr de vouloir supprimer {name}?", - "ru": "Вы уверены, что хотите удалить {name}?" + "ru": "Вы уверены, что хотите удалить {name}?", + "ja": "{name} を削除してもよろしいですか?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json index 2f9c72b6..13d07c10 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "0f440420a40b59ebe5a8eae593b4bc31", "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", "status": "translated" + }, + "ja": { + "checksum": "f87f76e7fdb4ade8d4a1a42261f66690", + "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", + "status": "translated" } }, "message": { @@ -37,6 +42,11 @@ "checksum": "8e9636f32d40af6bd958012fed558f26", "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", "status": "translated" + }, + "ja": { + "checksum": "cf8190775fd35a0a75bb78b90a8a0847", + "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json index f9654696..eedd3aaf 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json @@ -4,6 +4,7 @@ "comment": "Dialog title when editing an existing collection", "es": "Editar Colección", "fr-ca": "Modifier la Collection", - "ru": "Редактировать коллекцию" + "ru": "Редактировать коллекцию", + "ja": "コレクションを編集" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json index 902793e5..79cecf47 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "fc542666f0b02b7b83ef1c93f694726c", "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", "status": "translated" + }, + "ja": { + "checksum": "62c71b3f7f45a8b6da35ef6a135cc061", + "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/resource_entries.json index 93fa8847..dbce5966 100644 --- a/apps/tracker/src/i18n/collections/dialog/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/resource_entries.json @@ -4,75 +4,86 @@ "comment": "Label for collection name input field", "es": "Nombre de la Colección", "fr-ca": "Nom de la Collection", - "ru": "Название коллекции" + "ru": "Название коллекции", + "ja": "コレクション名" }, "namePlaceholder": { "source": "e.g., my-app-i18n", "comment": "Placeholder text for collection name input", "es": "ej., mi-app-i18n", "fr-ca": "p. ex., mon-app-i18n", - "ru": "например, my-app-i18n" + "ru": "например, my-app-i18n", + "ja": "例:my-app-i18n" }, "nameRequired": { "source": "Collection name is required", "comment": "Error message when name is required", "es": "El nombre de la colección es obligatorio", "fr-ca": "Le nom de la collection est requis", - "ru": "Название коллекции обязательно для указания." + "ru": "Название коллекции обязательно для указания.", + "ja": "コレクション名は必須です。" }, "folderLabel": { "source": "Translations Folder", "comment": "Label for translations folder input field", "es": "Carpeta de Traducciones", "fr-ca": "Dossier de Traductions", - "ru": "Папка переводов" + "ru": "Папка переводов", + "ja": "翻訳フォルダ" }, "folderPlaceholder": { "source": "e.g., ./src/assets/i18n", "comment": "Placeholder text for folder path input", "es": "ej., ./src/assets/i18n", "fr-ca": "p. ex., ./src/assets/i18n", - "ru": "например, ./src/assets/i18n" + "ru": "например, ./src/assets/i18n", + "ja": "例:./src/assets/i18n" }, "folderRequired": { "source": "Translations folder is required", "comment": "Error message when folder is required", "es": "La carpeta de traducciones es obligatoria", "fr-ca": "Le dossier de traductions est requis", - "ru": "Необходима папка «Переводы»." + "ru": "Необходима папка «Переводы».", + "ja": "翻訳フォルダが必要です" }, "localesLabel": { "source": "Locales (Optional)", "comment": "Label for locales input field", "es": "Idiomas (Opcional)", "fr-ca": "Langues (Optionnel)", - "ru": "Локали (необязательно)" + "ru": "Локали (необязательно)", + "ja": "ロケール(オプション)" }, "localesHint": { "source": "Comma-separated list of locale codes. Leave empty to use global config.", "comment": "Hint text for locales input", "es": "Lista de códigos de idioma separados por comas. Dejar vacío para usar la configuración global.", "fr-ca": "Liste de codes de langue séparés par des virgules. Laisser vide pour utiliser la configuration globale.", - "ru": "Список кодов локали, разделённых запятыми. Оставьте пустым, чтобы использовать глобальную конфигурацию." + "ru": "Список кодов локали, разделённых запятыми. Оставьте пустым, чтобы использовать глобальную конфигурацию.", + "ja": "カンマ区切りのロケールコードのリスト。グローバル設定を使用する場合は空欄のままにしてください。" }, "createButton": { "source": "Create", "comment": "Create button text in create mode", "es": "Crear", "fr-ca": "Créer", - "ru": "Создавать" + "ru": "Создавать", + "ja": "作成する" }, "localesPlaceholder": { "source": "e.g., en, fr, es", "comment": "Placeholder text for locales input", "es": "ej., en, fr, es", "fr-ca": "p. ex., en, fr, es", - "ru": "например, en, fr, es" + "ru": "например, en, fr, es", + "ja": "例:en、fr、es" }, "createTitle": { "source": "Create Collection", "es": "Crear Colección", "fr-ca": "Créer une Collection", - "ru": "Создать коллекцию" + "ru": "Создать коллекцию", + "ja": "コレクションを作成する" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json index 36e4b7b1..90c2a83c 100644 --- a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "f413c774d4c7f12fa4a133e70df40da7", "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", "status": "translated" + }, + "ja": { + "checksum": "b83a54fe9204ea7d0e91875385dea548", + "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", + "status": "translated" } }, "namePlaceholder": { @@ -37,6 +42,11 @@ "checksum": "905b562f5dbea9c60fe502f92ef9f7ba", "baseChecksum": "e02e22429e66e242217bdbbde92eb081", "status": "translated" + }, + "ja": { + "checksum": "5eae9cb021611f848df6e197f9b888dd", + "baseChecksum": "e02e22429e66e242217bdbbde92eb081", + "status": "translated" } }, "nameRequired": { @@ -57,6 +67,11 @@ "checksum": "3ddda324919658f2bbbcc76b75f9aa18", "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", "status": "translated" + }, + "ja": { + "checksum": "3875d242cda6eb205d6c87c2bd024d64", + "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", + "status": "translated" } }, "folderLabel": { @@ -77,6 +92,11 @@ "checksum": "f69386fcfa4438d5c16063cda4e553c0", "baseChecksum": "cec5a0934dba090c47144036ce5101ec", "status": "translated" + }, + "ja": { + "checksum": "b4347be66c4ffab0558281d9700148c7", + "baseChecksum": "cec5a0934dba090c47144036ce5101ec", + "status": "translated" } }, "folderPlaceholder": { @@ -97,6 +117,11 @@ "checksum": "2054bcc0a9d2e4bd618a1940a77b9841", "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", "status": "translated" + }, + "ja": { + "checksum": "8eb636b3b4cec411e91e81203fd101d5", + "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", + "status": "translated" } }, "folderRequired": { @@ -117,6 +142,11 @@ "checksum": "d19d7edeff0e11f5d558af2888567da0", "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", "status": "translated" + }, + "ja": { + "checksum": "9f4489246407c788ec401a626ca46cd9", + "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", + "status": "translated" } }, "localesLabel": { @@ -137,6 +167,11 @@ "checksum": "51e92ed44afc8b2916ff528507039a05", "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", "status": "translated" + }, + "ja": { + "checksum": "79905421ba1e98994f4cb50c79665120", + "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", + "status": "translated" } }, "localesHint": { @@ -157,6 +192,11 @@ "checksum": "8378c4bbbbcfcf9461b193618fa29297", "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", "status": "translated" + }, + "ja": { + "checksum": "e2f6d72247eff02a33466effbeae30b5", + "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", + "status": "translated" } }, "createButton": { @@ -177,6 +217,11 @@ "checksum": "a0100b2077f85b2b147c6a93ee953756", "baseChecksum": "686e697538050e4664636337cc3b834f", "status": "translated" + }, + "ja": { + "checksum": "3af36172e4e95863b12b4734bc2472ed", + "baseChecksum": "686e697538050e4664636337cc3b834f", + "status": "translated" } }, "localesPlaceholder": { @@ -197,6 +242,11 @@ "checksum": "7ffe6d90c1ccf4183b4c42d3aef15dee", "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", "status": "translated" + }, + "ja": { + "checksum": "de007e952695fb6243b28a8751f94f9e", + "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", + "status": "translated" } }, "createTitle": { @@ -217,6 +267,11 @@ "checksum": "f2758a5f11d0f14b901f83f75ca4b178", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "translated" + }, + "ja": { + "checksum": "5cc609a13047f3b1cb6388fd6e9583c1", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json index 39de3015..5bf88a25 100644 --- a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json +++ b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json @@ -4,13 +4,15 @@ "comment": "Message shown when user has no collections", "es": "Aún no hay colecciones", "fr-ca": "Aucune collection pour l'instant", - "ru": "Коллекций пока нет." + "ru": "Коллекций пока нет.", + "ja": "まだコレクションはありません" }, "cta": { "source": "Create your first collection", "comment": "Call-to-action button in empty state to create first collection", "es": "Crea tu primera colección", "fr-ca": "Créez votre première collection", - "ru": "Создайте свою первую коллекцию" + "ru": "Создайте свою первую коллекцию", + "ja": "最初のコレクションを作成する" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json index 233cbcfd..2c03d49d 100644 --- a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "17977a7157daae9f845b5147d189ea2e", "baseChecksum": "be7253840e621510212e49959ed1c8ad", "status": "translated" + }, + "ja": { + "checksum": "cefcc572a717a39f5379fbc5ac9805b6", + "baseChecksum": "be7253840e621510212e49959ed1c8ad", + "status": "translated" } }, "cta": { @@ -37,6 +42,11 @@ "checksum": "e3c8236d95bb0ee4367024ec8f2e5b46", "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", "status": "translated" + }, + "ja": { + "checksum": "0e7020409a0670e4d9055ac48b0f5f6f", + "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json index aa77ea2e..edf556f8 100644 --- a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json @@ -4,6 +4,7 @@ "comment": "Validation error for required fields", "es": "Este campo es obligatorio", "fr-ca": "Ce champ est requis", - "ru": "Это поле обязательно к заполнению" + "ru": "Это поле обязательно к заполнению", + "ja": "この項目は必須です" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json index 2775dc78..60777061 100644 --- a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "0216d22927cb8af67c93b6e665c6d2a6", "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", "status": "translated" + }, + "ja": { + "checksum": "a95cac41d531c7f117cf634dd6333166", + "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/resource_entries.json b/apps/tracker/src/i18n/collections/form/resource_entries.json index e715e0b4..c060ebf5 100644 --- a/apps/tracker/src/i18n/collections/form/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/resource_entries.json @@ -4,27 +4,31 @@ "comment": "Label for collection name input field", "es": "Nombre de la colección", "fr-ca": "Nom de la collection", - "ru": "Название коллекции" + "ru": "Название коллекции", + "ja": "コレクション名" }, "translationsFolder": { "source": "Translations folder", "comment": "Label for translations folder path input field", "es": "Carpeta de traducciones", "fr-ca": "Dossier de traductions", - "ru": "Папка «Переводы»" + "ru": "Папка «Переводы»", + "ja": "翻訳フォルダ" }, "locales": { "source": "Locales", "comment": "Label for locales input field", "es": "Idiomas", "fr-ca": "Langues", - "ru": "Локалы" + "ru": "Локалы", + "ja": "地域" }, "localesPlaceholder": { "source": "Comma-separated (e.g., en,fr,es)", "comment": "Placeholder text showing format for locale input", "es": "Separados por comas (ej., en,fr,es)", "fr-ca": "Séparés par des virgules (p. ex., en,fr,es)", - "ru": "Через запятую (например, en,fr,es)" + "ru": "Через запятую (например, en,fr,es)", + "ja": "カンマ区切り (例: en、fr、es)" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/tracker_meta.json b/apps/tracker/src/i18n/collections/form/tracker_meta.json index 16704d16..1f7c21a6 100644 --- a/apps/tracker/src/i18n/collections/form/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "f413c774d4c7f12fa4a133e70df40da7", "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", "status": "translated" + }, + "ja": { + "checksum": "b83a54fe9204ea7d0e91875385dea548", + "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", + "status": "translated" } }, "translationsFolder": { @@ -37,6 +42,11 @@ "checksum": "707cdce5f3be49e5ac8ab4d6a87bb519", "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", "status": "translated" + }, + "ja": { + "checksum": "b4347be66c4ffab0558281d9700148c7", + "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", + "status": "translated" } }, "locales": { @@ -57,6 +67,11 @@ "checksum": "9178af860bce312048c5866c8f386f00", "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", "status": "translated" + }, + "ja": { + "checksum": "4d7d4410dab75a44ad27b57e84dc1aac", + "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", + "status": "translated" } }, "localesPlaceholder": { @@ -77,6 +92,11 @@ "checksum": "dab66c93ccf68c9c3c50bb597c026753", "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", "status": "translated" + }, + "ja": { + "checksum": "cb103d2acc95ffab118d3cfe6ed11df3", + "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/resource_entries.json b/apps/tracker/src/i18n/collections/resource_entries.json index 1f90757d..724a476a 100644 --- a/apps/tracker/src/i18n/collections/resource_entries.json +++ b/apps/tracker/src/i18n/collections/resource_entries.json @@ -4,13 +4,15 @@ "comment": "Page title for collections management dashboard", "es": "Colecciones", "fr-ca": "Collections", - "ru": "Коллекции" + "ru": "Коллекции", + "ja": "コレクション" }, "addButton": { "source": "Add Collection", "comment": "Button text to open dialog for creating a new collection", "es": "Agregar Colección", "fr-ca": "Ajouter une Collection", - "ru": "Добавить коллекцию" + "ru": "Добавить коллекцию", + "ja": "コレクションを追加" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/resource_entries.json b/apps/tracker/src/i18n/collections/toast/resource_entries.json index 612fcb2a..d0db5664 100644 --- a/apps/tracker/src/i18n/collections/toast/resource_entries.json +++ b/apps/tracker/src/i18n/collections/toast/resource_entries.json @@ -4,28 +4,32 @@ "comment": "Success message after creating a collection", "es": "Colección creada exitosamente", "fr-ca": "Collection créée avec succès", - "ru": "Коллекция успешно создана." + "ru": "Коллекция успешно создана.", + "ja": "コレクションが正常に作成されました" }, "updated": { "source": "Collection updated successfully", "comment": "Success message after editing a collection", "es": "Colección actualizada exitosamente", "fr-ca": "Collection mise à jour avec succès", - "ru": "Коллекция успешно обновлена." + "ru": "Коллекция успешно обновлена.", + "ja": "コレクションが正常に更新されました" }, "deleted": { "source": "Collection deleted successfully", "comment": "Success message after deleting a collection", "es": "Colección eliminada exitosamente", "fr-ca": "Collection supprimée avec succès", - "ru": "Коллекция успешно удалена." + "ru": "Коллекция успешно удалена.", + "ja": "コレクションは正常に削除されました" }, "error": { "source": "An error occurred. Please try again.", "comment": "Generic error message for failed operations", "es": "Ocurrió un error. Por favor, inténtalo de nuevo.", "fr-ca": "Une erreur s'est produite. Veuillez réessayer.", - "ru": "Произошла ошибка. Пожалуйста, попробуйте еще раз." + "ru": "Произошла ошибка. Пожалуйста, попробуйте еще раз.", + "ja": "エラーが発生しました。もう一度お試しください。" }, "loadFailed": { "source": "Failed to load collections", @@ -35,7 +39,8 @@ ], "es": "No se pudieron cargar las colecciones", "fr-ca": "Échec du chargement des collections", - "ru": "Не удалось загрузить коллекции." + "ru": "Не удалось загрузить коллекции.", + "ja": "コレクションの読み込みに失敗しました" }, "createFailed": { "source": "Failed to create collection", @@ -45,7 +50,8 @@ ], "es": "No se pudo crear la colección", "fr-ca": "Impossible de créer la collection", - "ru": "Не удалось создать коллекцию." + "ru": "Не удалось создать коллекцию.", + "ja": "コレクションの作成に失敗しました" }, "updateFailed": { "source": "Failed to update collection", @@ -55,7 +61,8 @@ ], "es": "No se pudo actualizar la colección", "fr-ca": "Échec de la mise à jour de la collection", - "ru": "Не удалось обновить коллекцию." + "ru": "Не удалось обновить коллекцию.", + "ja": "コレクションの更新に失敗しました" }, "deleteFailed": { "source": "Failed to delete collection", @@ -65,6 +72,7 @@ ], "es": "No se pudo eliminar la colección", "fr-ca": "Échec de la suppression de la collection", - "ru": "Не удалось удалить коллекцию." + "ru": "Не удалось удалить коллекцию.", + "ja": "コレクションの削除に失敗しました" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/tracker_meta.json b/apps/tracker/src/i18n/collections/toast/tracker_meta.json index 84386d9a..c65f508f 100644 --- a/apps/tracker/src/i18n/collections/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/toast/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "a2c6e00d4666f43c732eac744c3a6de4", "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", "status": "translated" + }, + "ja": { + "checksum": "b650f261e0a6872a640c8c10c93bf8a0", + "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", + "status": "translated" } }, "updated": { @@ -37,6 +42,11 @@ "checksum": "9416053d46ee2878a0dd68a37cc8315e", "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", "status": "translated" + }, + "ja": { + "checksum": "daaf1ba1d63c59b9160997072e0fbc55", + "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", + "status": "translated" } }, "deleted": { @@ -57,6 +67,11 @@ "checksum": "fa821a55c33c9ccfe0abde0c039d98e3", "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", "status": "translated" + }, + "ja": { + "checksum": "5c93177892f1b2948ecf5b4d2dab876a", + "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", + "status": "translated" } }, "error": { @@ -77,6 +92,11 @@ "checksum": "01480858a5404da77d5aa893ea7926f5", "baseChecksum": "b028ccd04708b8c3c7722956e149a718", "status": "translated" + }, + "ja": { + "checksum": "bdaf2e4efb9178f2fb916518f06e7326", + "baseChecksum": "b028ccd04708b8c3c7722956e149a718", + "status": "translated" } }, "loadFailed": { @@ -97,6 +117,11 @@ "checksum": "9f7cd6b4931a75e4235408e7bdfdb494", "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", "status": "translated" + }, + "ja": { + "checksum": "f46e0f86b255430967d68a5d391b6106", + "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", + "status": "translated" } }, "createFailed": { @@ -117,6 +142,11 @@ "checksum": "f73849f7f695c0b7fffeafec0b211e23", "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", "status": "translated" + }, + "ja": { + "checksum": "513eda515bff76ffcd9df10bfdf79194", + "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", + "status": "translated" } }, "updateFailed": { @@ -137,6 +167,11 @@ "checksum": "6c6688811503d773644f8d390ddf8b32", "baseChecksum": "af9daa27991b1108df98277da9d19a38", "status": "translated" + }, + "ja": { + "checksum": "977fd75103172c06892875afadf0fe52", + "baseChecksum": "af9daa27991b1108df98277da9d19a38", + "status": "translated" } }, "deleteFailed": { @@ -157,6 +192,11 @@ "checksum": "427da9de524038ca6370fac8b9fa22c9", "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", "status": "translated" + }, + "ja": { + "checksum": "5ad4e477c870d876c22be03b8c5b1beb", + "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/tracker_meta.json b/apps/tracker/src/i18n/collections/tracker_meta.json index eb4db9a6..6c9f693a 100644 --- a/apps/tracker/src/i18n/collections/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "306e41fce3bc9de4911363df9a80a5ba", "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", "status": "translated" + }, + "ja": { + "checksum": "695b82464aee401b828677a0100f6cba", + "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", + "status": "translated" } }, "addButton": { @@ -37,6 +42,11 @@ "checksum": "8e290a022048d2cf84f456d1170ce6aa", "baseChecksum": "10ac958235fe83036f8e5244454f7c78", "status": "translated" + }, + "ja": { + "checksum": "0404adec384698dfde5bf4e317661742", + "baseChecksum": "10ac958235fe83036f8e5244454f7c78", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/resource_entries.json b/apps/tracker/src/i18n/common/actions/resource_entries.json index 89bfe7af..239fc1bf 100644 --- a/apps/tracker/src/i18n/common/actions/resource_entries.json +++ b/apps/tracker/src/i18n/common/actions/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Editar", "fr-ca": "Modifier", - "ru": "Редактировать" + "ru": "Редактировать", + "ja": "編集" }, "delete": { "source": "Delete", @@ -17,7 +18,8 @@ ], "es": "Eliminar", "fr-ca": "Supprimer", - "ru": "Удалить" + "ru": "Удалить", + "ja": "消去" }, "retry": { "source": "Retry", @@ -27,40 +29,46 @@ ], "es": "Reintentar", "fr-ca": "Réessayer", - "ru": "Повторить попытку" + "ru": "Повторить попытку", + "ja": "リトライ" }, "cancel": { "source": "Cancel", "comment": "Text on a button to cancel whatever opration the user was about to do", "es": "Cancelar", "fr-ca": "Annuler", - "ru": "Отмена" + "ru": "Отмена", + "ja": "キャンセル" }, "ok": { "source": "OK", "es": "OK", "fr-ca": "OK", - "ru": "ХОРОШО" + "ru": "ХОРОШО", + "ja": "わかりました" }, "save": { "source": "Save", "comment": "Save button text in edit mode", "es": "Guardar", "fr-ca": "Enregistrer", - "ru": "Сохранять" + "ru": "Сохранять", + "ja": "保存" }, "back": { "source": "Back", "es": "Volver", "fr-ca": "Retour", - "ru": "Назад" + "ru": "Назад", + "ja": "戻る" }, "clickToCopy": { "source": "click to copy", "comment": "Message to user that item can be copied to clipboard", "es": "clic para copiar", "fr-ca": "cliquer pour copier", - "ru": "нажмите, чтобы скопировать" + "ru": "нажмите, чтобы скопировать", + "ja": "クリックしてコピー" }, "move": { "source": "Move", @@ -70,7 +78,8 @@ ], "es": "Mover", "fr-ca": "Déplacer", - "ru": "Двигаться" + "ru": "Двигаться", + "ja": "動く" }, "translate": { "source": "Translate", @@ -80,7 +89,8 @@ ], "es": "Traducir", "fr-ca": "Traduire", - "ru": "Переводить" + "ru": "Переводить", + "ja": "翻訳する" }, "selectAll": { "source": "Select All", @@ -90,7 +100,8 @@ ], "es": "Seleccionar todo", "fr-ca": "Sélectionner tout", - "ru": "Выбрать все" + "ru": "Выбрать все", + "ja": "すべて選択" }, "clearAll": { "source": "Clear All", @@ -100,7 +111,8 @@ ], "es": "Borrar todo", "fr-ca": "Effacer tout", - "ru": "Очистить все" + "ru": "Очистить все", + "ja": "すべてクリア" }, "close": { "source": "Close", @@ -110,7 +122,8 @@ ], "es": "Cerca", "fr-ca": "Fermer", - "ru": "Закрывать" + "ru": "Закрывать", + "ja": "近い" }, "dismiss": { "source": "Dismiss", @@ -120,6 +133,7 @@ ], "es": "Despedir", "fr-ca": "Rejeter", - "ru": "Увольнять" + "ru": "Увольнять", + "ja": "却下する" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/tracker_meta.json b/apps/tracker/src/i18n/common/actions/tracker_meta.json index db1014c7..33c753cb 100644 --- a/apps/tracker/src/i18n/common/actions/tracker_meta.json +++ b/apps/tracker/src/i18n/common/actions/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "1706282c5244c8e988f76c5eb939b754", "baseChecksum": "7dce122004969d56ae2e0245cb754d35", "status": "translated" + }, + "ja": { + "checksum": "7578865c9404415b6a4e2d6d3294f590", + "baseChecksum": "7dce122004969d56ae2e0245cb754d35", + "status": "translated" } }, "delete": { @@ -37,6 +42,11 @@ "checksum": "ed2bbfbc53d83d3ad81f7fd6485ac6e8", "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", "status": "translated" + }, + "ja": { + "checksum": "e3fdb571cbafd9894cb80a2a2c95f342", + "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", + "status": "translated" } }, "retry": { @@ -57,6 +67,11 @@ "checksum": "e791d60a16de757b90bb404911991ea4", "baseChecksum": "6327b4e59f58137083214a1fec358855", "status": "translated" + }, + "ja": { + "checksum": "a19b46385fb285a0c55d8e1e2f6e8ce3", + "baseChecksum": "6327b4e59f58137083214a1fec358855", + "status": "translated" } }, "cancel": { @@ -77,6 +92,11 @@ "checksum": "987b33c664dce148f1d17f6eb9ab3e79", "baseChecksum": "ea4788705e6873b424c65e91c2846b19", "status": "translated" + }, + "ja": { + "checksum": "6ef34982969f60212f6f2565454d7beb", + "baseChecksum": "ea4788705e6873b424c65e91c2846b19", + "status": "translated" } }, "ok": { @@ -97,6 +117,11 @@ "checksum": "3094fd4ad571cc9b65de310d2164b5b0", "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", "status": "translated" + }, + "ja": { + "checksum": "ad7a978ba733087c977b4edbda8ace9a", + "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", + "status": "translated" } }, "save": { @@ -117,6 +142,11 @@ "checksum": "9ef62ebfb3ea5b3a1a4901f15142efae", "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", "status": "translated" + }, + "ja": { + "checksum": "be5fbbe34ce9979bfb6576d9eddc5612", + "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", + "status": "translated" } }, "back": { @@ -137,6 +167,11 @@ "checksum": "2b0b0225a86bb67048840d3da9b899bc", "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", "status": "translated" + }, + "ja": { + "checksum": "4a622f127baeae041b4eef6a8884069f", + "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", + "status": "translated" } }, "clickToCopy": { @@ -157,6 +192,11 @@ "checksum": "e62609fc5e015317c78fbbf228b9a778", "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", "status": "translated" + }, + "ja": { + "checksum": "721b61c6ae82cf3d023ceb55d7dd9c7e", + "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", + "status": "translated" } }, "move": { @@ -177,6 +217,11 @@ "checksum": "1ce26faf65044371b40bd95cbb5c3a69", "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", "status": "translated" + }, + "ja": { + "checksum": "db9c1f7b49105fffe513bdc9cbda744f", + "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", + "status": "translated" } }, "translate": { @@ -197,6 +242,11 @@ "checksum": "f80abd27695cafd474055fcf84d161c4", "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", "status": "translated" + }, + "ja": { + "checksum": "c3a5d2da2ad33221043d5a6992f5f409", + "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", + "status": "translated" } }, "selectAll": { @@ -217,6 +267,11 @@ "checksum": "4d09821e5f0ae6b496ac3211da10f88b", "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", "status": "translated" + }, + "ja": { + "checksum": "ab0e66f073d4d8aff7c49ff0bf2437a6", + "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", + "status": "translated" } }, "clearAll": { @@ -237,6 +292,11 @@ "checksum": "60e71159f846d33df09e27565f81dea6", "baseChecksum": "e77fef0167598bb39846637ac3915f4e", "status": "translated" + }, + "ja": { + "checksum": "ec00a6332860c1cdbe7e5307d05acfdd", + "baseChecksum": "e77fef0167598bb39846637ac3915f4e", + "status": "translated" } }, "close": { @@ -257,6 +317,11 @@ "checksum": "08969efbfd249fd88df5db4464118740", "baseChecksum": "d3d2e617335f08df83599665eef8a418", "status": "translated" + }, + "ja": { + "checksum": "3dd21923aef0993456c21da79102b8e1", + "baseChecksum": "d3d2e617335f08df83599665eef8a418", + "status": "translated" } }, "dismiss": { @@ -277,6 +342,11 @@ "checksum": "9e6d70043b0014003f34e770dea3985b", "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", "status": "translated" + }, + "ja": { + "checksum": "0d53c36ecff639eae2f8283109fa1f3f", + "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/resource_entries.json b/apps/tracker/src/i18n/data/resource_entries.json index a359e8de..06a192b0 100644 --- a/apps/tracker/src/i18n/data/resource_entries.json +++ b/apps/tracker/src/i18n/data/resource_entries.json @@ -7,6 +7,7 @@ ], "es": "Cargando", "fr-ca": "Chargement", - "ru": "Загрузка" + "ru": "Загрузка", + "ja": "ロード中" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/tracker_meta.json b/apps/tracker/src/i18n/data/tracker_meta.json index f1776253..c867f428 100644 --- a/apps/tracker/src/i18n/data/tracker_meta.json +++ b/apps/tracker/src/i18n/data/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "2cadf42b2a044fe2b3c8e7574d845867", "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", "status": "translated" + }, + "ja": { + "checksum": "8c00614cba8a72708e294877d21408da", + "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/resource_entries.json b/apps/tracker/src/i18n/header/resource_entries.json index 82813675..05bc2c73 100644 --- a/apps/tracker/src/i18n/header/resource_entries.json +++ b/apps/tracker/src/i18n/header/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Ir a Colecciones", "fr-ca": "Accéder aux collections", - "ru": "Перейти в Коллекции" + "ru": "Перейти в Коллекции", + "ja": "コレクションへ移動" }, "backToCollections": { "source": "Back to Collections", @@ -17,7 +18,8 @@ ], "es": "Volver a Colecciones", "fr-ca": "Retour aux collections", - "ru": "Вернуться к коллекциям" + "ru": "Вернуться к коллекциям", + "ja": "コレクション一覧に戻る" }, "keysCountX": { "source": "{ count, plural, =1 {1 key} other {{count} keys} }", @@ -27,7 +29,8 @@ ], "es": "{ count, plural, =1 {1 key} other {{count} keys} }", "fr-ca": "{ count, plural, =1 {1 key} other {{count} keys} }", - "ru": "{ count, plural, =1 {1 key} other {{count} keys} }" + "ru": "{ count, plural, =1 {1 key} other {{count} keys} }", + "ja": "{ count, plural, =1 {1 key} other {{count} keys} }" }, "localesCountX": { "source": "{ count, plural, =1 {1 locale} other {{count} locales} }", @@ -37,6 +40,7 @@ ], "es": "{ count, plural, =1 {1 locale} other {{count} locales} }", "fr-ca": "{ count, plural, =1 {1 locale} other {{count} locales} }", - "ru": "{ count, plural, =1 {1 locale} other {{count} locales} }" + "ru": "{ count, plural, =1 {1 locale} other {{count} locales} }", + "ja": "{ count, plural, =1 {1 locale} other {{count} locales} }" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/tracker_meta.json b/apps/tracker/src/i18n/header/tracker_meta.json index 254fb6c6..c5bce00a 100644 --- a/apps/tracker/src/i18n/header/tracker_meta.json +++ b/apps/tracker/src/i18n/header/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "7dde960bec7839181d20fc35537bf20a", "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", "status": "translated" + }, + "ja": { + "checksum": "73838d09ad1021c2c5926edcf3562640", + "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", + "status": "translated" } }, "backToCollections": { @@ -37,6 +42,11 @@ "checksum": "fa210ccd7b7d9347d63fbc720faeb1bf", "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", "status": "translated" + }, + "ja": { + "checksum": "826da54bd00eb095a391f518f9241381", + "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", + "status": "translated" } }, "keysCountX": { @@ -57,6 +67,11 @@ "checksum": "2ccecfa93e0d0c95b7f229684871db68", "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", "status": "new" + }, + "ja": { + "checksum": "2ccecfa93e0d0c95b7f229684871db68", + "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", + "status": "new" } }, "localesCountX": { @@ -77,6 +92,11 @@ "checksum": "ab692b642031b8646162616db0a399cf", "baseChecksum": "ab692b642031b8646162616db0a399cf", "status": "new" + }, + "ja": { + "checksum": "ab692b642031b8646162616db0a399cf", + "baseChecksum": "ab692b642031b8646162616db0a399cf", + "status": "new" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/resource_entries.json b/apps/tracker/src/i18n/locale/resource_entries.json index 92296118..9e4440df 100644 --- a/apps/tracker/src/i18n/locale/resource_entries.json +++ b/apps/tracker/src/i18n/locale/resource_entries.json @@ -7,7 +7,8 @@ ], "es": "Idioma actual: {language}", "fr-ca": "Langue actuelle : {language}", - "ru": "Текущий язык: {language}" + "ru": "Текущий язык: {language}", + "ja": "現在の言語: {language}" }, "selectLanguage": { "source": "Select language", @@ -17,6 +18,7 @@ ], "es": "Seleccionar idioma", "fr-ca": "Choisir la langue", - "ru": "Выберите язык" + "ru": "Выберите язык", + "ja": "言語を選択してください" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/tracker_meta.json b/apps/tracker/src/i18n/locale/tracker_meta.json index a511375b..8da503cd 100644 --- a/apps/tracker/src/i18n/locale/tracker_meta.json +++ b/apps/tracker/src/i18n/locale/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "6075bee7aeb0bb25c7548bbdb3c6b99a", "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", "status": "translated" + }, + "ja": { + "checksum": "8baa79412a4f36e906f08a8b950e81b2", + "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", + "status": "translated" } }, "selectLanguage": { @@ -37,6 +42,11 @@ "checksum": "792386035adece6656d97f676b6a7c87", "baseChecksum": "653777801f96237326d65205bc9129e3", "status": "translated" + }, + "ja": { + "checksum": "42627566fb3f3404065a4c81e93afcfa", + "baseChecksum": "653777801f96237326d65205bc9129e3", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/resource_entries.json b/apps/tracker/src/i18n/theme/resource_entries.json index 7cc45c19..9aec691e 100644 --- a/apps/tracker/src/i18n/theme/resource_entries.json +++ b/apps/tracker/src/i18n/theme/resource_entries.json @@ -4,27 +4,31 @@ "comment": "Theme switcher light mode label", "es": "Claro", "fr-ca": "Clair", - "ru": "Свет" + "ru": "Свет", + "ja": "ライト" }, "dark": { "source": "Dark", "comment": "Theme switcher dark mode label", "es": "Oscuro", "fr-ca": "Sombre", - "ru": "Темный" + "ru": "Темный", + "ja": "暗い" }, "system": { "source": "System", "comment": "Theme switcher system mode label", "es": "Sistema", "fr-ca": "Système", - "ru": "Система" + "ru": "Система", + "ja": "システム" }, "settings": { "source": "Theme settings", "comment": "Aria-label for theme settings button", "es": "Configuración del tema", "fr-ca": "Paramètres du thème", - "ru": "Настройки темы" + "ru": "Настройки темы", + "ja": "テーマ設定" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/tracker_meta.json b/apps/tracker/src/i18n/theme/tracker_meta.json index 02b48aa3..cfec6a31 100644 --- a/apps/tracker/src/i18n/theme/tracker_meta.json +++ b/apps/tracker/src/i18n/theme/tracker_meta.json @@ -17,6 +17,11 @@ "checksum": "64f29ae4503509124973fbba7b822d88", "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", "status": "translated" + }, + "ja": { + "checksum": "2174839253a0130780fff656fa933796", + "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", + "status": "translated" } }, "dark": { @@ -37,6 +42,11 @@ "checksum": "1d20f24767fa50f6c6846bec0a3b6bad", "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", "status": "translated" + }, + "ja": { + "checksum": "a0256100275b5af922ddf1d8cd054a45", + "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", + "status": "translated" } }, "system": { @@ -57,6 +67,11 @@ "checksum": "8d8c85f7294619318a9064c198372b09", "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", "status": "translated" + }, + "ja": { + "checksum": "6b46505ad5d38932a5771f1261e21b1a", + "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", + "status": "translated" } }, "settings": { @@ -77,6 +92,11 @@ "checksum": "e11e346c34aa99447a5979976e69905e", "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", "status": "translated" + }, + "ja": { + "checksum": "011045e70d825df3367471773c09a58a", + "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", + "status": "translated" } } } \ No newline at end of file From 724fd6e524672ca375b54a7f754d25f1b7acceaf Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 17:49:25 -0700 Subject: [PATCH 08/13] chore(tracker): add Germain translations --- .lingo-tracker.json | 4 +- apps/tracker/src/app/app.config.ts | 2 +- .../src/app/shared/services/locale.service.ts | 5 +- .../src/i18n/app/footer/resource_entries.json | 15 ++- .../src/i18n/app/footer/tracker_meta.json | 25 ++++ .../src/i18n/app/resource_entries.json | 3 +- apps/tracker/src/i18n/app/tracker_meta.json | 5 + .../browser/density/resource_entries.json | 15 ++- .../i18n/browser/density/tracker_meta.json | 25 ++++ .../dialog/deleteFolder/resource_entries.json | 6 +- .../dialog/deleteFolder/tracker_meta.json | 10 ++ .../deleteResource/resource_entries.json | 6 +- .../dialog/deleteResource/tracker_meta.json | 10 ++ .../dialog/moveFolder/resource_entries.json | 6 +- .../dialog/moveFolder/tracker_meta.json | 10 ++ .../browser/folderInput/resource_entries.json | 9 +- .../browser/folderInput/tracker_meta.json | 15 +++ .../browser/folderNode/resource_entries.json | 12 +- .../i18n/browser/folderNode/tracker_meta.json | 20 +++ .../folderPicker/resource_entries.json | 39 ++++-- .../browser/folderPicker/tracker_meta.json | 65 +++++++++ .../browser/folderTree/resource_entries.json | 15 ++- .../i18n/browser/folderTree/tracker_meta.json | 25 ++++ .../indexingOverlay/resource_entries.json | 9 +- .../browser/indexingOverlay/tracker_meta.json | 15 +++ .../localeFilter/resource_entries.json | 3 +- .../browser/localeFilter/tracker_meta.json | 5 + .../browser/placeholder/resource_entries.json | 9 +- .../browser/placeholder/tracker_meta.json | 15 +++ .../src/i18n/browser/resource_entries.json | 69 ++++++---- .../similarTranslations/resource_entries.json | 15 ++- .../similarTranslations/tracker_meta.json | 25 ++++ .../i18n/browser/status/resource_entries.json | 12 +- .../src/i18n/browser/status/tracker_meta.json | 20 +++ .../statusFilter/resource_entries.json | 6 +- .../browser/statusFilter/tracker_meta.json | 10 ++ .../i18n/browser/toast/resource_entries.json | 75 +++++++---- .../src/i18n/browser/toast/tracker_meta.json | 125 ++++++++++++++++++ .../src/i18n/browser/tracker_meta.json | 115 ++++++++++++++++ .../commentConfirm/resource_entries.json | 12 +- .../commentConfirm/tracker_meta.json | 20 +++ .../conflict/resource_entries.json | 12 +- .../conflict/tracker_meta.json | 20 +++ .../error/resource_entries.json | 21 ++- .../translationEditor/error/tracker_meta.json | 35 +++++ .../translationEditor/resource_entries.json | 75 +++++++---- .../tab/resource_entries.json | 9 +- .../translationEditor/tab/tracker_meta.json | 15 +++ .../translationEditor/tracker_meta.json | 125 ++++++++++++++++++ .../translationItem/resource_entries.json | 27 ++-- .../browser/translationItem/tracker_meta.json | 45 +++++++ .../translationList/resource_entries.json | 3 +- .../browser/translationList/tracker_meta.json | 5 + .../translationSearch/resource_entries.json | 3 +- .../translationSearch/tracker_meta.json | 5 + .../collections/card/resource_entries.json | 9 +- .../i18n/collections/card/tracker_meta.json | 15 +++ .../dialog/create/resource_entries.json | 3 +- .../dialog/create/tracker_meta.json | 5 + .../dialog/delete/resource_entries.json | 6 +- .../dialog/delete/tracker_meta.json | 10 ++ .../dialog/edit/resource_entries.json | 3 +- .../collections/dialog/edit/tracker_meta.json | 5 + .../collections/dialog/resource_entries.json | 33 +++-- .../i18n/collections/dialog/tracker_meta.json | 55 ++++++++ .../emptyState/resource_entries.json | 6 +- .../collections/emptyState/tracker_meta.json | 10 ++ .../form/errors/resource_entries.json | 3 +- .../collections/form/errors/tracker_meta.json | 5 + .../collections/form/resource_entries.json | 12 +- .../i18n/collections/form/tracker_meta.json | 20 +++ .../i18n/collections/resource_entries.json | 6 +- .../collections/toast/resource_entries.json | 24 ++-- .../i18n/collections/toast/tracker_meta.json | 40 ++++++ .../src/i18n/collections/tracker_meta.json | 10 ++ .../i18n/common/actions/resource_entries.json | 42 ++++-- .../src/i18n/common/actions/tracker_meta.json | 70 ++++++++++ .../src/i18n/data/resource_entries.json | 3 +- apps/tracker/src/i18n/data/tracker_meta.json | 5 + .../src/i18n/header/resource_entries.json | 12 +- .../tracker/src/i18n/header/tracker_meta.json | 20 +++ .../src/i18n/locale/resource_entries.json | 6 +- .../tracker/src/i18n/locale/tracker_meta.json | 10 ++ .../src/i18n/theme/resource_entries.json | 12 +- apps/tracker/src/i18n/theme/tracker_meta.json | 20 +++ 85 files changed, 1562 insertions(+), 225 deletions(-) diff --git a/.lingo-tracker.json b/.lingo-tracker.json index 2e386781..5b455fb6 100644 --- a/.lingo-tracker.json +++ b/.lingo-tracker.json @@ -6,6 +6,7 @@ "en", "fr-ca", "es", + "ru", "de", "ja" ], @@ -27,7 +28,8 @@ "es", "fr-ca", "ru", - "ja" + "ja", + "de" ] }, "mockDesignSystem": { diff --git a/apps/tracker/src/app/app.config.ts b/apps/tracker/src/app/app.config.ts index bf83398c..fa41c332 100644 --- a/apps/tracker/src/app/app.config.ts +++ b/apps/tracker/src/app/app.config.ts @@ -19,7 +19,7 @@ export const appConfig: ApplicationConfig = { provideHttpClient(), provideTransloco({ config: { - availableLangs: ['en', 'es', 'fr-ca'], + availableLangs: ['en', 'es', 'fr-ca', 'ru', 'ja', 'de'], defaultLang: 'en', reRenderOnLangChange: true, prodMode: !isDevMode(), diff --git a/apps/tracker/src/app/shared/services/locale.service.ts b/apps/tracker/src/app/shared/services/locale.service.ts index 06514b08..82252913 100644 --- a/apps/tracker/src/app/shared/services/locale.service.ts +++ b/apps/tracker/src/app/shared/services/locale.service.ts @@ -2,7 +2,7 @@ import { Injectable, signal, inject, PLATFORM_ID } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; import { TranslocoService } from '@jsverse/transloco'; -export type LocaleCode = 'en' | 'es' | 'fr-ca'; +export type LocaleCode = 'en' | 'es' | 'fr-ca' | 'ru' | 'ja' | 'de'; export interface LocaleOption { readonly code: LocaleCode; @@ -16,6 +16,9 @@ const AVAILABLE_LOCALES: readonly LocaleOption[] = [ { code: 'en', displayName: 'English' }, { code: 'es', displayName: 'Español' }, { code: 'fr-ca', displayName: 'Français (CA)' }, + { code: 'ru', displayName: 'Русский' }, + { code: 'ja', displayName: '日本語' }, + { code: 'de', displayName: 'Deutsch' }, ] as const; const VALID_LOCALE_CODES = new Set(AVAILABLE_LOCALES.map((l) => l.code)); diff --git a/apps/tracker/src/i18n/app/footer/resource_entries.json b/apps/tracker/src/i18n/app/footer/resource_entries.json index a8d58f1f..627bff12 100644 --- a/apps/tracker/src/i18n/app/footer/resource_entries.json +++ b/apps/tracker/src/i18n/app/footer/resource_entries.json @@ -8,7 +8,8 @@ "es": "Herramientas de SimonCodes-CA", "fr-ca": "Outils de SimonCodes-CA", "ru": "Инструменты от SimonCodes-CA", - "ja": "SimonCodes-CAによるツール" + "ja": "SimonCodes-CAによるツール", + "de": "Tools von SimonCodes-CA" }, "githubTitle": { "source": "GitHub Repository", @@ -19,7 +20,8 @@ "es": "Repositorio de GitHub", "fr-ca": "Dépôt GitHub", "ru": "Репозиторий GitHub", - "ja": "GitHubリポジトリ" + "ja": "GitHubリポジトリ", + "de": "GitHub-Repository" }, "githubLabel": { "source": "GitHub", @@ -30,7 +32,8 @@ "es": "GitHub", "fr-ca": "GitHub", "ru": "GitHub", - "ja": "GitHub" + "ja": "GitHub", + "de": "GitHub" }, "issuesTitle": { "source": "Report an Issue", @@ -41,7 +44,8 @@ "es": "Informar un problema", "fr-ca": "Signaler un problème", "ru": "Сообщить о проблеме", - "ja": "問題を報告する" + "ja": "問題を報告する", + "de": "Problem melden" }, "issuesLabel": { "source": "Issues", @@ -52,6 +56,7 @@ "es": "Asuntos", "fr-ca": "Problèmes", "ru": "Проблемы", - "ja": "問題" + "ja": "問題", + "de": "Probleme" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/footer/tracker_meta.json b/apps/tracker/src/i18n/app/footer/tracker_meta.json index 6fddf48d..cbba214b 100644 --- a/apps/tracker/src/i18n/app/footer/tracker_meta.json +++ b/apps/tracker/src/i18n/app/footer/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "5094ff9d5b9514b745dd2fb92f16ff3b", "baseChecksum": "228e177a7df025238b894f2ae0026f34", "status": "translated" + }, + "de": { + "checksum": "7c0be44fa717402e31bf6806b3cff5c2", + "baseChecksum": "228e177a7df025238b894f2ae0026f34", + "status": "translated" } }, "githubTitle": { @@ -47,6 +52,11 @@ "checksum": "12a12fb5f7e5802e5b4c8a450b719c14", "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", "status": "translated" + }, + "de": { + "checksum": "c638b7f7dbc525cacfb36111a77206df", + "baseChecksum": "cf08730d37f83da9e97ca3262bf7072d", + "status": "translated" } }, "githubLabel": { @@ -72,6 +82,11 @@ "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", "status": "translated" + }, + "de": { + "checksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "baseChecksum": "d3b7c913cd04ebfec0e9ec32cb6fd58c", + "status": "translated" } }, "issuesTitle": { @@ -97,6 +112,11 @@ "checksum": "655422ca284cf1a1aabf2ce72ffb66f7", "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", "status": "translated" + }, + "de": { + "checksum": "d3ca3d5f69058ef4267255fe4b242393", + "baseChecksum": "0c6d9ab23098fd3e876c216fe1ca7ffc", + "status": "translated" } }, "issuesLabel": { @@ -122,6 +142,11 @@ "checksum": "25486ad4e541ea9a04632f8c28ba14f8", "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", "status": "translated" + }, + "de": { + "checksum": "20b97fe763e2c83e86ad13c5deab2793", + "baseChecksum": "80b768b15c3693e345a436b9dc0ea36f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/resource_entries.json b/apps/tracker/src/i18n/app/resource_entries.json index 0867df4d..69edca1f 100644 --- a/apps/tracker/src/i18n/app/resource_entries.json +++ b/apps/tracker/src/i18n/app/resource_entries.json @@ -8,6 +8,7 @@ "es": "Saltar al contenido principal", "fr-ca": "Passer au contenu principal", "ru": "Перейти к основному содержимому", - "ja": "メインコンテンツへスキップ" + "ja": "メインコンテンツへスキップ", + "de": "Zum Hauptinhalt springen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/app/tracker_meta.json b/apps/tracker/src/i18n/app/tracker_meta.json index efba7246..2356c062 100644 --- a/apps/tracker/src/i18n/app/tracker_meta.json +++ b/apps/tracker/src/i18n/app/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "cd757fa937839fce931945543637e8a4", "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", "status": "translated" + }, + "de": { + "checksum": "26702fe976ca5f8e477b4ddb1a7736a3", + "baseChecksum": "cc367b544fab23df0ddaf982fb1445b5", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/resource_entries.json b/apps/tracker/src/i18n/browser/density/resource_entries.json index 6aa60807..bd9ff572 100644 --- a/apps/tracker/src/i18n/browser/density/resource_entries.json +++ b/apps/tracker/src/i18n/browser/density/resource_entries.json @@ -8,7 +8,8 @@ "es": "Compacto: vista de 2 líneas, alta densidad", "fr-ca": "Compact — affichage sur 2 lignes, haute densité", "ru": "Компактный — двухстрочный режим отображения, высокая плотность пикселей.", - "ja": "コンパクト - 2行表示、高密度" + "ja": "コンパクト - 2行表示、高密度", + "de": "Kompakt – 2-Zeilen-Ansicht, hohe Dichte" }, "fullTooltip": { "source": "Full — detailed view with comments and all locales", @@ -19,7 +20,8 @@ "es": "Completo: vista detallada con comentarios y todas las configuraciones regionales", "fr-ca": "Vue complète et détaillée avec commentaires et toutes les langues", "ru": "Полный — подробный просмотр с комментариями и всеми локалями.", - "ja": "完全版 — コメントとすべての地域を含む詳細表示" + "ja": "完全版 — コメントとすべての地域を含む詳細表示", + "de": "Vollständige – detaillierte Ansicht mit Kommentaren und allen Standorten" }, "modeAriaLabel": { "source": "Density mode", @@ -30,7 +32,8 @@ "es": "Modo de densidad", "fr-ca": "Mode de densité", "ru": "Режим плотности", - "ja": "密度モード" + "ja": "密度モード", + "de": "Dichtemodus" }, "compactAriaLabel": { "source": "Compact density", @@ -41,7 +44,8 @@ "es": "Densidad compacta", "fr-ca": "Densité compacte", "ru": "Плотная компактность", - "ja": "高密度" + "ja": "高密度", + "de": "Kompakte Dichte" }, "fullAriaLabel": { "source": "Full density", @@ -52,6 +56,7 @@ "es": "Densidad completa", "fr-ca": "Densité maximale", "ru": "Полная плотность", - "ja": "完全密度" + "ja": "完全密度", + "de": "Volle Dichte" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/density/tracker_meta.json b/apps/tracker/src/i18n/browser/density/tracker_meta.json index 80c51b04..8bef12e3 100644 --- a/apps/tracker/src/i18n/browser/density/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/density/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8d4293530065fed7ec05336a71a83410", "baseChecksum": "99ec7955eb135928d0c239b3521140c3", "status": "translated" + }, + "de": { + "checksum": "046eb75024ccb0f2e051f68baf8d3d47", + "baseChecksum": "99ec7955eb135928d0c239b3521140c3", + "status": "translated" } }, "fullTooltip": { @@ -47,6 +52,11 @@ "checksum": "d30b5f58f77896dd48a5faac933aeb4f", "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", "status": "translated" + }, + "de": { + "checksum": "2df1b96af1e2c0fbbbe3e8978dd36001", + "baseChecksum": "4f0dbd02ebc750568b8c7fa10cc9e6b7", + "status": "translated" } }, "modeAriaLabel": { @@ -72,6 +82,11 @@ "checksum": "2fabe94b844462169d8c335da7ef8453", "baseChecksum": "cee89fa354411866e20092652b6b8b07", "status": "translated" + }, + "de": { + "checksum": "5640b797f0dc0af8a6d98e01db2b4758", + "baseChecksum": "cee89fa354411866e20092652b6b8b07", + "status": "translated" } }, "compactAriaLabel": { @@ -97,6 +112,11 @@ "checksum": "f7dcc0ac9e61ac8abd64bfcc171be0a0", "baseChecksum": "e44615f2f134cfe073e2960672aa7489", "status": "translated" + }, + "de": { + "checksum": "d9564921fc6e170cf8761767746d8472", + "baseChecksum": "e44615f2f134cfe073e2960672aa7489", + "status": "translated" } }, "fullAriaLabel": { @@ -122,6 +142,11 @@ "checksum": "82ad02096571402a315e21e5b3b7a9cd", "baseChecksum": "02474f847ab2138e522a31349e7aec0f", "status": "translated" + }, + "de": { + "checksum": "bc4897f511be5e69c78246ffda249d62", + "baseChecksum": "02474f847ab2138e522a31349e7aec0f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json index 7ae394ce..a2eb6fc3 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json @@ -8,7 +8,8 @@ "es": "Eliminar carpeta", "fr-ca": "Supprimer le dossier", "ru": "Удалить папку", - "ja": "フォルダを削除する" + "ja": "フォルダを削除する", + "de": "Ordner löschen" }, "messageX": { "source": "Delete \"{name}\" and all its contents?", @@ -19,6 +20,7 @@ "es": "¿Eliminar \"{name}\" y todo su contenido?", "fr-ca": "Supprimer \"{name}\" et tout son contenu ?", "ru": "Удалить \"{name}\" и всё его содержимое?", - "ja": "「{name}」とその内容をすべて削除しますか?" + "ja": "「{name}」とその内容をすべて削除しますか?", + "de": "\"{name}\" und seinen gesamten Inhalt löschen?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json index 99060f6c..a1104d30 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "562f7fe2b9f1c1f4ebc16d39c39f8b7f", "baseChecksum": "991e322cd8225c369a963bb60b0a9688", "status": "translated" + }, + "de": { + "checksum": "3f2ba266360c45c327c8a3728b3fe199", + "baseChecksum": "991e322cd8225c369a963bb60b0a9688", + "status": "translated" } }, "messageX": { @@ -47,6 +52,11 @@ "checksum": "67608fe71d95541b9933d39a2e7cb626", "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", "status": "translated" + }, + "de": { + "checksum": "bdf9a9dc7cc399f9a834a63145b6a259", + "baseChecksum": "5f0ed1d8bc9815b6bc420bf0aee99c6a", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json index 8c08a84e..c85f43a3 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json @@ -8,7 +8,8 @@ "es": "Eliminar recurso", "fr-ca": "Supprimer la ressource", "ru": "Удалить ресурс", - "ja": "リソースを削除する" + "ja": "リソースを削除する", + "de": "Ressource löschen" }, "messageX": { "source": "Are you sure you want to delete the resource \"{key}\"? This action cannot be undone.", @@ -19,6 +20,7 @@ "es": "¿Seguro que desea eliminar el recurso \"{key}\"? Esta acción no se puede deshacer.", "fr-ca": "Êtes-vous certain de vouloir supprimer la ressource « {key} » ? Cette action est irréversible.", "ru": "Вы уверены, что хотите удалить ресурс \"{key}\"? Это действие необратимо.", - "ja": "リソース「{key}」を削除してもよろしいですか?この操作は元に戻せません。" + "ja": "リソース「{key}」を削除してもよろしいですか?この操作は元に戻せません。", + "de": "Sind Sie sicher, dass Sie die Ressource \"{key}\" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden." } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json index 0b6b4298..06ef0bf3 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "aa7622a8f3cdec64553738d3a180ade9", "baseChecksum": "7091aa93a78122401125a34800f9a1ac", "status": "translated" + }, + "de": { + "checksum": "6f34a1687a7fbb11839ff67195a1ebf3", + "baseChecksum": "7091aa93a78122401125a34800f9a1ac", + "status": "translated" } }, "messageX": { @@ -47,6 +52,11 @@ "checksum": "8fc4d60dca252625969f6139dc19c349", "baseChecksum": "ac83571aec2e065433da7fd905696d5f", "status": "translated" + }, + "de": { + "checksum": "26e419957dd41dc1529aa1f4e1db1cfe", + "baseChecksum": "ac83571aec2e065433da7fd905696d5f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json index 13bd2db1..21a6dcd8 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json @@ -8,7 +8,8 @@ "es": "Mover carpeta", "fr-ca": "Déplacer le dossier", "ru": "Переместить папку", - "ja": "フォルダーを移動する" + "ja": "フォルダーを移動する", + "de": "Ordner verschieben" }, "messageX": { "source": "Move folder \"{name}\" and all its contents to \"{dest}\"?", @@ -19,6 +20,7 @@ "es": "¿Mover la carpeta \"{name}\" y todo su contenido a \"{dest}\"?", "fr-ca": "Déplacer le dossier \"{name}\" et tout son contenu vers \"{dest}\" ?", "ru": "Переместить папку \"{name}\" и все ее содержимое в \"{dest}\"?", - "ja": "フォルダ「{name}」とその中のすべての内容を「{dest}」に移動しますか?" + "ja": "フォルダ「{name}」とその中のすべての内容を「{dest}」に移動しますか?", + "de": "Ordner \"{name}\" und seinen gesamten Inhalt nach \"{dest}\" verschieben?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json index 519af48f..8ecaa764 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "dcb7ba7c1d903a09f83b7fd2ae8d18d9", "baseChecksum": "1c10ed990d6445081dfd3828812355e5", "status": "translated" + }, + "de": { + "checksum": "289e2d173d50d45e38b7e5c491459413", + "baseChecksum": "1c10ed990d6445081dfd3828812355e5", + "status": "translated" } }, "messageX": { @@ -47,6 +52,11 @@ "checksum": "a6606371456d1428db6cd20ed4c740bc", "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", "status": "translated" + }, + "de": { + "checksum": "b1cd3d673aa2697fddd1ad90fa4e914a", + "baseChecksum": "b7778a68166ffe0dab524997ad6b3bfd", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json index 5fd84d36..6abb3d54 100644 --- a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json @@ -8,7 +8,8 @@ "es": "Nombre de la carpeta", "fr-ca": "Nom du dossier", "ru": "Название папки", - "ja": "フォルダ名" + "ja": "フォルダ名", + "de": "Ordnername" }, "nameRequired": { "source": "Folder name is required", @@ -19,7 +20,8 @@ "es": "El nombre de la carpeta es obligatorio", "fr-ca": "Le nom du dossier est requis.", "ru": "Название папки обязательно для указания.", - "ja": "フォルダ名は必須です" + "ja": "フォルダ名は必須です", + "de": "Ein Ordnername ist erforderlich." }, "namePatternError": { "source": "Only letters, numbers, dashes, and underscores allowed", @@ -30,6 +32,7 @@ "es": "Solo se permiten letras, números, guiones y guiones bajos.", "fr-ca": "Seules les lettres, les chiffres, les tirets et les traits de soulignement sont autorisés.", "ru": "Разрешается использовать только буквы, цифры, дефисы и подчеркивания.", - "ja": "使用できる文字、数字、ハイフン、アンダースコアのみです。" + "ja": "使用できる文字、数字、ハイフン、アンダースコアのみです。", + "de": "Nur Buchstaben, Zahlen, Bindestriche und Unterstriche sind erlaubt." } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json index b80a4015..2966cfd9 100644 --- a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8e075835352ff89cf377cd81d97900be", "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", "status": "translated" + }, + "de": { + "checksum": "7b5f28765ae3a0754c994c5536bd57f3", + "baseChecksum": "710417c4e57a6a01500fe4c0c448ce3d", + "status": "translated" } }, "nameRequired": { @@ -47,6 +52,11 @@ "checksum": "efab011f753b9e16f84893e0af2a520b", "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", "status": "translated" + }, + "de": { + "checksum": "cb538b3f72f91ed52aac9ae8f414773f", + "baseChecksum": "9e8e01dde2a46cfe2812ea89bbd9b6a9", + "status": "translated" } }, "namePatternError": { @@ -72,6 +82,11 @@ "checksum": "e3d0f4d45bbf2ac57c31082d458ee87a", "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", "status": "translated" + }, + "de": { + "checksum": "1bc04ac173ee13350abab5aed9f81366", + "baseChecksum": "6ffb87ace7727c5d44238c324f75a757", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json index 84f563ed..a506b376 100644 --- a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json @@ -8,7 +8,8 @@ "es": "Nuevo", "fr-ca": "Nouveau", "ru": "Новый", - "ja": "新しい" + "ja": "新しい", + "de": "Neu" }, "folderAriaLabelX": { "source": "Folder { name }", @@ -19,7 +20,8 @@ "es": "Carpeta { nombre }", "fr-ca": "Dossier { nom }", "ru": "Папка { имя }", - "ja": "フォルダ {名前}" + "ja": "フォルダ {名前}", + "de": "Ordner { Name }" }, "dragToMoveFolderAriaLabel": { "source": "Drag to move folder", @@ -30,7 +32,8 @@ "es": "Arrastrar para mover la carpeta", "fr-ca": "Faites glisser pour déplacer le dossier", "ru": "Перетащите, чтобы переместить папку.", - "ja": "フォルダをドラッグして移動" + "ja": "フォルダをドラッグして移動", + "de": "Ordner per Drag & Drop verschieben" }, "deleteFolderAriaLabelX": { "source": "Delete folder { name }", @@ -41,6 +44,7 @@ "es": "Eliminar carpeta { nombre }", "fr-ca": "Supprimer le dossier { nom }", "ru": "Удалить папку {имя}", - "ja": "フォルダ {名前} を削除します" + "ja": "フォルダ {名前} を削除します", + "de": "Ordner { Name } löschen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json index f9730476..bb9c4222 100644 --- a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "ad4b0bd55882d4f7164630d4158d3c39", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "de": { + "checksum": "e85a2f1d6de3e3b0e71b1a2e19952659", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "folderAriaLabelX": { @@ -47,6 +52,11 @@ "checksum": "b279d2cfed0ba56b787c597461de81bb", "baseChecksum": "2807ee06f9cee829069ff722e0076f63", "status": "translated" + }, + "de": { + "checksum": "9a4eda48758fb87e7899ab93439e897c", + "baseChecksum": "2807ee06f9cee829069ff722e0076f63", + "status": "translated" } }, "dragToMoveFolderAriaLabel": { @@ -72,6 +82,11 @@ "checksum": "08c276e541d0aa7d1836c9ba7eb7414e", "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", "status": "translated" + }, + "de": { + "checksum": "a6baabf4e4c2e5a29693e28407a82459", + "baseChecksum": "621cc4d814e3af59119d9cd80bf87908", + "status": "translated" } }, "deleteFolderAriaLabelX": { @@ -97,6 +112,11 @@ "checksum": "5f068424ca259e11241a275b3e4887b1", "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", "status": "translated" + }, + "de": { + "checksum": "0bf5b9676022deb80311c34c42e009e3", + "baseChecksum": "fa3c80ac936464dfdfec9ddb30c5278b", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json index d875ef79..ba35e45e 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json @@ -8,7 +8,8 @@ "es": "Carpeta {name}", "fr-ca": "Dossier {name}", "ru": "Папка {name}", - "ja": "フォルダ {name}" + "ja": "フォルダ {name}", + "de": "Ordner {name}" }, "collapse": { "source": "Collapse", @@ -19,7 +20,8 @@ "es": "Colapsar", "fr-ca": "Effondrement", "ru": "Крах", - "ja": "崩壊" + "ja": "崩壊", + "de": "Zusammenbruch" }, "expand": { "source": "Expand", @@ -30,7 +32,8 @@ "es": "Expandir", "fr-ca": "Élargir", "ru": "Расширять", - "ja": "拡大する" + "ja": "拡大する", + "de": "Expandieren" }, "addSubfolderToX": { "source": "Add subfolder to {name}", @@ -41,7 +44,8 @@ "es": "Agregar subcarpeta a {name}", "fr-ca": "Ajouter un sous-dossier à {name}", "ru": "Добавить подпапку в {name}", - "ja": "{name} にサブフォルダを追加します" + "ja": "{name} にサブフォルダを追加します", + "de": "Füge einen Unterordner zu {name} hinzu." }, "folderLabel": { "source": "Folder:", @@ -52,7 +56,8 @@ "es": "Carpeta:", "fr-ca": "Dossier :", "ru": "Папка:", - "ja": "フォルダ:" + "ja": "フォルダ:", + "de": "Ordner:" }, "noFoldersYet": { "source": "No folders yet", @@ -63,7 +68,8 @@ "es": "No hay carpetas todavía", "fr-ca": "Aucun dossier pour le moment", "ru": "Папок пока нет.", - "ja": "まだフォルダはありません" + "ja": "まだフォルダはありません", + "de": "Noch keine Ordner" }, "createFirstFolder": { "source": "Create First Folder", @@ -74,7 +80,8 @@ "es": "Crear la primera carpeta", "fr-ca": "Créer le premier dossier", "ru": "Создать первую папку", - "ja": "最初のフォルダを作成する" + "ja": "最初のフォルダを作成する", + "de": "Ersten Ordner erstellen" }, "folderCreated": { "source": "Folder created successfully", @@ -85,7 +92,8 @@ "es": "Carpeta creada exitosamente", "fr-ca": "Dossier créé avec succès", "ru": "Папка успешно создана.", - "ja": "フォルダが正常に作成されました" + "ja": "フォルダが正常に作成されました", + "de": "Ordner erfolgreich erstellt" }, "folderAlreadyExists": { "source": "Folder already exists", @@ -96,7 +104,8 @@ "es": "La carpeta ya existe", "fr-ca": "Le dossier existe déjà.", "ru": "Папка уже существует", - "ja": "フォルダは既に存在します" + "ja": "フォルダは既に存在します", + "de": "Der Ordner existiert bereits." }, "createFolderFailed": { "source": "Failed to create folder", @@ -107,7 +116,8 @@ "es": "No se pudo crear la carpeta", "fr-ca": "Impossible de créer le dossier", "ru": "Не удалось создать папку.", - "ja": "フォルダの作成に失敗しました" + "ja": "フォルダの作成に失敗しました", + "de": "Ordner konnte nicht erstellt werden" }, "rootLabel": { "source": "root", @@ -118,7 +128,8 @@ "es": "raíz", "fr-ca": "racine", "ru": "корень", - "ja": "根" + "ja": "根", + "de": "Wurzel" }, "selectorAriaLabelX": { "source": "Folder selector, currently: { path }", @@ -129,7 +140,8 @@ "es": "Selector de carpeta, actualmente: { ruta }", "fr-ca": "Sélecteur de dossier, présentement : { chemin }", "ru": "Селектор папки, в данный момент: { путь }", - "ja": "フォルダセレクター、現在の値: { パス }" + "ja": "フォルダセレクター、現在の値: { パス }", + "de": "Ordnerauswahl, aktuell: { Pfad }" }, "treeAriaLabel": { "source": "Folder tree", @@ -140,6 +152,7 @@ "es": "Árbol de carpetas", "fr-ca": "Arborescence des dossiers", "ru": "Дерево папок", - "ja": "フォルダーツリー" + "ja": "フォルダーツリー", + "de": "Ordnerstruktur" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json index d529b59d..2ed32045 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "eac7a0a1e12765c214b1085965f45fb7", "baseChecksum": "16708b0cacde01471507891eb88bcf2b", "status": "translated" + }, + "de": { + "checksum": "ea4bf7e72c09675cd73a2b718e4c4d45", + "baseChecksum": "16708b0cacde01471507891eb88bcf2b", + "status": "translated" } }, "collapse": { @@ -47,6 +52,11 @@ "checksum": "043901ea2022bf1c3b7c9f1feeda07fd", "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", "status": "translated" + }, + "de": { + "checksum": "dc87dfdb97b71708f80fe846b584186e", + "baseChecksum": "2b31634e3cfef1bfdd7d0d2cdfdc3f9d", + "status": "translated" } }, "expand": { @@ -72,6 +82,11 @@ "checksum": "4615433abf3e1131172d9a8f5dffb2f2", "baseChecksum": "8098b34f582537833b36b58273c3545b", "status": "translated" + }, + "de": { + "checksum": "3a709ed8fde2281096eeb787ce715c47", + "baseChecksum": "8098b34f582537833b36b58273c3545b", + "status": "translated" } }, "addSubfolderToX": { @@ -97,6 +112,11 @@ "checksum": "157c9e9aa46efb7353525d7e13eedee9", "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", "status": "translated" + }, + "de": { + "checksum": "b3f017dde8b4c323a06ff5974626faf6", + "baseChecksum": "aa85d08e5c2011ca6a07c0db14c82de2", + "status": "translated" } }, "folderLabel": { @@ -122,6 +142,11 @@ "checksum": "7a2b94c75981c521deea7118a39b0c38", "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", "status": "translated" + }, + "de": { + "checksum": "00328b87c1f4b09e604c0d725ff1919f", + "baseChecksum": "5416b7cf9e33d63d7a7484a75e977dfa", + "status": "translated" } }, "noFoldersYet": { @@ -147,6 +172,11 @@ "checksum": "821d3a354e82dec319a31f7392352969", "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", "status": "translated" + }, + "de": { + "checksum": "208d41980a77ef52ffc6e00798e7bb38", + "baseChecksum": "9beedeb24025c057f2fd58a2e80153ec", + "status": "translated" } }, "createFirstFolder": { @@ -172,6 +202,11 @@ "checksum": "d7bbc4cde5e4080f2b18b38c261eb03d", "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", "status": "translated" + }, + "de": { + "checksum": "dd82851ec9130cdff8bfe9612fe31bb9", + "baseChecksum": "07883be3c67d32d56eb1e86891f130ca", + "status": "translated" } }, "folderCreated": { @@ -197,6 +232,11 @@ "checksum": "251d9199ea2c2febe0c2464c333ef75c", "baseChecksum": "a849da990cd1a54faca8b4923561fc60", "status": "translated" + }, + "de": { + "checksum": "736c372fdf8f87e58841d882710839c9", + "baseChecksum": "a849da990cd1a54faca8b4923561fc60", + "status": "translated" } }, "folderAlreadyExists": { @@ -222,6 +262,11 @@ "checksum": "585693643f563620986e9fd5aa7ffae6", "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", "status": "translated" + }, + "de": { + "checksum": "db0b86b7564861a2e1388ab232ac7c53", + "baseChecksum": "8f0c6e690f8fc7b4930fa26eea038fe6", + "status": "translated" } }, "createFolderFailed": { @@ -247,6 +292,11 @@ "checksum": "653707d6996bec51f6bbd51b29d7aee7", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "de": { + "checksum": "7cbd86dab907a1f49ee0fcf5ea2ac8e2", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "rootLabel": { @@ -272,6 +322,11 @@ "checksum": "99ef7b0d0959faa61bef232697dae9c4", "baseChecksum": "63a9f0ea7bb98050796b649e85481845", "status": "translated" + }, + "de": { + "checksum": "e93dde3aa767da911495697e4737808c", + "baseChecksum": "63a9f0ea7bb98050796b649e85481845", + "status": "translated" } }, "selectorAriaLabelX": { @@ -297,6 +352,11 @@ "checksum": "08175456a2012dc021d7a17f35b7f4e1", "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", "status": "translated" + }, + "de": { + "checksum": "ed06c442f616d33752f32266cbe3b87c", + "baseChecksum": "b25b6c575d57b6fd62e0b80e20fe9c16", + "status": "translated" } }, "treeAriaLabel": { @@ -322,6 +382,11 @@ "checksum": "b000acc997070fce721426d6c3738ab0", "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", "status": "translated" + }, + "de": { + "checksum": "da791976a20149dc89ff1b47d8806103", + "baseChecksum": "3b3f435ac41d9af09975ca8fd7d9a957", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json index 2ede01c8..e77340da 100644 --- a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json @@ -8,7 +8,8 @@ "es": "Filtrar carpetas", "fr-ca": "dossiers de filtrage", "ru": "Фильтрация папок", - "ja": "フォルダーをフィルタリングする" + "ja": "フォルダーをフィルタリングする", + "de": "Filterordner" }, "showCurrentFolderTooltip": { "source": "Show only current folder", @@ -19,7 +20,8 @@ "es": "Mostrar solo la carpeta actual", "fr-ca": "Afficher uniquement le dossier actuel", "ru": "Показать только текущую папку", - "ja": "現在のフォルダーのみを表示する" + "ja": "現在のフォルダーのみを表示する", + "de": "Nur aktuellen Ordner anzeigen" }, "showNestedResourcesTooltip": { "source": "Show all nested resources", @@ -30,7 +32,8 @@ "es": "Mostrar todos los recursos anidados", "fr-ca": "Afficher toutes les ressources imbriquées", "ru": "Показать все вложенные ресурсы", - "ja": "ネストされたリソースをすべて表示する" + "ja": "ネストされたリソースをすべて表示する", + "de": "Alle verschachtelten Ressourcen anzeigen" }, "addFolderAriaLabel": { "source": "Add folder", @@ -41,7 +44,8 @@ "es": "Agregar carpeta", "fr-ca": "Ajouter un dossier", "ru": "Добавить папку", - "ja": "フォルダーを追加する" + "ja": "フォルダーを追加する", + "de": "Ordner hinzufügen" }, "addFolderTooltip": { "source": "Add folder (Ctrl+Shift+N)", @@ -52,6 +56,7 @@ "es": "Agregar carpeta (Ctrl+Shift+N)", "fr-ca": "Ajouter un dossier (Ctrl+Maj+N)", "ru": "Добавить папку (Ctrl+Shift+N)", - "ja": "フォルダを追加する(Ctrl+Shift+N)" + "ja": "フォルダを追加する(Ctrl+Shift+N)", + "de": "Ordner hinzufügen (Strg+Umschalt+N)" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json index 10fb3ac3..5495c403 100644 --- a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "fea11c950afd6ad47292eb99e4e40ed7", "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", "status": "translated" + }, + "de": { + "checksum": "81159931475d47403a3c30e03da0221b", + "baseChecksum": "8aad8def5c9f4c9233fafc03317b3755", + "status": "translated" } }, "showCurrentFolderTooltip": { @@ -47,6 +52,11 @@ "checksum": "f090ff3a99674445f3d75beadfb801f0", "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", "status": "translated" + }, + "de": { + "checksum": "a90298a016d931b17270dc64006f7ebc", + "baseChecksum": "8bb8f6d2cca4c79060a585c3066b12dd", + "status": "translated" } }, "showNestedResourcesTooltip": { @@ -72,6 +82,11 @@ "checksum": "20c2914867f9af50fb54675c28e8fc36", "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", "status": "translated" + }, + "de": { + "checksum": "497a7310379f11b0de9dcd3db93b0bb7", + "baseChecksum": "ef700afb7c85765e3b5122911e9461f7", + "status": "translated" } }, "addFolderAriaLabel": { @@ -97,6 +112,11 @@ "checksum": "3bfda665313f438a5c1f8b67a0a5f767", "baseChecksum": "b60bc90c77f58812129670659f977dbe", "status": "translated" + }, + "de": { + "checksum": "757c6630b15b67141e54ec209243c98d", + "baseChecksum": "b60bc90c77f58812129670659f977dbe", + "status": "translated" } }, "addFolderTooltip": { @@ -122,6 +142,11 @@ "checksum": "dcc7e150442bdf9e0e99890e676d94ef", "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", "status": "translated" + }, + "de": { + "checksum": "5ee051c4d646523cd785f3ef77e05b5b", + "baseChecksum": "79e6232f92f3cc7bd3d268f4ec3c9e95", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json index d6a82742..53ea43ad 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json @@ -8,7 +8,8 @@ "es": "Colección de indexación...", "fr-ca": "Collection d'indexation...", "ru": "Индексирование коллекции...", - "ja": "コレクションのインデックスを作成しています..." + "ja": "コレクションのインデックスを作成しています...", + "de": "Sammlung wird indexiert..." }, "errorTitle": { "source": "Indexing Failed", @@ -19,7 +20,8 @@ "es": "Error de indexación", "fr-ca": "L'indexation a échoué", "ru": "Индексирование не удалось", - "ja": "インデックス作成に失敗しました" + "ja": "インデックス作成に失敗しました", + "de": "Indizierung fehlgeschlagen" }, "defaultError": { "source": "An error occurred while indexing the collection.", @@ -30,6 +32,7 @@ "es": "Se produjo un error al indexar la colección.", "fr-ca": "Une erreur s'est produite lors de l'indexation de la collection.", "ru": "Произошла ошибка при индексировании коллекции.", - "ja": "コレクションのインデックス作成中にエラーが発生しました。" + "ja": "コレクションのインデックス作成中にエラーが発生しました。", + "de": "Beim Indizieren der Sammlung ist ein Fehler aufgetreten." } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json index ba7d8dcc..4fc78a37 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "27a2ccde5f10886237423e9be9e0678e", "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", "status": "translated" + }, + "de": { + "checksum": "586bd6ec222b562ecc450b849631d530", + "baseChecksum": "a9dd11b1c5a6d656bbc67f69b58303ee", + "status": "translated" } }, "errorTitle": { @@ -47,6 +52,11 @@ "checksum": "16d3d677155ea8fe7712686c7b2c8e63", "baseChecksum": "bdb612b5237ec3727393283341b07e0e", "status": "translated" + }, + "de": { + "checksum": "15e8d96912feb77accd22ff28a226d71", + "baseChecksum": "bdb612b5237ec3727393283341b07e0e", + "status": "translated" } }, "defaultError": { @@ -72,6 +82,11 @@ "checksum": "1b735119013f84e4351bafbcbc6c79a4", "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", "status": "translated" + }, + "de": { + "checksum": "89c65aa4db8801082d9d6a239e9a0db0", + "baseChecksum": "cb1fe5c48be070cca575c0c84b89c06d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json index f901ae7b..0d4a802d 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json @@ -8,6 +8,7 @@ "es": "Filtrar regiones. Actualmente se muestra: {texto}", "fr-ca": "Filtrer les paramètres régionaux. Affichage actuel : { texte }", "ru": "Фильтр по языкам. В данный момент отображается: { текст }", - "ja": "地域をフィルタリングします。現在表示中: { テキスト }" + "ja": "地域をフィルタリングします。現在表示中: { テキスト }", + "de": "Gebietsschemas filtern. Aktuell angezeigt: { text }" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json index 1d4bde7f..85aac734 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "a9125be4e99103ed768fb2f81ed360ed", "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", "status": "translated" + }, + "de": { + "checksum": "c5e13cfa1c8c71a572983efde4e55482", + "baseChecksum": "8a99d337e7d73673d6afcfa72e7b82fd", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json index 80b85bd0..6dcfaaf3 100644 --- a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json @@ -5,7 +5,8 @@ "es": "Navegador de traducción disponible próximamente", "fr-ca": "Navigateur de traduction bientôt disponible", "ru": "Браузер для перевода скоро появится.", - "ja": "翻訳ブラウザ近日公開予定" + "ja": "翻訳ブラウザ近日公開予定", + "de": "Übersetzungsbrowser demnächst verfügbar" }, "message": { "source": "The translation browser feature is currently under development. Soon you'll be able to view, edit, and manage all translations within this collection.", @@ -13,7 +14,8 @@ "es": "La función de búsqueda de traducciones está en desarrollo. Pronto podrás ver, editar y gestionar todas las traducciones de esta colección.", "fr-ca": "La fonctionnalité du navigateur de traductions est en cours de développement. Vous pourrez bientôt consulter, modifier et gérer toutes les traductions de cette collection.", "ru": "Функция просмотра переводов в настоящее время находится в разработке. Вскоре вы сможете просматривать, редактировать и управлять всеми переводами в этой коллекции.", - "ja": "翻訳ブラウザ機能は現在開発中です。まもなく、このコレクション内のすべての翻訳を表示、編集、管理できるようになります。" + "ja": "翻訳ブラウザ機能は現在開発中です。まもなく、このコレクション内のすべての翻訳を表示、編集、管理できるようになります。", + "de": "Die Übersetzungsbrowser-Funktion befindet sich derzeit in der Entwicklung. In Kürze können Sie alle Übersetzungen dieser Sammlung anzeigen, bearbeiten und verwalten." }, "collection": { "source": "Collection", @@ -21,6 +23,7 @@ "es": "Recopilación", "fr-ca": "Collection", "ru": "Коллекция", - "ja": "コレクション" + "ja": "コレクション", + "de": "Sammlung" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json index ba8a2c2f..6e74caad 100644 --- a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "5e7cd0c3a357e01a8377e570c101d36b", "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", "status": "translated" + }, + "de": { + "checksum": "c030d07060ea8ea8173302e3042e375d", + "baseChecksum": "c7c796f3d37ab9fbc712335f9def7b81", + "status": "translated" } }, "message": { @@ -47,6 +52,11 @@ "checksum": "d028883676b3802bd56b4fc3a1bcb523", "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", "status": "translated" + }, + "de": { + "checksum": "b27b43a4af8a50725701f3e2ccc04e38", + "baseChecksum": "1cf7c14142897e3c49ea7b6b28ceb567", + "status": "translated" } }, "collection": { @@ -72,6 +82,11 @@ "checksum": "695b82464aee401b828677a0100f6cba", "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", "status": "translated" + }, + "de": { + "checksum": "475b422743f9887f4d8bd4974b28b499", + "baseChecksum": "d15b505cce09406de9f918cb1f8c641c", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/resource_entries.json b/apps/tracker/src/i18n/browser/resource_entries.json index e389cc00..ce655175 100644 --- a/apps/tracker/src/i18n/browser/resource_entries.json +++ b/apps/tracker/src/i18n/browser/resource_entries.json @@ -5,7 +5,8 @@ "es": "Volver a las colecciones", "fr-ca": "Retour aux collections", "ru": "Вернуться к коллекциям", - "ja": "コレクション一覧に戻る" + "ja": "コレクション一覧に戻る", + "de": "Zurück zu den Sammlungen" }, "filterFolders": { "source": "Filter folders...", @@ -13,28 +14,32 @@ "es": "Filtrar carpetas...", "fr-ca": "Dossiers de filtrage...", "ru": "Фильтрация папок...", - "ja": "フォルダをフィルタリング..." + "ja": "フォルダをフィルタリング...", + "de": "Filterordner..." }, "loadingFolders": { "source": "Loading folders...", "es": "Cargando carpetas...", "fr-ca": "Chargement des dossiers...", "ru": "Загрузка папок...", - "ja": "フォルダを読み込んでいます..." + "ja": "フォルダを読み込んでいます...", + "de": "Ordner werden geladen..." }, "noFoldersMatchSearch": { "source": "No folders match your search", "es": "No se encontraron carpetas que coincidan con su búsqueda.", "fr-ca": "Aucun dossier ne correspond à votre recherche", "ru": "Папки не соответствуют вашему запросу.", - "ja": "検索条件に一致するフォルダはありません" + "ja": "検索条件に一致するフォルダはありません", + "de": "Keine Ordner entsprechen Ihrer Suche" }, "noFoldersFound": { "source": "No folders found", "es": "No se encontraron carpetas", "fr-ca": "Aucun dossier trouvé", "ru": "Папки не найдены", - "ja": "フォルダが見つかりませんでした" + "ja": "フォルダが見つかりませんでした", + "de": "Keine Ordner gefunden" }, "clickToLoad": { "source": "click to load", @@ -42,49 +47,56 @@ "es": "Haz clic para cargar", "fr-ca": "cliquer pour charger", "ru": "нажмите для загрузки", - "ja": "クリックして読み込む" + "ja": "クリックして読み込む", + "de": "Zum Laden klicken" }, "loadingCollectionConfiguration": { "source": "Loading collection configuration...", "es": "Cargando configuración de la colección...", "fr-ca": "Chargement de la configuration de la collection...", "ru": "Загрузка конфигурации коллекции...", - "ja": "コレクション設定を読み込んでいます..." + "ja": "コレクション設定を読み込んでいます...", + "de": "Sammlungskonfiguration wird geladen..." }, "loadingTranslations": { "source": "Loading translations...", "es": "Cargando traducciones...", "fr-ca": "Chargement des traductions...", "ru": "Загрузка переводов...", - "ja": "翻訳を読み込んでいます..." + "ja": "翻訳を読み込んでいます...", + "de": "Übersetzungen werden geladen..." }, "noTranslationsFoundInFolder": { "source": "No translations found in this folder.", "es": "No se encontraron traducciones en esta carpeta.", "fr-ca": "Aucune traduction trouvée dans ce dossier.", "ru": "В этой папке не найдено ни одного перевода.", - "ja": "このフォルダには翻訳ファイルが見つかりませんでした。" + "ja": "このフォルダには翻訳ファイルが見つかりませんでした。", + "de": "In diesem Ordner wurden keine Übersetzungen gefunden." }, "searchTranslations": { "source": "Search (min 3 characters)...", "es": "Buscar (mínimo 3 caracteres)...", "fr-ca": "Recherche (3 caractères minimum)...", "ru": "Поиск (минимум 3 символа)...", - "ja": "検索(最低3文字)..." + "ja": "検索(最低3文字)...", + "de": "Suche (mind. 3 Zeichen)..." }, "showingSearchResultsForX": { "source": "Showing search results for \"{query}\"", "es": "Mostrando resultados de búsqueda para \"{query}\"", "fr-ca": "Affichage des résultats de recherche pour \"{query}\"", "ru": "Показаны результаты поиска по запросу \"{query}\"", - "ja": "「{query}」の検索結果を表示しています。" + "ja": "「{query}」の検索結果を表示しています。", + "de": "Suchergebnisse für \"{query}\" anzeigen" }, "clearSearch": { "source": "Clear Search", "es": "Búsqueda clara", "fr-ca": "Effacer la recherche", "ru": "Очистить поиск", - "ja": "検索をクリア" + "ja": "検索をクリア", + "de": "Suche löschen" }, "noFolderSelected": { "source": "No resource folder selected", @@ -95,7 +107,8 @@ "es": "No se seleccionó ninguna carpeta de recursos", "fr-ca": "Aucun dossier de ressources sélectionné", "ru": "Папка ресурсов не выбрана", - "ja": "リソースフォルダが選択されていません" + "ja": "リソースフォルダが選択されていません", + "de": "Kein Ressourcenordner ausgewählt" }, "addTranslationButton": { "source": "Add Translation", @@ -106,7 +119,8 @@ "es": "Añadir traducción", "fr-ca": "Ajouter une traduction", "ru": "Добавить перевод", - "ja": "翻訳を追加" + "ja": "翻訳を追加", + "de": "Übersetzung hinzufügen" }, "sortAscending": { "source": "Sort ascending", @@ -117,7 +131,8 @@ "es": "Ordenar ascendentemente", "fr-ca": "Trier en ordre croissant", "ru": "Сортировка по возрастанию", - "ja": "昇順で並べ替え" + "ja": "昇順で並べ替え", + "de": "Aufsteigend sortieren" }, "sortDescending": { "source": "Sort descending", @@ -128,7 +143,8 @@ "es": "Ordenar descendentemente", "fr-ca": "Trier par ordre décroissant", "ru": "Сортировать по убыванию", - "ja": "降順で並べ替え" + "ja": "降順で並べ替え", + "de": "Sortieren Sie absteigend" }, "sortAscendingTooltip": { "source": "Sort ascending (A→Z)", @@ -139,7 +155,8 @@ "es": "Ordenar ascendentemente (A→Z)", "fr-ca": "Trier par ordre croissant (A→Z)", "ru": "Сортировка по возрастанию (от А до Я)", - "ja": "昇順(A→Z)に並べ替え" + "ja": "昇順(A→Z)に並べ替え", + "de": "Aufsteigend sortieren (A→Z)" }, "sortDescendingTooltip": { "source": "Sort descending (Z→A)", @@ -150,7 +167,8 @@ "es": "Ordenar descendentemente (Z→A)", "fr-ca": "Trier par ordre décroissant (Z→A)", "ru": "Сортировка по убыванию (Z→A)", - "ja": "降順でソート(Z→A)" + "ja": "降順でソート(Z→A)", + "de": "Sortieren absteigend (Z→A)" }, "selectFolderFirst": { "source": "Select a folder first", @@ -161,7 +179,8 @@ "es": "Seleccione una carpeta primero", "fr-ca": "Sélectionnez d'abord un dossier", "ru": "Сначала выберите папку.", - "ja": "まずフォルダを選択してください。" + "ja": "まずフォルダを選択してください。", + "de": "Wählen Sie zuerst einen Ordner aus." }, "addNewTranslationTooltip": { "source": "Add a new translation", @@ -172,7 +191,8 @@ "es": "Añadir una nueva traducción", "fr-ca": "Ajouter une nouvelle traduction", "ru": "Добавить новый перевод", - "ja": "新しい翻訳を追加する" + "ja": "新しい翻訳を追加する", + "de": "Füge eine neue Übersetzung hinzu" }, "noTranslation": { "source": "No translation", @@ -183,7 +203,8 @@ "es": "Sin traducción", "fr-ca": "Aucune traduction", "ru": "Нет перевода", - "ja": "翻訳なし" + "ja": "翻訳なし", + "de": "Keine Übersetzung" }, "commentPrefix": { "source": "Comment:", @@ -194,7 +215,8 @@ "es": "Comentario:", "fr-ca": "Commentaire:", "ru": "Комментарий:", - "ja": "コメント:" + "ja": "コメント:", + "de": "Kommentar:" }, "toggleExpansion": { "source": "Toggle expansion", @@ -205,6 +227,7 @@ "es": "Activar o desactivar la expansión", "fr-ca": "Basculer l'extension", "ru": "Переключить расширение", - "ja": "展開を切り替える" + "ja": "展開を切り替える", + "de": "Erweiterung umschalten" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json index 98575dc6..01d54a64 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json @@ -8,7 +8,8 @@ "es": "Traducciones similares", "fr-ca": "Traductions similaires", "ru": "Похожие переводы", - "ja": "類似の翻訳" + "ja": "類似の翻訳", + "de": "Ähnliche Übersetzungen" }, "idle": { "source": "Similar translations will appear as you type", @@ -19,7 +20,8 @@ "es": "Aparecerán traducciones similares a medida que escribas.", "fr-ca": "Des traductions semblables apparaîtront au fur et à mesure que vous taperez.", "ru": "Похожие переводы будут появляться по мере ввода текста.", - "ja": "入力すると類似の翻訳が表示されます" + "ja": "入力すると類似の翻訳が表示されます", + "de": "Ähnliche Übersetzungen werden während der Eingabe angezeigt." }, "loading": { "source": "Searching for similar translations...", @@ -30,7 +32,8 @@ "es": "Buscando traducciones similares...", "fr-ca": "Recherche de traductions similaires...", "ru": "Ищу похожие переводы...", - "ja": "類似の翻訳を検索中..." + "ja": "類似の翻訳を検索中...", + "de": "Suche nach ähnlichen Übersetzungen..." }, "empty": { "source": "No similar translations found", @@ -41,7 +44,8 @@ "es": "No se encontraron traducciones similares", "fr-ca": "Aucune traduction semblable trouvée", "ru": "Похожие переводы не найдены", - "ja": "類似の翻訳は見つかりませんでした" + "ja": "類似の翻訳は見つかりませんでした", + "de": "Keine ähnlichen Übersetzungen gefunden" }, "showMoreX": { "source": "Show {count} more", @@ -52,6 +56,7 @@ "es": "Mostrar {count} más", "fr-ca": "Show {count} more", "ru": "Показать {count} больше", - "ja": "{count} を表示" + "ja": "{count} を表示", + "de": "Mehr anzeigen {count}" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json index d2a4786b..fcc2cd22 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "eb97498a7f0cecf1062b1b0e7e1f1e8f", "baseChecksum": "fdf7dc519363415a82c0e19d15661480", "status": "translated" + }, + "de": { + "checksum": "8ffa51bfa4e1f850fb1468d1d15331ad", + "baseChecksum": "fdf7dc519363415a82c0e19d15661480", + "status": "translated" } }, "idle": { @@ -47,6 +52,11 @@ "checksum": "fb9debff3b7b68b88e0b061292bb8567", "baseChecksum": "fc1752e501589956925c6d7ec51b4737", "status": "translated" + }, + "de": { + "checksum": "e36150dc69270c14c38d3eb8e9909138", + "baseChecksum": "fc1752e501589956925c6d7ec51b4737", + "status": "translated" } }, "loading": { @@ -72,6 +82,11 @@ "checksum": "e8a3a290283e520f5d3f6a399422ac01", "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", "status": "translated" + }, + "de": { + "checksum": "2b994a8f82efde93a1f36f51b31f4d68", + "baseChecksum": "1c5c437ca05fa28416068fd6f05809e6", + "status": "translated" } }, "empty": { @@ -97,6 +112,11 @@ "checksum": "cefdcff170cce639ea0ba9c6ad5b4ea1", "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", "status": "translated" + }, + "de": { + "checksum": "fa57d088b5a8546f06ded68e78a53c4b", + "baseChecksum": "fd7e0754b18f70245696cdee0be0ab26", + "status": "translated" } }, "showMoreX": { @@ -122,6 +142,11 @@ "checksum": "1a3b363e63a99737336b9f0bcca01221", "baseChecksum": "b39ae93853f9b177650ca742f758312d", "status": "translated" + }, + "de": { + "checksum": "590a948074ca10fae48086e64291db05", + "baseChecksum": "b39ae93853f9b177650ca742f758312d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/resource_entries.json b/apps/tracker/src/i18n/browser/status/resource_entries.json index 159ceca5..12aefcda 100644 --- a/apps/tracker/src/i18n/browser/status/resource_entries.json +++ b/apps/tracker/src/i18n/browser/status/resource_entries.json @@ -8,7 +8,8 @@ "es": "Nuevo", "fr-ca": "Nouveau", "ru": "Новый", - "ja": "新しい" + "ja": "新しい", + "de": "Neu" }, "stale": { "source": "Stale", @@ -19,7 +20,8 @@ "es": "Duro", "fr-ca": "Vicié", "ru": "Залежалый", - "ja": "古くなった" + "ja": "古くなった", + "de": "Abgestanden" }, "translated": { "source": "Translated", @@ -30,7 +32,8 @@ "es": "Traducido", "fr-ca": "Traduit", "ru": "Переведено", - "ja": "翻訳済み" + "ja": "翻訳済み", + "de": "Übersetzt" }, "verified": { "source": "Verified", @@ -41,6 +44,7 @@ "es": "Verificado", "fr-ca": "Vérifié", "ru": "Подтверждено", - "ja": "検証済み" + "ja": "検証済み", + "de": "Bestätigt" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/status/tracker_meta.json b/apps/tracker/src/i18n/browser/status/tracker_meta.json index 89a3a69a..66b4500e 100644 --- a/apps/tracker/src/i18n/browser/status/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/status/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "ad4b0bd55882d4f7164630d4158d3c39", "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", "status": "translated" + }, + "de": { + "checksum": "e85a2f1d6de3e3b0e71b1a2e19952659", + "baseChecksum": "03c2e7e41ffc181a4e84080b4710e81e", + "status": "translated" } }, "stale": { @@ -47,6 +52,11 @@ "checksum": "1720f89d6728615fff1b1d0bd2baf6fa", "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", "status": "translated" + }, + "de": { + "checksum": "e47ee5c96bf1921b48a43365b499d6dc", + "baseChecksum": "f1ac273d3c6d8e6489bf332819a2f650", + "status": "translated" } }, "translated": { @@ -72,6 +82,11 @@ "checksum": "6ccccd1019356b7c3d14daebbbc5c507", "baseChecksum": "532220dbf680ea98d665427b145e72ca", "status": "translated" + }, + "de": { + "checksum": "7f6819238f2dea34fd49f01d3740dbb6", + "baseChecksum": "532220dbf680ea98d665427b145e72ca", + "status": "translated" } }, "verified": { @@ -97,6 +112,11 @@ "checksum": "56bde30703e7f2b67f711269f4596632", "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", "status": "translated" + }, + "de": { + "checksum": "ca339a1aaec8f339751c4c996bc4be34", + "baseChecksum": "3f68e67dc6c397aaa9d1c24c356f754f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json index 3b52ee18..eba7566d 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json @@ -8,7 +8,8 @@ "es": "Necesita trabajo", "fr-ca": "Nécessite des travaux", "ru": "Требуется доработка", - "ja": "改善が必要" + "ja": "改善が必要", + "de": "Überarbeitungsbedürftig" }, "ariaLabelX": { "source": "Filter by status. Currently showing: { text }", @@ -19,6 +20,7 @@ "es": "Filtrar por estado. Actualmente se muestra: {texto}", "fr-ca": "Filtrer par statut. Affichage actuel : { texte }", "ru": "Фильтр по статусу. В данный момент отображается: { текст }", - "ja": "ステータスで絞り込み。現在表示中:{テキスト}" + "ja": "ステータスで絞り込み。現在表示中:{テキスト}", + "de": "Nach Status filtern. Aktuell angezeigt: { text }" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json index d67f8ddc..843e06fc 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8b5d48d121784c6c800b9e719ea02926", "baseChecksum": "82198ade859bc9f4034a6dd31276d473", "status": "translated" + }, + "de": { + "checksum": "4820f28cfac23b34516fe45ed518dcf1", + "baseChecksum": "82198ade859bc9f4034a6dd31276d473", + "status": "translated" } }, "ariaLabelX": { @@ -47,6 +52,11 @@ "checksum": "ecf1e9344fc9256c2f55bc99d58b833d", "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", "status": "translated" + }, + "de": { + "checksum": "a3e08e86453dc105c7c4d0db9fa0dbc3", + "baseChecksum": "dae9b86c4a9710ce0da801e65751954d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/resource_entries.json b/apps/tracker/src/i18n/browser/toast/resource_entries.json index 736f9feb..b5a80771 100644 --- a/apps/tracker/src/i18n/browser/toast/resource_entries.json +++ b/apps/tracker/src/i18n/browser/toast/resource_entries.json @@ -8,7 +8,8 @@ "es": "Copiado al portapapeles", "fr-ca": "Copié dans le presse-papiers", "ru": "Скопировано в буфер обмена", - "ja": "クリップボードにコピーされました" + "ja": "クリップボードにコピーされました", + "de": "In die Zwischenablage kopiert" }, "copyFailed": { "source": "Failed to copy", @@ -19,7 +20,8 @@ "es": "No se pudo copiar", "fr-ca": "Échec de la copie", "ru": "Не удалось скопировать", - "ja": "コピーに失敗しました" + "ja": "コピーに失敗しました", + "de": "Kopiervorgang fehlgeschlagen" }, "resourceDeleted": { "source": "Resource deleted successfully", @@ -30,7 +32,8 @@ "es": "Recurso eliminado exitosamente", "fr-ca": "Ressource supprimée avec succès", "ru": "Ресурс успешно удален", - "ja": "リソースは正常に削除されました" + "ja": "リソースは正常に削除されました", + "de": "Ressource erfolgreich gelöscht" }, "deleteFailed": { "source": "Failed to delete resource", @@ -41,7 +44,8 @@ "es": "No se pudo eliminar el recurso", "fr-ca": "Échec de la suppression de la ressource", "ru": "Не удалось удалить ресурс", - "ja": "リソースの削除に失敗しました" + "ja": "リソースの削除に失敗しました", + "de": "Ressource konnte nicht gelöscht werden" }, "translateFailed": { "source": "Failed to auto-translate resource", @@ -52,7 +56,8 @@ "es": "No se pudo traducir automáticamente el recurso", "fr-ca": "Échec de la traduction automatique de la ressource", "ru": "Не удалось выполнить автоматический перевод ресурса.", - "ja": "リソースの自動翻訳に失敗しました" + "ja": "リソースの自動翻訳に失敗しました", + "de": "Die automatische Übersetzung der Ressource ist fehlgeschlagen." }, "translationUpdated": { "source": "Translation updated successfully", @@ -63,7 +68,8 @@ "es": "Traducción actualizada exitosamente", "fr-ca": "Traduction mise à jour avec succès", "ru": "Перевод успешно обновлен.", - "ja": "翻訳が正常に更新されました" + "ja": "翻訳が正常に更新されました", + "de": "Übersetzung erfolgreich aktualisiert" }, "localeTranslated": { "source": "1 locale translated successfully", @@ -74,7 +80,8 @@ "es": "1 configuración regional traducida correctamente", "fr-ca": "1 langue traduite avec succès", "ru": "1 локализация успешно переведена", - "ja": "1つのロケールが正常に翻訳されました" + "ja": "1つのロケールが正常に翻訳されました", + "de": "1 Gebietsschema erfolgreich übersetzt" }, "localesTranslatedX": { "source": "{count} locales translated successfully", @@ -85,7 +92,8 @@ "es": "{count} locales traducidos correctamente", "fr-ca": "{count} Les paramètres régionaux ont été traduits avec succès", "ru": "{count} Локали успешно переведены", - "ja": "{count}ロケールが正常に翻訳されました" + "ja": "{count}ロケールが正常に翻訳されました", + "de": "{count} Gebietsschemas erfolgreich übersetzt" }, "allLocalesUpToDate": { "source": "All locales are already up to date", @@ -96,7 +104,8 @@ "es": "Todas las configuraciones regionales ya están actualizadas", "fr-ca": "Tous les emplacements sont déjà à jour.", "ru": "Все языковые версии уже обновлены.", - "ja": "すべての地域は既に最新の状態です" + "ja": "すべての地域は既に最新の状態です", + "de": "Alle Standorte sind bereits auf dem neuesten Stand." }, "skippedLocalesX": { "source": "Skipped locales (ICU format): {locales}", @@ -107,7 +116,8 @@ "es": "Configuraciones regionales omitidas (formato ICU): {locales}", "fr-ca": "Paramètres régionaux ignorés (format ICU) : {locales}", "ru": "Пропущенные локали (формат ICU): {locales}", - "ja": "スキップされたロケール (ICU 形式): {locales}" + "ja": "スキップされたロケール (ICU 形式): {locales}", + "de": "Übersprungene Gebietsschemas (ICU-Format): {locales}" }, "resourceCreated": { "source": "Resource created successfully", @@ -118,7 +128,8 @@ "es": "Recurso creado exitosamente", "fr-ca": "Ressource créée avec succès", "ru": "Ресурс успешно создан.", - "ja": "リソースが正常に作成されました" + "ja": "リソースが正常に作成されました", + "de": "Ressource erfolgreich erstellt" }, "autoTranslationSkippedX": { "source": "Auto-translation skipped for {locales} (ICU format not supported)", @@ -129,7 +140,8 @@ "es": "Se omitió la traducción automática para {locales} (formato ICU no compatible)", "fr-ca": "Traduction automatique ignorée pour {locales} (format ICU non pris en charge)", "ru": "Автоматический перевод пропущен для {locales} (формат ICU не поддерживается)", - "ja": "{locales} の自動翻訳はスキップされました(ICU形式はサポートされていません)。" + "ja": "{locales} の自動翻訳はスキップされました(ICU形式はサポートされていません)。", + "de": "Automatische Übersetzung für {locales} übersprungen (ICU-Format wird nicht unterstützt)" }, "resourceAlreadyInFolder": { "source": "Resource is already in this folder", @@ -140,7 +152,8 @@ "es": "El recurso ya está en esta carpeta", "fr-ca": "La ressource se trouve déjà dans ce dossier.", "ru": "Ресурс уже находится в этой папке.", - "ja": "リソースは既にこのフォルダにあります" + "ja": "リソースは既にこのフォルダにあります", + "de": "Die Ressource befindet sich bereits in diesem Ordner" }, "resourceMovedX": { "source": "Moved \"{name}\" to {folder}", @@ -151,7 +164,8 @@ "es": "Se movió \"{name}\" a {folder}", "fr-ca": "Déplacé « {name} » vers {folder}", "ru": "Перемещено \"{name}\" в {folder}", - "ja": "\"{name}\" を {folder} に移動しました。" + "ja": "\"{name}\" を {folder} に移動しました。", + "de": "\"{name}\" wurde nach {folder} verschoben." }, "folderAlreadyAtLocation": { "source": "Folder is already at this location", @@ -162,7 +176,8 @@ "es": "La carpeta ya está en esta ubicación", "fr-ca": "Le dossier est déjà à cet emplacement.", "ru": "Папка уже находится по этому адресу.", - "ja": "フォルダは既にこの場所にあります" + "ja": "フォルダは既にこの場所にあります", + "de": "Der Ordner befindet sich bereits an diesem Speicherort" }, "folderMovedX": { "source": "Moved \"{name}\" into {dest}", @@ -173,7 +188,8 @@ "es": "Se movió \"{name}\" a {dest}", "fr-ca": "Déplacé « {name} » dans {dest}", "ru": "Перемещено \"{name}\" в {dest}", - "ja": "\"{name}\" を {dest} に移動しました。" + "ja": "\"{name}\" を {dest} に移動しました。", + "de": "\"{name}\" wurde nach {dest} verschoben." }, "moveResourceFailed": { "source": "Failed to move resource", @@ -184,7 +200,8 @@ "es": "No se pudo mover el recurso", "fr-ca": "Échec du déplacement de la ressource", "ru": "Не удалось переместить ресурс.", - "ja": "リソースの移動に失敗しました" + "ja": "リソースの移動に失敗しました", + "de": "Ressource konnte nicht verschoben werden" }, "moveFolderFailed": { "source": "Failed to move folder", @@ -195,7 +212,8 @@ "es": "No se pudo mover la carpeta", "fr-ca": "Impossible de déplacer le dossier", "ru": "Не удалось переместить папку.", - "ja": "フォルダの移動に失敗しました" + "ja": "フォルダの移動に失敗しました", + "de": "Ordner konnte nicht verschoben werden" }, "loadFoldersFailed": { "source": "Failed to load folders", @@ -206,7 +224,8 @@ "es": "No se pudieron cargar las carpetas", "fr-ca": "Échec du chargement des dossiers", "ru": "Не удалось загрузить папки.", - "ja": "フォルダの読み込みに失敗しました" + "ja": "フォルダの読み込みに失敗しました", + "de": "Ordner konnten nicht geladen werden" }, "loadFolderChildrenFailed": { "source": "Failed to load folder contents", @@ -217,7 +236,8 @@ "es": "No se pudo cargar el contenido de la carpeta", "fr-ca": "Impossible de charger le contenu du dossier", "ru": "Не удалось загрузить содержимое папки.", - "ja": "フォルダの内容の読み込みに失敗しました" + "ja": "フォルダの内容の読み込みに失敗しました", + "de": "Ordnerinhalt konnte nicht geladen werden" }, "createFolderFailed": { "source": "Failed to create folder", @@ -228,7 +248,8 @@ "es": "Error al crear la carpeta", "fr-ca": "Impossible de créer le dossier", "ru": "Не удалось создать папку.", - "ja": "フォルダの作成に失敗しました" + "ja": "フォルダの作成に失敗しました", + "de": "Ordner konnte nicht erstellt werden" }, "deleteFolderFailed": { "source": "Failed to delete folder", @@ -239,7 +260,8 @@ "es": "No se pudo eliminar la carpeta", "fr-ca": "Échec de la suppression du dossier", "ru": "Не удалось удалить папку.", - "ja": "フォルダの削除に失敗しました" + "ja": "フォルダの削除に失敗しました", + "de": "Ordner konnte nicht gelöscht werden" }, "loadTranslationsFailed": { "source": "Failed to load translations", @@ -250,7 +272,8 @@ "es": "No se pudieron cargar las traducciones", "fr-ca": "Impossible de charger les traductions", "ru": "Не удалось загрузить переводы.", - "ja": "翻訳の読み込みに失敗しました" + "ja": "翻訳の読み込みに失敗しました", + "de": "Übersetzungen konnten nicht geladen werden" }, "searchTranslationsFailed": { "source": "Failed to search translations", @@ -261,7 +284,8 @@ "es": "No se pudo buscar traducciones", "fr-ca": "Échec de la recherche de traductions", "ru": "Поиск переводов не удался.", - "ja": "翻訳の検索に失敗しました" + "ja": "翻訳の検索に失敗しました", + "de": "Übersetzungssuche fehlgeschlagen" }, "checkCacheStatusFailed": { "source": "Failed to check cache status", @@ -272,6 +296,7 @@ "es": "No se pudo comprobar el estado de la caché", "fr-ca": "Échec de la vérification de l'état du cache", "ru": "Не удалось проверить состояние кэша.", - "ja": "キャッシュの状態を確認できませんでした" + "ja": "キャッシュの状態を確認できませんでした", + "de": "Cache-Statusprüfung fehlgeschlagen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/toast/tracker_meta.json b/apps/tracker/src/i18n/browser/toast/tracker_meta.json index 42204318..7c302dd7 100644 --- a/apps/tracker/src/i18n/browser/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/toast/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "567229e0a6700867940999093ce6c150", "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", "status": "translated" + }, + "de": { + "checksum": "b32999852b549dbfc75820c8d5fcd08f", + "baseChecksum": "efc1a46f7b47e4d3cf60f13b6c89069b", + "status": "translated" } }, "copyFailed": { @@ -47,6 +52,11 @@ "checksum": "a3be8780485e9d6cb6ac1b61fe24e2cb", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "de": { + "checksum": "eee387fa8f8f8ee4d3446cfe9fcfe545", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "resourceDeleted": { @@ -72,6 +82,11 @@ "checksum": "ed7e19297885ad43185af933ad4b591a", "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", "status": "translated" + }, + "de": { + "checksum": "01add228d99d5268a74a240634554bf0", + "baseChecksum": "b9dceafaee589a43841583ca0adf0f8a", + "status": "translated" } }, "deleteFailed": { @@ -97,6 +112,11 @@ "checksum": "65c480803307a8e07e3d746049e9a2c9", "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", "status": "translated" + }, + "de": { + "checksum": "33f6079675ae8a0fc74b6e5ac4422fc0", + "baseChecksum": "ca16c7c92425038d9b8b85c10763a3f4", + "status": "translated" } }, "translateFailed": { @@ -122,6 +142,11 @@ "checksum": "83f4cb2702bdddf2fb205fa75e256699", "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", "status": "translated" + }, + "de": { + "checksum": "bdc34d732fffcb7d131ecfa96383e84d", + "baseChecksum": "45df2fc42204ed770ef53245a8361e7c", + "status": "translated" } }, "translationUpdated": { @@ -147,6 +172,11 @@ "checksum": "fee19bc8be44363a06fa197fa44bc1c1", "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", "status": "translated" + }, + "de": { + "checksum": "8c31e1d50dde54c5c41f0979ab13a923", + "baseChecksum": "9b49c277e489463f1ef5a98e51b6bf7a", + "status": "translated" } }, "localeTranslated": { @@ -172,6 +202,11 @@ "checksum": "d8d473fa85d270c7dc402ed06e3512ab", "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", "status": "translated" + }, + "de": { + "checksum": "f10f6d0c2553c0b49ffcf9947b89c86f", + "baseChecksum": "f46fd3b7fe7b9890ffa12a9a942374d5", + "status": "translated" } }, "localesTranslatedX": { @@ -197,6 +232,11 @@ "checksum": "a89ae0122ac838d74151d8fdc99b0f41", "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", "status": "translated" + }, + "de": { + "checksum": "2634193f03a7466b10997efff1144378", + "baseChecksum": "5b843fe3323928bdd2c3412679c86ff7", + "status": "translated" } }, "allLocalesUpToDate": { @@ -222,6 +262,11 @@ "checksum": "4babafabb40626c8ba9b8c1ac9e46e42", "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", "status": "translated" + }, + "de": { + "checksum": "c3fe3e809216d73b0ea37b27fefb2718", + "baseChecksum": "d2e14c662112dbc29340558b10c0c2f1", + "status": "translated" } }, "skippedLocalesX": { @@ -247,6 +292,11 @@ "checksum": "38a1151aec569dbf7cca1278a65ca866", "baseChecksum": "12a69e024b35f9a21939d29f767e0821", "status": "translated" + }, + "de": { + "checksum": "6f4f5ba950d24835cd8ea53bdc4b128b", + "baseChecksum": "12a69e024b35f9a21939d29f767e0821", + "status": "translated" } }, "resourceCreated": { @@ -272,6 +322,11 @@ "checksum": "621251f5001e39bcce4c88ab48dafaa6", "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", "status": "translated" + }, + "de": { + "checksum": "33122f102a53bb0f1c6723ab8a017f69", + "baseChecksum": "b2d6f92f9f0cb77d851b3aa960acb05d", + "status": "translated" } }, "autoTranslationSkippedX": { @@ -297,6 +352,11 @@ "checksum": "b702c32653d30d3b174ade0acc4c0d1c", "baseChecksum": "760c64588bcdc219130e6209f46db428", "status": "translated" + }, + "de": { + "checksum": "a26cad4d493f9b67e212566ad08ea7c8", + "baseChecksum": "760c64588bcdc219130e6209f46db428", + "status": "translated" } }, "resourceAlreadyInFolder": { @@ -322,6 +382,11 @@ "checksum": "03360edfbb1d351e04a12caaa6b4f0a7", "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", "status": "translated" + }, + "de": { + "checksum": "d30c1594f697d5060c0fad9d268447a2", + "baseChecksum": "1c1333bc0019d4cf30f4a561ab5b371e", + "status": "translated" } }, "resourceMovedX": { @@ -347,6 +412,11 @@ "checksum": "b9747d860acd91f2caeacf54b50aa10f", "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", "status": "translated" + }, + "de": { + "checksum": "3a9da16c7daeb348353271c47698c981", + "baseChecksum": "ce40eefa32c87be1fc1a51d276eeb2a0", + "status": "translated" } }, "folderAlreadyAtLocation": { @@ -372,6 +442,11 @@ "checksum": "1c280dce184bc9507906e14f5d58e70a", "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", "status": "translated" + }, + "de": { + "checksum": "0bc771bfa6e7b1124f6cf73e70595e60", + "baseChecksum": "b619e21511fa7943627eaaa33b976d8a", + "status": "translated" } }, "folderMovedX": { @@ -397,6 +472,11 @@ "checksum": "85b8f85868a900049b2b053d2f358252", "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", "status": "translated" + }, + "de": { + "checksum": "ae0f094e1d7fd5480dd72bbc8757cd2d", + "baseChecksum": "e1ad81924f3ed1eec2bc567968949971", + "status": "translated" } }, "moveResourceFailed": { @@ -422,6 +502,11 @@ "checksum": "0ca4fd45835da010826489a941689033", "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", "status": "translated" + }, + "de": { + "checksum": "dfbf578be8c99a40893fd3a8ea698a41", + "baseChecksum": "d7e32b8caa55d48161461d5cc8b7ac96", + "status": "translated" } }, "moveFolderFailed": { @@ -447,6 +532,11 @@ "checksum": "196bfc492480dc88d3629161a5b12a07", "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", "status": "translated" + }, + "de": { + "checksum": "3d66fd04dc0a47daa2061f3c7beda2aa", + "baseChecksum": "65f31a3448a52e23c12b3140f0bb722f", + "status": "translated" } }, "loadFoldersFailed": { @@ -472,6 +562,11 @@ "checksum": "851684cb4047dee5dc52c288ce2e6c5f", "baseChecksum": "5066e552105a8542039601e3df9b26c8", "status": "translated" + }, + "de": { + "checksum": "0382001703b16a0740b074132654bc3c", + "baseChecksum": "5066e552105a8542039601e3df9b26c8", + "status": "translated" } }, "loadFolderChildrenFailed": { @@ -497,6 +592,11 @@ "checksum": "9306c7d6e961819940e1c6583167cfe8", "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", "status": "translated" + }, + "de": { + "checksum": "55f27cead152bb92a029c7a1924c77e3", + "baseChecksum": "5781e96b921ead1d96ae579c13a1db41", + "status": "translated" } }, "createFolderFailed": { @@ -522,6 +622,11 @@ "checksum": "653707d6996bec51f6bbd51b29d7aee7", "baseChecksum": "398dff483997d01292f5848d5f78e409", "status": "translated" + }, + "de": { + "checksum": "7cbd86dab907a1f49ee0fcf5ea2ac8e2", + "baseChecksum": "398dff483997d01292f5848d5f78e409", + "status": "translated" } }, "deleteFolderFailed": { @@ -547,6 +652,11 @@ "checksum": "7b0bd7e619dd498dac3d246131c18b6a", "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", "status": "translated" + }, + "de": { + "checksum": "ebbb3bde16388d8d91b91db2e1ec8cc4", + "baseChecksum": "f0a2fda292f25e75c594d8497d81151d", + "status": "translated" } }, "loadTranslationsFailed": { @@ -572,6 +682,11 @@ "checksum": "5a7c357a2dce728b5b7b92beee873151", "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", "status": "translated" + }, + "de": { + "checksum": "ca42f67bc440f2afd34ea934c04567cd", + "baseChecksum": "aa4bb30ab9d42c5b447f978775d08b81", + "status": "translated" } }, "searchTranslationsFailed": { @@ -597,6 +712,11 @@ "checksum": "0dda7860a9bbfab0b96d9291d72cf9c4", "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", "status": "translated" + }, + "de": { + "checksum": "2c84d8dc394a3d8545d97f1cf08ec1ce", + "baseChecksum": "fb7a3ff2067a6021abacc204764deb27", + "status": "translated" } }, "checkCacheStatusFailed": { @@ -622,6 +742,11 @@ "checksum": "0c38c42a7b104d56898638166bf15cb1", "baseChecksum": "c36227ebfa47873e719514df95f28888", "status": "translated" + }, + "de": { + "checksum": "043e0595853efd4798f7578c1d256a91", + "baseChecksum": "c36227ebfa47873e719514df95f28888", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/tracker_meta.json b/apps/tracker/src/i18n/browser/tracker_meta.json index 1a919474..3bba03d4 100644 --- a/apps/tracker/src/i18n/browser/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "826da54bd00eb095a391f518f9241381", "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", "status": "translated" + }, + "de": { + "checksum": "f4663967ea5bc4f80db9cdadde1d909e", + "baseChecksum": "b09a15708fbea9ef383087bf01b4f47f", + "status": "translated" } }, "filterFolders": { @@ -47,6 +52,11 @@ "checksum": "5fcf227d8db466f32f42733156da35e1", "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", "status": "translated" + }, + "de": { + "checksum": "f6ec990c320763ced1735ca79fbc62fc", + "baseChecksum": "4e0bb967b51a78b8b8ba8c6417045ca3", + "status": "translated" } }, "loadingFolders": { @@ -72,6 +82,11 @@ "checksum": "b5dabea2eb0cea29b27b97dbf2407923", "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", "status": "translated" + }, + "de": { + "checksum": "0a8d3fa12f6f295b4971335e1a363d35", + "baseChecksum": "eed63f5e6c0eed3660954f4db33c341d", + "status": "translated" } }, "noFoldersMatchSearch": { @@ -97,6 +112,11 @@ "checksum": "216553c9108f0e0516a4de96430bd572", "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", "status": "translated" + }, + "de": { + "checksum": "76b28c2950fd0afb69d342ab9edfe939", + "baseChecksum": "98103e256bcf8b8d056c6c57e182af94", + "status": "translated" } }, "noFoldersFound": { @@ -122,6 +142,11 @@ "checksum": "d20464ad8dd7a7fa6ab1ad8eaebab662", "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", "status": "translated" + }, + "de": { + "checksum": "9ebe46a9e014a1bb67148ca721ab5f44", + "baseChecksum": "1d4fc1a925ee14980d2465e73cfcbd8b", + "status": "translated" } }, "clickToLoad": { @@ -147,6 +172,11 @@ "checksum": "753b3a43383a36cbbfe5dca93544d005", "baseChecksum": "73c67a917acc1f58d962462b80209a2d", "status": "translated" + }, + "de": { + "checksum": "4e9e29c46ac207845b4b9cdb89439bfc", + "baseChecksum": "73c67a917acc1f58d962462b80209a2d", + "status": "translated" } }, "loadingCollectionConfiguration": { @@ -172,6 +202,11 @@ "checksum": "b5045b5c8ccce22507cdd309cea075dc", "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", "status": "translated" + }, + "de": { + "checksum": "dc18f6721c03afc88f400fc78a934b2d", + "baseChecksum": "8f859dd0cadf2db6737aa2340aceac45", + "status": "translated" } }, "loadingTranslations": { @@ -197,6 +232,11 @@ "checksum": "abc27a8d5e2687c524c2d8952d5dc814", "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", "status": "translated" + }, + "de": { + "checksum": "7aa2529f4eb106b2cdf2e21894a666ce", + "baseChecksum": "a20f347327bc7ebdad2e167fdd8fd389", + "status": "translated" } }, "noTranslationsFoundInFolder": { @@ -222,6 +262,11 @@ "checksum": "5804cbd021df71d58e6abdb672a54214", "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", "status": "translated" + }, + "de": { + "checksum": "d3497a4ed0488ac3d8e5adabed054cc1", + "baseChecksum": "b0537eb5b23d6c452ec6844ab366473c", + "status": "translated" } }, "searchTranslations": { @@ -247,6 +292,11 @@ "checksum": "a08e08bcd107b1987fc75bcfcc06d088", "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", "status": "translated" + }, + "de": { + "checksum": "857cf95089cd7bd5df4cad85b0c01dc9", + "baseChecksum": "665bc5147e529958fe65fecdbed4ebe4", + "status": "translated" } }, "showingSearchResultsForX": { @@ -272,6 +322,11 @@ "checksum": "2d11da26c6236435857b7c04a6974b78", "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", "status": "translated" + }, + "de": { + "checksum": "094f5904680816444ce5479fddcfeca8", + "baseChecksum": "80bc1784503c24bf76c6291216ff6bf2", + "status": "translated" } }, "clearSearch": { @@ -297,6 +352,11 @@ "checksum": "2b4c324620a1bbb4bb69b5c878b817f8", "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", "status": "translated" + }, + "de": { + "checksum": "ff36602c0d2eb517aeeff170649f45dd", + "baseChecksum": "9b39ba5cc7e59ddc8fc7b5c371d0db67", + "status": "translated" } }, "noFolderSelected": { @@ -322,6 +382,11 @@ "checksum": "a451284da105a6a43b836b542ea3fe6d", "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", "status": "translated" + }, + "de": { + "checksum": "804ac30a828b033c7d81ef57d2da04dc", + "baseChecksum": "c6dafc9139d28bfba06ab787b68a03e4", + "status": "translated" } }, "addTranslationButton": { @@ -347,6 +412,11 @@ "checksum": "1ed69309dc713cdd954e5288f6af6cb2", "baseChecksum": "cb00aa2dec0df9333114919825e4883b", "status": "translated" + }, + "de": { + "checksum": "1ab31f8633950df62d5baae1528f9b07", + "baseChecksum": "cb00aa2dec0df9333114919825e4883b", + "status": "translated" } }, "sortAscending": { @@ -372,6 +442,11 @@ "checksum": "0f4cb7f9d1776c7b209e278dcdc769f0", "baseChecksum": "bc01377158f11789893c21fac7a21477", "status": "translated" + }, + "de": { + "checksum": "ac2f6a4c3080be3df2281d2cc4166f95", + "baseChecksum": "bc01377158f11789893c21fac7a21477", + "status": "translated" } }, "sortDescending": { @@ -397,6 +472,11 @@ "checksum": "2166a8d2c8d100de97fdc0864f2784d8", "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", "status": "translated" + }, + "de": { + "checksum": "168e3a586d90aecb7ded2b9cacb5e261", + "baseChecksum": "acc4a932d537143388dfc72a8c5ec2b9", + "status": "translated" } }, "sortAscendingTooltip": { @@ -422,6 +502,11 @@ "checksum": "1e31674cda89acfc45e3c2783a9e4d60", "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", "status": "translated" + }, + "de": { + "checksum": "12691a65c81dd0ccadba1865a65c2386", + "baseChecksum": "153ebaf4ed71cc3878ef37acd79e6979", + "status": "translated" } }, "sortDescendingTooltip": { @@ -447,6 +532,11 @@ "checksum": "1dacc5dc70f308a5805a13f5723db6f4", "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", "status": "translated" + }, + "de": { + "checksum": "ecd386beee6073fef3212fd11904c6e3", + "baseChecksum": "45bacec41cc0c3735415f3e76813f41d", + "status": "translated" } }, "selectFolderFirst": { @@ -472,6 +562,11 @@ "checksum": "9586322b0e1c3ac2016a8878266fde6e", "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", "status": "translated" + }, + "de": { + "checksum": "25dd264201a52111b9b20ad7d6e9b37d", + "baseChecksum": "addf30815d3754a3170b8d0d9b3f7196", + "status": "translated" } }, "addNewTranslationTooltip": { @@ -497,6 +592,11 @@ "checksum": "2bbb8dcf1c9c55839402701666ef6888", "baseChecksum": "e26fd2bf951546994a81c53bc593e520", "status": "translated" + }, + "de": { + "checksum": "4781020826316a9ecbf4396f8c9e6b45", + "baseChecksum": "e26fd2bf951546994a81c53bc593e520", + "status": "translated" } }, "noTranslation": { @@ -522,6 +622,11 @@ "checksum": "bc42db0a02f61c45c64c3a56b158aa6b", "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", "status": "translated" + }, + "de": { + "checksum": "be51d61fab92bba1ba2890b5a9ec6502", + "baseChecksum": "2856a7719f0542b5e808fa7baa1d6c93", + "status": "translated" } }, "commentPrefix": { @@ -547,6 +652,11 @@ "checksum": "ed114a48e97e3ec41713209a0c66b9f8", "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", "status": "translated" + }, + "de": { + "checksum": "4b097715317ccc915985b3527a068f3a", + "baseChecksum": "240f3031f25601fa128bd4e15f0a37de", + "status": "translated" } }, "toggleExpansion": { @@ -572,6 +682,11 @@ "checksum": "40786f814610f633f1b322b0caf01025", "baseChecksum": "a600b0cbba3359d934a659341e5b727b", "status": "translated" + }, + "de": { + "checksum": "0481a68c4e2090ddb31725d7542181d9", + "baseChecksum": "a600b0cbba3359d934a659341e5b727b", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json index ec670390..c740d72f 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json @@ -8,7 +8,8 @@ "es": "Sin comentarios añadidos", "fr-ca": "Aucun commentaire ajouté", "ru": "Комментарий не добавлен", - "ja": "コメントは追加されていません" + "ja": "コメントは追加されていません", + "de": "Kein Kommentar hinzugefügt" }, "message": { "source": "Comments help other translators understand context. Are you sure you want to save without a comment?", @@ -19,7 +20,8 @@ "es": "Los comentarios ayudan a otros traductores a comprender el contexto. ¿Seguro que quieres guardar sin comentarios?", "fr-ca": "Les commentaires aident les autres traducteurs à comprendre le contexte. Voulez-vous vraiment enregistrer sans commentaire ?", "ru": "Комментарии помогают другим переводчикам понять контекст. Вы уверены, что хотите сохранить документ без комментария?", - "ja": "コメントは他の翻訳者が文脈を理解するのに役立ちます。コメントなしで保存してもよろしいですか?" + "ja": "コメントは他の翻訳者が文脈を理解するのに役立ちます。コメントなしで保存してもよろしいですか?", + "de": "Kommentare helfen anderen Übersetzern, den Kontext zu verstehen. Möchten Sie die Datei wirklich ohne Kommentar speichern?" }, "saveAnyway": { "source": "Save Anyway", @@ -30,7 +32,8 @@ "es": "Guardar de todos modos", "fr-ca": "Sauvegarder quand même", "ru": "В любом случае сохранить", - "ja": "とにかく保存する" + "ja": "とにかく保存する", + "de": "Trotzdem speichern" }, "addComment": { "source": "Add Comment", @@ -41,6 +44,7 @@ "es": "Añadir comentario", "fr-ca": "Ajouter un commentaire", "ru": "Добавить комментарий", - "ja": "コメントを追加" + "ja": "コメントを追加", + "de": "Kommentar hinzufügen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json index 6769886b..bcca4715 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8422c999f7ca634b16fb41454b36cfca", "baseChecksum": "530d98327e030fcb737f5821d32684f4", "status": "translated" + }, + "de": { + "checksum": "43cf190ade83de9432e03faf60026840", + "baseChecksum": "530d98327e030fcb737f5821d32684f4", + "status": "translated" } }, "message": { @@ -47,6 +52,11 @@ "checksum": "2d5750a29bf55220f1e6685c2bd435f4", "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", "status": "translated" + }, + "de": { + "checksum": "5e9bd3c52ba462d8eb541d1fef01185a", + "baseChecksum": "5bd6562c61ffbb16b723bdaad497a7fe", + "status": "translated" } }, "saveAnyway": { @@ -72,6 +82,11 @@ "checksum": "0ceece09d9645df4510d92c685f5ad61", "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", "status": "translated" + }, + "de": { + "checksum": "71af06e4f7eb515af230b767ac31469c", + "baseChecksum": "8e4d177015b856fc0864fea051e6ad57", + "status": "translated" } }, "addComment": { @@ -97,6 +112,11 @@ "checksum": "49c9ea90a9ab1f73d3cd2c0626430d9a", "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", "status": "translated" + }, + "de": { + "checksum": "e1ac8fee45f0845f898ea93429d147fd", + "baseChecksum": "a508cd6ee07b35ea8efdf98d6520ce83", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json index 1e525593..93530fd5 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json @@ -8,7 +8,8 @@ "es": "La clave de traducción ya existe", "fr-ca": "La clé de traduction existe déjà.", "ru": "Ключ перевода уже существует", - "ja": "翻訳キーは既に存在します" + "ja": "翻訳キーは既に存在します", + "de": "Übersetzungsschlüssel existiert bereits" }, "messageX": { "source": "The translation key \"{key}\" already exists in this collection. Would you like to edit the existing translation or choose a different key?", @@ -19,7 +20,8 @@ "es": "La clave de traducción \"{key}\" ya existe en esta colección. ¿Desea editar la traducción existente o elegir una clave diferente?", "fr-ca": "La clé de traduction « {key} » existe déjà dans cette collection. Souhaitez-vous modifier la traduction existante ou choisir une autre clé ?", "ru": "Ключ перевода \"{key}\" уже существует в этой коллекции. Хотите отредактировать существующий перевод или выбрать другой ключ?", - "ja": "翻訳キー「{key}」は既にこのコレクションに存在します。既存の翻訳を編集しますか、それとも別のキーを選択しますか?" + "ja": "翻訳キー「{key}」は既にこのコレクションに存在します。既存の翻訳を編集しますか、それとも別のキーを選択しますか?", + "de": "Der Übersetzungsschlüssel \"{key}\" ist in dieser Sammlung bereits vorhanden. Möchten Sie die bestehende Übersetzung bearbeiten oder einen anderen Schlüssel auswählen?" }, "editExisting": { "source": "Edit Existing", @@ -30,7 +32,8 @@ "es": "Editar existente", "fr-ca": "Modifier l'existant", "ru": "Редактировать существующий", - "ja": "既存のものを編集する" + "ja": "既存のものを編集する", + "de": "Vorhandenen bearbeiten" }, "chooseDifferentKey": { "source": "Choose Different Key", @@ -41,6 +44,7 @@ "es": "Elija una clave diferente", "fr-ca": "Choisir une autre clé", "ru": "Выберите другой ключ", - "ja": "別のキーを選択してください" + "ja": "別のキーを選択してください", + "de": "Wählen Sie eine andere Taste" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json index 9e6fa7fd..9cf018b2 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "eae01e38b9130eda454eee100fa18b6d", "baseChecksum": "045a806cdff0da04ef93312480a9934e", "status": "translated" + }, + "de": { + "checksum": "71b9781d6fef7ddabc479f3e13cb9c02", + "baseChecksum": "045a806cdff0da04ef93312480a9934e", + "status": "translated" } }, "messageX": { @@ -47,6 +52,11 @@ "checksum": "d4ed5eccd890b1df12a412e06953ac19", "baseChecksum": "765a0106f27fce3620418e6a5afece18", "status": "translated" + }, + "de": { + "checksum": "e812e78f3e137e2471b0396575ec61e1", + "baseChecksum": "765a0106f27fce3620418e6a5afece18", + "status": "translated" } }, "editExisting": { @@ -72,6 +82,11 @@ "checksum": "85ca194852efd9073f380df903e2f608", "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", "status": "translated" + }, + "de": { + "checksum": "5a55ef33a6234ff36d6a386da6ab2336", + "baseChecksum": "b44e9a9caec20a27fc82ac2a7574639a", + "status": "translated" } }, "chooseDifferentKey": { @@ -97,6 +112,11 @@ "checksum": "391ea33afe4c7850f21ab4aab09ff836", "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", "status": "translated" + }, + "de": { + "checksum": "b15777d65f74a76f6e45fe581a06a942", + "baseChecksum": "5275ecd41038dd5cab36ac1d387e95aa", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json index fa572272..d25910fe 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json @@ -8,7 +8,8 @@ "es": "No se puede actualizar: faltan datos del recurso", "fr-ca": "Impossible de mettre à jour : les données de ressources sont manquantes.", "ru": "Невозможно обновить: отсутствуют данные ресурса.", - "ja": "更新できません: リソースデータが不足しています" + "ja": "更新できません: リソースデータが不足しています", + "de": "Aktualisierung fehlgeschlagen: Ressourcendaten fehlen" }, "keyRenamingNotSupported": { "source": "Key renaming is not yet supported. Please use the same key or create a new resource.", @@ -19,7 +20,8 @@ "es": "Aún no se admite el cambio de nombre de clave. Utilice la misma clave o cree un nuevo recurso.", "fr-ca": "Le renommage des clés n'est pas encore pris en charge. Veuillez utiliser la même clé ou créer une nouvelle ressource.", "ru": "Функция переименования ключей пока не поддерживается. Пожалуйста, используйте тот же ключ или создайте новый ресурс.", - "ja": "キー名の変更はまだサポートされていません。同じキーを使用するか、新しいリソースを作成してください。" + "ja": "キー名の変更はまだサポートされていません。同じキーを使用するか、新しいリソースを作成してください。", + "de": "Das Umbenennen von Schlüsseln wird noch nicht unterstützt. Bitte verwenden Sie denselben Schlüssel oder erstellen Sie eine neue Ressource." }, "notFound": { "source": "Resource not found. It may have been deleted.", @@ -30,7 +32,8 @@ "es": "Recurso no encontrado. Es posible que se haya eliminado.", "fr-ca": "Ressource introuvable. Elle a peut-être été supprimée.", "ru": "Ресурс не найден. Возможно, он был удален.", - "ja": "リソースが見つかりません。削除された可能性があります。" + "ja": "リソースが見つかりません。削除された可能性があります。", + "de": "Ressource nicht gefunden. Sie wurde möglicherweise gelöscht." }, "invalidRequest": { "source": "Invalid request", @@ -41,7 +44,8 @@ "es": "Solicitud no válida", "fr-ca": "Requête invalide", "ru": "Неверный запрос", - "ja": "無効なリクエスト" + "ja": "無効なリクエスト", + "de": "Ungültige Anfrage" }, "createFailed": { "source": "Failed to create translation", @@ -52,7 +56,8 @@ "es": "No se pudo crear la traducción", "fr-ca": "Échec de la traduction", "ru": "Не удалось создать перевод", - "ja": "翻訳の作成に失敗しました" + "ja": "翻訳の作成に失敗しました", + "de": "Übersetzung konnte nicht erstellt werden" }, "updateFailed": { "source": "Failed to update translation", @@ -63,7 +68,8 @@ "es": "No se pudo actualizar la traducción", "fr-ca": "Échec de la mise à jour de la traduction", "ru": "Не удалось обновить перевод", - "ja": "翻訳の更新に失敗しました" + "ja": "翻訳の更新に失敗しました", + "de": "Übersetzung konnte nicht aktualisiert werden" }, "unexpected": { "source": "An unexpected error occurred", @@ -74,6 +80,7 @@ "es": "Se produjo un error inesperado", "fr-ca": "Une erreur inattendue s'est produite.", "ru": "Произошла непредвиденная ошибка.", - "ja": "予期せぬエラーが発生しました" + "ja": "予期せぬエラーが発生しました", + "de": "Es ist ein unerwarteter Fehler aufgetreten." } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json index 4a4f8208..a0de3e4d 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "d5d568690e6d54e50b191a46ec907e6e", "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", "status": "translated" + }, + "de": { + "checksum": "ca6263f4a644ae0efeb8a9c13c4dff70", + "baseChecksum": "2f84b28f0c1490dbd9252e71e4031cf2", + "status": "translated" } }, "keyRenamingNotSupported": { @@ -47,6 +52,11 @@ "checksum": "fb129524f433be0cb204402f3e85e9e1", "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", "status": "translated" + }, + "de": { + "checksum": "440299bfba3af128ac1d34ee956a2488", + "baseChecksum": "575ba68788d69e22ad6e2d4ecdb01755", + "status": "translated" } }, "notFound": { @@ -72,6 +82,11 @@ "checksum": "8dba597c97c3e2d906f1a68252f022b8", "baseChecksum": "a7e38d0533724516bbacee18834f67a5", "status": "translated" + }, + "de": { + "checksum": "ffef463ed13cd984c9ad3ff239ddf334", + "baseChecksum": "a7e38d0533724516bbacee18834f67a5", + "status": "translated" } }, "invalidRequest": { @@ -97,6 +112,11 @@ "checksum": "202965d477812eed4ee85904d9312b62", "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", "status": "translated" + }, + "de": { + "checksum": "ace9e949ddf27fcc22a226a672f51c6f", + "baseChecksum": "446b416d535ed3f547fcd653dc11d49c", + "status": "translated" } }, "createFailed": { @@ -122,6 +142,11 @@ "checksum": "b163306edd3646085650b155d84c7284", "baseChecksum": "20a64455184899c3fb2e93b4566c8860", "status": "translated" + }, + "de": { + "checksum": "e81599470a34eba2f73342a116ee4b84", + "baseChecksum": "20a64455184899c3fb2e93b4566c8860", + "status": "translated" } }, "updateFailed": { @@ -147,6 +172,11 @@ "checksum": "5e669e72e0db8ae03175cf1edb5a501e", "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", "status": "translated" + }, + "de": { + "checksum": "2713d38910a9ee049868d31c04364897", + "baseChecksum": "b3991113a051bbeb759a923bc636ad8d", + "status": "translated" } }, "unexpected": { @@ -172,6 +202,11 @@ "checksum": "08b714614a930ce585efec212bcc5581", "baseChecksum": "9789e322478c6f2d59e93d020808642a", "status": "translated" + }, + "de": { + "checksum": "e0f85585eb6819ac437502fe5c29d871", + "baseChecksum": "9789e322478c6f2d59e93d020808642a", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json index cecb7658..0ea65f74 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json @@ -8,7 +8,8 @@ "es": "Cerrar diálogo", "fr-ca": "Fermer la boîte de dialogue", "ru": "Закрыть диалог", - "ja": "ダイアログを閉じる" + "ja": "ダイアログを閉じる", + "de": "Dialog schließen" }, "translationKey": { "source": "Translation Key", @@ -19,7 +20,8 @@ "es": "Clave de traducción", "fr-ca": "Clé de traduction", "ru": "Ключ перевода", - "ja": "翻訳キー" + "ja": "翻訳キー", + "de": "Übersetzungsschlüssel" }, "keyHint": { "source": "Use only letters, numbers, underscores, and hyphens", @@ -30,7 +32,8 @@ "es": "Utilice únicamente letras, números, guiones bajos y guiones.", "fr-ca": "Utilisez seulement des lettres, des chiffres, des traits de soulignement et des tirets.", "ru": "Используйте только буквы, цифры, подчеркивания и дефисы.", - "ja": "文字、数字、アンダースコア、ハイフンのみを使用してください。" + "ja": "文字、数字、アンダースコア、ハイフンのみを使用してください。", + "de": "Verwenden Sie nur Buchstaben, Zahlen, Unterstriche und Bindestriche." }, "baseBadge": { "source": "Base", @@ -41,7 +44,8 @@ "es": "Base", "fr-ca": "Base", "ru": "База", - "ja": "ベース" + "ja": "ベース", + "de": "Base" }, "locationLabel": { "source": "Location:", @@ -52,7 +56,8 @@ "es": "Ubicación:", "fr-ca": "Emplacement :", "ru": "Расположение:", - "ja": "位置:" + "ja": "位置:", + "de": "Standort:" }, "locationTabHint": { "source": "Choose a different folder for this translation resource.", @@ -63,7 +68,8 @@ "es": "Elija una carpeta diferente para este recurso de traducción.", "fr-ca": "Choisissez un autre dossier pour cette ressource de traduction.", "ru": "Выберите другую папку для этого ресурса перевода.", - "ja": "この翻訳リソースの保存先フォルダを別のフォルダに選択してください。" + "ja": "この翻訳リソースの保存先フォルダを別のフォルダに選択してください。", + "de": "Wählen Sie einen anderen Ordner für diese Übersetzungsressource." }, "localeTranslationX": { "source": "{locale} Translation", @@ -74,7 +80,8 @@ "es": "{locale} Traducción", "fr-ca": "{locale} Traduction", "ru": "{locale} Перевод", - "ja": "{locale} 翻訳" + "ja": "{locale} 翻訳", + "de": "{locale} Übersetzung" }, "enterTranslationX": { "source": "Enter {locale} translation...", @@ -85,7 +92,8 @@ "es": "Ingrese la traducción de {locale}...", "fr-ca": "Entrez la traduction {locale}...", "ru": "Введите {locale} перевод...", - "ja": "{locale} 翻訳を入力してください..." + "ja": "{locale} 翻訳を入力してください...", + "de": "Geben Sie die Übersetzung {locale} ein..." }, "baseValueRequired": { "source": "Base translation is required", @@ -96,7 +104,8 @@ "es": "Se requiere traducción base", "fr-ca": "La traduction de base est requise", "ru": "Требуется базовый перевод.", - "ja": "基本翻訳が必要です" + "ja": "基本翻訳が必要です", + "de": "Eine Basisübersetzung ist erforderlich." }, "commentLabel": { "source": "Comment (Optional)", @@ -107,7 +116,8 @@ "es": "Comentario (opcional)", "fr-ca": "Commentaire (facultatif)", "ru": "Комментарий (необязательно)", - "ja": "コメント(任意)" + "ja": "コメント(任意)", + "de": "Kommentar (optional)" }, "commentPlaceholder": { "source": "Add context for translators...", @@ -118,7 +128,8 @@ "es": "Añadir contexto para los traductores...", "fr-ca": "Ajouter du contexte pour les traducteurs...", "ru": "Добавьте контекст для переводчиков...", - "ja": "翻訳者向けに背景情報を追加してください..." + "ja": "翻訳者向けに背景情報を追加してください...", + "de": "Kontext für Übersetzer hinzufügen..." }, "commentHint": { "source": "Provide context or instructions for translators", @@ -129,7 +140,8 @@ "es": "Proporcionar contexto o instrucciones para los traductores", "fr-ca": "Fournir un contexte ou des instructions aux traducteurs", "ru": "Предоставьте контекст или инструкции для переводчиков.", - "ja": "翻訳者向けに背景情報や指示を提供する" + "ja": "翻訳者向けに背景情報や指示を提供する", + "de": "Geben Sie Kontext oder Anweisungen für die Übersetzer an." }, "otherLocalesToggleX": { "source": "Add translations for other locales ({count} available)", @@ -140,7 +152,8 @@ "es": "Agregar traducciones para otras configuraciones regionales ({count} disponible)", "fr-ca": "Ajouter des traductions pour d'autres langues ({count} disponibles)", "ru": "Добавить переводы для других языковых версий ({count} доступны)", - "ja": "他のロケールの翻訳を追加してください({count} が利用可能です)" + "ja": "他のロケールの翻訳を追加してください({count} が利用可能です)", + "de": "Übersetzungen für weitere Gebietsschemas hinzufügen ({count} verfügbar)" }, "status": { "source": "Status", @@ -151,7 +164,8 @@ "es": "Estado", "fr-ca": "Statut", "ru": "Статус", - "ja": "状態" + "ja": "状態", + "de": "Status" }, "saving": { "source": "Saving...", @@ -162,7 +176,8 @@ "es": "Ahorro...", "fr-ca": "Économie...", "ru": "Сохранение...", - "ja": "保存中..." + "ja": "保存中...", + "de": "Speichern..." }, "editTitle": { "source": "Edit Translation", @@ -173,7 +188,8 @@ "es": "Editar traducción", "fr-ca": "Modifier la traduction", "ru": "Редактировать перевод", - "ja": "翻訳を編集する" + "ja": "翻訳を編集する", + "de": "Übersetzung bearbeiten" }, "createTitle": { "source": "Create Translation", @@ -184,7 +200,8 @@ "es": "Crear traducción", "fr-ca": "Créer une traduction", "ru": "Создать перевод", - "ja": "翻訳を作成する" + "ja": "翻訳を作成する", + "de": "Übersetzung erstellen" }, "editSubtitle": { "source": "Update translation values and metadata", @@ -195,7 +212,8 @@ "es": "Actualizar los valores de traducción y los metadatos", "fr-ca": "Mise à jour des valeurs de traduction et des métadonnées", "ru": "Обновите значения перевода и метаданные.", - "ja": "翻訳値とメタデータを更新する" + "ja": "翻訳値とメタデータを更新する", + "de": "Aktualisierung der Übersetzungswerte und Metadaten" }, "createSubtitle": { "source": "Add a new translation entry to your collection", @@ -206,7 +224,8 @@ "es": "Añade una nueva entrada de traducción a tu colección", "fr-ca": "Ajoutez une nouvelle entrée de traduction à votre collection", "ru": "Добавьте новую запись о переводе в свою коллекцию.", - "ja": "コレクションに新しい翻訳エントリを追加する" + "ja": "コレクションに新しい翻訳エントリを追加する", + "de": "Füge deiner Sammlung einen neuen Übersetzungseintrag hinzu." }, "updateButton": { "source": "Update Translation", @@ -217,7 +236,8 @@ "es": "Actualizar traducción", "fr-ca": "Mise à jour de la traduction", "ru": "Обновить перевод", - "ja": "翻訳を更新" + "ja": "翻訳を更新", + "de": "Übersetzung aktualisieren" }, "saveButton": { "source": "Save Translation", @@ -228,7 +248,8 @@ "es": "Guardar traducción", "fr-ca": "Enregistrer la traduction", "ru": "Сохранить перевод", - "ja": "翻訳を保存" + "ja": "翻訳を保存", + "de": "Übersetzung speichern" }, "keyCopied": { "source": "Similar resource key copied", @@ -239,7 +260,8 @@ "es": "Clave de recurso similar copiada", "fr-ca": "Clé de ressource similaire copiée", "ru": "Аналогичный ключ ресурса скопирован.", - "ja": "同様のリソースキーがコピーされました" + "ja": "同様のリソースキーがコピーされました", + "de": "Ähnlicher Ressourcenschlüssel kopiert" }, "copyFailed": { "source": "Failed to copy", @@ -250,7 +272,8 @@ "es": "No se pudo copiar", "fr-ca": "Échec de la copie", "ru": "Не удалось скопировать", - "ja": "コピーに失敗しました" + "ja": "コピーに失敗しました", + "de": "Kopiervorgang fehlgeschlagen" }, "keyRequired": { "source": "Translation key is required", @@ -261,7 +284,8 @@ "es": "Se requiere clave de traducción", "fr-ca": "Une clé de traduction est requise.", "ru": "Требуется ключ перевода", - "ja": "翻訳キーが必要です" + "ja": "翻訳キーが必要です", + "de": "Übersetzungsschlüssel erforderlich" }, "keyPatternError": { "source": "Only letters, numbers, underscores, and hyphens allowed", @@ -272,6 +296,7 @@ "es": "Solo se permiten letras, números, guiones bajos y guiones.", "fr-ca": "Seules les lettres, les chiffres, les traits de soulignement et les tirets sont autorisés.", "ru": "Разрешаются только буквы, цифры, подчеркивания и дефисы.", - "ja": "使用できる文字は、英字、数字、アンダースコア、ハイフンのみです。" + "ja": "使用できる文字は、英字、数字、アンダースコア、ハイフンのみです。", + "de": "Nur Buchstaben, Zahlen, Unterstriche und Bindestriche sind erlaubt." } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json index ea0ce627..4359a95c 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json @@ -8,7 +8,8 @@ "es": "Información básica", "fr-ca": "Informations de base", "ru": "Базовая информация", - "ja": "基本情報" + "ja": "基本情報", + "de": "Basisinformationen" }, "changeLocation": { "source": "Change Location", @@ -19,7 +20,8 @@ "es": "Cambiar ubicación", "fr-ca": "Changer d'emplacement", "ru": "Изменить местоположение", - "ja": "場所を変更する" + "ja": "場所を変更する", + "de": "Standort ändern" }, "otherLocales": { "source": "Other Locales", @@ -30,6 +32,7 @@ "es": "Otros lugares", "fr-ca": "Autres localités", "ru": "Другие населенные пункты", - "ja": "その他の地域" + "ja": "その他の地域", + "de": "Andere Orte" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json index 6a1ed38b..adf07f4b 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "1ea1bc9ca57838426391b54659ec0235", "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", "status": "translated" + }, + "de": { + "checksum": "9ea673b3bd066bb5b0cb547eeaed96b2", + "baseChecksum": "f0c1c6dcc3cd228eb523f5809d39878e", + "status": "translated" } }, "changeLocation": { @@ -47,6 +52,11 @@ "checksum": "1b8bf802cd4b26490f8d9ea9033c1b10", "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", "status": "translated" + }, + "de": { + "checksum": "37b9b091bf44c29f032ce905da6fd10f", + "baseChecksum": "6dd495f1c2ae29c8e9a6c4405f18e22e", + "status": "translated" } }, "otherLocales": { @@ -72,6 +82,11 @@ "checksum": "5d191996e0ef3a0e2d45658ad517e8c1", "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", "status": "translated" + }, + "de": { + "checksum": "01a98b4b9cfdd78d96ce093d75f2efe6", + "baseChecksum": "aca1284fedfa7431bb8a9dc0b59fe6c6", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json index e8f4cc9e..cd1a5664 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "1198f0cc49d5b11d45c557bf14464b39", "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", "status": "translated" + }, + "de": { + "checksum": "db286f6c48854edd1dc4d23d2621ab42", + "baseChecksum": "3c62b9dcfe365792b2fbb6e15dc82c80", + "status": "translated" } }, "translationKey": { @@ -47,6 +52,11 @@ "checksum": "ad653346ad1c2bf5be218a569429dafa", "baseChecksum": "482823ac52ef47827d3f18f259387366", "status": "translated" + }, + "de": { + "checksum": "70cd2f99392575c8bc14d4cf46d9ef9a", + "baseChecksum": "482823ac52ef47827d3f18f259387366", + "status": "translated" } }, "keyHint": { @@ -72,6 +82,11 @@ "checksum": "838d654d1155ba342ba1f05995265764", "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", "status": "translated" + }, + "de": { + "checksum": "9cff025ed420cce9d77d59fbec08f519", + "baseChecksum": "a150213ebef4acd1123fc4f76b89141d", + "status": "translated" } }, "baseBadge": { @@ -97,6 +112,11 @@ "checksum": "f8ccaf5926eb52b58809ea1a6481bba2", "baseChecksum": "095a1b43effec73955e31e790438de49", "status": "translated" + }, + "de": { + "checksum": "095a1b43effec73955e31e790438de49", + "baseChecksum": "095a1b43effec73955e31e790438de49", + "status": "translated" } }, "locationLabel": { @@ -122,6 +142,11 @@ "checksum": "4c856befb87ffa52b70b527023d634d4", "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", "status": "translated" + }, + "de": { + "checksum": "527d181f9e73d18b872ffea9d7af6544", + "baseChecksum": "3a5b0a31626f29a78e12e995e0428fbb", + "status": "translated" } }, "locationTabHint": { @@ -147,6 +172,11 @@ "checksum": "16b48a57e9983e810366f033cd23422c", "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", "status": "translated" + }, + "de": { + "checksum": "6606f1a308e6297887adc1f1bb89f533", + "baseChecksum": "d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9", + "status": "translated" } }, "localeTranslationX": { @@ -172,6 +202,11 @@ "checksum": "5325b66f18cc4eb7baa08543e6e50008", "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", "status": "translated" + }, + "de": { + "checksum": "490b3e6a8d4bcb11ea1a2b7d20e23d2b", + "baseChecksum": "06c8a0c2ef0476880f67ff4230e593b4", + "status": "translated" } }, "enterTranslationX": { @@ -197,6 +232,11 @@ "checksum": "f8df8394699f29d7ee64a8b57e40bb87", "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", "status": "translated" + }, + "de": { + "checksum": "d984a7f236ba7c53301a18cef5170eda", + "baseChecksum": "831af3e4fbd2ef1d6685bb25b9373509", + "status": "translated" } }, "baseValueRequired": { @@ -222,6 +262,11 @@ "checksum": "e1f23a927b1fe254bb5ce734809ce3f9", "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", "status": "translated" + }, + "de": { + "checksum": "00c5e39e50c93a6dc0c29425b03d0fe4", + "baseChecksum": "51f066cb9c94152ad9096f4ceeaea6f3", + "status": "translated" } }, "commentLabel": { @@ -247,6 +292,11 @@ "checksum": "6386c833772eb5bbd9b351816b8609ba", "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", "status": "translated" + }, + "de": { + "checksum": "4cac0bd545991c45f894df028deeb506", + "baseChecksum": "3b45c3cd1875b697361bb48eee5c815d", + "status": "translated" } }, "commentPlaceholder": { @@ -272,6 +322,11 @@ "checksum": "35cd45233f06236bdf391a00c1fded6b", "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", "status": "translated" + }, + "de": { + "checksum": "e43350b1f44582905f1cd89d1f94f9d6", + "baseChecksum": "04627d882217f6ca0b5db70ab11645bd", + "status": "translated" } }, "commentHint": { @@ -297,6 +352,11 @@ "checksum": "2e8eeeb380e984cdcccd9de325bdf498", "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", "status": "translated" + }, + "de": { + "checksum": "81dbe7fc7ae07ced1d92d2f485fb480b", + "baseChecksum": "7eec8425c820eebb9e066bede699ee5a", + "status": "translated" } }, "otherLocalesToggleX": { @@ -322,6 +382,11 @@ "checksum": "d67637567b1cf7744bbb08f2bb17901f", "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", "status": "translated" + }, + "de": { + "checksum": "32ea44efe3ca412e0ed666b3007a3057", + "baseChecksum": "bf32152e1d3fd4d222bf92e179a25a7e", + "status": "translated" } }, "status": { @@ -347,6 +412,11 @@ "checksum": "c70d256fb435a533d8ec2bbbcded1614", "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", "status": "translated" + }, + "de": { + "checksum": "ec53a8c4f07baed5d8825072c89799be", + "baseChecksum": "ec53a8c4f07baed5d8825072c89799be", + "status": "translated" } }, "saving": { @@ -372,6 +442,11 @@ "checksum": "2a33020e5b56902e4a5609063f5428d7", "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", "status": "translated" + }, + "de": { + "checksum": "87ed3dee318d7e79bec2e34d05d54a3c", + "baseChecksum": "575f5f86d2c7ea113c6710c1037c4465", + "status": "translated" } }, "editTitle": { @@ -397,6 +472,11 @@ "checksum": "68977133e365bb4aabaa769438bbd99b", "baseChecksum": "305253475cc868103805068f45a90468", "status": "translated" + }, + "de": { + "checksum": "fe65d49ee802525c78ef798bbf7fa7ff", + "baseChecksum": "305253475cc868103805068f45a90468", + "status": "translated" } }, "createTitle": { @@ -422,6 +502,11 @@ "checksum": "171e5294db84907dcb90354c51dda198", "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", "status": "translated" + }, + "de": { + "checksum": "52279682a6da0375eca2ee0189703aa1", + "baseChecksum": "dabf3cb410b22a2cd138d2ebe54717b1", + "status": "translated" } }, "editSubtitle": { @@ -447,6 +532,11 @@ "checksum": "524e3e2cae828d746543516784ca8e59", "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", "status": "translated" + }, + "de": { + "checksum": "17663fb242b32e9ae73255c778cc9513", + "baseChecksum": "d28295dc73579f448ff1c671d3bb8a21", + "status": "translated" } }, "createSubtitle": { @@ -472,6 +562,11 @@ "checksum": "9cff0b30b42d5a2e7c813a494c3cafd1", "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", "status": "translated" + }, + "de": { + "checksum": "39b82c77eb9f900eb19a9fec1f1a38d8", + "baseChecksum": "78d0cb0cae838471875c9ddca9da020c", + "status": "translated" } }, "updateButton": { @@ -497,6 +592,11 @@ "checksum": "1540d03eec10bf998ff2bb5e35a24073", "baseChecksum": "e8d2af23aa47989c080ffc7252646485", "status": "translated" + }, + "de": { + "checksum": "18c445c51e69f22062658cebff3c2818", + "baseChecksum": "e8d2af23aa47989c080ffc7252646485", + "status": "translated" } }, "saveButton": { @@ -522,6 +622,11 @@ "checksum": "b0b41dcc457c3d6888856ad2784a5114", "baseChecksum": "d503198287eeadd483ae40abef48027a", "status": "translated" + }, + "de": { + "checksum": "ccaa8b7bda6ec28440fd197f582fdb63", + "baseChecksum": "d503198287eeadd483ae40abef48027a", + "status": "translated" } }, "keyCopied": { @@ -547,6 +652,11 @@ "checksum": "c7bda30afa60f8e97716d6dd6733d296", "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", "status": "translated" + }, + "de": { + "checksum": "1a9062fe9c6575a321265086c4cccc21", + "baseChecksum": "c605635c89ace9747c30b35a6ce64ae5", + "status": "translated" } }, "copyFailed": { @@ -572,6 +682,11 @@ "checksum": "a3be8780485e9d6cb6ac1b61fe24e2cb", "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", "status": "translated" + }, + "de": { + "checksum": "eee387fa8f8f8ee4d3446cfe9fcfe545", + "baseChecksum": "e608b2fe7089e4fa80b73b4f9c03fb61", + "status": "translated" } }, "keyRequired": { @@ -597,6 +712,11 @@ "checksum": "77718f9d7783ee2e6cb1879121aed163", "baseChecksum": "a2f067165e800ad99feffdad954be4de", "status": "translated" + }, + "de": { + "checksum": "fcd753f4a25ac68319b2ed31a5381afc", + "baseChecksum": "a2f067165e800ad99feffdad954be4de", + "status": "translated" } }, "keyPatternError": { @@ -622,6 +742,11 @@ "checksum": "1e1b5c2f4f5aed3d88fab601e91f55f7", "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", "status": "translated" + }, + "de": { + "checksum": "bcdd26c99eee838f7b84e91bdcf7d1ac", + "baseChecksum": "a5fe09c595ead0cd466e781fc4e87dbe", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json index e4439997..74464fc5 100644 --- a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json @@ -8,7 +8,8 @@ "es": "Arrastrar para mover la traducción", "fr-ca": "Faites glisser pour déplacer la traduction", "ru": "Перетащите, чтобы переместить перевод.", - "ja": "ドラッグして翻訳を移動" + "ja": "ドラッグして翻訳を移動", + "de": "Zum Verschieben der Übersetzung ziehen" }, "copyKeyAriaLabel": { "source": "Copy key", @@ -19,7 +20,8 @@ "es": "Copiar clave", "fr-ca": "Copier la clé", "ru": "Копировать ключ", - "ja": "コピーキー" + "ja": "コピーキー", + "de": "Schlüssel kopieren" }, "hideCommentAriaLabel": { "source": "Hide comment", @@ -30,7 +32,8 @@ "es": "Ocultar comentario", "fr-ca": "Masquer le commentaire", "ru": "Скрыть комментарий", - "ja": "コメントを非表示にする" + "ja": "コメントを非表示にする", + "de": "Kommentar ausblenden" }, "showCommentAriaLabel": { "source": "Show comment", @@ -41,7 +44,8 @@ "es": "Mostrar comentario", "fr-ca": "Afficher le commentaire", "ru": "Показать комментарий", - "ja": "コメントを表示" + "ja": "コメントを表示", + "de": "Kommentar anzeigen" }, "moreActionsAriaLabel": { "source": "More actions", @@ -52,7 +56,8 @@ "es": "Más acciones", "fr-ca": "Plus d'actions", "ru": "Дополнительные действия", - "ja": "その他の操作" + "ja": "その他の操作", + "de": "Weitere Aktionen" }, "editAriaLabel": { "source": "Edit translation", @@ -63,7 +68,8 @@ "es": "Editar traducción", "fr-ca": "Modifier la traduction", "ru": "Редактировать перевод", - "ja": "翻訳を編集する" + "ja": "翻訳を編集する", + "de": "Übersetzung bearbeiten" }, "translateAriaLabel": { "source": "Translate resource", @@ -74,7 +80,8 @@ "es": "Traducir recurso", "fr-ca": "ressource de traduction", "ru": "Перевести ресурс", - "ja": "リソースを翻訳する" + "ja": "リソースを翻訳する", + "de": "Ressource übersetzen" }, "deleteAriaLabel": { "source": "Delete translation", @@ -85,7 +92,8 @@ "es": "Eliminar traducción", "fr-ca": "Supprimer la traduction", "ru": "Удалить перевод", - "ja": "翻訳を削除" + "ja": "翻訳を削除", + "de": "Übersetzung löschen" }, "noStatuses": { "source": "No statuses", @@ -96,6 +104,7 @@ "es": "Sin estados", "fr-ca": "Aucun statut", "ru": "Нет статусов", - "ja": "ステータスなし" + "ja": "ステータスなし", + "de": "Keine Statusmeldungen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json index 6d444a3e..33f3bfd6 100644 --- a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "b651e01207671b538231c80fa0d49546", "baseChecksum": "68124efca03350fd7d6da755400d15c0", "status": "translated" + }, + "de": { + "checksum": "5cfb44a9e950d50700c949248f97dbc3", + "baseChecksum": "68124efca03350fd7d6da755400d15c0", + "status": "translated" } }, "copyKeyAriaLabel": { @@ -47,6 +52,11 @@ "checksum": "40388375ca056587f52bebf7aa1c6f01", "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", "status": "translated" + }, + "de": { + "checksum": "75456b1abc45aa5521e88abf70c79831", + "baseChecksum": "819c7746f5e0a2af0fd512b5ea7ece90", + "status": "translated" } }, "hideCommentAriaLabel": { @@ -72,6 +82,11 @@ "checksum": "28da42e28fcfb4002d34b713612753d4", "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", "status": "translated" + }, + "de": { + "checksum": "8e76d8bec928869a96ce8bf9aa3154c4", + "baseChecksum": "2204356776748f7de4c06b8d0e77ff37", + "status": "translated" } }, "showCommentAriaLabel": { @@ -97,6 +112,11 @@ "checksum": "7e7a3bd986703ee6b48bfc76a415f9da", "baseChecksum": "ba109df70b5131f0f40f1726498c620e", "status": "translated" + }, + "de": { + "checksum": "9e2e52ba03ba3c051cfd9962baa285bf", + "baseChecksum": "ba109df70b5131f0f40f1726498c620e", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -122,6 +142,11 @@ "checksum": "e334d8acd386b855251c8e086546d3d4", "baseChecksum": "284716247b12b363fd6b6a71bff0918e", "status": "translated" + }, + "de": { + "checksum": "b7405e747816fecc21fc8185a08dd620", + "baseChecksum": "284716247b12b363fd6b6a71bff0918e", + "status": "translated" } }, "editAriaLabel": { @@ -147,6 +172,11 @@ "checksum": "68977133e365bb4aabaa769438bbd99b", "baseChecksum": "a7f6326fc128712ffaee83351ea67525", "status": "translated" + }, + "de": { + "checksum": "fe65d49ee802525c78ef798bbf7fa7ff", + "baseChecksum": "a7f6326fc128712ffaee83351ea67525", + "status": "translated" } }, "translateAriaLabel": { @@ -172,6 +202,11 @@ "checksum": "87d4481c4eab0e8f22b481081f8f5828", "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", "status": "translated" + }, + "de": { + "checksum": "e573db5182f49b8bf396f2918f055fd9", + "baseChecksum": "ff613241f6b08efa55b06e01aa32dcce", + "status": "translated" } }, "deleteAriaLabel": { @@ -197,6 +232,11 @@ "checksum": "ab1412c6f45b4215c15f900b24c7948e", "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", "status": "translated" + }, + "de": { + "checksum": "c6c30c0bcfe692031941e62d907577bd", + "baseChecksum": "cbad46a31c2032cd81b3c74e7ee6ce7a", + "status": "translated" } }, "noStatuses": { @@ -222,6 +262,11 @@ "checksum": "ba459d648257e215392475f073532d54", "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", "status": "translated" + }, + "de": { + "checksum": "9047977d73edfd8db3e0a2ad96cdafb9", + "baseChecksum": "7c7917a58dcd74962c36abf81de3903f", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/resource_entries.json b/apps/tracker/src/i18n/browser/translationList/resource_entries.json index 379f1518..d293bb5d 100644 --- a/apps/tracker/src/i18n/browser/translationList/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationList/resource_entries.json @@ -8,6 +8,7 @@ "es": "Lista de traducciones", "fr-ca": "Liste de traductions", "ru": "Список переводов", - "ja": "翻訳リスト" + "ja": "翻訳リスト", + "de": "Übersetzungsliste" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json index e0c9d102..04603036 100644 --- a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "a7229f7cacfc120fcd463a552a0367bb", "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", "status": "translated" + }, + "de": { + "checksum": "f2b91ddee1d777a277c342782cf52e32", + "baseChecksum": "d96ae1865ec25b9e1707839a47d5d52e", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json index 8364f3d9..42a07945 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json @@ -8,6 +8,7 @@ "es": "Buscar traducciones", "fr-ca": "Recherche de traductions", "ru": "Поиск переводов", - "ja": "翻訳を検索" + "ja": "翻訳を検索", + "de": "Übersetzungen suchen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json index fb0fd721..ec4c0c2f 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "80573c73a72040dad26c737a0c300ddf", "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", "status": "translated" + }, + "de": { + "checksum": "e37d068a8dda17731244094cd605371c", + "baseChecksum": "e3ee9f9a340e253eb5196ce7d53ae2d8", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/resource_entries.json b/apps/tracker/src/i18n/collections/card/resource_entries.json index 6683e3a3..145a366a 100644 --- a/apps/tracker/src/i18n/collections/card/resource_entries.json +++ b/apps/tracker/src/i18n/collections/card/resource_entries.json @@ -9,7 +9,8 @@ "es": "Editar colección", "fr-ca": "Modifier la collection", "ru": "Редактировать коллекцию", - "ja": "コレクションを編集" + "ja": "コレクションを編集", + "de": "Sammlung bearbeiten" }, "delete": { "source": "Delete collection", @@ -21,7 +22,8 @@ "es": "Eliminar colección", "fr-ca": "Supprimer la collection", "ru": "Удалить коллекцию", - "ja": "コレクションを削除" + "ja": "コレクションを削除", + "de": "Sammlung löschen" }, "moreActionsAriaLabel": { "source": "More actions for collection", @@ -32,6 +34,7 @@ "es": "Más acciones para la recolección", "fr-ca": "Plus d'actions pour la collecte", "ru": "Дополнительные действия для сбора", - "ja": "収集のためのその他のアクション" + "ja": "収集のためのその他のアクション", + "de": "Weitere Aktionen zur Sammlung" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/card/tracker_meta.json b/apps/tracker/src/i18n/collections/card/tracker_meta.json index a9876862..04dd2caf 100644 --- a/apps/tracker/src/i18n/collections/card/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/card/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "62c71b3f7f45a8b6da35ef6a135cc061", "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", "status": "translated" + }, + "de": { + "checksum": "f7537fa7c0c52321d16635b4085d8cd1", + "baseChecksum": "2687006ffa30f69f72187cbb690d6cc0", + "status": "translated" } }, "delete": { @@ -47,6 +52,11 @@ "checksum": "f87f76e7fdb4ade8d4a1a42261f66690", "baseChecksum": "611307b7abf62c8f6ffc374701393f29", "status": "translated" + }, + "de": { + "checksum": "6710cad93dd626ec137f04cac9ce366d", + "baseChecksum": "611307b7abf62c8f6ffc374701393f29", + "status": "translated" } }, "moreActionsAriaLabel": { @@ -72,6 +82,11 @@ "checksum": "e0313b185e9d3b4110e78b7f93aa09d6", "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", "status": "translated" + }, + "de": { + "checksum": "487d1698f0bbde9960fc27c46676cb50", + "baseChecksum": "4f46bf6697514d7744218c4a5184b8b0", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json index ebfe62dc..e96160f3 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json @@ -5,6 +5,7 @@ "es": "Crear Colección", "fr-ca": "Créer une Collection", "ru": "Создать коллекцию", - "ja": "コレクションを作成する" + "ja": "コレクションを作成する", + "de": "Sammlung erstellen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json index 5825a65a..d2374766 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "5cc609a13047f3b1cb6388fd6e9583c1", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "translated" + }, + "de": { + "checksum": "8215c35839bdf9c5fe8379112e398fa7", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json index 5634933e..b8e057de 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json @@ -5,7 +5,8 @@ "es": "Eliminar Colección", "fr-ca": "Supprimer la Collection", "ru": "Удалить коллекцию", - "ja": "コレクションを削除" + "ja": "コレクションを削除", + "de": "Sammlung löschen" }, "message": { "source": "Are you sure you want to delete {name}?", @@ -13,6 +14,7 @@ "es": "¿Estás seguro de que deseas eliminar {name}?", "fr-ca": "Êtes-vous sûr de vouloir supprimer {name}?", "ru": "Вы уверены, что хотите удалить {name}?", - "ja": "{name} を削除してもよろしいですか?" + "ja": "{name} を削除してもよろしいですか?", + "de": "Sind Sie sicher, dass Sie {name} löschen möchten?" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json index 13d07c10..7463959d 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "f87f76e7fdb4ade8d4a1a42261f66690", "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", "status": "translated" + }, + "de": { + "checksum": "6710cad93dd626ec137f04cac9ce366d", + "baseChecksum": "8cea924216e9aff75416cfe2a64e362e", + "status": "translated" } }, "message": { @@ -47,6 +52,11 @@ "checksum": "cf8190775fd35a0a75bb78b90a8a0847", "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", "status": "translated" + }, + "de": { + "checksum": "0d6f811505d1cfccc0faa35cca4b7e2c", + "baseChecksum": "df278e737e65dbbac79ec7c2ae2ea04e", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json index eedd3aaf..599e4ebd 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json @@ -5,6 +5,7 @@ "es": "Editar Colección", "fr-ca": "Modifier la Collection", "ru": "Редактировать коллекцию", - "ja": "コレクションを編集" + "ja": "コレクションを編集", + "de": "Sammlung bearbeiten" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json index 79cecf47..e3115b78 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "62c71b3f7f45a8b6da35ef6a135cc061", "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", "status": "translated" + }, + "de": { + "checksum": "f7537fa7c0c52321d16635b4085d8cd1", + "baseChecksum": "bcc40d0f321165f8d57c4185fc0357df", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/resource_entries.json index dbce5966..747954ee 100644 --- a/apps/tracker/src/i18n/collections/dialog/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/resource_entries.json @@ -5,7 +5,8 @@ "es": "Nombre de la Colección", "fr-ca": "Nom de la Collection", "ru": "Название коллекции", - "ja": "コレクション名" + "ja": "コレクション名", + "de": "Sammlungsname" }, "namePlaceholder": { "source": "e.g., my-app-i18n", @@ -13,7 +14,8 @@ "es": "ej., mi-app-i18n", "fr-ca": "p. ex., mon-app-i18n", "ru": "например, my-app-i18n", - "ja": "例:my-app-i18n" + "ja": "例:my-app-i18n", + "de": "z.B. meine-app-i18n" }, "nameRequired": { "source": "Collection name is required", @@ -21,7 +23,8 @@ "es": "El nombre de la colección es obligatorio", "fr-ca": "Le nom de la collection est requis", "ru": "Название коллекции обязательно для указания.", - "ja": "コレクション名は必須です。" + "ja": "コレクション名は必須です。", + "de": "Ein Sammlungsname ist erforderlich." }, "folderLabel": { "source": "Translations Folder", @@ -29,7 +32,8 @@ "es": "Carpeta de Traducciones", "fr-ca": "Dossier de Traductions", "ru": "Папка переводов", - "ja": "翻訳フォルダ" + "ja": "翻訳フォルダ", + "de": "Übersetzungsordner" }, "folderPlaceholder": { "source": "e.g., ./src/assets/i18n", @@ -37,7 +41,8 @@ "es": "ej., ./src/assets/i18n", "fr-ca": "p. ex., ./src/assets/i18n", "ru": "например, ./src/assets/i18n", - "ja": "例:./src/assets/i18n" + "ja": "例:./src/assets/i18n", + "de": "z. B. ./src/assets/i18n" }, "folderRequired": { "source": "Translations folder is required", @@ -45,7 +50,8 @@ "es": "La carpeta de traducciones es obligatoria", "fr-ca": "Le dossier de traductions est requis", "ru": "Необходима папка «Переводы».", - "ja": "翻訳フォルダが必要です" + "ja": "翻訳フォルダが必要です", + "de": "Der Ordner „Übersetzungen“ wird benötigt." }, "localesLabel": { "source": "Locales (Optional)", @@ -53,7 +59,8 @@ "es": "Idiomas (Opcional)", "fr-ca": "Langues (Optionnel)", "ru": "Локали (необязательно)", - "ja": "ロケール(オプション)" + "ja": "ロケール(オプション)", + "de": "Regionen (optional)" }, "localesHint": { "source": "Comma-separated list of locale codes. Leave empty to use global config.", @@ -61,7 +68,8 @@ "es": "Lista de códigos de idioma separados por comas. Dejar vacío para usar la configuración global.", "fr-ca": "Liste de codes de langue séparés par des virgules. Laisser vide pour utiliser la configuration globale.", "ru": "Список кодов локали, разделённых запятыми. Оставьте пустым, чтобы использовать глобальную конфигурацию.", - "ja": "カンマ区切りのロケールコードのリスト。グローバル設定を使用する場合は空欄のままにしてください。" + "ja": "カンマ区切りのロケールコードのリスト。グローバル設定を使用する場合は空欄のままにしてください。", + "de": "Durch Kommas getrennte Liste von Gebietsschemacodes. Leer lassen, um die globale Konfiguration zu verwenden." }, "createButton": { "source": "Create", @@ -69,7 +77,8 @@ "es": "Crear", "fr-ca": "Créer", "ru": "Создавать", - "ja": "作成する" + "ja": "作成する", + "de": "Erstellen" }, "localesPlaceholder": { "source": "e.g., en, fr, es", @@ -77,13 +86,15 @@ "es": "ej., en, fr, es", "fr-ca": "p. ex., en, fr, es", "ru": "например, en, fr, es", - "ja": "例:en、fr、es" + "ja": "例:en、fr、es", + "de": "z.B. en, fr, es" }, "createTitle": { "source": "Create Collection", "es": "Crear Colección", "fr-ca": "Créer une Collection", "ru": "Создать коллекцию", - "ja": "コレクションを作成する" + "ja": "コレクションを作成する", + "de": "Sammlung erstellen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json index 90c2a83c..d171eecd 100644 --- a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "b83a54fe9204ea7d0e91875385dea548", "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", "status": "translated" + }, + "de": { + "checksum": "4eb6b05d89f7d8b43824128653e737fb", + "baseChecksum": "8b8fc80765dd43c1c75c61077034b34e", + "status": "translated" } }, "namePlaceholder": { @@ -47,6 +52,11 @@ "checksum": "5eae9cb021611f848df6e197f9b888dd", "baseChecksum": "e02e22429e66e242217bdbbde92eb081", "status": "translated" + }, + "de": { + "checksum": "782f962a35e8cb15a981373e519011cf", + "baseChecksum": "e02e22429e66e242217bdbbde92eb081", + "status": "translated" } }, "nameRequired": { @@ -72,6 +82,11 @@ "checksum": "3875d242cda6eb205d6c87c2bd024d64", "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", "status": "translated" + }, + "de": { + "checksum": "15903d83ea1c270f780a65adc3637b6b", + "baseChecksum": "c71ef39ab61feaed8cf0a058b3bd8acd", + "status": "translated" } }, "folderLabel": { @@ -97,6 +112,11 @@ "checksum": "b4347be66c4ffab0558281d9700148c7", "baseChecksum": "cec5a0934dba090c47144036ce5101ec", "status": "translated" + }, + "de": { + "checksum": "e9aef33ec026993b01fdeffea7fa318e", + "baseChecksum": "cec5a0934dba090c47144036ce5101ec", + "status": "translated" } }, "folderPlaceholder": { @@ -122,6 +142,11 @@ "checksum": "8eb636b3b4cec411e91e81203fd101d5", "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", "status": "translated" + }, + "de": { + "checksum": "5720c9d93a11e671bf1f5a314f1bc58f", + "baseChecksum": "f5baaa6df5e234ecbd095532b592a5e3", + "status": "translated" } }, "folderRequired": { @@ -147,6 +172,11 @@ "checksum": "9f4489246407c788ec401a626ca46cd9", "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", "status": "translated" + }, + "de": { + "checksum": "c5c7ca80ec281a4e99cd8a1374296a8d", + "baseChecksum": "ccdc7033c15a7080fa1e47d82753e5da", + "status": "translated" } }, "localesLabel": { @@ -172,6 +202,11 @@ "checksum": "79905421ba1e98994f4cb50c79665120", "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", "status": "translated" + }, + "de": { + "checksum": "ad081f3209715aa4783a02d40d0ec9ad", + "baseChecksum": "978ddb4854a96b02f4d811f801f83ae3", + "status": "translated" } }, "localesHint": { @@ -197,6 +232,11 @@ "checksum": "e2f6d72247eff02a33466effbeae30b5", "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", "status": "translated" + }, + "de": { + "checksum": "a6d6d055412da5777830dda9d5166784", + "baseChecksum": "a2e783531d2fcdcf61099aad5b0e55a8", + "status": "translated" } }, "createButton": { @@ -222,6 +262,11 @@ "checksum": "3af36172e4e95863b12b4734bc2472ed", "baseChecksum": "686e697538050e4664636337cc3b834f", "status": "translated" + }, + "de": { + "checksum": "9a08cb504f9ba9dc0a3075fee8aafca0", + "baseChecksum": "686e697538050e4664636337cc3b834f", + "status": "translated" } }, "localesPlaceholder": { @@ -247,6 +292,11 @@ "checksum": "de007e952695fb6243b28a8751f94f9e", "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", "status": "translated" + }, + "de": { + "checksum": "1912e47149bcc738a7eb7a71d2ad1baa", + "baseChecksum": "b418a61851fec5c6ade8e4a34b907285", + "status": "translated" } }, "createTitle": { @@ -272,6 +322,11 @@ "checksum": "5cc609a13047f3b1cb6388fd6e9583c1", "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", "status": "translated" + }, + "de": { + "checksum": "8215c35839bdf9c5fe8379112e398fa7", + "baseChecksum": "57c313ed48acfddf01bcbf4b3e4de556", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json index 5bf88a25..c8edeed8 100644 --- a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json +++ b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json @@ -5,7 +5,8 @@ "es": "Aún no hay colecciones", "fr-ca": "Aucune collection pour l'instant", "ru": "Коллекций пока нет.", - "ja": "まだコレクションはありません" + "ja": "まだコレクションはありません", + "de": "Noch keine Sammlungen" }, "cta": { "source": "Create your first collection", @@ -13,6 +14,7 @@ "es": "Crea tu primera colección", "fr-ca": "Créez votre première collection", "ru": "Создайте свою первую коллекцию", - "ja": "最初のコレクションを作成する" + "ja": "最初のコレクションを作成する", + "de": "Erstelle deine erste Kollektion" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json index 2c03d49d..f81d5037 100644 --- a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "cefcc572a717a39f5379fbc5ac9805b6", "baseChecksum": "be7253840e621510212e49959ed1c8ad", "status": "translated" + }, + "de": { + "checksum": "74acd131136cdca46a8cdae6fec1d77b", + "baseChecksum": "be7253840e621510212e49959ed1c8ad", + "status": "translated" } }, "cta": { @@ -47,6 +52,11 @@ "checksum": "0e7020409a0670e4d9055ac48b0f5f6f", "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", "status": "translated" + }, + "de": { + "checksum": "8bf8edb0c95acaee5ef5d6ba7f1a25fd", + "baseChecksum": "5532bcc75197c54314b36ba14e5a4ce5", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json index edf556f8..ed59e25b 100644 --- a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json @@ -5,6 +5,7 @@ "es": "Este campo es obligatorio", "fr-ca": "Ce champ est requis", "ru": "Это поле обязательно к заполнению", - "ja": "この項目は必須です" + "ja": "この項目は必須です", + "de": "Dieses Feld ist erforderlich" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json index 60777061..605ed371 100644 --- a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "a95cac41d531c7f117cf634dd6333166", "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", "status": "translated" + }, + "de": { + "checksum": "dd79e75fe74ac6c80461f2cdd6f5195c", + "baseChecksum": "0511ee0d41117aa7b4abaaf102aa513d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/resource_entries.json b/apps/tracker/src/i18n/collections/form/resource_entries.json index c060ebf5..749d5a1e 100644 --- a/apps/tracker/src/i18n/collections/form/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/resource_entries.json @@ -5,7 +5,8 @@ "es": "Nombre de la colección", "fr-ca": "Nom de la collection", "ru": "Название коллекции", - "ja": "コレクション名" + "ja": "コレクション名", + "de": "Sammlungsname" }, "translationsFolder": { "source": "Translations folder", @@ -13,7 +14,8 @@ "es": "Carpeta de traducciones", "fr-ca": "Dossier de traductions", "ru": "Папка «Переводы»", - "ja": "翻訳フォルダ" + "ja": "翻訳フォルダ", + "de": "Übersetzungsordner" }, "locales": { "source": "Locales", @@ -21,7 +23,8 @@ "es": "Idiomas", "fr-ca": "Langues", "ru": "Локалы", - "ja": "地域" + "ja": "地域", + "de": "Orte" }, "localesPlaceholder": { "source": "Comma-separated (e.g., en,fr,es)", @@ -29,6 +32,7 @@ "es": "Separados por comas (ej., en,fr,es)", "fr-ca": "Séparés par des virgules (p. ex., en,fr,es)", "ru": "Через запятую (например, en,fr,es)", - "ja": "カンマ区切り (例: en、fr、es)" + "ja": "カンマ区切り (例: en、fr、es)", + "de": "Durch Kommas getrennt (z. B. en,fr,es)" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/form/tracker_meta.json b/apps/tracker/src/i18n/collections/form/tracker_meta.json index 1f7c21a6..1dfcbd9b 100644 --- a/apps/tracker/src/i18n/collections/form/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "b83a54fe9204ea7d0e91875385dea548", "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", "status": "translated" + }, + "de": { + "checksum": "4eb6b05d89f7d8b43824128653e737fb", + "baseChecksum": "3368b0851da49f06d4c69758cf85ac92", + "status": "translated" } }, "translationsFolder": { @@ -47,6 +52,11 @@ "checksum": "b4347be66c4ffab0558281d9700148c7", "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", "status": "translated" + }, + "de": { + "checksum": "e9aef33ec026993b01fdeffea7fa318e", + "baseChecksum": "da38f56b09a32e7328c23c01f0a0738e", + "status": "translated" } }, "locales": { @@ -72,6 +82,11 @@ "checksum": "4d7d4410dab75a44ad27b57e84dc1aac", "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", "status": "translated" + }, + "de": { + "checksum": "feb6c21898b72670be6296ec7ccb2dc2", + "baseChecksum": "52ec7aab68a6cdc237d9db8133bc815f", + "status": "translated" } }, "localesPlaceholder": { @@ -97,6 +112,11 @@ "checksum": "cb103d2acc95ffab118d3cfe6ed11df3", "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", "status": "translated" + }, + "de": { + "checksum": "585c73045552d5fb59ae9311af1a882e", + "baseChecksum": "43735cf0e646ed6cb9f4863c9120e09d", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/resource_entries.json b/apps/tracker/src/i18n/collections/resource_entries.json index 724a476a..0ae5a8dc 100644 --- a/apps/tracker/src/i18n/collections/resource_entries.json +++ b/apps/tracker/src/i18n/collections/resource_entries.json @@ -5,7 +5,8 @@ "es": "Colecciones", "fr-ca": "Collections", "ru": "Коллекции", - "ja": "コレクション" + "ja": "コレクション", + "de": "Sammlungen" }, "addButton": { "source": "Add Collection", @@ -13,6 +14,7 @@ "es": "Agregar Colección", "fr-ca": "Ajouter une Collection", "ru": "Добавить коллекцию", - "ja": "コレクションを追加" + "ja": "コレクションを追加", + "de": "Sammlung hinzufügen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/resource_entries.json b/apps/tracker/src/i18n/collections/toast/resource_entries.json index d0db5664..0c69682b 100644 --- a/apps/tracker/src/i18n/collections/toast/resource_entries.json +++ b/apps/tracker/src/i18n/collections/toast/resource_entries.json @@ -5,7 +5,8 @@ "es": "Colección creada exitosamente", "fr-ca": "Collection créée avec succès", "ru": "Коллекция успешно создана.", - "ja": "コレクションが正常に作成されました" + "ja": "コレクションが正常に作成されました", + "de": "Sammlung erfolgreich erstellt" }, "updated": { "source": "Collection updated successfully", @@ -13,7 +14,8 @@ "es": "Colección actualizada exitosamente", "fr-ca": "Collection mise à jour avec succès", "ru": "Коллекция успешно обновлена.", - "ja": "コレクションが正常に更新されました" + "ja": "コレクションが正常に更新されました", + "de": "Sammlung erfolgreich aktualisiert" }, "deleted": { "source": "Collection deleted successfully", @@ -21,7 +23,8 @@ "es": "Colección eliminada exitosamente", "fr-ca": "Collection supprimée avec succès", "ru": "Коллекция успешно удалена.", - "ja": "コレクションは正常に削除されました" + "ja": "コレクションは正常に削除されました", + "de": "Sammlung erfolgreich gelöscht" }, "error": { "source": "An error occurred. Please try again.", @@ -29,7 +32,8 @@ "es": "Ocurrió un error. Por favor, inténtalo de nuevo.", "fr-ca": "Une erreur s'est produite. Veuillez réessayer.", "ru": "Произошла ошибка. Пожалуйста, попробуйте еще раз.", - "ja": "エラーが発生しました。もう一度お試しください。" + "ja": "エラーが発生しました。もう一度お試しください。", + "de": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." }, "loadFailed": { "source": "Failed to load collections", @@ -40,7 +44,8 @@ "es": "No se pudieron cargar las colecciones", "fr-ca": "Échec du chargement des collections", "ru": "Не удалось загрузить коллекции.", - "ja": "コレクションの読み込みに失敗しました" + "ja": "コレクションの読み込みに失敗しました", + "de": "Sammlungen konnten nicht geladen werden" }, "createFailed": { "source": "Failed to create collection", @@ -51,7 +56,8 @@ "es": "No se pudo crear la colección", "fr-ca": "Impossible de créer la collection", "ru": "Не удалось создать коллекцию.", - "ja": "コレクションの作成に失敗しました" + "ja": "コレクションの作成に失敗しました", + "de": "Sammlung konnte nicht erstellt werden" }, "updateFailed": { "source": "Failed to update collection", @@ -62,7 +68,8 @@ "es": "No se pudo actualizar la colección", "fr-ca": "Échec de la mise à jour de la collection", "ru": "Не удалось обновить коллекцию.", - "ja": "コレクションの更新に失敗しました" + "ja": "コレクションの更新に失敗しました", + "de": "Aktualisierung der Sammlung fehlgeschlagen" }, "deleteFailed": { "source": "Failed to delete collection", @@ -73,6 +80,7 @@ "es": "No se pudo eliminar la colección", "fr-ca": "Échec de la suppression de la collection", "ru": "Не удалось удалить коллекцию.", - "ja": "コレクションの削除に失敗しました" + "ja": "コレクションの削除に失敗しました", + "de": "Sammlung konnte nicht gelöscht werden" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/toast/tracker_meta.json b/apps/tracker/src/i18n/collections/toast/tracker_meta.json index c65f508f..3c7d5c41 100644 --- a/apps/tracker/src/i18n/collections/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/toast/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "b650f261e0a6872a640c8c10c93bf8a0", "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", "status": "translated" + }, + "de": { + "checksum": "183a3e5259df641d1bc2138f3767ff6e", + "baseChecksum": "3ff499a5a5250bc268afb3a949a0f371", + "status": "translated" } }, "updated": { @@ -47,6 +52,11 @@ "checksum": "daaf1ba1d63c59b9160997072e0fbc55", "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", "status": "translated" + }, + "de": { + "checksum": "c383b909b76e97fbbc02585c1e2a5ffe", + "baseChecksum": "16cabd5255794b8a7f11a1015879d22e", + "status": "translated" } }, "deleted": { @@ -72,6 +82,11 @@ "checksum": "5c93177892f1b2948ecf5b4d2dab876a", "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", "status": "translated" + }, + "de": { + "checksum": "37bf1db339352f6ed59e85867c2e43ad", + "baseChecksum": "bc2e2ad82c57023153745544ddc56f00", + "status": "translated" } }, "error": { @@ -97,6 +112,11 @@ "checksum": "bdaf2e4efb9178f2fb916518f06e7326", "baseChecksum": "b028ccd04708b8c3c7722956e149a718", "status": "translated" + }, + "de": { + "checksum": "0aa38a7138f1c92ed1759807e1f1e25f", + "baseChecksum": "b028ccd04708b8c3c7722956e149a718", + "status": "translated" } }, "loadFailed": { @@ -122,6 +142,11 @@ "checksum": "f46e0f86b255430967d68a5d391b6106", "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", "status": "translated" + }, + "de": { + "checksum": "66e247fedb619d3b232f973a55ed3628", + "baseChecksum": "3cd53d5bd22a26c0e6d7b8b9b80256bc", + "status": "translated" } }, "createFailed": { @@ -147,6 +172,11 @@ "checksum": "513eda515bff76ffcd9df10bfdf79194", "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", "status": "translated" + }, + "de": { + "checksum": "d3c701644953405179d2e5c57b0d9084", + "baseChecksum": "d4f390c01f513602c9b62bc7fd16f640", + "status": "translated" } }, "updateFailed": { @@ -172,6 +202,11 @@ "checksum": "977fd75103172c06892875afadf0fe52", "baseChecksum": "af9daa27991b1108df98277da9d19a38", "status": "translated" + }, + "de": { + "checksum": "6617b4a1e68fbd45200dabdd5a63b721", + "baseChecksum": "af9daa27991b1108df98277da9d19a38", + "status": "translated" } }, "deleteFailed": { @@ -197,6 +232,11 @@ "checksum": "5ad4e477c870d876c22be03b8c5b1beb", "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", "status": "translated" + }, + "de": { + "checksum": "0de84cf537f9d69eda4432e5c928fdad", + "baseChecksum": "a3a3dbfef848fa5e2f561b1903456577", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/collections/tracker_meta.json b/apps/tracker/src/i18n/collections/tracker_meta.json index 6c9f693a..1b4e54f9 100644 --- a/apps/tracker/src/i18n/collections/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "695b82464aee401b828677a0100f6cba", "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", "status": "translated" + }, + "de": { + "checksum": "18c4b3ff903711a9bd98c54cacb132a2", + "baseChecksum": "a9fc91939a389c7c73e7a3f3cbf411cd", + "status": "translated" } }, "addButton": { @@ -47,6 +52,11 @@ "checksum": "0404adec384698dfde5bf4e317661742", "baseChecksum": "10ac958235fe83036f8e5244454f7c78", "status": "translated" + }, + "de": { + "checksum": "88e8e83cfb5d7e109e7f4e65ed345d73", + "baseChecksum": "10ac958235fe83036f8e5244454f7c78", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/resource_entries.json b/apps/tracker/src/i18n/common/actions/resource_entries.json index 239fc1bf..348069ca 100644 --- a/apps/tracker/src/i18n/common/actions/resource_entries.json +++ b/apps/tracker/src/i18n/common/actions/resource_entries.json @@ -8,7 +8,8 @@ "es": "Editar", "fr-ca": "Modifier", "ru": "Редактировать", - "ja": "編集" + "ja": "編集", + "de": "Bearbeiten" }, "delete": { "source": "Delete", @@ -19,7 +20,8 @@ "es": "Eliminar", "fr-ca": "Supprimer", "ru": "Удалить", - "ja": "消去" + "ja": "消去", + "de": "Löschen" }, "retry": { "source": "Retry", @@ -30,7 +32,8 @@ "es": "Reintentar", "fr-ca": "Réessayer", "ru": "Повторить попытку", - "ja": "リトライ" + "ja": "リトライ", + "de": "Wiederholen" }, "cancel": { "source": "Cancel", @@ -38,14 +41,16 @@ "es": "Cancelar", "fr-ca": "Annuler", "ru": "Отмена", - "ja": "キャンセル" + "ja": "キャンセル", + "de": "Stornieren" }, "ok": { "source": "OK", "es": "OK", "fr-ca": "OK", "ru": "ХОРОШО", - "ja": "わかりました" + "ja": "わかりました", + "de": "OK" }, "save": { "source": "Save", @@ -53,14 +58,16 @@ "es": "Guardar", "fr-ca": "Enregistrer", "ru": "Сохранять", - "ja": "保存" + "ja": "保存", + "de": "Speichern" }, "back": { "source": "Back", "es": "Volver", "fr-ca": "Retour", "ru": "Назад", - "ja": "戻る" + "ja": "戻る", + "de": "Zurück" }, "clickToCopy": { "source": "click to copy", @@ -68,7 +75,8 @@ "es": "clic para copiar", "fr-ca": "cliquer pour copier", "ru": "нажмите, чтобы скопировать", - "ja": "クリックしてコピー" + "ja": "クリックしてコピー", + "de": "Zum Kopieren klicken" }, "move": { "source": "Move", @@ -79,7 +87,8 @@ "es": "Mover", "fr-ca": "Déplacer", "ru": "Двигаться", - "ja": "動く" + "ja": "動く", + "de": "Bewegen" }, "translate": { "source": "Translate", @@ -90,7 +99,8 @@ "es": "Traducir", "fr-ca": "Traduire", "ru": "Переводить", - "ja": "翻訳する" + "ja": "翻訳する", + "de": "Übersetzen" }, "selectAll": { "source": "Select All", @@ -101,7 +111,8 @@ "es": "Seleccionar todo", "fr-ca": "Sélectionner tout", "ru": "Выбрать все", - "ja": "すべて選択" + "ja": "すべて選択", + "de": "Alle auswählen" }, "clearAll": { "source": "Clear All", @@ -112,7 +123,8 @@ "es": "Borrar todo", "fr-ca": "Effacer tout", "ru": "Очистить все", - "ja": "すべてクリア" + "ja": "すべてクリア", + "de": "Alles löschen" }, "close": { "source": "Close", @@ -123,7 +135,8 @@ "es": "Cerca", "fr-ca": "Fermer", "ru": "Закрывать", - "ja": "近い" + "ja": "近い", + "de": "Schließen" }, "dismiss": { "source": "Dismiss", @@ -134,6 +147,7 @@ "es": "Despedir", "fr-ca": "Rejeter", "ru": "Увольнять", - "ja": "却下する" + "ja": "却下する", + "de": "Zurückweisen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/common/actions/tracker_meta.json b/apps/tracker/src/i18n/common/actions/tracker_meta.json index 33c753cb..72731692 100644 --- a/apps/tracker/src/i18n/common/actions/tracker_meta.json +++ b/apps/tracker/src/i18n/common/actions/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "7578865c9404415b6a4e2d6d3294f590", "baseChecksum": "7dce122004969d56ae2e0245cb754d35", "status": "translated" + }, + "de": { + "checksum": "5ad05dd4fa8fe82c3a85570683c368ad", + "baseChecksum": "7dce122004969d56ae2e0245cb754d35", + "status": "translated" } }, "delete": { @@ -47,6 +52,11 @@ "checksum": "e3fdb571cbafd9894cb80a2a2c95f342", "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", "status": "translated" + }, + "de": { + "checksum": "1010b01ca33474b21dfca7411a13552c", + "baseChecksum": "f2a6c498fb90ee345d997f888fce3b18", + "status": "translated" } }, "retry": { @@ -72,6 +82,11 @@ "checksum": "a19b46385fb285a0c55d8e1e2f6e8ce3", "baseChecksum": "6327b4e59f58137083214a1fec358855", "status": "translated" + }, + "de": { + "checksum": "dc0462575ab372239bcfd43a81cbc51f", + "baseChecksum": "6327b4e59f58137083214a1fec358855", + "status": "translated" } }, "cancel": { @@ -97,6 +112,11 @@ "checksum": "6ef34982969f60212f6f2565454d7beb", "baseChecksum": "ea4788705e6873b424c65e91c2846b19", "status": "translated" + }, + "de": { + "checksum": "6cc04dc1f419c8b2f1b28303ab0bec49", + "baseChecksum": "ea4788705e6873b424c65e91c2846b19", + "status": "translated" } }, "ok": { @@ -122,6 +142,11 @@ "checksum": "ad7a978ba733087c977b4edbda8ace9a", "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", "status": "translated" + }, + "de": { + "checksum": "e0aa021e21dddbd6d8cecec71e9cf564", + "baseChecksum": "e0aa021e21dddbd6d8cecec71e9cf564", + "status": "translated" } }, "save": { @@ -147,6 +172,11 @@ "checksum": "be5fbbe34ce9979bfb6576d9eddc5612", "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", "status": "translated" + }, + "de": { + "checksum": "b97d23bf800ff592f7afe97a29921271", + "baseChecksum": "c9cc8cce247e49bae79f15173ce97354", + "status": "translated" } }, "back": { @@ -172,6 +202,11 @@ "checksum": "4a622f127baeae041b4eef6a8884069f", "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", "status": "translated" + }, + "de": { + "checksum": "429bdf7fb1ab9dd6ff5f8f5b6d380968", + "baseChecksum": "0557fa923dcee4d0f86b1409f5c2167f", + "status": "translated" } }, "clickToCopy": { @@ -197,6 +232,11 @@ "checksum": "721b61c6ae82cf3d023ceb55d7dd9c7e", "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", "status": "translated" + }, + "de": { + "checksum": "67aedde6709e2f1d0660833677ab0e58", + "baseChecksum": "b8ac6182757b167c8f10fd8806b9bc27", + "status": "translated" } }, "move": { @@ -222,6 +262,11 @@ "checksum": "db9c1f7b49105fffe513bdc9cbda744f", "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", "status": "translated" + }, + "de": { + "checksum": "a8b34245fdc001a2f5432f12601bb7e0", + "baseChecksum": "6bc362dbf494c61ea117fe3c71ca48a5", + "status": "translated" } }, "translate": { @@ -247,6 +292,11 @@ "checksum": "c3a5d2da2ad33221043d5a6992f5f409", "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", "status": "translated" + }, + "de": { + "checksum": "c59cefbcfba7b00b96d89f1efaec9aed", + "baseChecksum": "deccbe4e9083c3b5f7cd2632722765bb", + "status": "translated" } }, "selectAll": { @@ -272,6 +322,11 @@ "checksum": "ab0e66f073d4d8aff7c49ff0bf2437a6", "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", "status": "translated" + }, + "de": { + "checksum": "f687cca4add06ebc15712a4f20f357be", + "baseChecksum": "45e96c0a422ce8a1a6ec1bd5eb9625c6", + "status": "translated" } }, "clearAll": { @@ -297,6 +352,11 @@ "checksum": "ec00a6332860c1cdbe7e5307d05acfdd", "baseChecksum": "e77fef0167598bb39846637ac3915f4e", "status": "translated" + }, + "de": { + "checksum": "b2031bb0236d90f8842472690156b040", + "baseChecksum": "e77fef0167598bb39846637ac3915f4e", + "status": "translated" } }, "close": { @@ -322,6 +382,11 @@ "checksum": "3dd21923aef0993456c21da79102b8e1", "baseChecksum": "d3d2e617335f08df83599665eef8a418", "status": "translated" + }, + "de": { + "checksum": "8311b9b64370db830145f6612a9021fd", + "baseChecksum": "d3d2e617335f08df83599665eef8a418", + "status": "translated" } }, "dismiss": { @@ -347,6 +412,11 @@ "checksum": "0d53c36ecff639eae2f8283109fa1f3f", "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", "status": "translated" + }, + "de": { + "checksum": "3275660758a8f2dc513c09aaa869cff2", + "baseChecksum": "c8a59e7135a20b362f9c768b09454fdb", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/resource_entries.json b/apps/tracker/src/i18n/data/resource_entries.json index 06a192b0..655b38e3 100644 --- a/apps/tracker/src/i18n/data/resource_entries.json +++ b/apps/tracker/src/i18n/data/resource_entries.json @@ -8,6 +8,7 @@ "es": "Cargando", "fr-ca": "Chargement", "ru": "Загрузка", - "ja": "ロード中" + "ja": "ロード中", + "de": "Laden" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/data/tracker_meta.json b/apps/tracker/src/i18n/data/tracker_meta.json index c867f428..324a5531 100644 --- a/apps/tracker/src/i18n/data/tracker_meta.json +++ b/apps/tracker/src/i18n/data/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8c00614cba8a72708e294877d21408da", "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", "status": "translated" + }, + "de": { + "checksum": "18f6ee15e59ad9647428c059344d67d3", + "baseChecksum": "16bfbf9c462762cf1cba4134ec53c504", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/resource_entries.json b/apps/tracker/src/i18n/header/resource_entries.json index 05bc2c73..0cf047f8 100644 --- a/apps/tracker/src/i18n/header/resource_entries.json +++ b/apps/tracker/src/i18n/header/resource_entries.json @@ -8,7 +8,8 @@ "es": "Ir a Colecciones", "fr-ca": "Accéder aux collections", "ru": "Перейти в Коллекции", - "ja": "コレクションへ移動" + "ja": "コレクションへ移動", + "de": "Zu den Sammlungen" }, "backToCollections": { "source": "Back to Collections", @@ -19,7 +20,8 @@ "es": "Volver a Colecciones", "fr-ca": "Retour aux collections", "ru": "Вернуться к коллекциям", - "ja": "コレクション一覧に戻る" + "ja": "コレクション一覧に戻る", + "de": "Zurück zu den Sammlungen" }, "keysCountX": { "source": "{ count, plural, =1 {1 key} other {{count} keys} }", @@ -30,7 +32,8 @@ "es": "{ count, plural, =1 {1 key} other {{count} keys} }", "fr-ca": "{ count, plural, =1 {1 key} other {{count} keys} }", "ru": "{ count, plural, =1 {1 key} other {{count} keys} }", - "ja": "{ count, plural, =1 {1 key} other {{count} keys} }" + "ja": "{ count, plural, =1 {1 key} other {{count} keys} }", + "de": "{ count, plural, =1 {1 key} other {{count} keys} }" }, "localesCountX": { "source": "{ count, plural, =1 {1 locale} other {{count} locales} }", @@ -41,6 +44,7 @@ "es": "{ count, plural, =1 {1 locale} other {{count} locales} }", "fr-ca": "{ count, plural, =1 {1 locale} other {{count} locales} }", "ru": "{ count, plural, =1 {1 locale} other {{count} locales} }", - "ja": "{ count, plural, =1 {1 locale} other {{count} locales} }" + "ja": "{ count, plural, =1 {1 locale} other {{count} locales} }", + "de": "{ count, plural, =1 {1 locale} other {{count} locales} }" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/header/tracker_meta.json b/apps/tracker/src/i18n/header/tracker_meta.json index c5bce00a..833a9334 100644 --- a/apps/tracker/src/i18n/header/tracker_meta.json +++ b/apps/tracker/src/i18n/header/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "73838d09ad1021c2c5926edcf3562640", "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", "status": "translated" + }, + "de": { + "checksum": "4fd854ad1afc03082574586c9174d727", + "baseChecksum": "e7926ae5bb733a6f509ed9e6d7e88245", + "status": "translated" } }, "backToCollections": { @@ -47,6 +52,11 @@ "checksum": "826da54bd00eb095a391f518f9241381", "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", "status": "translated" + }, + "de": { + "checksum": "f4663967ea5bc4f80db9cdadde1d909e", + "baseChecksum": "874fb8d79eb8715b9892cb64fbb77160", + "status": "translated" } }, "keysCountX": { @@ -72,6 +82,11 @@ "checksum": "2ccecfa93e0d0c95b7f229684871db68", "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", "status": "new" + }, + "de": { + "checksum": "2ccecfa93e0d0c95b7f229684871db68", + "baseChecksum": "2ccecfa93e0d0c95b7f229684871db68", + "status": "new" } }, "localesCountX": { @@ -97,6 +112,11 @@ "checksum": "ab692b642031b8646162616db0a399cf", "baseChecksum": "ab692b642031b8646162616db0a399cf", "status": "new" + }, + "de": { + "checksum": "ab692b642031b8646162616db0a399cf", + "baseChecksum": "ab692b642031b8646162616db0a399cf", + "status": "new" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/resource_entries.json b/apps/tracker/src/i18n/locale/resource_entries.json index 9e4440df..95811cd1 100644 --- a/apps/tracker/src/i18n/locale/resource_entries.json +++ b/apps/tracker/src/i18n/locale/resource_entries.json @@ -8,7 +8,8 @@ "es": "Idioma actual: {language}", "fr-ca": "Langue actuelle : {language}", "ru": "Текущий язык: {language}", - "ja": "現在の言語: {language}" + "ja": "現在の言語: {language}", + "de": "Aktuelle Sprache: {language}" }, "selectLanguage": { "source": "Select language", @@ -19,6 +20,7 @@ "es": "Seleccionar idioma", "fr-ca": "Choisir la langue", "ru": "Выберите язык", - "ja": "言語を選択してください" + "ja": "言語を選択してください", + "de": "Sprache auswählen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/locale/tracker_meta.json b/apps/tracker/src/i18n/locale/tracker_meta.json index 8da503cd..e7e92c1e 100644 --- a/apps/tracker/src/i18n/locale/tracker_meta.json +++ b/apps/tracker/src/i18n/locale/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "8baa79412a4f36e906f08a8b950e81b2", "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", "status": "translated" + }, + "de": { + "checksum": "1531b52f7fc2fd210e590097c96ad649", + "baseChecksum": "9b2dd4a78521838f059925216f4bf4c6", + "status": "translated" } }, "selectLanguage": { @@ -47,6 +52,11 @@ "checksum": "42627566fb3f3404065a4c81e93afcfa", "baseChecksum": "653777801f96237326d65205bc9129e3", "status": "translated" + }, + "de": { + "checksum": "aba191f444ad81aa746460e135b909fe", + "baseChecksum": "653777801f96237326d65205bc9129e3", + "status": "translated" } } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/resource_entries.json b/apps/tracker/src/i18n/theme/resource_entries.json index 9aec691e..28d2866b 100644 --- a/apps/tracker/src/i18n/theme/resource_entries.json +++ b/apps/tracker/src/i18n/theme/resource_entries.json @@ -5,7 +5,8 @@ "es": "Claro", "fr-ca": "Clair", "ru": "Свет", - "ja": "ライト" + "ja": "ライト", + "de": "Licht" }, "dark": { "source": "Dark", @@ -13,7 +14,8 @@ "es": "Oscuro", "fr-ca": "Sombre", "ru": "Темный", - "ja": "暗い" + "ja": "暗い", + "de": "Dunkel" }, "system": { "source": "System", @@ -21,7 +23,8 @@ "es": "Sistema", "fr-ca": "Système", "ru": "Система", - "ja": "システム" + "ja": "システム", + "de": "System" }, "settings": { "source": "Theme settings", @@ -29,6 +32,7 @@ "es": "Configuración del tema", "fr-ca": "Paramètres du thème", "ru": "Настройки темы", - "ja": "テーマ設定" + "ja": "テーマ設定", + "de": "Designeinstellungen" } } \ No newline at end of file diff --git a/apps/tracker/src/i18n/theme/tracker_meta.json b/apps/tracker/src/i18n/theme/tracker_meta.json index cfec6a31..02ce0621 100644 --- a/apps/tracker/src/i18n/theme/tracker_meta.json +++ b/apps/tracker/src/i18n/theme/tracker_meta.json @@ -22,6 +22,11 @@ "checksum": "2174839253a0130780fff656fa933796", "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", "status": "translated" + }, + "de": { + "checksum": "c8f1ac1513293af37c9ad8dc06101be6", + "baseChecksum": "9914a0ce04a7b7b6a8e39bec55064b82", + "status": "translated" } }, "dark": { @@ -47,6 +52,11 @@ "checksum": "a0256100275b5af922ddf1d8cd054a45", "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", "status": "translated" + }, + "de": { + "checksum": "e8ad273a49203705685b42a379367d2f", + "baseChecksum": "a18366b217ebf811ad1886e4f4f865b2", + "status": "translated" } }, "system": { @@ -72,6 +82,11 @@ "checksum": "6b46505ad5d38932a5771f1261e21b1a", "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", "status": "translated" + }, + "de": { + "checksum": "a45da96d0bf6575970f2d27af22be28a", + "baseChecksum": "a45da96d0bf6575970f2d27af22be28a", + "status": "translated" } }, "settings": { @@ -97,6 +112,11 @@ "checksum": "011045e70d825df3367471773c09a58a", "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", "status": "translated" + }, + "de": { + "checksum": "2a3784e0720dd8045567b1d48441e0bb", + "baseChecksum": "55b8deb25fdc0f8b628027f7d1d21cbe", + "status": "translated" } } } \ No newline at end of file From 830862712222e2cb56a3d6206af1adb70c0d2636 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 21:21:28 -0700 Subject: [PATCH 09/13] docs(docs): add Docusaurus and github action to publish docs --- .github/workflows/docs.yml | 54 + .gitignore | 1 + docs-site/docusaurus.config.ts | 89 + docs-site/package.json | 30 + docs-site/pnpm-lock.yaml | 11670 ++++++++++++++++++++++ docs-site/sidebars.ts | 23 + docs-site/src/css/custom.css | 10 + docs-site/src/pages/index.md | 7 + docs-site/static/img/.gitkeep | 0 docs-site/tsconfig.json | 15 + docs/about.md | 8 +- docs/api.md | 7 +- docs/auto-translation.md | 5 + docs/cli.md | 5 + docs/features/bundle-type-generation.md | 29 +- docs/features/export.md | 5 + docs/features/import.md | 5 + docs/features/validate.md | 5 + docs/getting-started.md | 30 +- docs/guides/bundling.md | 65 + docs/guides/migration.md | 5 + package.json | 4 +- 22 files changed, 12043 insertions(+), 29 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs-site/docusaurus.config.ts create mode 100644 docs-site/package.json create mode 100644 docs-site/pnpm-lock.yaml create mode 100644 docs-site/sidebars.ts create mode 100644 docs-site/src/css/custom.css create mode 100644 docs-site/src/pages/index.md create mode 100644 docs-site/static/img/.gitkeep create mode 100644 docs-site/tsconfig.json diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..9feaf3f2 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,54 @@ +name: Deploy Docs + +on: + push: + branches: + - develop + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: true + +jobs: + build-and-deploy: + name: Build & Deploy Docs + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install docs dependencies + working-directory: docs-site + run: pnpm install --ignore-workspace --frozen-lockfile + + - name: Build docs site + working-directory: docs-site + run: pnpm build + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs-site/build + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 5c761ed5..b689aa6a 100644 --- a/.gitignore +++ b/.gitignore @@ -116,6 +116,7 @@ dist # Docusaurus cache and generated files .docusaurus +docs-site/build/ # Serverless directories .serverless/ diff --git a/docs-site/docusaurus.config.ts b/docs-site/docusaurus.config.ts new file mode 100644 index 00000000..febfb575 --- /dev/null +++ b/docs-site/docusaurus.config.ts @@ -0,0 +1,89 @@ +import type { Config } from '@docusaurus/types'; +import type * as Preset from '@docusaurus/preset-classic'; + +const config: Config = { + title: 'Lingo Tracker', + tagline: 'Effortlessly Track, Validate, and Manage Your Translations', + favicon: 'img/favicon.ico', + + url: 'https://simoncodes-ca.github.io', + baseUrl: '/lingo-tracker/', + + organizationName: 'simoncodes-ca', + projectName: 'lingo-tracker', + trailingSlash: false, + + onBrokenLinks: 'throw', + markdown: { + hooks: { + onBrokenMarkdownLinks: 'warn', + }, + }, + + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + 'classic', + { + docs: { + path: '../docs', + routeBasePath: 'docs', + sidebarPath: './sidebars.ts', + editUrl: 'https://github.com/simoncodes-ca/lingo-tracker/edit/develop/', + }, + blog: false, + theme: { + customCss: './src/css/custom.css', + }, + } satisfies Preset.Options, + ], + ], + + themeConfig: { + navbar: { + title: 'Lingo Tracker', + items: [ + { + type: 'docSidebar', + sidebarId: 'docsSidebar', + position: 'left', + label: 'Docs', + }, + { + href: 'https://github.com/simoncodes-ca/lingo-tracker', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { label: 'Getting Started', to: '/docs/getting-started' }, + { label: 'CLI Reference', to: '/docs/cli' }, + { label: 'API Reference', to: '/docs/api' }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'GitHub', + href: 'https://github.com/simoncodes-ca/lingo-tracker', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} SimonCodes. Built with Docusaurus.`, + }, + } satisfies Preset.ThemeConfig, +}; + +export default config; diff --git a/docs-site/package.json b/docs-site/package.json new file mode 100644 index 00000000..b9f0658d --- /dev/null +++ b/docs-site/package.json @@ -0,0 +1,30 @@ +{ + "name": "lingo-tracker-docs", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "docusaurus start", + "build": "docusaurus build", + "serve": "docusaurus serve", + "clear": "docusaurus clear" + }, + "dependencies": { + "@docusaurus/core": "3.9.2", + "@docusaurus/preset-classic": "3.9.2", + "prism-react-renderer": "^2.3.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "devDependencies": { + "@docusaurus/types": "3.9.2", + "typescript": "~5.9.2" + }, + "engines": { + "node": ">=20" + }, + "pnpm": { + "overrides": { + "webpack": "5.95.0" + } + } +} diff --git a/docs-site/pnpm-lock.yaml b/docs-site/pnpm-lock.yaml new file mode 100644 index 00000000..e2157b2c --- /dev/null +++ b/docs-site/pnpm-lock.yaml @@ -0,0 +1,11670 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + webpack: 5.95.0 + +importers: + + .: + dependencies: + '@docusaurus/core': + specifier: 3.9.2 + version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/preset-classic': + specifier: 3.9.2 + version: 3.9.2(@algolia/client-search@5.50.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) + prism-react-renderer: + specifier: ^2.3.0 + version: 2.4.1(react@18.3.1) + react: + specifier: ^18.0.0 + version: 18.3.1 + react-dom: + specifier: ^18.0.0 + version: 18.3.1(react@18.3.1) + devDependencies: + '@docusaurus/types': + specifier: 3.9.2 + version: 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + typescript: + specifier: ~5.9.2 + version: 5.9.3 + +packages: + + '@algolia/abtesting@1.16.1': + resolution: {integrity: sha512-Xxk4l00pYI+jE0PNw8y0MvsQWh5278WRtZQav8/BMMi3HKi2xmeuqe11WJ3y8/6nuBHdv39w76OpJb09TMfAVQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/autocomplete-core@1.19.2': + resolution: {integrity: sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==} + + '@algolia/autocomplete-plugin-algolia-insights@1.19.2': + resolution: {integrity: sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-shared@1.19.2': + resolution: {integrity: sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.50.1': + resolution: {integrity: sha512-4peZlPXMwTOey9q1rQKMdCnwZb/E95/1e+7KujXpLLSh0FawJzg//U2NM+r4AiJy4+naT2MTBhj0K30yshnVTA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.50.1': + resolution: {integrity: sha512-i+aWHHG8NZvGFHtPeMZkxL2Loc6Fm7iaRo15lYSMx8gFL+at9vgdWxhka7mD1fqxkrxXsQstUBCIsSY8FvkEOw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.50.1': + resolution: {integrity: sha512-Hw52Fwapyk/7hMSV/fI4+s3H9MGZEUcRh4VphyXLAk2oLYdndVUkc6KBi0zwHSzwPAr+ZBwFPe2x6naUt9mZGw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.50.1': + resolution: {integrity: sha512-Bn/wtwhJ7p1OD/6pY+Zzn+zlu2N/SJnH46md/PAbvqIzmjVuwjNwD4y0vV5Ov8naeukXdd7UU9v550+v8+mtlg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.50.1': + resolution: {integrity: sha512-0V4Tu0RWR8YxkgI9EPVOZHGE4K5pEIhkLNN0CTkP/rnPsqaaSQpNMYW3/mGWdiKOWbX0iVmwLB9QESk3H0jS5g==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.50.1': + resolution: {integrity: sha512-jofcWNYMXJDDr87Z2eivlWY6o71Zn7F7aOvQCXSDAo9QTlyf7BhXEsZymLUvF0O1yU9Q9wvrjAWn8uVHYnAvgw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.50.1': + resolution: {integrity: sha512-OteRb8WubcmEvU0YlMJwCXs3Q6xrdkb0v50/qZBJP1TF0CvujFZQM++9BjEkTER/Jr9wbPHvjSFKnbMta0b4dQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/events@4.0.1': + resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} + + '@algolia/ingestion@1.50.1': + resolution: {integrity: sha512-0GmfSgDQK6oiIVXnJvGxtNFOfosBspRTR7csCOYCTL1P8QtxX2vDCIKwTM7xdSAEbJaZ43QlWg25q0Qdsndz8Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.50.1': + resolution: {integrity: sha512-ySuigKEe4YjYV3si8NVk9BHQpFj/1B+ON7DhhvTvbrZJseHQQloxzq0yHwKmznSdlO6C956fx4pcfOKkZClsyg==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.50.1': + resolution: {integrity: sha512-Cp8T/B0gVmjFlzzp6eP47hwKh5FGyeqQp1N48/ANDdvdiQkPqLyFHQVDwLBH0LddfIPQE+yqmZIgmKc82haF4A==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.50.1': + resolution: {integrity: sha512-XKdGGLikfrlK66ZSXh/vWcXZZ8Vg3byDFbJD8pwEvN1FoBRGxhxya476IY2ohoTymLa4qB5LBRlIa+2TLHx3Uw==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.50.1': + resolution: {integrity: sha512-mBAU6WyVsDwhHyGM+nodt1/oebHxgvuLlOAoMGbj/1i6LygDHZWDgL1t5JEs37x9Aywv7ZGhqbM1GsfZ54sU6g==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.50.1': + resolution: {integrity: sha512-qmo1LXrNKLHvJE6mdQbLnsZAoZvj7VyF2ft4xmbSGWI2WWm87fx/CjUX4kEExt4y0a6T6nEts6ofpUfH5TEE1A==} + engines: {node: '>= 14.0.0'} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.28.6': + resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.28.6': + resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.6': + resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.28.6': + resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.28.6': + resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.28.6': + resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-constant-elements@7.27.1': + resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.28.6': + resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.27.1': + resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-runtime@7.29.0': + resolution: {integrity: sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.28.6': + resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime-corejs3@7.29.2': + resolution: {integrity: sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@csstools/cascade-layer-name-parser@2.0.5': + resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + + '@csstools/media-query-list-parser@4.0.3': + resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/postcss-alpha-function@1.0.1': + resolution: {integrity: sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-cascade-layers@5.0.2': + resolution: {integrity: sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-color-function-display-p3-linear@1.0.1': + resolution: {integrity: sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-color-function@4.0.12': + resolution: {integrity: sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-color-mix-function@3.0.12': + resolution: {integrity: sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2': + resolution: {integrity: sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-content-alt-text@2.0.8': + resolution: {integrity: sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-contrast-color-function@2.0.12': + resolution: {integrity: sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-exponential-functions@2.0.9': + resolution: {integrity: sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-font-format-keywords@4.0.0': + resolution: {integrity: sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-gamut-mapping@2.0.11': + resolution: {integrity: sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-gradients-interpolation-method@5.0.12': + resolution: {integrity: sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-hwb-function@4.0.12': + resolution: {integrity: sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-ic-unit@4.0.4': + resolution: {integrity: sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-initial@2.0.1': + resolution: {integrity: sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-is-pseudo-class@5.0.3': + resolution: {integrity: sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-light-dark-function@2.0.11': + resolution: {integrity: sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-logical-float-and-clear@3.0.0': + resolution: {integrity: sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-logical-overflow@2.0.0': + resolution: {integrity: sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-logical-overscroll-behavior@2.0.0': + resolution: {integrity: sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-logical-resize@3.0.0': + resolution: {integrity: sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-logical-viewport-units@3.0.4': + resolution: {integrity: sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-media-minmax@2.0.9': + resolution: {integrity: sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5': + resolution: {integrity: sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-nested-calc@4.0.0': + resolution: {integrity: sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-normalize-display-values@4.0.1': + resolution: {integrity: sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-oklab-function@4.0.12': + resolution: {integrity: sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-position-area-property@1.0.0': + resolution: {integrity: sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-progressive-custom-properties@4.2.1': + resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-property-rule-prelude-list@1.0.0': + resolution: {integrity: sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-random-function@2.0.1': + resolution: {integrity: sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-relative-color-syntax@3.0.12': + resolution: {integrity: sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-scope-pseudo-class@4.0.1': + resolution: {integrity: sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-sign-functions@1.1.4': + resolution: {integrity: sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-stepped-value-functions@4.0.9': + resolution: {integrity: sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-syntax-descriptor-syntax-production@1.0.1': + resolution: {integrity: sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-system-ui-font-family@1.0.0': + resolution: {integrity: sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-text-decoration-shorthand@4.0.3': + resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-trigonometric-functions@4.0.9': + resolution: {integrity: sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-unset-value@4.0.0': + resolution: {integrity: sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/selector-resolve-nested@3.1.0': + resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@csstools/utilities@2.0.0': + resolution: {integrity: sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + + '@docsearch/core@4.6.2': + resolution: {integrity: sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA==} + peerDependencies: + '@types/react': '>= 16.8.0 < 20.0.0' + react: '>= 16.8.0 < 20.0.0' + react-dom: '>= 16.8.0 < 20.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + + '@docsearch/css@4.6.2': + resolution: {integrity: sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==} + + '@docsearch/react@4.6.2': + resolution: {integrity: sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w==} + peerDependencies: + '@types/react': '>= 16.8.0 < 20.0.0' + react: '>= 16.8.0 < 20.0.0' + react-dom: '>= 16.8.0 < 20.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + + '@docusaurus/babel@3.9.2': + resolution: {integrity: sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==} + engines: {node: '>=20.0'} + + '@docusaurus/bundler@3.9.2': + resolution: {integrity: sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==} + engines: {node: '>=20.0'} + peerDependencies: + '@docusaurus/faster': '*' + peerDependenciesMeta: + '@docusaurus/faster': + optional: true + + '@docusaurus/core@3.9.2': + resolution: {integrity: sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==} + engines: {node: '>=20.0'} + hasBin: true + peerDependencies: + '@mdx-js/react': ^3.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/cssnano-preset@3.9.2': + resolution: {integrity: sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==} + engines: {node: '>=20.0'} + + '@docusaurus/logger@3.9.2': + resolution: {integrity: sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==} + engines: {node: '>=20.0'} + + '@docusaurus/mdx-loader@3.9.2': + resolution: {integrity: sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/module-type-aliases@3.9.2': + resolution: {integrity: sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==} + peerDependencies: + react: '*' + react-dom: '*' + + '@docusaurus/plugin-content-blog@3.9.2': + resolution: {integrity: sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==} + engines: {node: '>=20.0'} + peerDependencies: + '@docusaurus/plugin-content-docs': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-content-docs@3.9.2': + resolution: {integrity: sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-content-pages@3.9.2': + resolution: {integrity: sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-css-cascade-layers@3.9.2': + resolution: {integrity: sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==} + engines: {node: '>=20.0'} + + '@docusaurus/plugin-debug@3.9.2': + resolution: {integrity: sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-google-analytics@3.9.2': + resolution: {integrity: sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-google-gtag@3.9.2': + resolution: {integrity: sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-google-tag-manager@3.9.2': + resolution: {integrity: sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-sitemap@3.9.2': + resolution: {integrity: sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/plugin-svgr@3.9.2': + resolution: {integrity: sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/preset-classic@3.9.2': + resolution: {integrity: sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/react-loadable@6.0.0': + resolution: {integrity: sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==} + peerDependencies: + react: '*' + + '@docusaurus/theme-classic@3.9.2': + resolution: {integrity: sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/theme-common@3.9.2': + resolution: {integrity: sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==} + engines: {node: '>=20.0'} + peerDependencies: + '@docusaurus/plugin-content-docs': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/theme-search-algolia@3.9.2': + resolution: {integrity: sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==} + engines: {node: '>=20.0'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/theme-translations@3.9.2': + resolution: {integrity: sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==} + engines: {node: '>=20.0'} + + '@docusaurus/types@3.9.2': + resolution: {integrity: sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@docusaurus/utils-common@3.9.2': + resolution: {integrity: sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==} + engines: {node: '>=20.0'} + + '@docusaurus/utils-validation@3.9.2': + resolution: {integrity: sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==} + engines: {node: '>=20.0'} + + '@docusaurus/utils@3.9.2': + resolution: {integrity: sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==} + engines: {node: '>=20.0'} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/base64@17.67.0': + resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/buffers@1.2.1': + resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/buffers@17.67.0': + resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/codegen@1.0.0': + resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/codegen@17.67.0': + resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-core@4.57.1': + resolution: {integrity: sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-fsa@4.57.1': + resolution: {integrity: sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-builtins@4.57.1': + resolution: {integrity: sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-to-fsa@4.57.1': + resolution: {integrity: sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-utils@4.57.1': + resolution: {integrity: sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node@4.57.1': + resolution: {integrity: sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-print@4.57.1': + resolution: {integrity: sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-snapshot@4.57.1': + resolution: {integrity: sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.21.0': + resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@17.67.0': + resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pointer@17.67.0': + resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.9.0': + resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@17.67.0': + resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@peculiar/asn1-cms@2.6.1': + resolution: {integrity: sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==} + + '@peculiar/asn1-csr@2.6.1': + resolution: {integrity: sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==} + + '@peculiar/asn1-ecc@2.6.1': + resolution: {integrity: sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==} + + '@peculiar/asn1-pfx@2.6.1': + resolution: {integrity: sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==} + + '@peculiar/asn1-pkcs8@2.6.1': + resolution: {integrity: sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==} + + '@peculiar/asn1-pkcs9@2.6.1': + resolution: {integrity: sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==} + + '@peculiar/asn1-rsa@2.6.1': + resolution: {integrity: sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==} + + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + + '@peculiar/asn1-x509-attr@2.6.1': + resolution: {integrity: sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==} + + '@peculiar/asn1-x509@2.6.1': + resolution: {integrity: sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} + engines: {node: '>=12'} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@slorber/react-helmet-async@1.3.0': + resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@slorber/remark-comment@1.0.0': + resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0': + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-preset@8.1.0': + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/core@8.1.0': + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} + + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + + '@svgr/plugin-jsx@8.1.0': + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + + '@svgr/plugin-svgo@8.1.0': + resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + + '@svgr/webpack@8.1.0': + resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} + engines: {node: '>=14'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} + + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + + '@types/gtag.js@0.0.12': + resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/history@4.7.11': + resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} + + '@types/html-minifier-terser@6.1.0': + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/http-proxy@1.17.17': + resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + + '@types/qs@6.15.0': + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react-router-config@5.0.11': + resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} + + '@types/react-router-dom@5.3.3': + resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} + + '@types/react-router@5.1.20': + resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} + + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} + + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + algoliasearch-helper@3.28.1: + resolution: {integrity: sha512-6iXpbkkrAI5HFpCWXlNmIDSBuoN/U1XnEvb2yJAoWfqrZ+DrybI7MQ5P5mthFaprmocq+zbi6HxnR28xnZAYBw==} + peerDependencies: + algoliasearch: '>= 3.1 < 6' + + algoliasearch@5.50.1: + resolution: {integrity: sha512-/bwdue1/8LWELn/DBalGRfuLsXBLXULJo/yOeavJtDu8rBwxIzC6/Rz9Jg19S21VkJvRuZO1k8CZXBMS73mYbA==} + engines: {node: '>= 14.0.0'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + engines: {node: '>=12.0.0'} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + autoprefixer@10.4.27: + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: 5.95.0 + + babel-plugin-dynamic-import-node@2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} + + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.10.18: + resolution: {integrity: sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==} + engines: {node: '>=6.0.0'} + hasBin: true + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@6.2.1: + resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001787: + resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combine-promises@1.2.0: + resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} + engines: {node: '>=10'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + copy-webpack-plugin@11.0.0: + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: 5.95.0 + + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + + core-js-pure@3.49.0: + resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} + + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + + css-blank-pseudo@7.0.1: + resolution: {integrity: sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + css-declaration-sorter@7.4.0: + resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-has-pseudo@7.0.3: + resolution: {integrity: sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + css-loader@6.11.0: + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: 5.95.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + css-minimizer-webpack-plugin@5.0.1: + resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@parcel/css': '*' + '@swc/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + lightningcss: '*' + webpack: 5.95.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + '@swc/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true + + css-prefers-color-scheme@10.0.0: + resolution: {integrity: sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssdb@8.8.0: + resolution: {integrity: sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-advanced@6.1.2: + resolution: {integrity: sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-preset-default@6.1.2: + resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-utils@4.0.2: + resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano@6.1.2: + resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + detect-port@1.6.1: + resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} + engines: {node: '>= 4.0.0'} + hasBin: true + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.335: + resolution: {integrity: sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + emoticon@4.1.0: + resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eta@2.2.0: + resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==} + engines: {node: '>=6.0.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eval@0.1.8: + resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} + engines: {node: '>= 0.8'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} + engines: {node: '>= 0.10.0'} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + feed@4.2.2: + resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} + engines: {node: '>=0.4.0'} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-loader@6.2.0: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: 5.95.0 + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} + engines: {node: '>= 0.8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regex.js@1.2.0: + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-yarn@3.0.0: + resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + history@4.10.1: + resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-webpack-plugin@5.6.6: + resolution: {integrity: sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: 5.95.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.10: + resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} + + http-proxy-middleware@2.0.9: + resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + 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 + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + infima@0.2.0-alpha.45: + resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==} + engines: {node: '>=12'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.3.0: + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} + engines: {node: '>= 10'} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + 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'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-network-error@1.3.1: + resolution: {integrity: sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==} + engines: {node: '>=16'} + + is-npm@6.1.0: + resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + is-yarn-global@0.4.1: + resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} + engines: {node: '>=12'} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + launch-editor@2.13.2: + resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + 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==} + + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@2.0.0: + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@4.57.1: + resolution: {integrity: sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==} + peerDependencies: + tslib: '2' + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + 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'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + mini-css-extract-plugin@2.10.2: + resolution: {integrity: sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: 5.95.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + null-loader@4.0.1: + resolution: {integrity: sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: 5.95.0 + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + + path-to-regexp@1.9.0: + resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + + postcss-attribute-case-insensitive@7.0.1: + resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-calc@9.0.1: + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + + postcss-clamp@4.1.0: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + + postcss-color-functional-notation@7.0.12: + resolution: {integrity: sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-color-hex-alpha@10.0.0: + resolution: {integrity: sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-color-rebeccapurple@10.0.0: + resolution: {integrity: sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-colormin@6.1.0: + resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-convert-values@6.1.0: + resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-custom-media@11.0.6: + resolution: {integrity: sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-custom-properties@14.0.6: + resolution: {integrity: sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-custom-selectors@8.0.5: + resolution: {integrity: sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-dir-pseudo-class@9.0.1: + resolution: {integrity: sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-discard-comments@6.0.2: + resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-duplicates@6.0.3: + resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@6.0.3: + resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-overridden@6.0.2: + resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-unused@6.0.5: + resolution: {integrity: sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-double-position-gradients@6.0.4: + resolution: {integrity: sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-focus-visible@10.0.1: + resolution: {integrity: sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-focus-within@9.0.1: + resolution: {integrity: sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-font-variant@5.0.0: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + + postcss-gap-properties@6.0.0: + resolution: {integrity: sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-image-set-function@7.0.0: + resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-lab-function@7.0.12: + resolution: {integrity: sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-loader@7.3.4: + resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: 5.95.0 + + postcss-logical@8.1.0: + resolution: {integrity: sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-merge-idents@6.0.3: + resolution: {integrity: sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-longhand@6.0.5: + resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@6.1.1: + resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-font-values@6.1.0: + resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-gradients@6.0.3: + resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-params@6.1.0: + resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@6.0.4: + resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + 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-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-nesting@13.0.2: + resolution: {integrity: sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-normalize-charset@6.0.2: + resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-display-values@6.0.2: + resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-positions@6.0.2: + resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-repeat-style@6.0.2: + resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-string@6.0.2: + resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-timing-functions@6.0.2: + resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-unicode@6.1.0: + resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-url@6.0.2: + resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-whitespace@6.0.2: + resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-opacity-percentage@3.0.0: + resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-ordered-values@6.0.2: + resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-overflow-shorthand@6.0.0: + resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-page-break@3.0.4: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + + postcss-place@10.0.0: + resolution: {integrity: sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-preset-env@10.6.1: + resolution: {integrity: sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-pseudo-class-any-link@10.0.1: + resolution: {integrity: sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-reduce-idents@6.0.3: + resolution: {integrity: sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-initial@6.1.0: + resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-transforms@6.0.2: + resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-replace-overflow-wrap@4.0.0: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + + postcss-selector-not@8.0.1: + resolution: {integrity: sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-sort-media-queries@5.2.0: + resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.4.23 + + postcss-svgo@6.0.3: + resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.4.31 + + postcss-unique-selectors@6.0.4: + resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss-zindex@6.0.2: + resolution: {integrity: sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss@8.5.9: + resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + engines: {node: ^10 || ^12 || >=14} + + pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + + pretty-time@1.1.0: + resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} + engines: {node: '>=4'} + + prism-react-renderer@2.4.1: + resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} + peerDependencies: + react: '>=16.0.0' + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@3.3.0: + resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} + engines: {node: '>=12.20'} + + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-json-view-lite@2.5.0: + resolution: {integrity: sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==} + engines: {node: '>=18'} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + + react-loadable-ssr-addon-v5-slorber@1.0.3: + resolution: {integrity: sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + react-loadable: '*' + webpack: 5.95.0 + + react-router-config@5.1.1: + resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} + peerDependencies: + react: '>=15' + react-router: '>=5' + + react-router-dom@5.3.4: + resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} + peerDependencies: + react: '>=15' + + react-router@5.3.4: + resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} + peerDependencies: + react: '>=15' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + hasBin: true + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + remark-directive@3.0.1: + resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} + + remark-emoji@4.0.1: + resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-like@0.1.2: + resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pathname@3.0.0: + resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rtlcss@4.3.0: + resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} + engines: {node: '>=12.0.0'} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + schema-dts@1.1.5: + resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} + + semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + + serve-index@1.9.2: + resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@7.1.3: + resolution: {integrity: sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==} + engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true + + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + sort-css-media-queries@2.2.0: + resolution: {integrity: sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==} + engines: {node: '>= 6.3.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + srcset@4.0.0: + resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} + engines: {node: '>=12'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + stylehacks@6.1.1: + resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + + svgo@3.3.3: + resolution: {integrity: sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.4.0: + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: 5.95.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} + hasBin: true + + thingies@2.6.0: + resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@6.0.2: + resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} + engines: {node: '>=14.16'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-loader@4.1.1: + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + file-loader: '*' + webpack: 5.95.0 + peerDependenciesMeta: + file-loader: + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + value-equal@1.0.1: + resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webpack-bundle-analyzer@4.10.2: + resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} + engines: {node: '>= 10.13.0'} + hasBin: true + + webpack-dev-middleware@7.4.5: + resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: 5.95.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.2.3: + resolution: {integrity: sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: 5.95.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-sources@3.3.4: + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + engines: {node: '>=10.13.0'} + + webpack@5.106.1: + resolution: {integrity: sha512-EW8af29ak8Oaf4T8k8YsajjrDBDYgnKZ5er6ljWFJsXABfTNowQfvHLftwcepVgdz+IoLSdEAbBiM9DFXoll9w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + webpack@5.95.0: + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + webpackbar@6.0.1: + resolution: {integrity: sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + webpack: 5.95.0 + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/abtesting@1.16.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/autocomplete-core@1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-shared@1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)': + dependencies: + '@algolia/client-search': 5.50.1 + algoliasearch: 5.50.1 + + '@algolia/client-abtesting@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/client-analytics@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/client-common@5.50.1': {} + + '@algolia/client-insights@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/client-personalization@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/client-query-suggestions@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/client-search@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/events@4.0.1': {} + + '@algolia/ingestion@1.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/monitoring@1.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/recommend@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + '@algolia/requester-browser-xhr@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + + '@algolia/requester-fetch@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + + '@algolia/requester-node-http@5.50.1': + dependencies: + '@algolia/client-common': 5.50.1 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 + + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime-corejs3@7.29.2': + dependencies: + core-js-pure: 3.49.0 + + '@babel/runtime@7.29.2': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@colors/colors@1.5.0': + optional: true + + '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + + '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/postcss-alpha-function@1.0.1(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.9)': + dependencies: + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-color-function@4.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-color-mix-function@3.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-content-alt-text@2.0.8(postcss@8.5.9)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-contrast-color-function@2.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-exponential-functions@2.0.9(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.5.9)': + dependencies: + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-gamut-mapping@2.0.11(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-gradients-interpolation-method@5.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-hwb-function@4.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-ic-unit@4.0.4(postcss@8.5.9)': + dependencies: + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-initial@2.0.1(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.9)': + dependencies: + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.9)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/postcss-logical-overflow@2.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/postcss-logical-resize@3.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-logical-viewport-units@3.0.4(postcss@8.5.9)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-media-minmax@2.0.9(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + postcss: 8.5.9 + + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5(postcss@8.5.9)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + postcss: 8.5.9 + + '@csstools/postcss-nested-calc@4.0.0(postcss@8.5.9)': + dependencies: + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-normalize-display-values@4.0.1(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-oklab-function@4.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-position-area-property@1.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-property-rule-prelude-list@1.0.0(postcss@8.5.9)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-random-function@2.0.1(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-relative-color-syntax@3.0.12(postcss@8.5.9)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-stepped-value-functions@4.0.9(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-syntax-descriptor-syntax-production@1.0.1(postcss@8.5.9)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-system-ui-font-family@1.0.0(postcss@8.5.9)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.9)': + dependencies: + '@csstools/color-helpers': 5.1.0 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-trigonometric-functions@4.0.9(postcss@8.5.9)': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + + '@csstools/postcss-unset-value@4.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/utilities@2.0.0(postcss@8.5.9)': + dependencies: + postcss: 8.5.9 + + '@discoveryjs/json-ext@0.5.7': {} + + '@docsearch/core@4.6.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + optionalDependencies: + '@types/react': 19.2.14 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@docsearch/css@4.6.2': {} + + '@docsearch/react@4.6.2(@algolia/client-search@5.50.1)(@types/react@19.2.14)(algoliasearch@5.50.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.50.1)(algoliasearch@5.50.1)(search-insights@2.17.3) + '@docsearch/core': 4.6.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docsearch/css': 4.6.2 + optionalDependencies: + '@types/react': 19.2.14 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@docusaurus/babel@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/runtime': 7.29.2 + '@babel/runtime-corejs3': 7.29.2 + '@babel/traverse': 7.29.0 + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + babel-plugin-dynamic-import-node: 2.3.3 + fs-extra: 11.3.4 + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/bundler@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@babel/core': 7.29.0 + '@docusaurus/babel': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/cssnano-preset': 3.9.2 + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.95.0) + clean-css: 5.3.3 + copy-webpack-plugin: 11.0.0(webpack@5.95.0) + css-loader: 6.11.0(webpack@5.95.0) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0) + cssnano: 6.1.2(postcss@8.5.9) + file-loader: 6.2.0(webpack@5.95.0) + html-minifier-terser: 7.2.0 + mini-css-extract-plugin: 2.10.2(webpack@5.95.0) + null-loader: 4.0.1(webpack@5.95.0) + postcss: 8.5.9 + postcss-loader: 7.3.4(postcss@8.5.9)(typescript@5.9.3)(webpack@5.95.0) + postcss-preset-env: 10.6.1(postcss@8.5.9) + terser-webpack-plugin: 5.4.0(webpack@5.95.0) + tslib: 2.8.1 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.95.0) + webpack: 5.95.0 + webpackbar: 6.0.1(webpack@5.95.0) + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - csso + - esbuild + - lightningcss + - react + - react-dom + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/babel': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/bundler': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) + boxen: 6.2.1 + chalk: 4.1.2 + chokidar: 3.6.0 + cli-table3: 0.6.5 + combine-promises: 1.2.0 + commander: 5.1.0 + core-js: 3.49.0 + detect-port: 1.6.1 + escape-html: 1.0.3 + eta: 2.2.0 + eval: 0.1.8 + execa: 5.1.1 + fs-extra: 11.3.4 + html-tags: 3.3.1 + html-webpack-plugin: 5.6.6(webpack@5.95.0) + leven: 3.1.0 + lodash: 4.18.1 + open: 8.4.2 + p-map: 4.0.0 + prompts: 2.4.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' + react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0) + react-router: 5.3.4(react@18.3.1) + react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) + react-router-dom: 5.3.4(react@18.3.1) + semver: 7.7.4 + serve-handler: 6.1.7 + tinypool: 1.1.1 + tslib: 2.8.1 + update-notifier: 6.0.2 + webpack: 5.95.0 + webpack-bundle-analyzer: 4.10.2 + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.95.0) + webpack-merge: 6.0.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/cssnano-preset@3.9.2': + dependencies: + cssnano-preset-advanced: 6.1.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-sort-media-queries: 5.2.0(postcss@8.5.9) + tslib: 2.8.1 + + '@docusaurus/logger@3.9.2': + dependencies: + chalk: 4.1.2 + tslib: 2.8.1 + + '@docusaurus/mdx-loader@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/mdx': 3.1.1 + '@slorber/remark-comment': 1.0.0 + escape-html: 1.0.3 + estree-util-value-to-estree: 3.5.0 + file-loader: 6.2.0(webpack@5.95.0) + fs-extra: 11.3.4 + image-size: 2.0.2 + mdast-util-mdx: 3.0.0 + mdast-util-to-string: 4.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rehype-raw: 7.0.0 + remark-directive: 3.0.1 + remark-emoji: 4.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + stringify-object: 3.3.0 + tslib: 2.8.1 + unified: 11.0.5 + unist-util-visit: 5.1.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.95.0) + vfile: 6.0.3 + webpack: 5.95.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/module-type-aliases@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/history': 4.7.11 + '@types/react': 19.2.14 + '@types/react-router-config': 5.0.11 + '@types/react-router-dom': 5.3.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + cheerio: 1.0.0-rc.12 + feed: 4.2.2 + fs-extra: 11.3.4 + lodash: 4.18.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + schema-dts: 1.1.5 + srcset: 4.0.0 + tslib: 2.8.1 + unist-util-visit: 5.1.0 + utility-types: 3.11.0 + webpack: 5.95.0 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react-router-config': 5.0.11 + combine-promises: 1.2.0 + fs-extra: 11.3.4 + js-yaml: 4.1.1 + lodash: 4.18.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + schema-dts: 1.1.5 + tslib: 2.8.1 + utility-types: 3.11.0 + webpack: 5.95.0 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fs-extra: 11.3.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + webpack: 5.95.0 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - react + - react-dom + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fs-extra: 11.3.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-json-view-lite: 2.5.0(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/gtag.js': 0.0.12 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fs-extra: 11.3.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + sitemap: 7.1.3 + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/webpack': 8.1.0(typescript@5.9.3) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + webpack: 5.95.0 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.50.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.50.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@algolia/client-search' + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - '@types/react' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - search-insights + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/react-loadable@6.0.0(react@18.3.1)': + dependencies: + '@types/react': 19.2.14 + react: 18.3.1 + + '@docusaurus/theme-classic@3.9.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-translations': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) + clsx: 2.1.1 + infima: 0.2.0-alpha.45 + lodash: 4.18.1 + nprogress: 0.2.0 + postcss: 8.5.9 + prism-react-renderer: 2.4.1(react@18.3.1) + prismjs: 1.30.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router-dom: 5.3.4(react@18.3.1) + rtlcss: 4.3.0 + tslib: 2.8.1 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - '@types/react' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/history': 4.7.11 + '@types/react': 19.2.14 + '@types/react-router-config': 5.0.11 + clsx: 2.1.1 + parse-numeric-range: 1.3.0 + prism-react-renderer: 2.4.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.50.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': + dependencies: + '@docsearch/react': 4.6.2(@algolia/client-search@5.50.1)(@types/react@19.2.14)(algoliasearch@5.50.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.2 + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-translations': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + algoliasearch: 5.50.1 + algoliasearch-helper: 3.28.1(algoliasearch@5.50.1) + clsx: 2.1.1 + eta: 2.2.0 + fs-extra: 11.3.4 + lodash: 4.18.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - '@types/react' + - bufferutil + - csso + - debug + - esbuild + - lightningcss + - search-insights + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@docusaurus/theme-translations@3.9.2': + dependencies: + fs-extra: 11.3.4 + tslib: 2.8.1 + + '@docusaurus/types@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@mdx-js/mdx': 3.1.1 + '@types/history': 4.7.11 + '@types/mdast': 4.0.4 + '@types/react': 19.2.14 + commander: 5.1.0 + joi: 17.13.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' + utility-types: 3.11.0 + webpack: 5.95.0 + webpack-merge: 5.10.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/utils-common@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/utils-validation@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/logger': 3.9.2 + '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fs-extra: 11.3.4 + joi: 17.13.3 + js-yaml: 4.1.1 + lodash: 4.18.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@docusaurus/utils@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@docusaurus/logger': 3.9.2 + '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + escape-string-regexp: 4.0.0 + execa: 5.1.1 + file-loader: 6.2.0(webpack@5.95.0) + fs-extra: 11.3.4 + github-slugger: 1.5.0 + globby: 11.1.0 + gray-matter: 4.0.3 + jiti: 1.21.7 + js-yaml: 4.1.1 + lodash: 4.18.1 + micromatch: 4.0.8 + p-queue: 6.6.2 + prompts: 2.4.2 + resolve-pathname: 3.0.0 + tslib: 2.8.1 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.95.0) + utility-types: 3.11.0 + webpack: 5.95.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - react + - react-dom + - supports-color + - uglify-js + - webpack-cli + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.10 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 25.6.0 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-core@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-fsa@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-builtins@4.57.1(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-to-fsa@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-utils@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-print@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-snapshot@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.16.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.16.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.2.14 + react: 18.3.1 + + '@noble/hashes@1.4.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@peculiar/asn1-cms@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pfx': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.6.0': + dependencies: + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-csr': 2.6.1 + '@peculiar/asn1-ecc': 2.6.1 + '@peculiar/asn1-pkcs9': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@3.0.2': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@polka/url@1.0.0-next.29': {} + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@sinclair/typebox@0.27.10': {} + + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/is@5.6.0': {} + + '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.29.2 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-fast-compare: 3.2.2 + shallowequal: 1.1.0 + + '@slorber/remark-comment@1.0.0': + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) + + '@svgr/core@8.1.0(typescript@5.9.3)': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + camelcase: 6.3.0 + cosmiconfig: 8.3.6(typescript@5.9.3) + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@svgr/hast-util-to-babel-ast@8.0.0': + dependencies: + '@babel/types': 7.29.0 + entities: 4.5.0 + + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': + dependencies: + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@svgr/core': 8.1.0(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@5.9.3) + deepmerge: 4.3.1 + svgo: 3.3.3 + transitivePeerDependencies: + - typescript + + '@svgr/webpack@8.1.0(typescript@5.9.3)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + - typescript + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 25.6.0 + + '@types/bonjour@3.5.13': + dependencies: + '@types/node': 25.6.0 + + '@types/connect-history-api-fallback@1.5.4': + dependencies: + '@types/express-serve-static-core': 4.19.8 + '@types/node': 25.6.0 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 25.6.0 + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 + optional: true + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + optional: true + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + + '@types/estree@1.0.8': {} + + '@types/express-serve-static-core@4.19.8': + dependencies: + '@types/node': 25.6.0 + '@types/qs': 6.15.0 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@4.17.25': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.15.0 + '@types/serve-static': 1.15.10 + + '@types/gtag.js@0.0.12': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/history@4.7.11': {} + + '@types/html-minifier-terser@6.1.0': {} + + '@types/http-cache-semantics@4.2.0': {} + + '@types/http-errors@2.0.5': {} + + '@types/http-proxy@1.17.17': + dependencies: + '@types/node': 25.6.0 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + + '@types/mime@1.3.5': {} + + '@types/ms@2.1.0': {} + + '@types/node@17.0.45': {} + + '@types/node@25.6.0': + dependencies: + undici-types: 7.19.2 + + '@types/prismjs@1.26.6': {} + + '@types/qs@6.15.0': {} + + '@types/range-parser@1.2.7': {} + + '@types/react-router-config@5.0.11': + dependencies: + '@types/history': 4.7.11 + '@types/react': 19.2.14 + '@types/react-router': 5.1.20 + + '@types/react-router-dom@5.3.3': + dependencies: + '@types/history': 4.7.11 + '@types/react': 19.2.14 + '@types/react-router': 5.1.20 + + '@types/react-router@5.1.20': + dependencies: + '@types/history': 4.7.11 + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@types/retry@0.12.2': {} + + '@types/sax@1.2.7': + dependencies: + '@types/node': 25.6.0 + + '@types/send@0.17.6': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 25.6.0 + + '@types/send@1.2.1': + dependencies: + '@types/node': 25.6.0 + + '@types/serve-index@1.9.4': + dependencies: + '@types/express': 4.17.25 + + '@types/serve-static@1.15.10': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 25.6.0 + '@types/send': 0.17.6 + + '@types/sockjs@0.3.36': + dependencies: + '@types/node': 25.6.0 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.6.0 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@ungap/structured-clone@1.3.0': {} + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn-import-phases@1.0.4(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + optional: true + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn-walk@8.3.5: + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + address@1.2.2: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + + ajv-keywords@3.5.2(ajv@6.14.0): + dependencies: + ajv: 6.14.0 + + ajv-keywords@5.1.0(ajv@8.18.0): + dependencies: + ajv: 8.18.0 + fast-deep-equal: 3.1.3 + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + algoliasearch-helper@3.28.1(algoliasearch@5.50.1): + dependencies: + '@algolia/events': 4.0.1 + algoliasearch: 5.50.1 + + algoliasearch@5.50.1: + dependencies: + '@algolia/abtesting': 1.16.1 + '@algolia/client-abtesting': 5.50.1 + '@algolia/client-analytics': 5.50.1 + '@algolia/client-common': 5.50.1 + '@algolia/client-insights': 5.50.1 + '@algolia/client-personalization': 5.50.1 + '@algolia/client-query-suggestions': 5.50.1 + '@algolia/client-search': 5.50.1 + '@algolia/ingestion': 1.50.1 + '@algolia/monitoring': 1.50.1 + '@algolia/recommend': 5.50.1 + '@algolia/requester-browser-xhr': 5.50.1 + '@algolia/requester-fetch': 5.50.1 + '@algolia/requester-node-http': 5.50.1 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-html-community@0.0.8: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-union@2.1.0: {} + + asn1js@3.0.7: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + astring@1.9.0: {} + + autoprefixer@10.4.27(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001787 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.95.0): + dependencies: + '@babel/core': 7.29.0 + find-cache-dir: 4.0.0 + schema-utils: 4.3.3 + webpack: 5.95.0 + + babel-plugin-dynamic-import-node@2.3.3: + dependencies: + object.assign: 4.1.7 + + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.10.18: {} + + batch@0.6.1: {} + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + body-parser@1.20.4: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.14.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bonjour-service@1.3.0: + dependencies: + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + + boolbase@1.0.0: {} + + boxen@6.2.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + boxen@7.1.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.14: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.18 + caniuse-lite: 1.0.30001787 + electron-to-chromium: 1.5.335 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + bytes@3.0.0: {} + + bytes@3.1.2: {} + + bytestreamjs@2.0.1: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.2.0 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.1 + responselike: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase@6.3.0: {} + + camelcase@7.0.1: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.28.2 + caniuse-lite: 1.0.30001787 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001787: {} + + ccount@2.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + htmlparser2: 8.0.2 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + clean-stack@2.2.0: {} + + cli-boxes@3.0.0: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combine-promises@1.2.0: {} + + comma-separated-tokens@2.0.3: {} + + commander@10.0.1: {} + + commander@2.20.3: {} + + commander@5.1.0: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-path-prefix@3.0.0: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@6.0.0: + dependencies: + dot-prop: 6.0.1 + graceful-fs: 4.2.11 + unique-string: 3.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 5.1.0 + + connect-history-api-fallback@2.0.0: {} + + consola@3.4.2: {} + + content-disposition@0.5.2: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.7: {} + + cookie@0.7.2: {} + + copy-webpack-plugin@11.0.0(webpack@5.95.0): + dependencies: + fast-glob: 3.3.3 + glob-parent: 6.0.2 + globby: 13.2.2 + normalize-path: 3.0.0 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + webpack: 5.95.0 + + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + + core-js-pure@3.49.0: {} + + core-js@3.49.0: {} + + core-util-is@1.0.3: {} + + cosmiconfig@8.3.6(typescript@5.9.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + + css-blank-pseudo@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + css-declaration-sorter@7.4.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + css-has-pseudo@7.0.3(postcss@8.5.9): + dependencies: + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + + css-loader@6.11.0(webpack@5.95.0): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.9) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.9) + postcss-modules-scope: 3.2.1(postcss@8.5.9) + postcss-modules-values: 4.0.0(postcss@8.5.9) + postcss-value-parser: 4.2.0 + semver: 7.7.4 + optionalDependencies: + webpack: 5.95.0 + + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.95.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + cssnano: 6.1.2(postcss@8.5.9) + jest-worker: 29.7.0 + postcss: 8.5.9 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + webpack: 5.95.0 + optionalDependencies: + clean-css: 5.3.3 + + css-prefers-color-scheme@10.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssdb@8.8.0: {} + + cssesc@3.0.0: {} + + cssnano-preset-advanced@6.1.2(postcss@8.5.9): + dependencies: + autoprefixer: 10.4.27(postcss@8.5.9) + browserslist: 4.28.2 + cssnano-preset-default: 6.1.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-discard-unused: 6.0.5(postcss@8.5.9) + postcss-merge-idents: 6.0.3(postcss@8.5.9) + postcss-reduce-idents: 6.0.3(postcss@8.5.9) + postcss-zindex: 6.0.2(postcss@8.5.9) + + cssnano-preset-default@6.1.2(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + css-declaration-sorter: 7.4.0(postcss@8.5.9) + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-calc: 9.0.1(postcss@8.5.9) + postcss-colormin: 6.1.0(postcss@8.5.9) + postcss-convert-values: 6.1.0(postcss@8.5.9) + postcss-discard-comments: 6.0.2(postcss@8.5.9) + postcss-discard-duplicates: 6.0.3(postcss@8.5.9) + postcss-discard-empty: 6.0.3(postcss@8.5.9) + postcss-discard-overridden: 6.0.2(postcss@8.5.9) + postcss-merge-longhand: 6.0.5(postcss@8.5.9) + postcss-merge-rules: 6.1.1(postcss@8.5.9) + postcss-minify-font-values: 6.1.0(postcss@8.5.9) + postcss-minify-gradients: 6.0.3(postcss@8.5.9) + postcss-minify-params: 6.1.0(postcss@8.5.9) + postcss-minify-selectors: 6.0.4(postcss@8.5.9) + postcss-normalize-charset: 6.0.2(postcss@8.5.9) + postcss-normalize-display-values: 6.0.2(postcss@8.5.9) + postcss-normalize-positions: 6.0.2(postcss@8.5.9) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.9) + postcss-normalize-string: 6.0.2(postcss@8.5.9) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.9) + postcss-normalize-unicode: 6.1.0(postcss@8.5.9) + postcss-normalize-url: 6.0.2(postcss@8.5.9) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.9) + postcss-ordered-values: 6.0.2(postcss@8.5.9) + postcss-reduce-initial: 6.1.0(postcss@8.5.9) + postcss-reduce-transforms: 6.0.2(postcss@8.5.9) + postcss-svgo: 6.0.3(postcss@8.5.9) + postcss-unique-selectors: 6.0.4(postcss@8.5.9) + + cssnano-utils@4.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + cssnano@6.1.2(postcss@8.5.9): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.9) + lilconfig: 3.1.3 + postcss: 8.5.9 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.2.3: {} + + debounce@1.2.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + depd@1.1.2: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + destroy@1.2.0: {} + + detect-node@2.1.0: {} + + detect-port@1.6.1: + dependencies: + address: 1.2.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + + dom-converter@0.2.0: + dependencies: + utila: 0.4.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.335: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojilib@2.4.0: {} + + emojis-list@3.0.0: {} + + emoticon@4.1.0: {} + + encodeurl@2.0.0: {} + + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.2 + + entities@2.2.0: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-module-lexer@2.0.0: + optional: true + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.16.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + esprima@4.0.1: {} + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + eta@2.2.0: {} + + etag@1.8.1: {} + + eval@0.1.8: + dependencies: + '@types/node': 25.6.0 + require-like: 0.1.2 + + eventemitter3@4.0.7: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + express@4.22.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.4 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.14.2 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-uri@3.1.0: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fault@2.0.1: + dependencies: + format: 0.2.2 + + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + + feed@4.2.2: + dependencies: + xml-js: 1.6.11 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-loader@6.2.0(webpack@5.106.1): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.106.1 + optional: true + + file-loader@6.2.0(webpack@5.95.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.95.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-cache-dir@4.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.11: {} + + form-data-encoder@2.1.4: {} + + format@0.2.2: {} + + forwarded@0.2.0: {} + + fraction.js@5.3.4: {} + + fresh@0.5.2: {} + + fs-extra@11.3.4: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + github-slugger@1.5.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regex.js@1.2.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + glob-to-regexp@0.4.1: {} + + global-dirs@3.0.1: + dependencies: + ini: 2.0.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 4.0.0 + + gopd@1.2.0: {} + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.2 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + handle-thing@2.0.1: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-yarn@3.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + he@1.2.0: {} + + history@4.10.1: + dependencies: + '@babel/runtime': 7.29.2 + loose-envify: 1.4.0 + resolve-pathname: 3.0.0 + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + value-equal: 1.0.1 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + hpack.js@2.1.6: + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + + html-escaper@2.0.2: {} + + html-minifier-terser@6.1.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.46.1 + + html-minifier-terser@7.2.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 10.0.1 + entities: 4.5.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.46.1 + + html-tags@3.3.1: {} + + html-void-elements@3.0.0: {} + + html-webpack-plugin@5.6.6(webpack@5.95.0): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.18.1 + pretty-error: 4.0.0 + tapable: 2.3.2 + optionalDependencies: + webpack: 5.95.0 + + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-cache-semantics@4.2.0: {} + + http-deceiver@1.2.7: {} + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-parser-js@0.5.10: {} + + http-proxy-middleware@2.0.9(@types/express@4.17.25): + dependencies: + '@types/http-proxy': 1.17.17 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.25 + transitivePeerDependencies: + - debug + + http-proxy@1.18.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.11 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@2.1.0: {} + + hyperdyperid@1.2.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + icss-utils@5.1.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + ignore@5.3.2: {} + + image-size@2.0.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-lazy@4.0.0: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + infima@0.2.0-alpha.45: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + inline-style-parser@0.2.7: {} + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + ipaddr.js@1.9.1: {} + + ipaddr.js@2.3.0: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extendable@0.1.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + + is-network-error@1.3.1: {} + + is-npm@6.1.0: {} + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@3.0.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-regexp@1.0.0: {} + + is-stream@2.0.1: {} + + is-typedarray@1.0.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + is-yarn-global@0.4.1: {} + + isarray@0.0.1: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 25.6.0 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 25.6.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 25.6.0 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jiti@1.21.7: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + js-tokens@4.0.0: {} + + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json5@2.2.3: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + launch-editor@2.13.2: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.3 + + leven@3.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.1: {} + + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.debounce@4.0.8: {} + + lodash.memoize@4.1.2: {} + + lodash.uniq@4.5.0: {} + + lodash@4.18.1: {} + + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lowercase-keys@3.0.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + markdown-extensions@2.0.0: {} + + markdown-table@2.0.0: + dependencies: + repeat-string: 1.6.1 + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + media-typer@0.3.0: {} + + memfs@4.57.1(tslib@2.8.1): + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@1.1.0: {} + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@1.1.0: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.33.0: {} + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + mini-css-extract-plugin@2.10.2(webpack@5.95.0): + dependencies: + schema-utils: 4.3.3 + tapable: 2.3.2 + webpack: 5.95.0 + + minimalistic-assert@1.0.1: {} + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.14 + + minimist@1.2.8: {} + + mrmime@2.0.1: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + multicast-dns@7.2.5: + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + + nanoid@3.3.11: {} + + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + + neo-async@2.6.2: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + + node-releases@2.0.37: {} + + normalize-path@3.0.0: {} + + normalize-url@8.1.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + null-loader@4.0.1(webpack@5.95.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.95.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + obuf@1.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.1.0: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + opener@1.5.2: {} + + p-cancelable@3.0.0: {} + + p-finally@1.0.0: {} + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.3.1 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.1.1 + registry-url: 6.0.1 + semver: 7.7.4 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-numeric-range@1.3.0: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + parseurl@1.3.3: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-exists@5.0.0: {} + + path-is-inside@1.0.2: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.13: {} + + path-to-regexp@1.9.0: + dependencies: + isarray: 0.0.1 + + path-to-regexp@3.3.0: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.7 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + + postcss-attribute-case-insensitive@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-calc@9.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-clamp@4.1.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-color-functional-notation@7.0.12(postcss@8.5.9): + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + postcss-color-hex-alpha@10.0.0(postcss@8.5.9): + dependencies: + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-color-rebeccapurple@10.0.0(postcss@8.5.9): + dependencies: + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-colormin@6.1.0(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-convert-values@6.1.0(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-custom-media@11.0.6(postcss@8.5.9): + dependencies: + '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + postcss: 8.5.9 + + postcss-custom-properties@14.0.6(postcss@8.5.9): + dependencies: + '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-custom-selectors@8.0.5(postcss@8.5.9): + dependencies: + '@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-dir-pseudo-class@9.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-discard-comments@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-duplicates@6.0.3(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-empty@6.0.3(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-overridden@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-unused@6.0.5(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + + postcss-double-position-gradients@6.0.4(postcss@8.5.9): + dependencies: + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-focus-visible@10.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-focus-within@9.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-font-variant@5.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-gap-properties@6.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-image-set-function@7.0.0(postcss@8.5.9): + dependencies: + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-lab-function@7.0.12(postcss@8.5.9): + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/utilities': 2.0.0(postcss@8.5.9) + postcss: 8.5.9 + + postcss-loader@7.3.4(postcss@8.5.9)(typescript@5.9.3)(webpack@5.95.0): + dependencies: + cosmiconfig: 8.3.6(typescript@5.9.3) + jiti: 1.21.7 + postcss: 8.5.9 + semver: 7.7.4 + webpack: 5.95.0 + transitivePeerDependencies: + - typescript + + postcss-logical@8.1.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-merge-idents@6.0.3(postcss@8.5.9): + dependencies: + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-merge-longhand@6.0.5(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.5.9) + + postcss-merge-rules@6.1.1(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@6.1.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@6.0.3(postcss@8.5.9): + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-params@6.1.0(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@6.0.4(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.9): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-modules-values@4.0.0(postcss@8.5.9): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + + postcss-nesting@13.0.2(postcss@8.5.9): + dependencies: + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-normalize-charset@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-normalize-display-values@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@6.1.0(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-opacity-percentage@3.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-ordered-values@6.0.2(postcss@8.5.9): + dependencies: + cssnano-utils: 4.0.2(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-overflow-shorthand@6.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-page-break@3.0.4(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-place@10.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-preset-env@10.6.1(postcss@8.5.9): + dependencies: + '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.9) + '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.9) + '@csstools/postcss-color-function': 4.0.12(postcss@8.5.9) + '@csstools/postcss-color-function-display-p3-linear': 1.0.1(postcss@8.5.9) + '@csstools/postcss-color-mix-function': 3.0.12(postcss@8.5.9) + '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.2(postcss@8.5.9) + '@csstools/postcss-content-alt-text': 2.0.8(postcss@8.5.9) + '@csstools/postcss-contrast-color-function': 2.0.12(postcss@8.5.9) + '@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.9) + '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.9) + '@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.9) + '@csstools/postcss-gradients-interpolation-method': 5.0.12(postcss@8.5.9) + '@csstools/postcss-hwb-function': 4.0.12(postcss@8.5.9) + '@csstools/postcss-ic-unit': 4.0.4(postcss@8.5.9) + '@csstools/postcss-initial': 2.0.1(postcss@8.5.9) + '@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.9) + '@csstools/postcss-light-dark-function': 2.0.11(postcss@8.5.9) + '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.9) + '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.9) + '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.9) + '@csstools/postcss-logical-resize': 3.0.0(postcss@8.5.9) + '@csstools/postcss-logical-viewport-units': 3.0.4(postcss@8.5.9) + '@csstools/postcss-media-minmax': 2.0.9(postcss@8.5.9) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.9) + '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.9) + '@csstools/postcss-normalize-display-values': 4.0.1(postcss@8.5.9) + '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.9) + '@csstools/postcss-position-area-property': 1.0.0(postcss@8.5.9) + '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.9) + '@csstools/postcss-property-rule-prelude-list': 1.0.0(postcss@8.5.9) + '@csstools/postcss-random-function': 2.0.1(postcss@8.5.9) + '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.9) + '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.9) + '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.9) + '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.9) + '@csstools/postcss-syntax-descriptor-syntax-production': 1.0.1(postcss@8.5.9) + '@csstools/postcss-system-ui-font-family': 1.0.0(postcss@8.5.9) + '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.9) + '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.9) + '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.9) + autoprefixer: 10.4.27(postcss@8.5.9) + browserslist: 4.28.2 + css-blank-pseudo: 7.0.1(postcss@8.5.9) + css-has-pseudo: 7.0.3(postcss@8.5.9) + css-prefers-color-scheme: 10.0.0(postcss@8.5.9) + cssdb: 8.8.0 + postcss: 8.5.9 + postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.9) + postcss-clamp: 4.1.0(postcss@8.5.9) + postcss-color-functional-notation: 7.0.12(postcss@8.5.9) + postcss-color-hex-alpha: 10.0.0(postcss@8.5.9) + postcss-color-rebeccapurple: 10.0.0(postcss@8.5.9) + postcss-custom-media: 11.0.6(postcss@8.5.9) + postcss-custom-properties: 14.0.6(postcss@8.5.9) + postcss-custom-selectors: 8.0.5(postcss@8.5.9) + postcss-dir-pseudo-class: 9.0.1(postcss@8.5.9) + postcss-double-position-gradients: 6.0.4(postcss@8.5.9) + postcss-focus-visible: 10.0.1(postcss@8.5.9) + postcss-focus-within: 9.0.1(postcss@8.5.9) + postcss-font-variant: 5.0.0(postcss@8.5.9) + postcss-gap-properties: 6.0.0(postcss@8.5.9) + postcss-image-set-function: 7.0.0(postcss@8.5.9) + postcss-lab-function: 7.0.12(postcss@8.5.9) + postcss-logical: 8.1.0(postcss@8.5.9) + postcss-nesting: 13.0.2(postcss@8.5.9) + postcss-opacity-percentage: 3.0.0(postcss@8.5.9) + postcss-overflow-shorthand: 6.0.0(postcss@8.5.9) + postcss-page-break: 3.0.4(postcss@8.5.9) + postcss-place: 10.0.0(postcss@8.5.9) + postcss-pseudo-class-any-link: 10.0.1(postcss@8.5.9) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.9) + postcss-selector-not: 8.0.1(postcss@8.5.9) + + postcss-pseudo-class-any-link@10.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-reduce-idents@6.0.3(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@6.1.0(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + caniuse-api: 3.0.0 + postcss: 8.5.9 + + postcss-reduce-transforms@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-selector-not@8.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sort-media-queries@5.2.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + sort-css-media-queries: 2.2.0 + + postcss-svgo@6.0.3(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + svgo: 3.3.3 + + postcss-unique-selectors@6.0.4(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss-zindex@6.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss@8.5.9: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-error@4.0.0: + dependencies: + lodash: 4.18.1 + renderkid: 3.0.0 + + pretty-time@1.1.0: {} + + prism-react-renderer@2.4.1(react@18.3.1): + dependencies: + '@types/prismjs': 1.26.6 + clsx: 2.1.1 + react: 18.3.1 + + prismjs@1.30.0: {} + + process-nextick-args@2.0.1: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + property-information@7.1.0: {} + + proto-list@1.2.4: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + pupa@3.3.0: + dependencies: + escape-goat: 4.0.0 + + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + + qs@6.14.2: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.0: {} + + range-parser@1.2.1: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-fast-compare@3.2.2: {} + + react-is@16.13.1: {} + + react-json-view-lite@2.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + + react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0): + dependencies: + '@babel/runtime': 7.29.2 + react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' + webpack: 5.95.0 + + react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.29.2 + react: 18.3.1 + react-router: 5.3.4(react@18.3.1) + + react-router-dom@5.3.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.29.2 + history: 4.10.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-router: 5.3.4(react@18.3.1) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + react-router@5.3.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.29.2 + history: 4.10.1 + hoist-non-react-statics: 3.3.2 + loose-envify: 1.4.0 + path-to-regexp: 1.9.0 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 16.13.1 + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + reflect-metadata@0.2.2: {} + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + registry-auth-token@5.1.1: + dependencies: + '@pnpm/npm-conf': 3.0.2 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + regjsgen@0.8.0: {} + + regjsparser@0.13.1: + dependencies: + jsesc: 3.1.0 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + relateurl@0.2.7: {} + + remark-directive@3.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-emoji@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + emoticon: 4.1.0 + mdast-util-find-and-replace: 3.0.2 + node-emoji: 2.2.0 + unified: 11.0.5 + + remark-frontmatter@5.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + renderkid@3.0.0: + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.18.1 + strip-ansi: 6.0.1 + + repeat-string@1.6.1: {} + + require-from-string@2.0.2: {} + + require-like@0.1.2: {} + + requires-port@1.0.0: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve-pathname@3.0.0: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + retry@0.13.1: {} + + reusify@1.1.0: {} + + rtlcss@4.3.0: + dependencies: + escalade: 3.2.0 + picocolors: 1.1.1 + postcss: 8.5.9 + strip-json-comments: 3.1.1 + + run-applescript@7.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sax@1.6.0: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + schema-dts@1.1.5: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.14.0 + ajv-keywords: 3.5.2(ajv@6.14.0) + + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.18.0 + ajv-formats: 2.1.1(ajv@8.18.0) + ajv-keywords: 5.1.0(ajv@8.18.0) + + search-insights@2.17.3: {} + + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + select-hose@2.0.0: {} + + selfsigned@5.5.0: + dependencies: + '@peculiar/x509': 1.14.3 + pkijs: 3.4.0 + + semver-diff@4.0.0: + dependencies: + semver: 7.7.4 + + semver@6.3.1: {} + + semver@7.7.4: {} + + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve-index@1.9.2: + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.8.1 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shallowequal@1.1.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.3: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + sisteransi@1.0.5: {} + + sitemap@7.1.3: + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.0 + + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + + slash@3.0.0: {} + + slash@4.0.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + sockjs@0.3.24: + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + + sort-css-media-queries@2.2.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + spdy-transport@3.0.0: + dependencies: + debug: 4.4.3 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + + spdy@4.0.2: + dependencies: + debug: 4.4.3 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + + sprintf-js@1.0.3: {} + + srcset@4.0.0: {} + + statuses@1.5.0: {} + + statuses@2.0.2: {} + + std-env@3.10.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-bom-string@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + stylehacks@6.1.1(postcss@8.5.9): + dependencies: + browserslist: 4.28.2 + postcss: 8.5.9 + postcss-selector-parser: 6.1.2 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-parser@2.0.4: {} + + svgo@3.3.3: + dependencies: + commander: 7.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 + + tapable@2.3.2: {} + + terser-webpack-plugin@5.4.0(webpack@5.106.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.1 + webpack: 5.106.1 + optional: true + + terser-webpack-plugin@5.4.0(webpack@5.95.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.1 + webpack: 5.95.0 + + terser@5.46.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.16.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thingies@2.6.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + thunky@1.1.0: {} + + tiny-invariant@1.3.3: {} + + tiny-warning@1.0.3: {} + + tinypool@1.1.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + totalist@3.0.1: {} + + tree-dump@1.1.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + + type-fest@0.21.3: {} + + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typescript@5.9.3: {} + + undici-types@7.19.2: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-emoji-modifier-base@1.0.0: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@6.0.2: + dependencies: + boxen: 7.1.1 + chalk: 5.6.2 + configstore: 6.0.0 + has-yarn: 3.0.0 + import-lazy: 4.0.0 + is-ci: 3.0.1 + is-installed-globally: 0.4.0 + is-npm: 6.1.0 + is-yarn-global: 0.4.1 + latest-version: 7.0.0 + pupa: 3.3.0 + semver: 7.7.4 + semver-diff: 4.0.0 + xdg-basedir: 5.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-loader@4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.95.0): + dependencies: + loader-utils: 2.0.4 + mime-types: 2.1.35 + schema-utils: 3.3.0 + webpack: 5.95.0 + optionalDependencies: + file-loader: 6.2.0(webpack@5.106.1) + + util-deprecate@1.0.2: {} + + utila@0.4.0: {} + + utility-types@3.11.0: {} + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + value-equal@1.0.1: {} + + vary@1.1.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + watchpack@2.5.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wbuf@1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + + web-namespaces@2.0.1: {} + + webpack-bundle-analyzer@4.10.2: + dependencies: + '@discoveryjs/json-ext': 0.5.7 + acorn: 8.16.0 + acorn-walk: 8.3.5 + commander: 7.2.0 + debounce: 1.2.1 + escape-string-regexp: 4.0.0 + gzip-size: 6.0.0 + html-escaper: 2.0.2 + opener: 1.5.2 + picocolors: 1.1.1 + sirv: 2.0.4 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.95.0): + dependencies: + colorette: 2.0.20 + memfs: 4.57.1(tslib@2.8.1) + mime-types: 3.0.2 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.95.0 + transitivePeerDependencies: + - tslib + + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.95.0): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.8 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.10 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + express: 4.22.1 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.13.2 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.3 + selfsigned: 5.5.0 + serve-index: 1.9.2 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.95.0) + ws: 8.20.0 + optionalDependencies: + webpack: 5.95.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - tslib + - utf-8-validate + + webpack-merge@5.10.0: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-sources@3.3.4: {} + + webpack@5.106.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.2 + terser-webpack-plugin: 5.4.0(webpack@5.106.1) + watchpack: 2.5.1 + webpack-sources: 3.3.4 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + optional: true + + webpack@5.95.0: + dependencies: + '@types/estree': 1.0.8 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.3.2 + terser-webpack-plugin: 5.4.0(webpack@5.95.0) + watchpack: 2.5.1 + webpack-sources: 3.3.4 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpackbar@6.0.1(webpack@5.95.0): + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + consola: 3.4.2 + figures: 3.2.0 + markdown-table: 2.0.0 + pretty-time: 1.1.0 + std-env: 3.10.0 + webpack: 5.95.0 + wrap-ansi: 7.0.0 + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.10 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + wildcard@2.0.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + ws@7.5.10: {} + + ws@8.20.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + + xdg-basedir@5.1.0: {} + + xml-js@1.6.11: + dependencies: + sax: 1.6.0 + + yallist@3.1.1: {} + + yocto-queue@1.2.2: {} + + zwitch@2.0.4: {} diff --git a/docs-site/sidebars.ts b/docs-site/sidebars.ts new file mode 100644 index 00000000..a55a2291 --- /dev/null +++ b/docs-site/sidebars.ts @@ -0,0 +1,23 @@ +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; + +const sidebars: SidebarsConfig = { + docsSidebar: [ + { type: 'doc', id: 'about', label: 'About' }, + { type: 'doc', id: 'getting-started', label: 'Getting Started' }, + { type: 'doc', id: 'cli', label: 'CLI Reference' }, + { type: 'doc', id: 'api', label: 'API Reference' }, + { type: 'doc', id: 'auto-translation', label: 'Auto-Translation' }, + { + type: 'category', + label: 'Features', + items: [{ type: 'autogenerated', dirName: 'features' }], + }, + { + type: 'category', + label: 'Guides', + items: [{ type: 'autogenerated', dirName: 'guides' }], + }, + ], +}; + +export default sidebars; diff --git a/docs-site/src/css/custom.css b/docs-site/src/css/custom.css new file mode 100644 index 00000000..bd519b28 --- /dev/null +++ b/docs-site/src/css/custom.css @@ -0,0 +1,10 @@ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; +} diff --git a/docs-site/src/pages/index.md b/docs-site/src/pages/index.md new file mode 100644 index 00000000..eed3ed2f --- /dev/null +++ b/docs-site/src/pages/index.md @@ -0,0 +1,7 @@ +--- +slug: / +--- + + + + diff --git a/docs-site/static/img/.gitkeep b/docs-site/static/img/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs-site/tsconfig.json b/docs-site/tsconfig.json new file mode 100644 index 00000000..2928c49b --- /dev/null +++ b/docs-site/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ES2017", + "lib": ["ES2017", "DOM"], + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "react", + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "skipLibCheck": true, + "noEmit": true + } +} diff --git a/docs/about.md b/docs/about.md index b370dca7..146fe98f 100644 --- a/docs/about.md +++ b/docs/about.md @@ -1,3 +1,8 @@ +--- +title: About +sidebar_position: 1 +--- + # About LingoTracker LingoTracker is a comprehensive translation management tool designed as the ultimate companion to the [Transloco](https://github.com/jsverse/transloco) library. It provides developers and teams with an efficient, scalable solution for managing translation resources across multiple languages. @@ -22,10 +27,11 @@ LingoTracker streamlines the entire translation workflow by providing intelligen - **Explicit Status Workflow**: `new`, `translated`, `stale`, `verified` with automatic updates on base changes - **Entry Tagging**: Tags stored alongside entries for rich filtering and export - **Structured Key Naming**: Dot-delimited keys with strict character rules ensure predictable, conflict-free resource paths +- **AI Integration**: Installable Claude Code skill for AI-assisted translation workflows — detect hardcoded strings, create resources, and update components directly from your AI coding assistant ## Who It's For -LingoTracker is ideal for development teams working on internationalized applications who need reliable, scalable translation management. Whether you're managing a small project with a few languages or an enterprise application with hundreds of translation keys, LingoTracker adapts to your needs. +LingoTracker is ideal for development teams working on internationalized applications who need reliable, scalable translation management. Whether you're managing a small project with a few languages or an enterprise application with thousands of translation keys, LingoTracker adapts to your needs. ## Technology Integration diff --git a/docs/api.md b/docs/api.md index aa0b2f5c..9d3ec9e9 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,3 +1,8 @@ +--- +title: API Reference +sidebar_position: 4 +--- + # LingoTracker API Reference ## Overview @@ -13,7 +18,7 @@ The LingoTracker API provides REST endpoints for managing translation resources, ## Authentication -Currently, the API does not require authentication. All endpoints are publicly accessible. +Currently, the API does not require authentication. It is meant to run on your machine when you need it. ## Health Check diff --git a/docs/auto-translation.md b/docs/auto-translation.md index 4a777635..a3362dc6 100644 --- a/docs/auto-translation.md +++ b/docs/auto-translation.md @@ -1,3 +1,8 @@ +--- +title: Auto-Translation +sidebar_position: 5 +--- + # Auto-Translation LingoTracker can automatically translate new and stale resources using machine translation providers. This feature is opt-in and configured per-project or per-collection in `.lingo-tracker.json`. diff --git a/docs/cli.md b/docs/cli.md index 056e1d69..0caefd45 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -1,3 +1,8 @@ +--- +title: CLI Reference +sidebar_position: 3 +--- + # CLI Reference This document provides a comprehensive reference for all Lingo Tracker CLI commands. For initial setup instructions, see the [Getting Started Guide](./getting-started.md). diff --git a/docs/features/bundle-type-generation.md b/docs/features/bundle-type-generation.md index e3bbaf48..53ef8e03 100644 --- a/docs/features/bundle-type-generation.md +++ b/docs/features/bundle-type-generation.md @@ -1,3 +1,8 @@ +--- +title: Bundle Type Generation +sidebar_position: 1 +--- + # Bundle Type Generation LingoTracker can automatically generate TypeScript type definitions for your translation bundles. This provides compile-time type safety, autocomplete, and refactoring support for your translation keys. @@ -13,8 +18,6 @@ LingoTracker can automatically generate TypeScript type definitions for your tra To enable type generation, add the `typeDistFile` property to your bundle definition in `.lingo-tracker.json`. This property specifies the output file path for the generated TypeScript file. The path must end with `.ts` and must point to a file, not a directory. Intermediate directories are created automatically if they do not exist. -> If you are migrating from the deprecated `typeDist` property, see the [Migration section](#migration-from-typedist) below. - ```json { "bundles": { @@ -170,28 +173,6 @@ lingo-tracker bundle --name common --token-constant-name MY_KEYS - **Mixed nodes** (a key that is both a leaf and a parent, e.g., `buttons` and `buttons.ok` both exist): the leaf value is dropped and only the children are emitted. Standard i18n usage does not produce such keys. - **Empty bundles**: if the bundle resolves to zero keys, type generation is skipped and a warning is printed. No `.ts` file is written. -## Migration from `typeDist` - -> **Deprecation Notice**: The `typeDist` configuration property has been renamed to `typeDistFile` to clarify that the value must be a file path (ending with `.ts`), not a directory. - -- The old `typeDist` name is still accepted but will produce a deprecation warning at runtime. -- Users should update their `.lingo-tracker.json` to use `typeDistFile` instead of `typeDist`. -- The `typeDistFile` value must end with `.ts` and must be a file path, not a directory path. - -**Before**: -```json -{ - "typeDist": "./src/generated/common-tokens.ts" -} -``` - -**After**: -```json -{ - "typeDistFile": "./src/generated/common-tokens.ts" -} -``` - ## Integration ### NPM Scripts diff --git a/docs/features/export.md b/docs/features/export.md index 73bd416f..7bd5c5cd 100644 --- a/docs/features/export.md +++ b/docs/features/export.md @@ -1,3 +1,8 @@ +--- +title: Export +sidebar_position: 2 +--- + # Export Feature The Export feature allows you to export translation resources from LingoTracker into standard formats (XLIFF and JSON) for integration with translation services and external systems. diff --git a/docs/features/import.md b/docs/features/import.md index 7309538d..3d897cf0 100644 --- a/docs/features/import.md +++ b/docs/features/import.md @@ -1,3 +1,8 @@ +--- +title: Import +sidebar_position: 3 +--- + # Import Feature The Import feature allows you to import translation resources from external sources in standard formats (XLIFF and JSON), supporting professional translation workflows, system migrations, and expert verification processes. diff --git a/docs/features/validate.md b/docs/features/validate.md index 45e8885b..45015be4 100644 --- a/docs/features/validate.md +++ b/docs/features/validate.md @@ -1,3 +1,8 @@ +--- +title: Validate +sidebar_position: 4 +--- + # Validate Feature The Validate feature provides a comprehensive translation validation system designed to ensure translation completeness and quality before production deployment. It serves as a quality gate in CI/CD pipelines by checking the status of all translation resources across all configured locales and collections. diff --git a/docs/getting-started.md b/docs/getting-started.md index 0b63add9..2b1b3bdf 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,19 +1,46 @@ +--- +title: Getting Started +sidebar_position: 2 +--- + ## Getting Started Lingo Tracker helps you track, validate, and manage translations across projects. This guide shows how to install the CLI, initialize a project, and add collections. ### Install -Node.js >= 22.16 is required. Install the CLI as a dev dependency in your project: +Node.js >= 22.16 is required. Install the CLI as a dev dependency in your project. + +#### pnpm ```bash pnpm add -D @simoncodes-ca/lingo-tracker +``` + +#### npm + +```bash npm install --save-dev @simoncodes-ca/lingo-tracker +``` + +#### yarn + +```bash yarn add -D @simoncodes-ca/lingo-tracker ``` Once installed, use the `npx lingo-tracker` command to interact with the CLI. +### Install the Lingo Tracker Skill + +If you use Claude Code (or a compatible AI assistant), install the Lingo Tracker skill to enable guided i18n workflows — detecting hardcoded strings, creating translation resources, and updating components to use Transloco: + +```bash +npx lingo-tracker install-skill +``` + +This writes a skill file to your project that Claude Code picks up automatically. See [`install-skill`](./cli.md#install-skill) in the CLI Reference for details. + ### Run the Lingo Tracker App The `lingo-tracker` package ships a built-in API server that hosts the Lingo Tracker web interface. @@ -337,4 +364,3 @@ For full details on configuration, ICU handling, and best practices, see the [Au - For managing translation resources and other CLI commands, see the [CLI Reference](./cli.md) - For programmatic access via REST API, see the [API Reference](./api.md) - For setting up machine translation, see the [Auto-Translation Guide](./auto-translation.md) -- To set up an AI assistant skill for your repo (guides Claude Code and similar tools through the i18n workflow), run `lingo-tracker install-skill` — see [`install-skill`](./cli.md#install-skill) in the CLI Reference diff --git a/docs/guides/bundling.md b/docs/guides/bundling.md index 35cc84ea..cae0b174 100644 --- a/docs/guides/bundling.md +++ b/docs/guides/bundling.md @@ -1,3 +1,8 @@ +--- +title: Bundling +sidebar_position: 1 +--- + # Bundle Generation Guide This guide provides comprehensive examples and best practices for using LingoTracker's bundle generation feature to create optimized translation files for your applications. @@ -101,6 +106,66 @@ Each file contains hierarchical JSON with all translations for that locale. > **Want TypeScript type safety?** Add `typeDistFile` to your bundle config and LingoTracker will generate a typed constants file alongside the JSON bundles. See [Bundle Type Generation](../features/bundle-type-generation.md). +### 4. Add Type-Safe Tokens (Optional) + +Extend the bundle config with `typeDistFile`: + +```json +{ + "bundles": { + "main": { + "bundleName": "{locale}", + "dist": "./src/assets/i18n", + "collections": "All", + "typeDistFile": "./src/generated/main-tokens.ts" + } + } +} +``` + +Running `lingo-tracker bundle` now also generates `src/generated/main-tokens.ts`: + +```typescript +// src/generated/main-tokens.ts (auto-generated — do not edit) +export const MAIN_TOKENS = { + APPS: { + COMMON: { + BUTTONS: { + OK: 'apps.common.buttons.ok', + CANCEL: 'apps.common.buttons.cancel', + APPLY: 'apps.common.buttons.apply', + }, + }, + }, +} as const; + +export type MainTokens = typeof MAIN_TOKENS; +``` + +Use the constants in your components — no more hardcoded string keys: + +```typescript +import { MAIN_TOKENS } from '@/generated/main-tokens'; + +@Component({ + template: ` +

{{ tokens.APPS.COMMON.BUTTONS.OK | transloco }}

+ + ` +}) +export class AppComponent { + readonly tokens = MAIN_TOKENS; +} +``` + +Or pass individual keys directly: + +```typescript +this.translocoService.translate(MAIN_TOKENS.APPS.COMMON.BUTTONS.OK); +``` + +Your IDE will autocomplete available keys, and renaming a key in LingoTracker regenerates the constant — any stale references become compile errors. + --- ## Bundle Configuration diff --git a/docs/guides/migration.md b/docs/guides/migration.md index d8649732..700f10c2 100644 --- a/docs/guides/migration.md +++ b/docs/guides/migration.md @@ -1,3 +1,8 @@ +--- +title: Migration +sidebar_position: 2 +--- + # Migration Guide This guide provides step-by-step instructions for migrating translation resources from other translation management systems to LingoTracker. diff --git a/package.json b/package.json index cb259dab..df7d05f2 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "format": "pnpm exec biome format --write apps libs scripts types", "format:check": "pnpm exec biome format apps libs scripts types", "format:write": "pnpm exec biome format --write apps libs scripts types", - "lingo-tracker": "node dist/apps/cli/main.cjs" + "lingo-tracker": "node dist/apps/cli/main.cjs", + "docs:dev": "cd docs-site && pnpm start", + "docs:build": "cd docs-site && pnpm build" }, "keywords": [ "translation", From f9301be41f917191a15deacfa0d1e8fde976719d Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 21:28:35 -0700 Subject: [PATCH 10/13] style(docs): update styles to match lingo tracker --- docs-site/docusaurus.config.ts | 11 +- docs-site/src/css/custom.css | 174 +++++++++++++++++++++++++++-- docs-site/static/img/favicon.png | Bin 0 -> 873506 bytes docs-site/static/img/logo-dark.png | Bin 0 -> 31760 bytes docs-site/static/img/logo.png | Bin 0 -> 31879 bytes 5 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 docs-site/static/img/favicon.png create mode 100644 docs-site/static/img/logo-dark.png create mode 100644 docs-site/static/img/logo.png diff --git a/docs-site/docusaurus.config.ts b/docs-site/docusaurus.config.ts index febfb575..fe5c422f 100644 --- a/docs-site/docusaurus.config.ts +++ b/docs-site/docusaurus.config.ts @@ -4,7 +4,7 @@ import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { title: 'Lingo Tracker', tagline: 'Effortlessly Track, Validate, and Manage Your Translations', - favicon: 'img/favicon.ico', + favicon: 'img/favicon.png', url: 'https://simoncodes-ca.github.io', baseUrl: '/lingo-tracker/', @@ -44,8 +44,17 @@ const config: Config = { ], themeConfig: { + colorMode: { + defaultMode: 'light', + respectPrefersColorScheme: true, + }, navbar: { title: 'Lingo Tracker', + logo: { + alt: 'Lingo Tracker Logo', + src: 'img/logo.png', + srcDark: 'img/logo-dark.png', + }, items: [ { type: 'docSidebar', diff --git a/docs-site/src/css/custom.css b/docs-site/src/css/custom.css index bd519b28..f9a6b4b0 100644 --- a/docs-site/src/css/custom.css +++ b/docs-site/src/css/custom.css @@ -1,10 +1,168 @@ +/* Google Fonts — Watercolor design system */ +@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap'); + +/* ─── Light theme ─────────────────────────────────────────────────────────── */ :root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; + /* Primary — Warm Coral */ + --ifm-color-primary: #d4726a; + --ifm-color-primary-dark: #c25d55; + --ifm-color-primary-darker: #b95750; + --ifm-color-primary-darkest: #9d413a; + --ifm-color-primary-light: #da8880; + --ifm-color-primary-lighter: #de9189; + --ifm-color-primary-lightest: #e8a9a3; + + /* Fonts */ + --ifm-font-family-base: 'Nunito', sans-serif; + --ifm-font-family-monospace: 'IBM Plex Mono', monospace; + --ifm-code-font-size: 90%; + + /* Background & text */ + --ifm-background-color: #faf8f5; + --ifm-background-surface-color: #f5f1eb; + --ifm-font-color-base: #2e2923; + --ifm-font-color-secondary: #5a534a; + + /* Navbar */ + --ifm-navbar-background-color: #faf8f5; + --ifm-navbar-shadow: 0 1px 3px 0 rgb(44 36 28 / 0.08); + + /* Sidebar */ + --ifm-sidebar-background-color: #f5f1eb; + + /* Footer */ + --ifm-footer-background-color: #2e2923; + --ifm-footer-color: #d4cdc3; + --ifm-footer-link-color: #d4cdc3; + --ifm-footer-link-hover-color: #e8847c; + --ifm-footer-title-color: #f3efe9; + + /* Links */ + --ifm-link-color: #4a7fb5; + --ifm-link-hover-color: #3a6a9e; + + /* Code blocks */ + --ifm-code-background: #ede8e0; + --docusaurus-highlighted-code-line-bg: rgb(212 114 106 / 0.1); + + /* Borders */ + --ifm-color-emphasis-300: #e5dfd7; + --ifm-color-emphasis-400: #d4cdc3; + --ifm-hr-border-color: #e5dfd7; + --ifm-toc-border-color: #e5dfd7; + --ifm-table-border-color: #e5dfd7; + + /* Border radius */ + --ifm-global-radius: 0.5rem; + --ifm-code-border-radius: 0.375rem; + + /* Shadows */ + --ifm-global-shadow-md: 0 4px 8px -1px rgb(44 36 28 / 0.08), 0 2px 4px -2px rgb(44 36 28 / 0.06); + --ifm-global-shadow-lw: 0 1px 3px 0 rgb(44 36 28 / 0.06); + + /* Alerts */ + --ifm-color-success: #6da67e; + --ifm-color-warning: #d9a441; + --ifm-color-danger: #c95e5e; + --ifm-color-info: #4a7fb5; +} + +/* ─── Dark theme ──────────────────────────────────────────────────────────── */ +[data-theme='dark'] { + /* Primary — brightened Coral */ + --ifm-color-primary: #e8847c; + --ifm-color-primary-dark: #e06e65; + --ifm-color-primary-darker: #d4726a; + --ifm-color-primary-darkest: #c25d55; + --ifm-color-primary-light: #f0a09a; + --ifm-color-primary-lighter: #f4b0ab; + --ifm-color-primary-lightest: #f8c8c4; + + /* Background & text */ + --ifm-background-color: #141210; + --ifm-background-surface-color: #1c1814; + --ifm-font-color-base: #f3efe9; + --ifm-font-color-secondary: #d4cdc3; + + /* Navbar */ + --ifm-navbar-background-color: #1c1814; + --ifm-navbar-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.3); + + /* Sidebar */ + --ifm-sidebar-background-color: #1c1814; + + /* Footer */ + --ifm-footer-background-color: #0e0c0a; + --ifm-footer-color: #a89f93; + --ifm-footer-link-color: #a89f93; + --ifm-footer-link-hover-color: #e8847c; + --ifm-footer-title-color: #d4cdc3; + + /* Links */ + --ifm-link-color: #7bafde; + --ifm-link-hover-color: #9dc4e8; + + /* Code blocks */ + --ifm-code-background: #2e2923; + --docusaurus-highlighted-code-line-bg: rgb(232 132 124 / 0.12); + + /* Borders */ + --ifm-color-emphasis-300: #433d36; + --ifm-color-emphasis-400: #5a534a; + --ifm-hr-border-color: #433d36; + --ifm-toc-border-color: #433d36; + --ifm-table-border-color: #433d36; + + /* Shadows */ + --ifm-global-shadow-md: 0 4px 8px -1px rgb(0 0 0 / 0.35), 0 2px 4px -2px rgb(0 0 0 / 0.25); + --ifm-global-shadow-lw: 0 1px 3px 0 rgb(0 0 0 / 0.25); + + /* Alerts */ + --ifm-color-success: #7dbb8f; + --ifm-color-warning: #e4b454; + --ifm-color-danger: #d97878; + --ifm-color-info: #7bafde; +} + +/* ─── Body texture ────────────────────────────────────────────────────────── */ +body::after { + content: ''; + position: fixed; + inset: 0; + pointer-events: none; + z-index: 9999; + opacity: 1; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E"); +} + +/* ─── Navbar ──────────────────────────────────────────────────────────────── */ +.navbar__logo img { + height: 28px; +} + +.navbar__brand { + gap: 0.5rem; +} + +.navbar__title { + font-weight: 700; + font-size: 1.1rem; +} + +/* ─── Sidebar ─────────────────────────────────────────────────────────────── */ +.menu__link--active { + font-weight: 600; +} + +/* ─── Code ────────────────────────────────────────────────────────────────── */ +code { + border-radius: var(--ifm-code-border-radius); +} + +/* ─── Markdown ────────────────────────────────────────────────────────────── */ +article h1, +article h2, +article h3, +article h4 { + font-weight: 700; } diff --git a/docs-site/static/img/favicon.png b/docs-site/static/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdceedc208418a2c7b1a1601ae937e9cbf7c92 GIT binary patch literal 873506 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%0ATG6|=0CSku;PL*p;n6w-HqHLRK{ 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�{GmCQv{Zs|G>J^?18Zm>ijt1rK2OLB@>? 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�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 z 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

d7y4GL>_$$=LQHk(st#! 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 Z{{bof(4}EFZw>$e002ovPDHLkV1frY>E8eV literal 0 HcmV?d00001 diff --git a/docs-site/static/img/logo-dark.png b/docs-site/static/img/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..77726cfe1524d976d0cd2e830b9bfd07b4bb447f GIT binary patch literal 31760 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

v$v|ZRzT=EghA+G>9Mj>m4Sx?LZSc#zOL4s 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 S!Wz5)0000 Date: Sun, 12 Apr 2026 21:32:08 -0700 Subject: [PATCH 11/13] docs(contributing): update doc development --- CONTRIBUTING.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 42d640a9..d1e781c1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -111,6 +111,16 @@ This project uses [Conventional Commits](https://www.conventionalcommits.org/). - **DTOs**: API contracts are defined in `libs/data-transfer`. - **Testing**: Vitest for unit tests. +## Contributing to Documentation + +The docs site lives in `docs-site/` and is built with [Docusaurus](https://docusaurus.io/). To run it locally: + +```bash +pnpm run docs:dev +``` + +Documentation source files are located under `docs-site/src/pages/`. Add or edit pages there and open a pull request as you would for any other change. + ## Questions? Open an [issue](https://github.com/simoncodes-ca/lingo-tracker/issues) and we'll be happy to help. From 0969b69fe69e23eebbd62c0054032e58e4d2658e Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 21:44:57 -0700 Subject: [PATCH 12/13] chore(api): fix format issues --- apps/api/src/app/app.module.ts | 9 +- .../locales/locales.controller.spec.ts | 38 ++----- .../collections/locales/locales.controller.ts | 5 +- apps/cli/src/commands/add-locale.spec.ts | 12 +-- apps/cli/src/commands/remove-locale.spec.ts | 12 +-- .../src/i18n/app/footer/resource_entries.json | 22 ++-- .../src/i18n/app/footer/tracker_meta.json | 2 +- .../src/i18n/app/resource_entries.json | 6 +- apps/tracker/src/i18n/app/tracker_meta.json | 2 +- .../browser/density/resource_entries.json | 22 ++-- .../i18n/browser/density/tracker_meta.json | 2 +- .../dialog/deleteFolder/resource_entries.json | 10 +- .../dialog/deleteFolder/tracker_meta.json | 2 +- .../deleteResource/resource_entries.json | 10 +- .../dialog/deleteResource/tracker_meta.json | 2 +- .../dialog/moveFolder/resource_entries.json | 10 +- .../dialog/moveFolder/tracker_meta.json | 2 +- .../browser/folderInput/resource_entries.json | 14 +-- .../browser/folderInput/tracker_meta.json | 2 +- .../browser/folderNode/resource_entries.json | 18 +--- .../i18n/browser/folderNode/tracker_meta.json | 2 +- .../folderPicker/resource_entries.json | 54 +++------- .../browser/folderPicker/tracker_meta.json | 2 +- .../browser/folderTree/resource_entries.json | 22 ++-- .../i18n/browser/folderTree/tracker_meta.json | 2 +- .../indexingOverlay/resource_entries.json | 14 +-- .../browser/indexingOverlay/tracker_meta.json | 2 +- .../localeFilter/resource_entries.json | 6 +- .../browser/localeFilter/tracker_meta.json | 2 +- .../browser/placeholder/resource_entries.json | 2 +- .../browser/placeholder/tracker_meta.json | 2 +- .../src/i18n/browser/resource_entries.json | 46 +++----- .../similarTranslations/resource_entries.json | 22 ++-- .../similarTranslations/tracker_meta.json | 2 +- .../i18n/browser/status/resource_entries.json | 18 +--- .../src/i18n/browser/status/tracker_meta.json | 2 +- .../statusFilter/resource_entries.json | 10 +- .../browser/statusFilter/tracker_meta.json | 2 +- .../i18n/browser/toast/resource_entries.json | 102 +++++------------- .../src/i18n/browser/toast/tracker_meta.json | 2 +- .../src/i18n/browser/tracker_meta.json | 2 +- .../commentConfirm/resource_entries.json | 18 +--- .../commentConfirm/tracker_meta.json | 2 +- .../conflict/resource_entries.json | 18 +--- .../conflict/tracker_meta.json | 2 +- .../error/resource_entries.json | 30 ++---- .../translationEditor/error/tracker_meta.json | 2 +- .../translationEditor/resource_entries.json | 102 +++++------------- .../tab/resource_entries.json | 14 +-- .../translationEditor/tab/tracker_meta.json | 2 +- .../translationEditor/tracker_meta.json | 2 +- .../translationItem/resource_entries.json | 38 ++----- .../browser/translationItem/tracker_meta.json | 2 +- .../translationList/resource_entries.json | 6 +- .../browser/translationList/tracker_meta.json | 2 +- .../translationSearch/resource_entries.json | 6 +- .../translationSearch/tracker_meta.json | 2 +- .../collections/card/resource_entries.json | 16 +-- .../i18n/collections/card/tracker_meta.json | 2 +- .../dialog/create/resource_entries.json | 2 +- .../dialog/create/tracker_meta.json | 2 +- .../dialog/delete/resource_entries.json | 2 +- .../dialog/delete/tracker_meta.json | 2 +- .../dialog/edit/resource_entries.json | 2 +- .../collections/dialog/edit/tracker_meta.json | 2 +- .../collections/dialog/resource_entries.json | 2 +- .../i18n/collections/dialog/tracker_meta.json | 2 +- .../emptyState/resource_entries.json | 2 +- .../collections/emptyState/tracker_meta.json | 2 +- .../form/errors/resource_entries.json | 2 +- .../collections/form/errors/tracker_meta.json | 2 +- .../collections/form/resource_entries.json | 2 +- .../i18n/collections/form/tracker_meta.json | 2 +- .../i18n/collections/resource_entries.json | 2 +- .../collections/toast/resource_entries.json | 18 +--- .../i18n/collections/toast/tracker_meta.json | 2 +- .../src/i18n/collections/tracker_meta.json | 2 +- .../i18n/common/actions/resource_entries.json | 38 ++----- .../src/i18n/common/actions/tracker_meta.json | 2 +- .../src/i18n/data/resource_entries.json | 6 +- apps/tracker/src/i18n/data/tracker_meta.json | 2 +- .../src/i18n/header/resource_entries.json | 18 +--- .../tracker/src/i18n/header/tracker_meta.json | 2 +- .../src/i18n/locale/resource_entries.json | 10 +- .../tracker/src/i18n/locale/tracker_meta.json | 2 +- .../src/i18n/theme/resource_entries.json | 2 +- apps/tracker/src/i18n/theme/tracker_meta.json | 2 +- .../add-locale-to-collection.spec.ts | 9 +- libs/core/src/lib/errors/error-messages.ts | 6 +- 89 files changed, 285 insertions(+), 652 deletions(-) diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index d4d08fc1..09b2636e 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -12,7 +12,14 @@ import { TranslationJobService } from './translation-job/translation-job.service @Module({ imports: [], - controllers: [AppController, ConfigController, CollectionsController, ResourcesController, FoldersController, LocalesController], + controllers: [ + AppController, + ConfigController, + CollectionsController, + ResourcesController, + FoldersController, + LocalesController, + ], providers: [AppService, ConfigService, CollectionCacheService, TranslationJobService, Logger], }) export class AppModule { diff --git a/apps/api/src/app/collections/locales/locales.controller.spec.ts b/apps/api/src/app/collections/locales/locales.controller.spec.ts index 00d77856..3200dbc3 100644 --- a/apps/api/src/app/collections/locales/locales.controller.spec.ts +++ b/apps/api/src/app/collections/locales/locales.controller.spec.ts @@ -79,9 +79,7 @@ describe('LocalesController', () => { new Error('Locale "fr" already exists in collection "test-collection"'), ); - await expect( - localesController.addLocale('test-collection', { locale: 'fr' }), - ).rejects.toThrow(HttpException); + await expect(localesController.addLocale('test-collection', { locale: 'fr' })).rejects.toThrow(HttpException); const error = await localesController .addLocale('test-collection', { locale: 'fr' }) @@ -91,9 +89,9 @@ describe('LocalesController', () => { }); it('returns 404 when collection is not in config', async () => { - await expect( - localesController.addLocale('nonexistent-collection', { locale: 'de' }), - ).rejects.toThrow(NotFoundException); + await expect(localesController.addLocale('nonexistent-collection', { locale: 'de' })).rejects.toThrow( + NotFoundException, + ); }); it('returns 400 when trying to add the base locale', async () => { @@ -109,9 +107,7 @@ describe('LocalesController', () => { }); it('returns 400 when locale format is invalid', async () => { - (core.addLocaleToCollection as jest.Mock).mockRejectedValue( - new Error('Invalid locale format: "not-valid-123"'), - ); + (core.addLocaleToCollection as jest.Mock).mockRejectedValue(new Error('Invalid locale format: "not-valid-123"')); const error = await localesController .addLocale('test-collection', { locale: 'not-valid-123' }) @@ -154,9 +150,7 @@ describe('LocalesController', () => { }); it('returns 404 when collection is not in config', async () => { - await expect( - localesController.removeLocale('nonexistent-collection', 'fr'), - ).rejects.toThrow(NotFoundException); + await expect(localesController.removeLocale('nonexistent-collection', 'fr')).rejects.toThrow(NotFoundException); }); it('returns 400 when locale is not in the collection', async () => { @@ -164,9 +158,7 @@ describe('LocalesController', () => { new Error('Locale "ja" not found in collection "test-collection"'), ); - const error = await localesController - .removeLocale('test-collection', 'ja') - .catch((e: HttpException) => e); + const error = await localesController.removeLocale('test-collection', 'ja').catch((e: HttpException) => e); expect((error as HttpException).getStatus()).toBe(400); }); @@ -176,21 +168,15 @@ describe('LocalesController', () => { new Error('Cannot add or remove the base locale "en"'), ); - const error = await localesController - .removeLocale('test-collection', 'en') - .catch((e: HttpException) => e); + const error = await localesController.removeLocale('test-collection', 'en').catch((e: HttpException) => e); expect((error as HttpException).getStatus()).toBe(400); }); it('returns 400 when locale format is invalid', async () => { - (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue( - new Error('Invalid locale format: "bad!"'), - ); + (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue(new Error('Invalid locale format: "bad!"')); - const error = await localesController - .removeLocale('test-collection', 'bad!') - .catch((e: HttpException) => e); + const error = await localesController.removeLocale('test-collection', 'bad!').catch((e: HttpException) => e); expect((error as HttpException).getStatus()).toBe(400); }); @@ -198,9 +184,7 @@ describe('LocalesController', () => { it('returns 500 for unexpected errors', async () => { (core.removeLocaleFromCollection as jest.Mock).mockRejectedValue(new Error('Disk write failure')); - const error = await localesController - .removeLocale('test-collection', 'fr') - .catch((e: HttpException) => e); + const error = await localesController.removeLocale('test-collection', 'fr').catch((e: HttpException) => e); expect((error as HttpException).getStatus()).toBe(500); }); diff --git a/apps/api/src/app/collections/locales/locales.controller.ts b/apps/api/src/app/collections/locales/locales.controller.ts index 71242c82..4fa91beb 100644 --- a/apps/api/src/app/collections/locales/locales.controller.ts +++ b/apps/api/src/app/collections/locales/locales.controller.ts @@ -38,10 +38,7 @@ export class LocalesController { const errorMessage = error instanceof Error ? error.message : 'Error adding locale'; - if ( - errorMessage.includes('not found') || - errorMessage.includes('not found in collection') - ) { + if (errorMessage.includes('not found') || errorMessage.includes('not found in collection')) { throw new NotFoundException(errorMessage); } diff --git a/apps/cli/src/commands/add-locale.spec.ts b/apps/cli/src/commands/add-locale.spec.ts index 5887323b..a9d3993f 100644 --- a/apps/cli/src/commands/add-locale.spec.ts +++ b/apps/cli/src/commands/add-locale.spec.ts @@ -91,9 +91,7 @@ describe('addLocaleCommand', () => { await addLocaleCommand(options); expect(addLocaleToCollection).toHaveBeenCalledWith('main', 'de', { cwd: '/project' }); - expect(ConsoleFormatter.success).toHaveBeenCalledWith( - 'Locale "de" added to collection "main" successfully', - ); + expect(ConsoleFormatter.success).toHaveBeenCalledWith('Locale "de" added to collection "main" successfully'); expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Entries backfilled', 3); expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Files updated', 2); }); @@ -107,15 +105,11 @@ describe('addLocaleCommand', () => { }); it('prints error via ConsoleFormatter.error when core function throws', async () => { - vi.mocked(addLocaleToCollection).mockRejectedValue( - new Error('Locale "de" already exists in collection "main"'), - ); + vi.mocked(addLocaleToCollection).mockRejectedValue(new Error('Locale "de" already exists in collection "main"')); await addLocaleCommand({ collection: 'main', locale: 'de' }); - expect(ConsoleFormatter.error).toHaveBeenCalledWith( - 'Locale "de" already exists in collection "main"', - ); + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Locale "de" already exists in collection "main"'); }); it('prints generic error message when core throws a non-Error value', async () => { diff --git a/apps/cli/src/commands/remove-locale.spec.ts b/apps/cli/src/commands/remove-locale.spec.ts index a340257a..be9e5a0b 100644 --- a/apps/cli/src/commands/remove-locale.spec.ts +++ b/apps/cli/src/commands/remove-locale.spec.ts @@ -91,9 +91,7 @@ describe('removeLocaleCommand', () => { await removeLocaleCommand(options); expect(removeLocaleFromCollection).toHaveBeenCalledWith('main', 'fr', { cwd: '/project' }); - expect(ConsoleFormatter.success).toHaveBeenCalledWith( - 'Locale "fr" removed from collection "main" successfully', - ); + expect(ConsoleFormatter.success).toHaveBeenCalledWith('Locale "fr" removed from collection "main" successfully'); expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Entries purged', 5); expect(ConsoleFormatter.keyValue).toHaveBeenCalledWith('Files updated', 3); }); @@ -107,15 +105,11 @@ describe('removeLocaleCommand', () => { }); it('prints error via ConsoleFormatter.error when core function throws', async () => { - vi.mocked(removeLocaleFromCollection).mockRejectedValue( - new Error('Locale "fr" not found in collection "main"'), - ); + vi.mocked(removeLocaleFromCollection).mockRejectedValue(new Error('Locale "fr" not found in collection "main"')); await removeLocaleCommand({ collection: 'main', locale: 'fr' }); - expect(ConsoleFormatter.error).toHaveBeenCalledWith( - 'Locale "fr" not found in collection "main"', - ); + expect(ConsoleFormatter.error).toHaveBeenCalledWith('Locale "fr" not found in collection "main"'); }); it('prints generic error message when core throws a non-Error value', async () => { diff --git a/apps/tracker/src/i18n/app/footer/resource_entries.json b/apps/tracker/src/i18n/app/footer/resource_entries.json index 627bff12..396dab19 100644 --- a/apps/tracker/src/i18n/app/footer/resource_entries.json +++ b/apps/tracker/src/i18n/app/footer/resource_entries.json @@ -2,9 +2,7 @@ "madeBy": { "source": "Tools by SimonCodes-CA", "comment": "Footer attribution text; SimonCodes-CA is a brand name and should not be translated", - "tags": [ - "app" - ], + "tags": ["app"], "es": "Herramientas de SimonCodes-CA", "fr-ca": "Outils de SimonCodes-CA", "ru": "Инструменты от SimonCodes-CA", @@ -14,9 +12,7 @@ "githubTitle": { "source": "GitHub Repository", "comment": "Tooltip/title for the GitHub link in the footer", - "tags": [ - "app" - ], + "tags": ["app"], "es": "Repositorio de GitHub", "fr-ca": "Dépôt GitHub", "ru": "Репозиторий GitHub", @@ -26,9 +22,7 @@ "githubLabel": { "source": "GitHub", "comment": "Visible label for the GitHub link in the footer", - "tags": [ - "app" - ], + "tags": ["app"], "es": "GitHub", "fr-ca": "GitHub", "ru": "GitHub", @@ -38,9 +32,7 @@ "issuesTitle": { "source": "Report an Issue", "comment": "Tooltip/title for the Issues link in the footer", - "tags": [ - "app" - ], + "tags": ["app"], "es": "Informar un problema", "fr-ca": "Signaler un problème", "ru": "Сообщить о проблеме", @@ -50,13 +42,11 @@ "issuesLabel": { "source": "Issues", "comment": "Visible label for the Issues link in the footer", - "tags": [ - "app" - ], + "tags": ["app"], "es": "Asuntos", "fr-ca": "Problèmes", "ru": "Проблемы", "ja": "問題", "de": "Probleme" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/app/footer/tracker_meta.json b/apps/tracker/src/i18n/app/footer/tracker_meta.json index cbba214b..7ad92f4d 100644 --- a/apps/tracker/src/i18n/app/footer/tracker_meta.json +++ b/apps/tracker/src/i18n/app/footer/tracker_meta.json @@ -149,4 +149,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/app/resource_entries.json b/apps/tracker/src/i18n/app/resource_entries.json index 69edca1f..3b64595d 100644 --- a/apps/tracker/src/i18n/app/resource_entries.json +++ b/apps/tracker/src/i18n/app/resource_entries.json @@ -2,13 +2,11 @@ "skipToMainContent": { "source": "Skip to main content", "comment": "Accessibility link at top of page for keyboard navigation", - "tags": [ - "app" - ], + "tags": ["app"], "es": "Saltar al contenido principal", "fr-ca": "Passer au contenu principal", "ru": "Перейти к основному содержимому", "ja": "メインコンテンツへスキップ", "de": "Zum Hauptinhalt springen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/app/tracker_meta.json b/apps/tracker/src/i18n/app/tracker_meta.json index 2356c062..d440c8d5 100644 --- a/apps/tracker/src/i18n/app/tracker_meta.json +++ b/apps/tracker/src/i18n/app/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/density/resource_entries.json b/apps/tracker/src/i18n/browser/density/resource_entries.json index bd9ff572..a7e4bcec 100644 --- a/apps/tracker/src/i18n/browser/density/resource_entries.json +++ b/apps/tracker/src/i18n/browser/density/resource_entries.json @@ -2,9 +2,7 @@ "compactTooltip": { "source": "Compact — 2-line view, high density", "comment": "Tooltip for compact density mode toggle button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Compacto: vista de 2 líneas, alta densidad", "fr-ca": "Compact — affichage sur 2 lignes, haute densité", "ru": "Компактный — двухстрочный режим отображения, высокая плотность пикселей.", @@ -14,9 +12,7 @@ "fullTooltip": { "source": "Full — detailed view with comments and all locales", "comment": "Tooltip for full density mode toggle button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Completo: vista detallada con comentarios y todas las configuraciones regionales", "fr-ca": "Vue complète et détaillée avec commentaires et toutes les langues", "ru": "Полный — подробный просмотр с комментариями и всеми локалями.", @@ -26,9 +22,7 @@ "modeAriaLabel": { "source": "Density mode", "comment": "Aria-label for the density mode button toggle group in the translation header", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Modo de densidad", "fr-ca": "Mode de densité", "ru": "Режим плотности", @@ -38,9 +32,7 @@ "compactAriaLabel": { "source": "Compact density", "comment": "Aria-label for the compact density toggle button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Densidad compacta", "fr-ca": "Densité compacte", "ru": "Плотная компактность", @@ -50,13 +42,11 @@ "fullAriaLabel": { "source": "Full density", "comment": "Aria-label for the full density toggle button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Densidad completa", "fr-ca": "Densité maximale", "ru": "Полная плотность", "ja": "完全密度", "de": "Volle Dichte" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/density/tracker_meta.json b/apps/tracker/src/i18n/browser/density/tracker_meta.json index 8bef12e3..21e85189 100644 --- a/apps/tracker/src/i18n/browser/density/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/density/tracker_meta.json @@ -149,4 +149,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json index a2eb6fc3..2d28af17 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "Delete Folder", "comment": "Title of the confirmation dialog when deleting a folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Eliminar carpeta", "fr-ca": "Supprimer le dossier", "ru": "Удалить папку", @@ -14,13 +12,11 @@ "messageX": { "source": "Delete \"{name}\" and all its contents?", "comment": "Confirmation message when deleting a folder, interpolated with the folder name", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "¿Eliminar \"{name}\" y todo su contenido?", "fr-ca": "Supprimer \"{name}\" et tout son contenu ?", "ru": "Удалить \"{name}\" и всё его содержимое?", "ja": "「{name}」とその内容をすべて削除しますか?", "de": "\"{name}\" und seinen gesamten Inhalt löschen?" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json index a1104d30..0a6b77bb 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteFolder/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json index c85f43a3..ab36805e 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "Delete Resource", "comment": "Title of the confirmation dialog when deleting a resource", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Eliminar recurso", "fr-ca": "Supprimer la ressource", "ru": "Удалить ресурс", @@ -14,13 +12,11 @@ "messageX": { "source": "Are you sure you want to delete the resource \"{key}\"? This action cannot be undone.", "comment": "Confirmation message when deleting a resource, interpolated with the resource key", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "¿Seguro que desea eliminar el recurso \"{key}\"? Esta acción no se puede deshacer.", "fr-ca": "Êtes-vous certain de vouloir supprimer la ressource « {key} » ? Cette action est irréversible.", "ru": "Вы уверены, что хотите удалить ресурс \"{key}\"? Это действие необратимо.", "ja": "リソース「{key}」を削除してもよろしいですか?この操作は元に戻せません。", "de": "Sind Sie sicher, dass Sie die Ressource \"{key}\" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden." } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json index 06ef0bf3..e96aa1f4 100644 --- a/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/deleteResource/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json index 21a6dcd8..0ceb6aa7 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "Move Folder", "comment": "Title of the confirmation dialog when moving a folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Mover carpeta", "fr-ca": "Déplacer le dossier", "ru": "Переместить папку", @@ -14,13 +12,11 @@ "messageX": { "source": "Move folder \"{name}\" and all its contents to \"{dest}\"?", "comment": "Confirmation message when moving a folder, interpolated with folder name and destination", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "¿Mover la carpeta \"{name}\" y todo su contenido a \"{dest}\"?", "fr-ca": "Déplacer le dossier \"{name}\" et tout son contenu vers \"{dest}\" ?", "ru": "Переместить папку \"{name}\" и все ее содержимое в \"{dest}\"?", "ja": "フォルダ「{name}」とその中のすべての内容を「{dest}」に移動しますか?", "de": "Ordner \"{name}\" und seinen gesamten Inhalt nach \"{dest}\" verschieben?" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json index 8ecaa764..05a4647a 100644 --- a/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/dialog/moveFolder/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json index 6abb3d54..4c81441a 100644 --- a/apps/tracker/src/i18n/browser/folderInput/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderInput/resource_entries.json @@ -2,9 +2,7 @@ "placeholder": { "source": "Folder name", "comment": "Placeholder text in the inline folder name input field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Nombre de la carpeta", "fr-ca": "Nom du dossier", "ru": "Название папки", @@ -14,9 +12,7 @@ "nameRequired": { "source": "Folder name is required", "comment": "Validation error when folder name input is empty", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "El nombre de la carpeta es obligatorio", "fr-ca": "Le nom du dossier est requis.", "ru": "Название папки обязательно для указания.", @@ -26,13 +22,11 @@ "namePatternError": { "source": "Only letters, numbers, dashes, and underscores allowed", "comment": "Validation error when folder name contains invalid characters", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Solo se permiten letras, números, guiones y guiones bajos.", "fr-ca": "Seules les lettres, les chiffres, les tirets et les traits de soulignement sont autorisés.", "ru": "Разрешается использовать только буквы, цифры, дефисы и подчеркивания.", "ja": "使用できる文字、数字、ハイフン、アンダースコアのみです。", "de": "Nur Buchstaben, Zahlen, Bindestriche und Unterstriche sind erlaubt." } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json index 2966cfd9..bdfad5dd 100644 --- a/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderInput/tracker_meta.json @@ -89,4 +89,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json index a506b376..d024e431 100644 --- a/apps/tracker/src/i18n/browser/folderNode/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderNode/resource_entries.json @@ -2,9 +2,7 @@ "newChip": { "source": "New", "comment": "Badge shown on a folder node immediately after it is created", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Nuevo", "fr-ca": "Nouveau", "ru": "Новый", @@ -14,9 +12,7 @@ "folderAriaLabelX": { "source": "Folder { name }", "comment": "Aria-label for a folder node in the tree. { name } is the folder name", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Carpeta { nombre }", "fr-ca": "Dossier { nom }", "ru": "Папка { имя }", @@ -26,9 +22,7 @@ "dragToMoveFolderAriaLabel": { "source": "Drag to move folder", "comment": "Aria-label for the drag handle icon on a folder node", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Arrastrar para mover la carpeta", "fr-ca": "Faites glisser pour déplacer le dossier", "ru": "Перетащите, чтобы переместить папку.", @@ -38,13 +32,11 @@ "deleteFolderAriaLabelX": { "source": "Delete folder { name }", "comment": "Aria-label for the delete button on a folder node. { name } is the folder name", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Eliminar carpeta { nombre }", "fr-ca": "Supprimer le dossier { nom }", "ru": "Удалить папку {имя}", "ja": "フォルダ {名前} を削除します", "de": "Ordner { Name } löschen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json index bb9c4222..8bd9b1eb 100644 --- a/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderNode/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json index ba35e45e..6be31fb5 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderPicker/resource_entries.json @@ -2,9 +2,7 @@ "folderAriaLabelX": { "source": "Folder {name}", "comment": "Aria-label for a folder node in the picker tree", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Carpeta {name}", "fr-ca": "Dossier {name}", "ru": "Папка {name}", @@ -14,9 +12,7 @@ "collapse": { "source": "Collapse", "comment": "Aria-label for collapse button on a folder tree node", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Colapsar", "fr-ca": "Effondrement", "ru": "Крах", @@ -26,9 +22,7 @@ "expand": { "source": "Expand", "comment": "Aria-label for expand button on a folder tree node", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Expandir", "fr-ca": "Élargir", "ru": "Расширять", @@ -38,9 +32,7 @@ "addSubfolderToX": { "source": "Add subfolder to {name}", "comment": "Aria-label for add subfolder button on a folder node", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Agregar subcarpeta a {name}", "fr-ca": "Ajouter un sous-dossier à {name}", "ru": "Добавить подпапку в {name}", @@ -50,9 +42,7 @@ "folderLabel": { "source": "Folder:", "comment": "Label prefix for the selected folder path in the folder picker", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Carpeta:", "fr-ca": "Dossier :", "ru": "Папка:", @@ -62,9 +52,7 @@ "noFoldersYet": { "source": "No folders yet", "comment": "Empty state message in folder picker when there are no folders", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No hay carpetas todavía", "fr-ca": "Aucun dossier pour le moment", "ru": "Папок пока нет.", @@ -74,9 +62,7 @@ "createFirstFolder": { "source": "Create First Folder", "comment": "Button text to create the first folder when there are none", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Crear la primera carpeta", "fr-ca": "Créer le premier dossier", "ru": "Создать первую папку", @@ -86,9 +72,7 @@ "folderCreated": { "source": "Folder created successfully", "comment": "Snackbar message after creating a folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Carpeta creada exitosamente", "fr-ca": "Dossier créé avec succès", "ru": "Папка успешно создана.", @@ -98,9 +82,7 @@ "folderAlreadyExists": { "source": "Folder already exists", "comment": "Snackbar message when trying to create a folder that already exists", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "La carpeta ya existe", "fr-ca": "Le dossier existe déjà.", "ru": "Папка уже существует", @@ -110,9 +92,7 @@ "createFolderFailed": { "source": "Failed to create folder", "comment": "Snackbar error message when folder creation fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo crear la carpeta", "fr-ca": "Impossible de créer le dossier", "ru": "Не удалось создать папку.", @@ -122,9 +102,7 @@ "rootLabel": { "source": "root", "comment": "Label displayed when the selected folder is the root (empty path)", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "raíz", "fr-ca": "racine", "ru": "корень", @@ -134,9 +112,7 @@ "selectorAriaLabelX": { "source": "Folder selector, currently: { path }", "comment": "Aria-label for the folder picker header button. { path } is the currently selected folder path", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Selector de carpeta, actualmente: { ruta }", "fr-ca": "Sélecteur de dossier, présentement : { chemin }", "ru": "Селектор папки, в данный момент: { путь }", @@ -146,13 +122,11 @@ "treeAriaLabel": { "source": "Folder tree", "comment": "Aria-label for the folder tree container in the folder picker", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Árbol de carpetas", "fr-ca": "Arborescence des dossiers", "ru": "Дерево папок", "ja": "フォルダーツリー", "de": "Ordnerstruktur" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json index 2ed32045..23cbda29 100644 --- a/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderPicker/tracker_meta.json @@ -389,4 +389,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json index e77340da..94e405b4 100644 --- a/apps/tracker/src/i18n/browser/folderTree/resource_entries.json +++ b/apps/tracker/src/i18n/browser/folderTree/resource_entries.json @@ -2,9 +2,7 @@ "filterFoldersAriaLabel": { "source": "Filter folders", "comment": "Aria-label for the folder search input in the folder tree sidebar", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Filtrar carpetas", "fr-ca": "dossiers de filtrage", "ru": "Фильтрация папок", @@ -14,9 +12,7 @@ "showCurrentFolderTooltip": { "source": "Show only current folder", "comment": "Tooltip and aria-label for the toggle button to show only the current folder's resources", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Mostrar solo la carpeta actual", "fr-ca": "Afficher uniquement le dossier actuel", "ru": "Показать только текущую папку", @@ -26,9 +22,7 @@ "showNestedResourcesTooltip": { "source": "Show all nested resources", "comment": "Tooltip and aria-label for the toggle button to show all nested resources recursively", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Mostrar todos los recursos anidados", "fr-ca": "Afficher toutes les ressources imbriquées", "ru": "Показать все вложенные ресурсы", @@ -38,9 +32,7 @@ "addFolderAriaLabel": { "source": "Add folder", "comment": "Aria-label for the add folder button in the folder tree", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Agregar carpeta", "fr-ca": "Ajouter un dossier", "ru": "Добавить папку", @@ -50,13 +42,11 @@ "addFolderTooltip": { "source": "Add folder (Ctrl+Shift+N)", "comment": "Tooltip for the add folder button, includes keyboard shortcut", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Agregar carpeta (Ctrl+Shift+N)", "fr-ca": "Ajouter un dossier (Ctrl+Maj+N)", "ru": "Добавить папку (Ctrl+Shift+N)", "ja": "フォルダを追加する(Ctrl+Shift+N)", "de": "Ordner hinzufügen (Strg+Umschalt+N)" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json index 5495c403..288e0ab9 100644 --- a/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/folderTree/tracker_meta.json @@ -149,4 +149,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json index 53ea43ad..756dccd2 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/resource_entries.json @@ -2,9 +2,7 @@ "message": { "source": "Indexing collection...", "comment": "Message shown while the collection cache is being built", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Colección de indexación...", "fr-ca": "Collection d'indexation...", "ru": "Индексирование коллекции...", @@ -14,9 +12,7 @@ "errorTitle": { "source": "Indexing Failed", "comment": "Title of the error card shown when indexing fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Error de indexación", "fr-ca": "L'indexation a échoué", "ru": "Индексирование не удалось", @@ -26,13 +22,11 @@ "defaultError": { "source": "An error occurred while indexing the collection.", "comment": "Default error message shown in the indexing overlay when no specific error is available", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se produjo un error al indexar la colección.", "fr-ca": "Une erreur s'est produite lors de l'indexation de la collection.", "ru": "Произошла ошибка при индексировании коллекции.", "ja": "コレクションのインデックス作成中にエラーが発生しました。", "de": "Beim Indizieren der Sammlung ist ein Fehler aufgetreten." } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json index 4fc78a37..374d4d3b 100644 --- a/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/indexingOverlay/tracker_meta.json @@ -89,4 +89,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json index 0d4a802d..1cd240af 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/localeFilter/resource_entries.json @@ -2,13 +2,11 @@ "ariaLabelX": { "source": "Filter locales. Currently showing: { text }", "comment": "Aria-label for the locale filter button. { text } is the current filter display text (e.g. 'All' or a locale code)", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Filtrar regiones. Actualmente se muestra: {texto}", "fr-ca": "Filtrer les paramètres régionaux. Affichage actuel : { texte }", "ru": "Фильтр по языкам. В данный момент отображается: { текст }", "ja": "地域をフィルタリングします。現在表示中: { テキスト }", "de": "Gebietsschemas filtern. Aktuell angezeigt: { text }" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json index 85aac734..fb7dc4fd 100644 --- a/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/localeFilter/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json index 6dcfaaf3..4e51df1d 100644 --- a/apps/tracker/src/i18n/browser/placeholder/resource_entries.json +++ b/apps/tracker/src/i18n/browser/placeholder/resource_entries.json @@ -26,4 +26,4 @@ "ja": "コレクション", "de": "Sammlung" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json index 6e74caad..c83e3541 100644 --- a/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/placeholder/tracker_meta.json @@ -89,4 +89,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/resource_entries.json b/apps/tracker/src/i18n/browser/resource_entries.json index ce655175..8c81421a 100644 --- a/apps/tracker/src/i18n/browser/resource_entries.json +++ b/apps/tracker/src/i18n/browser/resource_entries.json @@ -101,9 +101,7 @@ "noFolderSelected": { "source": "No resource folder selected", "comment": "Breadcrumb empty state when no folder is selected", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se seleccionó ninguna carpeta de recursos", "fr-ca": "Aucun dossier de ressources sélectionné", "ru": "Папка ресурсов не выбрана", @@ -113,9 +111,7 @@ "addTranslationButton": { "source": "Add Translation", "comment": "Button text to add a new translation", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Añadir traducción", "fr-ca": "Ajouter une traduction", "ru": "Добавить перевод", @@ -125,9 +121,7 @@ "sortAscending": { "source": "Sort ascending", "comment": "Aria-label for sort ascending button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ordenar ascendentemente", "fr-ca": "Trier en ordre croissant", "ru": "Сортировка по возрастанию", @@ -137,9 +131,7 @@ "sortDescending": { "source": "Sort descending", "comment": "Aria-label for sort descending button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ordenar descendentemente", "fr-ca": "Trier par ordre décroissant", "ru": "Сортировать по убыванию", @@ -149,9 +141,7 @@ "sortAscendingTooltip": { "source": "Sort ascending (A→Z)", "comment": "Tooltip for sort ascending button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ordenar ascendentemente (A→Z)", "fr-ca": "Trier par ordre croissant (A→Z)", "ru": "Сортировка по возрастанию (от А до Я)", @@ -161,9 +151,7 @@ "sortDescendingTooltip": { "source": "Sort descending (Z→A)", "comment": "Tooltip for sort descending button", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ordenar descendentemente (Z→A)", "fr-ca": "Trier par ordre décroissant (Z→A)", "ru": "Сортировка по убыванию (Z→A)", @@ -173,9 +161,7 @@ "selectFolderFirst": { "source": "Select a folder first", "comment": "Tooltip shown on Add Translation button when no folder is selected", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Seleccione una carpeta primero", "fr-ca": "Sélectionnez d'abord un dossier", "ru": "Сначала выберите папку.", @@ -185,9 +171,7 @@ "addNewTranslationTooltip": { "source": "Add a new translation", "comment": "Tooltip shown on Add Translation button when a folder is selected", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Añadir una nueva traducción", "fr-ca": "Ajouter une nouvelle traduction", "ru": "Добавить новый перевод", @@ -197,9 +181,7 @@ "noTranslation": { "source": "No translation", "comment": "Placeholder when a translation value is empty", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Sin traducción", "fr-ca": "Aucune traduction", "ru": "Нет перевода", @@ -209,9 +191,7 @@ "commentPrefix": { "source": "Comment:", "comment": "Label prefix before a comment text", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Comentario:", "fr-ca": "Commentaire:", "ru": "Комментарий:", @@ -221,13 +201,11 @@ "toggleExpansion": { "source": "Toggle expansion", "comment": "Aria-label for the expand/collapse button on a translation item", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Activar o desactivar la expansión", "fr-ca": "Basculer l'extension", "ru": "Переключить расширение", "ja": "展開を切り替える", "de": "Erweiterung umschalten" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json index 01d54a64..dab1b7c5 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "Similar Translations", "comment": "Header title for similar translations panel", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Traducciones similares", "fr-ca": "Traductions similaires", "ru": "Похожие переводы", @@ -14,9 +12,7 @@ "idle": { "source": "Similar translations will appear as you type", "comment": "Message shown when no search query entered yet", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Aparecerán traducciones similares a medida que escribas.", "fr-ca": "Des traductions semblables apparaîtront au fur et à mesure que vous taperez.", "ru": "Похожие переводы будут появляться по мере ввода текста.", @@ -26,9 +22,7 @@ "loading": { "source": "Searching for similar translations...", "comment": "Loading message while searching for similar translations", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Buscando traducciones similares...", "fr-ca": "Recherche de traductions similaires...", "ru": "Ищу похожие переводы...", @@ -38,9 +32,7 @@ "empty": { "source": "No similar translations found", "comment": "Message when search returns no results", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se encontraron traducciones similares", "fr-ca": "Aucune traduction semblable trouvée", "ru": "Похожие переводы не найдены", @@ -50,13 +42,11 @@ "showMoreX": { "source": "Show {count} more", "comment": "Button to show remaining similar translation results, count is the number of hidden results", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Mostrar {count} más", "fr-ca": "Show {count} more", "ru": "Показать {count} больше", "ja": "{count} を表示", "de": "Mehr anzeigen {count}" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json index fcc2cd22..15460e94 100644 --- a/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/similarTranslations/tracker_meta.json @@ -149,4 +149,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/status/resource_entries.json b/apps/tracker/src/i18n/browser/status/resource_entries.json index 12aefcda..66a9803d 100644 --- a/apps/tracker/src/i18n/browser/status/resource_entries.json +++ b/apps/tracker/src/i18n/browser/status/resource_entries.json @@ -2,9 +2,7 @@ "new": { "source": "New", "comment": "Translation status label: new, not yet translated", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Nuevo", "fr-ca": "Nouveau", "ru": "Новый", @@ -14,9 +12,7 @@ "stale": { "source": "Stale", "comment": "Translation status label: source has changed and translation is outdated", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Duro", "fr-ca": "Vicié", "ru": "Залежалый", @@ -26,9 +22,7 @@ "translated": { "source": "Translated", "comment": "Translation status label: translated but not yet verified", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Traducido", "fr-ca": "Traduit", "ru": "Переведено", @@ -38,13 +32,11 @@ "verified": { "source": "Verified", "comment": "Translation status label: reviewed and approved", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Verificado", "fr-ca": "Vérifié", "ru": "Подтверждено", "ja": "検証済み", "de": "Bestätigt" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/status/tracker_meta.json b/apps/tracker/src/i18n/browser/status/tracker_meta.json index 66b4500e..a08a35a4 100644 --- a/apps/tracker/src/i18n/browser/status/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/status/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json index eba7566d..4731b7e8 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json +++ b/apps/tracker/src/i18n/browser/statusFilter/resource_entries.json @@ -2,9 +2,7 @@ "needsWork": { "source": "Needs Work", "comment": "Quick filter button that selects new and stale statuses", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Necesita trabajo", "fr-ca": "Nécessite des travaux", "ru": "Требуется доработка", @@ -14,13 +12,11 @@ "ariaLabelX": { "source": "Filter by status. Currently showing: { text }", "comment": "Aria-label for the status filter button. { text } is the current filter display text (e.g. 'All' or status name)", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Filtrar por estado. Actualmente se muestra: {texto}", "fr-ca": "Filtrer par statut. Affichage actuel : { texte }", "ru": "Фильтр по статусу. В данный момент отображается: { текст }", "ja": "ステータスで絞り込み。現在表示中:{テキスト}", "de": "Nach Status filtern. Aktuell angezeigt: { text }" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json index 843e06fc..9be19988 100644 --- a/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/statusFilter/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/toast/resource_entries.json b/apps/tracker/src/i18n/browser/toast/resource_entries.json index b5a80771..e130c528 100644 --- a/apps/tracker/src/i18n/browser/toast/resource_entries.json +++ b/apps/tracker/src/i18n/browser/toast/resource_entries.json @@ -2,9 +2,7 @@ "copiedToClipboard": { "source": "Copied to clipboard", "comment": "Snackbar message after copying a key to clipboard", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Copiado al portapapeles", "fr-ca": "Copié dans le presse-papiers", "ru": "Скопировано в буфер обмена", @@ -14,9 +12,7 @@ "copyFailed": { "source": "Failed to copy", "comment": "Snackbar error message when clipboard copy fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo copiar", "fr-ca": "Échec de la copie", "ru": "Не удалось скопировать", @@ -26,9 +22,7 @@ "resourceDeleted": { "source": "Resource deleted successfully", "comment": "Snackbar message after successfully deleting a resource", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Recurso eliminado exitosamente", "fr-ca": "Ressource supprimée avec succès", "ru": "Ресурс успешно удален", @@ -38,9 +32,7 @@ "deleteFailed": { "source": "Failed to delete resource", "comment": "Snackbar error message when resource deletion fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo eliminar el recurso", "fr-ca": "Échec de la suppression de la ressource", "ru": "Не удалось удалить ресурс", @@ -50,9 +42,7 @@ "translateFailed": { "source": "Failed to auto-translate resource", "comment": "Snackbar error message when auto-translation fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo traducir automáticamente el recurso", "fr-ca": "Échec de la traduction automatique de la ressource", "ru": "Не удалось выполнить автоматический перевод ресурса.", @@ -62,9 +52,7 @@ "translationUpdated": { "source": "Translation updated successfully", "comment": "Snackbar message after successfully updating a translation", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Traducción actualizada exitosamente", "fr-ca": "Traduction mise à jour avec succès", "ru": "Перевод успешно обновлен.", @@ -74,9 +62,7 @@ "localeTranslated": { "source": "1 locale translated successfully", "comment": "Snackbar message when exactly 1 locale was auto-translated", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "1 configuración regional traducida correctamente", "fr-ca": "1 langue traduite avec succès", "ru": "1 локализация успешно переведена", @@ -86,9 +72,7 @@ "localesTranslatedX": { "source": "{count} locales translated successfully", "comment": "Snackbar message when multiple locales were auto-translated", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "{count} locales traducidos correctamente", "fr-ca": "{count} Les paramètres régionaux ont été traduits avec succès", "ru": "{count} Локали успешно переведены", @@ -98,9 +82,7 @@ "allLocalesUpToDate": { "source": "All locales are already up to date", "comment": "Snackbar message when auto-translate finds nothing to update", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Todas las configuraciones regionales ya están actualizadas", "fr-ca": "Tous les emplacements sont déjà à jour.", "ru": "Все языковые версии уже обновлены.", @@ -110,9 +92,7 @@ "skippedLocalesX": { "source": "Skipped locales (ICU format): {locales}", "comment": "Snackbar warning when some locales were skipped because they use ICU format", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Configuraciones regionales omitidas (formato ICU): {locales}", "fr-ca": "Paramètres régionaux ignorés (format ICU) : {locales}", "ru": "Пропущенные локали (формат ICU): {locales}", @@ -122,9 +102,7 @@ "resourceCreated": { "source": "Resource created successfully", "comment": "Snackbar message after successfully creating a new resource", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Recurso creado exitosamente", "fr-ca": "Ressource créée avec succès", "ru": "Ресурс успешно создан.", @@ -134,9 +112,7 @@ "autoTranslationSkippedX": { "source": "Auto-translation skipped for {locales} (ICU format not supported)", "comment": "Snackbar warning when auto-translation was skipped for some locales due to ICU format", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se omitió la traducción automática para {locales} (formato ICU no compatible)", "fr-ca": "Traduction automatique ignorée pour {locales} (format ICU non pris en charge)", "ru": "Автоматический перевод пропущен для {locales} (формат ICU не поддерживается)", @@ -146,9 +122,7 @@ "resourceAlreadyInFolder": { "source": "Resource is already in this folder", "comment": "Snackbar message when user drops a resource onto its current folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "El recurso ya está en esta carpeta", "fr-ca": "La ressource se trouve déjà dans ce dossier.", "ru": "Ресурс уже находится в этой папке.", @@ -158,9 +132,7 @@ "resourceMovedX": { "source": "Moved \"{name}\" to {folder}", "comment": "Snackbar message after moving a resource to a different folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se movió \"{name}\" a {folder}", "fr-ca": "Déplacé « {name} » vers {folder}", "ru": "Перемещено \"{name}\" в {folder}", @@ -170,9 +142,7 @@ "folderAlreadyAtLocation": { "source": "Folder is already at this location", "comment": "Snackbar message when user drops a folder onto its current parent location", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "La carpeta ya está en esta ubicación", "fr-ca": "Le dossier est déjà à cet emplacement.", "ru": "Папка уже находится по этому адресу.", @@ -182,9 +152,7 @@ "folderMovedX": { "source": "Moved \"{name}\" into {dest}", "comment": "Snackbar message after successfully moving a folder", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se movió \"{name}\" a {dest}", "fr-ca": "Déplacé « {name} » dans {dest}", "ru": "Перемещено \"{name}\" в {dest}", @@ -194,9 +162,7 @@ "moveResourceFailed": { "source": "Failed to move resource", "comment": "Snackbar error message when moving a resource fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo mover el recurso", "fr-ca": "Échec du déplacement de la ressource", "ru": "Не удалось переместить ресурс.", @@ -206,9 +172,7 @@ "moveFolderFailed": { "source": "Failed to move folder", "comment": "Snackbar error message when moving a folder fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo mover la carpeta", "fr-ca": "Impossible de déplacer le dossier", "ru": "Не удалось переместить папку.", @@ -218,9 +182,7 @@ "loadFoldersFailed": { "source": "Failed to load folders", "comment": "Snackbar/error message when loading the folder tree fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudieron cargar las carpetas", "fr-ca": "Échec du chargement des dossiers", "ru": "Не удалось загрузить папки.", @@ -230,9 +192,7 @@ "loadFolderChildrenFailed": { "source": "Failed to load folder contents", "comment": "Snackbar/error message when loading a folder's children fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo cargar el contenido de la carpeta", "fr-ca": "Impossible de charger le contenu du dossier", "ru": "Не удалось загрузить содержимое папки.", @@ -242,9 +202,7 @@ "createFolderFailed": { "source": "Failed to create folder", "comment": "Snackbar/error message when creating a folder fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Error al crear la carpeta", "fr-ca": "Impossible de créer le dossier", "ru": "Не удалось создать папку.", @@ -254,9 +212,7 @@ "deleteFolderFailed": { "source": "Failed to delete folder", "comment": "Snackbar/error message when deleting a folder fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo eliminar la carpeta", "fr-ca": "Échec de la suppression du dossier", "ru": "Не удалось удалить папку.", @@ -266,9 +222,7 @@ "loadTranslationsFailed": { "source": "Failed to load translations", "comment": "Snackbar/error message when loading translations for a folder fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudieron cargar las traducciones", "fr-ca": "Impossible de charger les traductions", "ru": "Не удалось загрузить переводы.", @@ -278,9 +232,7 @@ "searchTranslationsFailed": { "source": "Failed to search translations", "comment": "Snackbar/error message when searching translations fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo buscar traducciones", "fr-ca": "Échec de la recherche de traductions", "ru": "Поиск переводов не удался.", @@ -290,13 +242,11 @@ "checkCacheStatusFailed": { "source": "Failed to check cache status", "comment": "Snackbar/error message when checking cache status fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo comprobar el estado de la caché", "fr-ca": "Échec de la vérification de l'état du cache", "ru": "Не удалось проверить состояние кэша.", "ja": "キャッシュの状態を確認できませんでした", "de": "Cache-Statusprüfung fehlgeschlagen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/toast/tracker_meta.json b/apps/tracker/src/i18n/browser/toast/tracker_meta.json index 7c302dd7..c0eaacd2 100644 --- a/apps/tracker/src/i18n/browser/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/toast/tracker_meta.json @@ -749,4 +749,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/tracker_meta.json b/apps/tracker/src/i18n/browser/tracker_meta.json index 3bba03d4..a0f4437b 100644 --- a/apps/tracker/src/i18n/browser/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/tracker_meta.json @@ -689,4 +689,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json index c740d72f..314cd710 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "No Comment Added", "comment": "Dialog title when submitting without a comment", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Sin comentarios añadidos", "fr-ca": "Aucun commentaire ajouté", "ru": "Комментарий не добавлен", @@ -14,9 +12,7 @@ "message": { "source": "Comments help other translators understand context. Are you sure you want to save without a comment?", "comment": "Confirmation message about missing comment", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Los comentarios ayudan a otros traductores a comprender el contexto. ¿Seguro que quieres guardar sin comentarios?", "fr-ca": "Les commentaires aident les autres traducteurs à comprendre le contexte. Voulez-vous vraiment enregistrer sans commentaire ?", "ru": "Комментарии помогают другим переводчикам понять контекст. Вы уверены, что хотите сохранить документ без комментария?", @@ -26,9 +22,7 @@ "saveAnyway": { "source": "Save Anyway", "comment": "Button to proceed without comment", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Guardar de todos modos", "fr-ca": "Sauvegarder quand même", "ru": "В любом случае сохранить", @@ -38,13 +32,11 @@ "addComment": { "source": "Add Comment", "comment": "Button to go back and add a comment", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Añadir comentario", "fr-ca": "Ajouter un commentaire", "ru": "Добавить комментарий", "ja": "コメントを追加", "de": "Kommentar hinzufügen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json index bcca4715..8b950a64 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/commentConfirm/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json index 93530fd5..3602db98 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/resource_entries.json @@ -2,9 +2,7 @@ "title": { "source": "Translation Key Already Exists", "comment": "Dialog title when key conflicts with existing resource", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "La clave de traducción ya existe", "fr-ca": "La clé de traduction existe déjà.", "ru": "Ключ перевода уже существует", @@ -14,9 +12,7 @@ "messageX": { "source": "The translation key \"{key}\" already exists in this collection. Would you like to edit the existing translation or choose a different key?", "comment": "Conflict dialog message with the conflicting key name", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "La clave de traducción \"{key}\" ya existe en esta colección. ¿Desea editar la traducción existente o elegir una clave diferente?", "fr-ca": "La clé de traduction « {key} » existe déjà dans cette collection. Souhaitez-vous modifier la traduction existante ou choisir une autre clé ?", "ru": "Ключ перевода \"{key}\" уже существует в этой коллекции. Хотите отредактировать существующий перевод или выбрать другой ключ?", @@ -26,9 +22,7 @@ "editExisting": { "source": "Edit Existing", "comment": "Button to open the existing resource for editing", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Editar existente", "fr-ca": "Modifier l'existant", "ru": "Редактировать существующий", @@ -38,13 +32,11 @@ "chooseDifferentKey": { "source": "Choose Different Key", "comment": "Button to go back and pick a different key", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Elija una clave diferente", "fr-ca": "Choisir une autre clé", "ru": "Выберите другой ключ", "ja": "別のキーを選択してください", "de": "Wählen Sie eine andere Taste" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json index 9cf018b2..a2197203 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/conflict/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json index d25910fe..b72cbd4d 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/resource_entries.json @@ -2,9 +2,7 @@ "missingResource": { "source": "Cannot update: resource data is missing", "comment": "Error when resource data is unavailable during edit", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se puede actualizar: faltan datos del recurso", "fr-ca": "Impossible de mettre à jour : les données de ressources sont manquantes.", "ru": "Невозможно обновить: отсутствуют данные ресурса.", @@ -14,9 +12,7 @@ "keyRenamingNotSupported": { "source": "Key renaming is not yet supported. Please use the same key or create a new resource.", "comment": "Error when user tries to change resource key", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Aún no se admite el cambio de nombre de clave. Utilice la misma clave o cree un nuevo recurso.", "fr-ca": "Le renommage des clés n'est pas encore pris en charge. Veuillez utiliser la même clé ou créer une nouvelle ressource.", "ru": "Функция переименования ключей пока не поддерживается. Пожалуйста, используйте тот же ключ или создайте новый ресурс.", @@ -26,9 +22,7 @@ "notFound": { "source": "Resource not found. It may have been deleted.", "comment": "Error when resource no longer exists on server", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Recurso no encontrado. Es posible que se haya eliminado.", "fr-ca": "Ressource introuvable. Elle a peut-être été supprimée.", "ru": "Ресурс не найден. Возможно, он был удален.", @@ -38,9 +32,7 @@ "invalidRequest": { "source": "Invalid request", "comment": "Fallback error message for 400 status responses", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Solicitud no válida", "fr-ca": "Requête invalide", "ru": "Неверный запрос", @@ -50,9 +42,7 @@ "createFailed": { "source": "Failed to create translation", "comment": "Fallback error when resource creation fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo crear la traducción", "fr-ca": "Échec de la traduction", "ru": "Не удалось создать перевод", @@ -62,9 +52,7 @@ "updateFailed": { "source": "Failed to update translation", "comment": "Fallback error when resource update fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo actualizar la traducción", "fr-ca": "Échec de la mise à jour de la traduction", "ru": "Не удалось обновить перевод", @@ -74,13 +62,11 @@ "unexpected": { "source": "An unexpected error occurred", "comment": "Fallback error for non-HTTP errors", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se produjo un error inesperado", "fr-ca": "Une erreur inattendue s'est produite.", "ru": "Произошла непредвиденная ошибка.", "ja": "予期せぬエラーが発生しました", "de": "Es ist ein unerwarteter Fehler aufgetreten." } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json index a0de3e4d..a9facfc7 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/error/tracker_meta.json @@ -209,4 +209,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json index 0ea65f74..dcd7fa9c 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/resource_entries.json @@ -2,9 +2,7 @@ "closeDialog": { "source": "Close dialog", "comment": "Aria-label for close button on translation editor dialog", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Cerrar diálogo", "fr-ca": "Fermer la boîte de dialogue", "ru": "Закрыть диалог", @@ -14,9 +12,7 @@ "translationKey": { "source": "Translation Key", "comment": "Label for the translation key input field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Clave de traducción", "fr-ca": "Clé de traduction", "ru": "Ключ перевода", @@ -26,9 +22,7 @@ "keyHint": { "source": "Use only letters, numbers, underscores, and hyphens", "comment": "Hint text below translation key input", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Utilice únicamente letras, números, guiones bajos y guiones.", "fr-ca": "Utilisez seulement des lettres, des chiffres, des traits de soulignement et des tirets.", "ru": "Используйте только буквы, цифры, подчеркивания и дефисы.", @@ -38,9 +32,7 @@ "baseBadge": { "source": "Base", "comment": "Badge label indicating the base locale", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Base", "fr-ca": "Base", "ru": "База", @@ -50,9 +42,7 @@ "locationLabel": { "source": "Location:", "comment": "Label prefix for the current folder location in the translation editor dialog", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ubicación:", "fr-ca": "Emplacement :", "ru": "Расположение:", @@ -62,9 +52,7 @@ "locationTabHint": { "source": "Choose a different folder for this translation resource.", "comment": "Hint text shown at the top of the Change Location tab in the translation editor", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Elija una carpeta diferente para este recurso de traducción.", "fr-ca": "Choisissez un autre dossier pour cette ressource de traduction.", "ru": "Выберите другую папку для этого ресурса перевода.", @@ -74,9 +62,7 @@ "localeTranslationX": { "source": "{locale} Translation", "comment": "Label for locale translation input field, locale is uppercased locale code", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "{locale} Traducción", "fr-ca": "{locale} Traduction", "ru": "{locale} Перевод", @@ -86,9 +72,7 @@ "enterTranslationX": { "source": "Enter {locale} translation...", "comment": "Placeholder for locale translation input field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ingrese la traducción de {locale}...", "fr-ca": "Entrez la traduction {locale}...", "ru": "Введите {locale} перевод...", @@ -98,9 +82,7 @@ "baseValueRequired": { "source": "Base translation is required", "comment": "Error shown when base translation value is empty", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se requiere traducción base", "fr-ca": "La traduction de base est requise", "ru": "Требуется базовый перевод.", @@ -110,9 +92,7 @@ "commentLabel": { "source": "Comment (Optional)", "comment": "Label for optional comment field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Comentario (opcional)", "fr-ca": "Commentaire (facultatif)", "ru": "Комментарий (необязательно)", @@ -122,9 +102,7 @@ "commentPlaceholder": { "source": "Add context for translators...", "comment": "Placeholder for comment input field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Añadir contexto para los traductores...", "fr-ca": "Ajouter du contexte pour les traducteurs...", "ru": "Добавьте контекст для переводчиков...", @@ -134,9 +112,7 @@ "commentHint": { "source": "Provide context or instructions for translators", "comment": "Hint text below comment field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Proporcionar contexto o instrucciones para los traductores", "fr-ca": "Fournir un contexte ou des instructions aux traducteurs", "ru": "Предоставьте контекст или инструкции для переводчиков.", @@ -146,9 +122,7 @@ "otherLocalesToggleX": { "source": "Add translations for other locales ({count} available)", "comment": "Toggle label showing number of additional locales", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Agregar traducciones para otras configuraciones regionales ({count} disponible)", "fr-ca": "Ajouter des traductions pour d'autres langues ({count} disponibles)", "ru": "Добавить переводы для других языковых версий ({count} доступны)", @@ -158,9 +132,7 @@ "status": { "source": "Status", "comment": "Label for translation status dropdown", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Estado", "fr-ca": "Statut", "ru": "Статус", @@ -170,9 +142,7 @@ "saving": { "source": "Saving...", "comment": "Button text shown while form is submitting", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ahorro...", "fr-ca": "Économie...", "ru": "Сохранение...", @@ -182,9 +152,7 @@ "editTitle": { "source": "Edit Translation", "comment": "Dialog title when editing an existing translation", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Editar traducción", "fr-ca": "Modifier la traduction", "ru": "Редактировать перевод", @@ -194,9 +162,7 @@ "createTitle": { "source": "Create Translation", "comment": "Dialog title when creating a new translation", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Crear traducción", "fr-ca": "Créer une traduction", "ru": "Создать перевод", @@ -206,9 +172,7 @@ "editSubtitle": { "source": "Update translation values and metadata", "comment": "Dialog subtitle in edit mode", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Actualizar los valores de traducción y los metadatos", "fr-ca": "Mise à jour des valeurs de traduction et des métadonnées", "ru": "Обновите значения перевода и метаданные.", @@ -218,9 +182,7 @@ "createSubtitle": { "source": "Add a new translation entry to your collection", "comment": "Dialog subtitle in create mode", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Añade una nueva entrada de traducción a tu colección", "fr-ca": "Ajoutez une nouvelle entrée de traduction à votre collection", "ru": "Добавьте новую запись о переводе в свою коллекцию.", @@ -230,9 +192,7 @@ "updateButton": { "source": "Update Translation", "comment": "Submit button label in edit mode", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Actualizar traducción", "fr-ca": "Mise à jour de la traduction", "ru": "Обновить перевод", @@ -242,9 +202,7 @@ "saveButton": { "source": "Save Translation", "comment": "Submit button label in create mode", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Guardar traducción", "fr-ca": "Enregistrer la traduction", "ru": "Сохранить перевод", @@ -254,9 +212,7 @@ "keyCopied": { "source": "Similar resource key copied", "comment": "Snackbar message after copying a similar resource key", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Clave de recurso similar copiada", "fr-ca": "Clé de ressource similaire copiée", "ru": "Аналогичный ключ ресурса скопирован.", @@ -266,9 +222,7 @@ "copyFailed": { "source": "Failed to copy", "comment": "Snackbar message when clipboard copy fails", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "No se pudo copiar", "fr-ca": "Échec de la copie", "ru": "Не удалось скопировать", @@ -278,9 +232,7 @@ "keyRequired": { "source": "Translation key is required", "comment": "Validation error for empty key field", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Se requiere clave de traducción", "fr-ca": "Une clé de traduction est requise.", "ru": "Требуется ключ перевода", @@ -290,13 +242,11 @@ "keyPatternError": { "source": "Only letters, numbers, underscores, and hyphens allowed", "comment": "Validation error for invalid key characters", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Solo se permiten letras, números, guiones bajos y guiones.", "fr-ca": "Seules les lettres, les chiffres, les traits de soulignement et les tirets sont autorisés.", "ru": "Разрешаются только буквы, цифры, подчеркивания и дефисы.", "ja": "使用できる文字は、英字、数字、アンダースコア、ハイフンのみです。", "de": "Nur Buchstaben, Zahlen, Unterstriche und Bindestriche sind erlaubt." } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json index 4359a95c..6a94861f 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/resource_entries.json @@ -2,9 +2,7 @@ "baseInfo": { "source": "Base Info", "comment": "Tab label for the base translation info section in the editor dialog", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Información básica", "fr-ca": "Informations de base", "ru": "Базовая информация", @@ -14,9 +12,7 @@ "changeLocation": { "source": "Change Location", "comment": "Tab label for the change location section in the editor dialog", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Cambiar ubicación", "fr-ca": "Changer d'emplacement", "ru": "Изменить местоположение", @@ -26,13 +22,11 @@ "otherLocales": { "source": "Other Locales", "comment": "Tab label for the other locales section in the editor dialog", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Otros lugares", "fr-ca": "Autres localités", "ru": "Другие населенные пункты", "ja": "その他の地域", "de": "Andere Orte" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json index adf07f4b..6f9574b9 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tab/tracker_meta.json @@ -89,4 +89,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json index cd1a5664..f6c20a7e 100644 --- a/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationEditor/tracker_meta.json @@ -749,4 +749,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json index 74464fc5..b166651f 100644 --- a/apps/tracker/src/i18n/browser/translationItem/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationItem/resource_entries.json @@ -2,9 +2,7 @@ "dragToMoveAriaLabel": { "source": "Drag to move translation", "comment": "Aria-label for the drag handle on a translation item", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Arrastrar para mover la traducción", "fr-ca": "Faites glisser pour déplacer la traduction", "ru": "Перетащите, чтобы переместить перевод.", @@ -14,9 +12,7 @@ "copyKeyAriaLabel": { "source": "Copy key", "comment": "Aria-label for the copy key button on a translation item header", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Copiar clave", "fr-ca": "Copier la clé", "ru": "Копировать ключ", @@ -26,9 +22,7 @@ "hideCommentAriaLabel": { "source": "Hide comment", "comment": "Aria-label for the comment toggle button when comment is currently shown", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Ocultar comentario", "fr-ca": "Masquer le commentaire", "ru": "Скрыть комментарий", @@ -38,9 +32,7 @@ "showCommentAriaLabel": { "source": "Show comment", "comment": "Aria-label for the comment toggle button when comment is currently hidden", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Mostrar comentario", "fr-ca": "Afficher le commentaire", "ru": "Показать комментарий", @@ -50,9 +42,7 @@ "moreActionsAriaLabel": { "source": "More actions", "comment": "Aria-label for the more actions menu trigger button on a translation item", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Más acciones", "fr-ca": "Plus d'actions", "ru": "Дополнительные действия", @@ -62,9 +52,7 @@ "editAriaLabel": { "source": "Edit translation", "comment": "Aria-label for the Edit menu item in the translation item actions menu", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Editar traducción", "fr-ca": "Modifier la traduction", "ru": "Редактировать перевод", @@ -74,9 +62,7 @@ "translateAriaLabel": { "source": "Translate resource", "comment": "Aria-label for the Translate menu item in the translation item actions menu", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Traducir recurso", "fr-ca": "ressource de traduction", "ru": "Перевести ресурс", @@ -86,9 +72,7 @@ "deleteAriaLabel": { "source": "Delete translation", "comment": "Aria-label for the Delete menu item in the translation item actions menu", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Eliminar traducción", "fr-ca": "Supprimer la traduction", "ru": "Удалить перевод", @@ -98,13 +82,11 @@ "noStatuses": { "source": "No statuses", "comment": "Screen-reader text shown in status breakdown when no translation statuses are available", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Sin estados", "fr-ca": "Aucun statut", "ru": "Нет статусов", "ja": "ステータスなし", "de": "Keine Statusmeldungen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json index 33f3bfd6..471dbb68 100644 --- a/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationItem/tracker_meta.json @@ -269,4 +269,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationList/resource_entries.json b/apps/tracker/src/i18n/browser/translationList/resource_entries.json index d293bb5d..ccab4b92 100644 --- a/apps/tracker/src/i18n/browser/translationList/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationList/resource_entries.json @@ -2,13 +2,11 @@ "ariaLabel": { "source": "Translation list", "comment": "Aria-label for the virtual scroll viewport containing the list of translations", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Lista de traducciones", "fr-ca": "Liste de traductions", "ru": "Список переводов", "ja": "翻訳リスト", "de": "Übersetzungsliste" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json index 04603036..dbacb201 100644 --- a/apps/tracker/src/i18n/browser/translationList/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationList/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json index 42a07945..c9c175a3 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json +++ b/apps/tracker/src/i18n/browser/translationSearch/resource_entries.json @@ -2,13 +2,11 @@ "ariaLabel": { "source": "Search translations", "comment": "Aria-label for the translation search input in the main translation header", - "tags": [ - "browser" - ], + "tags": ["browser"], "es": "Buscar traducciones", "fr-ca": "Recherche de traductions", "ru": "Поиск переводов", "ja": "翻訳を検索", "de": "Übersetzungen suchen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json index ec4c0c2f..a00611f0 100644 --- a/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json +++ b/apps/tracker/src/i18n/browser/translationSearch/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/card/resource_entries.json b/apps/tracker/src/i18n/collections/card/resource_entries.json index 145a366a..7fb82db2 100644 --- a/apps/tracker/src/i18n/collections/card/resource_entries.json +++ b/apps/tracker/src/i18n/collections/card/resource_entries.json @@ -2,10 +2,7 @@ "edit": { "source": "Edit collection", "comment": "Accessible label for edit icon button on collection card", - "tags": [ - "card", - "collection" - ], + "tags": ["card", "collection"], "es": "Editar colección", "fr-ca": "Modifier la collection", "ru": "Редактировать коллекцию", @@ -15,10 +12,7 @@ "delete": { "source": "Delete collection", "comment": "Accessible label for delete icon button on collection card", - "tags": [ - "card", - "collection" - ], + "tags": ["card", "collection"], "es": "Eliminar colección", "fr-ca": "Supprimer la collection", "ru": "Удалить коллекцию", @@ -28,13 +22,11 @@ "moreActionsAriaLabel": { "source": "More actions for collection", "comment": "Aria label for the more actions button on a collection card", - "tags": [ - "collections" - ], + "tags": ["collections"], "es": "Más acciones para la recolección", "fr-ca": "Plus d'actions pour la collecte", "ru": "Дополнительные действия для сбора", "ja": "収集のためのその他のアクション", "de": "Weitere Aktionen zur Sammlung" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/card/tracker_meta.json b/apps/tracker/src/i18n/collections/card/tracker_meta.json index 04dd2caf..71b9e0d6 100644 --- a/apps/tracker/src/i18n/collections/card/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/card/tracker_meta.json @@ -89,4 +89,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json index e96160f3..90f8ed35 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/create/resource_entries.json @@ -8,4 +8,4 @@ "ja": "コレクションを作成する", "de": "Sammlung erstellen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json index d2374766..4b6091bd 100644 --- a/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/create/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json index b8e057de..98e70213 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/resource_entries.json @@ -17,4 +17,4 @@ "ja": "{name} を削除してもよろしいですか?", "de": "Sind Sie sicher, dass Sie {name} löschen möchten?" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json index 7463959d..19f1e965 100644 --- a/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/delete/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json index 599e4ebd..3aa8affb 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/resource_entries.json @@ -8,4 +8,4 @@ "ja": "コレクションを編集", "de": "Sammlung bearbeiten" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json index e3115b78..c91e8d88 100644 --- a/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/edit/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/resource_entries.json b/apps/tracker/src/i18n/collections/dialog/resource_entries.json index 747954ee..3252092e 100644 --- a/apps/tracker/src/i18n/collections/dialog/resource_entries.json +++ b/apps/tracker/src/i18n/collections/dialog/resource_entries.json @@ -97,4 +97,4 @@ "ja": "コレクションを作成する", "de": "Sammlung erstellen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json index d171eecd..b17b6c18 100644 --- a/apps/tracker/src/i18n/collections/dialog/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/dialog/tracker_meta.json @@ -329,4 +329,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json index c8edeed8..e2d2e8cf 100644 --- a/apps/tracker/src/i18n/collections/emptyState/resource_entries.json +++ b/apps/tracker/src/i18n/collections/emptyState/resource_entries.json @@ -17,4 +17,4 @@ "ja": "最初のコレクションを作成する", "de": "Erstelle deine erste Kollektion" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json index f81d5037..ec8eb4d4 100644 --- a/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/emptyState/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json index ed59e25b..43934eab 100644 --- a/apps/tracker/src/i18n/collections/form/errors/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/errors/resource_entries.json @@ -8,4 +8,4 @@ "ja": "この項目は必須です", "de": "Dieses Feld ist erforderlich" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json index 605ed371..154ea529 100644 --- a/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/errors/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/form/resource_entries.json b/apps/tracker/src/i18n/collections/form/resource_entries.json index 749d5a1e..683d43ec 100644 --- a/apps/tracker/src/i18n/collections/form/resource_entries.json +++ b/apps/tracker/src/i18n/collections/form/resource_entries.json @@ -35,4 +35,4 @@ "ja": "カンマ区切り (例: en、fr、es)", "de": "Durch Kommas getrennt (z. B. en,fr,es)" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/form/tracker_meta.json b/apps/tracker/src/i18n/collections/form/tracker_meta.json index 1dfcbd9b..08b3ca95 100644 --- a/apps/tracker/src/i18n/collections/form/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/form/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/resource_entries.json b/apps/tracker/src/i18n/collections/resource_entries.json index 0ae5a8dc..1621ba8d 100644 --- a/apps/tracker/src/i18n/collections/resource_entries.json +++ b/apps/tracker/src/i18n/collections/resource_entries.json @@ -17,4 +17,4 @@ "ja": "コレクションを追加", "de": "Sammlung hinzufügen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/toast/resource_entries.json b/apps/tracker/src/i18n/collections/toast/resource_entries.json index 0c69682b..b3e2041a 100644 --- a/apps/tracker/src/i18n/collections/toast/resource_entries.json +++ b/apps/tracker/src/i18n/collections/toast/resource_entries.json @@ -38,9 +38,7 @@ "loadFailed": { "source": "Failed to load collections", "comment": "Error toast when loading collections fails", - "tags": [ - "collections" - ], + "tags": ["collections"], "es": "No se pudieron cargar las colecciones", "fr-ca": "Échec du chargement des collections", "ru": "Не удалось загрузить коллекции.", @@ -50,9 +48,7 @@ "createFailed": { "source": "Failed to create collection", "comment": "Error toast when creating a collection fails", - "tags": [ - "collections" - ], + "tags": ["collections"], "es": "No se pudo crear la colección", "fr-ca": "Impossible de créer la collection", "ru": "Не удалось создать коллекцию.", @@ -62,9 +58,7 @@ "updateFailed": { "source": "Failed to update collection", "comment": "Error toast when updating a collection fails", - "tags": [ - "collections" - ], + "tags": ["collections"], "es": "No se pudo actualizar la colección", "fr-ca": "Échec de la mise à jour de la collection", "ru": "Не удалось обновить коллекцию.", @@ -74,13 +68,11 @@ "deleteFailed": { "source": "Failed to delete collection", "comment": "Error toast when deleting a collection fails", - "tags": [ - "collections" - ], + "tags": ["collections"], "es": "No se pudo eliminar la colección", "fr-ca": "Échec de la suppression de la collection", "ru": "Не удалось удалить коллекцию.", "ja": "コレクションの削除に失敗しました", "de": "Sammlung konnte nicht gelöscht werden" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/toast/tracker_meta.json b/apps/tracker/src/i18n/collections/toast/tracker_meta.json index 3c7d5c41..8d3c48e4 100644 --- a/apps/tracker/src/i18n/collections/toast/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/toast/tracker_meta.json @@ -239,4 +239,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/collections/tracker_meta.json b/apps/tracker/src/i18n/collections/tracker_meta.json index 1b4e54f9..b3add7e3 100644 --- a/apps/tracker/src/i18n/collections/tracker_meta.json +++ b/apps/tracker/src/i18n/collections/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/common/actions/resource_entries.json b/apps/tracker/src/i18n/common/actions/resource_entries.json index 348069ca..bcdc625f 100644 --- a/apps/tracker/src/i18n/common/actions/resource_entries.json +++ b/apps/tracker/src/i18n/common/actions/resource_entries.json @@ -2,9 +2,7 @@ "edit": { "source": "Edit", "comment": "Text on a button or link that will display edit form for an entity", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Editar", "fr-ca": "Modifier", "ru": "Редактировать", @@ -14,9 +12,7 @@ "delete": { "source": "Delete", "comment": "Text on a button that will cause an entity to be deleted", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Eliminar", "fr-ca": "Supprimer", "ru": "Удалить", @@ -26,9 +22,7 @@ "retry": { "source": "Retry", "comment": "Text on a button to cause an action to retry operation", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Reintentar", "fr-ca": "Réessayer", "ru": "Повторить попытку", @@ -81,9 +75,7 @@ "move": { "source": "Move", "comment": "Action label to move an item to a different location", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Mover", "fr-ca": "Déplacer", "ru": "Двигаться", @@ -93,9 +85,7 @@ "translate": { "source": "Translate", "comment": "Action button to auto-translate a resource", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Traducir", "fr-ca": "Traduire", "ru": "Переводить", @@ -105,9 +95,7 @@ "selectAll": { "source": "Select All", "comment": "Button to select all items in a list or filter", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Seleccionar todo", "fr-ca": "Sélectionner tout", "ru": "Выбрать все", @@ -117,9 +105,7 @@ "clearAll": { "source": "Clear All", "comment": "Button to clear all selections in a list or filter", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Borrar todo", "fr-ca": "Effacer tout", "ru": "Очистить все", @@ -129,9 +115,7 @@ "close": { "source": "Close", "comment": "Button to close a dialog or dismiss a notification", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Cerca", "fr-ca": "Fermer", "ru": "Закрывать", @@ -141,13 +125,11 @@ "dismiss": { "source": "Dismiss", "comment": "Button to dismiss a notification or snackbar", - "tags": [ - "common" - ], + "tags": ["common"], "es": "Despedir", "fr-ca": "Rejeter", "ru": "Увольнять", "ja": "却下する", "de": "Zurückweisen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/common/actions/tracker_meta.json b/apps/tracker/src/i18n/common/actions/tracker_meta.json index 72731692..a378af48 100644 --- a/apps/tracker/src/i18n/common/actions/tracker_meta.json +++ b/apps/tracker/src/i18n/common/actions/tracker_meta.json @@ -419,4 +419,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/data/resource_entries.json b/apps/tracker/src/i18n/data/resource_entries.json index 655b38e3..34efd784 100644 --- a/apps/tracker/src/i18n/data/resource_entries.json +++ b/apps/tracker/src/i18n/data/resource_entries.json @@ -2,13 +2,11 @@ "loading": { "source": "Loading", "comment": "Message shown while data is loading", - "tags": [ - "data" - ], + "tags": ["data"], "es": "Cargando", "fr-ca": "Chargement", "ru": "Загрузка", "ja": "ロード中", "de": "Laden" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/data/tracker_meta.json b/apps/tracker/src/i18n/data/tracker_meta.json index 324a5531..d3f963c6 100644 --- a/apps/tracker/src/i18n/data/tracker_meta.json +++ b/apps/tracker/src/i18n/data/tracker_meta.json @@ -29,4 +29,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/header/resource_entries.json b/apps/tracker/src/i18n/header/resource_entries.json index 0cf047f8..a8885950 100644 --- a/apps/tracker/src/i18n/header/resource_entries.json +++ b/apps/tracker/src/i18n/header/resource_entries.json @@ -2,9 +2,7 @@ "goToCollections": { "source": "Go to Collections", "comment": "Aria-label and tooltip for the brand link in the app header", - "tags": [ - "header" - ], + "tags": ["header"], "es": "Ir a Colecciones", "fr-ca": "Accéder aux collections", "ru": "Перейти в Коллекции", @@ -14,9 +12,7 @@ "backToCollections": { "source": "Back to Collections", "comment": "Aria-label and tooltip for the back button in the app header when viewing a collection", - "tags": [ - "header" - ], + "tags": ["header"], "es": "Volver a Colecciones", "fr-ca": "Retour aux collections", "ru": "Вернуться к коллекциям", @@ -26,9 +22,7 @@ "keysCountX": { "source": "{ count, plural, =1 {1 key} other {{count} keys} }", "comment": "Pluralized count of translation keys shown in the app header stats", - "tags": [ - "header" - ], + "tags": ["header"], "es": "{ count, plural, =1 {1 key} other {{count} keys} }", "fr-ca": "{ count, plural, =1 {1 key} other {{count} keys} }", "ru": "{ count, plural, =1 {1 key} other {{count} keys} }", @@ -38,13 +32,11 @@ "localesCountX": { "source": "{ count, plural, =1 {1 locale} other {{count} locales} }", "comment": "Pluralized count of locales shown in the app header stats", - "tags": [ - "header" - ], + "tags": ["header"], "es": "{ count, plural, =1 {1 locale} other {{count} locales} }", "fr-ca": "{ count, plural, =1 {1 locale} other {{count} locales} }", "ru": "{ count, plural, =1 {1 locale} other {{count} locales} }", "ja": "{ count, plural, =1 {1 locale} other {{count} locales} }", "de": "{ count, plural, =1 {1 locale} other {{count} locales} }" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/header/tracker_meta.json b/apps/tracker/src/i18n/header/tracker_meta.json index 833a9334..5e3ecdb4 100644 --- a/apps/tracker/src/i18n/header/tracker_meta.json +++ b/apps/tracker/src/i18n/header/tracker_meta.json @@ -119,4 +119,4 @@ "status": "new" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/locale/resource_entries.json b/apps/tracker/src/i18n/locale/resource_entries.json index 95811cd1..37ad3135 100644 --- a/apps/tracker/src/i18n/locale/resource_entries.json +++ b/apps/tracker/src/i18n/locale/resource_entries.json @@ -2,9 +2,7 @@ "currentLanguage": { "source": "Current language: {language}", "comment": "Aria-label for the locale picker button showing the current language", - "tags": [ - "locale" - ], + "tags": ["locale"], "es": "Idioma actual: {language}", "fr-ca": "Langue actuelle : {language}", "ru": "Текущий язык: {language}", @@ -14,13 +12,11 @@ "selectLanguage": { "source": "Select language", "comment": "Aria-label for the locale selection dropdown menu", - "tags": [ - "locale" - ], + "tags": ["locale"], "es": "Seleccionar idioma", "fr-ca": "Choisir la langue", "ru": "Выберите язык", "ja": "言語を選択してください", "de": "Sprache auswählen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/locale/tracker_meta.json b/apps/tracker/src/i18n/locale/tracker_meta.json index e7e92c1e..976756f4 100644 --- a/apps/tracker/src/i18n/locale/tracker_meta.json +++ b/apps/tracker/src/i18n/locale/tracker_meta.json @@ -59,4 +59,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/theme/resource_entries.json b/apps/tracker/src/i18n/theme/resource_entries.json index 28d2866b..68e668dc 100644 --- a/apps/tracker/src/i18n/theme/resource_entries.json +++ b/apps/tracker/src/i18n/theme/resource_entries.json @@ -35,4 +35,4 @@ "ja": "テーマ設定", "de": "Designeinstellungen" } -} \ No newline at end of file +} diff --git a/apps/tracker/src/i18n/theme/tracker_meta.json b/apps/tracker/src/i18n/theme/tracker_meta.json index 02ce0621..c1cd3076 100644 --- a/apps/tracker/src/i18n/theme/tracker_meta.json +++ b/apps/tracker/src/i18n/theme/tracker_meta.json @@ -119,4 +119,4 @@ "status": "translated" } } -} \ No newline at end of file +} diff --git a/libs/core/src/collections-manager/add-locale-to-collection.spec.ts b/libs/core/src/collections-manager/add-locale-to-collection.spec.ts index a5265935..6f6fdfb9 100644 --- a/libs/core/src/collections-manager/add-locale-to-collection.spec.ts +++ b/libs/core/src/collections-manager/add-locale-to-collection.spec.ts @@ -32,7 +32,10 @@ describe('addLocaleToCollection', () => { ok: { source: 'OK', fr: 'OK' }, }; const meta: TrackerMetadata = { - ok: { en: { checksum: calculateChecksum('OK') }, fr: { checksum: calculateChecksum('OK'), baseChecksum: calculateChecksum('OK'), status: 'new' } }, + ok: { + en: { checksum: calculateChecksum('OK') }, + fr: { checksum: calculateChecksum('OK'), baseChecksum: calculateChecksum('OK'), status: 'new' }, + }, }; setupMockFs({ @@ -161,9 +164,7 @@ describe('addLocaleToCollection', () => { [CONFIG_PATH]: { type: 'file', content: JSON.stringify(makeConfig()) }, }); - await expect(addLocaleToCollection('main', 'not-valid-123', { cwd: CWD })).rejects.toThrow( - 'Invalid locale format', - ); + await expect(addLocaleToCollection('main', 'not-valid-123', { cwd: CWD })).rejects.toThrow('Invalid locale format'); }); it('uses collection-level baseLocale when blocking base locale add', async () => { diff --git a/libs/core/src/lib/errors/error-messages.ts b/libs/core/src/lib/errors/error-messages.ts index 65b2329c..d3d5019b 100644 --- a/libs/core/src/lib/errors/error-messages.ts +++ b/libs/core/src/lib/errors/error-messages.ts @@ -27,11 +27,9 @@ export const ErrorMessages = { localeAlreadyExists: (locale: string, collection: string) => `Locale "${locale}" already exists in collection "${collection}"`, - localeNotFound: (locale: string, collection: string) => - `Locale "${locale}" not found in collection "${collection}"`, + localeNotFound: (locale: string, collection: string) => `Locale "${locale}" not found in collection "${collection}"`, - cannotModifyBaseLocale: (locale: string) => - `Cannot add or remove the base locale "${locale}"`, + cannotModifyBaseLocale: (locale: string) => `Cannot add or remove the base locale "${locale}"`, invalidKey: (key: string, reason: string) => `Invalid resource key "${key}": ${reason}`, } as const; From e73649924e223d0242bb01387d48b2e9f079f0e1 Mon Sep 17 00:00:00 2001 From: Simon Nodel Date: Sun, 12 Apr 2026 21:49:15 -0700 Subject: [PATCH 13/13] docs(readme): update with link to github pages --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 133d6492..30270df0 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ npx lingo-tracker validate npx lingo-tracker-app ``` -Check the [getting started guide](docs/getting-started.md) for detailed setup instructions, or the full [CLI reference](docs/cli.md) for all available commands. +Check the [documentation site](https://simoncodes-ca.github.io/lingo-tracker/), the [getting started guide](docs/getting-started.md) for detailed setup instructions, or the full [CLI reference](docs/cli.md) for all available commands. ## Roadmap

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