diff --git a/app/dialog/preferences/tabs/preferencesdisktab.cpp b/app/dialog/preferences/tabs/preferencesdisktab.cpp index 83e2250d6..950eaa8ca 100644 --- a/app/dialog/preferences/tabs/preferencesdisktab.cpp +++ b/app/dialog/preferences/tabs/preferencesdisktab.cpp @@ -69,7 +69,7 @@ PreferencesDiskTab::PreferencesDiskTab() cache_behavior_layout->addWidget(new QLabel(tr("Cache Ahead:")), row, 0); cache_ahead_slider_ = new FloatSlider(); - cache_ahead_slider_->SetFormat(tr("%1 second(s)")); + cache_ahead_slider_->SetFormat(tr("%1 seconds")); cache_ahead_slider_->SetMinimum(0); cache_ahead_slider_->SetValue(Config::Current()["DiskCacheAhead"].value().toDouble()); cache_behavior_layout->addWidget(cache_ahead_slider_, row, 1); @@ -78,7 +78,7 @@ PreferencesDiskTab::PreferencesDiskTab() cache_behind_slider_ = new FloatSlider(); cache_behind_slider_->SetMinimum(0); - cache_behind_slider_->SetFormat(tr("%1 second(s)")); + cache_behind_slider_->SetFormat(tr("%1 seconds")); cache_behind_slider_->SetValue(Config::Current()["DiskCacheBehind"].value().toDouble()); cache_behavior_layout->addWidget(cache_behind_slider_, row, 3); diff --git a/app/dialog/preferences/tabs/preferencesgeneraltab.cpp b/app/dialog/preferences/tabs/preferencesgeneraltab.cpp index f4c44cb66..646d20642 100644 --- a/app/dialog/preferences/tabs/preferencesgeneraltab.cpp +++ b/app/dialog/preferences/tabs/preferencesgeneraltab.cpp @@ -103,7 +103,7 @@ PreferencesGeneralTab::PreferencesGeneralTab() default_still_length_ = new FloatSlider(); default_still_length_->SetMinimum(0.1); - default_still_length_->SetFormat(tr("%1 second(s)")); + default_still_length_->SetFormat(tr("%1 seconds")); default_still_length_->SetValue(Config::Current()["DefaultStillLength"].value().toDouble()); timeline_layout->addWidget(default_still_length_); @@ -136,7 +136,7 @@ PreferencesGeneralTab::PreferencesGeneralTab() autorecovery_interval_ = new IntegerSlider(); autorecovery_interval_->SetMinimum(1); autorecovery_interval_->SetMaximum(60); - autorecovery_interval_->SetFormat(tr("%1 minute(s)")); + autorecovery_interval_->SetFormat(QT_TRANSLATE_N_NOOP("olive::SliderBase", "%n minute(s)"), true); autorecovery_interval_->SetValue(Config::Current()[QStringLiteral("AutorecoveryInterval")].toLongLong()); autorecovery_layout->addWidget(autorecovery_interval_, row, 1); diff --git a/app/node/project/footage/footage.cpp b/app/node/project/footage/footage.cpp index fef4cf4fb..bb810e73a 100644 --- a/app/node/project/footage/footage.cpp +++ b/app/node/project/footage/footage.cpp @@ -295,10 +295,9 @@ QString Footage::DescribeVideoStream(const VideoParams ¶ms) QString Footage::DescribeAudioStream(const AudioParams ¶ms) { - return tr("%1: Audio - %2 Channel(s), %3Hz") - .arg(QString::number(params.stream_index()), - QString::number(params.channel_count()), - QString::number(params.sample_rate())); + return tr("%1: Audio - %n Channel(s), %2Hz", nullptr, params.channel_count()) + .arg(QString::number(params.stream_index()), + QString::number(params.sample_rate())); } void Footage::Hash(const QString& output, QCryptographicHash &hash, const rational &time) const diff --git a/app/task/project/import/import.cpp b/app/task/project/import/import.cpp index 3c317773b..20f87ca58 100644 --- a/app/task/project/import/import.cpp +++ b/app/task/project/import/import.cpp @@ -41,7 +41,7 @@ ProjectImportTask::ProjectImportTask(ProjectViewModel *model, Folder *folder, co file_count_ = Core::CountFilesInFileList(filenames_); - SetTitle(tr("Importing %1 file(s)").arg(file_count_)); + SetTitle(tr("Importing %n file(s)", nullptr, file_count_)); } const int &ProjectImportTask::GetFileCount() const diff --git a/app/ts/en_US.ts b/app/ts/en_US.ts index 6e8cb8d60..645d9a47f 100644 --- a/app/ts/en_US.ts +++ b/app/ts/en_US.ts @@ -1,4767 +1,54 @@ - + - AudioParams - - - %1 Hz - - - - - Mono - - - - - Stereo - - - - - 2.1 - - - - - 5.1 - - - - - 7.1 - - - - - Unknown (0x%1) - - - - - Config - - - Error loading settings - - - - - Failed to load application settings. This session will use defaults. - -%1 - - - - - Error saving settings - - - - - Failed to save application settings. The application may lack write permissions to this location. - - - - - Footage - - - %1 FPS - - - - - %1 Hz - - - - - Filename: %1 - - - - - This footage is not valid for use - - - - - ImportTool - - - Don't ask me again - - - - - No Active Sequence - - - - - No sequence is currently open. Would you like to create one? - - - - - Automatically Detect Parameters From Footage - - - - - Set Parameters Manually - - - - - MoveItemCommand - - - Move Item - - - - - NodeCopyPasteWidget - - - Error pasting nodes - - - - - Failed to paste nodes: %1 - - - - - NodeFactory - - - None - - - - - NodeViewItem - - - %1... - - - - - PresetManager - - - Save Preset - - - - - Set preset name: - - - - - Invalid preset name - - - - - You must enter a preset name - - - - - Preset exists - - - - - A preset with this name already exists. Would you like to replace it? - - - - - RatioDialog - - - Enter custom ratio (e.g. "4:3", "16/9", etc.): - - - - - Invalid custom ratio - - - - - Failed to parse "%1" into an aspect ratio. Please format a rational fraction with a ':' or a '/' separator. - - - - - RenameItemCommand - - - Rename Item - - - - - Sequence - - - %1 FPS - - - - - Stream - - - %1: Audio - %2 Channels, %3Hz - - - - - %1: Unknown - - - - - %1: Image - %2x%3 - - - - - %1: Video - %2x%3 - - - - - TimelineViewBlockItem - - - %1 - -In: %2 -Out: %3 -Length: %4 - - - - - Tool - - - Empty - - - - - Bars - - - - - Solid - - - - - Title - - - - - Tone - - - - - Unknown - - - - - VideoParams - - - 8-bit - - - - - 16-bit Integer - - - - - Half-Float (16-bit) - - - - - Full-Float (32-bit) - - - - - Unknown (0x%1) - - - - - %1 FPS - - - - - Square Pixels (%1) - - - - - NTSC Standard (%1) - - - - - NTSC Widescreen (%1) - - - - - PAL Standard (%1) - - - - - PAL Widescreen (%1) - - - - - HD Anamorphic 1080 (%1) - - - - - main - - - Show this help text - - - - - Show application version - - - - - Start in full-screen mode - - - - - Export only (No GUI) - - - - - Override language with file - - - - - qm-file - - - - - Project to open on startup - - - - - olive::AboutDialog - - - About %1 - - - - - Olive is a non-linear video editor. This software is free and protected by the GNU GPL. - - - - - Olive Team is obliged to inform users that Olive source code is available for download from its website. - - - - - olive::ActionSearch - - - Search for action... - - - - - olive::AudioInput - - - Audio Input - - - - - Audio - - - - - Import an audio footage stream. - - - - - olive::AudioMonitorPanel - - - Audio Monitor - - - - - olive::Block - - - Length - - - - - Media In - - - - - Enabled - - - - - Speed - - - - - olive::BlurFilterNode - - - Blur - - - - - Blurs an image. - - - - - Input - - - - - Method - - - - - Box - - - - - Gaussian - - - - - Radius - - - - - Horizontal - - - - - Vertical - - - - - Repeat Edge Pixels - - - - - olive::ClipBlock - - - Clip - - - - - A time-based node that represents a media source. - - - - - Buffer - - - - - olive::ColorDialog - - - Select Color - - - - - olive::ColorSpaceChooser - - - Color Management - - - - - Input: - - - - - Color Space: - - - - - Display: - - - - - View: - - - - - Look: - - - - - (None) - - - - - olive::ColorValuesTab - - - Red - - - - - Green - - - - - Blue - - - - - olive::ColorValuesWidget - - - Preview - - - - - Input - - - - - Reference - - - - - Display - - - - - olive::ConformTask - - - Conforming Audio %1:%2 - - - - - olive::Core - - - Import error - - - - - Nothing to import - - - - - Importing... - - - - - Import footage... - - - - - Failed to import footage - - - - - Failed to find active Project panel - - - - - No Active Project - - - - - No project is currently open to set the properties for - - - - - Failed to create new folder - - - - - - Failed to find active project - - - - - New Folder - - - - - Failed to create new sequence - - - - - Possible image sequence detected - - - - - The file '%1' looks like it might be part of an image sequence. Would you like to import it as such? - - - - - You must specify a project file to export - - - - - Specified project does not exist - - - - - Project contains no sequences, nothing to export - - - - - This project has multiple sequences. Which do you wish to export? - - - - - Enter number (or %1 to cancel): - - - - - Invalid sequence number - - - - - Export succeeded - - - - - Export failed: %1 - - - - - Project failed to load: %1 - - - - - Failed to open startup file - - - - - The project "%1" doesn't exist. A new project will be started instead. - - - - - - Missing OpenTimelineIO Libraries - - - - - - This build was compiled without OpenTimelineIO and therefore cannot open OpenTimelineIO files. - - - - - Save Project - - - - - - Error - - - - - This Sequence is empty. There is nothing to export. - - - - - No valid sequence detected. - -Make sure a sequence is loaded and it has a connected Viewer node. - - - - - Olive Project - - - - - OpenTimelineIO - - - - - Save Project As - - - - - Load Project - - - - - Label Node - - - - - Set node label - - - - - Sequence %1 - - - - - Cannot open recent project - - - - - The project "%1" doesn't exist. Would you like to remove this file from the recent list? - - - - - Unsaved Changes - - - - - The project '%1' has unsaved changes. Would you like to save them? - - - - - Save - - - - - Save All - - - - - Don't Save - - - - - Don't Save All - - - - - Failed to cache sequence - - - - - No active viewer found with this sequence. - - - - - Open Project - - - - - olive::CrashHandlerDialog - - - Olive - - - - - We're sorry, Olive has crashed. Please help us fix it by sending an error report. - - - - - Describe what you were doing in as much detail as possible. If you can, provide steps to reproduce this crash. - - - - - Crash Report: - - - - - Send Error Report - - - - - Don't Send - - - - - Waiting for crash report to be generated... - - - - - Upload Failed - - - - - Failed to send error report. Please try again later. - - - - - No Crash Summary - - - - - Are you sure you want to send an error report with no crash summary? - - - - - olive::CrossDissolveTransition - - - Cross Dissolve - - - - - Smoothly transition between two clips. - - - - - olive::CurvePanel - - - Curve Editor - - - - - olive::CurveView - - - Zoom to Fit - - - - - olive::CurveWidget - - - Linear - - - - - Bezier - - - - - Hold - - - - - olive::DipToColorTransition - - - Dip To Color - - - - - Transition between clips by dipping to a color. - - - - - olive::DiskCacheDialog - - - Disk Cache: %1 - - - - - Disk Cache Settings - - - - - Maximum Disk Cache: - - - - - %1 GB - - - - - - - Clear Disk Cache - - - - - Automatically clear disk cache on close - - - - - Are you sure you want to clear the disk cache in '%1'? - - - - - Disk Cache Cleared - - - - - Disk cache failed to fully clear. You may have to delete the cache files manually. - - - - - Disk Cache Partially Cleared - - - - - olive::DiskManager - - - - Disk Cache Error - - - - - Unable to set custom application disk cache. Using default instead. - - - - - Disk Cache - - - - - You've chosen to change the default disk cache location. This will invalidate your current cache. Would you like to continue? - - - - - Failed to open disk cache at "%1". Try a different folder. - - - - - olive::ElapsedCounterWidget - - - Elapsed: %1 - - - - - Remaining: %1 - - - - - olive::ExportAdvancedVideoDialog - - - Advanced - - - - - Pixel - - - - - Pixel Format: - - - - - Performance - - - - - Threads: - - - - - olive::ExportAudioTab - - - Codec: - - - - - Sample Rate: - - - - - Channel Layout: - - - - - Format: - - - - - olive::ExportCodec - - - DNxHD - - - - - H.264 - - - - - H.265 - - - - - OpenEXR - - - - - PNG - - - - - ProRes - - - - - TIFF - - - - - MP2 - - - - - MP3 - - - - - AAC - - - - - PCM (Uncompressed) - - - - - Unknown - - - - - olive::ExportDialog - - - Filename: - - - - - Browse for exported file filename - - - - - Preset: - - - - - Same As Source - High Quality - - - - - Same As Source - Medium Quality - - - - - Same As Source - Low Quality - - - - - Range: - - - - - Entire Sequence - - - - - In to Out - - - - - Format: - - - - - Export Video - - - - - Export Audio - - - - - Video - - - - - Audio - - - - - - Export - - - - - Preview - - - - - Invalid parameters - - - - - Both video and audio are disabled. There's nothing to export. - - - - - Invalid filename - - - - - The filename must contain the extension "%1". Would you like to append it automatically? - - - - - Failed to create output directory - - - - - The intended output directory doesn't exist and Olive couldn't create it. Please choose a different filename. - - - - - Confirm Overwrite - - - - - The file "%1" already exists. Do you want to overwrite it? - - - - - Invalid Parameters - - - - - Width and height must be multiples of 2. - - - - - olive::ExportFormat - - - DNxHD - - - - - Matroska Video - - - - - MPEG-4 Video - - - - - OpenEXR - - - - - PNG - - - - - TIFF - - - - - QuickTime - - - - - Unknown - - - - - olive::ExportTask - - - Exporting "%1" - - - - - Failed to create encoder - - - - - Failed to open file - - - - - Failed to overwrite "%1". Export has been saved as "%2" instead. - - - - - olive::ExportVideoTab - - - Basic - - - - - Width: - - - - - Height: - - - - - Maintain Aspect Ratio: - - - - - Scaling Method: - - - - - Fit - - - - - Stretch - - - - - Crop - - - - - Frame Rate: - - - - - Pixel Aspect Ratio: - - - - - Interlacing: - - - - - Quality: - - - - - Codec - - - - - Codec: - - - - - Advanced - - - - - olive::FloatSlider - - - %1 dB - - - - - %1% - - - - - olive::FootagePropertiesDialog - - - "%1" Properties - - - - - Name: - - - - - Tracks: - - - - - olive::FootageRelinkDialog - - - Footage - - - - - Filename - - - - - Actions - - - - - Browse - - - - - Relink Footage - - - - - Relink "%1" - - - - - All Files - - - - - olive::FootageViewerPanel - - - Footage Viewer - - - - - olive::GapBlock - - - Gap - - - - - A time-based node that represents an empty space. - - - - - olive::H264BitRateSection - - - Target Bit Rate (Mbps): - - - - - Maximum Bit Rate (Mbps): - - - - - Two-Pass - - - - - olive::H264FileSizeSection - - - Target File Size (MB): - - - - - Two-Pass - - - - - olive::H264Section - - - Compression Method: - - - - - Constant Rate Factor - - - - - Target Bit Rate - - - - - Target File Size - - - - - olive::ImageSection - - - Image Sequence: - - - - - olive::InterlacedComboBox - - - None (Progressive) - - - - - Top-Field First - - - - - Bottom-Field First - - - - - olive::KeyframePropertiesDialog - - - Keyframe Properties - - - - - In: - - - - - Out: - - - - - Linear - - - - - Hold - - - - - Bezier - - - - - olive::KeyframeViewBase - - - Linear - - - - - Bezier - - - - - Hold - - - - - P&roperties - - - - - olive::LoadOTIOTask - - - Failed to load OpenTimelineIO from file "%1" - - - - - Unknown OpenTimelineIO root element - - - - - Failed to load clip - - - - - olive::MainMenu - - - &Save '%1' - - - - - Save '%1' &As - - - - - Close '%1' - - - - - Close All Except '%1' - - - - - &Save Project - - - - - Save Project &As - - - - - Close Project - - - - - Close All Except Current Project - - - - - (None) - - - - - &File - - - - - &New - - - - - &Open Project - - - - - Open &Recent - - - - - &Clear Recent List - - - - - Sa&ve All Projects - - - - - &Import... - - - - - &Export - - - - - &Media... - - - - - &Project Properties... - - - - - Close All Projects - - - - - E&xit - - - - - &Edit - - - - - Insert - - - - - Overwrite - - - - - Select &All - - - - - Deselect All - - - - - Ripple to In Point - - - - - Ripple to Out Point - - - - - Edit to In Point - - - - - Edit to Out Point - - - - - Delete In/Out Point - - - - - Ripple Delete In/Out Point - - - - - Set/Edit Marker - - - - - &View - - - - - Zoom In - - - - - Zoom Out - - - - - Increase Track Height - - - - - Decrease Track Height - - - - - Toggle Show All - - - - - Full Screen - - - - - Full Screen Viewer - - - - - &Playback - - - - - Go to Start - - - - - Previous Frame - - - - - Play/Pause - - - - - Play In to Out - - - - - Next Frame - - - - - Go to End - - - - - Go to Previous Cut - - - - - Go to Next Cut - - - - - Go to In Point - - - - - Go to Out Point - - - - - Shuttle Left - - - - - Shuttle Stop - - - - - Shuttle Right - - - - - Loop - - - - - &Sequence - - - - - Cache Entire Sequence - - - - - Cache Sequence In/Out - - - - - Maximize Panel - - - - - Lock Panels - - - - - Reset to Default Layout - - - - - &Tools - - - - - Pointer Tool - - - - - Edit Tool - - - - - Ripple Tool - - - - - Rolling Tool - - - - - Razor Tool - - - - - Slip Tool - - - - - Slide Tool - - - - - Hand Tool - - - - - Zoom Tool - - - - - Transition Tool - - - - - Enable Snapping - - - - - Preferences - - - - - &Help - - - - - A&ction Search - - - - - Send &Feedback... - - - - - &About... - + olive::Footage + + %1: Audio - %n Channel(s), %2Hz + + %1: Audio - %n Channel, %2Hz + %1: Audio - %n Channels, %2Hz + olive::MainStatusBar - - - Welcome to %1 %2 - - - - - Running %1 background tasks - - - - - olive::MainWindow - - - Driver Warning - - - - - Olive has detected your system is using the Nouveau graphics driver. - -This driver is known to have stability and performance issues with Olive. It is highly recommended you install the proprietary NVIDIA driver before continuing to use Olive. - - - - - olive::ManagedDisplayWidget - - - Color Space - - - - - No color manager connected - - - - - Display - - - - - View - - - - - Look - - - - - (None) - - - - - OpenColorIO Error - - - - - Failed to set color configuration: %1 - - - - - olive::ManagedPixelSamplerWidget - - - Display - - - - - Reference - - - - - olive::MathNode - - - Math - - - - - Perform a mathematical operation between two values. - - - - - Method - - - - - - Value - - - - - Add - - - - - Subtract - - - - - Multiply - - - - - Divide - - - - - Power - - - - - olive::MatrixGenerator - - - Orthographic Matrix - - - - - Ortho - - - - - Generate an orthographic matrix using position, rotation, and scale. - - - - - Position - - - - - Rotation - - - - - Scale - - - - - Uniform Scale - - - - - Anchor Point - - - - - olive::MediaInput - - - Footage - - - - - olive::MenuShared - - - &Project - - - - - &Sequence - - - - - &Folder - - - - - Cu&t - - - - - Cop&y - - - - - &Paste - - - - - Paste Insert - - - - - Duplicate - - - - - Delete - - - - - Ripple Delete - - - - - Split - - - - - Set In Point - - - - - Set Out Point - - - - - Reset In Point - - - - - Reset Out Point - - - - - Clear In/Out Point - - - - - Add Default Transition - - - - - Link/Unlink - - - - - Enable/Disable - - - - - Nest - - - - - Frames - - - - - Drop Frame - - - - - Non-Drop Frame - - - - - Milliseconds - - - - - Seconds - - - - - olive::MergeNode - - - Merge - - - - - Merge two textures together. - - - - - Base - - - - - Blend - - - - - olive::Node - - - Input - - - - - Output - - - - - General - - - - - Math - - - - - Color - - - - - Filter - - - - - Timeline - - - - - Generator - - - - - Channel - - - - - Transition - - - - - Uncategorized - - - - - olive::NodeInput - - - Input - - - - - olive::NodeOutput - - - Output - - - - - olive::NodePanel - - - Node Editor - - - - - olive::NodeParam - - - Value - - - - - None - - - - - Integer - - - - - Float - - - - - Rational - - - - - Boolean - - - - - Color - - - - - Matrix - - - - - Text - - - - - Font - - - - - File - - - - - Texture - - - - - Samples - - - - - Footage - - - - - Vector 2D - - - - - Vector 3D - - - - - Vector 4D - - - - - Unknown - + + Running %n background task(s) + + Running %n background task + Running %n background tasks + olive::NodeParamViewArrayWidget - - - + - - - - - %1 elements - - - - - olive::NodeParamViewConnectedLabel - - - Connected to - - - - - Nothing - - - - - Disconnect - - - - - olive::NodeParamViewItem - - - %1 (%2) - - - - - olive::NodeParamViewItemBody - - - %1: - - - - - olive::NodeParamViewKeyframeControl - - - Warning - - - - - Are you sure you want to disable keyframing on this value? This will clear all existing keyframes. - - - - - olive::NodeTablePanel - - - Table View - - - - - olive::NodeTableView - - - Type - - - - - Source - - - - - R/X - - - - - G/Y - - - - - B/Z - - - - - A/W - - - - - (unknown) - - - - - olive::NodeTreeView - - - Nodes - - - - - olive::NodeView - - - Label - - - - - Auto-Position - - - - - Smooth Edges - - - - - Filter - - - - - Show All - - - - - Show Selected Blocks Only - - - - - Direction - - - - - Top to Bottom - - - - - Bottom to Top - - - - - Left to Right - - - - - Right to Left - - - - - Add - - - - - olive::PanNode - - - - Pan - - - - - Adjust the stereo panning of an audio source. - - - - - Samples - - - - - olive::PanelWidget - - - %1: %2 - - - - - olive::ParamPanel - - - Parameter Editor - - - - - (none) - - - - - (multiple) - - - - - olive::PathWidget - - - Browse - - - - - Browse for path - - - - - olive::PixelAspectRatioComboBox - - - Set Custom Pixel Aspect Ratio - - - - - Custom... - - - - - Custom (%1) - - - - - olive::PixelSamplerPanel - - - Pixel Sampler - - - - - olive::PixelSamplerWidget - - - Color - - - - - <html><font color='#FF8080'>R: %1</font><br><font color='#80FF80'>G: %2</font><br><font color='#8080FF'>B: %3</font><br>A: %4</html> - - - - - olive::PolygonGenerator - - - Polygon - - - - - Generate a 2D polygon of any amount of points. - - - - - Points - - - - - Color - - - - - olive::PreCacheTask - - - Pre-caching %1:%2 - - - - - olive::PreferencesAppearanceTab - - - Theme - - - - - Node Color Scheme - - - - - olive::PreferencesAudioTab - - - Output Device: - - - - - Input Device: - - - - - Sample Rate: - - - - - Audio Recording: - - - - - Mono - - - - - Stereo - - - - - Refresh Devices - - - - - Please wait... - - - - - Default - - - - - olive::PreferencesBehaviorTab - - - Behavior - - - - - General - - - - - Enable hover focus - - - - - Panels will be considered focused when the mouse cursor is over them without having to click them. - - - - - Scroll wheel zooms by default instead of scrolling - - - - - Holding CTRL while using Olive toggles this setting - - - - - Audio - - - - - Enable audio scrubbing - - - - - Timeline - - - - - Auto-Seek to Imported Clips - - - - - Edit Tool Also Seeks - - - - - Edit Tool Selects Links - - - - - Enable Drag Files to Timeline - - - - - Invert Timeline Scroll Axes - - - - - Hold ALT on any UI element to switch scrolling axes - - - - - Seek Also Selects - - - - - Seek to the End of Pastes - - - - - Selecting Also Seeks - - - - - Playback - - - - - Ask For Name When Setting Marker - - - - - Automatically rewind at the end of a sequence - - - - - Project - - - - - Drop Files on Media to Replace - - - - - Nodes - - - - - Add Default Effects to New Clips - - - - - Auto-Scale By Default - - - - - Splitting Clips Copies Dependencies - - - - - Multiple clips can share the same nodes. Disable this to automatically share node dependencies among clips when copying or splitting them. - - - - - olive::PreferencesDialog - - - Preferences - - - - - General - - - - - Appearance - - - - - Behavior - - - - - Disk - - - - - Audio - - - - - Keyboard - - - - - olive::PreferencesDiskTab - - - Disk Management - - - - - Disk Cache Location: - - - - - Disk Cache Settings - - - - - Cache Behavior - - - - - Cache Ahead: - - - - - - %1 seconds - - - - - Cache Behind: - - - - - Disk Cache - - - - - Failed to set disk cache location. Access was denied. - - - - - olive::PreferencesGeneralTab - - - Language: - - - - - Auto-Scroll Method: - - - - - None - - - - - Page Scrolling - - - - - Smooth Scrolling - - - - - Rectified Waveforms: - - - - - Default Still Image Length: - - - - - %1 seconds - - - - - %1 (%2) - - - - - olive::PreferencesKeyboardTab - - - Search for action or shortcut - - - - - Action - - - - - Shortcut - - - - - Import - - - - - Export - - - - - Reset Selected - - - - - Reset All - - - - - Confirm Reset All Shortcuts - - - - - Are you sure you wish to reset all keyboard shortcuts to their defaults? - - - - - Import Keyboard Shortcuts - - - - - - Error saving shortcuts - - - - - Failed to open file for reading - - - - - Export Keyboard Shortcuts - - - - - Export Shortcuts - - - - - Shortcuts exported successfully - - - - - Failed to open file for writing - - - - - olive::ProgressDialog - - - Cancel - - - - - olive::Project - - - - (untitled) - - - - - olive::ProjectExplorer - - - &New - - - - - &Import... - - - - - &Project Properties... - - - - - Open in New Tab - - - - - Open in New Window - - - - - Reveal in Explorer - - - - - Reveal in Finder - - - - - Reveal in File Manager - - - - - Pre-Cache - - - - - No sequences exist in project - - - - - For "%1" - - - - - P&roperties - - - - - Confirm Footage Deletion - - - - - The footage "%1" is currently used in the following sequence(s): - -%2 -What would you like to do with these clips? - - - - - Offline Footage - - - - - Delete Clips - - - - - olive::ProjectExplorerNavigation - - - Go to parent folder - - - - - olive::ProjectImportErrorDialog - - - Import Error - - - - - The following files failed to import. Olive likely does not support their formats. - + + %n element(s) + + %n element + %n elements + olive::ProjectImportTask - - - Importing %1 files - - - - - olive::ProjectLoadBaseTask - - - Loading '%1' - - - - - olive::ProjectLoadTask - - - This project is newer than this version of Olive and cannot be opened. - - - - - - This project is from a version of Olive that is no longer supported in this version. - - - - - Failed to read file "%1" for reading. - - - - - olive::ProjectPanel - - - Folder - - - - - Project - - - - - (none) - - - - - olive::ProjectPropertiesDialog - - - Project Properties for '%1' - - - - - OpenColorIO Configuration: - - - - - (default) - - - - - Default Input Color Space: - - - - - Browse - - - - - Color Management - - - - - Use Default Location - - - - - Store Alongside Project - - - - - Use Custom Location: - - - - - Disk Cache Settings - - - - - - "Store alignside project" functionality not implemented yet - - - - - Disk Cache - - - - - OpenColorIO Config Error - - - - - Failed to set OpenColorIO configuration: %1 - - - - - Invalid path - - - - - The cache path is invalid. Please check it and try again. - - - - - Browse for OpenColorIO configuration - - - - - olive::ProjectSaveTask - - - Saving '%1' - - - - - Failed to write XML data - - - - - Failed to overwrite "%1". Project has been saved as "%2" instead. - - - - - Failed to open temporary file "%1" for writing. - - - - - olive::ProjectToolbar - - - New... - - - - - Open Project - - - - - Save Project - - - - - Undo - - - - - Redo - - - - - Search media, markers, etc. - - - - - Switch to Tree View - - - - - Switch to List View - - - - - Switch to Icon View - - - - - olive::ProjectViewModel - - - Name - - - - - Duration - - - - - Rate - - - - - Move Items - - - - - olive::RenderCancelDialog - - - Waiting for workers to finish... - - - - - Renderer - - - - - olive::RichTextDialog - - - B - - - - - Bold - - - - - I - - - - - Italic - - - - - U - - - - - Underline - - - - - S - - - - - Strikethrough - - - - - Font Family - - - - - Font Size - - - - - L - - - - - Left Align - - - - - C - - - - - Center Align - - - - - R - - - - - Right Align - - - - - J - - - - - Justify Align - - - - - olive::SaveOTIOTask - - - Exporting project to OpenTimelineIO - - - - - Project contains no sequences to export. - - - - - Failed to serialize sequence "%1" - - - - - olive::ScopePanel - - - Waveform - - - - - Histogram - - - - - Scope - - - - - olive::SequenceDialog - - - Name: - - - - - New Sequence - - - - - Editing "%1" - - - - - Error editing Sequence - - - - - Please enter a name for this Sequence. - - - - - olive::SequenceDialogParameterTab - - - Video - - - - - Width: - - - - - Height: - - - - - Frame Rate: - - - - - Pixel Aspect Ratio: - - - - - Interlacing: - - - - - Audio - - - - - Sample Rate: - - - - - Channels: - - - - - Preview - - - - - Resolution: - - - - - Quality: - - - - - Save Preset - - - - - (%1x%2) - - - - - olive::SequenceDialogPresetTab - - - Preset - - - - - My Presets - - - - - 4K UHD - - - - - 1080p - - - - - 720p - - - - - NTSC - - - - - PAL - - - - - %1 23.976 FPS - - - - - %1 25 FPS - - - - - %1 29.97 FPS - - - - - %1 50 FPS - - - - - %1 59.94 FPS - - - - - %1 Standard - - - - - %1 Widescreen - - - - - Delete Preset - - - - - olive::SequenceViewerPanel - - - Sequence Viewer - + + Importing %n file(s) + + Importing %n file + Importing %n files + olive::SliderBase - - - Invalid Value - - - - - The entered value is not valid for this field. - - - - - olive::SolidGenerator - - - Solid - - - - - Generate a solid color. - - - - - Color - - - - - olive::StringSlider - - - (none) - - - - - olive::StrokeFilterNode - - - Stroke - - - - - Creates a stroke outline around an image. - - - - - Input - - - - - Color - - - - - Radius - - - - - Opacity - - - - - Inner - - - - - olive::Task - - - Task - - - - - Unknown error - - - - - olive::TaskDialog - - - Task Failed - - - - - olive::TaskManagerPanel - - - Task Manager - - - - - olive::TaskViewItem - - - Error: %1 - - - - - olive::TextGenerator - - - Sample Text - - - - - - Text - - - - - Generate rich text. - - - - - Font - - - - - Font Size - - - - - Color - - - - - Vertical Align - - - - - Top - - - - - Center - - - - - Bottom - - - - - olive::TimeBasedPanel - - - (none) - - - - - olive::TimeBasedWidget - - - Set Marker - - - - - Marker name: - - - - - olive::TimeInput - - - Time - - - - - Generates the time (in seconds) at this frame - - - - - olive::TimelinePanel - - - Timeline - - - - - olive::TimelineWidget - - - - Properties - - - - - Use Audio Time Units - - - - - olive::ToolPanel - - - Tools - - - - - olive::Toolbar - - - Pointer Tool - - - - - Edit Tool - - - - - Ripple Tool - - - - - Rolling Tool - - - - - Razor Tool - - - - - Slip Tool - - - - - Slide Tool - - - - - Hand Tool - - - - - Zoom Tool - - - - - Transition Tool - - - - - Record Tool - - - - - Add Tool - - - - - Toggle Snapping - - - - - olive::TrackOutput - - - Track - - - - - Node for representing and processing a single array of Blocks sorted by time. Also represents the end of a Sequence. - - - - - Blocks - - - - - Muted - - - - - Video %1 - - - - - Audio %1 - - - - - Subtitle %1 - - - - - Track %1 - - - - - olive::TrackViewItem - - - M - - - - - L - - - - - olive::TransitionBlock - - - From - - - - - To - - - - - Curve - - - - - Linear - - - - - Exponential - - - - - Logarithmic - - - - - olive::TrigonometryNode - - - Trigonometry - - - - - Perform a trigonometry operation on a value. - - - - - Sine - - - - - Cosine - - - - - Tangent - - - - - Inverse Sine - - - - - Inverse Cosine - - - - - Inverse Tangent - - - - - Hyperbolic Sine - - - - - Hyperbolic Cosine - - - - - Hyperbolic Tangent - - - - - Method - - - - - olive::VideoDividerComboBox - - - Full - - - - - 1/%1 - - - - - olive::VideoInput - - - Video Input - - - - - Video - - - - - Import a video footage stream. - - - - - olive::VideoStreamProperties - - - Pixel Aspect: - - - - - Interlacing: - - - - - Color Space: - - - - - Default (%1) - - - - - Premultiplied Alpha - - - - - Image Sequence - - - - - Start Index: - - - - - End Index: - - - - - Frame Rate: - - - - - Invalid Configuration - - - - - Image sequence end index must be a value higher than the start index. - - - - - olive::ViewerOutput - - - Viewer - - - - - Interface between a Viewer panel and the node system. - - - - - Texture - - - - - Samples - - - - - Video Tracks - - - - - Audio Tracks - - - - - Subtitle Tracks - - - - - olive::ViewerPanel - - - Viewer - - - - - olive::ViewerWidget - - - Error - - - - - No in or out points are set to cache. - - - - - - Safe Margins - - - - - Zoom - - - - - Fit - - - - - %1% - - - - - Full Screen - - - - - Screen %1: %2x%3 - - - - - Deinterlace - - - - - Scopes - - - - - Cache - - - - - Auto-Cache - - - - - Pause Auto-Cache During Playback - - - - - Cache Entire Sequence - - - - - Cache Sequence In/Out - - - - - Off - - - - - On - - - - - Custom Aspect - - - - - Show Audio Waveform - - - - - olive::VolumeNode - - - - Volume - - - - - Adjusts the volume of an audio source. - - - - - Samples - + + %n minute(s) + + %n minute + %n minutes + diff --git a/app/widget/nodeparamview/nodeparamviewarraywidget.cpp b/app/widget/nodeparamview/nodeparamviewarraywidget.cpp index 45514ed91..8203131a3 100644 --- a/app/widget/nodeparamview/nodeparamviewarraywidget.cpp +++ b/app/widget/nodeparamview/nodeparamviewarraywidget.cpp @@ -53,7 +53,7 @@ void NodeParamViewArrayWidget::UpdateCounter(const QString& input, int old_size, { Q_UNUSED(old_size) if (input == input_) { - count_lbl_->setText(tr("%1 element(s)").arg(new_size)); + count_lbl_->setText(tr("%n element(s)", nullptr, new_size)); } } diff --git a/app/widget/nodeparamview/nodeparamviewitem.cpp b/app/widget/nodeparamview/nodeparamviewitem.cpp index fe92606f7..2a59ab5a3 100644 --- a/app/widget/nodeparamview/nodeparamviewitem.cpp +++ b/app/widget/nodeparamview/nodeparamviewitem.cpp @@ -376,7 +376,7 @@ void NodeParamViewItemBody::Retranslate() if (ic.IsArray() && ic.element() >= 0) { // Make the label the array index - i.value().main_label->setText(tr("%n:", nullptr, ic.element())); + i.value().main_label->setText(tr("%1:").arg(ic.element())); } else { // Set to the input's name i.value().main_label->setText(tr("%1:").arg(ic.name())); diff --git a/app/widget/slider/sliderbase.cpp b/app/widget/slider/sliderbase.cpp index 25d36f10b..ce568cbb7 100644 --- a/app/widget/slider/sliderbase.cpp +++ b/app/widget/slider/sliderbase.cpp @@ -39,6 +39,7 @@ SliderBase::SliderBase(Mode mode, QWidget *parent) : dragged_diff_(0), require_valid_input_(true), tristate_(false), + format_plural_(false), drag_ladder_(nullptr), ladder_element_count_(0), dragged_(false) @@ -101,9 +102,10 @@ bool SliderBase::IsDragging() const return drag_ladder_; } -void SliderBase::SetFormat(const QString &s) +void SliderBase::SetFormat(const QString &s, const bool plural) { custom_format_ = s; + format_plural_ = plural; ForceLabelUpdate(); } @@ -113,6 +115,11 @@ void SliderBase::ClearFormat() ForceLabelUpdate(); } +bool SliderBase::IsFormatPlural() const +{ + return format_plural_; +} + void SliderBase::ForceLabelUpdate() { UpdateLabel(Value()); @@ -209,6 +216,8 @@ void SliderBase::UpdateLabel(const QVariant &v) { if (tristate_) { label_->setText("---"); + } else if (format_plural_) { + label_->setText(tr(GetFormat().toUtf8().constData(), nullptr, v.toInt())); } else { label_->setText(GetFormat().arg(ValueToString(v))); } diff --git a/app/widget/slider/sliderbase.h b/app/widget/slider/sliderbase.h index 5d5a9fc95..c4aca58c7 100644 --- a/app/widget/slider/sliderbase.h +++ b/app/widget/slider/sliderbase.h @@ -60,9 +60,11 @@ public: bool IsDragging() const; - void SetFormat(const QString& s); + void SetFormat(const QString& s, const bool plural=false); void ClearFormat(); + bool IsFormatPlural() const; + void SetLadderElementCount(int b) { ladder_element_count_ = b; @@ -127,6 +129,8 @@ private: QString custom_format_; + bool format_plural_; + SliderLadder* drag_ladder_; int ladder_element_count_; diff --git a/app/window/mainwindow/mainstatusbar.cpp b/app/window/mainwindow/mainstatusbar.cpp index c16cbce81..ad4732802 100644 --- a/app/window/mainwindow/mainstatusbar.cpp +++ b/app/window/mainwindow/mainstatusbar.cpp @@ -71,7 +71,7 @@ void MainStatusBar::UpdateStatus() if (manager_->GetTaskCount() == 1) { showMessage(t->GetTitle()); } else { - showMessage(tr("Running %1 background task(s)").arg(manager_->GetTaskCount())); + showMessage(tr("Running %n background task(s)", nullptr, manager_->GetTaskCount())); } bar_->setVisible(true);