mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-10-15 18:35:43 -04:00
refactor(i18n): replace compiled .ts catalogs with direct .po imports
- Remove `lingui compile` / `i18n:compile` script — Vite and Metro LingUI plugins now compile `.po` files on the fly at dev/build time; no manual compile step needed
- Import `.po` files directly in `@sofa/i18n` (`./po/en.po` etc.) and add `po.d.ts` ambient module declaration so TypeScript accepts them
- Add `fallbackLocales: { default: "en" }` and `lineNumbers: false` to `lingui.config.ts`; prefix catalog paths with `<rootDir>` for correctness
- Derive `SupportedLocale` and `SUPPORTED_LOCALES` from `LOCALE_INFO` in `locales.ts` to eliminate the circular import between `index.ts` and `locales.ts`
- Update Crowdin config to use `project_id_env` instead of a hardcoded ID, drop `languages_mapping` (no longer needed), and add `preserve_hierarchy: true`
- Add a daily cron trigger (`0 6 * * *`) to the Crowdin GitHub Actions workflow and drop the now-redundant compile step from it
- Update docs and `AGENTS.md` to reflect that no compile step is required after `i18n:extract`
This commit is contained in:
23 files changed
+4941
-4959
No files matched your search
@@ -6,6 +6,8 @@ on:
|
||||
paths:
|
||||
- "packages/i18n/src/po/en.po"
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 6 * * *"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -56,13 +58,10 @@ jobs:
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Compile catalogs
|
||||
run: bun run i18n:compile
|
||||
|
||||
- name: Commit compiled catalogs
|
||||
- name: Commit updated catalogs
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git add packages/i18n/src/po/
|
||||
git diff --cached --quiet || git commit -m "chore(i18n): compile updated translation catalogs"
|
||||
git diff --cached --quiet || git commit -m "chore(i18n): update translation catalogs"
|
||||
git push
|
||||
@@ -13,7 +13,6 @@ bun run check-types # TypeScript type check
|
||||
bun run test # Run tests
|
||||
bun run generate:openapi # Regenerate OpenAPI spec + docs API pages (run after contract/schema changes)
|
||||
bun run i18n:extract # Run LingUI's string extraction
|
||||
bun run i18n:compile # Run LingUI's typescript compilation
|
||||
bun run i18n:claude # Prompt Claude Code to fill in untranslated strings
|
||||
|
||||
# Database commands (run from packages/db/)
|
||||
@@ -125,7 +124,7 @@ Cross-package imports:
|
||||
- **Date/number formatting** → use `formatDate`, `formatRelativeTime`, `formatNumber`, `formatBytes` from `@sofa/i18n/format` (Intl-based, locale-aware). Never use `date-fns` in app code.
|
||||
- **Native Intl polyfills** → `@formatjs/intl-*` polyfills loaded in `apps/native/src/lib/intl-polyfills.ts` (strict dependency order, with locale data for all 6 languages).
|
||||
- **Error messages** → Server throws `ORPCError` with `data: { code: AppErrorCode.XXX }`. Clients map codes to localized strings via per-app `error-messages.ts`. Never display `error.message` to users.
|
||||
- After adding/changing strings, run `bun run i18n:extract` then `bun run i18n:compile`.
|
||||
- After adding/changing strings, run `bun run i18n:extract`. The Vite and Metro plugins compile `.po` catalogs on the fly — no manual compile step needed.
|
||||
|
||||
### Environment variables
|
||||
|
||||
|
||||
+2
-5
@@ -1,10 +1,7 @@
|
||||
project_id: "881052"
|
||||
project_id_env: CROWDIN_PROJECT_ID
|
||||
api_token_env: CROWDIN_PERSONAL_TOKEN
|
||||
preserve_hierarchy: true
|
||||
|
||||
files:
|
||||
- source: /packages/i18n/src/po/en.po
|
||||
translation: /packages/i18n/src/po/%two_letters_code%.po
|
||||
languages_mapping:
|
||||
two_letters_code:
|
||||
es-ES: es
|
||||
pt-PT: pt
|
||||
@@ -24,7 +24,7 @@ The translation pipeline:
|
||||
1. React (web) and React Native (mobile) apps wrap UI strings in `<Trans>` components or `` msg`...` `` macros
|
||||
2. `bun run i18n:extract` scans the codebase and updates `en.po` with new strings
|
||||
3. Translations are added to each locale's `.po` file (e.g. `fr.po`, `de.po`)
|
||||
4. `bun run i18n:compile` compiles `.po` files into TypeScript for use at runtime
|
||||
4. The Vite and Metro plugins compile `.po` files on the fly at dev/build time
|
||||
5. Non-English locales are lazy-loaded on demand
|
||||
|
||||
## Contributing via Crowdin
|
||||
@@ -51,7 +51,7 @@ bun packages/i18n/scripts/claude.ts all --dry-run
|
||||
bun packages/i18n/scripts/claude.ts all --model opus
|
||||
```
|
||||
|
||||
The script only translates strings with empty `msgstr` — existing translations are never overwritten. It reads the locale list from [`lingui.config.ts`](https://github.com/jakejarvis/sofa/blob/main/lingui.config.ts) automatically and compiles catalogs after translating.
|
||||
The script only translates strings with empty `msgstr` — existing translations are never overwritten. It reads the locale list from [`lingui.config.ts`](https://github.com/jakejarvis/sofa/blob/main/lingui.config.ts) automatically.
|
||||
|
||||
<Callout type="info">
|
||||
Using this script really only makes sense if you have a [Claude Max
|
||||
@@ -64,7 +64,6 @@ The script only translates strings with empty `msgstr` — existing translations
|
||||
2. Run `bun run i18n:extract` — this creates a new `.po` file for the locale
|
||||
3. Translate the strings (via Crowdin, manually, or with `bun packages/i18n/scripts/claude.ts <locale>`)
|
||||
4. Add the locale to the `LOCALE_INFO` array in [`packages/i18n/src/locales.ts`](https://github.com/jakejarvis/sofa/blob/main/packages/i18n/src/locales.ts) with its native name
|
||||
5. Run `bun run i18n:compile`
|
||||
|
||||
## Translation guidelines
|
||||
|
||||
|
||||
+8
-4
@@ -6,10 +6,14 @@ export default defineConfig({
|
||||
sourceLocale: "en",
|
||||
catalogs: [
|
||||
{
|
||||
path: "packages/i18n/src/po/{locale}",
|
||||
include: ["apps/web/src", "apps/native/src"],
|
||||
path: "<rootDir>/packages/i18n/src/po/{locale}",
|
||||
include: ["<rootDir>/apps/web/src", "<rootDir>/apps/native/src"],
|
||||
},
|
||||
],
|
||||
format: formatter(),
|
||||
compileNamespace: "ts",
|
||||
format: formatter({
|
||||
lineNumbers: false,
|
||||
}),
|
||||
fallbackLocales: {
|
||||
default: "en",
|
||||
},
|
||||
});
|
||||
@@ -46,7 +46,6 @@
|
||||
"test": "turbo run test",
|
||||
"generate:openapi": "bun scripts/generate-openapi-spec.ts && cd docs && bun run generate:api-docs",
|
||||
"i18n:extract": "lingui extract",
|
||||
"i18n:compile": "lingui compile --typescript",
|
||||
"i18n:claude": "bun packages/i18n/scripts/claude.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -530,16 +530,6 @@ if (!dryRun) {
|
||||
console.error("Extraction failed");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log("Compiling catalogs...");
|
||||
const compile = Bun.spawn(["bun", "run", "i18n:compile"], {
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
});
|
||||
if ((await compile.exited) !== 0) {
|
||||
console.error("Catalog compilation failed");
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
console.log("Done!");
|
||||
+10
-15
@@ -1,20 +1,20 @@
|
||||
import { i18n, type Messages } from "@lingui/core";
|
||||
|
||||
import { messages as enMessages } from "./po/en";
|
||||
import type { SupportedLocale } from "./locales";
|
||||
import { messages as enMessages } from "./po/en.po";
|
||||
|
||||
export const SUPPORTED_LOCALES = ["en", "fr", "de", "es", "it", "pt"] as const;
|
||||
export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];
|
||||
export { SUPPORTED_LOCALES, type SupportedLocale } from "./locales";
|
||||
|
||||
// English always bundled — zero async on default locale
|
||||
i18n.load("en", enMessages);
|
||||
i18n.activate("en");
|
||||
|
||||
const loaders: Record<string, () => Promise<{ messages: Messages }>> = {
|
||||
fr: () => import("./po/fr"),
|
||||
de: () => import("./po/de"),
|
||||
es: () => import("./po/es"),
|
||||
it: () => import("./po/it"),
|
||||
pt: () => import("./po/pt"),
|
||||
const loaders: Record<Exclude<SupportedLocale, "en">, () => Promise<{ messages: Messages }>> = {
|
||||
fr: () => import("./po/fr.po"),
|
||||
de: () => import("./po/de.po"),
|
||||
es: () => import("./po/es.po"),
|
||||
it: () => import("./po/it.po"),
|
||||
pt: () => import("./po/pt.po"),
|
||||
};
|
||||
|
||||
export async function activateLocale(locale: SupportedLocale): Promise<void> {
|
||||
@@ -22,12 +22,7 @@ export async function activateLocale(locale: SupportedLocale): Promise<void> {
|
||||
i18n.activate("en");
|
||||
return;
|
||||
}
|
||||
const loader = loaders[locale];
|
||||
if (!loader) {
|
||||
i18n.activate("en");
|
||||
return;
|
||||
}
|
||||
const { messages } = await loader();
|
||||
const { messages } = await loaders[locale]();
|
||||
i18n.load(locale, messages);
|
||||
i18n.activate(locale);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
import type { SupportedLocale } from "./index";
|
||||
|
||||
export interface LocaleInfo {
|
||||
code: SupportedLocale;
|
||||
code: string;
|
||||
name: string;
|
||||
nativeName: string;
|
||||
}
|
||||
|
||||
export const LOCALE_INFO: LocaleInfo[] = [
|
||||
export const LOCALE_INFO = [
|
||||
{ code: "en", name: "English", nativeName: "English" },
|
||||
{ code: "fr", name: "French", nativeName: "Fran\u00e7ais" },
|
||||
{ code: "de", name: "German", nativeName: "Deutsch" },
|
||||
{ code: "es", name: "Spanish", nativeName: "Espa\u00f1ol" },
|
||||
{ code: "it", name: "Italian", nativeName: "Italiano" },
|
||||
{ code: "pt", name: "Portuguese", nativeName: "Portugu\u00eas" },
|
||||
];
|
||||
] as const satisfies readonly LocaleInfo[];
|
||||
|
||||
export type SupportedLocale = (typeof LOCALE_INFO)[number]["code"];
|
||||
|
||||
export const SUPPORTED_LOCALES = LOCALE_INFO.map((l) => l.code) as SupportedLocale[];
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
declare module "*.po" {
|
||||
import type { Messages } from "@lingui/core";
|
||||
export const messages: Messages;
|
||||
}
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Samstag\"],\"+6i0lS\":[\"Verlauf, Merkliste und Bewertungen werden abgerufen...\"],\"+Cv+V9\":[\"Aus Bibliothek entfernen\"],\"+JkEpu\":[\"Diese Seite ist auf dem Schneidetisch gelandet. Sie wurde möglicherweise verschoben, entfernt oder hat es nie über das Drehbuch hinaus geschafft.\"],\"+K0AvT\":[\"Trennen\"],\"+N0l5/\":[\"Verbunden mit <0>\",[\"serverHost\"],\"</0>. Tippe zum Ändern.\"],\"+gLHYi\":[\"Titel konnte nicht geladen werden\"],\"+j1ex/\":[\"Konnte nicht aus der Bibliothek entfernt werden\"],\"+nF1ZO\":[\"Foto entfernen\"],\"/+6dvC\":[\"Fehler (\",[\"0\"],\")\"],\"/BBXeA\":[\"Verbinde mit Server...\"],\"/DwR+n\":[\"Erstelle...\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Alle als gesehen markieren\"],\"/gQXGv\":[\"Status konnte nicht aktualisiert werden\"],\"/nT6AE\":[\"Neues Passwort\"],\"/sHc1/\":[\"Update-Prüfung\"],\"0+dyau\":[\"Aufbewahrungseinstellung konnte nicht aktualisiert werden\"],\"0BFJKK\":[\"Autorisierung wurde verweigert. Bitte versuche es erneut.\"],\"0GHb20\":[\"Metadaten-Cache leeren?\"],\"0IBW21\":[\"Cache konnte nicht geleert werden\"],\"0gH/sc\":[\"Profilbild entfernen\"],\"1+P9RR\":[\"Zu \",[\"0\"],\" wechseln\"],\"12cc1j\":[\"Am Schauen\"],\"12lVOl\":[\"Selbstgehosteter Film- & Serien-Tracker\"],\"1B4z0M\":[\"Filmografie\"],\"1J4Ek0\":[\"Datenbank automatisch nach Zeitplan sichern\"],\"1JhxXW\":[\"Folge \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Importoptionen\"],\"1Qz4uG\":[\"Ereigniskategorie \\\"Playback\\\" aktivieren\"],\"1hMWR6\":[\"Konto erstellen\"],\"1jHIjh\":[\"Alle Episoden von \",[\"seasonName\"],\" als gesehen markiert\"],\"1vSYsG\":[\"Backup herunterladen\"],\"1wL1tj\":[\"Serie\"],\"2FletP\":[[\"0\",\"plural\",{\"one\":[\"#\",\" Titel\"],\"other\":[\"#\",\" Titel\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" Person\"],\"other\":[\"#\",\" Personen\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" Datei\"],\"other\":[\"#\",\" Dateien\"]}],\" bereinigt (\",[\"freed\"],\" freigegeben)\"],\"2Fsd9r\":[\"Diesen Monat\"],\"2MPcep\":[\"Import abgeschlossen\"],\"2Mu33Z\":[\"Cache-Verwaltung\"],\"2POOFK\":[\"Kostenlos\"],\"2Pt2NY\":[\"Dadurch werden alle Einträge aus deinem Verlauf entfernt.\"],\"2fCpt5\":[\"Zur Startseite\"],\"2pPBp6\":[\"Heute im Trend\"],\"37o8E8\":[\"In der Merkliste\"],\"39neVN\":[\"Filme \",[\"0\"]],\"39y5bn\":[\"Freitag\"],\"3Blefz\":[\"Bewertungen\"],\"3JTlG8\":[\"Letzte Suchen\"],\"3Jy8bM\":[\"Filme \",[\"select\"]],\"3L9OuQ\":[\"Folge \",[\"0\"]],\"3T/4MV\":[\"dieses Jahr\"],\"3T8ziB\":[\"Konto erstellen\"],\"3hELxX\":[\"Gib deine Sofa-Server-URL ein, um loszulegen\"],\"4fxLkp\":[\"Öffne Sonarr, gehe zu <0>Settings > Import Lists</0>\"],\"4kpBqM\":[\"Letztes Ereignis \",[\"0\"]],\"4uUjVO\":[\"Produzent\"],\"4x+A56\":[\"Anonyme Nutzungsberichte\"],\"5IShvp\":[[\"totalItems\"],\" Einträge importieren\"],\"5IYJSv\":[\"Titel entdecken\"],\"5Y4mym\":[\"Von \",[\"0\"],\" importieren\"],\"5ZzgbQ\":[[\"0\"],\" verbinden\"],\"5fEnbK\":[\"Einstellung für geplante Backups konnte nicht aktualisiert werden\"],\"5lWFkC\":[\"Anmelden\"],\"5v9C16\":[\"Verbunden mit \",[\"source\"]],\"623bR4\":[\"Aufgabe konnte nicht ausgelöst werden\"],\"6HN0yh\":[\"Öffne Plex, gehe zu Settings > Webhooks\"],\"6TNjOJ\":[\"Bewertung konnte nicht aktualisiert werden\"],\"6TfUy6\":[\"letzte \",[\"value\"]],\"6V3Ea3\":[\"Kopiert\"],\"6YtxFj\":[\"Name\"],\"6exX+8\":[\"Neu generieren\"],\"6gRgw8\":[\"Erneut versuchen\"],\"6lGV3K\":[\"Weniger anzeigen\"],\"76++pR\":[\"Warnungen\"],\"77DIAu\":[\"Gehe zu Dashboard > Plugins > Webhook\"],\"79m/GK\":[\"Folgen \",[\"0\"]],\"7Bj3x9\":[\"Fehlgeschlagen\"],\"7D50KC\":[[\"label\"],\" getrennt\"],\"7GfM5w\":[\"Zuletzt angesehen\"],\"7L01XJ\":[\"Aktionen\"],\"7eMo+U\":[\"Zur Startseite\"],\"7p5kLi\":[\"Dashboard\"],\"85eoJ1\":[\"Zeitplan aktualisiert\"],\"8B9E2D\":[\"Tag:\"],\"8YwF1J\":[\"Gehe zu <0>Dashboard > Plugins > Webhook</0>\"],\"8ZsakT\":[\"Passwort\"],\"8tjQCz\":[\"Entdecken\"],\"8vNtLy\":[\"Füge die obige Radarr-URL in das Feld \\\"List URL\\\" ein\"],\"8wYDMp\":[\"Bereits ein Konto?\"],\"9AE3vb\":[\"Öffne Plex, gehe zu <0>Settings > Webhooks<1/></0>\"],\"9GW0ZB\":[\"Import läuft noch im Hintergrund. Komm später wieder.\"],\"9NyAH9\":[\"Übersprungen\"],\"9Xhrps\":[\"Verbindung fehlgeschlagen\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Willkommen zurück\"],\"9rG25a\":[\"Server-URL\"],\"A+0rLe\":[\"Als abgeschlossen markiert\"],\"A1taO8\":[\"Suche\"],\"AOHgZp\":[\"Episoden\"],\"AOddWK\":[[\"label\"],\" verbinden\"],\"ATfxL/\":[\"Trailer\"],\"AVlZoM\":[\"Umgebung\"],\"Acf6vF\":[\"Namen speichern\"],\"AdoUfN\":[\"Konnte nicht zur Merkliste hinzugefügt werden\"],\"AeXO77\":[\"Konto\"],\"AjtYj0\":[\"Auf der Merkliste\"],\"Avee+B\":[\"Name konnte nicht aktualisiert werden\"],\"B2R3xD\":[\"Geplante Backups umschalten\"],\"BEVzjL\":[\"Import fehlgeschlagen\"],\"BQnS5I\":[[\"source\"],\" öffnen, um CodeLine truncated
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Saturday\"],\"+6i0lS\":[\"Retrieving your watch history, watchlist, and ratings...\"],\"+Cv+V9\":[\"Remove from library\"],\"+JkEpu\":[\"This page was left on the cutting room floor. It may have been moved, removed, or never made it past the screenplay.\"],\"+K0AvT\":[\"Disconnect\"],\"+N0l5/\":[\"Connected to <0>\",[\"serverHost\"],\"</0>. Tap to change.\"],\"+gLHYi\":[\"Failed to load title\"],\"+j1ex/\":[\"Failed to remove from library\"],\"+nF1ZO\":[\"Remove Photo\"],\"/+6dvC\":[\"Errors (\",[\"0\"],\")\"],\"/BBXeA\":[\"Connecting to server...\"],\"/DwR+n\":[\"Creating…\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Watch all\"],\"/gQXGv\":[\"Failed to update status\"],\"/nT6AE\":[\"New password\"],\"/sHc1/\":[\"Update check\"],\"0+dyau\":[\"Failed to update retention setting\"],\"0BFJKK\":[\"Authorization was denied. Please try again.\"],\"0GHb20\":[\"Purge metadata cache?\"],\"0IBW21\":[\"Failed to purge caches\"],\"0gH/sc\":[\"Remove profile picture\"],\"1+P9RR\":[\"Switch to \",[\"0\"]],\"12cc1j\":[\"Watching\"],\"12lVOl\":[\"Self-hosted movie & TV tracker\"],\"1B4z0M\":[\"Filmography\"],\"1J4Ek0\":[\"Automatically back up your database on a schedule\"],\"1JhxXW\":[\"Episode \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Import options\"],\"1Qz4uG\":[\"Enable the \\\"Playback\\\" event category\"],\"1hMWR6\":[\"Create account\"],\"1jHIjh\":[\"Watched all of \",[\"seasonName\"]],\"1vSYsG\":[\"Download backup\"],\"1wL1tj\":[\"TV show\"],\"2FletP\":[\"Purged \",[\"0\",\"plural\",{\"one\":[\"#\",\" title\"],\"other\":[\"#\",\" titles\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" person\"],\"other\":[\"#\",\" persons\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" file\"],\"other\":[\"#\",\" files\"]}],\" (\",[\"freed\"],\" freed)\"],\"2Fsd9r\":[\"This Month\"],\"2MPcep\":[\"Import complete\"],\"2Mu33Z\":[\"Cache management\"],\"2POOFK\":[\"Free\"],\"2Pt2NY\":[\"This will remove all items from your history.\"],\"2fCpt5\":[\"Return home\"],\"2pPBp6\":[\"Trending today\"],\"37o8E8\":[\"In Watchlist\"],\"39neVN\":[\"Movies \",[\"0\"]],\"39y5bn\":[\"Friday\"],\"3Blefz\":[\"Ratings\"],\"3JTlG8\":[\"Recent Searches\"],\"3Jy8bM\":[\"Movies \",[\"select\"]],\"3L9OuQ\":[\"Episode \",[\"0\"]],\"3T/4MV\":[\"this year\"],\"3T8ziB\":[\"Create an account\"],\"3hELxX\":[\"Enter your Sofa server URL to get started\"],\"4fxLkp\":[\"Open Sonarr, go to <0>Settings > Import Lists</0>\"],\"4kpBqM\":[\"Last event \",[\"0\"]],\"4uUjVO\":[\"Producer\"],\"4x+A56\":[\"Anonymous usage reporting\"],\"5IShvp\":[\"Import \",[\"totalItems\"],\" items\"],\"5IYJSv\":[\"Explore titles\"],\"5Y4mym\":[\"Import from \",[\"0\"]],\"5ZzgbQ\":[\"Connect \",[\"0\"]],\"5fEnbK\":[\"Failed to update scheduled backup setting\"],\"5lWFkC\":[\"Sign in\"],\"5v9C16\":[\"Connected to \",[\"source\"]],\"623bR4\":[\"Failed to trigger job\"],\"6HN0yh\":[\"Open Plex, go to Settings > Webhooks\"],\"6TNjOJ\":[\"Failed to update rating\"],\"6TfUy6\":[\"last \",[\"value\"]],\"6V3Ea3\":[\"Copied\"],\"6YtxFj\":[\"Name\"],\"6exX+8\":[\"Regenerate\"],\"6gRgw8\":[\"Retry\"],\"6lGV3K\":[\"Show less\"],\"76++pR\":[\"Warnings\"],\"77DIAu\":[\"Go to Dashboard > Plugins > Webhook\"],\"79m/GK\":[\"Episodes \",[\"0\"]],\"7Bj3x9\":[\"Failed\"],\"7D50KC\":[[\"label\"],\" disconnected\"],\"7GfM5w\":[\"Recently Viewed\"],\"7L01XJ\":[\"Actions\"],\"7eMo+U\":[\"Go Home\"],\"7p5kLi\":[\"Dashboard\"],\"85eoJ1\":[\"Schedule updated\"],\"8B9E2D\":[\"Day:\"],\"8YwF1J\":[\"Go to <0>Dashboard > Plugins > Webhook</0>\"],\"8ZsakT\":[\"Password\"],\"8tjQCz\":[\"Explore\"],\"8vNtLy\":[\"Paste the Radarr URL above into the List URL field\"],\"8wYDMp\":[\"Already have an account?\"],\"9AE3vb\":[\"Open Plex, go to <0>Settings > Webhooks<1/></0>\"],\"9GW0ZB\":[\"Import is still running in the background. Check back later.\"],\"9NyAH9\":[\"Skipped\"],\"9Xhrps\":[\"Failed to connect\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Welcome back\"],\"9rG25a\":[\"Server URL\"],\"A+0rLe\":[\"Marked as completed\"],\"A1taO8\":[\"Search\"],\"AOHgZp\":[\"Episodes\"],\"AOddWK\":[\"Connect \",[\"label\"]],\"ATfxL/\":[\"Trailer\"],\"AVlZoM\":[\"Environment\"],\"Acf6vF\":[\"Save name\"],\"AdoUfN\":[\"Failed to add to watchlist\"],\"AeXO77\":[\"Account\"],\"AjtYj0\":[\"On Watchlist\"],\"Avee+B\":[\"Failed to update name\"],\"B2R3xD\":[\"Toggle scheduled backups\"],\"BEVzjL\":[\"Import failed\"],\"BQnS5I\":[\"Open \",[\"source\"],\" to enter code\"],\"BUnoSB\":[[\"0\"],\" \",[\"1\",\"plural\",{\"one\":[\"backup\"],\"other\":[\"backups\"]}],\" stored\"],\"BpttUI\":[\"Trending Today\"],\"BrrIs8\":[\"Storage\"],\"BskWMl\":[\"Unreachable\"],\"BzEFor\":[\"or\"],\"CGDHFb\":[\"Add a <0>Generic Destination</0> and paste the URL above\"],\"CGExDN\":[\"Failed to purge image cache\"],\"CHeXFE\":[\"Status updated\"],\"CKyk7Q\":[\"Go back\"],\"CaB/+I\":[\"Welcome back, \",[\"name\"]],\"CodnUh\":[\"Removed frLine truncated
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Sábado\"],\"+6i0lS\":[\"Obteniendo tu historial de visionado, lista y valoraciones...\"],\"+Cv+V9\":[\"Eliminar de la biblioteca\"],\"+JkEpu\":[\"Esta página quedó en la sala de montaje. Puede que haya sido movida, eliminada o que nunca pasara del guion.\"],\"+K0AvT\":[\"Desconectar\"],\"+N0l5/\":[\"Conectado a <0>\",[\"serverHost\"],\"</0>. Toca para cambiar.\"],\"+gLHYi\":[\"Error al cargar el título\"],\"+j1ex/\":[\"Error al eliminar de la biblioteca\"],\"+nF1ZO\":[\"Eliminar foto\"],\"/+6dvC\":[\"Errores (\",[\"0\"],\")\"],\"/BBXeA\":[\"Conectando al servidor...\"],\"/DwR+n\":[\"Creando…\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Marcar todo como visto\"],\"/gQXGv\":[\"Error al actualizar el estado\"],\"/nT6AE\":[\"Nueva contraseña\"],\"/sHc1/\":[\"Comprobación de actualizaciones\"],\"0+dyau\":[\"Error al actualizar el ajuste de retención\"],\"0BFJKK\":[\"La autorización fue denegada. Por favor, inténtalo de nuevo.\"],\"0GHb20\":[\"¿Purgar la caché de metadatos?\"],\"0IBW21\":[\"Error al purgar las cachés\"],\"0gH/sc\":[\"Eliminar foto de perfil\"],\"1+P9RR\":[\"Cambiar a \",[\"0\"]],\"12cc1j\":[\"Viendo\"],\"12lVOl\":[\"Seguimiento de películas y series autoalojado\"],\"1B4z0M\":[\"Filmografía\"],\"1J4Ek0\":[\"Realiza copias de seguridad automáticas de tu base de datos de forma programada\"],\"1JhxXW\":[\"Episodio \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Opciones de importación\"],\"1Qz4uG\":[\"Activa la categoría de evento \\\"Playback\\\"\"],\"1hMWR6\":[\"Crear cuenta\"],\"1jHIjh\":[\"Visto todo de \",[\"seasonName\"]],\"1vSYsG\":[\"Descargar copia de seguridad\"],\"1wL1tj\":[\"Serie\"],\"2FletP\":[\"Purgados \",[\"0\",\"plural\",{\"one\":[\"#\",\" título\"],\"other\":[\"#\",\" títulos\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" persona\"],\"other\":[\"#\",\" personas\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" archivo\"],\"other\":[\"#\",\" archivos\"]}],\" (\",[\"freed\"],\" liberado)\"],\"2Fsd9r\":[\"Este mes\"],\"2MPcep\":[\"Importación completada\"],\"2Mu33Z\":[\"Gestión de caché\"],\"2POOFK\":[\"Gratis\"],\"2Pt2NY\":[\"Esto eliminará todos los elementos de tu historial.\"],\"2fCpt5\":[\"Volver al inicio\"],\"2pPBp6\":[\"Tendencia hoy\"],\"37o8E8\":[\"En lista de seguimiento\"],\"39neVN\":[\"Películas \",[\"0\"]],\"39y5bn\":[\"Viernes\"],\"3Blefz\":[\"Valoraciones\"],\"3JTlG8\":[\"Búsquedas recientes\"],\"3Jy8bM\":[\"Películas \",[\"select\"]],\"3L9OuQ\":[\"Episodio \",[\"0\"]],\"3T/4MV\":[\"este año\"],\"3T8ziB\":[\"Crear una cuenta\"],\"3hELxX\":[\"Introduce la URL de tu servidor Sofa para comenzar\"],\"4fxLkp\":[\"Abre Sonarr, ve a <0>Settings > Import Lists</0>\"],\"4kpBqM\":[\"Último evento \",[\"0\"]],\"4uUjVO\":[\"Productor\"],\"4x+A56\":[\"Informe de uso anónimo\"],\"5IShvp\":[\"Importar \",[\"totalItems\"],\" elementos\"],\"5IYJSv\":[\"Explorar títulos\"],\"5Y4mym\":[\"Importar desde \",[\"0\"]],\"5ZzgbQ\":[\"Conectar \",[\"0\"]],\"5fEnbK\":[\"Error al actualizar el ajuste de copia de seguridad programada\"],\"5lWFkC\":[\"Iniciar sesión\"],\"5v9C16\":[\"Conectado a \",[\"source\"]],\"623bR4\":[\"Error al iniciar la tarea\"],\"6HN0yh\":[\"Abre Plex, ve a Settings > Webhooks\"],\"6TNjOJ\":[\"Error al actualizar la valoración\"],\"6TfUy6\":[\"últimos \",[\"value\"]],\"6V3Ea3\":[\"Copiado\"],\"6YtxFj\":[\"Nombre\"],\"6exX+8\":[\"Regenerar\"],\"6gRgw8\":[\"Reintentar\"],\"6lGV3K\":[\"Mostrar menos\"],\"76++pR\":[\"Advertencias\"],\"77DIAu\":[\"Ve a Dashboard > Plugins > Webhook\"],\"79m/GK\":[\"Episodios \",[\"0\"]],\"7Bj3x9\":[\"Fallido\"],\"7D50KC\":[[\"label\"],\" desconectado\"],\"7GfM5w\":[\"Vistos recientemente\"],\"7L01XJ\":[\"Acciones\"],\"7eMo+U\":[\"Ir al inicio\"],\"7p5kLi\":[\"Panel\"],\"85eoJ1\":[\"Programación actualizada\"],\"8B9E2D\":[\"Día:\"],\"8YwF1J\":[\"Ve a <0>Dashboard > Plugins > Webhook</0>\"],\"8ZsakT\":[\"Contraseña\"],\"8tjQCz\":[\"Explorar\"],\"8vNtLy\":[\"Pega la URL de Radarr anterior en el campo URL de lista\"],\"8wYDMp\":[\"¿Ya tienes una cuenta?\"],\"9AE3vb\":[\"Abre Plex, ve a <0>Settings > Webhooks<1/></0>\"],\"9GW0ZB\":[\"La importación sigue en curso en segundo plano. Vuelve más tarde.\"],\"9NyAH9\":[\"Omitido\"],\"9Xhrps\":[\"Error al conectar\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Bienvenido de nuevo\"],\"9rG25a\":[\"URL del servidor\"],\"A+0rLe\":[\"Marcado como completado\"],\"A1taO8\":[\"Buscar\"],\"AOHgZp\":[\"Episodios\"],\"AOddWK\":[\"Conectar \",[\"label\"]],\"ATfxL/\":[\"Tráiler\"],\"AVlZoM\":[\"Entorno\"],\"Acf6vF\":[\"Guardar nombre\"],\"AdoUfN\":[\"Error al añadir a la lista\"],\"AeXO77\":[\"Cuenta\"],\"AjtYj0\":[\"En la lista\"],\"Avee+B\":[\"Error al actualizar el nombre\"],\"B2R3xD\":[\"Activar/desactivar copias de seguridad programadas\"],\"BEVzjL\":[\"Error en la importación\"],\"BQnS5I\":[\"Abre \",[\"source\"],\" para introducir el código\"],\"BUnoSB\":Line truncated
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Samedi\"],\"+6i0lS\":[\"Récupération de votre historique, liste de suivi et notes...\"],\"+Cv+V9\":[\"Supprimer de la bibliothèque\"],\"+JkEpu\":[\"Cette page est restée sur le plancher de la salle de montage. Elle a peut-être été déplacée, supprimée, ou n'a jamais dépassé le stade du scénario.\"],\"+K0AvT\":[\"Déconnecter\"],\"+N0l5/\":[\"Connecté à <0>\",[\"serverHost\"],\"</0>. Appuyez pour modifier.\"],\"+gLHYi\":[\"Échec du chargement du titre\"],\"+j1ex/\":[\"Échec de la suppression de la bibliothèque\"],\"+nF1ZO\":[\"Supprimer la photo\"],\"/+6dvC\":[\"Erreurs (\",[\"0\"],\")\"],\"/BBXeA\":[\"Connexion au serveur...\"],\"/DwR+n\":[\"Création…\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Tout marquer comme visionné\"],\"/gQXGv\":[\"Échec de la mise à jour du statut\"],\"/nT6AE\":[\"Nouveau mot de passe\"],\"/sHc1/\":[\"Vérification des mises à jour\"],\"0+dyau\":[\"Échec de la mise à jour du paramètre de rétention\"],\"0BFJKK\":[\"L'autorisation a été refusée. Veuillez réessayer.\"],\"0GHb20\":[\"Purger le cache de métadonnées ?\"],\"0IBW21\":[\"Échec de la purge des caches\"],\"0gH/sc\":[\"Supprimer la photo de profil\"],\"1+P9RR\":[\"Passer à \",[\"0\"]],\"12cc1j\":[\"En cours\"],\"12lVOl\":[\"Suivi de films et séries auto-hébergé\"],\"1B4z0M\":[\"Filmographie\"],\"1J4Ek0\":[\"Sauvegardez automatiquement votre base de données selon un planning\"],\"1JhxXW\":[\"Épisode \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Options d'importation\"],\"1Qz4uG\":[\"Activez la catégorie d'événement « Playback »\"],\"1hMWR6\":[\"Créer un compte\"],\"1jHIjh\":[\"Tout visionné de \",[\"seasonName\"]],\"1vSYsG\":[\"Télécharger la sauvegarde\"],\"1wL1tj\":[\"Série TV\"],\"2FletP\":[[\"0\",\"plural\",{\"one\":[\"#\",\" titre\"],\"other\":[\"#\",\" titres\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" personne\"],\"other\":[\"#\",\" personnes\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" fichier\"],\"other\":[\"#\",\" fichiers\"]}],\" purgés (\",[\"freed\"],\" libéré)\"],\"2Fsd9r\":[\"Ce mois-ci\"],\"2MPcep\":[\"Importation terminée\"],\"2Mu33Z\":[\"Gestion du cache\"],\"2POOFK\":[\"Gratuit\"],\"2Pt2NY\":[\"Cela supprimera tous les éléments de votre historique.\"],\"2fCpt5\":[\"Retour à l'accueil\"],\"2pPBp6\":[\"Tendance aujourd'hui\"],\"37o8E8\":[\"Dans la liste\"],\"39neVN\":[\"Films \",[\"0\"]],\"39y5bn\":[\"Vendredi\"],\"3Blefz\":[\"Notes\"],\"3JTlG8\":[\"Recherches récentes\"],\"3Jy8bM\":[\"Films \",[\"select\"]],\"3L9OuQ\":[\"Épisode \",[\"0\"]],\"3T/4MV\":[\"cette année\"],\"3T8ziB\":[\"Créer un compte\"],\"3hELxX\":[\"Entrez l'URL de votre serveur Sofa pour commencer\"],\"4fxLkp\":[\"Ouvrez Sonarr, allez dans <0>Settings > Import Lists</0>\"],\"4kpBqM\":[\"Dernier événement \",[\"0\"]],\"4uUjVO\":[\"Producteur\"],\"4x+A56\":[\"Rapports d'utilisation anonymes\"],\"5IShvp\":[\"Importer \",[\"totalItems\"],\" éléments\"],\"5IYJSv\":[\"Explorer les titres\"],\"5Y4mym\":[\"Importer depuis \",[\"0\"]],\"5ZzgbQ\":[\"Connecter \",[\"0\"]],\"5fEnbK\":[\"Échec de la mise à jour du paramètre de sauvegarde planifiée\"],\"5lWFkC\":[\"Se connecter\"],\"5v9C16\":[\"Connecté à \",[\"source\"]],\"623bR4\":[\"Échec du déclenchement de la tâche\"],\"6HN0yh\":[\"Ouvrez Plex, allez dans Settings > Webhooks\"],\"6TNjOJ\":[\"Échec de la mise à jour de la note\"],\"6TfUy6\":[[\"value\"],\" dernières\"],\"6V3Ea3\":[\"Copié\"],\"6YtxFj\":[\"Nom\"],\"6exX+8\":[\"Régénérer\"],\"6gRgw8\":[\"Réessayer\"],\"6lGV3K\":[\"Afficher moins\"],\"76++pR\":[\"Avertissements\"],\"77DIAu\":[\"Aller dans Dashboard > Plugins > Webhook\"],\"79m/GK\":[\"Épisodes \",[\"0\"]],\"7Bj3x9\":[\"Échoué\"],\"7D50KC\":[[\"label\"],\" déconnecté\"],\"7GfM5w\":[\"Récemment consultés\"],\"7L01XJ\":[\"Actions\"],\"7eMo+U\":[\"Accueil\"],\"7p5kLi\":[\"Tableau de bord\"],\"85eoJ1\":[\"Planning mis à jour\"],\"8B9E2D\":[\"Jour :\"],\"8YwF1J\":[\"Aller dans <0>Dashboard > Plugins > Webhook</0>\"],\"8ZsakT\":[\"Mot de passe\"],\"8tjQCz\":[\"Explorer\"],\"8vNtLy\":[\"Collez l'URL Radarr ci-dessus dans le champ List URL\"],\"8wYDMp\":[\"Vous avez déjà un compte ?\"],\"9AE3vb\":[\"Ouvrez Plex, allez dans <0>Settings > Webhooks<1/></0>\"],\"9GW0ZB\":[\"L'importation est toujours en cours en arrière-plan. Revenez plus tard.\"],\"9NyAH9\":[\"Ignoré\"],\"9Xhrps\":[\"Échec de la connexion\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Bon retour\"],\"9rG25a\":[\"URL du serveur\"],\"A+0rLe\":[\"Marqué comme terminé\"],\"A1taO8\":[\"Recherche\"],\"AOHgZp\":[\"Épisodes\"],\"AOddWK\":[\"Connecter \",[\"label\"]],\"ATfxL/\":[\"Bande-annonce\"],\"AVlZoM\":[\"Environnement\"],\"Acf6vF\":[\"Enregistrer le nom\"],\"AdoUfN\":[\"Échec de l'ajout à la liste de suivi\"],\"AeXO77\":[\"Compte\"],\"AjtYj0\":[\"Dans la liste de suivi\"],\"Avee+B\":[\"Échec de la mise à jour du nLine truncated
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Sabato\"],\"+6i0lS\":[\"Recupero della cronologia, watchlist e valutazioni...\"],\"+Cv+V9\":[\"Rimuovi dalla libreria\"],\"+JkEpu\":[\"Questa pagina è rimasta sul pavimento della sala di montaggio. Potrebbe essere stata spostata, rimossa, o non essere mai arrivata alla sceneggiatura.\"],\"+K0AvT\":[\"Disconnetti\"],\"+N0l5/\":[\"Connesso a <0>\",[\"serverHost\"],\"</0>. Tocca per cambiare.\"],\"+gLHYi\":[\"Impossibile caricare il titolo\"],\"+j1ex/\":[\"Impossibile rimuovere dalla libreria\"],\"+nF1ZO\":[\"Rimuovi foto\"],\"/+6dvC\":[\"Errori (\",[\"0\"],\")\"],\"/BBXeA\":[\"Connessione al server in corso...\"],\"/DwR+n\":[\"Creazione in corso…\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Segna tutta la stagione come vista\"],\"/gQXGv\":[\"Impossibile aggiornare lo stato\"],\"/nT6AE\":[\"Nuova password\"],\"/sHc1/\":[\"Controllo aggiornamenti\"],\"0+dyau\":[\"Impossibile aggiornare l'impostazione di conservazione\"],\"0BFJKK\":[\"Autorizzazione negata. Riprova.\"],\"0GHb20\":[\"Svuotare la cache metadati?\"],\"0IBW21\":[\"Impossibile svuotare le cache\"],\"0gH/sc\":[\"Rimuovi immagine del profilo\"],\"1+P9RR\":[\"Passa a \",[\"0\"]],\"12cc1j\":[\"In visione\"],\"12lVOl\":[\"Tracker film & TV self-hosted\"],\"1B4z0M\":[\"Filmografia\"],\"1J4Ek0\":[\"Esegui il backup automatico del database secondo una pianificazione\"],\"1JhxXW\":[\"Episodio \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Opzioni di importazione\"],\"1Qz4uG\":[\"Abilita la categoria evento \\\"Playback\\\"\"],\"1hMWR6\":[\"Crea account\"],\"1jHIjh\":[\"Segnata come vista tutta la \",[\"seasonName\"]],\"1vSYsG\":[\"Scarica backup\"],\"1wL1tj\":[\"Serie TV\"],\"2FletP\":[[\"0\",\"plural\",{\"one\":[\"#\",\" titolo\"],\"other\":[\"#\",\" titoli\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" persona\"],\"other\":[\"#\",\" persone\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" file\"],\"other\":[\"#\",\" file\"]}],\" eliminati (\",[\"freed\"],\" liberati)\"],\"2Fsd9r\":[\"Questo mese\"],\"2MPcep\":[\"Importazione completata\"],\"2Mu33Z\":[\"Gestione cache\"],\"2POOFK\":[\"Gratis\"],\"2Pt2NY\":[\"Questo rimuoverà tutti gli elementi dalla tua cronologia.\"],\"2fCpt5\":[\"Torna alla home\"],\"2pPBp6\":[\"In tendenza oggi\"],\"37o8E8\":[\"Nella watchlist\"],\"39neVN\":[\"Film \",[\"0\"]],\"39y5bn\":[\"Venerdì\"],\"3Blefz\":[\"Valutazioni\"],\"3JTlG8\":[\"Ricerche recenti\"],\"3Jy8bM\":[\"Film \",[\"select\"]],\"3L9OuQ\":[\"Episodio \",[\"0\"]],\"3T/4MV\":[\"quest'anno\"],\"3T8ziB\":[\"Crea un account\"],\"3hELxX\":[\"Inserisci l'URL del tuo server Sofa per iniziare\"],\"4fxLkp\":[\"Apri Sonarr, vai su <0>Impostazioni > Liste di importazione</0>\"],\"4kpBqM\":[\"Ultimo evento \",[\"0\"]],\"4uUjVO\":[\"Produttore\"],\"4x+A56\":[\"Segnalazione anonima dell'utilizzo\"],\"5IShvp\":[\"Importa \",[\"totalItems\"],\" elementi\"],\"5IYJSv\":[\"Esplora titoli\"],\"5Y4mym\":[\"Importa da \",[\"0\"]],\"5ZzgbQ\":[\"Connetti \",[\"0\"]],\"5fEnbK\":[\"Impossibile aggiornare l'impostazione di backup pianificato\"],\"5lWFkC\":[\"Accedi\"],\"5v9C16\":[\"Connesso a \",[\"source\"]],\"623bR4\":[\"Impossibile avviare il job\"],\"6HN0yh\":[\"Apri Plex, vai su Impostazioni > Webhook\"],\"6TNjOJ\":[\"Impossibile aggiornare la valutazione\"],\"6TfUy6\":[\"ultimi \",[\"value\"]],\"6V3Ea3\":[\"Copiato\"],\"6YtxFj\":[\"Nome\"],\"6exX+8\":[\"Rigenera\"],\"6gRgw8\":[\"Riprova\"],\"6lGV3K\":[\"Mostra meno\"],\"76++pR\":[\"Avvisi\"],\"77DIAu\":[\"Vai su Dashboard > Plugin > Webhook\"],\"79m/GK\":[\"Episodi \",[\"0\"]],\"7Bj3x9\":[\"Non riuscito\"],\"7D50KC\":[\"Disconnesso: \",[\"label\"]],\"7GfM5w\":[\"Visualizzati di recente\"],\"7L01XJ\":[\"Azioni\"],\"7eMo+U\":[\"Vai alla home\"],\"7p5kLi\":[\"Dashboard\"],\"85eoJ1\":[\"Pianificazione aggiornata\"],\"8B9E2D\":[\"Giorno:\"],\"8YwF1J\":[\"Vai su <0>Dashboard > Plugin > Webhook</0>\"],\"8ZsakT\":[\"Password\"],\"8tjQCz\":[\"Esplora\"],\"8vNtLy\":[\"Incolla l'URL di Radarr nel campo URL della lista\"],\"8wYDMp\":[\"Hai già un account?\"],\"9AE3vb\":[\"Apri Plex, vai su <0>Impostazioni > Webhook<1/></0>\"],\"9GW0ZB\":[\"L'importazione è ancora in corso in background. Ricontrolla più tardi.\"],\"9NyAH9\":[\"Ignorati\"],\"9Xhrps\":[\"Impossibile connettersi\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Bentornato\"],\"9rG25a\":[\"URL server\"],\"A+0rLe\":[\"Segnato come completato\"],\"A1taO8\":[\"Cerca\"],\"AOHgZp\":[\"Episodi\"],\"AOddWK\":[\"Connetti \",[\"label\"]],\"ATfxL/\":[\"Trailer\"],\"AVlZoM\":[\"Ambiente\"],\"Acf6vF\":[\"Salva nome\"],\"AdoUfN\":[\"Impossibile aggiungere alla watchlist\"],\"AeXO77\":[\"Account\"],\"AjtYj0\":[\"In watchlist\"],\"Avee+B\":[\"Impossibile aggiornare il nome\"],\"B2R3xD\":[\"Attiva/disattiva backup pianificati\"],\"BEVzjL\":[\"Importazione fallita\"],\"BQnS5I\":[\"Apri \",[\"source\"],\" per inserire il codice\"],\"BUnoSB\":[[\"0\"],\" \",[\"1\",\"plural\",{\"one\":[\"baLine truncated
|
||||
+817
-817
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+5kO8P\":[\"Sábado\"],\"+6i0lS\":[\"Buscando seu histórico de exibição, lista de desejos e avaliações...\"],\"+Cv+V9\":[\"Remover da biblioteca\"],\"+JkEpu\":[\"Esta página ficou no chão da sala de montagem. Pode ter sido movida, removida ou nunca ter passado do roteiro.\"],\"+K0AvT\":[\"Desconectar\"],\"+N0l5/\":[\"Conectado a <0>\",[\"serverHost\"],\"</0>. Toque para alterar.\"],\"+gLHYi\":[\"Falha ao carregar título\"],\"+j1ex/\":[\"Falha ao remover da biblioteca\"],\"+nF1ZO\":[\"Remover Foto\"],\"/+6dvC\":[\"Erros (\",[\"0\"],\")\"],\"/BBXeA\":[\"Conectando ao servidor...\"],\"/DwR+n\":[\"Criando…\"],\"/XtbPO\":[[\"0\"],\" titles\"],\"/cg+QV\":[\"Marcar todos\"],\"/gQXGv\":[\"Falha ao atualizar status\"],\"/nT6AE\":[\"Nova senha\"],\"/sHc1/\":[\"Verificação de atualização\"],\"0+dyau\":[\"Falha ao atualizar configuração de retenção\"],\"0BFJKK\":[\"Autorização negada. Tente novamente.\"],\"0GHb20\":[\"Limpar cache de metadados?\"],\"0IBW21\":[\"Falha ao limpar caches\"],\"0gH/sc\":[\"Remover foto de perfil\"],\"1+P9RR\":[\"Mudar para \",[\"0\"]],\"12cc1j\":[\"Assistindo\"],\"12lVOl\":[\"Rastreador de filmes e séries auto-hospedado\"],\"1B4z0M\":[\"Filmografia\"],\"1J4Ek0\":[\"Faça backup automático do banco de dados com agendamento\"],\"1JhxXW\":[\"Episódio \",[\"0\"],\", \",[\"episodeLabel\"]],\"1N6wNP\":[\"Opções de importação\"],\"1Qz4uG\":[\"Ative a categoria de evento \\\"Playback\\\"\"],\"1hMWR6\":[\"Criar conta\"],\"1jHIjh\":[\"Todos os episódios de \",[\"seasonName\"],\" assistidos\"],\"1vSYsG\":[\"Baixar backup\"],\"1wL1tj\":[\"Série\"],\"2FletP\":[[\"0\",\"plural\",{\"one\":[\"#\",\" título removido\"],\"other\":[\"#\",\" títulos removidos\"]}],\", \",[\"1\",\"plural\",{\"one\":[\"#\",\" pessoa\"],\"other\":[\"#\",\" pessoas\"]}],\", \",[\"2\",\"plural\",{\"one\":[\"#\",\" arquivo\"],\"other\":[\"#\",\" arquivos\"]}],\" (\",[\"freed\"],\" liberado)\"],\"2Fsd9r\":[\"Este Mês\"],\"2MPcep\":[\"Importação concluída\"],\"2Mu33Z\":[\"Gerenciamento de cache\"],\"2POOFK\":[\"Grátis\"],\"2Pt2NY\":[\"Isso removerá todos os itens do seu histórico.\"],\"2fCpt5\":[\"Voltar ao início\"],\"2pPBp6\":[\"Em alta hoje\"],\"37o8E8\":[\"Na lista\"],\"39neVN\":[\"Filmes \",[\"0\"]],\"39y5bn\":[\"Sexta-feira\"],\"3Blefz\":[\"Avaliações\"],\"3JTlG8\":[\"Pesquisas Recentes\"],\"3Jy8bM\":[\"Filmes \",[\"select\"]],\"3L9OuQ\":[\"Episódio \",[\"0\"]],\"3T/4MV\":[\"este ano\"],\"3T8ziB\":[\"Criar uma conta\"],\"3hELxX\":[\"Insira a URL do seu servidor Sofa para começar\"],\"4fxLkp\":[\"Abra o Sonarr, vá para <0>Settings > Import Lists</0>\"],\"4kpBqM\":[\"Último evento \",[\"0\"]],\"4uUjVO\":[\"Produtor\"],\"4x+A56\":[\"Relatório de uso anônimo\"],\"5IShvp\":[\"Importar \",[\"totalItems\"],\" itens\"],\"5IYJSv\":[\"Explorar títulos\"],\"5Y4mym\":[\"Importar de \",[\"0\"]],\"5ZzgbQ\":[\"Conectar \",[\"0\"]],\"5fEnbK\":[\"Falha ao atualizar configuração de backup agendado\"],\"5lWFkC\":[\"Entrar\"],\"5v9C16\":[\"Conectado a \",[\"source\"]],\"623bR4\":[\"Falha ao acionar tarefa\"],\"6HN0yh\":[\"Abra o Plex, vá para Settings > Webhooks\"],\"6TNjOJ\":[\"Falha ao atualizar avaliação\"],\"6TfUy6\":[\"últimos \",[\"value\"]],\"6V3Ea3\":[\"Copiado\"],\"6YtxFj\":[\"Nome\"],\"6exX+8\":[\"Regenerar\"],\"6gRgw8\":[\"Tentar novamente\"],\"6lGV3K\":[\"Mostrar menos\"],\"76++pR\":[\"Avisos\"],\"77DIAu\":[\"Acesse Dashboard > Plugins > Webhook\"],\"79m/GK\":[\"Episódios \",[\"0\"]],\"7Bj3x9\":[\"Falhou\"],\"7D50KC\":[[\"label\"],\" desconectado\"],\"7GfM5w\":[\"Vistos Recentemente\"],\"7L01XJ\":[\"Ações\"],\"7eMo+U\":[\"Ir para Início\"],\"7p5kLi\":[\"Painel\"],\"85eoJ1\":[\"Agendamento atualizado\"],\"8B9E2D\":[\"Dia:\"],\"8YwF1J\":[\"Acesse <0>Dashboard > Plugins > Webhook</0>\"],\"8ZsakT\":[\"Senha\"],\"8tjQCz\":[\"Explorar\"],\"8vNtLy\":[\"Cole a URL do Radarr acima no campo URL da Lista\"],\"8wYDMp\":[\"Já tem uma conta?\"],\"9AE3vb\":[\"Abra o Plex, vá para <0>Settings > Webhooks<1/></0>\"],\"9GW0ZB\":[\"A importação ainda está em andamento em segundo plano. Verifique mais tarde.\"],\"9NyAH9\":[\"Ignorado\"],\"9Xhrps\":[\"Falha ao conectar\"],\"9ZLGbA\":[\"backups.\"],\"9eF5oV\":[\"Bem-vindo de volta\"],\"9rG25a\":[\"URL do Servidor\"],\"A+0rLe\":[\"Marcado como concluído\"],\"A1taO8\":[\"Pesquisar\"],\"AOHgZp\":[\"Episódios\"],\"AOddWK\":[\"Conectar \",[\"label\"]],\"ATfxL/\":[\"Trailer\"],\"AVlZoM\":[\"Ambiente\"],\"Acf6vF\":[\"Salvar nome\"],\"AdoUfN\":[\"Falha ao adicionar à lista de desejos\"],\"AeXO77\":[\"Conta\"],\"AjtYj0\":[\"Na Lista de Desejos\"],\"Avee+B\":[\"Falha ao atualizar nome\"],\"B2R3xD\":[\"Ativar/desativar backups agendados\"],\"BEVzjL\":[\"Importação falhou\"],\"BQnS5I\":[\"Abrir \",[\"source\"],\" para inserir o código\"],\"BUnoSB\":[[\"0\"],\" \",[\"1\",\"plural\",{\"one\":[\"backup armazenado\"],\"other\":[\"backups armazenados\"]}]],\"BpttUILine truncated
|
||||
@@ -2,7 +2,7 @@ import { i18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
import { messages } from "./po/en";
|
||||
import { messages } from "./po/en.po";
|
||||
|
||||
i18n.load("en", messages);
|
||||
i18n.activate("en");
|
||||
|
||||
Reference in new issue
Block a user