diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 729d3d0..221f718 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,11 +1,11 @@ { - // Dev Container Configuration for Secret Santa + // Dev Container Configuration for Zava Gift Exchange // SECURITY NOTE: This configuration mounts the Docker socket (/var/run/docker.sock) // which gives the container full root access to the host Docker daemon. // This is standard for Docker-outside-of-Docker workflows and appropriate for // trusted development environments (local dev, GitHub Codespaces). // Do NOT use this configuration in untrusted or production environments. - "name": "Secret Santa Development", + "name": "Zava Gift Exchange Development", "image": "mcr.microsoft.com/devcontainers/typescript-node:20", "features": { "ghcr.io/devcontainers/features/azure-cli:1": {}, @@ -65,7 +65,7 @@ } }, "postCreateCommand": "bash .devcontainer/setup.sh", - "postStartCommand": "echo '🎁 Secret Santa development environment ready!\\n\\nℹ️ If you see extension errors:\\n - Wait for VS Code extensions to finish installing\\n - Reload the window if needed (Ctrl+Shift+P > Reload Window)\\n\\n🚀 Press F5 to start debugging!'", + "postStartCommand": "echo '🎁 Zava Gift Exchange development environment ready!\\n\\nℹ️ If you see extension errors:\\n - Wait for VS Code extensions to finish installing\\n - Reload the window if needed (Ctrl+Shift+P > Reload Window)\\n\\n🚀 Press F5 to start debugging!'", "remoteUser": "root", "containerEnv": { "NODE_ENV": "development", diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7ebae6f..ca6cfac 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug Report -about: Report a bug or issue with Secret Santa +about: Report a bug or issue with Zava Gift Exchange title: '[BUG] ' labels: bug assignees: '' diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index a298875..f9fc59a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- name: Feature Request -about: Suggest a new feature or enhancement for Secret Santa +about: Suggest a new feature or enhancement for Zava Gift Exchange title: '[FEATURE] ' labels: enhancement assignees: '' diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 872003f..1492216 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,18 +1,18 @@ -# Copilot Instructions for Secret Santa +# Copilot Instructions for Zava Gift Exchange ## Project Overview -Multilingual Secret Santa gift exchange app built with React + Vite frontend and Azure Functions API, deployed on Azure Static Web Apps with Cosmos DB. +Multilingual Zava Gift Exchange exchange app built with React + Vite frontend and Azure Functions API, deployed on Azure Static Web Apps with Cosmos DB. ## Environment Strategy -- **PR**: Ephemeral resource group per PR (`secretsanta-pr-{number}`) with Free tier resources -- **QA**: Isolated resource group (`secretsanta-qa`) with Free tier for cost-effective testing -- **Production**: Production resource group (`secretsanta`) with production-ready tiers +- **PR**: Ephemeral resource group per PR (`zavaexchangegift-pr-{number}`) with Free tier resources +- **QA**: Isolated resource group (`zavaexchangegift-qa`) with Free tier for cost-effective testing +- **Production**: Production resource group (`zavaexchangegift`) with production-ready tiers | Environment | Resource Group | Static Web App | Cosmos DB | Email | |-------------|---------------|----------------|-----------|-------| -| PR | `secretsanta-pr-{n}` | Free | Serverless | ❌ | -| QA | `secretsanta-qa` | Free | Free Tier | ✅ | -| Production | `secretsanta` | Standard | Serverless | ✅ | +| PR | `zavaexchangegift-pr-{n}` | Free | Serverless | ❌ | +| QA | `zavaexchangegift-qa` | Free | Free Tier | ✅ | +| Production | `zavaexchangegift` | Standard | Serverless | ✅ | Each environment has its own isolated resources. All environments auto-configure: Cosmos DB, App Insights, ACS (email for QA/Prod). @@ -20,7 +20,7 @@ Note: Staging environments are ENABLED in Static Web Apps to support GitHub Acti ## Project Structure ``` -secretsanta/ +zavaexchangegift/ ├── src/ # React frontend │ ├── components/ # UI components │ │ └── ui/ # shadcn/ui components @@ -34,7 +34,7 @@ secretsanta/ ├── infra/ # Bicep infrastructure │ ├── main.bicep # Main template │ ├── parameters.dev.json # PR environments -│ ├── parameters.qa.json # QA environment (isolated in secretsanta-qa RG) +│ ├── parameters.qa.json # QA environment (isolated in zavaexchangegift-qa RG) │ └── parameters.prod.json # Production ├── docs/ # Documentation │ ├── getting-started.md # Local development guide @@ -159,24 +159,24 @@ Only ONE secret is needed: ### Resource Group Naming All resource groups are **created automatically** by the CI/CD workflow: -- **PR Deployments**: `secretsanta-pr-{PR_NUMBER}` (created automatically, deleted when PR closes) -- **QA Environment**: `secretsanta-qa` (created automatically on first push to main) -- **Production**: `secretsanta` (created automatically on first push to main) +- **PR Deployments**: `zavaexchangegift-pr-{PR_NUMBER}` (created automatically, deleted when PR closes) +- **QA Environment**: `zavaexchangegift-qa` (created automatically on first push to main) +- **Production**: `zavaexchangegift` (created automatically on first push to main) ### Manual Deployment (Optional) If you need to deploy manually outside the CI/CD workflow: ```bash # Deploy QA environment (creates RG if needed) -az group create --name secretsanta-qa --location centralus +az group create --name zavaexchangegift-qa --location centralus az deployment group create \ - --resource-group secretsanta-qa \ + --resource-group zavaexchangegift-qa \ --template-file infra/main.bicep \ --parameters infra/parameters.qa.json deploymentId=qa-stable # Deploy Production environment (creates RG if needed) -az group create --name secretsanta --location centralus +az group create --name zavaexchangegift --location centralus az deployment group create \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --template-file infra/main.bicep \ --parameters infra/parameters.prod.json deploymentId=prod-stable ``` diff --git a/.github/dependabot.json b/.github/dependabot.json index 37ab68b..f163bb8 100644 --- a/.github/dependabot.json +++ b/.github/dependabot.json @@ -24,5 +24,5 @@ "build/" ], "contact": "github@dsanchezcr.com", - "policy": "https://github.com/dsanchezcr/secretsanta/blob/main/SECURITY.md" + "policy": "https://github.com/dsanchezcr/zavaexchangegift/blob/main/SECURITY.md" } diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index ce8f5d9..7c1e452 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -1,9 +1,9 @@ # ============================================================================ -# Secret Santa - CI/CD Pipeline +# Zava Gift Exchange - CI/CD Pipeline # ============================================================================ # Environment Strategy: # - PR: Ephemeral resource group per PR (auto-created and deleted) -# - QA: Isolated resource group (`secretsanta-qa`) (deployed on main) +# - QA: Isolated resource group (`zavaexchangegift-qa`) (deployed on main) # - Prod: Production environment (deployed on main after QA E2E tests pass) # # Note: Staging environments are ENABLED for GitHub Actions deployments. @@ -35,9 +35,9 @@ on: env: NODE_VERSION: '20' AZURE_LOCATION: 'centralus' - PROJECT_NAME: 'secretsanta' - AZURE_RESOURCE_GROUP: 'secretsanta' - AZURE_QA_RESOURCE_GROUP: 'secretsanta-qa' + PROJECT_NAME: 'zavaexchangegift' + AZURE_RESOURCE_GROUP: 'zavaexchangegift' + AZURE_QA_RESOURCE_GROUP: 'zavaexchangegift-qa' permissions: id-token: write diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 823b065..a214a3e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to Secret Santa +# Contributing to Zava Gift Exchange Thank you for your interest in contributing! 🎁 @@ -16,8 +16,8 @@ See [README.md](../README.md) for detailed setup. ```bash # 1. Clone your fork -git clone https://github.com/YOUR_USERNAME/secretsanta.git -cd secretsanta +git clone https://github.com/YOUR_USERNAME/zavaexchangegift.git +cd zavaexchangegift # 2. Start Docker containers (runs Cosmos DB emulator) docker-compose up -d diff --git a/README.md b/README.md index cd3e07c..e2e38a1 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# 🎁 Secret Santa +# 🎁 Zava Gift Exchange -Secret Santa gift exchange web application built with React + Vite, Azure Functions, and Azure Cosmos DB. +Zava Gift Exchange gift exchange web application built with React + Vite, Azure Functions, and Azure Cosmos DB. -[![CI/CD](https://github.com/dsanchezcr/secretsanta/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/dsanchezcr/secretsanta/actions/workflows/ci-cd.yml) -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dsanchezcr/secretsanta?quickstart=1) +[![CI/CD](https://github.com/dsanchezcr/zavaexchangegift/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/dsanchezcr/zavaexchangegift/actions/workflows/ci-cd.yml) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dsanchezcr/zavaexchangegift?quickstart=1) ## ✨ Features @@ -24,9 +24,9 @@ Secret Santa gift exchange web application built with React + Vite, Azure Functi | Environment | Resource Group | Static Web App | Cosmos DB | Lifecycle | |-------------|----------------|----------------|-----------|------------| -| **PR Preview** | `secretsanta-pr-{number}` | Free | Serverless | Created on PR open, deleted on close | -| **QA** | `secretsanta-qa` | Free | Free Tier | Persistent (isolated from prod) | -| **Production** | `secretsanta` | Standard | Serverless | Persistent (unlimited scaling) | +| **PR Preview** | `zavaexchangegift-pr-{number}` | Free | Serverless | Created on PR open, deleted on close | +| **QA** | `zavaexchangegift-qa` | Free | Free Tier | Persistent (isolated from prod) | +| **Production** | `zavaexchangegift` | Standard | Serverless | Persistent (unlimited scaling) | Each environment has its **own Static Web App** and **own Cosmos DB** (QA is completely isolated). All environments are **automatically configured** with: @@ -80,7 +80,7 @@ All prerequisites work the same way on **Windows, macOS, and Linux**. **GitHub Codespaces** - No installation required, develop entirely in the browser: -1. Click: [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dsanchezcr/secretsanta?quickstart=1) +1. Click: [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dsanchezcr/zavaexchangegift?quickstart=1) 2. Wait ~60 seconds for container to build 3. Press **F5** in VS Code (browser-based) 4. Click notification to open frontend in browser @@ -95,8 +95,8 @@ Run everything on your machine: ```bash # Clone repository -git clone https://github.com/dsanchezcr/secretsanta.git -cd secretsanta +git clone https://github.com/dsanchezcr/zavaexchangegift.git +cd zavaexchangegift # Start full-stack (Docker + API + Frontend) npm install @@ -119,7 +119,7 @@ Open: http://localhost:5173 2. **Configure GitHub OIDC Authentication**: ```bash # Create service principal - az ad sp create-for-rbac --name "secretsanta-github" \ + az ad sp create-for-rbac --name "zavaexchangegift-github" \ --role contributor \ --scopes /subscriptions/{subscription-id} --json-auth ``` @@ -129,7 +129,7 @@ Open: http://localhost:5173 4. **Create Production Resource Group**: ```bash - az group create --name secretsanta --location centralus + az group create --name zavaexchangegift --location centralus ``` 5. **Open a PR** - Full infrastructure is created automatically! @@ -142,8 +142,8 @@ The fastest way to get running is with VS Code's integrated debugger: ```bash # 1. Clone repository -git clone https://github.com/dsanchezcr/secretsanta.git -cd secretsanta +git clone https://github.com/dsanchezcr/zavaexchangegift.git +cd zavaexchangegift # 2. Start Docker containers (all platforms) docker-compose up -d diff --git a/SECURITY.md b/SECURITY.md index e73743f..12d19d6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy -Thank you for helping keep Secret Santa secure! +Thank you for helping keep Zava Gift Exchange secure! ## Reporting Security Issues @@ -8,7 +8,7 @@ If you believe you have found a security vulnerability, please report it private **Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** -Instead, please send an email to **github@dsanchezcr.com**. +Instead, please send an email. Include as much of the information listed below as you can to help us better understand and resolve the issue: @@ -81,9 +81,4 @@ We follow responsible disclosure practices: 3. Security update released 4. Vulnerability publicly disclosed after update is available -If you prefer a different disclosure timeline, please let us know in your initial report. - -## Questions? - -For security questions that aren't vulnerabilities, feel free to open a discussion or email github@dsanchezcr.com. - +If you prefer a different disclosure timeline, please let us know in your initial report. \ No newline at end of file diff --git a/api/local.settings.json.example b/api/local.settings.json.example index ffc17ab..ffa4e9d 100644 --- a/api/local.settings.json.example +++ b/api/local.settings.json.example @@ -5,7 +5,7 @@ "FUNCTIONS_WORKER_RUNTIME": "node", "COSMOS_ENDPOINT": "https://localhost:8081", "COSMOS_KEY": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", - "COSMOS_DATABASE_NAME": "secretsanta", + "COSMOS_DATABASE_NAME": "zavaexchangegift", "COSMOS_CONTAINER_NAME": "games", "APPLICATIONINSIGHTS_CONNECTION_STRING": "", "ACS_CONNECTION_STRING": "", diff --git a/api/package-lock.json b/api/package-lock.json index f806a9b..5e6ac18 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -1,11 +1,11 @@ { - "name": "secretsanta-api", + "name": "zavaexchangegift-api", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "secretsanta-api", + "name": "zavaexchangegift-api", "version": "1.0.0", "dependencies": { "@azure/communication-email": "^1.1.0", @@ -342,7 +342,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2409,7 +2408,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3337,7 +3335,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -5038,7 +5035,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/api/package.json b/api/package.json index cb4c1b3..593d239 100644 --- a/api/package.json +++ b/api/package.json @@ -1,7 +1,7 @@ { - "name": "secretsanta-api", + "name": "zavaexchangegift-api", "version": "1.0.0", - "description": "Azure Functions API for Secret Santa", + "description": "Azure Functions API for Zava Gift Exchange", "main": "dist/index.js", "scripts": { "setup": "node ../scripts/setup-local-settings.js", diff --git a/api/src/__tests__/createGame.test.ts b/api/src/__tests__/createGame.test.ts index 664d053..942d82f 100644 --- a/api/src/__tests__/createGame.test.ts +++ b/api/src/__tests__/createGame.test.ts @@ -64,10 +64,10 @@ describe('createGame function', () => { it('should create a game successfully with valid data', async () => { const requestBody = { - name: 'Christmas 2025', + name: 'Party 2025', amount: '20', currency: 'USD', - date: '2025-12-25', + date: '2026-12-25', location: 'Office', allowReassignment: true, generalNotes: 'Bring wrapped gifts', @@ -86,7 +86,7 @@ describe('createGame function', () => { const game = response.jsonBody as Game expect(game.code).toBe('123456') - expect(game.name).toBe('Christmas 2025') + expect(game.name).toBe('Party 2025') expect(game.participants).toHaveLength(3) expect(game.assignments).toHaveLength(3) }) diff --git a/api/src/__tests__/types.test.ts b/api/src/__tests__/types.test.ts index 7690980..8c9a6bf 100644 --- a/api/src/__tests__/types.test.ts +++ b/api/src/__tests__/types.test.ts @@ -67,7 +67,7 @@ describe('types', () => { const game: Game = { id: 'game-1', code: '123456', - name: 'Christmas Exchange', + name: 'Gift Exchange', amount: '20', currency: 'USD', date: '2025-12-25', @@ -84,7 +84,7 @@ describe('types', () => { expect(game.id).toBe('game-1') expect(game.code).toBe('123456') - expect(game.name).toBe('Christmas Exchange') + expect(game.name).toBe('Gift Exchange') expect(game.currency).toBe('USD') expect(game.allowReassignment).toBe(true) expect(game.reassignmentRequests).toHaveLength(0) diff --git a/api/src/functions/health.ts b/api/src/functions/health.ts index 934999f..95b4b72 100644 --- a/api/src/functions/health.ts +++ b/api/src/functions/health.ts @@ -64,7 +64,7 @@ async function checkDatabaseHealth(): Promise { status: 'ok', latencyMs: Date.now() - start, details: { - database: process.env.COSMOS_DATABASE_NAME || 'secretsanta', + database: process.env.COSMOS_DATABASE_NAME || 'zavaexchangegift', container: process.env.COSMOS_CONTAINER_NAME || 'games' } } diff --git a/api/src/index.ts b/api/src/index.ts index 2f2c09a..03e22c2 100644 --- a/api/src/index.ts +++ b/api/src/index.ts @@ -1,5 +1,5 @@ /** - * Secret Santa API - Azure Functions Entry Point + * Zava Gift Exchange API - Azure Functions Entry Point * This file imports all function handlers to register them with the runtime */ diff --git a/api/src/shared/cosmosdb.ts b/api/src/shared/cosmosdb.ts index 7961cc5..c458771 100644 --- a/api/src/shared/cosmosdb.ts +++ b/api/src/shared/cosmosdb.ts @@ -90,7 +90,7 @@ export async function initializeStorage(): Promise { cosmosClient = new CosmosClient(clientOptions) - const databaseId = process.env.COSMOS_DATABASE_NAME || 'secretsanta' + const databaseId = process.env.COSMOS_DATABASE_NAME || 'zavaexchangegift' const containerId = process.env.COSMOS_CONTAINER_NAME || 'games' // Create database and container if they don't exist diff --git a/api/src/shared/email-service.ts b/api/src/shared/email-service.ts index da43549..313fee6 100644 --- a/api/src/shared/email-service.ts +++ b/api/src/shared/email-service.ts @@ -177,9 +177,9 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su shareCodeDesc: string; footer: string; }> = { es: { - subject: `🎁 Tu juego de Secret Santa "${game.name}" ha sido creado`, + subject: `🎁 Tu juego de Intercambio de Regalos Zava "${game.name}" ha sido creado`, greeting: '¡Hola!', - gameCreated: 'Tu juego de Secret Santa ha sido creado exitosamente.', + gameCreated: 'Tu juego de Intercambio de Regalos Zava ha sido creado exitosamente.', gameDetails: 'Detalles del juego:', name: 'Nombre del evento', code: 'Código del juego', @@ -194,12 +194,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Token del organizador', organizerTokenDesc: 'Usa este token junto con el código del juego para administrar el juego (¡no lo compartas!):', shareCodeDesc: 'Comparte este código con todos los participantes para que se unan al juego:', - footer: 'Gracias por usar Secret Santa. ¡Que disfruten el intercambio de regalos!' + footer: 'Gracias por usar Intercambio de Regalos Zava. ¡Que disfruten el intercambio de regalos!' }, en: { - subject: `🎁 Your Secret Santa game "${game.name}" has been created`, + subject: `🎁 Your Zava Gift Exchange game "${game.name}" has been created`, greeting: 'Hello!', - gameCreated: 'Your Secret Santa game has been created successfully.', + gameCreated: 'Your Zava Gift Exchange game has been created successfully.', gameDetails: 'Game details:', name: 'Event name', code: 'Game code', @@ -214,12 +214,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Organizer token', organizerTokenDesc: 'Use this token along with the game code to manage the game (don\'t share it!):', shareCodeDesc: 'Share this code with all participants so they can join the game:', - footer: 'Thank you for using Secret Santa. Enjoy the gift exchange!' + footer: 'Thank you for using Zava Gift Exchange. Enjoy the gift exchange!' }, pt: { - subject: `🎁 Seu jogo de Secret Santa "${game.name}" foi criado`, + subject: `🎁 Seu jogo de Troca de Presentes Zava "${game.name}" foi criado`, greeting: 'Olá!', - gameCreated: 'Seu jogo de Secret Santa foi criado com sucesso.', + gameCreated: 'Seu jogo de Troca de Presentes Zava foi criado com sucesso.', gameDetails: 'Detalhes do jogo:', name: 'Nome do evento', code: 'Código do jogo', @@ -234,12 +234,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Token do organizador', organizerTokenDesc: 'Use este token junto com o código do jogo para gerenciá-lo (não compartilhe!):', shareCodeDesc: 'Compartilhe este código com todos os participantes para que entrem no jogo:', - footer: 'Obrigado por usar o Secret Santa. Aproveite a troca de presentes!' + footer: 'Obrigado por usar a Troca de Presentes Zava. Aproveite a troca de presentes!' }, fr: { - subject: `🎁 Votre jeu Secret Santa "${game.name}" a été créé`, + subject: `🎁 Votre jeu Échange de Cadeaux Zava "${game.name}" a été créé`, greeting: 'Bonjour !', - gameCreated: 'Votre jeu Secret Santa a été créé avec succès.', + gameCreated: 'Votre jeu Échange de Cadeaux Zava a été créé avec succès.', gameDetails: 'Détails du jeu :', name: 'Nom de l\'événement', code: 'Code du jeu', @@ -254,12 +254,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Token organisateur', organizerTokenDesc: 'Utilisez ce token avec le code du jeu pour le gérer (ne le partagez pas !) :', shareCodeDesc: 'Partagez ce code avec tous les participants pour qu\'ils rejoignent le jeu :', - footer: 'Merci d\'utiliser Secret Santa. Profitez de l\'échange de cadeaux !' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava. Profitez de l\'échange de cadeaux !' }, it: { - subject: `🎁 Il tuo gioco Secret Santa "${game.name}" è stato creato`, + subject: `🎁 Il tuo gioco Scambio Regali Zava "${game.name}" è stato creato`, greeting: 'Ciao!', - gameCreated: 'Il tuo gioco Secret Santa è stato creato con successo.', + gameCreated: 'Il tuo gioco Scambio Regali Zava è stato creato con successo.', gameDetails: 'Dettagli del gioco:', name: 'Nome dell\'evento', code: 'Codice del gioco', @@ -274,12 +274,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Token dell\'organizzatore', organizerTokenDesc: 'Usa questo token insieme al codice del gioco per gestirlo (non condividerlo!):', shareCodeDesc: 'Condividi questo codice con tutti i partecipanti per farli unire al gioco:', - footer: 'Grazie per aver usato Secret Santa. Buon scambio di regali!' + footer: 'Grazie per aver usato Échange de Cadeaux Zava. Buon scambio di regali!' }, ja: { - subject: `🎁 シークレットサンタゲーム「${game.name}」が作成されました`, + subject: `🎁 Zava ギフト交換ゲーム「${game.name}」が作成されました`, greeting: 'こんにちは!', - gameCreated: 'シークレットサンタゲームが正常に作成されました。', + gameCreated: 'Zava ギフト交換ゲームが正常に作成されました。', gameDetails: 'ゲームの詳細:', name: 'イベント名', code: 'ゲームコード', @@ -294,12 +294,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: '主催者トークン', organizerTokenDesc: 'このトークンとゲームコードを使用してゲームを管理してください(共有しないでください):', shareCodeDesc: 'このコードを全参加者と共有してゲームに参加してもらいましょう:', - footer: 'シークレットサンタをご利用いただきありがとうございます。プレゼント交換をお楽しみください!' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。プレゼント交換をお楽しみください!' }, zh: { - subject: `🎁 您的神秘圣诞老人游戏"${game.name}"已创建`, + subject: `🎁 您的Zava礼物交换游戏"${game.name}"已创建`, greeting: '您好!', - gameCreated: '您的神秘圣诞老人游戏已成功创建。', + gameCreated: '您的Zava礼物交换游戏已成功创建。', gameDetails: '游戏详情:', name: '活动名称', code: '游戏代码', @@ -314,12 +314,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: '组织者令牌', organizerTokenDesc: '使用此令牌和游戏代码管理游戏(请勿分享):', shareCodeDesc: '与所有参与者分享此代码以加入游戏:', - footer: '感谢使用神秘圣诞老人。祝您礼物交换愉快!' + footer: '感谢使用Zava礼物交换。祝您礼物交换愉快!' }, de: { - subject: `🎁 Dein Wichteln-Spiel "${game.name}" wurde erstellt`, + subject: `🎁 Dein Zava Geschenkaustausch "${game.name}" wurde erstellt`, greeting: 'Hallo!', - gameCreated: 'Dein Wichteln-Spiel wurde erfolgreich erstellt.', + gameCreated: 'Dein Zava Geschenkaustausch wurde erfolgreich erstellt.', gameDetails: 'Spieldetails:', name: 'Veranstaltungsname', code: 'Spielcode', @@ -334,12 +334,12 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Organisator-Token', organizerTokenDesc: 'Verwende dieses Token zusammen mit dem Spielcode um das Spiel zu verwalten (nicht teilen!):', shareCodeDesc: 'Teile diesen Code mit allen Teilnehmern, damit sie dem Spiel beitreten können:', - footer: 'Danke, dass du Wichteln verwendest. Viel Spaß beim Geschenkeaustausch!' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest. Viel Spaß beim Geschenkeaustausch!' }, nl: { - subject: `🎁 Je Secret Santa spel "${game.name}" is aangemaakt`, + subject: `🎁 Je Zava Cadeauwisseling spel "${game.name}" is aangemaakt`, greeting: 'Hallo!', - gameCreated: 'Je Secret Santa spel is succesvol aangemaakt.', + gameCreated: 'Je Zava Cadeauwisseling spel is succesvol aangemaakt.', gameDetails: 'Speldetails:', name: 'Evenementnaam', code: 'Spelcode', @@ -354,7 +354,7 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su organizerToken: 'Organisator-token', organizerTokenDesc: 'Gebruik deze token samen met de spelcode om het spel te beheren (deel deze niet!):', shareCodeDesc: 'Deel deze code met alle deelnemers zodat ze kunnen deelnemen aan het spel:', - footer: 'Bedankt voor het gebruik van Secret Santa. Veel plezier met het cadeautjes ruilen!' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava. Veel plezier met het cadeautjes ruilen!' } } @@ -371,7 +371,7 @@ export function generateOrganizerEmailContent(data: GameEmailTemplateData): { su
-

🎁 Secret Santa

+

🎁 Zava Gift Exchange

@@ -471,9 +471,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa gameCodeDesc: string; footer: string; keepSecret: string; }> = { es: { - subject: `🎁 Tu asignación de Secret Santa para "${game.name}"`, + subject: `🎁 Tu asignación del Intercambio de Regalos Zava para "${game.name}"`, greeting: `¡Hola ${participant.name}!`, - intro: 'Has sido incluido en un juego de Secret Santa.', + intro: 'Has sido incluido en un juego de Intercambio de Regalos Zava.', yourAssignment: '¡Tu asignación está lista!', youGiftTo: 'Le regalas a:', theirWish: 'Su deseo de regalo:', @@ -495,9 +495,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 Recuerda: ¡mantén en secreto a quién le regalas!' }, en: { - subject: `🎁 Your Secret Santa assignment for "${game.name}"`, + subject: `🎁 Your Zava Gift Exchange assignment for "${game.name}"`, greeting: `Hello ${participant.name}!`, - intro: 'You have been included in a Secret Santa game.', + intro: 'You have been included in a Zava Gift Exchange game.', yourAssignment: 'Your assignment is ready!', youGiftTo: 'You\'re gifting to:', theirWish: 'Their gift wish:', @@ -519,9 +519,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 Remember: keep your assignment a secret!' }, pt: { - subject: `🎁 Sua atribuição do Secret Santa para "${game.name}"`, + subject: `🎁 Sua atribuição da Troca de Presentes Zava para "${game.name}"`, greeting: `Olá ${participant.name}!`, - intro: 'Você foi incluído em um jogo de Secret Santa.', + intro: 'Você foi incluído em um jogo de Troca de Presentes Zava.', yourAssignment: 'Sua atribuição está pronta!', youGiftTo: 'Você vai presentear:', theirWish: 'Desejo de presente:', @@ -543,9 +543,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 Lembre-se: mantenha em segredo para quem você vai dar o presente!' }, fr: { - subject: `🎁 Votre attribution Secret Santa pour "${game.name}"`, + subject: `🎁 Votre attribution Échange de Cadeaux Zava pour "${game.name}"`, greeting: `Bonjour ${participant.name} !`, - intro: 'Vous avez été inclus dans un jeu Secret Santa.', + intro: 'Vous avez été inclus dans un jeu Échange de Cadeaux Zava.', yourAssignment: 'Votre attribution est prête !', youGiftTo: 'Vous offrez à :', theirWish: 'Son souhait de cadeau :', @@ -567,9 +567,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 N\'oubliez pas : gardez secrète votre attribution !' }, it: { - subject: `🎁 La tua assegnazione Secret Santa per "${game.name}"`, + subject: `🎁 La tua assegnazione Scambio Regali Zava per "${game.name}"`, greeting: `Ciao ${participant.name}!`, - intro: 'Sei stato incluso in un gioco di Secret Santa.', + intro: 'Sei stato incluso in un gioco di Échange de Cadeaux Zava.', yourAssignment: 'La tua assegnazione è pronta!', youGiftTo: 'Farai un regalo a:', theirWish: 'Il suo desiderio regalo:', @@ -591,9 +591,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 Ricorda: mantieni segreta la tua assegnazione!' }, ja: { - subject: `🎁 「${game.name}」のシークレットサンタの割り当て`, + subject: `🎁 「${game.name}」のZava ギフト交換の割り当て`, greeting: `こんにちは、${participant.name}さん!`, - intro: 'シークレットサンタゲームに参加しています。', + intro: 'Zava ギフト交換ゲームに参加しています。', yourAssignment: '割り当てが決まりました!', youGiftTo: 'プレゼントを贈る相手:', theirWish: '相手のウィッシュリスト:', @@ -615,9 +615,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 忘れずに:誰にプレゼントを贈るかは秘密にしてください!' }, zh: { - subject: `🎁 您的"${game.name}"神秘圣诞老人分配`, + subject: `🎁 您的"${game.name}"Zava礼物交换分配`, greeting: `您好,${participant.name}!`, - intro: '您已被加入神秘圣诞老人游戏。', + intro: '您已被加入Zava礼物交换游戏。', yourAssignment: '您的分配已准备好!', youGiftTo: '您要送礼物给:', theirWish: '对方的礼物愿望:', @@ -639,9 +639,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 记住:请对您的分配对象保密!' }, de: { - subject: `🎁 Deine Wichtel-Zuweisung für "${game.name}"`, + subject: `🎁 Deine Zava Geschenkaustausch-Zuweisung für "${game.name}"`, greeting: `Hallo ${participant.name}!`, - intro: 'Du wurdest in ein Wichteln-Spiel aufgenommen.', + intro: 'Du wurdest in ein Zava Geschenkaustausch aufgenommen.', yourAssignment: 'Deine Zuweisung steht fest!', youGiftTo: 'Du beschenkst:', theirWish: 'Geschenkwunsch:', @@ -663,9 +663,9 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa keepSecret: '🤫 Denk daran: Halte geheim, wen du beschenkst!' }, nl: { - subject: `🎁 Jouw Secret Santa toewijzing voor "${game.name}"`, + subject: `🎁 Jouw Zava Cadeauwisseling toewijzing voor "${game.name}"`, greeting: `Hallo ${participant.name}!`, - intro: 'Je bent toegevoegd aan een Secret Santa spel.', + intro: 'Je bent toegevoegd aan een Zava Cadeauwisseling spel.', yourAssignment: 'Je toewijzing is klaar!', youGiftTo: 'Je geeft een cadeau aan:', theirWish: 'Hun cadeauwens:', @@ -701,7 +701,7 @@ export function generateParticipantEmailContent(data: ParticipantEmailTemplateDa
-

🎁 Secret Santa

+

🎁 Zava Gift Exchange

@@ -860,7 +860,7 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma es: { subject: `🔑 Recuperación de enlace - "${game.name}"`, greeting: '¡Hola!', - recoveryRequested: 'Se ha solicitado la recuperación del enlace de organizador para tu juego de Secret Santa.', + recoveryRequested: 'Se ha solicitado la recuperación del enlace de organizador para Tu juego de Intercambio de Regalos Zava.', recoveryDesc: 'Si solicitaste esta recuperación, usa el enlace o token a continuación para acceder a tu panel de organizador.', organizerLink: 'Tu enlace de organizador', organizerLinkDesc: 'Usa este enlace para acceder al panel de organizador:', @@ -868,13 +868,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Usa este token para acceder:', securityNote: 'Si no solicitaste esta recuperación, puedes ignorar este correo. Tu enlace de acceso sigue siendo válido.', notYou: '¿No fuiste tú?', - footer: 'Gracias por usar Secret Santa.', + footer: 'Gracias por usar Intercambio de Regalos Zava.', headerTitle: 'Recuperación de Enlace' }, en: { subject: `🔑 Link Recovery - "${game.name}"`, greeting: 'Hello!', - recoveryRequested: 'A link recovery has been requested for your Secret Santa game organizer access.', + recoveryRequested: 'A link recovery has been requested for Your Zava Gift Exchange game organizer access.', recoveryDesc: 'If you requested this recovery, use the link or token below to access your organizer panel.', organizerLink: 'Your organizer link', organizerLinkDesc: 'Use this link to access the organizer panel:', @@ -882,13 +882,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Use this token to access:', securityNote: 'If you didn\'t request this recovery, you can ignore this email. Your access link remains valid.', notYou: 'Wasn\'t you?', - footer: 'Thank you for using Secret Santa.', + footer: 'Thank you for using Zava Gift Exchange.', headerTitle: 'Link Recovery' }, pt: { subject: `🔑 Recuperação de link - "${game.name}"`, greeting: 'Olá!', - recoveryRequested: 'Foi solicitada a recuperação do link de organizador do seu jogo de Secret Santa.', + recoveryRequested: 'Foi solicitada a recuperação do link de organizador do Seu jogo de Troca de Presentes Zava.', recoveryDesc: 'Se você solicitou esta recuperação, use o link ou token abaixo para acessar seu painel de organizador.', organizerLink: 'Seu link de organizador', organizerLinkDesc: 'Use este link para acessar o painel de organizador:', @@ -896,13 +896,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Use este token para acessar:', securityNote: 'Se você não solicitou esta recuperação, pode ignorar este email. Seu link de acesso continua válido.', notYou: 'Não foi você?', - footer: 'Obrigado por usar o Secret Santa.', + footer: 'Obrigado por usar a Troca de Presentes Zava.', headerTitle: 'Recuperação de Link' }, fr: { subject: `🔑 Récupération de lien - "${game.name}"`, greeting: 'Bonjour!', - recoveryRequested: 'Une récupération de lien a été demandée pour l\'accès organisateur de votre jeu Secret Santa.', + recoveryRequested: 'Une récupération de lien a été demandée pour l\'accès organisateur de Votre jeu Échange de Cadeaux Zava.', recoveryDesc: 'Si vous avez demandé cette récupération, utilisez le lien ou le jeton ci-dessous pour accéder à votre panneau d\'organisateur.', organizerLink: 'Votre lien d\'organisateur', organizerLinkDesc: 'Utilisez ce lien pour accéder au panneau d\'organisateur:', @@ -910,13 +910,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Utilisez ce jeton pour accéder:', securityNote: 'Si vous n\'avez pas demandé cette récupération, vous pouvez ignorer cet email. Votre lien d\'accès reste valide.', notYou: 'Ce n\'était pas vous?', - footer: 'Merci d\'utiliser Secret Santa.', + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.', headerTitle: 'Récupération de Lien' }, it: { subject: `🔑 Recupero link - "${game.name}"`, greeting: 'Ciao!', - recoveryRequested: 'È stato richiesto il recupero del link organizzatore per il tuo gioco Secret Santa.', + recoveryRequested: 'È stato richiesto il recupero del link organizzatore per il tuo gioco Échange de Cadeaux Zava.', recoveryDesc: 'Se hai richiesto questo recupero, usa il link o il token qui sotto per accedere al tuo pannello organizzatore.', organizerLink: 'Il tuo link organizzatore', organizerLinkDesc: 'Usa questo link per accedere al pannello organizzatore:', @@ -924,13 +924,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Usa questo token per accedere:', securityNote: 'Se non hai richiesto questo recupero, puoi ignorare questa email. Il tuo link di accesso rimane valido.', notYou: 'Non sei stato tu?', - footer: 'Grazie per usare Secret Santa.', + footer: 'Grazie per usare Échange de Cadeaux Zava.', headerTitle: 'Recupero Link' }, ja: { subject: `🔑 リンク復旧 - "${game.name}"`, greeting: 'こんにちは!', - recoveryRequested: 'Secret Santaゲームの主催者リンクの復旧がリクエストされました。', + recoveryRequested: 'Zava Gift Exchangeゲームの主催者リンクの復旧がリクエストされました。', recoveryDesc: 'この復旧をリクエストした場合は、以下のリンクまたはトークンを使用して主催者パネルにアクセスしてください。', organizerLink: '主催者リンク', organizerLinkDesc: 'このリンクを使用して主催者パネルにアクセスしてください:', @@ -938,13 +938,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'このトークンを使用してアクセスしてください:', securityNote: 'この復旧をリクエストしていない場合は、このメールを無視してください。アクセスリンクは引き続き有効です。', notYou: '心当たりがない場合', - footer: 'Secret Santaをご利用いただきありがとうございます。', + footer: 'Zava Gift Exchangeをご利用いただきありがとうございます。', headerTitle: 'リンク復旧' }, zh: { subject: `🔑 链接恢复 - "${game.name}"`, greeting: '您好!', - recoveryRequested: '已请求恢复您的Secret Santa游戏组织者链接。', + recoveryRequested: '已请求恢复您的Zava礼物交换游戏组织者链接。', recoveryDesc: '如果您请求了此恢复,请使用下面的链接或令牌访问您的组织者面板。', organizerLink: '您的组织者链接', organizerLinkDesc: '使用此链接访问组织者面板:', @@ -952,13 +952,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: '使用此令牌访问:', securityNote: '如果您没有请求此恢复,可以忽略此邮件。您的访问链接仍然有效。', notYou: '不是您操作的?', - footer: '感谢您使用Secret Santa。', + footer: '感谢您使用Zava礼物交换。', headerTitle: '链接恢复' }, de: { subject: `🔑 Link-Wiederherstellung - "${game.name}"`, greeting: 'Hallo!', - recoveryRequested: 'Eine Link-Wiederherstellung wurde für Ihren Secret Santa Organisator-Zugang angefordert.', + recoveryRequested: 'Eine Link-Wiederherstellung wurde für Ihren Zava Cadeauwisseling organisator-Zugang angefordert.', recoveryDesc: 'Wenn Sie diese Wiederherstellung angefordert haben, verwenden Sie den Link oder Token unten, um auf Ihr Organisator-Panel zuzugreifen.', organizerLink: 'Ihr Organisator-Link', organizerLinkDesc: 'Verwenden Sie diesen Link, um auf das Organisator-Panel zuzugreifen:', @@ -966,13 +966,13 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Verwenden Sie diesen Token für den Zugang:', securityNote: 'Wenn Sie diese Wiederherstellung nicht angefordert haben, können Sie diese E-Mail ignorieren. Ihr Zugangslink bleibt gültig.', notYou: 'Waren Sie das nicht?', - footer: 'Vielen Dank für die Nutzung von Secret Santa.', + footer: 'Vielen Dank für die Nutzung von Échange de Cadeaux Zava.', headerTitle: 'Link-Wiederherstellung' }, nl: { subject: `🔑 Link Herstel - "${game.name}"`, greeting: 'Hallo!', - recoveryRequested: 'Er is een linkherstel aangevraagd voor uw Secret Santa organisatortoegang.', + recoveryRequested: 'Er is een linkherstel aangevraagd voor uw Zava Gift Exchange organisatortoegang.', recoveryDesc: 'Als u dit herstel heeft aangevraagd, gebruik dan de link of token hieronder om toegang te krijgen tot uw organisatorpaneel.', organizerLink: 'Uw organisatorlink', organizerLinkDesc: 'Gebruik deze link om toegang te krijgen tot het organisatorpaneel:', @@ -980,7 +980,7 @@ export function generateOrganizerRecoveryEmailContent(data: OrganizerRecoveryEma organizerTokenDesc: 'Gebruik deze token voor toegang:', securityNote: 'Als u dit herstel niet heeft aangevraagd, kunt u deze e-mail negeren. Uw toegangslink blijft geldig.', notYou: 'Was u dit niet?', - footer: 'Bedankt voor het gebruik van Secret Santa.', + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.', headerTitle: 'Link Herstel' } } @@ -1100,7 +1100,7 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover es: { subject: `🔑 Recuperación de enlace - "${game.name}"`, greeting: `¡Hola ${participant.name}!`, - recoveryRequested: 'Se ha solicitado la recuperación de tu enlace de participante para el juego de Secret Santa.', + recoveryRequested: 'Se ha solicitado la recuperación de tu enlace de participante para el juego de Intercambio de Regalos Zava.', recoveryDesc: 'Si solicitaste esta recuperación, usa el enlace o token a continuación para ver tu asignación.', participantLink: 'Tu enlace de participante', participantLinkDesc: 'Usa este enlace para ver tu asignación:', @@ -1108,14 +1108,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Usa este token para acceder:', securityNote: 'Si no solicitaste esta recuperación, puedes ignorar este correo. Tu enlace de acceso sigue siendo válido.', notYou: '¿No fuiste tú?', - footer: 'Gracias por usar Secret Santa.', + footer: 'Gracias por usar Intercambio de Regalos Zava.', headerTitle: 'Recuperación de Enlace', noTokenMessage: 'Este juego no está protegido. Usa el código del juego para acceder.' }, en: { subject: `🔑 Link Recovery - "${game.name}"`, greeting: `Hello ${participant.name}!`, - recoveryRequested: 'A link recovery has been requested for your Secret Santa game participation.', + recoveryRequested: 'A link recovery has been requested for Your Zava Gift Exchange game participation.', recoveryDesc: 'If you requested this recovery, use the link or token below to view your assignment.', participantLink: 'Your participant link', participantLinkDesc: 'Use this link to view your assignment:', @@ -1123,14 +1123,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Use this token to access:', securityNote: 'If you didn\'t request this recovery, you can ignore this email. Your access link remains valid.', notYou: 'Wasn\'t you?', - footer: 'Thank you for using Secret Santa.', + footer: 'Thank you for using Zava Gift Exchange.', headerTitle: 'Link Recovery', noTokenMessage: 'This game is not protected. Use the game code to access.' }, pt: { subject: `🔑 Recuperação de link - "${game.name}"`, greeting: `Olá ${participant.name}!`, - recoveryRequested: 'Foi solicitada a recuperação do seu link de participante do jogo de Secret Santa.', + recoveryRequested: 'Foi solicitada a recuperação do seu link de participante do jogo de Troca de Presentes Zava.', recoveryDesc: 'Se você solicitou esta recuperação, use o link ou token abaixo para ver sua atribuição.', participantLink: 'Seu link de participante', participantLinkDesc: 'Use este link para ver sua atribuição:', @@ -1138,14 +1138,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Use este token para acessar:', securityNote: 'Se você não solicitou esta recuperação, pode ignorar este email. Seu link de acesso continua válido.', notYou: 'Não foi você?', - footer: 'Obrigado por usar o Secret Santa.', + footer: 'Obrigado por usar a Troca de Presentes Zava.', headerTitle: 'Recuperação de Link', noTokenMessage: 'Este jogo não é protegido. Use o código do jogo para acessar.' }, fr: { subject: `🔑 Récupération de lien - "${game.name}"`, greeting: `Bonjour ${participant.name}!`, - recoveryRequested: 'Une récupération de lien a été demandée pour votre participation au Secret Santa.', + recoveryRequested: 'Une récupération de lien a été demandée pour votre participation au Échange de Cadeaux Zava.', recoveryDesc: 'Si vous avez demandé cette récupération, utilisez le lien ou le jeton ci-dessous pour voir votre attribution.', participantLink: 'Votre lien de participant', participantLinkDesc: 'Utilisez ce lien pour voir votre attribution:', @@ -1153,14 +1153,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Utilisez ce jeton pour accéder:', securityNote: 'Si vous n\'avez pas demandé cette récupération, vous pouvez ignorer cet email. Votre lien d\'accès reste valide.', notYou: 'Ce n\'était pas vous?', - footer: 'Merci d\'utiliser Secret Santa.', + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.', headerTitle: 'Récupération de Lien', noTokenMessage: 'Ce jeu n\'est pas protégé. Utilisez le code du jeu pour accéder.' }, it: { subject: `🔑 Recupero link - "${game.name}"`, greeting: `Ciao ${participant.name}!`, - recoveryRequested: 'È stato richiesto il recupero del tuo link partecipante per il gioco Secret Santa.', + recoveryRequested: 'È stato richiesto il recupero del tuo link partecipante per il gioco Échange de Cadeaux Zava.', recoveryDesc: 'Se hai richiesto questo recupero, usa il link o il token qui sotto per vedere la tua assegnazione.', participantLink: 'Il tuo link partecipante', participantLinkDesc: 'Usa questo link per vedere la tua assegnazione:', @@ -1168,14 +1168,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Usa questo token per accedere:', securityNote: 'Se non hai richiesto questo recupero, puoi ignorare questa email. Il tuo link di accesso rimane valido.', notYou: 'Non sei stato tu?', - footer: 'Grazie per usare Secret Santa.', + footer: 'Grazie per usare Échange de Cadeaux Zava.', headerTitle: 'Recupero Link', noTokenMessage: 'Questo gioco non è protetto. Usa il codice del gioco per accedere.' }, ja: { subject: `🔑 リンク復旧 - "${game.name}"`, greeting: `こんにちは ${participant.name}さん!`, - recoveryRequested: 'Secret Santaゲームの参加者リンクの復旧がリクエストされました。', + recoveryRequested: 'Zava Gift Exchangeゲームの参加者リンクの復旧がリクエストされました。', recoveryDesc: 'この復旧をリクエストした場合は、以下のリンクまたはトークンを使用して割り当てを確認してください。', participantLink: '参加者リンク', participantLinkDesc: 'このリンクを使用して割り当てを確認してください:', @@ -1183,14 +1183,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'このトークンを使用してアクセスしてください:', securityNote: 'この復旧をリクエストしていない場合は、このメールを無視してください。アクセスリンクは引き続き有効です。', notYou: '心当たりがない場合', - footer: 'Secret Santaをご利用いただきありがとうございます。', + footer: 'Zava Gift Exchangeをご利用いただきありがとうございます。', headerTitle: 'リンク復旧', noTokenMessage: 'このゲームは保護されていません。ゲームコードを使用してアクセスしてください。' }, zh: { subject: `🔑 链接恢复 - "${game.name}"`, greeting: `您好 ${participant.name}!`, - recoveryRequested: '已请求恢复您的Secret Santa游戏参与者链接。', + recoveryRequested: '已请求恢复您的Zava礼物交换游戏参与者链接。', recoveryDesc: '如果您请求了此恢复,请使用下面的链接或令牌查看您的分配。', participantLink: '您的参与者链接', participantLinkDesc: '使用此链接查看您的分配:', @@ -1198,14 +1198,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: '使用此令牌访问:', securityNote: '如果您没有请求此恢复,可以忽略此邮件。您的访问链接仍然有效。', notYou: '不是您操作的?', - footer: '感谢您使用Secret Santa。', + footer: '感谢您使用Zava礼物交换。', headerTitle: '链接恢复', noTokenMessage: '此游戏未受保护。使用游戏代码访问。' }, de: { subject: `🔑 Link-Wiederherstellung - "${game.name}"`, greeting: `Hallo ${participant.name}!`, - recoveryRequested: 'Eine Link-Wiederherstellung wurde für Ihre Secret Santa Teilnahme angefordert.', + recoveryRequested: 'Eine Link-Wiederherstellung wurde für Ihre Zava Gift Exchange Teilnahme angefordert.', recoveryDesc: 'Wenn Sie diese Wiederherstellung angefordert haben, verwenden Sie den Link oder Token unten, um Ihre Zuweisung anzuzeigen.', participantLink: 'Ihr Teilnehmer-Link', participantLinkDesc: 'Verwenden Sie diesen Link, um Ihre Zuweisung anzuzeigen:', @@ -1213,14 +1213,14 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Verwenden Sie diesen Token für den Zugang:', securityNote: 'Wenn Sie diese Wiederherstellung nicht angefordert haben, können Sie diese E-Mail ignorieren. Ihr Zugangslink bleibt gültig.', notYou: 'Waren Sie das nicht?', - footer: 'Vielen Dank für die Nutzung von Secret Santa.', + footer: 'Vielen Dank für die Nutzung von Échange de Cadeaux Zava.', headerTitle: 'Link-Wiederherstellung', noTokenMessage: 'Dieses Spiel ist nicht geschützt. Verwenden Sie den Spielcode für den Zugang.' }, nl: { subject: `🔑 Link Herstel - "${game.name}"`, greeting: `Hallo ${participant.name}!`, - recoveryRequested: 'Er is een linkherstel aangevraagd voor uw Secret Santa deelname.', + recoveryRequested: 'Er is een linkherstel aangevraagd voor uw Zava Gift Exchange deelname.', recoveryDesc: 'Als u dit herstel heeft aangevraagd, gebruik dan de link of token hieronder om uw toewijzing te bekijken.', participantLink: 'Uw deelnemerslink', participantLinkDesc: 'Gebruik deze link om uw toewijzing te bekijken:', @@ -1228,7 +1228,7 @@ export function generateParticipantRecoveryEmailContent(data: ParticipantRecover participantTokenDesc: 'Gebruik deze token voor toegang:', securityNote: 'Als u dit herstel niet heeft aangevraagd, kunt u deze e-mail negeren. Uw toegangslink blijft geldig.', notYou: 'Was u dit niet?', - footer: 'Bedankt voor het gebruik van Secret Santa.', + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.', headerTitle: 'Link Herstel', noTokenMessage: 'Dit spel is niet beveiligd. Gebruik de spelcode voor toegang.' } @@ -1401,7 +1401,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Confirmado', viewPanel: 'Ver panel del organizador', totalConfirmed: 'Total confirmados', - footer: 'Gracias por usar Secret Santa.', + footer: 'Gracias por usar Intercambio de Regalos Zava.', confirmationReceived: 'Confirmación Recibida' }, en: { @@ -1412,7 +1412,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Confirmed', viewPanel: 'View organizer panel', totalConfirmed: 'Total confirmed', - footer: 'Thank you for using Secret Santa.', + footer: 'Thank you for using Zava Gift Exchange.', confirmationReceived: 'Confirmation Received' }, pt: { @@ -1423,7 +1423,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Confirmado', viewPanel: 'Ver painel do organizador', totalConfirmed: 'Total confirmados', - footer: 'Obrigado por usar o Secret Santa.', + footer: 'Obrigado por usar a Troca de Presentes Zava.', confirmationReceived: 'Confirmação Recebida' }, fr: { @@ -1434,7 +1434,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Confirmé', viewPanel: 'Voir le panneau organisateur', totalConfirmed: 'Total confirmés', - footer: 'Merci d\'utiliser Secret Santa.', + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.', confirmationReceived: 'Confirmation Reçue' }, it: { @@ -1445,7 +1445,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Confermato', viewPanel: 'Vedi pannello organizzatore', totalConfirmed: 'Totale confermati', - footer: 'Grazie per aver usato Secret Santa.', + footer: 'Grazie per aver usato Échange de Cadeaux Zava.', confirmationReceived: 'Conferma Ricevuta' }, ja: { @@ -1456,7 +1456,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: '確認済み', viewPanel: '主催者パネルを見る', totalConfirmed: '確認済み合計', - footer: 'シークレットサンタをご利用いただきありがとうございます。', + footer: 'Zava ギフト交換をご利用いただきありがとうございます。', confirmationReceived: '確認を受信' }, zh: { @@ -1467,7 +1467,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: '已确认', viewPanel: '查看组织者面板', totalConfirmed: '已确认总数', - footer: '感谢使用神秘圣诞老人。', + footer: '感谢使用Zava礼物交换。', confirmationReceived: '已收到确认' }, de: { @@ -1478,7 +1478,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Bestätigt', viewPanel: 'Organisator-Panel anzeigen', totalConfirmed: 'Gesamt bestätigt', - footer: 'Danke, dass du Wichteln verwendest.', + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.', confirmationReceived: 'Bestätigung erhalten' }, nl: { @@ -1489,7 +1489,7 @@ export function generateParticipantConfirmedEmailContent(data: ParticipantConfir confirmedAt: 'Bevestigd', viewPanel: 'Organisator-paneel bekijken', totalConfirmed: 'Totaal bevestigd', - footer: 'Bedankt voor het gebruik van Secret Santa.', + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.', confirmationReceived: 'Bevestiging Ontvangen' } } @@ -1579,7 +1579,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Solicitudes pendientes', action: 'Puedes aprobar o rechazar esta solicitud desde el panel del organizador.', viewPanel: 'Ver panel del organizador', - footer: 'Gracias por usar Secret Santa.', + footer: 'Gracias por usar Intercambio de Regalos Zava.', newRequest: 'Nueva Solicitud' }, en: { @@ -1590,7 +1590,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Pending requests', action: 'You can approve or reject this request from the organizer panel.', viewPanel: 'View organizer panel', - footer: 'Thank you for using Secret Santa.', + footer: 'Thank you for using Zava Gift Exchange.', newRequest: 'New Request' }, pt: { @@ -1601,7 +1601,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Solicitações pendentes', action: 'Você pode aprovar ou rejeitar esta solicitação no painel do organizador.', viewPanel: 'Ver painel do organizador', - footer: 'Obrigado por usar o Secret Santa.', + footer: 'Obrigado por usar a Troca de Presentes Zava.', newRequest: 'Nova Solicitação' }, fr: { @@ -1612,7 +1612,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Demandes en attente', action: 'Vous pouvez approuver ou rejeter cette demande depuis le panneau organisateur.', viewPanel: 'Voir le panneau organisateur', - footer: 'Merci d\'utiliser Secret Santa.', + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.', newRequest: 'Nouvelle Demande' }, it: { @@ -1623,7 +1623,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Richieste in sospeso', action: 'Puoi approvare o rifiutare questa richiesta dal pannello organizzatore.', viewPanel: 'Vedi pannello organizzatore', - footer: 'Grazie per aver usato Secret Santa.', + footer: 'Grazie per aver usato Échange de Cadeaux Zava.', newRequest: 'Nuova Richiesta' }, ja: { @@ -1634,7 +1634,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: '保留中のリクエスト', action: '主催者パネルからこのリクエストを承認または拒否できます。', viewPanel: '主催者パネルを見る', - footer: 'シークレットサンタをご利用いただきありがとうございます。', + footer: 'Zava ギフト交換をご利用いただきありがとうございます。', newRequest: '新しいリクエスト' }, zh: { @@ -1645,7 +1645,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: '待处理请求', action: '您可以从组织者面板批准或拒绝此请求。', viewPanel: '查看组织者面板', - footer: '感谢使用神秘圣诞老人。', + footer: '感谢使用Zava礼物交换。', newRequest: '新请求' }, de: { @@ -1656,7 +1656,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Ausstehende Anfragen', action: 'Du kannst diese Anfrage im Organisator-Panel genehmigen oder ablehnen.', viewPanel: 'Organisator-Panel anzeigen', - footer: 'Danke, dass du Wichteln verwendest.', + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.', newRequest: 'Neue Anfrage' }, nl: { @@ -1667,7 +1667,7 @@ export function generateReassignmentRequestedEmailContent(data: ReassignmentRequ pendingRequests: 'Openstaande verzoeken', action: 'Je kunt dit verzoek goedkeuren of afwijzen via het organisator-paneel.', viewPanel: 'Organisator-paneel bekijken', - footer: 'Bedankt voor het gebruik van Secret Santa.', + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.', newRequest: 'Nieuw Verzoek' } } @@ -1761,7 +1761,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Tu nueva asignación', youGiftTo: 'Ahora le regalas a:', contactOrganizer: 'Si tienes preguntas, contacta al organizador del evento.', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subjectApproved: `✅ Your reassignment request was approved - "${game.name}"`, @@ -1772,7 +1772,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Your new assignment', youGiftTo: 'You\'re now gifting to:', contactOrganizer: 'If you have questions, contact the event organizer.', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subjectApproved: `✅ Sua solicitação de reatribuição foi aprovada - "${game.name}"`, @@ -1783,7 +1783,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Sua nova atribuição', youGiftTo: 'Agora você presenteia:', contactOrganizer: 'Se tiver dúvidas, entre em contato com o organizador do evento.', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subjectApproved: `✅ Votre demande de réattribution a été approuvée - "${game.name}"`, @@ -1794,7 +1794,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Votre nouvelle attribution', youGiftTo: 'Vous offrez maintenant à :', contactOrganizer: 'Si vous avez des questions, contactez l\'organisateur de l\'événement.', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subjectApproved: `✅ La tua richiesta di riassegnazione è stata approvata - "${game.name}"`, @@ -1805,7 +1805,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'La tua nuova assegnazione', youGiftTo: 'Ora regali a:', contactOrganizer: 'Se hai domande, contatta l\'organizzatore dell\'evento.', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subjectApproved: `✅ 再割り当てリクエストが承認されました - 「${game.name}」`, @@ -1816,7 +1816,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: '新しい割り当て', youGiftTo: 'プレゼントを贈る相手:', contactOrganizer: 'ご質問がある場合は、イベント主催者にお問い合わせください。', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subjectApproved: `✅ 您的重新分配请求已获批准 - "${game.name}"`, @@ -1827,7 +1827,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: '您的新分配', youGiftTo: '您现在要送礼物给:', contactOrganizer: '如有疑问,请联系活动组织者。', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subjectApproved: `✅ Deine Neuzuweisungsanfrage wurde genehmigt - "${game.name}"`, @@ -1838,7 +1838,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Deine neue Zuweisung', youGiftTo: 'Du beschenkst jetzt:', contactOrganizer: 'Bei Fragen wende dich an den Veranstalter.', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subjectApproved: `✅ Je hertoewijzingsverzoek is goedgekeurd - "${game.name}"`, @@ -1849,7 +1849,7 @@ export function generateReassignmentResultEmailContent(data: ReassignmentResultE newAssignment: 'Je nieuwe toewijzing', youGiftTo: 'Je geeft nu een cadeau aan:', contactOrganizer: 'Als je vragen hebt, neem contact op met de organisator van het evenement.', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -1946,7 +1946,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Su nuevo deseo', theirDesiredGift: 'Regalo que desea', headerTitle: 'Actualización de Deseo', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `💡 ${receiver.name} updated their wish list - "${game.name}"`, @@ -1955,7 +1955,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Their new wish', theirDesiredGift: 'Desired gift', headerTitle: 'Wish Updated', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `💡 ${receiver.name} atualizou sua lista de desejos - "${game.name}"`, @@ -1964,7 +1964,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Seu novo desejo', theirDesiredGift: 'Presente desejado', headerTitle: 'Desejo Atualizado', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `💡 ${receiver.name} a mis à jour sa liste de souhaits - "${game.name}"`, @@ -1973,7 +1973,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Son nouveau souhait', theirDesiredGift: 'Cadeau souhaité', headerTitle: 'Souhait Mis à Jour', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `💡 ${receiver.name} ha aggiornato la sua lista dei desideri - "${game.name}"`, @@ -1982,7 +1982,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Il suo nuovo desiderio', theirDesiredGift: 'Regalo desiderato', headerTitle: 'Desiderio Aggiornato', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `💡 ${receiver.name}さんがウィッシュリストを更新しました - 「${game.name}」`, @@ -1991,7 +1991,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: '新しいウィッシュ', theirDesiredGift: '希望のプレゼント', headerTitle: 'ウィッシュ更新', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `💡 ${receiver.name}更新了愿望清单 - "${game.name}"`, @@ -2000,7 +2000,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: '新的愿望', theirDesiredGift: '想要的礼物', headerTitle: '愿望已更新', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `💡 ${receiver.name} hat die Wunschliste aktualisiert - "${game.name}"`, @@ -2009,7 +2009,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Neuer Wunsch', theirDesiredGift: 'Gewünschtes Geschenk', headerTitle: 'Wunsch Aktualisiert', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `💡 ${receiver.name} heeft de verlanglijst bijgewerkt - "${game.name}"`, @@ -2018,7 +2018,7 @@ export function generateWishUpdatedEmailContent(data: WishUpdatedEmailData): { s theirWish: 'Nieuwe wens', theirDesiredGift: 'Gewenst cadeau', headerTitle: 'Wens Bijgewerkt', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -2105,7 +2105,7 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange es: { subject: `📝 Los detalles del evento han cambiado - "${game.name}"`, greeting: recipientName ? `¡Hola ${recipientName}!` : '¡Hola!', - changed: 'Los detalles del evento de Secret Santa han sido actualizados.', + changed: 'Los detalles del evento de Intercambio de Regalos Zava han sido actualizados.', whatChanged: '¿Qué cambió?', date: 'Fecha', time: 'Hora', @@ -2115,12 +2115,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Ahora', currentDetails: 'Detalles actuales del evento', viewEvent: 'Ver evento', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `📝 Event details have changed - "${game.name}"`, greeting: recipientName ? `Hello ${recipientName}!` : 'Hello!', - changed: 'The Secret Santa event details have been updated.', + changed: 'The Zava Gift Exchange event details have been updated.', whatChanged: 'What changed?', date: 'Date', time: 'Time', @@ -2130,12 +2130,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Now', currentDetails: 'Current event details', viewEvent: 'View event', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `📝 Os detalhes do evento mudaram - "${game.name}"`, greeting: recipientName ? `Olá ${recipientName}!` : 'Olá!', - changed: 'Os detalhes do evento Secret Santa foram atualizados.', + changed: 'Os detalhes do evento Troca de Presentes Zava foram atualizados.', whatChanged: 'O que mudou?', date: 'Data', time: 'Hora', @@ -2145,12 +2145,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Agora', currentDetails: 'Detalhes atuais do evento', viewEvent: 'Ver evento', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `📝 Les détails de l'événement ont changé - "${game.name}"`, greeting: recipientName ? `Bonjour ${recipientName} !` : 'Bonjour !', - changed: 'Les détails de l\'événement Secret Santa ont été mis à jour.', + changed: 'Les détails de l\'événement Échange de Cadeaux Zava ont été mis à jour.', whatChanged: 'Qu\'est-ce qui a changé ?', date: 'Date', time: 'Heure', @@ -2160,12 +2160,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Maintenant', currentDetails: 'Détails actuels de l\'événement', viewEvent: 'Voir l\'événement', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `📝 I dettagli dell'evento sono cambiati - "${game.name}"`, greeting: recipientName ? `Ciao ${recipientName}!` : 'Ciao!', - changed: 'I dettagli dell\'evento Secret Santa sono stati aggiornati.', + changed: 'I dettagli dell\'evento Scambio Regali Zava sono stati aggiornati.', whatChanged: 'Cosa è cambiato?', date: 'Data', time: 'Ora', @@ -2175,12 +2175,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Adesso', currentDetails: 'Dettagli attuali dell\'evento', viewEvent: 'Visualizza evento', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `📝 イベントの詳細が変更されました - 「${game.name}」`, greeting: recipientName ? `こんにちは、${recipientName}さん!` : 'こんにちは!', - changed: 'シークレットサンタイベントの詳細が更新されました。', + changed: 'Zava ギフト交換イベントの詳細が更新されました。', whatChanged: '変更内容', date: '日付', time: '時間', @@ -2190,12 +2190,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: '変更後', currentDetails: '現在のイベント詳細', viewEvent: 'イベントを見る', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `📝 活动详情已更改 - "${game.name}"`, greeting: recipientName ? `您好,${recipientName}!` : '您好!', - changed: '神秘圣诞老人活动详情已更新。', + changed: 'Zava礼物交换活动详情已更新。', whatChanged: '有什么变化?', date: '日期', time: '时间', @@ -2205,12 +2205,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: '现在', currentDetails: '当前活动详情', viewEvent: '查看活动', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `📝 Die Veranstaltungsdetails haben sich geändert - "${game.name}"`, greeting: recipientName ? `Hallo ${recipientName}!` : 'Hallo!', - changed: 'Die Details der Wichtel-Veranstaltung wurden aktualisiert.', + changed: 'Die Details der Zava Geschenkaustausch-Veranstaltung wurden aktualisiert.', whatChanged: 'Was hat sich geändert?', date: 'Datum', time: 'Uhrzeit', @@ -2220,12 +2220,12 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Jetzt', currentDetails: 'Aktuelle Veranstaltungsdetails', viewEvent: 'Veranstaltung anzeigen', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `📝 Evenementdetails zijn gewijzigd - "${game.name}"`, greeting: recipientName ? `Hallo ${recipientName}!` : 'Hallo!', - changed: 'De details van het Secret Santa-evenement zijn bijgewerkt.', + changed: 'De details van het Zava Cadeauwisseling-evenement zijn bijgewerkt.', whatChanged: 'Wat is er veranderd?', date: 'Datum', time: 'Tijd', @@ -2235,7 +2235,7 @@ export function generateEventDetailsChangedEmailContent(data: EventDetailsChange to: 'Nu', currentDetails: 'Huidige evenementdetails', viewEvent: 'Bekijk evenement', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -2368,9 +2368,9 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN headerTitle: string; footer: string; }> = { es: { - subject: `🔔 Recordatorio: Secret Santa "${game.name}"`, + subject: `🔔 Recordatorio: Intercambio de Regalos Zava "${game.name}"`, greeting: `¡Hola ${recipientName}!`, - reminder: 'Este es un recordatorio sobre el evento de Secret Santa.', + reminder: 'Este es un recordatorio sobre el evento de Intercambio de Regalos Zava.', customMessageLabel: 'Mensaje del organizador', eventDetails: 'Detalles del evento', name: 'Evento', @@ -2382,12 +2382,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Por favor confirma tu participación si aún no lo has hecho.', viewEvent: 'Ver evento', headerTitle: 'Recordatorio', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { - subject: `🔔 Reminder: Secret Santa "${game.name}"`, + subject: `🔔 Reminder: Zava Gift Exchange "${game.name}"`, greeting: `Hello ${recipientName}!`, - reminder: 'This is a reminder about the Secret Santa event.', + reminder: 'This is a reminder about the Zava Gift Exchange event.', customMessageLabel: 'Message from organizer', eventDetails: 'Event details', name: 'Event', @@ -2399,12 +2399,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Please confirm your participation if you haven\'t already.', viewEvent: 'View event', headerTitle: 'Reminder', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { - subject: `🔔 Lembrete: Secret Santa "${game.name}"`, + subject: `🔔 Lembrete: Troca de Presentes Zava "${game.name}"`, greeting: `Olá ${recipientName}!`, - reminder: 'Este é um lembrete sobre o evento Secret Santa.', + reminder: 'Este é um lembrete sobre o evento Échange de Cadeaux Zava.', customMessageLabel: 'Mensagem do organizador', eventDetails: 'Detalhes do evento', name: 'Evento', @@ -2416,12 +2416,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Por favor, confirme sua participação se ainda não o fez.', viewEvent: 'Ver evento', headerTitle: 'Lembrete', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { - subject: `🔔 Rappel : Secret Santa "${game.name}"`, + subject: `🔔 Rappel : Échange de Cadeaux Zava "${game.name}"`, greeting: `Bonjour ${recipientName} !`, - reminder: 'Ceci est un rappel concernant l\'événement Secret Santa.', + reminder: 'Ceci est un rappel concernant l\'événement Échange de Cadeaux Zava.', customMessageLabel: 'Message de l\'organisateur', eventDetails: 'Détails de l\'événement', name: 'Événement', @@ -2433,12 +2433,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Veuillez confirmer votre participation si vous ne l\'avez pas encore fait.', viewEvent: 'Voir l\'événement', headerTitle: 'Rappel', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { - subject: `🔔 Promemoria: Secret Santa "${game.name}"`, + subject: `🔔 Promemoria: Scambio Regali Zava "${game.name}"`, greeting: `Ciao ${recipientName}!`, - reminder: 'Questo è un promemoria sull\'evento Secret Santa.', + reminder: 'Questo è un promemoria sull\'evento Échange de Cadeaux Zava.', customMessageLabel: 'Messaggio dall\'organizzatore', eventDetails: 'Dettagli dell\'evento', name: 'Evento', @@ -2450,12 +2450,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Per favore conferma la tua partecipazione se non l\'hai ancora fatto.', viewEvent: 'Visualizza evento', headerTitle: 'Promemoria', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { - subject: `🔔 リマインダー:シークレットサンタ「${game.name}」`, + subject: `🔔 リマインダー:Zava ギフト交換「${game.name}」`, greeting: `こんにちは、${recipientName}さん!`, - reminder: 'シークレットサンタイベントのリマインダーです。', + reminder: 'Zava ギフト交換イベントのリマインダーです。', customMessageLabel: '主催者からのメッセージ', eventDetails: 'イベント詳細', name: 'イベント', @@ -2467,12 +2467,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'まだの場合は、参加を確認してください。', viewEvent: 'イベントを見る', headerTitle: 'リマインダー', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { - subject: `🔔 提醒:神秘圣诞老人"${game.name}"`, + subject: `🔔 提醒:Zava礼物交换"${game.name}"`, greeting: `您好,${recipientName}!`, - reminder: '这是关于神秘圣诞老人活动的提醒。', + reminder: '这是关于Zava礼物交换活动的提醒。', customMessageLabel: '组织者的消息', eventDetails: '活动详情', name: '活动', @@ -2484,12 +2484,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: '如果您还没有确认,请确认您的参与。', viewEvent: '查看活动', headerTitle: '提醒', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { - subject: `🔔 Erinnerung: Wichteln "${game.name}"`, + subject: `🔔 Erinnerung: Zava Geschenkaustausch "${game.name}"`, greeting: `Hallo ${recipientName}!`, - reminder: 'Dies ist eine Erinnerung an die Wichtel-Veranstaltung.', + reminder: 'Dies ist eine Erinnerung an die Zava Geschenkaustausch-Veranstaltung.', customMessageLabel: 'Nachricht vom Organisator', eventDetails: 'Veranstaltungsdetails', name: 'Veranstaltung', @@ -2501,12 +2501,12 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Bitte bestätige deine Teilnahme, falls du es noch nicht getan hast.', viewEvent: 'Veranstaltung anzeigen', headerTitle: 'Erinnerung', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { - subject: `🔔 Herinnering: Secret Santa "${game.name}"`, + subject: `🔔 Herinnering: Zava Cadeauwisseling "${game.name}"`, greeting: `Hallo ${recipientName}!`, - reminder: 'Dit is een herinnering over het Secret Santa-evenement.', + reminder: 'Dit is een herinnering over het Zava Cadeauwisseling-evenement.', customMessageLabel: 'Bericht van de organisator', eventDetails: 'Evenementdetails', name: 'Evenement', @@ -2518,7 +2518,7 @@ export function generateReminderEmailContent(data: ReminderEmailData, recipientN confirmReminder: 'Bevestig je deelname als je dat nog niet hebt gedaan.', viewEvent: 'Bekijk evenement', headerTitle: 'Herinnering', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -2643,9 +2643,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit action: string; viewEvent: string; footer: string; }> = { es: { - subject: `🎁 Has sido invitado al Secret Santa "${game.name}"`, + subject: `🎁 Has sido invitado al Intercambio de Regalos Zava "${game.name}"`, greeting: `¡Hola ${participant.name}!`, - invited: 'Has sido agregado a un juego de Secret Santa.', + invited: 'Has sido agregado a un juego de Intercambio de Regalos Zava.', eventDetails: 'Detalles del evento', name: 'Evento', date: 'Fecha', @@ -2658,9 +2658,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: '¡Que disfrutes el intercambio de regalos!' }, en: { - subject: `🎁 You've been invited to Secret Santa "${game.name}"`, + subject: `🎁 You've been invited to Zava Gift Exchange "${game.name}"`, greeting: `Hello ${participant.name}!`, - invited: 'You have been added to a Secret Santa game.', + invited: 'You have been added to a Zava Gift Exchange game.', eventDetails: 'Event details', name: 'Event', date: 'Date', @@ -2673,9 +2673,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'Enjoy the gift exchange!' }, pt: { - subject: `🎁 Você foi convidado para o Secret Santa "${game.name}"`, + subject: `🎁 Você foi convidado para a Troca de Presentes Zava "${game.name}"`, greeting: `Olá ${participant.name}!`, - invited: 'Você foi adicionado a um jogo de Secret Santa.', + invited: 'Você foi adicionado a um jogo de Troca de Presentes Zava.', eventDetails: 'Detalhes do evento', name: 'Evento', date: 'Data', @@ -2688,9 +2688,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'Aproveite a troca de presentes!' }, fr: { - subject: `🎁 Vous avez été invité au Secret Santa "${game.name}"`, + subject: `🎁 Vous avez été invité au Échange de Cadeaux Zava "${game.name}"`, greeting: `Bonjour ${participant.name} !`, - invited: 'Vous avez été ajouté à un jeu Secret Santa.', + invited: 'Vous avez été ajouté à un jeu Échange de Cadeaux Zava.', eventDetails: 'Détails de l\'événement', name: 'Événement', date: 'Date', @@ -2703,9 +2703,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'Profitez de l\'échange de cadeaux !' }, it: { - subject: `🎁 Sei stato invitato al Secret Santa "${game.name}"`, + subject: `🎁 Sei stato invitato al Intercambio de Regalos Zava "${game.name}"`, greeting: `Ciao ${participant.name}!`, - invited: 'Sei stato aggiunto a un gioco di Secret Santa.', + invited: 'Sei stato aggiunto a un gioco di Échange de Cadeaux Zava.', eventDetails: 'Dettagli dell\'evento', name: 'Evento', date: 'Data', @@ -2718,9 +2718,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'Goditi lo scambio di regali!' }, ja: { - subject: `🎁 シークレットサンタ「${game.name}」に招待されました`, + subject: `🎁 Zava ギフト交換「${game.name}」に招待されました`, greeting: `こんにちは、${participant.name}さん!`, - invited: 'シークレットサンタゲームに追加されました。', + invited: 'Zava ギフト交換ゲームに追加されました。', eventDetails: 'イベント詳細', name: 'イベント', date: '日付', @@ -2733,9 +2733,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'プレゼント交換をお楽しみください!' }, zh: { - subject: `🎁 您已被邀请参加神秘圣诞老人"${game.name}"`, + subject: `🎁 您已被邀请参加Zava礼物交换"${game.name}"`, greeting: `您好,${participant.name}!`, - invited: '您已被添加到神秘圣诞老人游戏中。', + invited: '您已被添加到Zava礼物交换游戏中。', eventDetails: '活动详情', name: '活动', date: '日期', @@ -2748,9 +2748,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: '祝您礼物交换愉快!' }, de: { - subject: `🎁 Du wurdest zum Wichteln "${game.name}" eingeladen`, + subject: `🎁 Du wurdest zum Zava Geschenkaustausch "${game.name}" eingeladen`, greeting: `Hallo ${participant.name}!`, - invited: 'Du wurdest zu einem Wichtelspiel hinzugefügt.', + invited: 'Du wurdest zu einem Zava Geschenkaustausch hinzugefügt.', eventDetails: 'Veranstaltungsdetails', name: 'Veranstaltung', date: 'Datum', @@ -2763,9 +2763,9 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit footer: 'Viel Spaß beim Geschenkaustausch!' }, nl: { - subject: `🎁 Je bent uitgenodigd voor Secret Santa "${game.name}"`, + subject: `🎁 Je bent uitgenodigd voor Zava Cadeauwisseling "${game.name}"`, greeting: `Hallo ${participant.name}!`, - invited: 'Je bent toegevoegd aan een Secret Santa-spel.', + invited: 'Je bent toegevoegd aan een Zava Cadeauwisseling-spel.', eventDetails: 'Evenementdetails', name: 'Evenement', date: 'Datum', @@ -2790,7 +2790,7 @@ export function generateParticipantInvitationEmailContent(data: ParticipantInvit
-

🎁 Secret Santa

+

🎁 Zava Gift Exchange

@@ -2869,7 +2869,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail es: { subject: `🔄 Nueva asignación en "${game.name}" - Reasignación del organizador`, greeting: `¡Hola ${participant.name}!`, - intro: 'El organizador ha realizado una reasignación completa del juego de Secret Santa.', + intro: 'El organizador ha realizado una reasignación completa del juego de Intercambio de Regalos Zava.', newAssignment: '¡Tu nueva asignación está lista!', youGiftTo: 'Ahora le regalas a:', theirWish: 'Su deseo de regalo:', @@ -2885,7 +2885,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail en: { subject: `🔄 New assignment in "${game.name}" - Organizer reassignment`, greeting: `Hello ${participant.name}!`, - intro: 'The organizer has performed a full reassignment of the Secret Santa game.', + intro: 'The organizer has performed a full reassignment of the Zava Gift Exchange game.', newAssignment: 'Your new assignment is ready!', youGiftTo: 'You\'re now gifting to:', theirWish: 'Their gift wish:', @@ -2901,7 +2901,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail pt: { subject: `🔄 Nova atribuição em "${game.name}" - Reatribuição do organizador`, greeting: `Olá ${participant.name}!`, - intro: 'O organizador realizou uma reatribuição completa do jogo Secret Santa.', + intro: 'O organizador realizou uma reatribuição completa do jogo Échange de Cadeaux Zava.', newAssignment: 'Sua nova atribuição está pronta!', youGiftTo: 'Agora você presenteia:', theirWish: 'Desejo de presente:', @@ -2917,7 +2917,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail fr: { subject: `🔄 Nouvelle attribution dans "${game.name}" - Réattribution par l'organisateur`, greeting: `Bonjour ${participant.name} !`, - intro: 'L\'organisateur a effectué une réattribution complète du jeu Secret Santa.', + intro: 'L\'organisateur a effectué une réattribution complète du jeu Échange de Cadeaux Zava.', newAssignment: 'Votre nouvelle attribution est prête !', youGiftTo: 'Vous offrez maintenant à :', theirWish: 'Son souhait de cadeau :', @@ -2933,7 +2933,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail it: { subject: `🔄 Nuova assegnazione in "${game.name}" - Riassegnazione dell'organizzatore`, greeting: `Ciao ${participant.name}!`, - intro: 'L\'organizzatore ha effettuato una riassegnazione completa del gioco Secret Santa.', + intro: 'L\'organizzatore ha effettuato una riassegnazione completa del gioco Échange de Cadeaux Zava.', newAssignment: 'La tua nuova assegnazione è pronta!', youGiftTo: 'Ora regali a:', theirWish: 'Il suo desiderio:', @@ -2949,7 +2949,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail ja: { subject: `🔄 「${game.name}」の新しい割り当て - 主催者による再割り当て`, greeting: `こんにちは、${participant.name}さん!`, - intro: '主催者がシークレットサンタゲームの完全な再割り当てを行いました。', + intro: '主催者がZava ギフト交換ゲームの完全な再割り当てを行いました。', newAssignment: '新しい割り当てが準備できました!', youGiftTo: 'プレゼントを贈る相手:', theirWish: 'プレゼントの希望:', @@ -2965,7 +2965,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail zh: { subject: `🔄 "${game.name}"中的新分配 - 组织者重新分配`, greeting: `您好,${participant.name}!`, - intro: '组织者已对神秘圣诞老人游戏进行了完全重新分配。', + intro: '组织者已对Zava礼物交换游戏进行了完全重新分配。', newAssignment: '您的新分配已准备就绪!', youGiftTo: '您现在要送礼物给:', theirWish: '他们的礼物愿望:', @@ -2981,7 +2981,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail de: { subject: `🔄 Neue Zuweisung in "${game.name}" - Neuzuweisung durch den Organisator`, greeting: `Hallo ${participant.name}!`, - intro: 'Der Organisator hat eine vollständige Neuzuweisung des Wichtelspiels durchgeführt.', + intro: 'Der Organisator hat eine vollständige Neuzuweisung des Zava Geschenkaustauschs durchgeführt.', newAssignment: 'Deine neue Zuweisung ist bereit!', youGiftTo: 'Du beschenkst jetzt:', theirWish: 'Geschenkwunsch:', @@ -2997,7 +2997,7 @@ export function generateFullReassignmentEmailContent(data: FullReassignmentEmail nl: { subject: `🔄 Nieuwe toewijzing in "${game.name}" - Hertoewijzing door organisator`, greeting: `Hallo ${participant.name}!`, - intro: 'De organisator heeft een volledige hertoewijzing van het Secret Santa-spel uitgevoerd.', + intro: 'De organisator heeft een volledige hertoewijzing van het Zava Cadeauwisseling-spel uitgevoerd.', newAssignment: 'Je nieuwe toewijzing is klaar!', youGiftTo: 'Je geeft nu een cadeau aan:', theirWish: 'Hun cadeauwens:', @@ -3170,7 +3170,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Lamentamos cualquier inconveniente que esto pueda causar.', contact: 'Si tienes alguna pregunta, por favor contacta al organizador del evento.', headerTitle: 'Actualización del Evento', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `🎄 You have been removed from "${gameName}"`, @@ -3180,7 +3180,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'We apologize for any inconvenience this may cause.', contact: 'If you have any questions, please contact the event organizer.', headerTitle: 'Event Update', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `🎄 Você foi removido do jogo "${gameName}"`, @@ -3190,7 +3190,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Pedimos desculpas por qualquer inconveniente que isso possa causar.', contact: 'Se você tiver alguma dúvida, entre em contato com o organizador do evento.', headerTitle: 'Atualização do Evento', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `🎄 Vous avez été retiré de "${gameName}"`, @@ -3200,7 +3200,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Nous nous excusons pour tout inconvénient que cela pourrait causer.', contact: 'Si vous avez des questions, veuillez contacter l\'organisateur de l\'événement.', headerTitle: 'Mise à Jour de l\'Événement', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `🎄 Sei stato rimosso da "${gameName}"`, @@ -3210,7 +3210,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Ci scusiamo per eventuali inconvenienti che questo possa causare.', contact: 'Se hai domande, contatta l\'organizzatore dell\'evento.', headerTitle: 'Aggiornamento Evento', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `🎄 「${gameName}」から削除されました`, @@ -3220,7 +3220,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'ご不便をおかけして申し訳ございません。', contact: 'ご質問がある場合は、イベント主催者にお問い合わせください。', headerTitle: 'イベント更新', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `🎄 您已从"${gameName}"中移除`, @@ -3230,7 +3230,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: '对于由此造成的任何不便,我们深表歉意。', contact: '如有任何问题,请联系活动组织者。', headerTitle: '活动更新', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `🎄 Du wurdest aus "${gameName}" entfernt`, @@ -3240,7 +3240,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Wir entschuldigen uns für eventuelle Unannehmlichkeiten.', contact: 'Bei Fragen wende dich bitte an den Veranstalter.', headerTitle: 'Event-Aktualisierung', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `🎄 Je bent verwijderd uit "${gameName}"`, @@ -3250,7 +3250,7 @@ export function generateParticipantRemovedEmailContent(data: ParticipantRemovedE sorry: 'Onze excuses voor het ongemak dat dit kan veroorzaken.', contact: 'Als je vragen hebt, neem dan contact op met de organisator.', headerTitle: 'Evenement Update', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -3350,7 +3350,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Lamentamos cualquier inconveniente que esto pueda causar.', questions: 'Si tienes alguna pregunta, por favor contacta al organizador del evento.', headerTitle: 'Evento Cancelado', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `❌ The gift exchange "${gameName}" has been cancelled`, @@ -3361,7 +3361,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'We apologize for any inconvenience this may cause.', questions: 'If you have any questions, please contact the event organizer.', headerTitle: 'Event Cancelled', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `❌ A troca de presentes "${gameName}" foi cancelada`, @@ -3372,7 +3372,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Pedimos desculpas por qualquer inconveniente que isso possa causar.', questions: 'Se você tiver alguma dúvida, entre em contato com o organizador do evento.', headerTitle: 'Evento Cancelado', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `❌ L'échange de cadeaux "${gameName}" a été annulé`, @@ -3383,7 +3383,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Nous nous excusons pour tout inconvénient que cela pourrait causer.', questions: 'Si vous avez des questions, veuillez contacter l\'organisateur de l\'événement.', headerTitle: 'Événement Annulé', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `❌ Lo scambio di regali "${gameName}" è stato annullato`, @@ -3394,7 +3394,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Ci scusiamo per eventuali inconvenienti che questo possa causare.', questions: 'Se hai domande, contatta l\'organizzatore dell\'evento.', headerTitle: 'Evento Annullato', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `❌ ギフト交換「${gameName}」がキャンセルされました`, @@ -3405,7 +3405,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'ご不便をおかけして申し訳ございません。', questions: 'ご質問がある場合は、イベント主催者にお問い合わせください。', headerTitle: 'イベントキャンセル', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `❌ 礼物交换"${gameName}"已取消`, @@ -3416,7 +3416,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: '对于由此造成的任何不便,我们深表歉意。', questions: '如有任何问题,请联系活动组织者。', headerTitle: '活动已取消', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `❌ Der Geschenkaustausch "${gameName}" wurde abgesagt`, @@ -3427,7 +3427,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Wir entschuldigen uns für eventuelle Unannehmlichkeiten.', questions: 'Bei Fragen wende dich bitte an den Veranstalter.', headerTitle: 'Event Abgesagt', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `❌ De cadeauuitwisseling "${gameName}" is geannuleerd`, @@ -3438,7 +3438,7 @@ export function generateGameDeletedEmailContent(data: GameDeletedEmailData): { s sorry: 'Onze excuses voor het ongemak dat dit kan veroorzaken.', questions: 'Als je vragen hebt, neem dan contact op met de organisator.', headerTitle: 'Evenement Geannuleerd', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -3601,7 +3601,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Ver juego', dontForget: '¡No olvides traer tu regalo!', headerTitle: 'Recordatorio del Evento', - footer: 'Gracias por usar Secret Santa. ¡Que disfruten el intercambio!' + footer: 'Gracias por usar Intercambio de Regalos Zava. ¡Que disfruten el intercambio!' }, en: { subject: `⏰ Reminder! "${game.name}" is tomorrow`, @@ -3619,7 +3619,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'View game', dontForget: 'Don\'t forget to bring your gift!', headerTitle: 'Event Reminder', - footer: 'Thank you for using Secret Santa. Enjoy the exchange!' + footer: 'Thank you for using Zava Gift Exchange. Enjoy the exchange!' }, pt: { subject: `⏰ Lembrete! "${game.name}" é amanhã`, @@ -3637,7 +3637,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Ver jogo', dontForget: 'Não esqueça de trazer seu presente!', headerTitle: 'Lembrete do Evento', - footer: 'Obrigado por usar o Secret Santa. Aproveite a troca!' + footer: 'Obrigado por usar a Troca de Presentes Zava. Aproveite a troca!' }, fr: { subject: `⏰ Rappel ! "${game.name}" c'est demain`, @@ -3655,7 +3655,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Voir le jeu', dontForget: 'N\'oubliez pas d\'apporter votre cadeau !', headerTitle: 'Rappel de l\'Événement', - footer: 'Merci d\'utiliser Secret Santa. Profitez de l\'échange !' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava. Profitez de l\'échange !' }, it: { subject: `⏰ Promemoria! "${game.name}" è domani`, @@ -3673,7 +3673,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Vedi gioco', dontForget: 'Non dimenticare di portare il tuo regalo!', headerTitle: 'Promemoria Evento', - footer: 'Grazie per aver usato Secret Santa. Buon scambio!' + footer: 'Grazie per aver usato Échange de Cadeaux Zava. Buon scambio!' }, ja: { subject: `⏰ リマインダー!「${game.name}」は明日です`, @@ -3691,7 +3691,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'ゲームを見る', dontForget: 'プレゼントを忘れずに!', headerTitle: 'イベントリマインダー', - footer: 'シークレットサンタをご利用いただきありがとうございます。交換を楽しんでください!' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。交換を楽しんでください!' }, zh: { subject: `⏰ 提醒!"${game.name}"是明天`, @@ -3709,7 +3709,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: '查看游戏', dontForget: '别忘了带上您的礼物!', headerTitle: '活动提醒', - footer: '感谢使用神秘圣诞老人。享受交换乐趣!' + footer: '感谢使用Zava礼物交换。享受交换乐趣!' }, de: { subject: `⏰ Erinnerung! "${game.name}" ist morgen`, @@ -3727,7 +3727,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Spiel ansehen', dontForget: 'Vergiss nicht, dein Geschenk mitzubringen!', headerTitle: 'Event-Erinnerung', - footer: 'Danke, dass du Wichteln verwendest. Viel Spaß beim Austausch!' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest. Viel Spaß beim Austausch!' }, nl: { subject: `⏰ Herinnering! "${game.name}" is morgen`, @@ -3745,7 +3745,7 @@ export function generateEventUpcomingEmailContent(data: EventUpcomingEmailData): viewGame: 'Bekijk spel', dontForget: 'Vergeet niet je cadeau mee te nemen!', headerTitle: 'Evenement Herinnering', - footer: 'Bedankt voor het gebruik van Secret Santa. Geniet van de uitwisseling!' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava. Geniet van de uitwisseling!' } } @@ -3897,7 +3897,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Lista de participantes', manageGame: 'Administrar juego', headerTitle: '¡Todos Confirmados!', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `✅ All confirmed! "${game.name}" is ready`, @@ -3911,7 +3911,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Participant list', manageGame: 'Manage game', headerTitle: 'All Confirmed!', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `✅ Todos confirmados! "${game.name}" está pronto`, @@ -3925,7 +3925,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Lista de participantes', manageGame: 'Gerenciar jogo', headerTitle: 'Todos Confirmados!', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `✅ Tous confirmés ! "${game.name}" est prêt`, @@ -3939,7 +3939,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Liste des participants', manageGame: 'Gérer le jeu', headerTitle: 'Tous Confirmés !', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `✅ Tutti confermati! "${game.name}" è pronto`, @@ -3953,7 +3953,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Lista partecipanti', manageGame: 'Gestisci gioco', headerTitle: 'Tutti Confermati!', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `✅ 全員確認完了!「${game.name}」準備完了`, @@ -3967,7 +3967,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: '参加者リスト', manageGame: 'ゲームを管理', headerTitle: '全員確認完了!', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `✅ 全部确认!"${game.name}"已准备就绪`, @@ -3981,7 +3981,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: '参与者列表', manageGame: '管理游戏', headerTitle: '全部确认!', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `✅ Alle bestätigt! "${game.name}" ist bereit`, @@ -3995,7 +3995,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Teilnehmerliste', manageGame: 'Spiel verwalten', headerTitle: 'Alle Bestätigt!', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `✅ Allemaal bevestigd! "${game.name}" is klaar`, @@ -4009,7 +4009,7 @@ export function generateAllConfirmedEmailContent(data: AllConfirmedEmailData): { participants: 'Deelnemerslijst', manageGame: 'Spel beheren', headerTitle: 'Allemaal Bevestigd!', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -4129,7 +4129,7 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail es: { subject: `🔐 Nuevo enlace de organizador - "${game.name}"`, greeting: '¡Hola Organizador!', - tokenRegenerated: 'Se ha generado un nuevo enlace de acceso para tu evento de Secret Santa.', + tokenRegenerated: 'Se ha generado un nuevo enlace de acceso para tu evento de Intercambio de Regalos Zava.', newLinkDesc: 'El enlace anterior ya no funcionará. Usa el nuevo enlace a continuación para acceder al panel de organizador.', oldLinkWarning: '⚠️ El enlace anterior ha sido desactivado por seguridad.', organizerLink: 'Nuevo enlace del organizador', @@ -4138,12 +4138,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Usa este token junto con el código del juego para administrar el juego (¡no lo compartas!):', securityNote: 'Si no solicitaste este cambio, alguien con acceso a tu panel de organizador regeneró el token.', headerTitle: 'Nuevo Enlace de Acceso', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `🔐 New organizer link - "${game.name}"`, greeting: 'Hello Organizer!', - tokenRegenerated: 'A new access link has been generated for your Secret Santa event.', + tokenRegenerated: 'A new access link has been generated for your Zava Gift Exchange event.', newLinkDesc: 'The previous link will no longer work. Use the new link below to access the organizer panel.', oldLinkWarning: '⚠️ The previous link has been deactivated for security.', organizerLink: 'New organizer link', @@ -4152,12 +4152,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Use this token along with the game code to manage the game (don\'t share it!):', securityNote: 'If you didn\'t request this change, someone with access to your organizer panel regenerated the token.', headerTitle: 'New Access Link', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `🔐 Novo link do organizador - "${game.name}"`, greeting: 'Olá Organizador!', - tokenRegenerated: 'Um novo link de acesso foi gerado para seu evento de Secret Santa.', + tokenRegenerated: 'Um novo link de acesso foi gerado para seu evento de Intercambio de Regalos Zava.', newLinkDesc: 'O link anterior não funcionará mais. Use o novo link abaixo para acessar o painel do organizador.', oldLinkWarning: '⚠️ O link anterior foi desativado por segurança.', organizerLink: 'Novo link do organizador', @@ -4166,12 +4166,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Use este token junto com o código do jogo para gerenciá-lo (não compartilhe!):', securityNote: 'Se você não solicitou essa alteração, alguém com acesso ao seu painel de organizador regenerou o token.', headerTitle: 'Novo Link de Acesso', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `🔐 Nouveau lien organisateur - "${game.name}"`, greeting: 'Bonjour Organisateur !', - tokenRegenerated: 'Un nouveau lien d\'accès a été généré pour votre événement Secret Santa.', + tokenRegenerated: 'Un nouveau lien d\'accès a été généré pour votre événement Échange de Cadeaux Zava.', newLinkDesc: 'L\'ancien lien ne fonctionnera plus. Utilisez le nouveau lien ci-dessous pour accéder au panneau organisateur.', oldLinkWarning: '⚠️ L\'ancien lien a été désactivé pour des raisons de sécurité.', organizerLink: 'Nouveau lien organisateur', @@ -4180,12 +4180,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Utilisez ce token avec le code du jeu pour le gérer (ne le partagez pas !) :', securityNote: 'Si vous n\'avez pas demandé ce changement, quelqu\'un ayant accès à votre panneau organisateur a régénéré le token.', headerTitle: 'Nouveau Lien d\'Accès', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `🔐 Nuovo link organizzatore - "${game.name}"`, greeting: 'Ciao Organizzatore!', - tokenRegenerated: 'È stato generato un nuovo link di accesso per il tuo evento Secret Santa.', + tokenRegenerated: 'È stato generato un nuovo link di accesso per il tuo evento Échange de Cadeaux Zava.', newLinkDesc: 'Il link precedente non funzionerà più. Usa il nuovo link qui sotto per accedere al pannello organizzatore.', oldLinkWarning: '⚠️ Il link precedente è stato disattivato per sicurezza.', organizerLink: 'Nuovo link dell\'organizzatore', @@ -4194,12 +4194,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Usa questo token insieme al codice del gioco per gestirlo (non condividerlo!):', securityNote: 'Se non hai richiesto questa modifica, qualcuno con accesso al tuo pannello organizzatore ha rigenerato il token.', headerTitle: 'Nuovo Link di Accesso', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `🔐 新しい主催者リンク - 「${game.name}」`, greeting: 'こんにちは、主催者さん!', - tokenRegenerated: 'シークレットサンタイベントの新しいアクセスリンクが生成されました。', + tokenRegenerated: 'Zava ギフト交換イベントの新しいアクセスリンクが生成されました。', newLinkDesc: '以前のリンクは使用できなくなりました。以下の新しいリンクを使用して主催者パネルにアクセスしてください。', oldLinkWarning: '⚠️ セキュリティのため、以前のリンクは無効になりました。', organizerLink: '新しい主催者リンク', @@ -4208,12 +4208,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'このトークンとゲームコードを使用してゲームを管理してください(共有しないでください):', securityNote: 'この変更をリクエストしていない場合、主催者パネルにアクセスできる誰かがトークンを再生成しました。', headerTitle: '新しいアクセスリンク', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `🔐 新的组织者链接 - "${game.name}"`, greeting: '您好,组织者!', - tokenRegenerated: '已为您的神秘圣诞老人活动生成了新的访问链接。', + tokenRegenerated: '已为您的Zava礼物交换活动生成了新的访问链接。', newLinkDesc: '之前的链接将不再有效。请使用下面的新链接访问组织者面板。', oldLinkWarning: '⚠️ 出于安全考虑,之前的链接已被停用。', organizerLink: '新的组织者链接', @@ -4222,12 +4222,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: '使用此令牌和游戏代码管理游戏(请勿分享):', securityNote: '如果您没有请求此更改,则有权访问您的组织者面板的人重新生成了令牌。', headerTitle: '新的访问链接', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `🔐 Neuer Organisator-Link - "${game.name}"`, greeting: 'Hallo Organisator!', - tokenRegenerated: 'Ein neuer Zugriffslink wurde für dein Wichteln-Event generiert.', + tokenRegenerated: 'Ein neuer Zugriffslink wurde für dein Zava Geschenkaustausch-Event generiert.', newLinkDesc: 'Der vorherige Link funktioniert nicht mehr. Verwende den neuen Link unten, um auf das Organisator-Panel zuzugreifen.', oldLinkWarning: '⚠️ Der vorherige Link wurde aus Sicherheitsgründen deaktiviert.', organizerLink: 'Neuer Organisator-Link', @@ -4236,12 +4236,12 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Verwende dieses Token zusammen mit dem Spielcode um das Spiel zu verwalten (nicht teilen!):', securityNote: 'Wenn du diese Änderung nicht angefordert hast, hat jemand mit Zugriff auf dein Organisator-Panel das Token neu generiert.', headerTitle: 'Neuer Zugriffslink', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `🔐 Nieuwe organisator-link - "${game.name}"`, greeting: 'Hallo Organisator!', - tokenRegenerated: 'Er is een nieuwe toegangslink gegenereerd voor je Secret Santa-evenement.', + tokenRegenerated: 'Er is een nieuwe toegangslink gegenereerd voor je Zava Cadeauwisseling-evenement.', newLinkDesc: 'De vorige link werkt niet meer. Gebruik de nieuwe link hieronder om toegang te krijgen tot het organisator-paneel.', oldLinkWarning: '⚠️ De vorige link is uit veiligheidsoverwegingen gedeactiveerd.', organizerLink: 'Nieuwe organisator-link', @@ -4250,7 +4250,7 @@ export function generateNewOrganizerLinkEmailContent(data: NewOrganizerLinkEmail organizerTokenDesc: 'Gebruik deze token samen met de spelcode om het spel te beheren (deel deze niet!):', securityNote: 'Als je deze wijziging niet hebt aangevraagd, heeft iemand met toegang tot je organisator-paneel de token opnieuw gegenereerd.', headerTitle: 'Nieuwe Toegangslink', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } @@ -4341,110 +4341,110 @@ export function generateEmailUpdatedEmailContent(data: EmailUpdatedEmailData): { es: { subject: `🔔 Tu email ha sido actualizado - "${gameName}"`, greeting: `Hola ${participantName},`, - emailChanged: 'Te informamos que tu dirección de correo electrónico ha sido actualizada en el juego de Secret Santa.', + emailChanged: 'Te informamos que tu dirección de correo electrónico ha sido actualizada en el juego de Intercambio de Regalos Zava.', forSecurity: 'Por seguridad, te enviamos esta notificación a tu nueva dirección de correo.', previousEmail: 'Email anterior', newEmailLabel: 'Nuevo email', notYou: '¿No fuiste tú?', contact: 'Si no realizaste este cambio, por favor contacta al organizador del evento inmediatamente.', headerTitle: 'Email Actualizado', - footer: 'Gracias por usar Secret Santa.' + footer: 'Gracias por usar Intercambio de Regalos Zava.' }, en: { subject: `🔔 Your email has been updated - "${gameName}"`, greeting: `Hello ${participantName},`, - emailChanged: 'We\'re writing to let you know that your email address has been updated in the Secret Santa game.', + emailChanged: 'We\'re writing to let you know that your email address has been updated in the Zava Gift Exchange game.', forSecurity: 'For security purposes, we\'re sending this notification to your new email address.', previousEmail: 'Previous email', newEmailLabel: 'New email', notYou: 'Wasn\'t you?', contact: 'If you didn\'t make this change, please contact the event organizer immediately.', headerTitle: 'Email Updated', - footer: 'Thank you for using Secret Santa.' + footer: 'Thank you for using Zava Gift Exchange.' }, pt: { subject: `🔔 Seu email foi atualizado - "${gameName}"`, greeting: `Olá ${participantName},`, - emailChanged: 'Informamos que seu endereço de email foi atualizado no jogo de Secret Santa.', + emailChanged: 'Informamos que seu endereço de email foi atualizado no jogo de Troca de Presentes Zava.', forSecurity: 'Por segurança, estamos enviando esta notificação para seu novo endereço de email.', previousEmail: 'Email anterior', newEmailLabel: 'Novo email', notYou: 'Não foi você?', contact: 'Se você não fez esta alteração, entre em contato com o organizador do evento imediatamente.', headerTitle: 'Email Atualizado', - footer: 'Obrigado por usar o Secret Santa.' + footer: 'Obrigado por usar a Troca de Presentes Zava.' }, fr: { subject: `🔔 Votre email a été mis à jour - "${gameName}"`, greeting: `Bonjour ${participantName},`, - emailChanged: 'Nous vous informons que votre adresse email a été mise à jour dans le jeu Secret Santa.', + emailChanged: 'Nous vous informons que votre adresse email a été mise à jour dans le jeu Échange de Cadeaux Zava.', forSecurity: 'Pour des raisons de sécurité, nous envoyons cette notification à votre nouvelle adresse email.', previousEmail: 'Email précédent', newEmailLabel: 'Nouvel email', notYou: 'Ce n\'était pas vous ?', contact: 'Si vous n\'avez pas effectué ce changement, veuillez contacter l\'organisateur de l\'événement immédiatement.', headerTitle: 'Email Mis à Jour', - footer: 'Merci d\'utiliser Secret Santa.' + footer: 'Merci d\'utiliser Échange de Cadeaux Zava.' }, it: { subject: `🔔 La tua email è stata aggiornata - "${gameName}"`, greeting: `Ciao ${participantName},`, - emailChanged: 'Ti informiamo che il tuo indirizzo email è stato aggiornato nel gioco Secret Santa.', + emailChanged: 'Ti informiamo che il tuo indirizzo email è stato aggiornato nel gioco Échange de Cadeaux Zava.', forSecurity: 'Per sicurezza, stiamo inviando questa notifica al tuo nuovo indirizzo email.', previousEmail: 'Email precedente', newEmailLabel: 'Nuova email', notYou: 'Non sei stato tu?', contact: 'Se non hai effettuato questa modifica, contatta immediatamente l\'organizzatore dell\'evento.', headerTitle: 'Email Aggiornata', - footer: 'Grazie per aver usato Secret Santa.' + footer: 'Grazie per aver usato Échange de Cadeaux Zava.' }, ja: { subject: `🔔 メールアドレスが更新されました - 「${gameName}」`, greeting: `${participantName}さん、こんにちは。`, - emailChanged: 'シークレットサンタゲームでメールアドレスが更新されたことをお知らせします。', + emailChanged: 'Zava ギフト交換ゲームでメールアドレスが更新されたことをお知らせします。', forSecurity: 'セキュリティのため、この通知を新しいメールアドレスに送信しています。', previousEmail: '以前のメール', newEmailLabel: '新しいメール', notYou: 'あなたではありませんか?', contact: 'この変更を行っていない場合は、すぐにイベント主催者に連絡してください。', headerTitle: 'メール更新', - footer: 'シークレットサンタをご利用いただきありがとうございます。' + footer: 'Zava ギフト交換をご利用いただきありがとうございます。' }, zh: { subject: `🔔 您的邮箱已更新 - "${gameName}"`, greeting: `${participantName},您好,`, - emailChanged: '我们通知您,您在神秘圣诞老人游戏中的电子邮箱地址已更新。', + emailChanged: '我们通知您,您在Zava礼物交换游戏中的电子邮箱地址已更新。', forSecurity: '出于安全考虑,我们将此通知发送到您的新电子邮箱地址。', previousEmail: '之前的邮箱', newEmailLabel: '新邮箱', notYou: '不是您本人操作?', contact: '如果您没有进行此更改,请立即联系活动组织者。', headerTitle: '邮箱已更新', - footer: '感谢使用神秘圣诞老人。' + footer: '感谢使用Zava礼物交换。' }, de: { subject: `🔔 Deine E-Mail wurde aktualisiert - "${gameName}"`, greeting: `Hallo ${participantName},`, - emailChanged: 'Wir möchten dich informieren, dass deine E-Mail-Adresse im Wichteln-Spiel aktualisiert wurde.', + emailChanged: 'Wir möchten dich informieren, dass deine E-Mail-Adresse im Zava Geschenkaustausch aktualisiert wurde.', forSecurity: 'Aus Sicherheitsgründen senden wir diese Benachrichtigung an deine neue E-Mail-Adresse.', previousEmail: 'Vorherige E-Mail', newEmailLabel: 'Neue E-Mail', notYou: 'Warst du das nicht?', contact: 'Wenn du diese Änderung nicht vorgenommen hast, kontaktiere bitte sofort den Veranstalter.', headerTitle: 'E-Mail Aktualisiert', - footer: 'Danke, dass du Wichteln verwendest.' + footer: 'Danke, dass du Zava Geschenkaustausch verwendest.' }, nl: { subject: `🔔 Je e-mail is bijgewerkt - "${gameName}"`, greeting: `Hallo ${participantName},`, - emailChanged: 'We laten je weten dat je e-mailadres is bijgewerkt in het Secret Santa spel.', + emailChanged: 'We laten je weten dat je e-mailadres is bijgewerkt in het Zava Cadeauwisseling spel.', forSecurity: 'Om veiligheidsredenen sturen we deze melding naar je nieuwe e-mailadres.', previousEmail: 'Vorige e-mail', newEmailLabel: 'Nieuwe e-mail', notYou: 'Was jij dit niet?', contact: 'Als je deze wijziging niet hebt aangebracht, neem dan onmiddellijk contact op met de organisator.', headerTitle: 'E-mail Bijgewerkt', - footer: 'Bedankt voor het gebruik van Secret Santa.' + footer: 'Bedankt voor het gebruik van Échange de Cadeaux Zava.' } } diff --git a/docker-compose.yml b/docker-compose.yml index c936de8..c72b717 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: # Data persistence for Codespaces reliability - cosmos-db-data:/data/db networks: - - secretsanta-network + - zavaexchangegift-network healthcheck: test: ["CMD", "curl", "-f", "-k", "https://localhost:8081/_explorer/emulator.pem"] interval: 5s @@ -46,7 +46,7 @@ services: volumes: - azurite-data:/data networks: - - secretsanta-network + - zavaexchangegift-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:10000/devstoreaccount1?comp=properties"] interval: 5s @@ -62,5 +62,5 @@ volumes: driver: local networks: - secretsanta-network: + zavaexchangegift-network: driver: bridge diff --git a/docs/api-reference.md b/docs/api-reference.md index f0d9702..008eef4 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -1,4 +1,4 @@ -# Secret Santa API Reference +# Zava Gift Exchange API Reference ## Base URL - Local: `http://localhost:7071/api` @@ -118,7 +118,7 @@ Checks if the service is ready to handle requests (database connectivity). ``` POST /api/games ``` -Creates a new Secret Santa game. +Creates a new gift exchange game. **Validation:** - `date` must be today or a future date (past dates are rejected with 400 error) diff --git a/docs/deployment.md b/docs/deployment.md index 59066f8..1d8aa1b 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -6,9 +6,9 @@ This project uses an ephemeral infrastructure approach: | Environment | Resource Group | Lifecycle | Purpose | |-------------|----------------|-----------|---------| -| **PR** | `secretsanta-pr-{number}` | Created on PR open, deleted on close | Isolated testing per PR | -| **QA** | `secretsanta-qa` | Persistent | Pre-production validation (isolated) | -| **Production** | `secretsanta` | Persistent | Live environment | +| **PR** | `zavaexchangegift-pr-{number}` | Created on PR open, deleted on close | Isolated testing per PR | +| **QA** | `zavaexchangegift-qa` | Persistent | Pre-production validation (isolated) | +| **Production** | `zavaexchangegift` | Persistent | Live environment | ### How It Works @@ -48,7 +48,7 @@ All environments automatically receive these settings from infrastructure: az login # Create service principal for GitHub Actions (OIDC) -az ad sp create-for-rbac --name "secretsanta-github" \ +az ad sp create-for-rbac --name "zavaexchangegift-github" \ --role contributor \ --scopes /subscriptions/{subscription-id} --json-auth ``` @@ -78,10 +78,10 @@ Go to **Settings → Environments** and create: ```bash # Create production resource group -az group create --name secretsanta --location centralus +az group create --name zavaexchangegift --location centralus # Create QA resource group (isolated from production) -az group create --name secretsanta-qa --location centralus +az group create --name zavaexchangegift-qa --location centralus ``` ### 5. Create Infrastructure (Optional) @@ -98,20 +98,20 @@ For initial setup or manual deployment: ```bash # Deploy PR environment az deployment group create \ - --resource-group secretsanta-pr-123 \ + --resource-group zavaexchangegift-pr-123 \ --template-file infra/main.bicep \ --parameters environment=pr prNumber=123 # Deploy QA (isolated resource group) -az group create --name secretsanta-qa --location centralus +az group create --name zavaexchangegift-qa --location centralus az deployment group create \ - --resource-group secretsanta-qa \ + --resource-group zavaexchangegift-qa \ --template-file infra/main.bicep \ --parameters infra/parameters.qa.json # Deploy Production az deployment group create \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --template-file infra/main.bicep \ --parameters infra/parameters.prod.json ``` @@ -122,7 +122,7 @@ Email is enabled by default in QA and production. For PR environments: ```bash az deployment group create \ - --resource-group secretsanta-pr-123 \ + --resource-group zavaexchangegift-pr-123 \ --template-file infra/main.bicep \ --parameters environment=pr prNumber=123 enableEmailService=true ``` @@ -143,7 +143,7 @@ az deployment group create \ | Parameter | Default | Description | |-----------|---------|-------------| -| `projectName` | secretsanta | Base name for resources | +| `projectName` | zavaexchangegift | Base name for resources | | `environment` | pr | Environment (pr/qa/prod) | | `prNumber` | - | PR number (required for pr env) | | `staticWebAppSku` | Free | SWA tier (Free/Standard) | @@ -157,20 +157,20 @@ az deployment group create \ ### Delete PR Environment (automatic on PR close) ```bash -az group delete --name secretsanta-pr-123 --yes --no-wait +az group delete --name zavaexchangegift-pr-123 --yes --no-wait ``` ### Delete All Environments ```bash # Delete production -az group delete --name secretsanta --yes +az group delete --name zavaexchangegift --yes # Delete QA -az group delete --name secretsanta-qa --yes +az group delete --name zavaexchangegift-qa --yes # Delete any orphaned PR environments -az group list --query "[?starts_with(name, 'secretsanta-pr-')].name" -o tsv | \ +az group list --query "[?starts_with(name, 'zavaexchangegift-pr-')].name" -o tsv | \ xargs -I {} az group delete --name {} --yes --no-wait ``` diff --git a/docs/development.md b/docs/development.md index a8050fd..7d8a50e 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,6 +1,6 @@ # 🎯 Developer Setup Guide - Overview -Welcome to Secret Santa! This guide helps you choose the right documentation for your needs. +Welcome to Zava Gift Exchange! This guide helps you choose the right documentation for your needs. ## 📚 Documentation Roadmap @@ -409,7 +409,7 @@ gh run list --workflow ci-cd.yml # View Azure resources az group list --output table -az resource list --resource-group secretsanta --output table +az resource list --resource-group zavaexchangegift --output table # Check costs az billing invoice list --output table @@ -435,7 +435,7 @@ Ready to get started? 👇 🔧 **DevOps?** → [Read github-deployment.md](github-deployment.md) -❓ **Questions?** → [Open an Issue](https://github.com/dsanchezcr/secretsanta/issues) +❓ **Questions?** → [Open an Issue](https://github.com/dsanchezcr/zavaexchangegift/issues) ```` diff --git a/docs/getting-started.md b/docs/getting-started.md index b784da6..3d776fa 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,6 +1,6 @@ # 🚀 Local Development Guide -Get up and running with Secret Santa locally in minutes. This guide covers everything you need to develop, test, and debug the application on your machine. +Get up and running with Zava Gift Exchange locally in minutes. This guide covers everything you need to develop, test, and debug the application on your machine. ## Table of Contents @@ -49,8 +49,8 @@ Before you start, ensure you have the following installed on your machine (**Win ### 1. Clone the Repository ```bash -git clone https://github.com/dsanchezcr/secretsanta.git -cd secretsanta +git clone https://github.com/dsanchezcr/zavaexchangegift.git +cd zavaexchangegift ``` ### 2. Start Docker Containers @@ -128,7 +128,7 @@ This copies the example template and shows you what was configured. The `local.settings.json` file automatically includes: - **COSMOS_ENDPOINT**: `https://localhost:8081` (emulator) - **COSMOS_KEY**: Default emulator key (safe, public key) -- **COSMOS_DATABASE_NAME**: `secretsanta` +- **COSMOS_DATABASE_NAME**: `zavaexchangegift` - **COSMOS_CONTAINER_NAME**: `games` - **APP_BASE_URL**: `http://localhost:5173` - **ENVIRONMENT**: `local` @@ -275,7 +275,7 @@ The local Cosmos DB Emulator is automatically set up and data persists in Docker ```bash # Query games collection -curl -X GET "https://localhost:8081/dbs/secretsanta/colls/games/docs" \ +curl -X GET "https://localhost:8081/dbs/zavaexchangegift/colls/games/docs" \ -H "Authorization: type%3Dmaster%26ver%3D1.0%26sig%3D..." \ -H "x-ms-version: 2018-12-31" \ -k # Ignore SSL for emulator @@ -583,8 +583,8 @@ Enable local telemetry: ## Getting Help -- **Issue?** Check [GitHub Issues](https://github.com/dsanchezcr/secretsanta/issues) -- **Question?** Create a [Discussion](https://github.com/dsanchezcr/secretsanta/discussions) +- **Issue?** Check [GitHub Issues](https://github.com/dsanchezcr/zavaexchangegift/issues) +- **Question?** Create a [Discussion](https://github.com/dsanchezcr/zavaexchangegift/discussions) - **Want to contribute?** See [CONTRIBUTING.md](CONTRIBUTING.md) --- diff --git a/docs/github-deployment.md b/docs/github-deployment.md index f3009af..5e438cb 100644 --- a/docs/github-deployment.md +++ b/docs/github-deployment.md @@ -27,7 +27,7 @@ az login # Create service principal for CI/CD az ad sp create-for-rbac \ - --name "secretsanta-github-cicd" \ + --name "zavaexchangegift-github-cicd" \ --role contributor \ --scopes /subscriptions/{subscription-id} --json-auth ``` @@ -36,7 +36,7 @@ az ad sp create-for-rbac \ ```json { "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - "displayName": "secretsanta-github-cicd", + "displayName": "zavaexchangegift-github-cicd", "password": "xxxxxxx~xxxxx_xxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" @@ -114,12 +114,12 @@ Push to main (after PR merged) [E2E Tests (Local)] ↓ If PASSED: - ├─→ [Create/Verify QA RG] ←─ auto-created (secretsanta-qa) + ├─→ [Create/Verify QA RG] ←─ auto-created (zavaexchangegift-qa) ├─→ [Deploy QA Infrastructure] ←─ SWA (Free), Cosmos DB (Free Tier), Email enabled ├─→ [Deploy to QA] ←─ QA Static Web App URL │ └─ If deployment PASSED: - ├─→ [Create/Verify Prod RG] ←─ auto-created (secretsanta) + ├─→ [Create/Verify Prod RG] ←─ auto-created (zavaexchangegift) ├─→ [Deploy Production Infrastructure] ←─ SWA (Standard), Cosmos DB (Serverless) ├─→ [Deploy to Production] ← REQUIRES APPROVAL └─→ [Deployment Summary] ← documents the release @@ -171,7 +171,7 @@ az account set --subscription "subscription-id" # 4. Create service principal az ad sp create-for-rbac \ - --name "secretsanta-github-cicd" \ + --name "zavaexchangegift-github-cicd" \ --role contributor \ --scopes /subscriptions/$(az account show --query id -o tsv) ``` @@ -180,7 +180,7 @@ az ad sp create-for-rbac \ ```json { "appId": "12345678-1234-1234-1234-123456789012", - "displayName": "secretsanta-github-cicd", + "displayName": "zavaexchangegift-github-cicd", "password": "xxxxx~xxxxx_xxx", "tenant": "87654321-4321-4321-4321-210987654321", "subscriptionId": "11111111-2222-3333-4444-555555555555" @@ -193,7 +193,7 @@ az ad sp create-for-rbac \ 1. Go to **Azure Active Directory** → **App registrations** 2. Click **New registration** -3. Name: `secretsanta-github-cicd` +3. Name: `zavaexchangegift-github-cicd` 4. Click **Register** 5. Copy **Application (client) ID** 6. Go to **Certificates & secrets** @@ -239,7 +239,7 @@ az role assignment create \ ```json { "appId": "12345678-1234-1234-1234-123456789012", - "displayName": "secretsanta-github-cicd", + "displayName": "zavaexchangegift-github-cicd", "password": "xxxxx~xxxxx_xxx", "tenant": "87654321-4321-4321-4321-210987654321", "subscriptionId": "11111111-2222-3333-4444-555555555555" @@ -316,7 +316,7 @@ var uniqueSuffix = uniqueString( # Results in names like: # ss7hx5k9qm2p (Cosmos DB - 24 char limit) -# secretsanta-qa-7hx5k9qm2p (Static Web App) +# zavaexchangegift-qa-7hx5k9qm2p (Static Web App) # ss-acs-7hx5k9qm2p (Communication Services) ``` @@ -349,24 +349,24 @@ As a developer, you don't need to do anything special: **Scenario 1: Alice deploys PR #42** ``` -Resource Group: secretsanta-pr-42 +Resource Group: zavaexchangegift-pr-42 Cosmos DB: ssa1b2c3d4e5f6g7h -Static Web App: secretsanta-pr-42-a1b2c3d4e5f +Static Web App: zavaexchangegift-pr-42-a1b2c3d4e5f ``` **Scenario 2: Bob forks the repo and deploys prod to his subscription** ``` -Resource Group: secretsanta +Resource Group: zavaexchangegift Cosmos DB: ssx9y8z7w6v5u4t -Static Web App: secretsanta-prod-x9y8z7w6v5 +Static Web App: zavaexchangegift-prod-x9y8z7w6v5 (Different uniqueSuffix = no conflicts!) ``` **Scenario 3: Carol deploys QA from her fork** ``` -Resource Group: secretsanta +Resource Group: zavaexchangegift Cosmos DB: ssk1l2m3n4o5p6q -Static Web App: secretsanta-qa-k1l2m3n4o5p +Static Web App: zavaexchangegift-qa-k1l2m3n4o5p (Different uniqueSuffix = no conflicts!) ``` @@ -447,13 +447,13 @@ Result: SWA URL posted to PR comment ✅ └─ Playwright against mock environment 3. [3 min] Deploy QA Infrastructure - └─ Create/verify secretsanta-qa RG, deploy free tier resources + └─ Create/verify zavaexchangegift-qa RG, deploy free tier resources 4. [2 min] Deploy to QA └─ Static Web App upload 5. [3 min] Deploy Production Infrastructure - └─ Deploy to secretsanta RG (Standard SWA, Serverless Cosmos DB) + └─ Deploy to zavaexchangegift RG (Standard SWA, Serverless Cosmos DB) 6. [WAIT] 🔔 AWAITING APPROVAL 🔔 └─ Required reviewer must approve @@ -475,7 +475,7 @@ Result: App live in production ✅ **Purpose:** Preview changes before merge **Resources created per PR:** -- Resource Group: `secretsanta-pr-{PR_NUMBER}` +- Resource Group: `zavaexchangegift-pr-{PR_NUMBER}` - Static Web App (Free SKU) with preview deployment - Cosmos DB (Serverless, free tier) - Application Insights @@ -501,7 +501,7 @@ Result: App live in production ✅ **Purpose:** Test against production-like infrastructure before release, completely isolated from production **Resources:** -- Isolated Resource Group: `secretsanta-qa` (separate from production) +- Isolated Resource Group: `zavaexchangegift-qa` (separate from production) - Static Web App (Free SKU) - no staging slots - Cosmos DB (Free Tier - 1000 RU/s, 25GB storage, sufficient for testing) - Application Insights (30-day retention) @@ -530,7 +530,7 @@ Result: App live in production ✅ **Purpose:** Live application for end users **Resources:** -- Resource Group: `secretsanta` +- Resource Group: `zavaexchangegift` - Static Web App (Standard SKU) - SLA, custom domains support - Cosmos DB (Serverless - unlimited scaling, pay per request) - Application Insights (90-day retention) @@ -707,7 +707,7 @@ npm install -D typescript 2. Create new service principal: ```bash az ad sp create-for-rbac \ - --name "secretsanta-github-cicd-new" \ + --name "zavaexchangegift-github-cicd-new" \ --role contributor \ --scopes /subscriptions/{subscription-id} ``` @@ -725,7 +725,7 @@ az bicep build --file ./infra/main.bicep # Check syntax az deployment group validate \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --template-file ./infra/main.bicep \ --parameters ./infra/parameters.prod.json ``` @@ -751,7 +751,7 @@ az role assignment create \ **Problem:** `Cannot read deployment token` **Solution:** -1. Verify Static Web App exists in `secretsanta-qa` resource group +1. Verify Static Web App exists in `zavaexchangegift-qa` resource group 2. Check Azure CLI is authenticated with correct subscription 3. Verify step "Get Static Web App Token" succeeded @@ -761,8 +761,8 @@ az role assignment create \ ```bash # Verify Static Web App token az staticwebapp secrets list \ - --name secretsanta-qa \ - --resource-group secretsanta-qa + --name zavaexchangegift-qa \ + --resource-group zavaexchangegift-qa # Token should be returned successfully ``` @@ -818,7 +818,7 @@ Every 90 days: ```bash # Create new service principal az ad sp create-for-rbac \ - --name "secretsanta-github-cicd-new" \ + --name "zavaexchangegift-github-cicd-new" \ --role contributor \ --scopes /subscriptions/{subscription-id} @@ -953,7 +953,7 @@ A: Azure automatically regenerates them. Workflow handles this. --- -**Questions?** [Open an issue](https://github.com/dsanchezcr/secretsanta/issues) or [start a discussion](https://github.com/dsanchezcr/secretsanta/discussions). +**Questions?** [Open an issue](https://github.com/dsanchezcr/zavaexchangegift/issues) or [start a discussion](https://github.com/dsanchezcr/zavaexchangegift/discussions). ```` diff --git a/docs/local-development-setup.md b/docs/local-development-setup.md index 65602c8..2e44766 100644 --- a/docs/local-development-setup.md +++ b/docs/local-development-setup.md @@ -4,7 +4,7 @@ This document explains how the local development environment is automatically co ## Overview -When you set up Secret Santa locally, the system automatically creates and configures everything needed for development: +When you set up Zava Gift Exchange locally, the system automatically creates and configures everything needed for development: - ✅ Database connection (`local.settings.json`) - ✅ Environment variables @@ -24,8 +24,8 @@ When you clone and run the app locally: ```bash # Clone the repo -git clone https://github.com/dsanchezcr/secretsanta.git -cd secretsanta +git clone https://github.com/dsanchezcr/zavaexchangegift.git +cd zavaexchangegift # Option A: Use root setup script (recommended) npm run setup @@ -121,7 +121,7 @@ When the setup script runs, it creates this configuration: "COSMOS_ENDPOINT": "https://localhost:8081", "COSMOS_KEY": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", - "COSMOS_DATABASE_NAME": "secretsanta", + "COSMOS_DATABASE_NAME": "zavaexchangegift", "COSMOS_CONTAINER_NAME": "games", "APPLICATIONINSIGHTS_CONNECTION_STRING": "", @@ -143,7 +143,7 @@ When the setup script runs, it creates this configuration: |----------|-------|---------| | `COSMOS_ENDPOINT` | `https://localhost:8081` | Local emulator URL | | `COSMOS_KEY` | Default key | Emulator uses public, non-secret key | -| `COSMOS_DATABASE_NAME` | `secretsanta` | Database name | +| `COSMOS_DATABASE_NAME` | `zavaexchangegift` | Database name | | `COSMOS_CONTAINER_NAME` | `games` | Container name | | `APP_BASE_URL` | `http://localhost:5173` | Frontend URL | | `ENVIRONMENT` | `local` | Development mode | @@ -206,8 +206,8 @@ npm run setup ### Step 1: Clone ```bash -git clone https://github.com/dsanchezcr/secretsanta.git -cd secretsanta +git clone https://github.com/dsanchezcr/zavaexchangegift.git +cd zavaexchangegift ``` **Result:** diff --git a/docs/quick-reference.md b/docs/quick-reference.md index b30889d..650c837 100644 --- a/docs/quick-reference.md +++ b/docs/quick-reference.md @@ -86,7 +86,7 @@ az login # Create service principal az ad sp create-for-rbac \ - --name "secretsanta-github-cicd" \ + --name "zavaexchangegift-github-cicd" \ --role contributor \ --scopes /subscriptions/$(az account show --query id -o tsv) @@ -132,24 +132,24 @@ az account set --subscription "subscription-id" # Create resource group az group create \ - --name secretsanta \ + --name zavaexchangegift \ --location centralus # Create QA resource group (isolated from production) az group create \ - --name secretsanta-qa \ + --name zavaexchangegift-qa \ --location centralus # List resources az group list --output table -az resource list --resource-group secretsanta --output table +az resource list --resource-group zavaexchangegift --output table # Delete resource group -az group delete --name secretsanta --yes --no-wait +az group delete --name zavaexchangegift --yes --no-wait # View deployment history az deployment group list \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --output table ``` @@ -161,19 +161,19 @@ az bicep build --file ./infra/main.bicep # Validate deployment az deployment group validate \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --template-file ./infra/main.bicep \ --parameters ./infra/parameters.prod.json # Deploy QA infrastructure (isolated resource group) az deployment group create \ - --resource-group secretsanta-qa \ + --resource-group zavaexchangegift-qa \ --template-file ./infra/main.bicep \ --parameters ./infra/parameters.qa.json # Deploy Production infrastructure az deployment group create \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --template-file ./infra/main.bicep \ --parameters ./infra/parameters.prod.json ``` @@ -195,7 +195,7 @@ docker-compose logs -f azurite # Just Azurite # Azure resources logs az monitor activity-log list \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --output table # Application Insights logs @@ -242,7 +242,7 @@ az cost management query create \ ```bash # Create service principal and get JSON output az ad sp create-for-rbac \ - --name "secretsanta-github-cicd" \ + --name "zavaexchangegift-github-cicd" \ --role contributor \ --scopes /subscriptions/{subscription-id} @@ -257,7 +257,7 @@ az ad sp create-for-rbac \ ```bash # Create new service principal az ad sp create-for-rbac \ - --name "secretsanta-github-cicd-new" \ + --name "zavaexchangegift-github-cicd-new" \ --role contributor \ --scopes /subscriptions/{subscription-id} @@ -275,13 +275,13 @@ az ad sp delete --id {old-app-id} # QA environment (isolated resource group) az staticwebapp secrets list \ - --name secretsanta-qa \ - --resource-group secretsanta-qa + --name zavaexchangegift-qa \ + --resource-group zavaexchangegift-qa # Production environment az staticwebapp secrets list \ - --name secretsanta-prod \ - --resource-group secretsanta + --name zavaexchangegift-prod \ + --resource-group zavaexchangegift ``` --- @@ -422,13 +422,13 @@ gh workflow run ci-cd.yml -f environment=prod ```bash # Check recent deployments az deployment group list \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --query "[].{name:name, time:properties.timestamp, state:properties.provisioningState}" \ --output table # Detailed deployment info az deployment group show \ - --resource-group secretsanta \ + --resource-group zavaexchangegift \ --name ``` diff --git a/e2e/app.spec.ts b/e2e/app.spec.ts index 3abba85..ae4da50 100644 --- a/e2e/app.spec.ts +++ b/e2e/app.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test' /** - * Optimized E2E tests for Secret Santa + * Optimized E2E tests for Zava Gift Exchange * Focus on critical user flows only - not individual UI elements */ @@ -10,7 +10,7 @@ test.beforeEach(async ({ context }) => { // Set analytics declined in localStorage BEFORE any page loads // This prevents the cookie banner from appearing and blocking interactions await context.addInitScript(() => { - window.localStorage.setItem('secretsanta:analytics-declined', 'true') + window.localStorage.setItem('zavaexchangegift:analytics-declined', 'true') }) }) @@ -19,8 +19,8 @@ test.describe('Core User Flows', () => { test('should display home page with main actions', async ({ page }) => { await page.goto('/') - // Verify essential elements are present (includes Amigo Secreto for Spanish) - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + // Verify essential elements are present (includes Spanish translation) + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() await expect(page.getByRole('button', { name: /crear nuevo juego|create new game/i })).toBeVisible() await expect(page.getByPlaceholder(/código de 6 dígitos|6-digit code/i)).toBeVisible() await expect(page.getByRole('button', { name: /es|en/i })).toBeVisible() @@ -34,7 +34,7 @@ test.describe('Core User Flows', () => { await expect(page.getByText(/detalles del evento|event details/i)).toBeVisible() // Fill event details - await page.getByLabel(/nombre del evento|event name/i).fill('Test Secret Santa 2025') + await page.getByLabel(/nombre del evento|event name/i).fill('Test Gift Exchange 2025') await page.getByLabel(/monto del regalo|gift amount/i).fill('50') await page.getByLabel(/fecha del evento|event date/i).fill('2025-12-25') await page.getByLabel(/lugar del evento|event location/i).fill('Office Party') @@ -106,7 +106,7 @@ test.describe('Core User Flows', () => { await expect(page.getByText(/detalles del evento|event details/i)).toBeVisible() await page.getByRole('button', { name: /atrás|back/i }).click() - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() }) test('should require minimum 3 participants', async ({ page }) => { @@ -151,14 +151,14 @@ test.describe('Core User Flows', () => { await page.setViewportSize({ width: 375, height: 667 }) await page.goto('/') - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() await expect(page.getByRole('button', { name: /crear nuevo juego|create new game/i })).toBeVisible() // Test desktop viewport await page.setViewportSize({ width: 1920, height: 1080 }) await page.goto('/') - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() await expect(page.getByRole('button', { name: /crear nuevo juego|create new game/i })).toBeVisible() }) @@ -211,7 +211,7 @@ test.describe('Core User Flows', () => { // Navigate back to home await page.getByRole('button', { name: /back|atrás|retour/i }).click() - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() // Test participant guide via URL parameter await page.goto('/?view=participant-guide') @@ -232,7 +232,7 @@ test.describe('Core User Flows', () => { // Navigate back to home await page.getByRole('button', { name: /back|atrás|retour/i }).click() - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() // Test participant guide via path-based URL await page.goto('/participant-guide') @@ -458,7 +458,7 @@ test.describe('Error Handling and Token Entry', () => { // If the button is visible, click it and verify navigation if (await goHomeButton.isVisible({ timeout: 5000 }).catch(() => false)) { await goHomeButton.click() - await expect(page.getByRole('heading', { name: /secret santa|amigo secreto/i })).toBeVisible() + await expect(page.getByRole('heading', { name: /zava|intercambio/i })).toBeVisible() } }) diff --git a/favicon.ico b/favicon.ico index 3a2024a..5e16045 100644 Binary files a/favicon.ico and b/favicon.ico differ diff --git a/index.html b/index.html index 8596417..0525c55 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Secret Santa + Zava Gift Exchange diff --git a/infra/main.bicep b/infra/main.bicep index ab20455..256ad60 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -1,7 +1,7 @@ // ============================================================================ -// Secret Santa - Infrastructure as Code +// Zava Gift Exchange - Infrastructure as Code // ============================================================================ -// Infrastructure for Secret Santa gift exchange app +// Infrastructure for Zava Gift Exchange app // // Environment Strategy: // - PR: Ephemeral resource group per PR (auto-deleted on close) @@ -9,12 +9,12 @@ // - Cosmos DB: Serverless (pay per request) // - Email Service: Disabled // -// - QA: Isolated resource group (`secretsanta-qa`) +// - QA: Isolated resource group (`zavaexchangegift-qa`) // - Static Web App: Free tier // - Cosmos DB: Free tier (one per subscription, sufficient for testing) // - Email Service: Enabled (for full testing) // -// - Prod: Production resource group (`secretsanta`) +// - Prod: Production resource group (`zavaexchangegift`) // - Static Web App: Standard tier (SLA, custom domains) // - Cosmos DB: Serverless (unlimited scaling, pay per request) // - Email Service: Enabled @@ -27,7 +27,7 @@ // ============================================================================ @description('Project name used for resource naming') -param projectName string = 'secretsanta' +param projectName string = 'zavaexchangegift' @description('Azure region for resources') param location string = resourceGroup().location @@ -82,7 +82,7 @@ var communicationServiceName = 'ss-acs-${uniqueSuffix}' var emailServiceName = 'ss-email-${uniqueSuffix}' var logAnalyticsName = 'ss-logs-${uniqueSuffix}' var appInsightsName = 'ss-insights-${uniqueSuffix}' -var databaseName = 'secretsanta' +var databaseName = 'zavaexchangegift' var containerName = 'games' // Retention based on environment @@ -167,6 +167,8 @@ resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2024-11-15' = { capabilities: [ { name: 'EnableServerless' } ] + // Allow key-based authentication (required for Static Web App managed functions) + disableLocalAuth: false } } diff --git a/infra/main.json b/infra/main.json index 40feaec..0094e40 100644 --- a/infra/main.json +++ b/infra/main.json @@ -11,7 +11,7 @@ "parameters": { "projectName": { "type": "string", - "defaultValue": "secretsanta", + "defaultValue": "zavaexchangegift", "metadata": { "description": "Project name used for resource naming" } @@ -113,7 +113,7 @@ "emailServiceName": "[format('ss-email-{0}', variables('uniqueSuffix'))]", "logAnalyticsName": "[format('ss-logs-{0}', variables('uniqueSuffix'))]", "appInsightsName": "[format('ss-insights-{0}', variables('uniqueSuffix'))]", - "databaseName": "secretsanta", + "databaseName": "zavaexchangegift", "containerName": "games", "retentionDays": "[if(equals(parameters('environment'), 'prod'), 90, 30)]", "logAnalyticsSku": "PerGB2018", @@ -178,7 +178,8 @@ { "name": "EnableServerless" } - ] + ], + "disableLocalAuth": false } }, { diff --git a/infra/parameters.dev.json b/infra/parameters.dev.json index 7d73047..1cc8c9a 100644 --- a/infra/parameters.dev.json +++ b/infra/parameters.dev.json @@ -2,12 +2,12 @@ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { - "projectName": { "value": "secretsanta" }, + "projectName": { "value": "zavaexchangegift" }, "environment": { "value": "pr" }, "prNumber": { "value": "" }, "staticWebAppSku": { "value": "Free" }, "enableEmailService": { "value": false }, - "repositoryUrl": { "value": "https://github.com/dsanchezcr/secretsanta" }, + "repositoryUrl": { "value": "https://github.com/dsanchezcr/zavaexchangegift" }, "repositoryBranch": { "value": "main" } } } diff --git a/infra/parameters.prod.json b/infra/parameters.prod.json index d8df48e..2d7abf5 100644 --- a/infra/parameters.prod.json +++ b/infra/parameters.prod.json @@ -2,12 +2,12 @@ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { - "projectName": { "value": "secretsanta" }, + "projectName": { "value": "zavaexchangegift" }, "environment": { "value": "prod" }, "staticWebAppSku": { "value": "Standard" }, "enableEmailService": { "value": true }, "emailDataLocation": { "value": "United States" }, - "repositoryUrl": { "value": "https://github.com/dsanchezcr/secretsanta" }, + "repositoryUrl": { "value": "https://github.com/dsanchezcr/zavaexchangegift" }, "repositoryBranch": { "value": "main" } } } diff --git a/infra/parameters.qa.json b/infra/parameters.qa.json index ac4362f..6305eaf 100644 --- a/infra/parameters.qa.json +++ b/infra/parameters.qa.json @@ -2,12 +2,12 @@ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { - "projectName": { "value": "secretsanta" }, + "projectName": { "value": "zavaexchangegift" }, "environment": { "value": "qa" }, "staticWebAppSku": { "value": "Free" }, "enableEmailService": { "value": true }, "emailDataLocation": { "value": "United States" }, - "repositoryUrl": { "value": "https://github.com/dsanchezcr/secretsanta" }, + "repositoryUrl": { "value": "https://github.com/dsanchezcr/zavaexchangegift" }, "repositoryBranch": { "value": "main" } } } diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..b17acee Binary files /dev/null and b/logo.png differ diff --git a/package-lock.json b/package-lock.json index 883df1a..23b126e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "secretsanta", + "name": "zavaexchangegift", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "secretsanta", + "name": "zavaexchangegift", "version": "1.0.0", "dependencies": { "@phosphor-icons/react": "^2.1.7", @@ -124,7 +124,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -3749,7 +3748,6 @@ "integrity": "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3760,7 +3758,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3771,7 +3768,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -3817,7 +3813,6 @@ "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.50.0", "@typescript-eslint/types": "8.50.0", @@ -4169,7 +4164,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4286,7 +4280,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4636,8 +4629,7 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/embla-carousel-react": { "version": "8.6.0", @@ -4754,7 +4746,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5867,7 +5858,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -5960,7 +5950,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5991,7 +5980,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6023,7 +6011,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -6145,8 +6132,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -6315,8 +6301,7 @@ "version": "4.1.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.0", @@ -6400,7 +6385,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6598,7 +6582,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -6733,7 +6716,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.0.tgz", "integrity": "sha512-Bd5fw9wlIhtqCCxotZgdTOMwGm1a0u75wARVEY9HMs1X17trvA/lMi4+MGK5EUfYkXVTbX8UDiDKW4OgzHVUZw==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index ab663d3..9d78179 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "secretsanta", + "name": "zavaexchangegift", "private": true, "version": "1.0.0", - "description": "Secret Santa - A modern web app for organizing gift exchanges", + "description": "Zava Gift Exchange - A modern web app for organizing gift exchanges", "type": "module", "scripts": { "dev": "vite", diff --git a/scripts/deploy.ps1 b/scripts/deploy.ps1 index 55a4f8d..bb964df 100644 --- a/scripts/deploy.ps1 +++ b/scripts/deploy.ps1 @@ -1,7 +1,7 @@ #!/usr/bin/env pwsh <# .SYNOPSIS - One-command deployment script for Secret Santa to Azure + One-command deployment script for Zava Gift Exchange to Azure .DESCRIPTION Authenticates with Azure (az login), creates/updates resource group, @@ -33,7 +33,7 @@ param( $ErrorActionPreference = 'Stop' # Configuration -$projectName = 'secretsanta' +$projectName = 'zavaexchangegift' $location = 'centralus' $infraPath = './infra' @@ -42,17 +42,17 @@ $envConfig = @{ 'dev' = @{ 'sku' = 'Free' 'email' = $false - 'rg' = 'secretsanta-dev' + 'rg' = 'zavaexchangegift-dev' } 'qa' = @{ 'sku' = 'Free' 'email' = $true - 'rg' = 'secretsanta-qa' + 'rg' = 'zavaexchangegift-qa' } 'prod' = @{ 'sku' = 'Standard' 'email' = $true - 'rg' = 'secretsanta' + 'rg' = 'zavaexchangegift' } } @@ -62,7 +62,7 @@ $sku = $config['sku'] $emailEnabled = $config['email'] Write-Host "================================" -ForegroundColor Cyan -Write-Host "🚀 Secret Santa Deployment" -ForegroundColor Cyan +Write-Host "🚀 Zava Gift Exchange Deployment" -ForegroundColor Cyan Write-Host "================================" -ForegroundColor Cyan Write-Host "Environment: $Environment" -ForegroundColor Yellow Write-Host "Resource Group: $resourceGroup" -ForegroundColor Yellow diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 38b8938..51cb27c 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Secret Santa Deployment Script +# Zava Gift Exchange Deployment Script # # One-command deployment to Azure with automatic resource group creation # and infrastructure provisioning @@ -23,7 +23,7 @@ CYAN='\033[0;36m' NC='\033[0m' # No Color # Configuration -PROJECT_NAME="secretsanta" +PROJECT_NAME="zavaexchangegift" LOCATION="centralus" INFRA_PATH="./infra" @@ -66,9 +66,9 @@ declare -A EMAIL_MAP=( ) declare -A RG_MAP=( - [dev]="secretsanta-dev" - [qa]="secretsanta-qa" - [prod]="secretsanta" + [dev]="zavaexchangegift-dev" + [qa]="zavaexchangegift-qa" + [prod]="zavaexchangegift" ) RESOURCE_GROUP="${RG_MAP[$ENVIRONMENT]}" @@ -77,7 +77,7 @@ EMAIL_ENABLED="${EMAIL_MAP[$ENVIRONMENT]}" # Header echo -e "${CYAN}================================${NC}" -echo -e "${CYAN}🚀 Secret Santa Deployment${NC}" +echo -e "${CYAN}🚀 Zava Gift Exchange Deployment${NC}" echo -e "${CYAN}================================${NC}" echo -e "${YELLOW}Environment: $ENVIRONMENT${NC}" echo -e "${YELLOW}Resource Group: $RESOURCE_GROUP${NC}" diff --git a/scripts/setup-local-settings.js b/scripts/setup-local-settings.js index 443af43..98936d9 100644 --- a/scripts/setup-local-settings.js +++ b/scripts/setup-local-settings.js @@ -36,7 +36,7 @@ try { console.log('✓ Created api/local.settings.json from template'); console.log(' - Configured for local Cosmos DB emulator (https://localhost:8081)'); - console.log(' - Database: secretsanta'); + console.log(' - Database: zavaexchangegift'); console.log(' - Ready for local development!'); console.log(''); console.log('Next steps:'); diff --git a/src/components/AssignmentView.tsx b/src/components/AssignmentView.tsx index 2806f90..48ec61a 100644 --- a/src/components/AssignmentView.tsx +++ b/src/components/AssignmentView.tsx @@ -411,7 +411,7 @@ export function AssignmentView({ const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url - a.download = `secretsanta-${game.code}.png` + a.download = `zavaexchangegift-${game.code}.png` a.click() URL.revokeObjectURL(url) toast.dismiss() diff --git a/src/components/ErrorView.tsx b/src/components/ErrorView.tsx index 48f1b91..38ad484 100644 --- a/src/components/ErrorView.tsx +++ b/src/components/ErrorView.tsx @@ -44,7 +44,7 @@ export function ErrorView({ errorType, gameCode, onGoHome, onSubmitToken, emailC 'unexpected': 'An unexpected error occurred. Please try again or contact the organizer.', } - console.error(`[SecretSanta Error] ${errorMessages[errorType]}`) + console.error(`[ZavaExchangeGift Error] ${errorMessages[errorType]}`) const titleAndDescKeys: Record = { 'invalid-token': { title: 'errorInvalidToken', desc: 'errorInvalidTokenDesc' }, diff --git a/src/hooks/use-local-storage.ts b/src/hooks/use-local-storage.ts index 54c26f4..dcb8736 100644 --- a/src/hooks/use-local-storage.ts +++ b/src/hooks/use-local-storage.ts @@ -8,7 +8,7 @@ export function useLocalStorage( key: string, initialValue: T ): [T | undefined, (updater: T | ((prev: T | undefined) => T)) => void, () => void] { - const storageKey = `secretsanta:${key}` + const storageKey = `zavaexchangegift:${key}` // Get initial value from localStorage or use default const [storedValue, setStoredValue] = useState(() => { diff --git a/src/index.css b/src/index.css index c714edd..85042a4 100644 --- a/src/index.css +++ b/src/index.css @@ -8,28 +8,28 @@ } :root { - --background: oklch(0.98 0.01 75); - --foreground: oklch(0.25 0.02 20); + --background: oklch(0.99 0 0); + --foreground: oklch(0.15 0 0); --card: oklch(1 0 0); - --card-foreground: oklch(0.25 0.02 20); + --card-foreground: oklch(0.15 0 0); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.25 0.02 20); + --popover-foreground: oklch(0.15 0 0); - --primary: oklch(0.55 0.20 20); - --primary-foreground: oklch(0.98 0 0); - --secondary: oklch(0.60 0.15 155); - --secondary-foreground: oklch(0.98 0 0); - --accent: oklch(0.80 0.15 85); - --accent-foreground: oklch(0.25 0.02 20); + --primary: oklch(0.75 0.08 200); + --primary-foreground: oklch(0.15 0 0); + --secondary: oklch(0.85 0.04 200); + --secondary-foreground: oklch(0.15 0 0); + --accent: oklch(0.78 0.09 200); + --accent-foreground: oklch(0.15 0 0); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.98 0 0); - --muted: oklch(0.95 0.01 75); - --muted-foreground: oklch(0.50 0.02 20); - --border: oklch(0.90 0.01 75); - --input: oklch(0.90 0.01 75); - --ring: oklch(0.80 0.15 85); + --muted: oklch(0.95 0.01 200); + --muted-foreground: oklch(0.40 0.02 200); + --border: oklch(0.88 0.02 200); + --input: oklch(0.88 0.02 200); + --ring: oklch(0.78 0.09 200); --radius: 0.75rem; } diff --git a/src/lib/analytics.ts b/src/lib/analytics.ts index a2c5f66..8ab9cb6 100644 --- a/src/lib/analytics.ts +++ b/src/lib/analytics.ts @@ -14,10 +14,10 @@ const GA_ID_PATTERN = /^G-[A-Z0-9]+$/ const isProduction = import.meta.env.PROD // LocalStorage key for consent -const CONSENT_KEY = 'secretsanta:analytics-consent' +const CONSENT_KEY = 'zavaexchangegift:analytics-consent' // LocalStorage key for declined consent -const DECLINED_KEY = 'secretsanta:analytics-declined' +const DECLINED_KEY = 'zavaexchangegift:analytics-declined' /** * Check if user has given consent for analytics diff --git a/src/lib/translations/README.md b/src/lib/translations/README.md index 1326633..b290770 100644 --- a/src/lib/translations/README.md +++ b/src/lib/translations/README.md @@ -1,6 +1,6 @@ # Translations -This directory contains translation files for the Secret Santa application. +This directory contains translation files for the Zava Gift Exchange application. ## Structure @@ -91,7 +91,7 @@ Each translation file exports a single constant object with all the translation ```typescript export const en = { - appName: "Secret Santa", + appName: "Zava Gift Exchange", welcome: "Welcome!", // ... more translations } @@ -104,4 +104,4 @@ If you have questions about translations or need clarification on any strings, p - Reach out to the maintainers - Check existing translations in other languages for context -Thank you for helping make Secret Santa accessible to more people! 🎅🎁 +Thank you for helping make Zava Gift Exchange accessible to more people! 🎁 diff --git a/src/lib/translations/de.ts b/src/lib/translations/de.ts index 45c2a9c..2ef9f3b 100644 --- a/src/lib/translations/de.ts +++ b/src/lib/translations/de.ts @@ -1,7 +1,7 @@ export const de = { - appName: "Wichteln", + appName: "Zava Geschenkaustausch", welcome: "Willkommen!", - welcomeDesc: "Organisieren Sie Ihren Wichtelspiel einfach und spaßig", + welcomeDesc: "Organisieren Sie Ihren Geschenkaustausch einfach und spaßig", loading: "Wird geladen...", createGame: "Neues Spiel erstellen", joinGame: "Einem Spiel beitreten", @@ -21,7 +21,7 @@ export const de = { step3: "Konfiguration", eventName: "Name der Veranstaltung", - eventNamePlaceholder: "Z. B: Büro Weihnachtsfeier 2025", + eventNamePlaceholder: "Z. B: Büro Party 2025", giftAmount: "Geschenkbetrag", giftAmountPlaceholder: "Z. B: 20", currency: "Währung", @@ -94,8 +94,8 @@ export const de = { copyParticipantLink: "Link kopieren", participantLinkCopied: "Link kopiert!", shareOnSocialMedia: "In sozialen Medien teilen", - shareMessageTitle: "Treten Sie unserem Wichtelspiel bei!", - shareMessage: "Hallo! Treten Sie unserem Wichtelspiel \"{eventName}\" bei. Klicken Sie hier: {link}", + shareMessageTitle: "Treten Sie unserem Geschenkaustausch bei!", + shareMessage: "Hallo! Treten Sie unserem Geschenkaustausch \"{eventName}\" bei. Klicken Sie hier: {link}", shareOnWhatsApp: "Auf WhatsApp teilen", shareOnFacebook: "Auf Facebook teilen", shareOnX: "Auf X teilen", @@ -119,7 +119,7 @@ export const de = { copyInvitationLink: "Einladungslink kopieren", invitationLinkCopied: "Einladungslink kopiert!", joinViaInvitation: "Per Einladung beitreten", - joinGameTitle: "Secret Santa beitreten", + joinGameTitle: "Geschenkaustausch beitreten", joinGameDesc: "Füllen Sie Ihre Informationen aus, um an diesem Geschenkaustausch teilzunehmen", yourName: "Ihr Name", yourNamePlaceholder: "z.B.: Max Mustermann", @@ -160,7 +160,7 @@ export const de = { saveWish: "Wunsch speichern", wishSaved: "Wunsch gespeichert!", editWish: "Wunsch bearbeiten", - wishDescription: "Teilen Sie Ihrem geheimen Weihnachtsmann mit, was Sie erhalten möchten", + wishDescription: "Teilen Sie dem Schenkenden mit, was Sie erhalten möchten", wishHint: "Dieser Wunsch ist für denjenigen sichtbar, der dir schenkt", skipWish: "Überspringen", saveAndContinue: "Speichern und Fortfahren", @@ -324,7 +324,7 @@ export const de = { privacyTitle: "Datenschutzrichtlinie", privacySubtitle: "Wie wir Ihre Daten behandeln", privacyDataCollectionTitle: "Daten, die wir sammeln", - privacyDataCollectionDesc: "Bei der Verwendung von Wichteln sammeln wir die folgenden Informationen, um den Geschenkaustausch zum Laufen zu bringen:", + privacyDataCollectionDesc: "Bei der Verwendung von Zava Geschenkaustausch sammeln wir die folgenden Informationen, um den Geschenkaustausch zum Laufen zu bringen:", privacyDataItem1: "Teilnehmernamen", privacyDataItem2: "E-Mail-Adressen (optional, für Benachrichtigungen)", privacyDataItem3: "Geschenkwünsche (optional)", @@ -421,11 +421,11 @@ export const de = { // Organizer Guide guideOrganizerTitle: "Organisator-Leitfaden", - guideOrganizerSubtitle: "Lernen Sie, wie Sie Ihr Wichteln-Event erstellen und verwalten", + guideOrganizerSubtitle: "Lernen Sie, wie Sie Ihr Geschenkaustausch-Event erstellen und verwalten", guideStep1Title: "Schritt 1: Erstellen Sie Ihr Spiel", guideStep1Desc: "Klicken Sie auf 'Neues Spiel erstellen' auf der Startseite, um Ihren Geschenketausch einzurichten.", guideStep1Details: "Sie müssen Folgendes angeben:", - guideStep1Item1: "Eventname (z.B. 'Büro-Weihnachten 2025')", + guideStep1Item1: "Eventname (z.B. 'Büro-Party 2025')", guideStep1Item2: "Geschenkbetrag und Währung", guideStep1Item3: "Datum, Uhrzeit und Ort des Events", guideStep1Item4: "Optionale Notizen oder Anweisungen für Teilnehmer", @@ -437,7 +437,7 @@ export const de = { guideStep2Item3: "Optional einen Geschenkwunsch für sie hinzufügen - sie werden ihn sehen und können ihn behalten oder ändern", guideStep2Item4: "Tipp: Vergessen Sie nicht, sich selbst hinzuzufügen, wenn Sie mitmachen möchten!", guideStep3Title: "Schritt 3: Optionen konfigurieren", - guideStep3Desc: "Passen Sie an, wie Ihr Wichteln funktioniert.", + guideStep3Desc: "Passen Sie an, wie Ihr Geschenkaustausch funktioniert.", guideStep3Option1: "Neuzuweisung erlauben", guideStep3Option1Desc: "Ermöglicht Teilnehmern, bei Bedarf eine neue Zuweisung anzufordern", guideStep3Option2: "Teilnehmerliste schützen", @@ -471,9 +471,9 @@ export const de = { // Participant Guide guideParticipantTitle: "Teilnehmer-Leitfaden", - guideParticipantSubtitle: "Lernen Sie, wie Sie beim Wichteln teilnehmen", + guideParticipantSubtitle: "Lernen Sie, wie Sie beim Geschenkaustausch teilnehmen", guideJoinTitle: "So nehmen Sie teil", - guideJoinDesc: "Es gibt zwei Möglichkeiten, einem Wichteln beizutreten:", + guideJoinDesc: "Es gibt zwei Möglichkeiten, einem Geschenkaustausch beizutreten:", guideJoinOption1Title: "Option 1: Direkter Link", guideJoinOption1Desc: "Klicken Sie auf den vom Organisator geteilten Link. Sie werden direkt zu Ihrer Zuweisung weitergeleitet.", guideJoinOption2Title: "Option 2: Spielcode", @@ -484,11 +484,11 @@ export const de = { guideViewAssignmentItem2: "Sehen Sie deren Wunschliste, falls vorhanden", guideViewAssignmentItem3: "Sehen Sie Event-Details wie Datum, Ort und Geschenkbetrag", guideWishTitle: "Ihren Geschenkwunsch hinzufügen", - guideWishDesc: "Helfen Sie Ihrem Wichtel, indem Sie hinzufügen, was Sie sich wünschen!", + guideWishDesc: "Helfen Sie dem Schenkenden, indem Sie hinzufügen, was Sie sich wünschen!", guideWishItem1: "Wenn der Organisator einen Wunsch für Sie hinzugefügt hat, wird er automatisch angezeigt - Sie können ihn behalten oder ändern", guideWishItem2: "Seien Sie spezifisch, aber flexibel - geben Sie Optionen in verschiedenen Preisklassen an", guideWishItem3: "Sie können Ihren Wunsch jederzeit aktualisieren", - guideWishItem4: "Wenn Sie Ihren Wunsch ändern, wird Ihr Wichtel per E-Mail benachrichtigt (sofern er eine E-Mail-Adresse hat).", + guideWishItem4: "Wenn Sie Ihren Wunsch ändern, wird der Schenkende per E-Mail benachrichtigt (sofern er eine E-Mail-Adresse hat).", guideReassignTitle: "Neuzuweisung anfordern", guideReassignDesc: "Nicht zufrieden mit Ihrer Zuweisung? Sie können möglicherweise eine Änderung anfordern.", guideReassignItem1: "Nur verfügbar, wenn der Organisator diese Option aktiviert hat", @@ -504,7 +504,7 @@ export const de = { guideEmailTitle: "E-Mail-Benachrichtigungen", guideEmailDesc: "Wenn Sie Ihre E-Mail angegeben haben, erhalten Sie möglicherweise Benachrichtigungen über das Event, Erinnerungen oder Ihre Zuweisungsdetails.", guideParticipantTipsTitle: "Tipps für Teilnehmer", - guideParticipantTip1: "Fügen Sie Ihren Wunsch früh hinzu, damit Ihr Wichtel Zeit zum Einkaufen hat", + guideParticipantTip1: "Fügen Sie Ihren Wunsch früh hinzu, damit der Schenkende Zeit zum Einkaufen hat", guideParticipantTip2: "Halten Sie Ihre Zuweisung geheim - das ist der Spaß daran!", guideParticipantTip3: "Speichern Sie den Link als Lesezeichen oder bewahren Sie den Spielcode für einfachen Zugriff auf", } diff --git a/src/lib/translations/en.ts b/src/lib/translations/en.ts index d4a136d..1275071 100644 --- a/src/lib/translations/en.ts +++ b/src/lib/translations/en.ts @@ -1,5 +1,5 @@ export const en = { - appName: "Secret Santa", + appName: "Zava Gift Exchange", welcome: "Welcome!", welcomeDesc: "Organize your gift exchange easily and fun", loading: "Loading...", @@ -21,7 +21,7 @@ export const en = { step3: "Configuration", eventName: "Event Name", - eventNamePlaceholder: "E.g: Office Christmas 2025", + eventNamePlaceholder: "E.g: Office Party 2025", giftAmount: "Gift Amount", giftAmountPlaceholder: "E.g: 20", currency: "Currency", @@ -95,8 +95,8 @@ export const en = { copyParticipantLink: "Copy Link", participantLinkCopied: "Link copied!", shareOnSocialMedia: "Share on Social Media", - shareMessageTitle: "Join our Secret Santa!", - shareMessage: "Hi! Join our Secret Santa \"{eventName}\". Click here: {link}", + shareMessageTitle: "Join our gift exchange!", + shareMessage: "Hi! Join our gift exchange \"{eventName}\". Click here: {link}", shareOnWhatsApp: "Share on WhatsApp", shareOnFacebook: "Share on Facebook", shareOnX: "Share on X", @@ -121,7 +121,7 @@ export const en = { copyInvitationLink: "Copy Invitation Link", invitationLinkCopied: "Invitation link copied!", joinViaInvitation: "Join via Invitation", - joinGameTitle: "Join Secret Santa", + joinGameTitle: "Join Gift Exchange", joinGameDesc: "Fill in your information to join this gift exchange", yourName: "Your Name", yourNamePlaceholder: "E.g: John Smith", @@ -163,7 +163,7 @@ export const en = { saveWish: "Save Wish", wishSaved: "Wish saved!", editWish: "Edit Wish", - wishDescription: "Tell your Secret Santa what you'd like to receive", + wishDescription: "Tell your gift giver what you'd like to receive", wishHint: "This wish will be visible to whoever is gifting you", skipWish: "Skip", saveAndContinue: "Save and Continue", @@ -332,7 +332,7 @@ export const en = { privacyTitle: "Privacy Policy", privacySubtitle: "How we handle your data", privacyDataCollectionTitle: "Data We Collect", - privacyDataCollectionDesc: "When using Secret Santa, we collect the following information to make the gift exchange work:", + privacyDataCollectionDesc: "When using Zava Gift Exchange, we collect the following information to make the gift exchange work:", privacyDataItem1: "Participant names", privacyDataItem2: "Email addresses (optional, for notifications)", privacyDataItem3: "Gift wishes (optional)", @@ -443,11 +443,11 @@ export const en = { // Organizer Guide guideOrganizerTitle: "Organizer Guide", - guideOrganizerSubtitle: "Learn how to create and manage your Secret Santa event", + guideOrganizerSubtitle: "Learn how to create and manage your gift exchange event", guideStep1Title: "Step 1: Create Your Game", guideStep1Desc: "Click 'Create New Game' on the home page to start setting up your gift exchange.", guideStep1Details: "You'll need to provide:", - guideStep1Item1: "Event name (e.g., 'Office Christmas 2025')", + guideStep1Item1: "Event name (e.g., 'Office Party 2025')", guideStep1Item2: "Gift amount and currency", guideStep1Item3: "Event date, time, and location", guideStep1Item4: "Optional notes or instructions for participants", @@ -459,7 +459,7 @@ export const en = { guideStep2Item3: "Optionally add a gift wish for them - they'll see it and can keep or change it", guideStep2Item4: "Tip: Don't forget to add yourself if you want to participate!", guideStep3Title: "Step 3: Configure Options", - guideStep3Desc: "Customize how your Secret Santa game works.", + guideStep3Desc: "Customize how your gift exchange game works.", guideStep3Option1: "Allow Reassignment", guideStep3Option1Desc: "Let participants request a new assignment if needed", guideStep3Option2: "Protect Participant List", @@ -493,9 +493,9 @@ export const en = { // Participant Guide guideParticipantTitle: "Participant Guide", - guideParticipantSubtitle: "Learn how to join and participate in Secret Santa", + guideParticipantSubtitle: "Learn how to join and participate in gift exchanges", guideJoinTitle: "How to Join", - guideJoinDesc: "There are two ways to join a Secret Santa game:", + guideJoinDesc: "There are two ways to join a gift exchange:", guideJoinOption1Title: "Option 1: Direct Link", guideJoinOption1Desc: "Click the link shared by your organizer. You'll be taken directly to your assignment.", guideJoinOption2Title: "Option 2: Game Code", @@ -506,11 +506,11 @@ export const en = { guideViewAssignmentItem2: "View their wish list if they've added one", guideViewAssignmentItem3: "See event details like date, location, and gift amount", guideWishTitle: "Add Your Gift Wish", - guideWishDesc: "Help your Secret Santa by adding what you'd like to receive!", + guideWishDesc: "Help your gift giver by adding what you'd like to receive!", guideWishItem1: "If the organizer added a wish for you, it will appear automatically - you can keep it or change it", guideWishItem2: "Be specific but flexible - give options at different price points", guideWishItem3: "You can edit your wish at any time", - guideWishItem4: "When you change your wish, your Secret Santa will be notified by email (if they have provided an email address)", + guideWishItem4: "When you change your wish, your gift giver will be notified by email (if they have provided an email address)", guideReassignTitle: "Request Reassignment", guideReassignDesc: "Not happy with your assignment? You might be able to request a change.", guideReassignItem1: "Only available if the organizer enabled this option", @@ -526,7 +526,7 @@ export const en = { guideEmailTitle: "Email Notifications", guideEmailDesc: "If you provided your email, you may receive notifications about the event, reminders, or your assignment details.", guideParticipantTipsTitle: "Tips for Participants", - guideParticipantTip1: "Add your wish early so your Secret Santa has time to shop", + guideParticipantTip1: "Add your wish early so your gift giver has time to shop", guideParticipantTip2: "Keep your assignment secret - that's the fun part!", guideParticipantTip3: "Bookmark your link or save the game code for easy access", } diff --git a/src/lib/translations/es.ts b/src/lib/translations/es.ts index 8e9afff..88afa11 100644 --- a/src/lib/translations/es.ts +++ b/src/lib/translations/es.ts @@ -1,5 +1,5 @@ export const es = { - appName: "Amigo Secreto", + appName: "Intercambio de Regalos Zava", welcome: "¡Bienvenido!", welcomeDesc: "Organiza tu intercambio de regalos de forma fácil y divertida", loading: "Cargando...", @@ -21,7 +21,7 @@ export const es = { step3: "Configuración", eventName: "Nombre del Evento", - eventNamePlaceholder: "Ej: Navidad en la Oficina 2025", + eventNamePlaceholder: "Ej: Fiesta de la Oficina 2025", giftAmount: "Monto del Regalo", giftAmountPlaceholder: "Ej: 20", currency: "Moneda", @@ -95,8 +95,8 @@ export const es = { copyParticipantLink: "Copiar Enlace", participantLinkCopied: "¡Enlace copiado!", shareOnSocialMedia: "Compartir en Redes Sociales", - shareMessageTitle: "¡Te invito a nuestro Secret Santa!", - shareMessage: "¡Hola! Te invito a participar en nuestro Secret Santa \"{eventName}\". Haz clic aquí: {link}", + shareMessageTitle: "¡Te invito a nuestro intercambio de regalos!", + shareMessage: "¡Hola! Te invito a participar en nuestro intercambio de regalos \"{eventName}\". Haz clic aquí: {link}", shareOnWhatsApp: "Compartir en WhatsApp", shareOnFacebook: "Compartir en Facebook", shareOnX: "Compartir en X", @@ -121,7 +121,7 @@ export const es = { copyInvitationLink: "Copiar Enlace de Invitación", invitationLinkCopied: "¡Enlace de invitación copiado!", joinViaInvitation: "Unirse con Invitación", - joinGameTitle: "Unirse a Secret Santa", + joinGameTitle: "Unirse al intercambio de regalos", joinGameDesc: "Completa tu información para unirte a este intercambio de regalos", yourName: "Tu Nombre", yourNamePlaceholder: "Ej: Juan Pérez", @@ -163,7 +163,7 @@ export const es = { saveWish: "Guardar Deseo", wishSaved: "¡Deseo guardado!", editWish: "Editar Deseo", - wishDescription: "Cuéntale a tu amigo secreto qué te gustaría recibir", + wishDescription: "Cuéntale a quien te regala qué te gustaría recibir", wishHint: "Este deseo será visible para quien te regale", skipWish: "Omitir", saveAndContinue: "Guardar y Continuar", @@ -173,7 +173,7 @@ export const es = { noWishAddedYet: "Aún no has agregado tu deseo de regalo", wishDialogDesc: "Escribe qué te gustaría recibir como regalo", wishChangeWarningTitle: "Advertencia de Cambio de Deseo", - wishChangeWarningDesc: "Tu amigo secreto ya confirmó su asignación. Si cambias tu deseo ahora, se le notificará por correo electrónico para que pueda ver tu nueva preferencia.", + wishChangeWarningDesc: "Quien te regala ya confirmó su asignación. Si cambias tu deseo ahora, se le notificará por correo electrónico para que pueda ver tu nueva preferencia.", proceedWithChange: "Continuar con el Cambio", wishesAdded: "Deseos Agregados", giftWish: "Deseo de Regalo", @@ -332,7 +332,7 @@ export const es = { privacyTitle: "Política de Privacidad", privacySubtitle: "Cómo manejamos tus datos", privacyDataCollectionTitle: "Datos que Recopilamos", - privacyDataCollectionDesc: "Al usar Secret Santa, recopilamos la siguiente información para hacer funcionar el intercambio de regalos:", + privacyDataCollectionDesc: "Al usar Intercambio de Regalos Zava, recopilamos la siguiente información para hacer funcionar el intercambio de regalos:", privacyDataItem1: "Nombre de los participantes", privacyDataItem2: "Direcciones de correo electrónico (opcional, para notificaciones)", privacyDataItem3: "Deseos de regalos (opcional)", @@ -443,11 +443,11 @@ export const es = { // Organizer Guide guideOrganizerTitle: "Guía del Organizador", - guideOrganizerSubtitle: "Aprende cómo crear y administrar tu evento de Secret Santa", + guideOrganizerSubtitle: "Aprende cómo crear y administrar tu evento de intercambio de regalos", guideStep1Title: "Paso 1: Crea Tu Juego", guideStep1Desc: "Haz clic en 'Crear Nuevo Juego' en la página principal para comenzar a configurar tu intercambio de regalos.", guideStep1Details: "Necesitarás proporcionar:", - guideStep1Item1: "Nombre del evento (ej: 'Navidad Oficina 2025')", + guideStep1Item1: "Nombre del evento (ej: 'Fiesta de Oficina 2025')", guideStep1Item2: "Monto del regalo y moneda", guideStep1Item3: "Fecha, hora y lugar del evento", guideStep1Item4: "Notas o instrucciones opcionales para los participantes", @@ -459,7 +459,7 @@ export const es = { guideStep2Item3: "Opcionalmente agrega un deseo de regalo para ellos - lo verán y podrán mantenerlo o cambiarlo", guideStep2Item4: "Consejo: ¡No olvides agregarte a ti mismo si quieres participar!", guideStep3Title: "Paso 3: Configura Opciones", - guideStep3Desc: "Personaliza cómo funciona tu juego de Secret Santa.", + guideStep3Desc: "Personaliza cómo funciona tu intercambio de regalos.", guideStep3Option1: "Permitir Reasignación", guideStep3Option1Desc: "Permite que los participantes soliciten una nueva asignación si es necesario", guideStep3Option2: "Proteger Lista de Participantes", @@ -493,9 +493,9 @@ export const es = { // Participant Guide guideParticipantTitle: "Guía del Participante", - guideParticipantSubtitle: "Aprende cómo unirte y participar en Secret Santa", + guideParticipantSubtitle: "Aprende cómo unirte y participar en intercambios de regalos", guideJoinTitle: "Cómo Unirse", - guideJoinDesc: "Hay dos formas de unirse a un juego de Secret Santa:", + guideJoinDesc: "Hay dos formas de unirse a un intercambio de regalos:", guideJoinOption1Title: "Opción 1: Enlace Directo", guideJoinOption1Desc: "Haz clic en el enlace compartido por tu organizador. Irás directamente a tu asignación.", guideJoinOption2Title: "Opción 2: Código del Juego", @@ -506,11 +506,11 @@ export const es = { guideViewAssignmentItem2: "Ve su lista de deseos si han agregado una", guideViewAssignmentItem3: "Ve los detalles del evento como fecha, lugar y monto del regalo", guideWishTitle: "Agrega Tu Deseo de Regalo", - guideWishDesc: "¡Ayuda a tu Secret Santa agregando lo que te gustaría recibir!", + guideWishDesc: "¡Ayuda a quien te regala agregando lo que te gustaría recibir!", guideWishItem1: "Si el organizador agregó un deseo para ti, aparecerá automáticamente - puedes mantenerlo o cambiarlo", guideWishItem2: "Sé específico pero flexible - da opciones en diferentes rangos de precio", guideWishItem3: "Puedes editar tu deseo en cualquier momento", - guideWishItem4: "Cuando cambies tu deseo, tu amigo secreto será notificado por correo electrónico (si proporcionó una dirección de correo)", + guideWishItem4: "Cuando cambies tu deseo, quien te regala será notificado por correo electrónico (si proporcionó una dirección de correo)", guideReassignTitle: "Solicitar Reasignación", guideReassignDesc: "¿No estás contento con tu asignación? Podrías solicitar un cambio.", guideReassignItem1: "Solo disponible si el organizador habilitó esta opción", @@ -526,7 +526,7 @@ export const es = { guideEmailTitle: "Notificaciones por Correo", guideEmailDesc: "Si proporcionaste tu correo electrónico, podrías recibir notificaciones sobre el evento, recordatorios, o los detalles de tu asignación.", guideParticipantTipsTitle: "Consejos para Participantes", - guideParticipantTip1: "Agrega tu deseo temprano para que tu Secret Santa tenga tiempo de comprar", + guideParticipantTip1: "Agrega tu deseo temprano para que quien te regala tenga tiempo de comprar", guideParticipantTip2: "Mantén tu asignación en secreto - ¡esa es la parte divertida!", guideParticipantTip3: "Guarda tu enlace en favoritos o guarda el código del juego para fácil acceso", } diff --git a/src/lib/translations/fr.ts b/src/lib/translations/fr.ts index 0bd7d48..3b4088b 100644 --- a/src/lib/translations/fr.ts +++ b/src/lib/translations/fr.ts @@ -1,17 +1,17 @@ export const fr = { // Common - appName: "Ami Secret", - welcome: "Bienvenue dans Ami Secret", - welcomeDesc: "Organisez facilement des échanges de cadeaux Secret Santa", - description: "Un moyen amusant et facile d'organiser un échange de cadeaux Secret Santa", + appName: "Échange de Cadeaux Zava", + welcome: "Bienvenue dans Échange de Cadeaux Zava", + welcomeDesc: "Organisez facilement des échanges de cadeaux", + description: "Un moyen amusant et facile d'organiser un échange de cadeaux", language: "Langue", theme: "Thème", darkMode: "Mode Sombre", lightMode: "Mode Clair", // Home view - homeTitle: "Ami Secret", - homeDescription: "Organisez facilement des échanges de cadeaux Secret Santa", + homeTitle: "Échange de Cadeaux Zava", + homeDescription: "Organisez facilement des échanges de cadeaux", enterGameCode: "Entrez un code de jeu", enterCode: "Code du jeu", codePlaceholder: "Entrez votre code à 6 chiffres", @@ -24,7 +24,7 @@ export const fr = { // Create game view createGameTitle: "Créer un Jeu", - createGameDescription: "Organiser une session d'Ami Secret avec vos amis", + createGameDescription: "Organiser une session d'échange de cadeaux avec vos amis", eventDate: "Date de l'événement", eventLocation: "Lieu de l'événement", giftBudget: "Budget du cadeau", @@ -191,7 +191,7 @@ export const fr = { privacyTitle: "Politique de Confidentialité", privacySubtitle: "Comment nous traitons vos données", privacyDataCollectionTitle: "Données que Nous Collectons", - privacyDataCollectionDesc: "Lors de l'utilisation d'Ami Secret, nous collectons les informations suivantes pour faire fonctionner l'échange de cadeaux:", + privacyDataCollectionDesc: "Lors de l'utilisation d'Échange de Cadeaux Zava, nous collectons les informations suivantes pour faire fonctionner l'échange de cadeaux:", privacyDataItem1: "Noms des participants", privacyDataItem2: "Adresses e-mail (facultatif, pour les notifications)", privacyDataItem3: "Listes de souhaits de cadeaux (facultatif)", @@ -356,7 +356,7 @@ export const fr = { errorTitle: "Une erreur s'est produite", eventLocationPlaceholder: "Ex: Bureau Principal", eventName: "Nom de l'Événement", - eventNamePlaceholder: "Ex: Noël au Bureau 2025", + eventNamePlaceholder: "Ex: Fête au Bureau 2025", eventTime: "Heure de l'Événement", finish: "Terminer", gameCreated: "Jeu Créé!", @@ -377,7 +377,7 @@ export const fr = { copyInvitationLink: "Copier le Lien d'Invitation", invitationLinkCopied: "Lien d'invitation copié!", joinViaInvitation: "Rejoindre via Invitation", - joinGameTitle: "Rejoindre Secret Santa", + joinGameTitle: "Rejoindre l'échange de cadeaux", joinGameDesc: "Remplissez vos informations pour rejoindre cet échange de cadeaux", yourName: "Votre Nom", yourNamePlaceholder: "Ex: Jean Dupont", @@ -481,8 +481,8 @@ export const fr = { sendingEmail: "Envoi de l'email...", sendingEmails: "Envoi des emails...", shareCode: "Partager le Code", - shareMessage: "Bonjour! Rejoignez notre Secret Santa \"{eventName}\". Cliquez ici: {link}", - shareMessageTitle: "Rejoignez notre Secret Santa!", + shareMessage: "Bonjour! Rejoignez notre échange de cadeaux \"{eventName}\". Cliquez ici: {link}", + shareMessageTitle: "Rejoignez notre échange de cadeaux!", shareOnFacebook: "Partager sur Facebook", shareOnMessenger: "Partager sur Messenger", shareOnSocialMedia: "Partager sur les Réseaux Sociaux", @@ -500,7 +500,7 @@ export const fr = { tryAgain: "Réessayer", updateAndContinue: "Mettre à Jour et Continuer", usedReassignment: "Ont utilisé la réassignation", - wishDescription: "Dites à votre Secret Santa ce que vous aimeriez recevoir", + wishDescription: "Dites à qui vous offre ce que vous aimeriez recevoir", wishDialogDesc: "Écrivez ce que vous aimeriez recevoir comme cadeau", wishChangeWarningTitle: "Avertissement de Changement de Souhait", wishChangeWarningDesc: "Votre donneur secret a déjà confirmé son attribution. Si vous changez votre souhait maintenant, il sera notifié par e-mail afin qu'il puisse voir votre nouvelle préférence.", @@ -522,11 +522,11 @@ export const fr = { // Organizer Guide guideOrganizerTitle: "Guide de l'Organisateur", - guideOrganizerSubtitle: "Apprenez à créer et gérer votre événement Secret Santa", + guideOrganizerSubtitle: "Apprenez à créer et gérer votre événement d'échange de cadeaux", guideStep1Title: "Étape 1: Créez Votre Jeu", guideStep1Desc: "Cliquez sur 'Créer un Nouveau Jeu' sur la page d'accueil pour commencer à configurer votre échange de cadeaux.", guideStep1Details: "Vous devrez fournir:", - guideStep1Item1: "Nom de l'événement (ex: 'Noël au Bureau 2025')", + guideStep1Item1: "Nom de l'événement (ex: 'Fête au Bureau 2025')", guideStep1Item2: "Montant du cadeau et devise", guideStep1Item3: "Date, heure et lieu de l'événement", guideStep1Item4: "Notes ou instructions optionnelles pour les participants", @@ -538,7 +538,7 @@ export const fr = { guideStep2Item3: "Ajoutez éventuellement un souhait de cadeau pour eux - ils le verront et pourront le garder ou le modifier", guideStep2Item4: "Conseil: N'oubliez pas de vous ajouter si vous voulez participer!", guideStep3Title: "Étape 3: Configurez les Options", - guideStep3Desc: "Personnalisez le fonctionnement de votre jeu Secret Santa.", + guideStep3Desc: "Personnalisez le fonctionnement de votre échange de cadeaux.", guideStep3Option1: "Permettre la Réattribution", guideStep3Option1Desc: "Permet aux participants de demander une nouvelle attribution si nécessaire", guideStep3Option2: "Protéger la Liste des Participants", @@ -572,9 +572,9 @@ export const fr = { // Participant Guide guideParticipantTitle: "Guide du Participant", - guideParticipantSubtitle: "Apprenez à rejoindre et participer au Secret Santa", + guideParticipantSubtitle: "Apprenez à rejoindre et participer aux échanges de cadeaux", guideJoinTitle: "Comment Rejoindre", - guideJoinDesc: "Il y a deux façons de rejoindre un jeu Secret Santa:", + guideJoinDesc: "Il y a deux façons de rejoindre un échange de cadeaux:", guideJoinOption1Title: "Option 1: Lien Direct", guideJoinOption1Desc: "Cliquez sur le lien partagé par votre organisateur. Vous serez dirigé directement vers votre attribution.", guideJoinOption2Title: "Option 2: Code du Jeu", @@ -585,11 +585,11 @@ export const fr = { guideViewAssignmentItem2: "Voyez leur liste de souhaits s'ils en ont ajouté une", guideViewAssignmentItem3: "Voyez les détails de l'événement comme la date, le lieu et le montant du cadeau", guideWishTitle: "Ajoutez Votre Souhait de Cadeau", - guideWishDesc: "Aidez votre Secret Santa en ajoutant ce que vous aimeriez recevoir!", + guideWishDesc: "Aidez qui vous offre en ajoutant ce que vous aimeriez recevoir!", guideWishItem1: "Si l'organisateur a ajouté un souhait pour vous, il apparaîtra automatiquement - vous pouvez le garder ou le changer", guideWishItem2: "Soyez spécifique mais flexible - donnez des options à différents prix", guideWishItem3: "Vous pouvez modifier votre souhait à tout moment", - guideWishItem4: "Si vous changez votre souhait, votre Secret Santa sera notifié par e-mail (s'il a renseigné son adresse e-mail).", + guideWishItem4: "Si vous changez votre souhait, qui vous offre sera notifié par e-mail (s'il a renseigné son adresse e-mail).", guideReassignTitle: "Demander une Réattribution", guideReassignDesc: "Pas satisfait de votre attribution? Vous pouvez peut-être demander un changement.", guideReassignItem1: "Disponible uniquement si l'organisateur a activé cette option", @@ -605,7 +605,7 @@ export const fr = { guideEmailTitle: "Notifications par Email", guideEmailDesc: "Si vous avez fourni votre email, vous pourriez recevoir des notifications sur l'événement, des rappels ou les détails de votre attribution.", guideParticipantTipsTitle: "Conseils pour les Participants", - guideParticipantTip1: "Ajoutez votre souhait tôt pour que votre Secret Santa ait le temps de faire ses achats", + guideParticipantTip1: "Ajoutez votre souhait tôt pour que qui vous offre ait le temps de faire ses achats", guideParticipantTip2: "Gardez votre attribution secrète - c'est la partie amusante!", guideParticipantTip3: "Mettez votre lien en favori ou gardez le code du jeu pour un accès facile", } diff --git a/src/lib/translations/it.ts b/src/lib/translations/it.ts index 7c27fcc..db971ea 100644 --- a/src/lib/translations/it.ts +++ b/src/lib/translations/it.ts @@ -1,9 +1,9 @@ export const it = { // Common - appName: "Amico Segreto", + appName: "Scambio Regali Zava", welcome: "Benvenuto in Amico Segreto", - welcomeDesc: "Organizza facilmente scambi di regali Secret Santa", - description: "Un modo divertente e facile per organizzare uno scambio di regali Secret Santa", + welcomeDesc: "Organizza facilmente scambi di regali", + description: "Un modo divertente e facile per organizzare uno scambio di regali", language: "Lingua", theme: "Tema", darkMode: "Modalità Scura", @@ -11,7 +11,7 @@ export const it = { // Home view homeTitle: "Amico Segreto", - homeDescription: "Organizza facilmente scambi di regali Secret Santa", + homeDescription: "Organizza facilmente scambi di regali", enterGameCode: "Inserisci un codice gioco", enterCode: "Codice Gioco", codePlaceholder: "Inserisci il tuo codice a 6 cifre", @@ -356,7 +356,7 @@ export const it = { errorTitle: "Qualcosa è andato storto", eventLocationPlaceholder: "Es: Ufficio Principale", eventName: "Nome Evento", - eventNamePlaceholder: "Es: Natale in Ufficio 2025", + eventNamePlaceholder: "Es: Festa in Ufficio 2025", eventTime: "Ora Evento", finish: "Fine", gameCreated: "Gioco Creato!", @@ -377,7 +377,7 @@ export const it = { copyInvitationLink: "Copia Link di Invito", invitationLinkCopied: "Link di invito copiato!", joinViaInvitation: "Unisciti tramite Invito", - joinGameTitle: "Unisciti a Secret Santa", + joinGameTitle: "Unisciti allo scambio di regali", joinGameDesc: "Compila le tue informazioni per unirti a questo scambio di regali", yourName: "Il Tuo Nome", yourNamePlaceholder: "Es: Mario Rossi", @@ -481,8 +481,8 @@ export const it = { sendingEmail: "Invio email in corso...", sendingEmails: "Invio email in corso...", shareCode: "Condividi Codice", - shareMessage: "Ciao! Unisciti al nostro Secret Santa \"{eventName}\". Clicca qui: {link}", - shareMessageTitle: "Unisciti al nostro Secret Santa!", + shareMessage: "Ciao! Unisciti al nostro scambio di regali \"{eventName}\". Clicca qui: {link}", + shareMessageTitle: "Unisciti al nostro scambio di regali!", shareOnFacebook: "Condividi su Facebook", shareOnMessenger: "Condividi su Messenger", shareOnSocialMedia: "Condividi sui Social Media", @@ -500,7 +500,7 @@ export const it = { tryAgain: "Riprova", updateAndContinue: "Aggiorna e Continua", usedReassignment: "Ha usato la riassegnazione", - wishDescription: "Dì al tuo Secret Santa cosa vorresti ricevere", + wishDescription: "Dì a chi ti regala cosa vorresti ricevere", wishDialogDesc: "Scrivi cosa vorresti ricevere come regalo", wishChangeWarningTitle: "Avviso di Cambio Desiderio", wishChangeWarningDesc: "Il tuo donatore segreto ha già confermato il suo incarico. Se cambi il tuo desiderio ora, verrà notificato via email in modo che possa vedere la tua nuova preferenza.", @@ -522,11 +522,11 @@ export const it = { // Organizer Guide guideOrganizerTitle: "Guida per l'Organizzatore", - guideOrganizerSubtitle: "Impara a creare e gestire il tuo evento Secret Santa", + guideOrganizerSubtitle: "Impara a creare e gestire il tuo evento di scambio di regali", guideStep1Title: "Passo 1: Crea il Tuo Gioco", guideStep1Desc: "Clicca su 'Crea un Nuovo Gioco' nella pagina principale per iniziare a configurare il tuo scambio di regali.", guideStep1Details: "Dovrai fornire:", - guideStep1Item1: "Nome dell'evento (es: 'Natale in Ufficio 2025')", + guideStep1Item1: "Nome dell'evento (es: 'Festa in Ufficio 2025')", guideStep1Item2: "Importo del regalo e valuta", guideStep1Item3: "Data, ora e luogo dell'evento", guideStep1Item4: "Note o istruzioni opzionali per i partecipanti", @@ -538,7 +538,7 @@ export const it = { guideStep2Item3: "Opzionalmente aggiungi un desiderio di regalo per loro - lo vedranno e potranno mantenerlo o cambiarlo", guideStep2Item4: "Suggerimento: Non dimenticare di aggiungere te stesso se vuoi partecipare!", guideStep3Title: "Passo 3: Configura le Opzioni", - guideStep3Desc: "Personalizza come funziona il tuo gioco Secret Santa.", + guideStep3Desc: "Personalizza come funziona il tuo scambio di regali.", guideStep3Option1: "Consenti Riassegnazione", guideStep3Option1Desc: "Permette ai partecipanti di richiedere una nuova assegnazione se necessario", guideStep3Option2: "Proteggi la Lista dei Partecipanti", @@ -572,9 +572,9 @@ export const it = { // Participant Guide guideParticipantTitle: "Guida per il Partecipante", - guideParticipantSubtitle: "Impara a partecipare al Secret Santa", + guideParticipantSubtitle: "Impara a partecipare allo scambio di regali", guideJoinTitle: "Come Partecipare", - guideJoinDesc: "Ci sono due modi per partecipare a un gioco Secret Santa:", + guideJoinDesc: "Ci sono due modi per partecipare a uno scambio di regali:", guideJoinOption1Title: "Opzione 1: Link Diretto", guideJoinOption1Desc: "Clicca sul link condiviso dal tuo organizzatore. Verrai portato direttamente alla tua assegnazione.", guideJoinOption2Title: "Opzione 2: Codice del Gioco", @@ -585,11 +585,11 @@ export const it = { guideViewAssignmentItem2: "Vedi la loro lista dei desideri se ne hanno aggiunta una", guideViewAssignmentItem3: "Vedi i dettagli dell'evento come data, luogo e importo del regalo", guideWishTitle: "Aggiungi il Tuo Desiderio di Regalo", - guideWishDesc: "Aiuta il tuo Secret Santa aggiungendo cosa vorresti ricevere!", + guideWishDesc: "Aiuta chi ti regala aggiungendo cosa vorresti ricevere!", guideWishItem1: "Se l'organizzatore ha aggiunto un desiderio per te, apparirà automaticamente - puoi mantenerlo o cambiarlo", guideWishItem2: "Sii specifico ma flessibile - dai opzioni a diversi prezzi", guideWishItem3: "Puoi modificare il tuo desiderio in qualsiasi momento", - guideWishItem4: "Ogni volta che cambi il tuo desiderio, il tuo Secret Santa verrà notificato via email (se ha fornito un indirizzo email).", + guideWishItem4: "Ogni volta che cambi il tuo desiderio, chi ti regala verrà notificato via email (se ha fornito un indirizzo email).", guideReassignTitle: "Richiedi una Riassegnazione", guideReassignDesc: "Non sei soddisfatto della tua assegnazione? Potresti richiedere un cambio.", guideReassignItem1: "Disponibile solo se l'organizzatore ha abilitato questa opzione", @@ -605,7 +605,7 @@ export const it = { guideEmailTitle: "Notifiche Email", guideEmailDesc: "Se hai fornito la tua email, potresti ricevere notifiche sull'evento, promemoria o i dettagli della tua assegnazione.", guideParticipantTipsTitle: "Suggerimenti per i Partecipanti", - guideParticipantTip1: "Aggiungi il tuo desiderio presto così il tuo Secret Santa ha tempo per fare acquisti", + guideParticipantTip1: "Aggiungi il tuo desiderio presto così chi ti regala ha tempo per fare acquisti", guideParticipantTip2: "Mantieni segreta la tua assegnazione - è il bello!", guideParticipantTip3: "Aggiungi il link ai preferiti o conserva il codice del gioco per un accesso facile", } diff --git a/src/lib/translations/ja.ts b/src/lib/translations/ja.ts index cd866e7..c892372 100644 --- a/src/lib/translations/ja.ts +++ b/src/lib/translations/ja.ts @@ -1,17 +1,17 @@ export const ja = { // Common - appName: "シークレットサンタ", - welcome: "シークレットサンタへようこそ", + appName: "Zava ギフト交換", + welcome: "ギフト交換へようこそ", welcomeDesc: "ギフト交換を簡単に楽しく整理", - description: "シークレットサンタのギフト交換を楽しく簡単に開催できます", + description: "ギフト交換を楽しく簡単に開催できます", language: "言語", theme: "テーマ", darkMode: "ダークモード", lightMode: "ライトモード", // Home view - homeTitle: "シークレットサンタ", - homeDescription: "シークレットサンタのギフト交換を簡単に開催", + homeTitle: "Zava ギフト交換", + homeDescription: "ギフト交換を簡単に開催", enterGameCode: "ゲームコードを入力", enterCode: "ゲームコード", codePlaceholder: "6桁のコードを入力", @@ -24,7 +24,7 @@ export const ja = { // Create game view createGameTitle: "ゲームを作成", - createGameDescription: "友人とシークレットサンタセッションを開催", + createGameDescription: "友人とギフト交換セッションを開催", eventDate: "イベント日時", eventLocation: "イベント場所", giftBudget: "ギフト予算", @@ -191,7 +191,7 @@ export const ja = { privacyTitle: "プライバシーポリシー", privacySubtitle: "あなたのデータの取り扱い", privacyDataCollectionTitle: "収集するデータ", - privacyDataCollectionDesc: "シークレットサンタを使用する際、ギフト交換を機能させるために以下の情報を収集します:", + privacyDataCollectionDesc: "Zava ギフト交換を使用する際、ギフト交換を機能させるために以下の情報を収集します:", privacyDataItem1: "参加者の名前", privacyDataItem2: "メールアドレス(オプション、通知用)", privacyDataItem3: "ギフトウィッシュリスト(オプション)", @@ -356,7 +356,7 @@ export const ja = { errorTitle: "何か問題が発生しました", eventLocationPlaceholder: "例: 本社", eventName: "イベント名", - eventNamePlaceholder: "例: オフィスクリスマス2025", + eventNamePlaceholder: "例: オフィスパーティ2025", eventTime: "イベント時間", finish: "終了", gameCreated: "ゲームが作成されました!", @@ -377,7 +377,7 @@ export const ja = { copyInvitationLink: "招待リンクをコピー", invitationLinkCopied: "招待リンクがコピーされました!", joinViaInvitation: "招待で参加", - joinGameTitle: "Secret Santaに参加", + joinGameTitle: "ギフト交換に参加", joinGameDesc: "このギフト交換に参加するための情報を入力してください", yourName: "あなたの名前", yourNamePlaceholder: "例: 田中太郎", @@ -481,8 +481,8 @@ export const ja = { sendingEmail: "メール送信中...", sendingEmails: "メール送信中...", shareCode: "コードを共有", - shareMessage: "こんにちは! \"{eventName}\"のシークレットサンタに参加してください。ここをクリック: {link}", - shareMessageTitle: "シークレットサンタに参加してください!", + shareMessage: "こんにちは! \"{eventName}\"のギフト交換に参加してください。ここをクリック: {link}", + shareMessageTitle: "ギフト交換に参加してください!", shareOnFacebook: "Facebookで共有", shareOnMessenger: "Messengerで共有", shareOnSocialMedia: "ソーシャルメディアで共有", @@ -500,10 +500,10 @@ export const ja = { tryAgain: "もう一度試してください", updateAndContinue: "更新して続行", usedReassignment: "再割り当てを使用しました", - wishDescription: "Secret Santaに受け取りたいものを伝えてください", + wishDescription: "贈り主に受け取りたいものを伝えてください", wishDialogDesc: "ギフトとして受け取りたいものを書いてください", wishChangeWarningTitle: "希望変更の警告", - wishChangeWarningDesc: "あなたのシークレットサンタはすでに割り当てを確認しています。今希望を変更すると、新しい希望が表示されるように電子メールで通知されます。", + wishChangeWarningDesc: "あなたの贈り主はすでに割り当てを確認しています。今希望を変更すると、新しい希望が表示されるように電子メールで通知されます。", proceedWithChange: "変更を続行", wishHint: "この希望は、あなたにギフトを贈る人に表示されます", wishSaved: "希望が保存されました!", @@ -522,11 +522,11 @@ export const ja = { // Organizer Guide guideOrganizerTitle: "主催者ガイド", - guideOrganizerSubtitle: "Secret Santaイベントの作成と管理方法を学ぶ", + guideOrganizerSubtitle: "ギフト交換イベントの作成と管理方法を学ぶ", guideStep1Title: "ステップ1: ゲームを作成", guideStep1Desc: "ホームページの「新しいゲームを作成」をクリックして、ギフト交換の設定を開始します。", guideStep1Details: "以下の情報が必要です:", - guideStep1Item1: "イベント名(例:'オフィスクリスマス2025')", + guideStep1Item1: "イベント名(例:'オフィスパーティ2025')", guideStep1Item2: "ギフト金額と通貨", guideStep1Item3: "イベントの日付、時間、場所", guideStep1Item4: "参加者へのオプションのメモや指示", @@ -538,7 +538,7 @@ export const ja = { guideStep2Item3: "オプションで彼らのギフト希望を追加 - 彼らはそれを見て、保持または変更できます", guideStep2Item4: "ヒント:参加する場合は、自分を追加することを忘れずに!", guideStep3Title: "ステップ3: オプションを設定", - guideStep3Desc: "Secret Santaゲームの動作をカスタマイズします。", + guideStep3Desc: "ギフト交換の動作をカスタマイズします。", guideStep3Option1: "再割り当てを許可", guideStep3Option1Desc: "参加者が必要に応じて新しい割り当てを要求できます", guideStep3Option2: "参加者リストを保護", @@ -572,9 +572,9 @@ export const ja = { // Participant Guide guideParticipantTitle: "参加者ガイド", - guideParticipantSubtitle: "Secret Santaへの参加方法を学ぶ", + guideParticipantSubtitle: "ギフト交換への参加方法を学ぶ", guideJoinTitle: "参加方法", - guideJoinDesc: "Secret Santaゲームに参加する2つの方法:", + guideJoinDesc: "ギフト交換に参加する2つの方法:", guideJoinOption1Title: "オプション1: ダイレクトリンク", guideJoinOption1Desc: "主催者から共有されたリンクをクリック。割り当てに直接移動します。", guideJoinOption2Title: "オプション2: ゲームコード", @@ -585,11 +585,11 @@ export const ja = { guideViewAssignmentItem2: "追加されている場合は希望リストを確認", guideViewAssignmentItem3: "日付、場所、ギフト金額などのイベント詳細を確認", guideWishTitle: "ギフト希望を追加", - guideWishDesc: "受け取りたいものを追加して、Secret Santaを手助け!", + guideWishDesc: "受け取りたいものを追加して、贈り主を手助け!", guideWishItem1: "主催者が希望を追加している場合、自動的に表示されます - そのまま使用するか変更できます", guideWishItem2: "具体的でありながら柔軟に - 異なる価格帯のオプションを提供", guideWishItem3: "いつでも希望を更新可能", - guideWishItem4: "希望を更新すると、Secret Santa(贈り主)にメールで通知されます(メールアドレスが登録されている場合)。", + guideWishItem4: "希望を更新すると、贈り主にメールで通知されます(メールアドレスが登録されている場合)。", guideReassignTitle: "再割り当てをリクエスト", guideReassignDesc: "割り当てに満足していない?変更をリクエストできるかもしれません。", guideReassignItem1: "主催者がこのオプションを有効にしている場合のみ利用可能", @@ -605,7 +605,7 @@ export const ja = { guideEmailTitle: "メール通知", guideEmailDesc: "メールを提供した場合、イベントに関する通知、リマインダー、または割り当ての詳細を受け取る可能性があります。", guideParticipantTipsTitle: "参加者へのヒント", - guideParticipantTip1: "Secret Santaに買い物の時間を与えるため、早めに希望を追加", + guideParticipantTip1: "贈り主に買い物の時間を与えるため、早めに希望を追加", guideParticipantTip2: "割り当ては秘密に - それが楽しみ!", guideParticipantTip3: "簡単にアクセスできるようにリンクをブックマークするかゲームコードを保存", } diff --git a/src/lib/translations/nl.ts b/src/lib/translations/nl.ts index 40b484d..ef2d8dc 100644 --- a/src/lib/translations/nl.ts +++ b/src/lib/translations/nl.ts @@ -1,5 +1,5 @@ export const nl = { - appName: "Secret Santa", + appName: "Zava Cadeauwisseling", welcome: "Welkom!", welcomeDesc: "Organiseer uw cadeautjesuitwisseling gemakkelijk en leuk", loading: "Laden...", @@ -21,7 +21,7 @@ export const nl = { step3: "Configuratie", eventName: "Naam van het evenement", - eventNamePlaceholder: "Bijv: Kantoor Kerstfeest 2025", + eventNamePlaceholder: "Bijv: Kantoor Feest 2025", giftAmount: "Cadeau bedrag", giftAmountPlaceholder: "Bijv: 20", currency: "Valuta", @@ -94,8 +94,8 @@ export const nl = { copyParticipantLink: "Link kopiëren", participantLinkCopied: "Link gekopieerd!", shareOnSocialMedia: "Delen op sociale media", - shareMessageTitle: "Doe mee aan ons Secret Santa!", - shareMessage: "Hallo! Doe mee aan ons Secret Santa \"{eventName}\". Klik hier: {link}", + shareMessageTitle: "Doe mee aan onze cadeauwisseling!", + shareMessage: "Hallo! Doe mee aan onze cadeauwisseling \"{eventName}\". Klik hier: {link}", shareOnWhatsApp: "Op WhatsApp delen", shareOnFacebook: "Op Facebook delen", shareOnX: "Op X delen", @@ -119,7 +119,7 @@ export const nl = { copyInvitationLink: "Kopieer uitnodigingslink", invitationLinkCopied: "Uitnodigingslink gekopieerd!", joinViaInvitation: "Deelnemen via uitnodiging", - joinGameTitle: "Deelnemen aan Secret Santa", + joinGameTitle: "Deelnemen aan cadeauwisseling", joinGameDesc: "Vul uw gegevens in om deel te nemen aan deze cadeauruil", yourName: "Uw naam", yourNamePlaceholder: "bijv.: Jan Jansen", @@ -160,7 +160,7 @@ export const nl = { saveWish: "Wens opslaan", wishSaved: "Wens opgeslagen!", editWish: "Wens bewerken", - wishDescription: "Vertel uw geheime Kerstman wat u wilt ontvangen", + wishDescription: "Vertel uw schenker wat u wilt ontvangen", wishHint: "Deze wens is zichtbaar voor iemand die jou iets geeft", skipWish: "Overslaan", saveAndContinue: "Opslaan en doorgaan", @@ -170,7 +170,7 @@ export const nl = { noWishAddedYet: "U heeft nog geen cadeauwens toegevoegd", wishDialogDesc: "Schrijf wat u als cadeau wilt ontvangen", wishChangeWarningTitle: "Waarschuwing voor wenswijziging", - wishChangeWarningDesc: "Uw geheime Kerstman heeft zijn toewijzing al bevestigd. Als u uw wens nu wijzigt, wordt hij per e-mail op de hoogte gesteld zodat hij uw nieuwe voorkeur kan zien.", + wishChangeWarningDesc: "Uw schenker heeft zijn toewijzing al bevestigd. Als u uw wens nu wijzigt, wordt hij per e-mail op de hoogte gesteld zodat hij uw nieuwe voorkeur kan zien.", proceedWithChange: "Doorgaan met wijziging", wishesAdded: "Wensen toegevoegd", giftWish: "Cadeauwens", @@ -324,7 +324,7 @@ export const nl = { privacyTitle: "Privacybeleid", privacySubtitle: "Hoe wij uw gegevens behandelen", privacyDataCollectionTitle: "Gegevens die wij verzamelen", - privacyDataCollectionDesc: "Bij gebruik van Secret Santa verzamelen wij de volgende informatie om de cadeautjesuitwisseling te laten werken:", + privacyDataCollectionDesc: "Bij gebruik van Zava Cadeauwisseling verzamelen wij de volgende informatie om de cadeautjesuitwisseling te laten werken:", privacyDataItem1: "Deelnemersnamen", privacyDataItem2: "E-mailadressen (optioneel, voor meldingen)", privacyDataItem3: "Cadeauwensen (optioneel)", @@ -421,11 +421,11 @@ export const nl = { // Organizer Guide guideOrganizerTitle: "Organisatorgids", - guideOrganizerSubtitle: "Leer hoe u uw Secret Santa-evenement maakt en beheert", + guideOrganizerSubtitle: "Leer hoe u uw cadeauwisselings-evenement maakt en beheert", guideStep1Title: "Stap 1: Maak uw spel", guideStep1Desc: "Klik op 'Nieuw spel maken' op de startpagina om uw cadeautjesuitwisseling in te stellen.", guideStep1Details: "U moet het volgende opgeven:", - guideStep1Item1: "Evenementnaam (bijv. 'Kantoor Kerst 2025')", + guideStep1Item1: "Evenementnaam (bijv. 'Kantoor Feest 2025')", guideStep1Item2: "Cadeaubedrag en valuta", guideStep1Item3: "Datum, tijd en locatie van het evenement", guideStep1Item4: "Optionele notities of instructies voor deelnemers", @@ -437,7 +437,7 @@ export const nl = { guideStep2Item3: "Voeg optioneel een cadeauwens voor hen toe - ze zullen het zien en kunnen het behouden of wijzigen", guideStep2Item4: "Tip: Vergeet niet uzelf toe te voegen als u wilt deelnemen!", guideStep3Title: "Stap 3: Opties configureren", - guideStep3Desc: "Pas aan hoe uw Secret Santa werkt.", + guideStep3Desc: "Pas aan hoe uw cadeauwisseling werkt.", guideStep3Option1: "Hertoewijzing toestaan", guideStep3Option1Desc: "Maakt het mogelijk voor deelnemers om indien nodig een nieuwe toewijzing aan te vragen", guideStep3Option2: "Deelnemerslijst beschermen", @@ -471,9 +471,9 @@ export const nl = { // Participant Guide guideParticipantTitle: "Deelnemersgids", - guideParticipantSubtitle: "Leer hoe u kunt deelnemen aan Secret Santa", + guideParticipantSubtitle: "Leer hoe u kunt deelnemen aan cadeauwisselingen", guideJoinTitle: "Hoe deel te nemen", - guideJoinDesc: "Er zijn twee manieren om deel te nemen aan een Secret Santa-spel:", + guideJoinDesc: "Er zijn twee manieren om deel te nemen aan een cadeauwisseling:", guideJoinOption1Title: "Optie 1: Directe link", guideJoinOption1Desc: "Klik op de link die door uw organisator is gedeeld. U wordt direct naar uw toewijzing geleid.", guideJoinOption2Title: "Optie 2: Spelcode", @@ -484,11 +484,11 @@ export const nl = { guideViewAssignmentItem2: "Bekijk hun verlanglijstje als ze er een hebben toegevoegd", guideViewAssignmentItem3: "Zie evenementdetails zoals datum, locatie en cadeaubedrag", guideWishTitle: "Uw cadeauwens toevoegen", - guideWishDesc: "Help uw Secret Santa door toe te voegen wat u graag zou ontvangen!", + guideWishDesc: "Help uw schenker door toe te voegen wat u graag zou ontvangen!", guideWishItem1: "Als de organisator een wens voor u heeft toegevoegd, wordt deze automatisch weergegeven - u kunt deze behouden of wijzigen", guideWishItem2: "Wees specifiek maar flexibel - geef opties in verschillende prijsklassen", guideWishItem3: "U kunt uw wens op elk moment bijwerken", - guideWishItem4: "Als u uw wens wijzigt, wordt uw Secret Santa per e-mail op de hoogte gesteld (indien hij/zij een e-mailadres heeft opgegeven).", + guideWishItem4: "Als u uw wens wijzigt, wordt uw schenker per e-mail op de hoogte gesteld (indien hij/zij een e-mailadres heeft opgegeven).", guideReassignTitle: "Hertoewijzing aanvragen", guideReassignDesc: "Niet tevreden met uw toewijzing? U kunt mogelijk een wijziging aanvragen.", guideReassignItem1: "Alleen beschikbaar als de organisator deze optie heeft ingeschakeld", @@ -504,7 +504,7 @@ export const nl = { guideEmailTitle: "E-mailmeldingen", guideEmailDesc: "Als u uw e-mail heeft opgegeven, ontvangt u mogelijk meldingen over het evenement, herinneringen of uw toewijzingsdetails.", guideParticipantTipsTitle: "Tips voor deelnemers", - guideParticipantTip1: "Voeg uw wens vroeg toe zodat uw Secret Santa tijd heeft om te winkelen", + guideParticipantTip1: "Voeg uw wens vroeg toe zodat uw schenker tijd heeft om te winkelen", guideParticipantTip2: "Houd uw toewijzing geheim - dat is het leuke eraan!", guideParticipantTip3: "Bewaar de link als bladwijzer of bewaar de spelcode voor gemakkelijke toegang", } diff --git a/src/lib/translations/pt.ts b/src/lib/translations/pt.ts index 2fb6cae..16675b1 100644 --- a/src/lib/translations/pt.ts +++ b/src/lib/translations/pt.ts @@ -1,5 +1,5 @@ export const pt = { - appName: "Amigo Secreto", + appName: "Troca de Presentes Zava", welcome: "Bem-vindo!", welcomeDesc: "Organize sua troca de presentes de forma fácil e divertida", loading: "Carregando...", @@ -21,7 +21,7 @@ export const pt = { step3: "Configuração", eventName: "Nome do Evento", - eventNamePlaceholder: "Ex: Natal do Escritório 2025", + eventNamePlaceholder: "Ex: Festa do Escritório 2025", giftAmount: "Valor do Presente", giftAmountPlaceholder: "Ex: 50", currency: "Moeda", @@ -95,8 +95,8 @@ export const pt = { copyParticipantLink: "Copiar Link", participantLinkCopied: "Link copiado!", shareOnSocialMedia: "Compartilhar nas Redes Sociais", - shareMessageTitle: "Participe do nosso Amigo Secreto!", - shareMessage: "Olá! Participe do nosso Amigo Secreto \"{eventName}\". Clique aqui: {link}", + shareMessageTitle: "Participe da nossa troca de presentes!", + shareMessage: "Olá! Participe da nossa troca de presentes \"{eventName}\". Clique aqui: {link}", shareOnWhatsApp: "Compartilhar no WhatsApp", shareOnFacebook: "Compartilhar no Facebook", shareOnX: "Compartilhar no X", @@ -120,7 +120,7 @@ export const pt = { copyInvitationLink: "Copiar Link de Convite", invitationLinkCopied: "Link de convite copiado!", joinViaInvitation: "Entrar via Convite", - joinGameTitle: "Entrar no Amigo Secreto", + joinGameTitle: "Entrar na troca de presentes", joinGameDesc: "Preencha suas informações para participar desta troca de presentes", yourName: "Seu Nome", yourNamePlaceholder: "Ex: João Silva", @@ -162,7 +162,7 @@ export const pt = { saveWish: "Salvar Desejo", wishSaved: "Desejo salvo!", editWish: "Editar Desejo", - wishDescription: "Conte ao seu amigo secreto o que você gostaria de receber", + wishDescription: "Conte a quem te presenteia o que você gostaria de receber", wishHint: "Este desejo será visível para quem vai te presentear", skipWish: "Pular", saveAndContinue: "Salvar e Continuar", @@ -172,7 +172,7 @@ export const pt = { noWishAddedYet: "Você ainda não adicionou seu desejo de presente", wishDialogDesc: "Escreva o que você gostaria de receber de presente", wishChangeWarningTitle: "Aviso de Mudança de Desejo", - wishChangeWarningDesc: "Seu amigo secreto já confirmou sua atribuição. Se você mudar seu desejo agora, ele será notificado por e-mail para que possa ver sua nova preferência.", + wishChangeWarningDesc: "Quem te presenteia já confirmou sua atribuição. Se você mudar seu desejo agora, ele será notificado por e-mail para que possa ver sua nova preferência.", proceedWithChange: "Prosseguir com a Mudança", wishesAdded: "Desejos Adicionados", giftWish: "Desejo de Presente", @@ -331,7 +331,7 @@ export const pt = { privacyTitle: "Política de Privacidade", privacySubtitle: "Como tratamos seus dados", privacyDataCollectionTitle: "Dados que Coletamos", - privacyDataCollectionDesc: "Ao usar o Amigo Secreto, coletamos as seguintes informações para fazer a troca de presentes funcionar:", + privacyDataCollectionDesc: "Ao usar a Troca de Presentes Zava, coletamos as seguintes informações para fazer a troca de presentes funcionar:", privacyDataItem1: "Nomes dos participantes", privacyDataItem2: "Endereços de email (opcional, para notificações)", privacyDataItem3: "Desejos de presentes (opcional)", @@ -442,11 +442,11 @@ export const pt = { // Organizer Guide guideOrganizerTitle: "Guia do Organizador", - guideOrganizerSubtitle: "Aprenda como criar e gerenciar seu evento de Amigo Secreto", + guideOrganizerSubtitle: "Aprenda como criar e gerenciar seu evento de troca de presentes", guideStep1Title: "Passo 1: Crie Seu Jogo", guideStep1Desc: "Clique em 'Criar Novo Jogo' na página inicial para começar a configurar sua troca de presentes.", guideStep1Details: "Você precisará fornecer:", - guideStep1Item1: "Nome do evento (ex: 'Natal do Escritório 2025')", + guideStep1Item1: "Nome do evento (ex: 'Festa do Escritório 2025')", guideStep1Item2: "Valor do presente e moeda", guideStep1Item3: "Data, hora e local do evento", guideStep1Item4: "Notas ou instruções opcionais para os participantes", @@ -458,7 +458,7 @@ export const pt = { guideStep2Item3: "Opcionalmente adicione um desejo de presente para eles - eles verão e poderão manter ou mudar", guideStep2Item4: "Dica: Não se esqueça de se adicionar se você quiser participar!", guideStep3Title: "Passo 3: Configure Opções", - guideStep3Desc: "Personalize como seu jogo de Amigo Secreto funciona.", + guideStep3Desc: "Personalize como sua troca de presentes funciona.", guideStep3Option1: "Permitir Reatribuição", guideStep3Option1Desc: "Permite que participantes solicitem uma nova atribuição se necessário", guideStep3Option2: "Proteger Lista de Participantes", @@ -492,9 +492,9 @@ export const pt = { // Participant Guide guideParticipantTitle: "Guia do Participante", - guideParticipantSubtitle: "Aprenda como entrar e participar do Amigo Secreto", + guideParticipantSubtitle: "Aprenda como entrar e participar da troca de presentes", guideJoinTitle: "Como Entrar", - guideJoinDesc: "Existem duas formas de entrar em um jogo de Amigo Secreto:", + guideJoinDesc: "Existem duas formas de entrar em uma troca de presentes:", guideJoinOption1Title: "Opção 1: Link Direto", guideJoinOption1Desc: "Clique no link compartilhado pelo seu organizador. Você será levado diretamente à sua atribuição.", guideJoinOption2Title: "Opção 2: Código do Jogo", @@ -505,11 +505,11 @@ export const pt = { guideViewAssignmentItem2: "Veja a lista de desejos dela se ela adicionou uma", guideViewAssignmentItem3: "Veja os detalhes do evento como data, local e valor do presente", guideWishTitle: "Adicione Seu Desejo de Presente", - guideWishDesc: "Ajude seu Amigo Secreto adicionando o que você gostaria de receber!", + guideWishDesc: "Ajude quem te presenteia adicionando o que você gostaria de receber!", guideWishItem1: "Se o organizador adicionou um desejo para você, ele aparecerá automaticamente - você pode mantê-lo ou mudá-lo", guideWishItem2: "Seja específico mas flexível - dê opções em diferentes faixas de preço", guideWishItem3: "Você pode editar seu desejo a qualquer momento", - guideWishItem4: "Sempre que você mudar seu desejo, seu Amigo Secreto será notificado por e-mail (se ele tiver um e-mail cadastrado)", + guideWishItem4: "Sempre que você mudar seu desejo, quem te presenteia será notificado por e-mail (se ele tiver um e-mail cadastrado)", guideReassignTitle: "Solicitar Reatribuição", guideReassignDesc: "Não está feliz com sua atribuição? Você pode solicitar uma mudança.", guideReassignItem1: "Disponível apenas se o organizador habilitou esta opção", @@ -525,7 +525,7 @@ export const pt = { guideEmailTitle: "Notificações por E-mail", guideEmailDesc: "Se você forneceu seu e-mail, poderá receber notificações sobre o evento, lembretes ou os detalhes da sua atribuição.", guideParticipantTipsTitle: "Dicas para Participantes", - guideParticipantTip1: "Adicione seu desejo cedo para que seu Amigo Secreto tenha tempo de comprar", + guideParticipantTip1: "Adicione seu desejo cedo para que quem te presenteia tenha tempo de comprar", guideParticipantTip2: "Mantenha sua atribuição em segredo - essa é a parte divertida!", guideParticipantTip3: "Adicione seu link aos favoritos ou salve o código do jogo para fácil acesso", } diff --git a/src/lib/translations/zh.ts b/src/lib/translations/zh.ts index d611d04..5b2512a 100644 --- a/src/lib/translations/zh.ts +++ b/src/lib/translations/zh.ts @@ -1,17 +1,17 @@ export const zh = { // Common - appName: "秘密圣诞老人", - welcome: "欢迎来到秘密圣诞老人", + appName: "Zava 礼物交换", + welcome: "欢迎来到礼物交换", welcomeDesc: "轻松组织礼物交换", - description: "轻松有趣地组织礼物交换秘密圣诞老人活动", + description: "轻松有趣地组织礼物交换活动", language: "语言", theme: "主题", darkMode: "深色模式", lightMode: "浅色模式", // Home view - homeTitle: "秘密圣诞老人", - homeDescription: "轻松组织礼物交换秘密圣诞老人活动", + homeTitle: "Zava 礼物交换", + homeDescription: "轻松组织礼物交换活动", enterGameCode: "输入游戏代码", enterCode: "游戏代码", codePlaceholder: "输入您的6位数代码", @@ -24,7 +24,7 @@ export const zh = { // Create game view createGameTitle: "创建游戏", - createGameDescription: "与朋友组织秘密圣诞老人活动", + createGameDescription: "与朋友组织礼物交换活动", eventDate: "活动日期", eventLocation: "活动地点", giftBudget: "礼物预算", @@ -191,7 +191,7 @@ export const zh = { privacyTitle: "隐私政策", privacySubtitle: "我们如何处理您的数据", privacyDataCollectionTitle: "我们收集的数据", - privacyDataCollectionDesc: "使用秘密圣诞老人时,我们收集以下信息以使礼物交换活动正常运作:", + privacyDataCollectionDesc: "使用Zava 礼物交换时,我们收集以下信息以使礼物交换活动正常运作:", privacyDataItem1: "参与者姓名", privacyDataItem2: "邮箱地址(可选,用于通知)", privacyDataItem3: "礼物清单(可选)", @@ -356,7 +356,7 @@ export const zh = { errorTitle: "出了问题", eventLocationPlaceholder: "例如: 主办公室", eventName: "活动名称", - eventNamePlaceholder: "例如: 2025年办公室圣诞节", + eventNamePlaceholder: "例如: 2025年办公室聚会", eventTime: "活动时间", finish: "完成", gameCreated: "游戏已创建!", @@ -377,7 +377,7 @@ export const zh = { copyInvitationLink: "复制邀请链接", invitationLinkCopied: "邀请链接已复制!", joinViaInvitation: "通过邀请加入", - joinGameTitle: "加入神秘圣诞老人", + joinGameTitle: "加入礼物交换", joinGameDesc: "填写您的信息以加入此礼物交换", yourName: "您的姓名", yourNamePlaceholder: "例如: 张三", @@ -481,8 +481,8 @@ export const zh = { sendingEmail: "正在发送电子邮件...", sendingEmails: "正在发送电子邮件...", shareCode: "分享代码", - shareMessage: "你好! 加入我们的Secret Santa \"{eventName}\"。点击这里: {link}", - shareMessageTitle: "加入我们的Secret Santa!", + shareMessage: "你好! 加入我们的礼物交换 \"{eventName}\"。点击这里: {link}", + shareMessageTitle: "加入我们的礼物交换!", shareOnFacebook: "在Facebook上分享", shareOnMessenger: "在Messenger上分享", shareOnSocialMedia: "在社交媒体上分享", @@ -500,10 +500,10 @@ export const zh = { tryAgain: "重试", updateAndContinue: "更新并继续", usedReassignment: "已使用重新分配", - wishDescription: "告诉您的Secret Santa您想收到什么", + wishDescription: "告诉您的赠礼者您想收到什么", wishDialogDesc: "写下您想作为礼物收到的内容", wishChangeWarningTitle: "愿望变更警告", - wishChangeWarningDesc: "您的神秘送礼者已确认他们的分配。如果您现在更改愿望,他们将收到电子邮件通知,以便查看您的新偏好。", + wishChangeWarningDesc: "您的赠礼者已确认他们的分配。如果您现在更改愿望,他们将收到电子邮件通知,以便查看您的新偏好。", proceedWithChange: "继续更改", wishHint: "此愿望对送礼给您的人可见", wishSaved: "愿望已保存!", @@ -522,11 +522,11 @@ export const zh = { // Organizer Guide guideOrganizerTitle: "组织者指南", - guideOrganizerSubtitle: "学习如何创建和管理您的秘密圣诞老人活动", + guideOrganizerSubtitle: "学习如何创建和管理您的礼物交换活动", guideStep1Title: "步骤1:创建游戏", guideStep1Desc: "点击主页上的'创建新游戏'开始设置礼物交换。", guideStep1Details: "您需要提供:", - guideStep1Item1: "活动名称(例如:'2025办公室圣诞节')", + guideStep1Item1: "活动名称(例如:'2025办公室聚会')", guideStep1Item2: "礼物金额和货币", guideStep1Item3: "活动日期、时间和地点", guideStep1Item4: "给参与者的可选备注或说明", @@ -538,7 +538,7 @@ export const zh = { guideStep2Item3: "可选择为他们添加礼物愿望 - 他们会看到并可以保留或更改", guideStep2Item4: "提示:如果您想参与,别忘了添加自己!", guideStep3Title: "步骤3:配置选项", - guideStep3Desc: "自定义您的秘密圣诞老人游戏的运作方式。", + guideStep3Desc: "自定义您的礼物交换的运作方式。", guideStep3Option1: "允许重新分配", guideStep3Option1Desc: "允许参与者在需要时请求新的分配", guideStep3Option2: "保护参与者列表", @@ -572,9 +572,9 @@ export const zh = { // Participant Guide guideParticipantTitle: "参与者指南", - guideParticipantSubtitle: "学习如何加入和参与秘密圣诞老人", + guideParticipantSubtitle: "学习如何加入和参与礼物交换", guideJoinTitle: "如何加入", - guideJoinDesc: "有两种方式加入秘密圣诞老人游戏:", + guideJoinDesc: "有两种方式加入礼物交换:", guideJoinOption1Title: "选项1:直接链接", guideJoinOption1Desc: "点击组织者分享的链接。您将直接进入您的分配。", guideJoinOption2Title: "选项2:游戏代码", @@ -585,11 +585,11 @@ export const zh = { guideViewAssignmentItem2: "如果他们添加了愿望列表,可以查看", guideViewAssignmentItem3: "查看活动详情,如日期、地点和礼物金额", guideWishTitle: "添加您的礼物愿望", - guideWishDesc: "通过添加您想收到的东西来帮助您的秘密圣诞老人!", + guideWishDesc: "通过添加您想收到的东西来帮助您的赠礼者!", guideWishItem1: "如果组织者为您添加了愿望,它将自动显示 - 您可以保留或更改它", guideWishItem2: "具体但灵活 - 提供不同价位的选项", guideWishItem3: "您可以随时更新您的愿望", - guideWishItem4: "每当您更新愿望时,您的秘密圣诞老人(如果有电子邮件)都会收到通知。", + guideWishItem4: "每当您更新愿望时,您的赠礼者(如果有电子邮件)都会收到通知。", guideReassignTitle: "请求重新分配", guideReassignDesc: "对您的分配不满意?您可能可以请求更改。", guideReassignItem1: "仅在组织者启用此选项时可用", @@ -605,7 +605,7 @@ export const zh = { guideEmailTitle: "电子邮件通知", guideEmailDesc: "如果您提供了电子邮件,您可能会收到有关活动的通知、提醒或分配详情。", guideParticipantTipsTitle: "参与者提示", - guideParticipantTip1: "尽早添加您的愿望,让您的秘密圣诞老人有时间购物", + guideParticipantTip1: "尽早添加您的愿望,让您的赠礼者有时间购物", guideParticipantTip2: "保密您的分配 - 这是乐趣所在!", guideParticipantTip3: "收藏链接或保存游戏代码以便轻松访问", }