Ver Fonte

Add Swedish localization for the full app UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 há 1 mês atrás
pai
commit
545ec98cec

+ 1 - 0
App for Indeed.xcodeproj/project.pbxproj

@@ -107,6 +107,7 @@
 				fr,
 				"fr-CA",
 				de,
+				sv,
 			);
 			mainGroup = 27D852772FB1D367008DF557;
 			minimizedProjectReferenceProxies = 1;

+ 10 - 2
App for Indeed/Services/AppLocalization.swift

@@ -11,6 +11,7 @@ import Foundation
 enum AppLanguage: CaseIterable {
     case english
     case german
+    case swedish
     case frenchCanada
     case french
     case arabic
@@ -23,6 +24,8 @@ enum AppLanguage: CaseIterable {
             return "en"
         case .german:
             return "de"
+        case .swedish:
+            return "sv"
         case .frenchCanada:
             return "fr-CA"
         case .french:
@@ -52,6 +55,9 @@ enum AppLanguage: CaseIterable {
         if lower.hasPrefix("de") {
             return .german
         }
+        if lower.hasPrefix("sv") {
+            return .swedish
+        }
         if lower.hasPrefix("en") {
             return .english
         }
@@ -77,6 +83,8 @@ enum AppLanguage: CaseIterable {
             return "English"
         case .german:
             return "German"
+        case .swedish:
+            return "Swedish"
         case .frenchCanada:
             return "French (Canada)"
         case .french:
@@ -135,7 +143,7 @@ private func translateTemplateNameByTokens(_ name: String, language: AppLanguage
     switch language {
     case .chineseSimplified, .chineseTraditional:
         return translated.joined()
-    case .arabic, .english, .french, .frenchCanada, .german:
+    case .arabic, .english, .french, .frenchCanada, .german, .swedish:
         return translated.joined(separator: " ")
     }
 }
@@ -152,7 +160,7 @@ private func templateNameTokenTranslation(_ token: String, language: AppLanguage
         return TemplateNameTokenLexicon.zhHans[key] ?? TemplateNameTokenLexicon.zhHans[key.capitalized]
     case .arabic:
         return TemplateNameTokenLexicon.ar[key] ?? TemplateNameTokenLexicon.ar[key.capitalized]
-    case .french, .frenchCanada, .german, .english:
+    case .french, .frenchCanada, .german, .swedish, .english:
         return nil
     }
 }

+ 2 - 0
App for Indeed/Services/CVTemplateFetchService.swift

@@ -54,6 +54,8 @@ final class CVTemplateFetchService {
                 return "Each `name` must be 1–3 English words (ASCII letters and spaces only) suitable as localization keys, e.g. \"Creative Cascade\" — do not use French characters in `name`."
             case .german:
                 return "Each `name` must be 1–3 English words (ASCII letters and spaces only) suitable as localization keys, e.g. \"Creative Cascade\" — do not use German characters in `name`."
+            case .swedish:
+                return "Each `name` must be 1–3 English words (ASCII letters and spaces only) suitable as localization keys, e.g. \"Creative Cascade\" — do not use Swedish characters in `name`."
             }
         }
     }

+ 353 - 0
App for Indeed/sv.lproj/Localizable.strings

@@ -0,0 +1,353 @@
+/* Localizable.strings (Svenska) */
+
+// MARK: - Allmänt
+"OK" = "OK";
+"Cancel" = "Avbryt";
+"Delete" = "Radera";
+"Remove" = "Ta bort";
+"Dismiss" = "Stäng";
+
+// MARK: - Startskärm
+"AI-POWERED" = "AI-DRIVEN";
+"Find your perfect job with the power of AI." = "Hitta ditt perfekta jobb med hjälp av AI.";
+"Starting up…" = "Startar…";
+"Loading progress" = "Laddar framsteg";
+
+// MARK: - Startstatus
+"Checking your Pro subscription…" = "Kontrollerar din Pro-prenumeration…";
+"Loading premium plans from the App Store…" = "Laddar premiumplaner från App Store…";
+"Preparing your job search workspace…" = "Förbereder din jobbsökningsyta…";
+"Almost ready…" = "Nästan klar…";
+
+// MARK: - Sidopanel
+"Home" = "Hem";
+"Saved Jobs" = "Sparade jobb";
+"CV Maker" = "CV-skapare";
+"Profile" = "Profil";
+"Settings" = "Inställningar";
+"Premium" = "Premium";
+"Indeed" = "Indeed";
+"Open Indeed to search and apply for jobs" = "Öppna Indeed för att söka och söka jobb";
+
+// MARK: - Instrumentpanel / Hem
+"Welcome" = "Välkommen";
+"Send" = "Skicka";
+"Clear chat" = "Rensa chatt";
+"Remove all messages and start a new conversation" = "Ta bort alla meddelanden och starta en ny konversation";
+"Ask for roles, skills, salary, or job descriptions..." = "Fråga efter roller, färdigheter, lön eller arbetsbeskrivningar…";
+"Ask AI" = "Fråga AI";
+"1 reply left" = "1 svar kvar";
+"Apply" = "Ansök";
+"Save" = "Spara";
+"Saved" = "Sparad";
+"Remove from saved" = "Ta bort från sparade";
+"Show more jobs" = "Visa fler jobb";
+"This area is not available in the preview build. Use Home to search jobs." = "Det här området är inte tillgängligt i förhandsversionen. Använd Hem för att söka jobb.";
+"Save jobs from Home to see them here." = "Spara jobb från Hem för att se dem här.";
+"No saved jobs yet. Search on Home, then tap Save on a listing." = "Inga sparade jobb än. Sök på Hem och tryck sedan på Spara på en annons.";
+"Tell me what role you want and I will return job descriptions, key skills, and a quick fit summary." = "Berätta vilken roll du vill ha så returnerar jag arbetsbeskrivningar, nyckelfärdigheter och en snabb sammanfattning av matchningen.";
+"1 saved position" = "1 sparad position";
+"Delete this profile?" = "Radera den här profilen?";
+"Find roles similar to: " = "Hitta roller liknande: ";
+"Find jobs at company: " = "Hitta jobb på företag: ";
+"Find jobs that require skill: " = "Hitta jobb som kräver färdighet: ";
+"match" = "matchning";
+"matches" = "matchningar";
+
+// MARK: - Funktionsgenvägar
+"Role" = "Roll";
+"Explore similar or better job roles" = "Utforska liknande eller bättre jobbroller";
+"Company" = "Företag";
+"Find opportunities at other companies" = "Hitta möjligheter på andra företag";
+"Skill" = "Färdighet";
+"Match jobs that fit your skills" = "Matcha jobb som passar dina färdigheter";
+
+// MARK: - Pro / Prenumeration
+"Upgrade to Pro" = "Uppgradera till Pro";
+"You're on Pro" = "Du använder Pro";
+"Unlimited AI matches, smart alerts, and interview prep—all in one place." = "Obegränsade AI-matchningar, smarta aviseringar och intervjuförberedelser — allt på ett ställe.";
+"Manage billing, renewals, and plans in Premium." = "Hantera fakturering, förnyelser och planer i Premium.";
+"Try Pro" = "Prova Pro";
+"Manage Subscription" = "Hantera prenumeration";
+"Premium Plans" = "Premiumplaner";
+"Unlock unlimited access to premium tools and boost your productivity." = "Lås upp obegränsad tillgång till premiumverktyg och öka din produktivitet.";
+"Continue with free plan" = "Fortsätt med gratisplanen";
+"Restore Purchase" = "Återställ köp";
+"You're subscribed" = "Du är prenumerant";
+"Thank you — Pro features are now available." = "Tack — Pro-funktioner är nu tillgängliga.";
+"Pro" = "Pro";
+"Purchases restored" = "Köp återställda";
+"Your subscription is active." = "Din prenumeration är aktiv.";
+"No subscription found" = "Ingen prenumeration hittades";
+"There was nothing to restore for this Apple ID." = "Det fanns inget att återställa för detta Apple-ID.";
+"Something went wrong" = "Något gick fel";
+"That subscription isn’t available from the App Store right now." = "Den prenumerationen är inte tillgänglig från App Store just nu.";
+"Unlimited AI job search on Home" = "Obegränsad AI-jobbssökning på Hem";
+"Save jobs & open listings in-app" = "Spara jobb och öppna annonser i appen";
+"CV Maker, profiles & PDF export" = "CV-skapare, profiler och PDF-export";
+"Role, company & skill shortcuts" = "Genvägar för roll, företag och färdighet";
+
+// MARK: - Betalväggsplaner
+"Weekly" = "Veckovis";
+"Flexible and commitment-free" = "Flexibel och utan bindningstid";
+"Monthly" = "Månadsvis";
+"Balanced for regular productivity" = "Balanserad för regelbunden produktivitet";
+"Yearly" = "Årsvis";
+"Best value for long-term users" = "Bästa värdet för långtidsanvändare";
+"/ week" = "/ vecka";
+"/ month" = "/ månad";
+"/ year" = "/ år";
+"3 days free trial" = "3 dagars gratis provperiod";
+"Perfect for short-term job hunts" = "Perfekt för kortsiktiga jobbsökningar";
+"Cancel anytime" = "Säg upp när som helst";
+"Best for regular job seekers" = "Bäst för regelbundna jobbsökare";
+"Priority support" = "Prioriterad support";
+"Lowest effective monthly cost" = "Lägsta effektiva månadskostnad";
+"Ideal for long-term use" = "Idealisk för långsiktig användning";
+
+// MARK: - Betalväggens förtroende
+"Secure Payments" = "Säkra betalningar";
+"Your payment is 100% secure." = "Din betalning är 100% säker.";
+"Cancel Anytime" = "Säg upp när som helst";
+"No commitment, cancel anytime." = "Ingen bindningstid, säg upp när som helst.";
+"24/7 Support" = "Support dygnet runt";
+"We're here to help you anytime." = "Vi finns här för att hjälpa dig när som helst.";
+"Privacy First" = "Integritet först";
+"Your data is safe with us." = "Dina uppgifter är säkra hos oss.";
+
+// MARK: - Inställningar
+"Appearance" = "Utseende";
+"Theme" = "Tema";
+"Language" = "Språk";
+"Share App" = "Dela app";
+"More Apps" = "Fler appar";
+"About" = "Om";
+"Website" = "Webbplats";
+"Support" = "Support";
+"Terms of Use" = "Användarvillkor";
+"Privacy Policy" = "Integritetspolicy";
+"System" = "System";
+"Light" = "Ljust";
+"Dark" = "Mörkt";
+
+// MARK: - Profiler
+"Profiles" = "Profiler";
+"Add new profile" = "Lägg till ny profil";
+"Create and manage CV profiles. Each profile stores your details on this Mac." = "Skapa och hantera CV-profiler. Varje profil lagrar dina uppgifter på den här Mac-datorn.";
+"No profiles yet. Tap “Add new profile” to create your first one." = "Inga profiler än. Tryck på „Lägg till ny profil” för att skapa din första.";
+"Build CV" = "Skapa CV";
+"Edit" = "Redigera";
+"Untitled profile" = "Namnlös profil";
+"No contact details yet" = "Inga kontaktuppgifter än";
+"← Profiles" = "← Profiler";
+
+// MARK: - Profilredigerare
+"Save Profile  →" = "Spara profil →";
+"← All profiles" = "← Alla profiler";
+"New profile" = "Ny profil";
+"Edit profile" = "Redigera profil";
+"Profile Name *" = "Profilnamn *";
+"Marketing Director Profile" = "Marknadsdirektörsprofil";
+"Personal Information" = "Personlig information";
+"Full Name *" = "Fullständigt namn *";
+"John Doe" = "Jan Svensson";
+"Email *" = "E-post *";
+"john@example.com" = "jan@exempel.se";
+"Phone" = "Telefon";
+"+1 (555) 123-4567" = "+46 70 123 45 67";
+"Job Title *" = "Jobbtitel *";
+"Software Engineer" = "Mjukvaruingenjör";
+"Address" = "Adress";
+"123 Main St, City, State, ZIP" = "Exempelgatan 123, Stad, Postnummer";
+"Certificates / Rewards" = "Certifikat / Utmärkelser";
+"List your certificates and awards..." = "Lista dina certifikat och utmärkelser…";
+"Interests" = "Intressen";
+"List your interests and hobbies..." = "Lista dina intressen och hobbies…";
+"Languages" = "Språk";
+"List languages you speak (e.g., English - Native, Spanish - Fluent)..." = "Lista språk du talar (t.ex. Svenska - Modersmål, Engelska - Flytande)…";
+"Career Summary" = "Karriärsammanfattning";
+"Brief overview of your professional background and key achievements..." = "Kort översikt över din professionella bakgrund och viktiga prestationer…";
+"Referral (Optional)" = "Rekommendation (valfritt)";
+"Referred by (Company/Person Name)" = "Rekommenderad av (företag/personnamn)";
+"If someone referred you for this job, enter their name or company here" = "Om någon rekommenderade dig för det här jobbet, ange deras namn eller företag här";
+"Work Experience" = "Arbetslivserfarenhet";
+"Education" = "Utbildning";
+"+ Add Another" = "+ Lägg till en till";
+"Complete required fields" = "Fyll i obligatoriska fält";
+"Remove experience" = "Ta bort erfarenhet";
+"Remove education" = "Ta bort utbildning";
+"Company Name *" = "Företagsnamn *";
+"Duration *" = "Varaktighet *";
+"Description" = "Beskrivning";
+"e.g., Software Engineer" = "t.ex. Mjukvaruingenjör";
+"e.g., Google" = "t.ex. Google";
+"e.g., Jan 2020 - Present" = "t.ex. Jan 2020 - Nutid";
+"Describe your responsibilities and achievements..." = "Beskriv dina ansvarsområden och prestationer…";
+"Degree / program *" = "Examen / program *";
+"Institution *" = "Institution *";
+"Year *" = "År *";
+"e.g., BSc Computer Science" = "t.ex. Kandidatexamen i datavetenskap";
+"e.g., MIT" = "t.ex. KTH";
+"e.g., 2020" = "t.ex. 2020";
+"Profile name" = "Profilnamn";
+"Full Name" = "Fullständigt namn";
+"Email" = "E-post";
+"Job Title" = "Jobbtitel";
+
+// MARK: - CV-skapare
+"Templates" = "Mallar";
+"Polished layouts with live previews — pick a style that fits your story." = "Polerade layouter med liveförhandsvisningar — välj en stil som passar din berättelse.";
+"Use Template & Select Profile  →" = "Använd mall och välj profil →";
+"All" = "Alla";
+"No templates yet for this category." = "Inga mallar för den här kategorin än.";
+"Pick a template" = "Välj en mall";
+"Select a template first, then choose a profile to continue." = "Välj först en mall och välj sedan en profil för att fortsätta.";
+"Fetching AI-curated templates…" = "Hämtar AI-kurerade mallar…";
+"Couldn’t load AI templates — showing the built-in gallery." = "Kunde inte ladda AI-mallar — visar det inbyggda galleriet.";
+"Design-Based" = "Designbaserad";
+"Profession-Based" = "Yrkesbaserad";
+"Professional" = "Professionell";
+"Modern" = "Modern";
+"Creative" = "Kreativ";
+"Minimal" = "Minimalistisk";
+"Executive" = "Chef";
+"ATS layout" = "ATS-layout";
+"Sidebar left" = "Sidopanel vänster";
+"Sidebar right" = "Sidopanel höger";
+
+// MARK: - CV-förhandsvisning
+"CV preview" = "CV-förhandsvisning";
+"Export PDF…" = "Exportera PDF…";
+"Layout matches the CV Maker thumbnail for this template. Export a PDF that matches what you see here (fonts, columns, colours, and rules)." = "Layouten matchar CV-skaparens miniatyrbild för den här mallen. Exportera en PDF som matchar det du ser här (typsnitt, kolumner, färger och regler).";
+"The résumé could not be rendered to PDF (empty output). Try scrolling the preview so it lays out, then export again." = "CV:t kunde inte renderas till PDF (tom utdata). Försök rulla förhandsvisningen så att den lägger ut sig, exportera sedan igen.";
+"Couldn’t save PDF" = "Kunde inte spara PDF";
+"Your name" = "Ditt namn";
+"Professional headline" = "Professionell rubrik";
+"Experience" = "Erfarenhet";
+"Highlights" = "Höjdpunkter";
+"Summary" = "Sammanfattning";
+"Contact" = "Kontakt";
+"Skills" = "Färdigheter";
+"Tools" = "Verktyg";
+"Languages & more" = "Språk & mer";
+"Certificates" = "Certifikat";
+"Referrals" = "Rekommendationer";
+"Professional Summary" = "Professionell sammanfattning";
+"Selected Experience" = "Utvald erfarenhet";
+"Core Competencies" = "Kärnkompetenser";
+"Impact" = "Påverkan";
+"Add contact in your profile" = "Lägg till kontakt i din profil";
+"Add contact details in your profile" = "Lägg till kontaktuppgifter i din profil";
+"Add a career summary or interests in your profile to populate this column." = "Lägg till en karriärsammanfattning eller intressen i din profil för att fylla den här kolumnen.";
+"CV" = "CV";
+"Open to relocation" = "Öppen för omplacering";
+"STRENGTHS" = "STYRKOR";
+"PORTFOLIO SNAPSHOT" = "PORTFÖLJÖVERSIKT";
+"Close" = "Stäng";
+"/ day" = "/ dag";
+"/ %d days" = "/ %d dagar";
+"/ %d weeks" = "/ %d veckor";
+"/ %d months" = "/ %d månader";
+"/ %d years" = "/ %d år";
+
+// MARK: - CV-mallnamn
+"Paper White" = "Pappersvit";
+"Swiss" = "Schweizisk";
+"Mono" = "Mono";
+"Airy" = "Luftig";
+"Tabular" = "Tabellformad";
+"Facet" = "Facett";
+"Corporate" = "Företag";
+"Atlas" = "Atlas";
+"Ledger" = "Huvudbok";
+"Harbor" = "Hamn";
+"Clear Path" = "Klar väg";
+"Pinstripe" = "Smala ränder";
+"Briefing" = "Briefing";
+"Quorum" = "Kvorum";
+"Docket" = "Diarium";
+"Conduit" = "Ledning";
+"Principal" = "Principal";
+"Charter" = "Stadga";
+"Vertex" = "Vertex";
+"Linea" = "Linje";
+"Prism" = "Prisma";
+"Circuit" = "Krets";
+"North" = "Norr";
+"Axis" = "Axel";
+"Marigold" = "Ringblomma";
+"Ember" = "Glöd";
+"Lattice" = "Galler";
+"Bloom" = "Blomning";
+"Studio" = "Studio";
+"Kite" = "Drake";
+"Regent" = "Regent";
+"Monarch" = "Monark";
+"Sterling" = "Sterling";
+"Summit" = "Topp";
+"Estate" = "Egendom";
+"Chairman" = "Ordförande";
+"Blue Ocean" = "Blått hav";
+
+// MARK: - CV-demo förhandsgranskningsinnehåll
+"Sarah Johnson" = "Sarah Johnson";
+"Senior Product Manager" = "Senior produktchef";
+"Group PM, Consumer Growth & Activation" = "Gruppchef produktledning, konsumenttillväxt & aktivering";
+"Google · Mountain View, CA · 2019 – Present" = "Google · Mountain View, CA · 2019 – Nutid";
+"Stanford University" = "Stanford University";
+"M.S. Management Science & Engineering" = "M.S. Management Science & Engineering";
+"2014 – 2016" = "2014 – 2016";
+"Mountain View, CA" = "Mountain View, Kalifornien";
+"Product leader shipping roadmap, discovery, and analytics for high-scale consumer experiences." = "Produktledare som levererar färdplan, upptäckt och analys för konsumentupplevelser i stor skala.";
+"Defined multi-year platform strategy with exec stakeholders and quarterly OKRs." = "Definierade flerårig plattformsstrategi med ledningsintressenter och kvartalsvisa OKR.";
+"Partnered with engineering and design to launch experiments improving activation by 12%." = "Samarbetade med teknik och design för att lansera experiment som förbättrade aktivering med 12%.";
+"Stood up quarterly business reviews with finance and GTM, aligning spend to north-star metrics." = "Inrättade kvartalsvisa affärsgenomgångar med ekonomi och GTM, och anpassade utgifter till ledstjärnemetrik.";
+"Presented roadmap shifts to the leadership team and translated trade-offs into clear investment asks." = "Presenterade färdplanförändringar för ledningsteamet och översatte avvägningar till tydliga investeringsförfrågningar.";
+"Figma · SQL · Amplitude · Jira · BigQuery" = "Figma · SQL · Amplitude · Jira · BigQuery";
+"Product Strategy" = "Produktstrategi";
+"A/B Testing" = "A/B-testning";
+"Roadmapping" = "Färdplanering";
+"CONTACT" = "KONTAKT";
+"SKILLS" = "FÄRDIGHETER";
+"PROFILE" = "PROFIL";
+"EXPERIENCE" = "ERFARENHET";
+"EDUCATION" = "UTBILDNING";
+"SUMMARY" = "SAMMANFATTNING";
+"PROFESSIONAL SUMMARY" = "PROFESSIONELL SAMMANFATTNING";
+"SELECTED EXPERIENCE" = "UTVALD ERFARENHET";
+"CORE COMPETENCIES" = "KÄRNKOMPETENSER";
+"TOOLS" = "VERKTYG";
+"IMPACT" = "PÅVERKAN";
+
+// MARK: - Jobbläsare
+"Return to the previous screen" = "Återgå till föregående skärm";
+
+// MARK: - Fel
+"We couldn't reach the server. Check your internet connection and try again." = "Vi kunde inte nå servern. Kontrollera din internetanslutning och försök igen.";
+"The search was cancelled. Try again when you're ready." = "Sökningen avbröts. Försök igen när du är redo.";
+"Something went wrong while searching. Please try again in a moment." = "Något gick fel under sökningen. Försök igen om en stund.";
+"Job search is unavailable." = "Jobbsökning är inte tillgänglig.";
+
+// MARK: - Aviseringar
+"This profile will be removed from this Mac." = "Den här profilen kommer att tas bort från den här Mac-datorn.";
+
+// MARK: - Formatsträngar
+"Loading %@" = "Laddar %@";
+"Loading %@. %@" = "Laddar %@. %@";
+"Starting %@…" = "Startar %@…";
+"%d replies left" = "%d svar kvar";
+"%d saved positions" = "%d sparade positioner";
+"“%@” will be removed from this Mac." = "„%@” kommer att tas bort från den här Mac-datorn.";
+"%@ isn’t available yet" = "%@ är inte tillgängligt än";
+"I couldn't find new matches for “%@”. Try a different angle or a more specific keyword." = "Jag kunde inte hitta nya matchningar för „%@”. Prova en annan vinkel eller ett mer specifikt nyckelord.";
+"No jobs found for “%@”. Try another title, skill, company, or location." = "Inga jobb hittades för „%@”. Prova en annan titel, färdighet, företag eller plats.";
+"Here are %d more %@ for “%@”." = "Här är %d fler %@ för „%@”.";
+"Found %d %@ for “%@”. Tap Apply to open the listing or Save to revisit later." = "Hittade %d %@ för „%@”. Tryck på Ansök för att öppna annonsen eller på Spara för att komma tillbaka senare.";
+"Get %@" = "Skaffa %@";
+"You chose the “%@” template. Tap Build CV on a profile to preview your résumé with that layout." = "Du valde mallen „%@”. Tryck på Skapa CV på en profil för att förhandsvisa ditt CV med den layouten.";
+"Experience %d" = "Erfarenhet %d";
+"Education %d" = "Utbildning %d";
+"Please fill in: %@." = "Fyll i: %@.";
+
+// MARK: - Flerradig
+"Add your Mac App Store IDs in the target’s build settings:\n• AppStoreAppID — numeric app ID from App Store Connect\n• AppStoreDeveloperID — numeric developer ID (for your other apps page)" = "Lägg till dina Mac App Store-ID:n i målets bygginställningar:\n• AppStoreAppID — numeriskt app-ID från App Store Connect\n• AppStoreDeveloperID — numeriskt utvecklar-ID (för din sida med andra appar)";