From 99df1351af2f171da0d285185cd616cf0789e0b4 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 16 Mar 2026 10:03:42 +0800 Subject: [PATCH] fix(i18n): Swedish placeholders in sv_SE --- lib/core/translations/language/sv_se.dart | 360 +++++++++++----------- test/sv_se_translations_test.dart | 22 ++ 2 files changed, 205 insertions(+), 177 deletions(-) create mode 100644 test/sv_se_translations_test.dart diff --git a/lib/core/translations/language/sv_se.dart b/lib/core/translations/language/sv_se.dart index b40dbca87..a6a30e92a 100644 --- a/lib/core/translations/language/sv_se.dart +++ b/lib/core/translations/language/sv_se.dart @@ -19,11 +19,11 @@ const Map svSE = { "unknownError": "Okänt fel", "asrConnectionFailed": "Anslutning till tjänsten för röstigenkänning misslyckades. Kontrollera nätverket eller försök igen senare.", - "justNow": "Just now", - "minutesAgo": "@minutes minutes ago", - "yesterday": "Yesterday", - "daysAgo": "@days days ago", - "hoursAgo": "@hours hours ago", + "justNow": "Just nu", + "minutesAgo": "@minutes minuter sedan", + "yesterday": "Igår", + "daysAgo": "@days dagar sedan", + "hoursAgo": "@hours timmar sedan", // 启动页 "slogan": "Anslut världen, bortom ljudet", @@ -257,10 +257,10 @@ const Map svSE = { "loadFailed": "Kunde inte läsa in", "statsLoadFailedTryLater": "Kunde inte läsa in statistik. Försök igen senare.", - "cleanupComplete": "Cleanup Complete", - "cleanedOldData": "Cleaned data older than 90 days", - "exportFeature": "Export Feature", - "exportInDevelopment": "Data export is under development", + "cleanupComplete": "Rensning klar", + "cleanedOldData": "Rensade data äldre än 90 dagar", + "exportFeature": "Exportfunktion", + "exportInDevelopment": "Dataexport är under utveckling", // 商品模块 - 通用 'availablePackages': 'Tillgängliga paket', @@ -333,101 +333,105 @@ const Map svSE = { "AI-medlemskapet har gått ut, gå till medlemskapets påfyllningssida för att förnya.", // 商品模块 - AI商品页 - 'musicAndRecommendation': 'Music & Recommendation', - 'navigationAndRoutes': 'Navigation & Routes', - 'nearbySearch': 'Nearby Search', - 'newsInformation': 'News', - 'communicationAssistant': 'Communication Assistant', + 'musicAndRecommendation': 'Musik & Rekommendationer', + 'navigationAndRoutes': 'Navigation & Rutter', + 'nearbySearch': 'Sökning i närheten', + 'newsInformation': 'Nyheter', + 'communicationAssistant': 'Kommunikationsassistent', 'aiHeaderDesc1': - 'Longer conversation quota, more tool calls, extended context length.', + 'Längre konversationskvot, fler verktygsamtal, utökad kontextlängd.', 'aiHeaderDesc2': - 'Suitable for agent Q&A, summarization, analysis, and task execution.', - 'musicSearchPlaybackControl': 'Music library search and playback control', + 'Lämplig för agent-Q&A, sammanfattning, analys och uppgiftsutförande.', + 'musicSearchPlaybackControl': + 'Musikbibliotekssökning och uppspelningskontroll', 'smartPlaylistAndSimilarRecommendations': - 'Smart playlist and similar song recommendations', - 'routePlanningAndCongestionAvoidance': - 'Route planning and congestion avoidance', - 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', - 'realTimeWeatherForecast': 'Real-time weather and forecast', - 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', - 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', - 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', - 'hotNewsAndTopicOverview': 'Hot news and topic overview', - 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', - 'helpCallAndSMS': 'Help with calls and SMS', + 'Smart spellista och liknande låtrekommendationer', + 'routePlanningAndCongestionAvoidance': 'Ruttplanering och undvikande av köer', + 'voiceBroadcastAndWaypoints': 'Röstmeddelanden och vägpunkter', + 'realTimeWeatherForecast': 'Realtidsväder och prognos', + 'clothingAdviceAndTravelReminders': 'Klädråd och resereminder', + 'poiSearchFoodGasParking': 'POI-sökning: mat / bensin / parkering', + 'ratingsHoursAndDirectRoutes': 'Betyg, öppettider och direktruttning', + 'hotNewsAndTopicOverview': 'Heta nyheter och ämnesöversikt', + 'longArticleSummariesAndKeyPoints': + 'Sammanfattningar och nyckelpoäng av långa artiklar', + 'helpCallAndSMS': 'Hjälp med samtal och SMS', 'templatedMessagesAndScheduleReminders': - 'Template messages and schedule reminders', + 'Mallmeddelanden och schemapåminnelser', 'aiDisclaimer': 'Funktioner beror på enhetens behörigheter, tjänstens tillgänglighet och nätverksförhållanden.', // 商品模块 - 翻译商品页 - 'realtimeTranscription': 'Real-time Transcription', - 'sceneLexicon': 'Scenario Glossary', - 'subtitleDisplay': 'Subtitles', + 'realtimeTranscription': 'Realtidstranskribering', + 'sceneLexicon': 'Scenarioordlista', + 'subtitleDisplay': 'Undertexter', 'transHeaderDesc1': 'Simultantolkning i realtid och textöversättning med låg latens.', - 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'transHeaderDesc2': 'Lämplig för resor, affärer, tal och undervisning.', 'translateZhEn': 'Kinesisk–engelsk översättning', - 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'lowLatencyVoiceBroadcast': 'Röstmeddelanden med låg latens', 'multiLangTextTranslation': 'Flerspråkig textöversättning', 'termOptimizationContextPreserve': - 'Terminology optimization and context preservation', - 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', - 'personalVocabularyMemory': 'Personal vocabulary memory', - 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', - 'colorHighContrast': 'High color contrast', + 'Terminologioptimering och kontextbevarelse', + 'lexiconTourBusinessLife': 'Resor/Affärer/Liv-ordlistor', + 'personalVocabularyMemory': 'Personligt ordförrådsminne', + 'conversationSubtitleLargeText': 'Konversationsundertexter / Stor text-läge', + 'colorHighContrast': 'Hög färgkontrast', 'transDisclaimer': 'Översättningens prestanda beror på mikrofon, nätverkslatens och bakgrundsljud.', // 商品模块 - 会议商品页 'meetingRecording': 'Mötesinspelning', - 'transcriptionAndSummary': 'Transcription & Summary', - 'keywordSearch': 'Keyword Search', - 'collaborationSharing': 'Collaboration & Sharing', + 'transcriptionAndSummary': 'Transkribering & Sammanfattning', + 'keywordSearch': 'Nyckelordssökning', + 'collaborationSharing': 'Samarbete & Delning', 'meetingHeaderDesc1': 'Ljudinspelning, transkribering, nyckelordssökning och automatisk sammanfattning för att öka möteseffektiviteten.', 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', + 'Lämplig för affärsmöten, lektionsanteckningar och intervjuprotokoll.', 'meetingAutoRecording': 'Automatisk inspelning och segmentering', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingSpeakerTagging': 'Talaridentifiering', + 'meetingLongAudioTranscription': 'Transkribering av långa ljud', + 'meetingKeyPointSummary': 'Extraktion av nyckelpoäng', + 'meetingTopicNameSearch': 'Sök efter ämne/namn', + 'meetingTimelineJump': 'Tidslinjebyte', + 'meetingExportSummary': 'Exportera protokoll', + 'meetingMultiPlatformShare': 'Dela på flera plattformar', 'meetingDisclaimer': 'Använd i tysta miljöer; prestanda beror på mikrofon och nätverk.', // 商品模块 - VIP会员页 - 'benefitsOverview': 'Benefits overview', - 'higherQuota': 'Higher usage quota', - 'lowerUnitPrice': 'Lower unit price', - 'priorityService': 'Priority service', - 'exclusiveSupportChannel': 'Dedicated support channel', - 'fastResponse': 'Fast issue response', - 'eventsAndDiscounts': 'Events and discounts', - 'memberExclusiveEvents': 'Member-exclusive events', - 'longTermDiscountPlan': 'Long-term discount plan', - 'generalPrivileges': 'General privileges', - 'earlyAccessNewFeatures': 'Early access to new features', + 'benefitsOverview': 'Förmånsöversikt', + 'higherQuota': 'Högre användningskvot', + 'lowerUnitPrice': 'Lägre enhetspris', + 'priorityService': 'Prioriterad service', + 'exclusiveSupportChannel': 'Dedikerad supportkanal', + 'fastResponse': 'Snabb problemlösning', + 'eventsAndDiscounts': 'Evenemang och rabatter', + 'memberExclusiveEvents': 'Exklusiva medlemsevenemang', + 'longTermDiscountPlan': 'Långtidsrabattplan', + 'generalPrivileges': 'Allmänna privilegier', + 'earlyAccessNewFeatures': 'Tidig tillgång till nya funktioner', 'crossDeviceSync': 'Synkronisering mellan enheter', 'vipDisclaimer': - 'Actual benefits depend on the package details and may change with versions.', + 'Faktiska förmåner beror på paketdetaljerna och kan ändras med versioner.', // 商品模块 - 商品名称与描述 'ai_001_name': 'AI Basic 100', 'ai_002_name': 'AI Basic 500', 'ai_003_name': 'AI Basic 1000', - 'meet_001_name': 'Meeting Basic 100', - 'meet_002_name': 'Meeting Basic 500', - 'meet_003_name': 'Meeting Basic 1000', + 'meet_001_name': 'Möte Bas 100', + 'meet_002_name': 'Möte Bas 500', + 'meet_003_name': 'Möte Bas 1000', 'trans_001_name': 'Översättning Bas 100', 'trans_002_name': 'Översättning Bas 500', 'trans_003_name': 'Översättning Bas 1000', - 'ai_001_desc': 'Includes 100 uses. Access core AI features.', - 'ai_002_desc': 'Includes 500 uses. Access core AI features.', - 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'ai_001_desc': + 'Inkluderar 100 användningar. Tillgång till kärn-AI-funktioner.', + 'ai_002_desc': + 'Inkluderar 500 användningar. Tillgång till kärn-AI-funktioner.', + 'ai_003_desc': + 'Inkluderar 1000 användningar. Tillgång till kärn-AI-funktioner.', 'meet_001_desc': 'Inkluderar 100 mötesinspelningar/transkriptioner.', 'meet_002_desc': 'Inkluderar 500 mötesinspelningar/transkriptioner.', 'meet_003_desc': 'Inkluderar 1000 mötesinspelningar/transkriptioner.', @@ -442,40 +446,41 @@ const Map svSE = { // 新手引导 'skip': 'Hoppa över', - 'next': 'Next', - 'sayLilyHint': 'Say "Lily Lily" to the mic', - 'imHere': 'I’m here~', - 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', - 'aiReplyCompleted': 'Lily has finished the reply!', - 'aiThinking': 'Lily is thinking…', - 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', - 'confirmInput': 'Confirm Input', - 'guideClickSendPrefix': 'Tap send, ', - 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', - 'guideWeatherInput': 'What’s the weather today?', - 'guideWeatherSend': 'Lily will report the weather in real time', - 'guideWeatherEnd': 'Lily can report weather live—try other commands', - 'guideMusicStart': 'Tell Lily: “Play some rock music”', - 'guideMusicInput': 'Play some rock music', - 'guideMusicSend': 'Lily will find music for you', - 'guideMusicEnd': 'Lily found music—try other commands', - 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', - 'guideNavInput': 'Navigate to Shenzhen Airport', - 'guideNavSend': 'Lily will plan the route', - 'guideNavEnd': 'Navigation set—try other commands', + 'next': 'Nästa', + 'sayLilyHint': 'Säg Lily Lily till mikrofonen', + 'imHere': 'Jag är här~', + 'guideWelcomeWakeAI': 'Välkommen till Voitrans! Väck först din AI Lily.', + 'aiReplyCompleted': 'Lily har avslutat svaret!', + 'aiThinking': 'Lily tänker...', + 'guideAwakenSuccess': 'Bra! Lily är vaken - be om hjälp.', + 'confirmInput': 'Bekräfta inmatning', + 'guideClickSendPrefix': 'Tryck på skicka, ', + 'guideWeatherStart': 'Säg till Lily: Hur är vädret idag?', + 'guideWeatherInput': 'Hur är vädret idag?', + 'guideWeatherSend': 'Lily rapporterar vädret i realtid', + 'guideWeatherEnd': 'Lily kan rapportera väder live - prova andra kommandon', + 'guideMusicStart': 'Säg till Lily: Spela lite rockmusik', + 'guideMusicInput': 'Spela lite rockmusik', + 'guideMusicSend': 'Lily hittar musik åt dig', + 'guideMusicEnd': 'Lily hittade musik - prova andra kommandon', + 'guideNavStart': 'Säg till Lily: Navigera till Shenzhen Airport', + 'guideNavInput': 'Navigera till Shenzhen Airport', + 'guideNavSend': 'Lily planerar rutten', + 'guideNavEnd': 'Navigering inställd - prova andra kommandon', 'guideMeetingStart': - 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', - 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', - 'guideMeetingSend': 'Lily will create a meeting reminder', - 'guideMeetingEnd': 'Reminder created—try other commands', - 'guidePhoneStart': 'Tell Lily: “Call Mom”', - 'guidePhoneInput': 'Call Mom', - 'guidePhoneSend': 'Lily will make the call', - 'guidePhoneEnd': 'Call placed—try other commands', - 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', - 'guideSmsInput': 'Text Dad: I’ll be home for dinner', - 'guideSmsSend': 'Lily will send the message', - 'guideSmsEnd': 'Message sent—voice control is convenient', + 'Säg till Lily: Skapa en mötespåminnelse för imorgon kl. 15', + 'guideMeetingInput': 'Skapa en mötespåminnelse för imorgon kl. 15', + 'guideMeetingSend': 'Lily skapar en mötespåminnelse', + 'guideMeetingEnd': 'Påminnelse skapad - prova andra kommandon', + 'guidePhoneStart': 'Säg till Lily: Ring mamma', + 'guidePhoneInput': 'Ring mamma', + 'guidePhoneSend': 'Lily ringer samtalet', + 'guidePhoneEnd': 'Samtal kopplat - prova andra kommandon', + 'guideSmsStart': + 'Säg till Lily: Skicka ett SMS till pappa: Jag kommer hem till middag', + 'guideSmsInput': 'SMS till pappa: Jag kommer hem till middag', + 'guideSmsSend': 'Lily skickar meddelandet', + 'guideSmsEnd': 'Meddelande skickat - röststyrning är bekvämt', // Meeting模块 - 首页与导航 "startMeeting": "Starta möte", @@ -505,9 +510,9 @@ const Map svSE = { 'aiPenNotFound': 'AI PEN-enhet hittades inte', 'connectedToAiPen': 'Ansluten till AI PEN-enhet', 'checkingNewFiles': 'Söker efter nya filer att importera', - 'startingWifi': 'Starting Wi-Fi...', - 'newFilesDetected': 'New files detected, preparing to import', - 'noNewFiles': 'No new files to import', + 'startingWifi': 'Startar Wi-Fi...', + 'newFilesDetected': 'Nya filer hittades, förbereder import', + 'noNewFiles': 'Inga nya filer att importera', 'connectingWifi': 'Ansluter till Wi‑Fi...', 'wifiConnected': 'Wi‑Fi anslutet', 'downloadingFiles': 'Laddar ner filer...', @@ -521,7 +526,7 @@ const Map svSE = { 'liveRecording': 'Liveinspelning', 'audioVideoRecording': 'Ljud-/videoinspelning', 'callRecording': 'Samtalsinspelning', - 'importAudio': 'Import Audio', + 'importAudio': 'Importera ljud', 'meetingRecordExitTitle': 'Avsluta inspelning', // 退出录音 'meetingRecordExitMessage': 'Välj en åtgärd efter att ha lämnat', // 请选择离开后的操作 'meetingRecordEndAndSave': 'Avsluta och spara', // 结束录音并保存 @@ -544,30 +549,30 @@ const Map svSE = { 'För att visa den flytande inspelningsraden (timer/paus/fortsätt) under inspelning behöver vi behörigheten för flytande fönster.', // 为了在录音过程中显示录音悬浮条(计时/暂停/继续),需要悬浮窗权限。 'overlayPermissionOpenSettingsFailed': 'Det gick inte att öppna systeminställningarna automatiskt. Öppna Inställningar och aktivera behörigheten för flytande fönster manuellt.', // 无法自动跳转到系统设置,请手动前往系统设置开启悬浮窗权限。 - 'transcribing': 'Transcribing...', - 'summarizing': 'Summarizing...', - 'analyzing': 'Analyzing...', - 'summaryComplete': 'Summary Complete', - 'generate': 'Generate', - 'overview': 'Overview', - 'transcription': 'Transcription', - 'summary': 'Summary', - 'mindMap': 'Mind Map', - 'editSpeaker': 'Edit', - 'nameSpeaker': 'Name Speaker', + 'transcribing': 'Transkriberar...', + 'summarizing': 'Sammanfattar...', + 'analyzing': 'Analyserar...', + 'summaryComplete': 'Sammanfattning klar', + 'generate': 'Generera', + 'overview': 'Översikt', + 'transcription': 'Transkription', + 'summary': 'Sammanfattning', + 'mindMap': 'Tankekarta', + 'editSpeaker': 'Redigera', + 'nameSpeaker': 'Namnge talare', // Meeting模块 - 转写与总结 - 'reSummarize': 'Re-summarize', - 'dateAndTime': 'Date & Time', - 'location': 'Location', - 'attendees': 'Attendees', - 'inputLocation': 'Enter Location', - 'inputAttendees': 'Enter Attendees', + 'reSummarize': 'Sammanfatta på nytt', + 'dateAndTime': 'Datum och tid', + 'location': 'Plats', + 'attendees': 'Deltagare', + 'inputLocation': 'Ange plats', + 'inputAttendees': 'Ange deltagare', // Meeting模块 - 模版与生成 - 'selectSummaryTemplate': 'Select Summary Template', - 'useThisTemplate': 'Use This Template', - 'lastUsed': 'Last Used', + 'selectSummaryTemplate': 'Välj sammanfattningsmall', + 'useThisTemplate': 'Använd den här mallen', + 'lastUsed': 'Senast använd', 'create': 'Skapa', 'templateDetails': 'Malldetaljer', 'tag': 'Tagg', @@ -586,7 +591,7 @@ const Map svSE = { 'pleaseEnter': 'Vänligen ange', 'viewAll': 'Visa alla', 'recordingLanguage': 'Inspelningsspråk', - 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'chineseSimplified': 'Kinesiska mandarin (förenklad)', 'meetingGenerateNow': 'Generera nu', 'keyEventsAnalyzed': 'Analyserade {count} nyckelhändelser.', 'aiAnalysisDesc': @@ -600,8 +605,8 @@ const Map svSE = { 'importSuccess': 'Importerade {count} lokala inspelningar', 'importError': 'Import misslyckades: {error}', 'pleaseSelectAudioFile': 'Välj en ljudfil', - 'shareAudio': 'Share Meeting Audio', - 'shareComplete': 'Share complete!', + 'shareAudio': 'Dela mötesljud', + 'shareComplete': 'Delning klar!', 'shareFailed': 'Delning misslyckades: {error}', 'fileProcessingFailed': 'Filbearbetning misslyckades: {filePath}, fel: {error}', @@ -658,88 +663,89 @@ const Map svSE = { 'enabled': 'Aktiverad', 'disabled': 'Inaktiverad', 'myVoitransDevice': 'Min VOITRANS-enhet', - 'helpAndFeedback': 'Help & Feedback', - 'aboutVoitrans': 'About VOITRANS', + 'helpAndFeedback': 'Hjälp och feedback', + 'aboutVoitrans': 'Om VOITRANS', 'meetingDays': 'Dagar', 'meetingHours': 'Timmar', - 'voitransAiMember': 'Voitrans AI Member', - 'unlockStarterMember': 'Unlock Starter Member', + 'voitransAiMember': 'Voitrans AI-medlem', + 'unlockStarterMember': 'Lås upp Starter-medlemskap', 'bindDeviceToActivate': 'Koppla Voitrans-enhet för att aktivera Starter-medlemskap', 'unlockNow': 'Lås upp nu', // Meeting模块 - 会员与升级 - 'comparison': 'Comparison', - 'detailedInfo': 'Detailed Information', - 'monthlyTranscriptionTime': 'Monthly Transcription Time', - 'unlimited': 'Unlimited', - 'professionalTemplates': 'Professional Templates', + 'comparison': 'Jämförelse', + 'detailedInfo': 'Detaljerad information', + 'monthlyTranscriptionTime': 'Månatlig transkriptionstid', + 'unlimited': 'Obegränsat', + 'professionalTemplates': 'Professionella mallar', 'limited': 'Limited', - 'fullTemplates': 'Full Templates', + 'fullTemplates': 'Alla mallar', 'professionalTerms': 'Professional Terms', - 'customTemplates': 'Custom Templates', - 'visualMindMap': 'Visual Mind Map', - 'speakerIdentification': 'Speaker Identification', - 'aiVoiceEnhancement': 'AI Voice Enhancement', - 'audioImport': 'Audio Import', - 'multipleExportFormats': 'Multiple Export Formats', - 'professionalSummaryTemplates': 'Professional Summary Templates', + 'customTemplates': 'Anpassade mallar', + 'visualMindMap': 'Visuell tankekarta', + 'speakerIdentification': 'Talarigenkänning', + 'aiVoiceEnhancement': 'AI‑röstförbättring', + 'audioImport': 'Ljudimport', + 'multipleExportFormats': 'Flera exportformat', + 'professionalSummaryTemplates': 'Professionella sammanfattningsmallar', 'professionalTemplateDesc': - 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'Professionella mallar som ökar arbetseffektiviteten. Anpassade efter branschens behov.', 'customTemplateDesc': 'You can customize summary prompts according to your needs and use them to generate the required summaries.', 'askAiDesc': 'Extraherar intelligent djupare information från inspelningar och skapar med ett klick datatabeller, viktiga diskussionsslutsatser, att-göra-listor, rapportmejl och annat formaterat innehåll.', 'visualMindMapDesc': - 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'Mer än sammanfattningar: organisera och visualisera nyckelpunkter med tankekartor för bättre förståelse av hela texten.', 'templateCommunityDesc': - 'Discover, share, and get inspiration from the template library created by users.', + 'Upptäck, dela och få inspiration från mallbiblioteket som skapats av användare.', 'speakerIdentificationDesc': - 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'Ljudtranskription kommer att stödja talarigenkänning för att mer intuitivt återskapa innehåll från möten eller telefonsamtal. Samtidigt blir sammanfattningen mer träffsäker.', 'privateCloudSyncDesc': 'Dina inspelningar och transkriptioner lagras säkert på dedikerade molnservrar, med full kryptering vid uppladdning och nedladdning för att säkerställa integritet och säkerhet.', 'aiVoiceEnhancementDesc': - 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'AI‑röstförbättring stöder flera inställningar för brusreducering, eliminerar bakgrundsljud intelligent, förbättrar rösttydlighet och höjer ljuduppspelningskvaliteten.', 'audioImportDesc': - 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'Importera enkelt ljudfiler från lokala eller tredjepartsappar, till exempel röstanteckningar, Google Drive osv.', 'multipleExportFormatsDesc': 'Exportera dina ljudinspelningar, transkript och sammanfattningar i olika format (TXT, PDF, JPEG) efter behov.', - 'upgradeMembership': 'Upgrade Your Membership', - 'yearlySubscription': 'Yearly Subscription', - 'monthlySubscription': 'Monthly Subscription', - 'proMonthly': 'Pro ¥60/month', + 'upgradeMembership': 'Uppgradera medlemskapet', + 'yearlySubscription': 'Årsabonnemang', + 'monthlySubscription': 'Månadsabonnemang', + 'proMonthly': 'Pro ¥60/månad', 'proMonthlyDesc': - '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', - 'sevenDayTrial': '7-day Free Trial', - 'unlimitedMonthly': 'Unlimited ¥120/month', + '7 dagars gratis provperiod, därefter ¥800/år. Avsluta när som helst innan provperioden slutar.', + 'sevenDayTrial': '7 dagars gratis provperiod', + 'unlimitedMonthly': 'Obegränsat ¥120/månad', 'unlimitedMonthlyDesc': - '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', - 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + '7 dagars gratis provperiod, därefter ¥1600/år. Avsluta när som helst innan provperioden slutar.', + 'trialNote': + '*Gratis provperiod i 7 dagar, därefter debitering årligen. Avsluta när som helst.', 'proPrice': 'Pro ¥120', - 'proMonthlyPrice': '¥120/month', - 'subscribe': 'Subscribe', - 'unlimitedPrice': 'Unlimited ¥198', - 'unlimitedMonthlyPrice': '¥198/month', + 'proMonthlyPrice': '¥120/månad', + 'subscribe': 'Prenumerera', + 'unlimitedPrice': 'Obegränsat ¥198', + 'unlimitedMonthlyPrice': '¥198/månad', 'upgradeNote': - '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', - 'buyMoreTranscriptionTime': 'Buy More Transcription Time', - 'sixThousandMinutes': '6,000 minutes', - 'threeThousandMinutes': '3,000 minutes', - 'sixHundredMinutes': '600 minutes', - 'oneHundredTwentyMinutes': '120 minutes', - 'validityPeriod': '*Validity Period: ', + '*Efter uppgradering av prenumerationen beräknas återstående dagar av den ursprungliga prenumerationen automatiskt och återbetalas till ditt betalningskonto', + 'buyMoreTranscriptionTime': 'Köp mer transkriptionstid', + 'sixThousandMinutes': '6 000 minuter', + 'threeThousandMinutes': '3 000 minuter', + 'sixHundredMinutes': '600 minuter', + 'oneHundredTwentyMinutes': '120 minuter', + 'validityPeriod': '*Giltighetsperiod: ', 'validityNote': - 'Activated immediately after purchase, valid for 2 years after activation.', - 'purchase': 'Purchase', + 'Aktiveras omedelbart efter köp och är giltig i 2 år efter aktivering.', + 'purchase': 'Köp', // Meeting模块 - 录音语言 'recordLanguage': 'Inspelningsspråk', - 'cantonese': 'Cantonese', - 'sichuan': 'Sichuan Dialect', - 'shanghai': 'Shanghai Dialect', + 'cantonese': 'Kantonesiska', + 'sichuan': 'Sichuan-dialekt', + 'shanghai': 'Shanghai-dialekt', // Meeting模块 - 错误提示 - 'meetingUnknownLanguage': 'Unknown Language', + 'meetingUnknownLanguage': 'Okänt språk', 'analysisFailed': 'Analysen misslyckades, försök igen senare', 'transcriptionFailed': 'Transkribering misslyckades, försök igen senare', 'summaryFailed': 'Sammanfattning misslyckades, försök igen senare', diff --git a/test/sv_se_translations_test.dart b/test/sv_se_translations_test.dart new file mode 100644 index 000000000..0efd7fefc --- /dev/null +++ b/test/sv_se_translations_test.dart @@ -0,0 +1,22 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:voitrans/core/translations/language/en_us.dart'; +import 'package:voitrans/core/translations/language/sv_se.dart'; + +void main() { + test('svSE can be imported and accessed', () { + expect(svSE, isNotEmpty); + expect(svSE['continue'], isNotNull); + }); + + test('svSE has the same translation keys as enUS', () { + expect(svSE.keys.toSet(), equals(enUS.keys.toSet())); + }); + + test('svSE has no empty values', () { + final emptyKeys = svSE.entries + .where((entry) => entry.value.trim().isEmpty) + .map((entry) => entry.key) + .toList(growable: false); + expect(emptyKeys, isEmpty); + }); +}