Replace hand-rolled i18n with Fluent.

This commit is contained in:
2026-07-18 14:34:40 +02:00
parent 16a210c0ad
commit 2e35afc731
24 changed files with 2338 additions and 2187 deletions

385
locales/ui/en.ftl Normal file
View File

@@ -0,0 +1,385 @@
menu-group-file = File
menu-group-edit = Edit
menu-group-view = View
menu-group-blog = Blog
menu-group-help = Help
menu-item-newPost = New Post
menu-item-importMedia = Import Media...
menu-item-save = Save
menu-item-openInBrowser = Open in Browser
menu-item-openDataFolder = Open Data Folder
menu-item-find = Find
menu-item-replace = Replace
menu-item-editPreferences = Edit Preferences
menu-item-viewPosts = Posts
menu-item-viewMedia = Media
menu-item-toggleSidebar = Toggle Sidebar
menu-item-togglePanel = Toggle Panel
menu-item-publishSelected = Publish Selected
menu-item-previewPost = Preview Post
menu-item-rebuildDatabase = Rebuild Database from Files
menu-item-reindexText = Reindex Search Text
menu-item-metadataDiff = Metadata Diff Tool
menu-item-editMenu = Edit Blog Menu
menu-item-generateSitemap = Render Site
menu-item-regenerateCalendar = Regenerate Calendar
menu-item-validateSite = Validate Site
menu-item-validateTranslations = Validate Translations
menu-item-fillMissingTranslations = Fill Missing Translations
menu-item-uploadSite = Upload Site
menu-item-about = About Blogging Desktop Server
menu-item-openDocumentation = Open Documentation
menu-item-viewOnGitHub = View on GitHub
menu-item-reportIssue = Report Issue
activity-posts = Posts
activity-pages = Pages
activity-media = Media
activity-scripts = Scripts
activity-tags = Tags
activity-templates = Templates
activity-aiAssistant = AI Assistant
activity-import = Import
activity-sourceControl = Source Control
common-save = Save
common-open = Open
common-cancel = Cancel
common-settings = Settings
common-tasks = Tasks
common-running = running
common-pending = pending
tasks-backgroundTasks = Background Tasks
tasks-clearCompleted = Clear completed
tasks-noActive = No active tasks
tasks-cancelTask = Cancel task
tasks-triggerTitle = { $running } running, { $pending } pending
app-taskCompleted = Task completed: { $message }
app-taskFailed = Task failed: { $message }
app-databaseRebuildFailed = Database rebuild failed
app-textReindexFailed = Text reindex failed
panel-output = Output
panel-postLinks = Post Links
panel-gitLog = Git Log
panel-postLinksPlaceholder = No post links to display
panel-gitLogPlaceholder = No git history to display
panel-closeTitle = Close panel
panel-noRecentTasks = No recent tasks
panel-noOutput = No output
statusBar-posts = { $count } posts
statusBar-media = { $count } media
statusBar-ui = UI
statusBar-uiLanguage = UI Language
statusBar-offlineMode = Airplane Mode
statusBar-offlineModeActive = Airplane Mode (active)
projectSelector-switchProject = Switch project
projectSelector-projectsHeader = Projects
projectSelector-newProject = New Project
projectSelector-createProject = Create Project
projectSelector-projectName = Project name
projectSelector-projectNamePlaceholder = My Blog
projectSelector-chooseFolder = Choose folder...
projectSelector-useDefaultLocation = Use default location
projectSelector-deleteProject = Delete Project
projectSelector-toast-switched = Switched to { $name }
projectSelector-toast-switchFailed = Project switch failed
projectSelector-toast-created = Project "{ $name }" created
projectSelector-toast-createFailed = Failed to create project
projectSelector-toast-deleteFailed = Failed to delete project
tabBar-closeHint = Close
tabBar-loading = Loading...
tabBar-unknown = Unknown
tabBar-style = Style
tabBar-menuEditor = Menu Editor
tabBar-metadataDiff = Metadata Diff
tabBar-siteValidation = Site Validation
tabBar-translationValidation = Translation Validation
siteValidation-run = Run Validation
siteValidation-apply = Apply Validation
siteValidation-applying = Applying...
siteValidation-idle = Run site validation to compare generated files against expected output.
siteValidation-running = Validation in progress...
siteValidation-clean = No missing, extra, or stale generated files were found.
siteValidation-error = Validation failed
siteValidation-missing = Missing Files
siteValidation-extra = Extra Files
siteValidation-stale = Stale Files
tabBar-documentation = Documentation
tabBar-apiDocumentation = API Documentation
tabBar-findDuplicates = Find Duplicates
tabBar-tags = Tags
tabBar-preview = Preview
tabBar-modified = Modified
sidebar-noPostsYet = No posts yet
sidebar-noPagesYet = No pages yet
sidebar-noMediaYet = No media yet
sidebar-noScriptsYet = No scripts yet
sidebar-noTemplatesYet = No templates yet
sidebar-chatPlaceholder = AI assistant will appear here
sidebar-importPlaceholder = Import content from external sources
sidebar-gitPlaceholder = Source control integration
sidebar-loading = Loading...
sidebar-settingsHeader = Settings
sidebar-tagsHeader = Tags
sidebar-drafts = Drafts
sidebar-published = Published
sidebar-archived = Archived
sidebar-loadMore = Load More…
language-en = English
language-de = German
language-fr = French
language-it = Italian
language-es = Spanish
welcome-title = Welcome to bDS
welcome-subtitle = Open a project or create a new post to get started.
post-untitled = Untitled
post-createFailed = Failed to create post: { $error }
engine-rebuildStarted = Rebuilding database from files...
engine-rebuildComplete = Database rebuilt: { $posts } posts, { $media } media, { $templates } templates, { $scripts } scripts
engine-rebuildFailed = Database rebuild failed: { $error }
engine-reindexStarted = Reindexing search text...
engine-reindexComplete = Search text reindexed: { $posts } posts, { $media } media
engine-reindexFailed = Search text reindex failed: { $error }
engine-calendarStarted = Regenerating calendar...
engine-calendarComplete = Calendar regenerated
engine-calendarFailed = Calendar regeneration failed: { $error }
engine-calendarNoProject = No active project
engine-validateTranslationsStarted = Validating translations...
engine-validateMediaStarted = Validating media assets...
engine-validateTranslationsComplete = Translation validation: { $dbIssues } DB issues, { $fsIssues } filesystem issues
engine-validateTranslationsFailed = Translation validation failed: { $error }
engine-fillMissingTranslationsOffline = Cannot fill translations: AI is unavailable in offline mode
engine-fillMissingTranslationsNoAi = Cannot fill translations: AI not yet available
engine-uploadStarted = Uploading site...
engine-uploadMissingCredentials = Publishing credentials incomplete. Configure in project settings.
engine-uploadOffline = Cannot upload: airplane mode is active
engine-generateSiteStarted = Generating site...
engine-generateSiteNoProject = No active project
engine-previewDataDirUnavailable = Project data directory unavailable
engine-previewPortInUse = Preview server port is already in use
dialog-selectFolder = Select Folder
dialog-importMedia = Import Media
dialog-imageFilter = Images
settings-nav-project = Project
settings-nav-editor = Editor
settings-nav-content = Content
settings-nav-ai = AI
settings-nav-technology = Technology
settings-nav-publishing = Publishing
settings-nav-data = Data
settings-nav-mcp = MCP
settings-nav-style = Style
tags-nav-cloud = Tag Cloud
tags-nav-manage = Manage Tags
tags-nav-merge = Merge Tags
tags-nav-discover = Discover Tags
sidebar-chatYesterday = Yesterday
modal-confirmDelete-title = Confirm Delete
modal-confirmDelete-warning = This action cannot be undone.
modal-confirmDelete-cancel = Cancel
modal-confirmDelete-delete = Delete
modal-confirm-title = Confirm
modal-confirm-cancel = Cancel
modal-confirm-confirm = Confirm
modal-postInsertLink-title = Insert Link
modal-postInsertLink-description = Select a post to link to.
modal-postInsertLink-cancel = Cancel
modal-postInsertLink-tabInternal = Internal
modal-postInsertLink-tabExternal = External
modal-postInsertLink-searchPlaceholder = Search posts...
modal-postInsertLink-emptyState = Start typing to search posts or use related posts
modal-postInsertLink-createPost = Create Post
modal-postInsertLink-insert = Insert
modal-postInsertLink-externalUrlPlaceholder = https://example.com
modal-postInsertLink-externalTextPlaceholder = Display text (optional)
modal-postInsertLink-urlRequired = A URL is required.
modal-postInsertLink-titleRequired = Enter a title to create a linked post.
modal-postInsertLink-createFailed = Failed to create the linked post.
modal-postInsertLink-loadFailed = Failed to load the selected post.
modal-insertMedia-title = Insert Media
modal-insertMedia-description = Select a media item to insert.
modal-insertMedia-cancel = Cancel
modal-insertMedia-searchPlaceholder = Search media...
modal-insertMedia-loadFailed = Failed to load the selected media item.
modal-postGallery-title = Media Gallery
modal-postGallery-description = Click an image to view full size.
modal-postGallery-close = Close
modal-postGallery-backToGrid = Back to Grid
modal-postGallery-unavailable = Preview unavailable
modal-aiSuggestions-title = AI Suggestions
modal-aiSuggestions-applySelected = Apply Selected
modal-languagePicker-title = Translate To
sidebar-filter-search = Search...
sidebar-filter-toggle = Filters
sidebar-filter-clearAll = Clear All Filters
sidebar-filter-status = Status
sidebar-filter-language = Language
sidebar-filter-dateRange = Date Range
sidebar-filter-from = From (YYYY-MM-DD)
sidebar-filter-to = To (YYYY-MM-DD)
sidebar-filter-tags = Tags
sidebar-filter-categories = Categories
sidebar-filter-calendar = Archive
sidebar-filter-noResults = No matching items
editor-title = Title
editor-titlePlaceholder = Enter title...
editor-slug = Slug
editor-slugPlaceholder = enter-slug
editor-content = Content
editor-contentPlaceholder = Write your content...
editor-excerpt = Excerpt
editor-excerptPlaceholder = Brief summary...
editor-author = Author
editor-language = Language
editor-aiAnalyze = Analyze with AI
editor-detectLanguage = Detect Language
editor-quickActions = Quick Actions
editor-modeMarkdown = Markdown
editor-modePreview = Preview
editor-suggestTaxonomy = Suggest Taxonomy
editor-translate = Translate
editor-templateSlug = Template
editor-doNotTranslate = Do Not Translate
editor-publish = Publish
editor-discard = Discard
editor-duplicate = Duplicate
editor-validate = Validate
editor-run = Run
editor-checkSyntax = Check Syntax
editor-kind = Kind
editor-enabled = Enabled
editor-entrypoint = Entrypoint
editor-alt = Alt Text
editor-altPlaceholder = Describe the image...
editor-caption = Caption
editor-metadata = Metadata
editor-tags = Tags
editor-tagsPlaceholder = Add tag...
editor-categories = Categories
editor-categoriesPlaceholder = Add category...
editor-outlinks = Outgoing Links
editor-backlinks = Incoming Links
editor-linkedMedia = Linked Media
editor-linkedMediaEmpty = No linked media yet.
editor-linkExistingMedia = Link Existing
editor-linkToPost = Link to Post
editor-linkedPosts = Linked Posts
editor-linkedPostsEmpty = Not linked to any posts.
editor-postPickerSearch = Search Posts
editor-postPickerSearchPlaceholder = Search posts...
editor-unlinkMedia = Unlink
editor-linkedMediaKindImage = Image
editor-linkedMediaKindFile = File
editor-untitled = Untitled
editor-createdAt = Created
editor-updatedAt = Updated
editor-publishedAt = Published
editor-insertLink = Insert Link
editor-insertMedia = Insert Media
editor-gallery = Gallery
tags-noTags = No tags yet
tags-cloudSection = Cloud
tags-cloudHelp = Select one or more tags to edit, delete, or merge them.
tags-selectedCount = { $count } selected
tags-clearSelection = Clear selection
tags-createSection = Create Tag
tags-createPlaceholder = new-tag
tags-createButton = Create
tags-editTag = Edit Tag
tags-manageSection = Manage
tags-name = Name
tags-color = Color
tags-colorPresets = Color presets
tags-postTemplate = Post Template
tags-noTemplate = None
tags-merge = Merge
tags-mergeTarget = Target Tag
tags-mergeSection = Merge
tags-mergeHelp = Select at least two tags from the cloud or list to merge them.
tags-mergePreview = Tags to delete: { $tags }
tags-mergeConfirmTitle = Merge Tags
tags-mergeConfirmMessage = Merge { $count } tags into { $target }? This cannot be undone.
tags-deleteUsage = This tag is used in { $count } posts.
tags-discoverSection = Discover
tags-discoverDescription = Discover tags from current posts and rewrite tags.json to match the database.
tags-discoverButton = Discover
tags-selectTag = Select a tag to edit
template-forceDeleteTitle = Force Delete Template
template-forceDeleteMessage = This template is used by { $posts } posts and { $tags } tags. Force delete?
common-add = Add
common-remove = Remove
common-clear = Clear
common-noResults = No results
settings-projectName = Project Name
settings-projectDescription = Description
settings-dataPath = Data Folder
settings-browse = Browse...
settings-reset = Reset
settings-publicUrl = Public URL
settings-mainLanguage = Main Language
settings-mainLanguageRequired = required
settings-blogLanguages = Blog Languages
settings-defaultAuthor = Default Author
settings-maxPostsPerPage = Posts per Page
settings-blogmarkCategory = Blogmark Category
settings-defaultMode = Default Editor Mode
settings-diffViewStyle = Diff View Style
settings-categoryTitle = Title for { $category }
settings-categoryPostTemplate = Post Template
settings-categoryListTemplate = List Template
settings-categoryRenderInLists = Render in Lists
settings-categoryShowTitles = Show Titles
settings-addCategory = Add Category
settings-resetCategories = Reset to Defaults
settings-wrapLongLines = Wrap Long Lines
settings-hideUnchangedRegions = Hide Unchanged Regions
settings-offlineMode = Airplane Mode
settings-onlineEndpointSection = Online Endpoint
settings-onlineEndpointUrl = Online Endpoint URL
settings-onlineEndpointModel = Online Endpoint Model
settings-onlineApiKey = Online API Key
settings-airplaneEndpointSection = Airplane Endpoint
settings-airplaneEndpointUrl = Airplane Endpoint URL
settings-airplaneEndpointModel = Airplane Endpoint Model
settings-refreshModels = Refresh Models
settings-defaultModel = Default Model
settings-titleModel = Title Model
settings-imageAnalysisModel = Image Analysis Model
settings-keychainConfigured = Stored in keychain
settings-systemPrompt = System Prompt
settings-resetToDefault = Reset to Default
settings-luaRuntimeOnly = Lua is the only scripting runtime in the Rust app.
settings-semanticSimilarityEnabled = Semantic Similarity
settings-sshHost = SSH Host
settings-sshUsername = SSH Username
settings-sshRemotePath = Remote Path
settings-clear = Clear
settings-rebuildPosts = Rebuild Posts
settings-rebuildMedia = Rebuild Media
settings-rebuildScripts = Rebuild Scripts
settings-rebuildTemplates = Rebuild Templates
settings-rebuildLinks = Rebuild Links
settings-regenerateThumbnails = Regenerate Thumbnails
settings-openDataFolder = Open Data Folder
settings-contentPlaceholder = Content settings will appear here
settings-technologyPlaceholder = Technology settings will appear here
settings-mcpPlaceholder = MCP server settings will appear here
dashboard-overview = Overview
dashboard-posts = Posts
dashboard-media = Media
dashboard-tags = Tags
dashboard-categories = Categories
dashboard-images = Images
dashboard-drafts = Drafts
dashboard-published = Published
dashboard-archived = Archived
dashboard-statCards = Snapshot
dashboard-timeline = Timeline
dashboard-noTimelineData = No timeline data yet
dashboard-tagCloud = Tag Cloud
dashboard-noTags = No tags yet
dashboard-categoryCloud = Category Cloud
dashboard-recentPosts = Recent Posts
dashboard-noRecentPosts = No recent posts
dashboard-and = and
dashboard-pin = Pin
common-tabNotImplemented = This area will be implemented in a later milestone.
editor-noPreviewAvailable = No preview available