diff --git a/frontend/viewer/src/locales/en.po b/frontend/viewer/src/locales/en.po index 7678587387..c4b684090a 100644 --- a/frontend/viewer/src/locales/en.po +++ b/frontend/viewer/src/locales/en.po @@ -20,6 +20,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "– ({0} changes)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(unknown)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -38,11 +42,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} activity types" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} ago" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} authors" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -168,17 +180,41 @@ msgstr "Add part of" msgid "Add Sense" msgstr "Add Sense" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Add to dictionary" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Add Word" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Add your first entry to start building your dictionary." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "All" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "All activity types" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "All authors" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -192,6 +228,15 @@ msgstr "an entry" msgid "Analysis" msgstr "Analysis" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Analysis writing system code" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Analysis writing systems" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -294,14 +339,20 @@ msgstr "blue" msgid "Browse" msgstr "Browse" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Browse view failed" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -332,6 +383,7 @@ msgstr "Choose theme" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Citation form" @@ -351,20 +403,41 @@ msgstr "clear" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Close" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Close Dictionary" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Closed" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Code" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Color" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Comments" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Comments for {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -427,6 +500,22 @@ msgstr "Copied to clipboard" msgid "Copy version" msgstr "Copy version" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Couldn't sync right now — your local changes are safe." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Create" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Create a new FieldWorks Lite project" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -493,9 +582,14 @@ msgstr "Dark" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Dashboard" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Dashboard failed to load" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -505,6 +599,7 @@ msgstr "Data Directory" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Definition" @@ -637,6 +732,19 @@ msgstr "Downloading {0}..." msgid "Downloading..." msgstr "Downloading..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "e.g. th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Edit" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Edit comment" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -647,6 +755,10 @@ msgstr "Edit Custom View" msgid "Editor" msgstr "Editor" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Empty comment" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -661,6 +773,14 @@ msgstr "Ends with" msgid "Entries missing..." msgstr "Entries missing..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Entries with examples" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Entries with senses" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -729,6 +849,10 @@ msgstr "Example" msgid "Example sentence" msgstr "Example sentence" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Example sentences" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -739,6 +863,12 @@ msgstr "Failed to copy to clipboard" msgid "Failed to download {0}" msgstr "Failed to download {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Failed to load activity" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -757,7 +887,6 @@ msgstr "Failed to open URL: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Failed to synchronize" @@ -803,6 +932,7 @@ msgstr "FieldWorks Lite version" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -929,6 +1059,7 @@ msgstr "Get support" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Gloss" @@ -966,6 +1097,7 @@ msgstr "Headword" msgid "Hide" msgstr "Hide" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1053,6 +1185,7 @@ msgstr "Lexbox logo" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Lexeme form" @@ -1080,6 +1213,15 @@ msgstr "List mode" msgid "Literal meaning" msgstr "Literal meaning" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Loading activity" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Loading comments..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1106,6 +1248,11 @@ msgstr "Local only" msgid "Login" msgstr "Login" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Login cancelled." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1204,11 +1351,13 @@ msgid "My custom view..." msgstr "My custom view..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Name" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Name is required" @@ -1242,6 +1391,14 @@ msgstr "New data" msgid "New Entry" msgstr "New Entry" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "New Project" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "New Project (Local only)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1250,13 +1407,31 @@ msgstr "New Entry" msgid "New Word" msgstr "New Word" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Newest first" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Next" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Next milestone: {0}. {1} to go." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "No activity found" +msgid "No activity matches these filters" +msgstr "No activity matches these filters" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "No activity types" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "No analysis writing systems configured." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1264,6 +1439,14 @@ msgstr "No activity found" msgid "No audio" msgstr "No audio" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "No authors" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "No comment threads yet." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1314,9 +1497,14 @@ msgstr "No server configured" msgid "No subject, unable to create a new {0}" msgstr "No subject, unable to create a new {0}" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "No vernacular writing systems configured." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "No words found" @@ -1377,6 +1565,11 @@ msgstr "Offline" msgid "Offline, unable to download" msgstr "Offline, unable to download" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Oldest first" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1384,6 +1577,7 @@ msgstr "One FieldWorks Classic commit may consist of changes to multiple entries #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Open" @@ -1392,6 +1586,11 @@ msgstr "Open" msgid "Open Data Directory" msgstr "Open Data Directory" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Open in browser" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1498,11 +1697,6 @@ msgstr "Project {0} not found on {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Project {0} on {1} is not yet set up for FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Project name..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1588,6 +1782,10 @@ msgstr "Review" msgid "rose" msgstr "rose" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Save" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1716,6 +1914,10 @@ msgstr "Show" msgid "Show {0} more..." msgstr "Show {0} more..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Sign in to add comments." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1731,11 +1933,19 @@ msgstr "Size:" msgid "Skip" msgstr "Skip" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Something went wrong" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Specific field" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Start a new thread" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1790,6 +2000,16 @@ msgstr "Sync your changes with other FieldWorks Lite users" msgid "Synced" msgstr "Synced" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Synced newest" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Synced oldest" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1816,6 +2036,7 @@ msgid "Syncing..." msgstr "Syncing..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "System" @@ -1830,6 +2051,10 @@ msgstr "Task {0}" msgid "Task not found: {0}" msgstr "Task not found: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Task view failed" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1840,6 +2065,10 @@ msgstr "Tasks" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Tell us about a bug or issue you’ve encountered." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Tell us how you work and what would help most. Your ideas guide what we build." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1872,6 +2101,7 @@ msgstr "The time when you uploaded or downloaded these changes" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." @@ -1900,6 +2130,10 @@ msgstr "This task is complete" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Thread" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1910,6 +2144,12 @@ msgstr "Toggle filters" msgid "Toggle pinned" msgstr "Toggle pinned" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Total entries" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1929,6 +2169,10 @@ msgstr "Translation {0}" msgid "Troubleshoot" msgstr "Troubleshoot" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Try again" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1955,7 +2199,8 @@ msgid "Unable to open in FieldWorks" msgstr "Unable to open in FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1972,6 +2217,10 @@ msgstr "Unknown error" msgid "Unknown error {0}" msgstr "Unknown error {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Unknown error creating project" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2056,6 +2305,19 @@ msgstr "Uses components as" msgid "Vernacular" msgstr "Vernacular" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Vernacular writing system code" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Vernacular writing system is required" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Vernacular writing systems" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2066,6 +2328,10 @@ msgstr "View" msgid "violet" msgstr "violet" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "What would you like to see here?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2116,6 +2382,14 @@ msgstr "Word or Display as is required" msgid "Word or meaning:" msgstr "Word or meaning:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Write a reply..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Write the first comment..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2137,6 +2411,11 @@ msgstr "Writing systems" msgid "Writing Systems" msgstr "Writing Systems" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "You appear to be offline. Can you connect to {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2157,3 +2436,11 @@ msgstr "You don't have permission to download project {0} from {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "You have already downloaded the {0} project" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "You've passed every milestone. What an achievement!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Your dictionary starts here" diff --git a/frontend/viewer/src/locales/es.po b/frontend/viewer/src/locales/es.po index 880e5da21e..4758f58c7c 100644 --- a/frontend/viewer/src/locales/es.po +++ b/frontend/viewer/src/locales/es.po @@ -8,7 +8,7 @@ msgstr "" "Language: es\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-14 10:19\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "– ({0} cambios)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(desconocido)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "Tipos de actividad {0}" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} hace" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "Autores {0}" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Añadir parte de" msgid "Add Sense" msgstr "Añadir acepción" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Añadir al diccionario" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Añadir palabra" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Añade tu primera entrada para comenzar a construir tu diccionario." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Todos" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Todos los tipos de actividad" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Todos los autores" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "una entrada" msgid "Analysis" msgstr "Análisis" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Código del sistema de análisis" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Sistemas de análisis de escritura" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "azul" msgid "Browse" msgstr "Visite" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Vista de navegación fallida" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Elegir tema" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Formulario de cita" @@ -356,20 +408,41 @@ msgstr "borrar" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Cerrar" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Cerrar Diccionario" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Cerrado" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Código" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Color" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Comentarios" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Comentarios para {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Copiado al portapapeles" msgid "Copy version" msgstr "Copiar versión" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "No se pudo sincronizar ahora mismo, los cambios locales están seguros." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Crear" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Crear un nuevo proyecto FieldWorks Lite" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Oscuro" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Cuadro de mandos" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "No se pudo cargar el panel" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Directorio de datos" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Definición" @@ -642,6 +737,19 @@ msgstr "Descargando {0}..." msgid "Downloading..." msgstr "Descargando..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "ej. th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Editar" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Editar comentario" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Editar vista personalizada" msgid "Editor" msgstr "Editor" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Vaciar comentario" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Termina con" msgid "Entries missing..." msgstr "Entradas faltantes..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Entradas con ejemplos" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Entradas con sentidos" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Ejemplo" msgid "Example sentence" msgstr "Ejemplo de frase" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Ejemplos de frases" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Error al copiar al portapapeles" msgid "Failed to download {0}" msgstr "Error al descargar {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Error al cargar la actividad" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Error al abrir la URL: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Error de sincronización" @@ -808,6 +937,7 @@ msgstr "Versión de FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Obtener soporte" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Glosa" @@ -971,6 +1102,7 @@ msgstr "Palabra clave" msgid "Hide" msgstr "Ocultar" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Logotipo de Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Forma del lexema" @@ -1085,6 +1218,15 @@ msgstr "Modo lista" msgid "Literal meaning" msgstr "Significado literal" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Cargando actividad" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Cargando comentarios..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Sólo local" msgid "Login" msgstr "Inicio de sesión" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Inicio de sesión cancelado." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Mi vista personalizada..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Nombre" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Se requiere nombre" @@ -1247,6 +1396,14 @@ msgstr "Nuevos datos" msgid "New Entry" msgstr "Nueva entrada" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Nuevo proyecto" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Nuevo proyecto (sólo local)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Nueva entrada" msgid "New Word" msgstr "Nueva palabra" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Más nuevo primero" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Siguiente" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Siguiente hito: {0}. {1} para ir." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "No se ha encontrado actividad" +msgid "No activity matches these filters" +msgstr "Ninguna actividad coincide con estos filtros" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "No hay tipos de actividad" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "No hay sistemas de escritura de análisis configurados." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "No se ha encontrado actividad" msgid "No audio" msgstr "Sin audio" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "No hay autores" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Aún no hay hilos de comentarios." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Ningún servidor configurado" msgid "No subject, unable to create a new {0}" msgstr "No hay tema, no se puede crear un nuevo {0}" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "No hay sistemas vernáculos de escritura configurados." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "No se han encontrado palabras" @@ -1382,6 +1570,11 @@ msgstr "Fuera de línea" msgid "Offline, unable to download" msgstr "Desconectado, no se puede descargar" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Lo más antiguo primero" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Un commit de FieldWorks Classic puede consistir en cambios en múltiples #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Abrir" @@ -1397,6 +1591,11 @@ msgstr "Abrir" msgid "Open Data Directory" msgstr "Directorio de datos abiertos" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Abrir en el navegador" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Proyecto {0} no encontrado en {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "El proyecto {0} en {1} aún no está configurado para FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Nombre del proyecto..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Revisión" msgid "rose" msgstr "rosa" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Guardar" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Mostrar" msgid "Show {0} more..." msgstr "Mostrar {0} más..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Inicia sesión para añadir comentarios." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Tamaño:" msgid "Skip" msgstr "Saltar" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Algo salió mal" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Campo específico" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Iniciar un nuevo hilo" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Sincroniza tus cambios con otros usuarios de FieldWorks Lite" msgid "Synced" msgstr "Sincronizado" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Sincronizado más reciente" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Sincronizado más antiguo" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Sincronizando..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Sistema" @@ -1835,6 +2056,10 @@ msgstr "Tarea {0}" msgid "Task not found: {0}" msgstr "Tarea no encontrada: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Vista de tarea fallida" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Tareas" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Cuéntanos acerca de un error o problema que hayas encontrado." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Cuéntanos cómo trabajas y qué te ayudaría. Tus ideas guían lo que construimos." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "El tiempo cuando subiste o descargaste estos cambios" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Estos cambios no se han subido todavía. Asegúrate de que estás conectado e inicia sesión para compartir tus cambios." @@ -1905,6 +2135,10 @@ msgstr "Esta tarea está completa" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Esto sincronizará las copias de FieldWorks Lite y FieldWorks Classic de su proyecto en Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Hilo" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Alternar filtros" msgid "Toggle pinned" msgstr "Alternar fijado" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Total de entradas" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Traducción {0}" msgid "Troubleshoot" msgstr "Solución de problemas" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Inténtalo de nuevo" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "No se puede abrir en FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Error desconocido" msgid "Unknown error {0}" msgstr "Error desconocido {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Error desconocido al crear el proyecto" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "Utiliza componentes como" msgid "Vernacular" msgstr "Vernáculo" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Código del sistema de escritura vernacular" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "El sistema de escritura vernácular es requerido" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Sistemas de escritura vernáculares" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "Ver" msgid "violet" msgstr "violeta" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "¿Qué te gustaría ver aquí?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Se requiere Palabra o Mostrar como" msgid "Word or meaning:" msgstr "Palabra o significado:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Escribe una respuesta..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Escribe el primer comentario..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Sistemas de escritura" msgid "Writing Systems" msgstr "Sistemas de escritura" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Pareces estar desconectado. ¿Puedes conectarte a {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "No tiene permiso para descargar el proyecto {0} desde {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Ya has descargado el proyecto {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "Has superado cada hito. ¡Qué logro!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Tu diccionario comienza aquí" + diff --git a/frontend/viewer/src/locales/fr.po b/frontend/viewer/src/locales/fr.po index 485d6334c9..df1cc76166 100644 --- a/frontend/viewer/src/locales/fr.po +++ b/frontend/viewer/src/locales/fr.po @@ -8,7 +8,7 @@ msgstr "" "Language: fr\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-14 10:19\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: French\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "– ({0} changements)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(inconnu)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "Types d'activité {0}" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "il y a {0}" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "Auteurs {0}" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Ajouter une partie de" msgid "Add Sense" msgstr "Ajouter du sens" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Ajouter au dictionnaire" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Ajouter un mot" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Ajoutez votre première entrée pour commencer à construire votre dictionnaire." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Tous" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Tous les types d'activité" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Tous les auteurs" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "une entrée" msgid "Analysis" msgstr "Analyse" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Code du système d'écriture d'analyse" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Systèmes d'écriture d'analyse" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "bleu" msgid "Browse" msgstr "Parcourir" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "La vue de la navigation a échoué" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Choisir un thème" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Autonyme" @@ -356,20 +408,41 @@ msgstr "effacer" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Fermer" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Fermer le dictionnaire" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Fermé" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Code" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Couleur" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Commentaires" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Commentaires pour {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Copié dans le presse-papiers" msgid "Copy version" msgstr "Copier la version dans le presse-papiers" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Échec de la synchronisation pour le moment, vos modifications locales sont sécurisées." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Créer" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Créer un nouveau projet FieldWorks Lite" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Sombre" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Tableau de bord" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Le tableau de bord n'a pas pu être chargé" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Répertoire de données" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Définition" @@ -642,6 +737,19 @@ msgstr "Téléchargement en cours {0}..." msgid "Downloading..." msgstr "Téléchargement en cours..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "par exemple th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Editer" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Modifier le commentaire" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Modifier la vue personnalisée" msgid "Editor" msgstr "Editeur" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Commentaire vide" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Se termine par" msgid "Entries missing..." msgstr "Entrées manquantes..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Entrées avec des exemples" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Entrées avec sens" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Exemple" msgid "Example sentence" msgstr "Phrase exemplaire" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Exemple de phrases" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Copie dans le presse-papiers échouée" msgid "Failed to download {0}" msgstr "Téléchargement échoué {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Impossible de charger l'activité" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Impossible d'ouvrir l'URL : {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Synchronisation échouée" @@ -808,6 +937,7 @@ msgstr "Version de FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Obtenir de l'aide" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Glose" @@ -971,6 +1102,7 @@ msgstr "Entrée de dictionnaire" msgid "Hide" msgstr "Cacher" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Logo Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Forme de lexème" @@ -1085,6 +1218,15 @@ msgstr "Mode liste" msgid "Literal meaning" msgstr "Sens littéral" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Chargement de l'activité" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Chargement des commentaires..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Uniquement au niveau local" msgid "Login" msgstr "Connexion" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Connexion annulée." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Ma vue personnalisée..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Nom" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Le nom est requis" @@ -1247,6 +1396,14 @@ msgstr "Nouvelles données" msgid "New Entry" msgstr "Nouvelle entrée" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Nouveau projet" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Nouveau projet (local uniquement)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Nouvelle entrée" msgid "New Word" msgstr "Nouveau mot" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Plus récent en premier" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Suivant" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Prochain jalon : {0}. {1} pour y aller." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "Aucune activité trouvée" +msgid "No activity matches these filters" +msgstr "Aucune activité ne correspond à ces filtres" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "Aucun type d'activité" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "Aucun système d'écriture d'analyse configuré." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "Aucune activité trouvée" msgid "No audio" msgstr "Aucun contenu audio" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "Aucun auteur" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Aucun sujet de commentaire pour le moment." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Pas de serveur configuré" msgid "No subject, unable to create a new {0}" msgstr "Aucun sujet, impossible de créer un nouveau {0}" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "Aucun système d'écriture vernaculaire configuré." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "Aucun mot trouvé" @@ -1382,6 +1570,11 @@ msgstr "Déconnecté" msgid "Offline, unable to download" msgstr "Déconnecté, impossible de télécharger" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Le plus ancien en premier" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Un commit FieldWorks Classic peut contenir des modifications à plusieur #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Ouvert" @@ -1397,6 +1591,11 @@ msgstr "Ouvert" msgid "Open Data Directory" msgstr "Répertoire des données ouvertes" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Ouvrir dans le navigateur" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Projet {0} introuvable sur {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Le projet {0} sur {1} n'est pas encore configuré pour FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Nom du projet..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Évaluer" msgid "rose" msgstr "rose" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Enregistrer" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Afficher" msgid "Show {0} more..." msgstr "Afficher {0} plus..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Connectez-vous pour ajouter des commentaires." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Taille :" msgid "Skip" msgstr "Ignorer" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Quelque chose s'est mal passé" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Champ spécifique" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Démarrer un nouveau sujet" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Synchronisez vos modifications avec d'autres utilisateurs FieldWorks Lit msgid "Synced" msgstr "Synchronisé" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Récemment synchronisé" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Plus ancien synchronisé" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Synchronisation en cours..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Système" @@ -1835,6 +2056,10 @@ msgstr "Tâche {0}" msgid "Task not found: {0}" msgstr "Tâche introuvable : {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "La vue des tâches a échoué" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Tâches" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Parlez-nous d'un bug ou d'un problème que vous avez rencontré." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Dites-nous comment vous travaillez et ce qui vous aiderait le plus." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "L'heure où vous avez téléchargé ou téléchargé ces modifications" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Ces modifications n'ont pas encore été téléchargées. Assurez-vous que vous êtes connecté et que vous êtes connecté pour partager vos modifications." @@ -1905,6 +2135,10 @@ msgstr "Cette tâche est terminée" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Cela synchronisera les copies FieldWorks Lite et FieldWorks Classic de votre projet dans Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Fil de discussion" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Basculer les filtres" msgid "Toggle pinned" msgstr "Activer/désactiver épinglé" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Total des entrées" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Traduction {0}" msgid "Troubleshoot" msgstr "Dépannage" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Réessayez" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "Impossible d'ouvrir FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Erreur inconnue" msgid "Unknown error {0}" msgstr "Erreur inconnue {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Erreur inconnue lors de la création du projet" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "Utilise des composants comme" msgid "Vernacular" msgstr "Vernaculaire" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Code du système d'écriture vernaculaire" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Un système d'écriture vernaculaire est requis" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Systèmes d'écriture vernaculaire" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "Voir" msgid "violet" msgstr "violet" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "Que voulez-vous voir ici?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Mot ou affichage tel que requis" msgid "Word or meaning:" msgstr "Mot ou sens :" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Écrire une réponse..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Écrivez le premier commentaire..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Systèmes d'écriture" msgid "Writing Systems" msgstr "Systèmes d'écriture" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Vous semblez être hors ligne. Pouvez-vous vous connecter à {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "Vous n'êtes pas autorisé(e) de télécharger le projet {0} depuis {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Vous avez déjà téléchargé le projet {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "« Vous avez franchi tous les jalons. Quelle réussite! »" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Votre dictionnaire commence ici" + diff --git a/frontend/viewer/src/locales/id.po b/frontend/viewer/src/locales/id.po index 215f56abd7..a444901e8b 100644 --- a/frontend/viewer/src/locales/id.po +++ b/frontend/viewer/src/locales/id.po @@ -8,7 +8,7 @@ msgstr "" "Language: id\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-14 10:19\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "- ({0} perubahan)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(tidak diketahui)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} jenis kegiatan" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} yang lalu" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} penulis" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Tambahkan bagian dari" msgid "Add Sense" msgstr "Tambahkan Pengertian" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Tambahkan ke kamus" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Tambahkan Kata" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Tambahkan entri pertama Anda untuk mulai menyusun kamus Anda." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Semua" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Semua jenis aktivitas" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Semua penulis" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "sebuah entri" msgid "Analysis" msgstr "Analisis" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Analisis penulisan kode sistem" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Analisis sistem penulisan" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "biru" msgid "Browse" msgstr "Jelajahi" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Tampilan penelusuran gagal" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Pilih tema" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Formulir kutipan" @@ -356,20 +408,41 @@ msgstr "jelas" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Tutup" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Tutup Kamus" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Tutup" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Kode" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Warna" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Komentar" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Komentar untuk {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Disalin ke papan klip" msgid "Copy version" msgstr "Versi salin" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Saat ini tidak bisa disinkronkan — perubahan lokal Anda tetap aman." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Buat" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Buat proyek FieldWorks Lite baru" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Gelap" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Dasbor" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Dashboard tidak berhasil dimuat" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Direktori Data" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Definisi" @@ -642,6 +737,19 @@ msgstr "Mengunduh {0}..." msgid "Downloading..." msgstr "Mengunduh..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "misalnya: th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Sunting" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Sunting komentar" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Edit Tampilan Khusus" msgid "Editor" msgstr "Editor" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Komentar kosong" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Diakhiri dengan" msgid "Entries missing..." msgstr "Entri yang hilang..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Entri yang disertai contoh" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Entri yang memiliki arti" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Contoh" msgid "Example sentence" msgstr "Contoh kalimat" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Contoh kalimat" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Gagal menyalin ke papan klip" msgid "Failed to download {0}" msgstr "Gagal mengunduh {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Gagal memuat aktivitas" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Gagal membuka URL: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Gagal menyinkronkan" @@ -808,6 +937,7 @@ msgstr "Versi FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Dapatkan dukungan" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Arti Singkat" @@ -971,6 +1102,7 @@ msgstr "Headword" msgid "Hide" msgstr "Sembunyikan" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Logo Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Bentuk leksem" @@ -1085,6 +1218,15 @@ msgstr "Mode daftar" msgid "Literal meaning" msgstr "Arti harfiah" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Aktivitas pemuatan" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Sedang memuat komentar..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Hanya lokal" msgid "Login" msgstr "Masuk" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Masuk dibatalkan." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Tampilan khusus saya..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Nama" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Nama harus diisi" @@ -1247,6 +1396,14 @@ msgstr "Data baru" msgid "New Entry" msgstr "Entri Baru" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Proyek Baru" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Proyek Baru (Hanya untuk wilayah lokal)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Entri Baru" msgid "New Word" msgstr "Kata Baru" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Yang terbaru terlebih dahulu" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Berikutnya" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Tonggak berikutnya: {0}. Masih tersisa {1}." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "Tidak ada aktivitas yang ditemukan" +msgid "No activity matches these filters" +msgstr "Tidak ada aktivitas yang sesuai dengan filter ini" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "Tidak ada jenis aktivitas" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "Belum ada sistem penulisan analisis yang dikonfigurasi." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "Tidak ada aktivitas yang ditemukan" msgid "No audio" msgstr "Tidak ada audio" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "Tidak ada penulis" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Belum ada utas komentar." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Tidak ada server yang dikonfigurasi" msgid "No subject, unable to create a new {0}" msgstr "Tidak ada subjek, tidak dapat membuat {0}baru" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "Tidak ada sistem penulisan bahasa daerah yang dikonfigurasi." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "Tidak ada kata yang ditemukan" @@ -1382,6 +1570,11 @@ msgstr "Offline" msgid "Offline, unable to download" msgstr "Offline, tidak dapat mengunduh" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Yang tertua terlebih dahulu" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Satu komit FieldWorks Classic dapat terdiri dari perubahan pada beberapa #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Buka" @@ -1397,6 +1591,11 @@ msgstr "Buka" msgid "Open Data Directory" msgstr "Direktori Data Terbuka" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Buka di peramban" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Proyek {0} tidak ditemukan di {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Proyek {0} di {1} belum disiapkan untuk FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Nama proyek..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Ulasan" msgid "rose" msgstr "naik" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Simpan" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Tampilkan" msgid "Show {0} more..." msgstr "Tampilkan {0} selengkapnya..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Masuk untuk menambahkan komentar." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Ukuran:" msgid "Skip" msgstr "Lewati" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Ada yang tidak beres" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Bidang tertentu" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Buat topik baru" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Sinkronkan perubahan Anda dengan pengguna FieldWorks Lite lainnya" msgid "Synced" msgstr "Disinkronkan" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Tersinkronisasi dengan versi terbaru" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Yang paling lama dan sudah disinkronkan" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Menyinkronkan..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Sistem" @@ -1835,6 +2056,10 @@ msgstr "Tugas {0}" msgid "Task not found: {0}" msgstr "Tugas tidak ditemukan: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Tampilan tugas gagal" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Tugas" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Beritahu kami tentang bug atau masalah yang Anda temui." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Ceritakan kepada kami bagaimana cara Anda bekerja dan apa yang paling membantu. Ide-ide Anda menjadi panduan bagi apa yang kami kembangkan." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "Waktu ketika Anda mengunggah atau mengunduh perubahan ini" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Perubahan ini belum diunggah. Pastikan Anda online dan masuk untuk membagikan perubahan Anda." @@ -1905,6 +2135,10 @@ msgstr "Tugas ini selesai" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Ini akan menyinkronkan salinan FieldWorks Lite dan FieldWorks Classic dari proyek Anda di Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Topik" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Beralih filter" msgid "Toggle pinned" msgstr "Beralih disematkan" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Jumlah entri" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Terjemahan {0}" msgid "Troubleshoot" msgstr "Memecahkan masalah" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Coba lagi" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "Tidak dapat dibuka di FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Kesalahan yang tidak diketahui" msgid "Unknown error {0}" msgstr "Kesalahan tidak dikenal {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Terjadi kesalahan yang tidak diketahui saat membuat proyek" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2059,7 +2308,20 @@ msgstr "Menggunakan komponen sebagai" #. Labels the vernacular language writing systems (the language being documented). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "Vernacular" -msgstr "Vernakular" +msgstr "Bahasa Daerah" + +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Kode sistem penulisan bahasa daerah" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Diperlukan sistem penulisan dalam bahasa daerah" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Sistem penulisan bahasa daerah" #. Button label #: src/project/browse/ViewPicker.svelte @@ -2071,6 +2333,10 @@ msgstr "Melihat" msgid "violet" msgstr "violet" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "Apa yang ingin Anda lihat di sini?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Kata atau Tampilan sesuai kebutuhan" msgid "Word or meaning:" msgstr "Kata atau makna:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Tulis balasan..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Tulis komentar pertama..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Sistem penulisan" msgid "Writing Systems" msgstr "Sistem Penulisan" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Sepertinya Anda sedang offline. Bisakah Anda mengakses {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "Anda tidak memiliki izin untuk mengunduh proyek {0} dari {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Anda telah mengunduh proyek {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "Kamu telah melewati setiap tahap penting. Sungguh sebuah prestasi yang luar biasa!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Kamus Anda dimulai di sini" + diff --git a/frontend/viewer/src/locales/ko.po b/frontend/viewer/src/locales/ko.po index d84aaca2d1..6998353257 100644 --- a/frontend/viewer/src/locales/ko.po +++ b/frontend/viewer/src/locales/ko.po @@ -8,7 +8,7 @@ msgstr "" "Language: ko\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-14 10:19\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Korean\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "- ({0}개 변경)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(알 수 없음)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} 활동 유형" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} 전" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} 저자" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "의 일부를 추가합니다." msgid "Add Sense" msgstr "센스 추가" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "사전에 추가" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "단어 추가" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "사전 작성을 시작하려면 첫 번째 항목을 추가하세요." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "모두" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "모든 활동 유형" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "모든 저자" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "항목" msgid "Analysis" msgstr "분석" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "시스템 코드 분석 작성" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "분석 작성 시스템" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "파란색" msgid "Browse" msgstr "찾아보기" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "찾아보기 실패" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "테마 선택" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "인용 양식" @@ -356,20 +408,41 @@ msgstr "clear" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "닫기" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "사전 닫기" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "종료됨" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "코드" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "색상" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "댓글" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "에 대한 댓글 {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "클립보드에 복사" msgid "Copy version" msgstr "복사 버전" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "지금은 동기화할 수 없습니다. 로컬에서 변경한 내용은 안전하게 보관됩니다." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "만들기" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "새로운 FieldWorks Lite 프로젝트 만들기" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Dark" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "대시보드" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "대시보드가 로드되지 않았습니다." + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "데이터 디렉토리" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "정의" @@ -642,6 +737,19 @@ msgstr "다운로드 {0}..." msgid "Downloading..." msgstr "다운로드 중..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "예: th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "편집" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "댓글 수정" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "사용자 지정 보기 편집" msgid "Editor" msgstr "편집기" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "비어 있는 댓글" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "로 끝납니다." msgid "Entries missing..." msgstr "항목이 누락되었습니다..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "예시가 포함된 항목" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "의미가 포함된 항목" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "예" msgid "Example sentence" msgstr "문장 예시" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "예문" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "클립보드에 복사하지 못했습니다." msgid "Failed to download {0}" msgstr "다운로드에 실패했습니다 {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "활동을 불러오는 데 실패했습니다." + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "URL을 열지 못했습니다: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "동기화 실패" @@ -808,6 +937,7 @@ msgstr "FieldWorks Lite 버전" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "지원 받기" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "광택" @@ -971,6 +1102,7 @@ msgstr "헤드워드" msgid "Hide" msgstr "숨기기" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "렉스박스 로고" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Lexeme 양식" @@ -1085,6 +1218,15 @@ msgstr "목록 모드" msgid "Literal meaning" msgstr "문자 그대로의 의미" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "로딩 중" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "댓글 불러오는 중..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "로컬 전용" msgid "Login" msgstr "로그인" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "로그인이 취소되었습니다." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "내 사용자 지정 보기..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "이름" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "이름은 필수 입력 사항입니다." @@ -1247,6 +1396,14 @@ msgstr "새로운 데이터" msgid "New Entry" msgstr "새 항목" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "새로운 프로젝트" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "새로운 프로젝트 (지역 한정)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "새 항목" msgid "New Word" msgstr "새 단어" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "최신순" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "다음" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "다음 이정표: {0}. {1} 남았습니다." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "활동을 찾을 수 없습니다." +msgid "No activity matches these filters" +msgstr "이 필터 조건에 맞는 활동이 없습니다." + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "활동 유형 없음" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "분석 작성 시스템이 구성되어 있지 않습니다." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "활동을 찾을 수 없습니다." msgid "No audio" msgstr "오디오 없음" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "저자 없음" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "아직 댓글이 없습니다." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "구성된 서버 없음" msgid "No subject, unable to create a new {0}" msgstr "제목이 없습니다, 새로 만들 수 없습니다 {0}" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "구성된 토착 문자 체계가 없습니다." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "단어를 찾을 수 없습니다." @@ -1382,6 +1570,11 @@ msgstr "오프라인" msgid "Offline, unable to download" msgstr "오프라인 상태, 다운로드할 수 없음" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "가장 오래된 순서대로" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "하나의 FieldWorks Classic 커밋은 여러 항목 또는 필드에 #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "열기" @@ -1397,6 +1591,11 @@ msgstr "열기" msgid "Open Data Directory" msgstr "오픈 데이터 디렉터리" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "브라우저에서 열기" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "프로젝트 {0} {1}에서 찾을 수 없음" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "{1} 의 프로젝트 {0} 는 아직 FieldWorks Lite용으로 설정되지 않았습니다." -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "프로젝트 이름..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "검토" msgid "rose" msgstr "rose" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "저장" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "표시" msgid "Show {0} more..." msgstr "보기 {0} 더보기..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "댓글을 달려면 로그인하세요." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "크기:" msgid "Skip" msgstr "건너뛰기" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "문제가 발생했습니다." + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "특정 필드" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "새 게시글 작성하기" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "다른 FieldWorks Lite 사용자와 변경 사항 동기화" msgid "Synced" msgstr "동기화" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "최신 버전과 동기화됨" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "동기화된 가장 오래된 항목" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "동기화..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "시스템" @@ -1835,6 +2056,10 @@ msgstr "작업 {0}" msgid "Task not found: {0}" msgstr "작업을 찾을 수 없음: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "작업 보기 실패" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "작업" msgid "Tell us about a bug or issue you’ve encountered." msgstr "발생한 버그나 문제에 대해 알려주세요." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "여러분의 업무 방식과 가장 도움이 될 만한 점이 무엇인지 알려주세요. 여러분의 아이디어가 우리가 개발할 방향을 결정합니다." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "이러한 변경 사항을 업로드하거나 다운로드한 시간" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "변경 내용이 아직 업로드되지 않았습니다. 변경 내용을 공유하려면 온라인 상태이고 로그인했는지 확인하세요." @@ -1905,6 +2135,10 @@ msgstr "이 작업이 완료되었습니다." msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "이렇게 하면 렉스박스에서 프로젝트의 FieldWorks Lite 및 FieldWorks Classic 사본이 동기화됩니다." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "스레드" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "필터 토글" msgid "Toggle pinned" msgstr "고정 토글" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "총 응모 건수" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "번역 {0}" msgid "Troubleshoot" msgstr "문제 해결" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "다시 시도" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "FieldWorks에서 열 수 없음" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "알 수 없는 오류" msgid "Unknown error {0}" msgstr "알 수 없는 오류 {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "프로젝트 생성 중 알 수 없는 오류가 발생했습니다." + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "구성 요소를 다음과 같이 사용합니다." msgid "Vernacular" msgstr "토착어" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "토착 문자 체계 코드" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "현지 언어 문자 체계가 필요합니다" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "지역별 문자 체계" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "보기" msgid "violet" msgstr "바이올렛" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "이곳에 어떤 내용을 보고 싶으신가요?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "단어 또는 표시 이름은 필수 입력 사항입니다." msgid "Word or meaning:" msgstr "단어 또는 의미:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "답글을 작성하세요..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "첫 번째 댓글을 남겨보세요..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "쓰기 시스템" msgid "Writing Systems" msgstr "쓰기 시스템" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "현재 오프라인 상태인 것 같습니다. {0} 에 접속할 수 있나요?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "{1}에서 {0} 프로젝트를 다운로드할 수 있는 권한이 없 #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "이미 {0} 프로젝트를 다운로드하셨습니다." + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "모든 이정표를 하나하나 달성하셨군요. 정말 대단한 성과입니다!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "여러분의 사전은 여기서 시작됩니다" + diff --git a/frontend/viewer/src/locales/ms.po b/frontend/viewer/src/locales/ms.po index 86edeaa7f4..9a3f0336bc 100644 --- a/frontend/viewer/src/locales/ms.po +++ b/frontend/viewer/src/locales/ms.po @@ -8,7 +8,7 @@ msgstr "" "Language: ms\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-28 10:55\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Malay\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "– ({0} perubahan)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(tidak diketahui)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} jenis aktiviti" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} yang lalu" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} penulis" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Tambah sebahagian daripada" msgid "Add Sense" msgstr "Tambah Makna" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Tambah ke kamus" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Tambah Perkataan" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Tambah entri pertama anda untuk mula membina kamus anda." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Semua" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Semua jenis aktiviti" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Semua pengarang" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "satu entri" msgid "Analysis" msgstr "Analisis" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Penulisan analisis sistem kod" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Analisis sistem penulisan" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "biru" msgid "Browse" msgstr "Terokai" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Paparan semak imbas gagal" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Pilih tema" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Bentuk petikan" @@ -356,20 +408,41 @@ msgstr "padam" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Tutup" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Tutup Kamus" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Ditutup" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Kod" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Warna" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Komen" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Komen untuk {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Disalin ke papan keratan" msgid "Copy version" msgstr "Salin versi" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Tidak dapat menyegerakkan sekarang — perubahan tempatan anda selamat." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Mencipta" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Buat projek FieldWorks Lite baru" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Gelap" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Papan Pemuka" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Paparan pemuka gagal memuatkan" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Direktori Data" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Definisi" @@ -642,6 +737,19 @@ msgstr "Memuat turun {0}..." msgid "Downloading..." msgstr "Memuat turun..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "contohnya th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Sunting" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Sunting komen" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Sunting Tinjauan Tersuai" msgid "Editor" msgstr "Editor" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Komen kosong" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Berakhir dengan" msgid "Entries missing..." msgstr "Entri yang hilang..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Kandungan dengan contoh" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Kandungan dengan makna" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Contoh" msgid "Example sentence" msgstr "Ayat contoh" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Contoh ayat" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Gagal menyalin ke papan keratan" msgid "Failed to download {0}" msgstr "Gagal memuat turun {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Gagal memuatkan aktiviti" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Gagal membuka URL: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Gagal menyegerak" @@ -808,6 +937,7 @@ msgstr "Versi FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Dapatkan sokongan" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Glos" @@ -971,6 +1102,7 @@ msgstr "Kata Utama" msgid "Hide" msgstr "Sembunyi" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Logo Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Bentuk leksem" @@ -1085,6 +1218,15 @@ msgstr "Mod senarai" msgid "Literal meaning" msgstr "Makna harfiah" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Muat aktiviti" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Memuatkan komen..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Tempatan sahaja" msgid "Login" msgstr "Log masuk" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Log masuk dibatalkan." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Pandangan tersuai saya..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Nama" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Nama diperlukan" @@ -1247,6 +1396,14 @@ msgstr "Data baru" msgid "New Entry" msgstr "Entri Baru" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Projek Baru" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Projek Baru (Tempatan sahaja)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Entri Baru" msgid "New Word" msgstr "Perkataan Baru" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Yang terbaru dahulu" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Seterusnya" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Sasaran seterusnya: {0}. {1} tinggal." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "Tiada aktiviti ditemui" +msgid "No activity matches these filters" +msgstr "Tiada aktiviti yang memenuhi penapis ini" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "Tiada jenis aktiviti" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "Tiada sistem penulisan analisis dikonfigurasikan." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "Tiada aktiviti ditemui" msgid "No audio" msgstr "Tiada audio" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "Tiada pengarang" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Tiada lagi rentetan komen." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Tiada pelayan dikonfigurasikan" msgid "No subject, unable to create a new {0}" msgstr "Tiada subjek, tidak dapat membuat {0} baru" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "Tiada sistem tulisan tempatan yang dikonfigurasikan." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "Tiada perkataan ditemui" @@ -1382,6 +1570,11 @@ msgstr "Luar talian" msgid "Offline, unable to download" msgstr "Luar talian, tidak dapat memuat turun" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Yang tertua dahulu" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Satu komit FieldWorks Classic mungkin terdiri daripada perubahan pada be #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Buka" @@ -1397,6 +1591,11 @@ msgstr "Buka" msgid "Open Data Directory" msgstr "Buka Direktori Data" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Buka dalam pelayar" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Projek {0} tidak ditemui pada {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Projek {0} pada {1} belum disediakan untuk FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Nama projek..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Semak" msgid "rose" msgstr "merah jambu" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Simpan" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Tunjukkan" msgid "Show {0} more..." msgstr "Tunjukkan {0} lagi..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Log masuk untuk menambah komen." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Saiz:" msgid "Skip" msgstr "Langkau" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Sesuatu telah berlaku dengan salah" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Medan tertentu" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Mulakan utas baru" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Segerakkan perubahan anda dengan pengguna FieldWorks Lite yang lain" msgid "Synced" msgstr "Disegerakkan" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Disegerakkan yang terbaru" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Yang tertua disegerakkan" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Sedang disegerakkan..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Sistem" @@ -1835,6 +2056,10 @@ msgstr "Tugasan {0}" msgid "Task not found: {0}" msgstr "Tugasan tidak ditemui: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Tinjauan tugas gagal" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Tugasan" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Beritahu kami mengenai pepijat atau isu yang anda temui." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Beritahu kami bagaimana anda bekerja dan apa yang paling membantu. Idea anda membimbing apa yang kami bina." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "Masa apabila anda memuat naik atau memuat turun perubahan ini" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Perubahan ini belum dimuat naik. Pastikan anda dalam talian dan log masuk untuk berkongsi perubahan anda." @@ -1905,6 +2135,10 @@ msgstr "Tugasan ini selesai" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Ini akan menyegerakkan salinan FieldWorks Lite dan FieldWorks Classic projek anda dalam Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Benang" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Togol penapis" msgid "Toggle pinned" msgstr "Togol disemat" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Jumlah penyertaan" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Terjemahan {0}" msgid "Troubleshoot" msgstr "Selesaikan masalah" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Cuba lagi" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "Tidak dapat membuka dalam FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Ralat tidak diketahui" msgid "Unknown error {0}" msgstr "Ralat tidak diketahui {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Ralat tidak diketahui semasa mencipta projek" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "Menggunakan komponen sebagai" msgid "Vernacular" msgstr "Bahasaan" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Kod sistem penulisan Vernakular" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Sistem tulisan vernacular diperlukan" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Sistem tulisan vernakular" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "Lihat" msgid "violet" msgstr "ungu" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "Apa yang anda ingin lihat di sini?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Perkataan atau Papar Sebagai diperlukan" msgid "Word or meaning:" msgstr "Perkataan atau makna:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Tulis balasan..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Tulis komen pertama..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Sistem tulisan" msgid "Writing Systems" msgstr "Sistem Penulisan" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Anda nampaknya tidak dalam talian. Bolehkah anda menyambung ke {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "Anda tidak mempunyai kebenaran untuk memuat turun projek {0} daripada {1 #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Anda telah pun memuat turun projek {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "Anda telah mencapai setiap pencapaian penting. Betapa hebatnya pencapaian ini!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Kamus anda bermula di sini" + diff --git a/frontend/viewer/src/locales/sw.po b/frontend/viewer/src/locales/sw.po index ddc5f77608..430ccc75ee 100644 --- a/frontend/viewer/src/locales/sw.po +++ b/frontend/viewer/src/locales/sw.po @@ -8,7 +8,7 @@ msgstr "" "Language: sw\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-28 10:55\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Swahili\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -25,6 +25,10 @@ msgstr "" msgid "– ({0} changes)" msgstr "– ({0} mabadiliko)" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(Haijulikani)" + #. Generic placeholder for dynamic content #: src/home/HomeView.svelte #: src/lib/components/audio/audio-editor.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} aina za shughuli" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} iliyopita" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} waandishi" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Ongeza sehemu ya" msgid "Add Sense" msgstr "Ongeza Maana" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Ongeza kwenye kamusi" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Ongeza Neno" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Ongeza kipengele chako cha kwanza ili kuanza kujenga kamusi yako." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Vyote" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Aina zote za shughuli" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Waandishi wote" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "ingizo" msgid "Analysis" msgstr "Uchambuzi" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Uchambuzi wa uandishi wa mfumo wa msimbo" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Mifumo ya uandishi wa uchambuzi" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "buluu" msgid "Browse" msgstr "Angalia" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Uangaliaji wa kuvinjari umeshindikana" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Chagua mandhari" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Fomu ya Manukuu" @@ -356,20 +408,41 @@ msgstr "futa" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Funga" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Funga Kamusi" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Imefungwa" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Msimbo" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Rangi" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Maoni" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Maoni kwa {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Imenakiliwa kwenye ubao wa kunakili" msgid "Copy version" msgstr "Nakili toleo" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Haikuweza kusawazisha kwa sasa — mabadiliko yako ya ndani yako salama." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Tengeneza" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Tengeneza mradi mpya wa FieldWorks Lite" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Giza" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Dashibodi" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Dashibodi ilishindwa kupakia" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Faharasa ya Data" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Maana" @@ -642,6 +737,19 @@ msgstr "Inapakua {0}..." msgid "Downloading..." msgstr "Inapakua..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "mfano: th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Hariri" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Hariri maoni" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Hariri Muonekano Binafsi" msgid "Editor" msgstr "Mhariri" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Maoni tupu" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Inaishia na" msgid "Entries missing..." msgstr "Ingizo linalokosa..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Maingizo yenye mifano" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Maingizo yenye hisia" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Mfano" msgid "Example sentence" msgstr "Sentensi ya mfano" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Sentensi za mfano" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Imeshindwa kunakili kwenye ubao wa kunakili" msgid "Failed to download {0}" msgstr "Imeshindwa kupakua {0}" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Imeshindwa kupakia shughuli" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Imeshindwa kufungua URL: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Imeshindwa kuoanisha" @@ -808,6 +937,7 @@ msgstr "Toleo la FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Pata msaada" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Glosi" @@ -971,6 +1102,7 @@ msgstr "Neno la kichwa" msgid "Hide" msgstr "Ficha" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Nembo ya Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Fomu ya Neno" @@ -1085,6 +1218,15 @@ msgstr "Hali ya orodha" msgid "Literal meaning" msgstr "Maana halisi" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Upakiaji unaendelea" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Inapakia maoni..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Mitaa tu" msgid "Login" msgstr "Ingia" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Uingiaji umefutwa." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Mtazamo wangu maalum..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Jina" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Jina linahitajika" @@ -1247,6 +1396,14 @@ msgstr "Data mpya" msgid "New Entry" msgstr "Ingizo Mpya" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Mradi Mpya" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Mradi Mpya (Kwenye eneo tu)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Ingizo Mpya" msgid "New Word" msgstr "Neno Jipya" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Zipya kwanza" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Inayofuata" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Kipengele kinachofuata: {0}. {1} bado." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "Hakuna shughuli iliyopatikana" +msgid "No activity matches these filters" +msgstr "Hakuna shughuli inayolingana na vichujio hivi" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "Hakuna aina za shughuli" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "Hakuna mifumo ya uandishi wa uchambuzi iliyowekwa." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "Hakuna shughuli iliyopatikana" msgid "No audio" msgstr "Hakuna sauti" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "Hakuna waandishi" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Bado hakuna mfululizo wa maoni." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Hakuna seva iliyotengwa" msgid "No subject, unable to create a new {0}" msgstr "Hakuna kigezo, haiwezi kutengeneza {0} mpya" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "Hakuna mifumo ya maandishi ya kienyeji iliyosanidiwa." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "Hakuna neno liliyopatikana" @@ -1382,6 +1570,11 @@ msgstr "Nyuma ya mtandao" msgid "Offline, unable to download" msgstr "Nyuma ya mtandao, haiwezi kupakua" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Za zamani kwanza" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Kumbuka moja ya FieldWorks Classic inaweza kuwa na mabadiliko kwa ingizo #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Fungua" @@ -1397,6 +1591,11 @@ msgstr "Fungua" msgid "Open Data Directory" msgstr "Fungua Faharasa ya Data" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Fungua kwenye kivinjari" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Mradi {0} haipatikani kwenye {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Mradi {0} kwenye {1} haujajajengwa kwa FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Jina la mradi..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Tathmini" msgid "rose" msgstr "waridi" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Hifadhi" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Onyesha" msgid "Show {0} more..." msgstr "Onyesha {0} zaidi..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Ingia ili kuongeza maoni." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Ukubwa:" msgid "Skip" msgstr "Ruka" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Kuna tatizo limetokea" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Sehemu mahsusi" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Anza mada mpya" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Kuoanisha mabadiliko yako na watumiaji wengine wa FieldWorks Lite" msgid "Synced" msgstr "Kuoanishwa" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Imesawazishwa toleo jipya zaidi" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Iliyosawazishwa ya zamani zaidi" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Inaoanisha..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Mfumo" @@ -1835,6 +2056,10 @@ msgstr "Jukumu {0}" msgid "Task not found: {0}" msgstr "Jukumu halipatikani: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Uoni wa kazi umeshindwa" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Jukumu" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Tuambie kuhusu kosa au matatizo uliyokabiliwa." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Tuambie jinsi unavyofanya kazi na ni nini kingesaidia zaidi. Mawazo yako yanaongoza kile tunachojenga." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "Wakati ulipoweka au kupakua mabadiliko haya" #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Mabadiliko haya hayajawekwa bado. Hakikisha unaunganishwa na kuingia ili kushiriki mabadiliko yako." @@ -1905,6 +2135,10 @@ msgstr "Jukumu hili limekamilika" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Hii itaoanisha kopia za FieldWorks Lite na FieldWorks Classic za mradi wako kwenye Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Mada" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Geuza kichujio" msgid "Toggle pinned" msgstr "Geuza iliyobandikwa" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Jumla ya maingizo" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Tafsiri {0}" msgid "Troubleshoot" msgstr "Tatanua" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Jaribu tena" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "Haiwezi kufungua katika FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Hitilafu isiyojulikana" msgid "Unknown error {0}" msgstr "Hitilafu isiyojulikana {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Hitilafu isiyojulikana wakati wa kuunda mradi" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "Inatumia sehemu kama" msgid "Vernacular" msgstr "Lugha ya kienyeji" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Msimbo wa mfumo wa uandishi wa lugha ya kienyeji" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Mfumo wa uandishi wa lugha ya kienyeji unahitajika" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Mifumo ya uandishi ya lugha za kienyeji" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "Muonekano" msgid "violet" msgstr "zambarau" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "Ungependa kuona nini hapa?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Neno au Onyesha kulingana na inavyohitajika" msgid "Word or meaning:" msgstr "Neno au maana:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Andika jibu..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Andika maoni ya kwanza..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Mifumo ya uandishi" msgid "Writing Systems" msgstr "Mifumo ya Kuandika" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Inaonekana uko nje ya mtandao. Je, unaweza kuunganisha na {0}?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "Huna ruhusa ya kupakua mradi {0} kutoka {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Umeshapakua mradi wa {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "Umefikia kila hatua muhimu. Ni mafanikio makubwa!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Kamusi yako inaanza hapa" + diff --git a/frontend/viewer/src/locales/vi.po b/frontend/viewer/src/locales/vi.po index 74bb968e9f..da20461635 100644 --- a/frontend/viewer/src/locales/vi.po +++ b/frontend/viewer/src/locales/vi.po @@ -8,7 +8,7 @@ msgstr "" "Language: vi\n" "Project-Id-Version: language-depot\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-05-28 10:55\n" +"PO-Revision-Date: 2026-07-06 16:14\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -23,7 +23,11 @@ msgstr "" #. {0} = number of changes (e.g., 1, 5, 10) #: src/lib/activity/ActivityItem.svelte msgid "– ({0} changes)" -msgstr "– ({0} thay đổi)" +msgstr "– ({0} các thay đổi)" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "(unknown)" +msgstr "(không rõ)" #. Generic placeholder for dynamic content #: src/home/HomeView.svelte @@ -43,11 +47,19 @@ msgstr "{0} (FieldWorks Lite)" msgid "{0} (FieldWorks)" msgstr "{0} (FieldWorks)" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} activity types" +msgstr "{0} các loại hoạt động" + #. Time display format #: src/lib/components/ui/format/format-relative-date-fn.svelte.ts msgid "{0} ago" msgstr "{0} trước" +#: src/lib/activity/ActivityFilter.svelte +msgid "{0} authors" +msgstr "{0} tác giả" + #. File size display with unit #: src/lib/components/audio/audio-editor.svelte msgid "{0} MB" @@ -173,17 +185,41 @@ msgstr "Thêm phần của" msgid "Add Sense" msgstr "Thêm Ý nghĩa (sense)" +#. Subtitle of a placeholder row shown at the end of the entry list while searching (also in the no-results state) +#. The search text is displayed above it as a headword; clicking opens the new-entry dialog pre-filled with that text +#: src/project/browse/EntriesList.svelte +msgid "Add to dictionary" +msgstr "Thêm vào từ điển" + #. Dialog title #: src/lib/entry-editor/NewEntryDialog.svelte msgid "Add Word" msgstr "Thêm Từ" +#: src/project/dashboard/DashboardView.svelte +msgid "Add your first entry to start building your dictionary." +msgstr "Hãy thêm mục từ đầu tiên để bắt đầu xây dựng từ điển của bạn." + #. Radio option in custom view writing system picker. #. Includes all writing systems (no filtering). #: src/lib/views/custom/CustomViewWritingSystems.svelte msgid "All" msgstr "Tất cả" +#. Filter option in activity view activity-type dropdown — show all kinds of edits. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All activity types" +msgstr "Tất cả các loại hoạt động" + +#. Filter option in activity view author dropdown — show commits from every author. +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +#: src/lib/activity/ActivityFilter.svelte +msgid "All authors" +msgstr "Tất cả các tác giả" + #. Relevant view: Classic #. Lite view equivalent: "a word" #. Placeholder/suggestion in search field @@ -197,6 +233,15 @@ msgstr "một mục" msgid "Analysis" msgstr "Phân tích" +#. Field label in the create-project dialog. An optional additional analysis writing system to create (English is always included), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Analysis writing system code" +msgstr "Phân tích mã nguồn hệ thống" + +#: src/project/dashboard/DashboardView.svelte +msgid "Analysis writing systems" +msgstr "Các hệ thống viết phân tích" + #. Relevant view: Classic #. Lite view equivalent: "Any part of speech" #. Filter option: clear grammatical info filter @@ -299,14 +344,20 @@ msgstr "xanh dương" msgid "Browse" msgstr "Duyệt" +#: src/project/browse/BrowseView.svelte +msgid "Browse view failed" +msgstr "Không thể hiển thị chế độ xem" + #. Button to close dialog without saving #. Appears in dialog footer; discards any pending edits #. Synonyms across UI: "Don't delete" (Delete dialog), "Close" (About dialog) #. Keep translation brief (3-4 chars in some languages) to fit button layout +#: src/home/CreateProjectDialog.svelte #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte #: src/lib/components/SubmitOrCancel.svelte #: src/lib/components/audio/AudioDialog.svelte #: src/lib/components/field-editors/select.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/lib/entry-editor/EditEntryDialog.svelte #: src/lib/entry-editor/NewEntryDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte @@ -337,6 +388,7 @@ msgstr "Chọn chủ đề" #. Lite view equivalent: "Display as" #. Field label: form for citing in dictionary #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Citation form" msgstr "Hình thức trích dẫn" @@ -356,20 +408,41 @@ msgstr "xóa" #: src/lib/about/AboutDialog.svelte #: src/lib/components/field-editors/multi-select.svelte #: src/lib/components/ui/button/x-button.svelte +#: src/lib/entry-editor/CommentDialog.svelte +#: src/lib/entry-editor/CommentDialog.svelte #: src/project/tasks/SubjectPopup.svelte msgid "Close" msgstr "Đóng" #. Menu option to close project +#: src/lib/layout/ViewErrorBoundary.svelte #: src/project/ProjectSidebar.svelte msgid "Close Dictionary" msgstr "Đóng Từ điển" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Closed" +msgstr "Đã đóng" + +#. Field label in the create-project dialog. The project's short machine-readable identifier (slug), e.g. "my-dictionary". +#: src/home/CreateProjectDialog.svelte +msgid "Code" +msgstr "Mã" + #. Tab or section #: src/lib/components/ThemePicker.svelte msgid "Color" msgstr "Màu sắc" +#: src/lib/entry-editor/CommentDialog.svelte +#: src/project/browse/EntryView.svelte +msgid "Comments" +msgstr "Bình luận" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Comments for {0}" +msgstr "Nhận xét về {0}" + #. Field label #: src/lib/entry-editor/field-editors/ComplexFormComponents.svelte #: src/lib/entry-editor/field-editors/ComplexForms.svelte @@ -432,6 +505,22 @@ msgstr "Đã sao chép vào khay nhớ tạm" msgid "Copy version" msgstr "Sao chép phiên bản" +#. Transient warning toast (short timeout) shown when "Sync to local" fails (offline, server unreachable, or not logged in). +#. Both clauses matter: the failure reason is implicit; the reassurance that local data is intact is intentional. +#: src/project/SyncDialog.svelte +msgid "Couldn't sync right now — your local changes are safe." +msgstr "Hiện tại không thể đồng bộ hóa — các thay đổi trên máy của bạn vẫn được lưu giữ an toàn." + +#. Confirm button in the create-project dialog footer; creates the new dictionary project. +#: src/home/CreateProjectDialog.svelte +msgid "Create" +msgstr "Tạo" + +#. Subtitle on the dev-only New Project button; the new project is a blank, local-only FieldWorks Lite project. +#: src/home/HomeView.svelte +msgid "Create a new FieldWorks Lite project" +msgstr "Tạo một dự án FieldWorks Lite mới" + #. Dialog title when creating a new custom view. #: src/lib/views/custom/CreateCustomViewDialog.svelte msgid "Create Custom View" @@ -498,9 +587,14 @@ msgstr "Tối" #. Sidebar menu item #: src/project/ProjectSidebar.svelte +#: src/project/dashboard/DashboardView.svelte msgid "Dashboard" msgstr "Bảng điều khiển" +#: src/project/dashboard/DashboardView.svelte +msgid "Dashboard failed to load" +msgstr "Không thể tải trang tổng quan" + #. Field label #: src/lib/troubleshoot/TroubleshootDialog.svelte msgid "Data Directory" @@ -510,6 +604,7 @@ msgstr "Thư mục dữ liệu" #. Definition for a sense/meaning (e.g., "bank" = "financial institution") #. Appears under each Sense/Meaning in entry editor #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Definition" msgstr "Định nghĩa" @@ -642,6 +737,19 @@ msgstr "Đang tải xuống {0}..." msgid "Downloading..." msgstr "Đang tải xuống..." +#. Placeholder in the Vernacular writing system input. The example IETF language tags don't need to be translated. +#: src/home/CreateProjectDialog.svelte +msgid "e.g. th, sw" +msgstr "ví dụ: th, sw" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit" +msgstr "Chỉnh sửa" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Edit comment" +msgstr "Chỉnh sửa bình luận" + #. Dialog title when editing an existing custom view. #: src/lib/views/custom/EditCustomViewDialog.svelte msgid "Edit Custom View" @@ -652,6 +760,10 @@ msgstr "Chỉnh sửa chế độ xem tùy chỉnh" msgid "Editor" msgstr "Biên tập viên" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Empty comment" +msgstr "Bình luận trống" + #. Filter operator #. Search operator: matches fields ending with the search term #. Related operators: "Starts with", "Contains", "Equals" @@ -666,6 +778,14 @@ msgstr "Kết thúc bằng" msgid "Entries missing..." msgstr "Các mục còn thiếu..." +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with examples" +msgstr "Các mục có ví dụ" + +#: src/project/dashboard/DashboardView.svelte +msgid "Entries with senses" +msgstr "Các mục từ có nghĩa" + #. EntryView label for the current dictionary object when FieldWorks Classic is shown #: src/project/browse/EntryView.svelte msgid "entry" @@ -734,6 +854,10 @@ msgstr "Ví dụ" msgid "Example sentence" msgstr "Câu ví dụ" +#: src/project/dashboard/DashboardView.svelte +msgid "Example sentences" +msgstr "Các câu ví dụ" + #. Error message when copy fails #: src/lib/components/ui/button/copy-button.svelte msgid "Failed to copy to clipboard" @@ -744,6 +868,12 @@ msgstr "Sao chép vào khay nhớ tạm thất bại" msgid "Failed to download {0}" msgstr "Tải xuống {0} thất bại" +#. Error message when the activity feed fails to load (toast and empty state). +#: src/lib/activity/ActivityView.svelte +#: src/lib/activity/ActivityView.svelte +msgid "Failed to load activity" +msgstr "Không thể tải hoạt động" + #. Error message when entries fail to load #: src/project/browse/EntriesList.svelte #: src/project/browse/EntriesList.svelte @@ -762,7 +892,6 @@ msgstr "Mở URL thất bại: {0}" #. Error notification #: src/lib/services/sync-status-service.ts -#: src/project/SyncDialog.svelte msgid "Failed to synchronize" msgstr "Đồng bộ thất bại" @@ -808,6 +937,7 @@ msgstr "Phiên bản FieldWorks Lite" #. Alt text for FieldWorks logo image #: src/home/HomeView.svelte +#: src/lib/activity/AuthorLabel.svelte #: src/lib/components/OpenInFieldWorksButton.svelte #: src/project/ProjectDropdown.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte @@ -934,6 +1064,7 @@ msgstr "Nhận hỗ trợ" #. Different from "Definition" (longer explanation) #. Appears under each sense/meaning; concise translation #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Gloss" msgstr "Ghi chú" @@ -971,6 +1102,7 @@ msgstr "Từ đầu mục" msgid "Hide" msgstr "Ẩn" +#: src/lib/activity/ActivityItem.svelte #: src/lib/history/HistoryView.svelte #: src/project/browse/EntryMenu.svelte msgid "History" @@ -1058,6 +1190,7 @@ msgstr "Logo Lexbox" #. Lite view equivalent: "Word" #. Field label: the main headword/base form #: src/lib/views/entity-config.ts +#: src/project/dashboard/DashboardView.svelte msgid "Lexeme form" msgstr "Hình thức lexeme" @@ -1085,6 +1218,15 @@ msgstr "Chế độ danh sách" msgid "Literal meaning" msgstr "Ý nghĩa đen" +#. Accessible label on the activity view loading spinner while filtered commits are fetched. +#: src/lib/activity/ActivityView.svelte +msgid "Loading activity" +msgstr "Hoạt động đang tải" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Loading comments..." +msgstr "Đang tải bình luận..." + #. Loading state text shown in the project/dictionary dropdown while the list of dictionaries is being fetched. #: src/project/ProjectDropdown.svelte msgid "Loading Dictionaries..." @@ -1111,6 +1253,11 @@ msgstr "Chỉ cục bộ" msgid "Login" msgstr "Đăng nhập" +#. Toast shown when the user closes or cancels the login dialog before signing in. +#: src/lib/auth/LoginButton.svelte +msgid "Login cancelled." +msgstr "Việc đăng nhập đã bị hủy." + #. Default button label on the login button when not yet authenticated. Clicking opens the login flow for a server. #: src/lib/auth/LoginButton.svelte #: src/lib/auth/LoginButton.svelte @@ -1209,11 +1356,13 @@ msgid "My custom view..." msgstr "Chế độ xem tùy chỉnh của tôi..." #. Field label for the custom view name input. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/CustomViewForm.svelte msgid "Name" msgstr "Tên" #. Validation error shown when the custom view name is empty. +#: src/home/CreateProjectDialog.svelte #: src/lib/views/custom/validation.ts msgid "Name is required" msgstr "Tên là trường thông tin bắt buộc" @@ -1247,6 +1396,14 @@ msgstr "Dữ liệu mới" msgid "New Entry" msgstr "Mục mới" +#: src/home/CreateProjectDialog.svelte +msgid "New Project" +msgstr "Dự án mới" + +#: src/home/HomeView.svelte +msgid "New Project (Local only)" +msgstr "Dự án mới (Chỉ dành cho người dùng trong nước)" + #. Relevant view: Lite #. Classic view equivalent: "New Entry" #. Dialog title for creating new word @@ -1255,13 +1412,31 @@ msgstr "Mục mới" msgid "New Word" msgstr "Từ mới" +#. Sort option in activity view — most recent commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Newest first" +msgstr "Hiển thị theo thứ tự từ mới nhất" + #: src/project/tasks/SubjectPopup.svelte msgid "Next" msgstr "Tiếp theo" +#: src/project/dashboard/DashboardView.svelte +msgid "Next milestone: {0}. {1} to go." +msgstr "Cột mốc tiếp theo: {0}. Còn {1} nữa." + +#. Empty state when activity list filters exclude every commit. #: src/lib/activity/ActivityView.svelte -msgid "No activity found" -msgstr "Không tìm thấy hoạt động" +msgid "No activity matches these filters" +msgstr "Không có hoạt động nào phù hợp với các tiêu chí lọc này" + +#: src/lib/activity/ActivityFilter.svelte +msgid "No activity types" +msgstr "Không có loại hoạt động nào" + +#: src/project/dashboard/DashboardView.svelte +msgid "No analysis writing systems configured." +msgstr "Chưa có hệ thống viết phân tích nào được cấu hình." #. Placeholder when no audio file #. Shows in audio field when empty (no file uploaded yet) @@ -1269,6 +1444,14 @@ msgstr "Không tìm thấy hoạt động" msgid "No audio" msgstr "Không có âm thanh" +#: src/lib/activity/ActivityFilter.svelte +msgid "No authors" +msgstr "Không có tác giả" + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "No comment threads yet." +msgstr "Chưa có bình luận nào." + #. Empty state message in the manage custom views dialog when none exist. #: src/lib/views/custom/ManageCustomViewsDialog.svelte msgid "No custom views yet." @@ -1319,9 +1502,14 @@ msgstr "Chưa cấu hình máy chủ" msgid "No subject, unable to create a new {0}" msgstr "Không có chủ đề, không thể tạo mới {0}" +#: src/project/dashboard/DashboardView.svelte +msgid "No vernacular writing systems configured." +msgstr "Chưa có hệ thống chữ viết bản địa nào được cấu hình." + #. Relevant view: Lite #. Classic view equivalent: "No entries found" #: src/lib/entry-editor/EntryOrSensePicker.svelte +#: src/project/browse/EntriesList.svelte msgid "No words found" msgstr "Không tìm thấy từ nào" @@ -1382,6 +1570,11 @@ msgstr "Ngoại tuyến" msgid "Offline, unable to download" msgstr "Ngoại tuyến, không thể tải xuống" +#. Sort option in activity view — earliest commit first. +#: src/lib/activity/ActivityFilter.svelte +msgid "Oldest first" +msgstr "Xếp theo thứ tự từ cũ nhất" + #. Explanation of sync behavior #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "One FieldWorks Classic commit may consist of changes to multiple entries or fields. On the other hand, a commit may only affect data that is not synced to FieldWorks Lite." @@ -1389,6 +1582,7 @@ msgstr "Một commit của FieldWorks Classic có thể gồm các thay đổi t #. Button to open downloaded project #: src/home/Server.svelte +#: src/lib/entry-editor/CommentDialog.svelte msgid "Open" msgstr "Mở" @@ -1397,6 +1591,11 @@ msgstr "Mở" msgid "Open Data Directory" msgstr "Mở Thư mục Dữ liệu" +#. Action button on the offline-login warning toast; opens the server's site in a browser so the user can check the connection. +#: src/lib/auth/LoginButton.svelte +msgid "Open in browser" +msgstr "Mở trong trình duyệt" + #. Button label #: src/lib/components/OpenInFieldWorksButton.svelte msgid "Open in FieldWorks" @@ -1503,11 +1702,6 @@ msgstr "Dự án {0} không tìm thấy trên {1}" msgid "Project {0} on {1} is not yet set up for FieldWorks Lite" msgstr "Dự án {0} trên {1} chưa được thiết lập cho FieldWorks Lite" -#. Placeholder for project search -#: src/home/HomeView.svelte -msgid "Project name..." -msgstr "Tên dự án..." - #. Filter option #. Publication type/dictionary for entries #. Used to organize entries by which publication(s) they should appear in @@ -1593,6 +1787,10 @@ msgstr "Xem lại" msgid "rose" msgstr "hoa hồng" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Save" +msgstr "Lưu" + #. Dialog button to save audio with new name #: src/lib/components/field-editors/audio-input.svelte msgid "Save As" @@ -1721,6 +1919,10 @@ msgstr "Hiển thị" msgid "Show {0} more..." msgstr "Hiển thị thêm {0}..." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Sign in to add comments." +msgstr "Vui lòng đăng nhập để thêm bình luận." + #. View option #: src/project/browse/EntryListViewOptions.svelte msgid "Simple" @@ -1736,11 +1938,19 @@ msgstr "Kích thước:" msgid "Skip" msgstr "Bỏ qua" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Something went wrong" +msgstr "Đã xảy ra sự cố" + #. Filter option #: src/project/browse/SearchFilter.svelte msgid "Specific field" msgstr "Trường cụ thể" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Start a new thread" +msgstr "Tạo một chủ đề mới" + #. Filter operator #. Search operator: matches fields beginning with the search term #. Related operators: "Contains", "Ends with", "Equals" @@ -1795,6 +2005,16 @@ msgstr "Đồng bộ các thay đổi của bạn với người dùng FieldWork msgid "Synced" msgstr "Đã đồng bộ" +#. Sort option in activity view — by upload/download time, newest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced newest" +msgstr "Đã đồng bộ hóa phiên bản mới nhất" + +#. Sort option in activity view — by upload/download time, oldest synced first (unsynced commits last). +#: src/lib/activity/ActivityFilter.svelte +msgid "Synced oldest" +msgstr "Đã đồng bộ hóa bản cũ nhất" + #. Status showing sync source server #: src/home/HomeView.svelte msgid "Synced with {0}" @@ -1821,6 +2041,7 @@ msgid "Syncing..." msgstr "Đang đồng bộ..." #. Theme option +#: src/lib/activity/utils.ts #: src/lib/components/ThemePicker.svelte msgid "System" msgstr "Hệ thống" @@ -1835,6 +2056,10 @@ msgstr "Nhiệm vụ {0}" msgid "Task not found: {0}" msgstr "Không tìm thấy nhiệm vụ: {0}" +#: src/project/tasks/TasksView.svelte +msgid "Task view failed" +msgstr "Không thể hiển thị chế độ xem tác vụ" + #. Sidebar menu item #: src/project/ProjectSidebar.svelte msgid "Tasks" @@ -1845,6 +2070,10 @@ msgstr "Nhiệm vụ" msgid "Tell us about a bug or issue you’ve encountered." msgstr "Hãy cho chúng tôi biết về lỗi hoặc vấn đề bạn gặp phải." +#: src/project/dashboard/DashboardView.svelte +msgid "Tell us how you work and what would help most. Your ideas guide what we build." +msgstr "Hãy chia sẻ với chúng tôi cách bạn làm việc và điều gì sẽ hữu ích nhất đối với bạn. Những ý tưởng của bạn sẽ định hướng cho những gì chúng tôi phát triển." + #. View description #: src/project/browse/ViewPicker.svelte msgid "The *FieldWorks Classic* view, on the other hand, is designed for users who are familiar with *[FieldWorks Language Explorer](https://software.sil.org/fieldworks/)*." @@ -1877,6 +2106,7 @@ msgstr "Thời gian bạn đã tải lên hoặc tải xuống các thay đổi #. Error message when changes are pending upload #: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/ActivityView.svelte msgid "These changes have not been uploaded yet. Ensure you're online and logged in to share your changes." msgstr "Những thay đổi này chưa được tải lên. Hãy đảm bảo bạn đang trực tuyến và đã đăng nhập để chia sẻ các thay đổi." @@ -1905,6 +2135,10 @@ msgstr "Nhiệm vụ này đã hoàn thành" msgid "This will synchronize the FieldWorks Lite and FieldWorks Classic copies of your project in Lexbox." msgstr "Điều này sẽ đồng bộ các bản sao FieldWorks Lite và FieldWorks Classic của dự án của bạn trong Lexbox." +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Thread" +msgstr "Chủ đề" + #. Button to show/hide filter panel #: src/project/browse/SearchFilter.svelte msgid "Toggle filters" @@ -1915,6 +2149,12 @@ msgstr "Chuyển đổi bộ lọc" msgid "Toggle pinned" msgstr "Chuyển trạng thái ghim" +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +#: src/project/dashboard/DashboardView.svelte +msgid "Total entries" +msgstr "Tổng số bài dự thi" + #. Field label #: src/lib/entry-editor/object-editors/ExampleEditorPrimitive.svelte #: src/lib/views/entity-config.ts @@ -1934,6 +2174,10 @@ msgstr "Bản dịch {0}" msgid "Troubleshoot" msgstr "Khắc phục sự cố" +#: src/lib/layout/ViewErrorBoundary.svelte +msgid "Try again" +msgstr "Hãy thử lại" + #. Task instruction #: src/project/tasks/tasks-service.ts msgid "Type a Definition" @@ -1960,7 +2204,8 @@ msgid "Unable to open in FieldWorks" msgstr "Không thể mở trong FieldWorks" #. Fallback value shown when author name or last-change date is unavailable (e.g., in activity history or the sync panel). -#: src/lib/activity/ActivityItem.svelte +#: src/lib/activity/AuthorLabel.svelte +#: src/lib/activity/utils.ts #: src/project/sync/FwLiteToFwMergeDetails.svelte #: src/project/sync/FwLiteToFwMergeDetails.svelte msgid "Unknown" @@ -1977,6 +2222,10 @@ msgstr "Lỗi không xác định" msgid "Unknown error {0}" msgstr "Lỗi không xác định {0}" +#: src/home/CreateProjectDialog.svelte +msgid "Unknown error creating project" +msgstr "Xảy ra lỗi không xác định khi tạo dự án" + #. Error message #: src/lib/admin-dialogs/GetProjectByCodeDialog.svelte msgid "Unknown error downloading {0}" @@ -2061,6 +2310,19 @@ msgstr "Sử dụng các thành phần như" msgid "Vernacular" msgstr "Tiếng địa phương" +#. Field label in the create-project dialog. The writing system for the language being documented (the vernacular), entered as an IETF language tag. +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system code" +msgstr "Mã hệ thống chữ viết bản địa" + +#: src/home/CreateProjectDialog.svelte +msgid "Vernacular writing system is required" +msgstr "Phải có hệ thống chữ viết bản địa" + +#: src/project/dashboard/DashboardView.svelte +msgid "Vernacular writing systems" +msgstr "Các hệ thống chữ viết bản địa" + #. Button label #: src/project/browse/ViewPicker.svelte msgid "View" @@ -2071,6 +2333,10 @@ msgstr "Xem" msgid "violet" msgstr "tím" +#: src/project/dashboard/DashboardView.svelte +msgid "What would you like to see here?" +msgstr "Bạn muốn xem gì ở đây?" + #. External link button text for help #: src/home/Server.svelte msgid "Where are my projects?" @@ -2121,6 +2387,14 @@ msgstr "Từ hoặc Hiển thị như là bắt buộc." msgid "Word or meaning:" msgstr "Từ hoặc ý nghĩa:" +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write a reply..." +msgstr "Viết lời trả lời..." + +#: src/lib/entry-editor/CommentDialog.svelte +msgid "Write the first comment..." +msgstr "Hãy viết bình luận đầu tiên..." + #. Column header #: src/project/browse/filter/WsSelect.svelte msgid "Writing System" @@ -2142,6 +2416,11 @@ msgstr "Hệ thống chữ viết" msgid "Writing Systems" msgstr "Các hệ chữ" +#. Warning toast shown when a login attempt can't connect to the server. {0} is the server name (e.g. "Lexbox"). +#: src/lib/auth/LoginButton.svelte +msgid "You appear to be offline. Can you connect to {0}?" +msgstr "Có vẻ như bạn đang ở chế độ ngoại tuyến. Bạn có thể truy cập vào trang {0} không?" + #. Status message when no updates are available #: src/lib/updates/UpdateDialogContent.svelte msgid "You are running the latest version." @@ -2162,3 +2441,12 @@ msgstr "Bạn không có quyền tải dự án {0} từ {1}" #: src/home/Server.svelte msgid "You have already downloaded the {0} project" msgstr "Bạn đã tải xuống dự án {0}" + +#: src/project/dashboard/DashboardView.svelte +msgid "You've passed every milestone. What an achievement!" +msgstr "Bạn đã vượt qua mọi cột mốc. Thật là một thành tựu đáng tự hào!" + +#: src/project/dashboard/DashboardView.svelte +msgid "Your dictionary starts here" +msgstr "Từ điển của bạn bắt đầu từ đây" +