diff --git a/.editorconfig b/.editorconfig index a534ffff5a..c6c1398f52 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,3 +11,8 @@ indent_style = tab indent_size = 2 tab_width = 8 trim_trailing_whitespace = false + +[src/libresrc/**default_*.json] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab5b362646..3af771fb0b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,6 +24,7 @@ jobs: args: >- -Ddefault_library=static --force-fallback-for=zlib,harfbuzz,freetype2,fribidi,libpng + -Dfallback_nasm=true -Dfreetype2:harfbuzz=disabled -Dharfbuzz:freetype=disabled -Dharfbuzz:cairo=disabled @@ -52,31 +53,43 @@ jobs: args: -Db_pch=false } - { - name: macOS Debug, - os: macos-13, + name: macOS x86_64 Debug, + os: macos-15-intel, buildtype: debugoptimized, args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 } - { - name: macOS Release, - os: macos-13, + name: macOS x86_64 Release, + os: macos-15-intel, + buildtype: release, + args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 + } + - { + name: macOS arm64 Debug, + os: macos-15, + buildtype: debugoptimized, + args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 + } + - { + name: macOS arm64 Release, + os: macos-15, buildtype: release, args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 } steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: '0' - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.x' - name: Setup Meson run: | python -m pip install --upgrade pip setuptools - pip install meson==1.7.2 + pip install meson - name: Setup MSVC if: matrix.config.os == 'windows-latest' && matrix.config.msvc == true @@ -95,7 +108,7 @@ jobs: Get-Location | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append popd - $gettexturl = "https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-static-64.zip" + $gettexturl = "https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.26-v1.17/gettext0.26-iconv1.17-static-64.zip" Invoke-WebRequest -Uri $gettexturl -OutFile ".\gettext.zip" Expand-Archive ".\gettext.zip" -DestinationPath gettext pushd gettext/bin @@ -109,9 +122,7 @@ jobs: export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 # brew update - brew install luarocks ninja - sudo luarocks install luafilesystem 1.8.0 - sudo luarocks install moonscript --dev + brew install ninja brew install libass zlib ffms2 fftw hunspell brew install pulseaudio # NO OpenAL in github CI @@ -143,7 +154,7 @@ jobs: run: cd build && ninja win-portable - name: Upload artifacts - win_installer - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: matrix.config.os == 'windows-latest' with: name: ${{ matrix.config.name }} - installer @@ -151,7 +162,7 @@ jobs: if-no-files-found: error - name: Upload artifacts - portable.zip - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: matrix.config.os == 'windows-latest' with: name: ${{ matrix.config.name }} - portable @@ -165,7 +176,7 @@ jobs: meson compile osx-build-dmg -C build - name: Upload artifacts - macOS dmg - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: startsWith(matrix.config.os, 'macos-') with: name: ${{ matrix.config.name }} - installer @@ -187,7 +198,7 @@ jobs: test -e distcheck/*/subprojects/LuaJIT*/meson.build - name: Upload artifacts - tarball - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: matrix.config.os == 'ubuntu-latest' && matrix.config.buildtype == 'release' with: name: Source Tarball diff --git a/README.md b/README.md index 53edfa389c..4c882b13b6 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,8 @@ If you are packaging Aegisub for a Linux distribution, here are a few things you Like for its other dependencies, Aegisub includes a meson subproject for LuaJIT that can be used to statically link a version of LuaJIT with 5.2 compatibility. For distributions that do not allow downloading additional sources at build time, the downloaded LuaJIT subproject is included in the source tarballs distributed with releases. +- When linked against libstdc++, Aegisub needs libstdc++ 6.0.32 or later due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95048. + Aegisub's tests will detect this bug, but if you're not running tests on packaging you'll need to make sure the libstdc++ version is recent enough. The following commands are an example for how to build Aegisub with the goal of creating a distribution package: diff --git a/automation/autoload/macro-2-mkfullwitdh.lua b/automation/autoload/macro-2-mkfullwitdh.lua index c10668eb3c..e73282fa7d 100644 --- a/automation/autoload/macro-2-mkfullwitdh.lua +++ b/automation/autoload/macro-2-mkfullwitdh.lua @@ -3,8 +3,8 @@ local tr = aegisub.gettext -script_name = tr("Make text fullwidth") -script_description = tr("Shows how to use the unicode include to iterate over characters and a lookup table to convert those characters to something else.") +script_name = tr"Make text fullwidth" +script_description = tr"Shows how to use the unicode include to iterate over characters and a lookup table to convert those characters to something else." script_author = "Niels Martin Hansen" script_version = "1" diff --git a/libaegisub/common/charset_conv.cpp b/libaegisub/common/charset_conv.cpp index 932ed410a6..e8cf78974d 100644 --- a/libaegisub/common/charset_conv.cpp +++ b/libaegisub/common/charset_conv.cpp @@ -114,26 +114,6 @@ namespace { } } - // Calculate the size of NUL in the given character set - size_t nul_size(const char *encoding) { - // We need a character set to convert from with a known encoding of NUL - // UTF-8 seems like the obvious choice - auto cd = Converter::create(false, "UTF-8", encoding); - - char dbuff[4]; - char sbuff[] = ""; - char* dst = dbuff; - const char* src = sbuff; - size_t dstLen = sizeof(dbuff); - size_t srcLen = 1; - - size_t ret = cd->Convert(&src, &srcLen, &dst, &dstLen); - assert(ret != iconv_failed); - assert(dst - dbuff > 0); - - return dst - dbuff; - } - #ifdef ICONV_POSIX class ConverterImpl final : public Converter { size_t bomSize; @@ -287,12 +267,7 @@ std::unique_ptr Converter::create(bool subst, const char *src, const IconvWrapper::IconvWrapper(const char *sourceEncoding, const char *destEncoding, bool enableSubst) : conv(Converter::create(enableSubst, sourceEncoding, destEncoding)) -{ - // These need to be set only after we verify that the source and dest - // charsets are valid - toNulLen = nul_size(destEncoding); - fromNulLen = nul_size(sourceEncoding); -} +{ } IconvWrapper::~IconvWrapper() = default; diff --git a/libaegisub/include/libaegisub/charset_conv.h b/libaegisub/include/libaegisub/charset_conv.h index 29a6b52c47..ad304fb3d9 100644 --- a/libaegisub/include/libaegisub/charset_conv.h +++ b/libaegisub/include/libaegisub/charset_conv.h @@ -64,8 +64,6 @@ struct Converter { /// @brief A C++ wrapper for iconv class IconvWrapper { - size_t toNulLen = 0; - size_t fromNulLen = 0; std::unique_ptr conv; public: diff --git a/libaegisub/include/libaegisub/io.h b/libaegisub/include/libaegisub/io.h index e3014cf7e9..91213bcdb1 100644 --- a/libaegisub/include/libaegisub/io.h +++ b/libaegisub/include/libaegisub/io.h @@ -12,6 +12,8 @@ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +#pragma once + #include #include diff --git a/libaegisub/lua/modules.cpp b/libaegisub/lua/modules.cpp index 61f32999fd..7d93c29d17 100644 --- a/libaegisub/lua/modules.cpp +++ b/libaegisub/lua/modules.cpp @@ -28,6 +28,17 @@ extern "C" int luaopen_lpeg(lua_State *L); namespace agi::lua { int regex_init(lua_State *L); +int wrap_luaopen_luabins(lua_State *L) { + lua_getfield(L, LUA_GLOBALSINDEX, "aegisub"); + lua_getfield(L, -1, "__raise_warning"); + lua_remove(L, -2); + + push_value(L, "This automation script uses the library luabins. This library is deprecated and will be removed in a future version of Aegisub. If your script critically depends on luabins and cannot be adapted to work without it, please let us know at https://github.com/TypesettingTools/Aegisub/issues/382 ."); + lua_call(L, 1, 0); + + return luaopen_luabins(L); +} + void preload_modules(lua_State *L) { luaL_openlibs(L); @@ -38,7 +49,7 @@ void preload_modules(lua_State *L) { set_field(L, "aegisub.__unicode_impl", luaopen_unicode_impl); set_field(L, "aegisub.__lfs_impl", luaopen_lfs_impl); set_field(L, "lpeg", luaopen_lpeg); - set_field(L, "luabins", luaopen_luabins); + set_field(L, "luabins", wrap_luaopen_luabins); lua_pop(L, 2); diff --git a/meson.build b/meson.build index b79c9e7fe5..6674c5f2b6 100644 --- a/meson.build +++ b/meson.build @@ -23,8 +23,8 @@ if host_machine.system() == 'windows' add_global_arguments('-DCSRI_NO_EXPORT', language: 'c') endif - sys_nasm = find_program('nasm', required: false) - if not sys_nasm.found() + if get_option('fallback_nasm') or \ + not find_program('nasm', required: false).found() nasm = subproject('nasm').get_variable('nasm') meson.override_find_program('nasm', nasm) endif @@ -110,6 +110,15 @@ if not get_option('local_boost') modules: boost_modules, required: false, static: get_option('default_library') == 'static') + + if boost_dep.version().version_compare('<1.77.0') + # boost regex is header-only since version 1.77.0, and some distributions have stopped shipping the stub module since then. + # So we need to require boost.regex for older versions but can't require it for newer versions. + boost_dep = dependency('boost', version: '>=1.70.0', + modules: boost_modules + ['regex'], + required: false, + static: get_option('default_library') == 'static') + endif endif if get_option('local_boost') or not boost_dep.found() @@ -120,6 +129,13 @@ if get_option('local_boost') or not boost_dep.found() endforeach endif +if cc.get_argument_syntax() == 'gcc' + # Work around compile error in Boost GIL, can be removed once + # https://github.com/boostorg/gil/commit/2956a0e9ef71f5c4f3163c8b8d675679e0fbaaff + # is in a boost release that's available everywhere + add_project_arguments(cc.get_supported_arguments(['-Wno-missing-template-arg-list-after-template-kw']), language: 'cpp') +endif + deps += boost_dep if host_machine.system() == 'windows' conf.set('BOOST_USE_WINDOWS_H', 1) diff --git a/meson_options.txt b/meson_options.txt index 4c00f520f8..54ea491590 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -15,6 +15,7 @@ option('csri', type: 'feature', description: 'CSRI support') option('system_luajit', type: 'boolean', value: false, description: 'Force using system luajit') option('local_boost', type: 'boolean', value: false, description: 'Force using locally compiled Boost') +option('fallback_nasm', type: 'boolean', value: false, description: 'Force using fallback nasm') option('wx_version', type: 'string', value: '3.2.2', description: 'The minimum wxWidgets version to use') diff --git a/packages/osx_bundle/Contents/Info.plist b/packages/osx_bundle/Contents/Info.plist index 7b0a6496f7..ac1dc6b018 100644 --- a/packages/osx_bundle/Contents/Info.plist +++ b/packages/osx_bundle/Contents/Info.plist @@ -33,7 +33,7 @@ @PLIST_VERSION@ CFBundleLongVersionString - @PLIST_VERSION@, Copyright 2005-2014, aegisub http://www.aegisub.org/ + @PLIST_VERSION@, Copyright 2005-2014, aegisub https://aegisub.org/ LSArchitecturePriority @@ -42,9 +42,15 @@ i386 + + CFBundleSupportedPlatforms + + MacOSX + + CFBundleGetInfoString - aegisub version @PLIST_VERSION@ built on @PLIST_BUILD_DATE@ http://www.aegisub.org/ + aegisub version @PLIST_VERSION@ built on @PLIST_BUILD_DATE@ https://aegisub.org/ LSMultipleInstancesProhibited diff --git a/packages/win_installer/dictionaries/fragment_dictbase.iss b/packages/win_installer/dictionaries/fragment_dictbase.iss index 6f07dcc378..64d4c99fa6 100644 --- a/packages/win_installer/dictionaries/fragment_dictbase.iss +++ b/packages/win_installer/dictionaries/fragment_dictbase.iss @@ -4,8 +4,8 @@ AppName=Aegisub AppVerName=Aegisub 3.1.0 AppVersion=3.1.0 AppPublisher=Aegisub Team -AppPublisherURL=http://www.aegisub.org/ -AppSupportURL=http://forum.aegisub.org/ +AppPublisherURL=https://aegisub.org/ +AppSupportURL=https://github.com/TypesettingTools/Aegisub/issues AppCopyright= 2005-2014 The Aegisub Team VersionInfoVersion=3.1.0 DefaultDirName={pf}\Aegisub diff --git a/po/aegisub.pot b/po/aegisub.pot index 74db332fda..e13b27b613 100644 --- a/po/aegisub.pot +++ b/po/aegisub.pot @@ -8,15 +8,24 @@ msgid "" msgstr "" "Project-Id-Version: Aegisub 3.2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-02 21:53+0100\n" +"POT-Creation-Date: 2025-12-01 20:46+0100\n" "PO-Revision-Date: 2005-2014-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +#: ../src/aegisublocale.cpp:113 ../src/command/app.cpp:156 +msgid "Language" +msgstr "" + +#: ../src/aegisublocale.cpp:113 +msgid "Please choose a language:" +msgstr "" + #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" msgstr "" @@ -159,34 +168,110 @@ msgstr "" msgid "karaoke timing" msgstr "" -#: ../src/auto4_base.cpp:454 +#: ../src/auto4_base.cpp:344 +msgid "" +"A script in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:347 +msgid "" +"Multiple scripts in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:350 +msgid "" +"A script in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:353 +msgid "" +"Multiple scripts in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:393 +#, c-format +msgid "" +"Automation Script referenced with unknown location specifier character.\n" +"Location specifier found: %c\n" +"Filename specified: %s" +msgstr "" + +#: ../src/auto4_base.cpp:401 +#, c-format +msgid "" +"Automation Script referenced could not be found.\n" +"Filename specified: %c%s\n" +"Searched relative to: %s\n" +"Resolved filename: %s" +msgstr "" + +#: ../src/auto4_base.cpp:462 #, c-format msgid "" "Failed to load Automation script '%s':\n" "%s" msgstr "" -#: ../src/auto4_base.cpp:461 +#: ../src/auto4_base.cpp:465 +#, c-format +msgid "" +"Warning when loading Automation script '%s':\n" +"%s" +msgstr "" + +#: ../src/auto4_base.cpp:472 #, c-format msgid "The file was not recognised as an Automation script: %s" msgstr "" -#: ../src/auto4_base.cpp:490 ../src/command/audio.cpp:84 +#: ../src/auto4_base.cpp:501 ../src/command/audio.cpp:84 #: ../src/command/keyframe.cpp:76 ../src/command/timecode.cpp:73 #: ../src/command/timecode.cpp:93 ../src/command/video.cpp:592 msgid "All Files" msgstr "" -#: ../src/auto4_base.cpp:496 ../src/command/keyframe.cpp:74 -#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 -#: ../src/subtitle_format.cpp:318 +#: ../src/auto4_base.cpp:507 ../src/command/keyframe.cpp:74 +#: ../src/dialog_attachments.cpp:170 ../src/subtitle_format.cpp:318 msgid "All Supported Formats" msgstr "" -#: ../src/auto4_base.cpp:502 +#: ../src/auto4_base.cpp:513 msgid "File was not recognized as a script" msgstr "" +#: ../src/auto4_lua.cpp:180 +#, c-format +msgid "" +"Warning in Automation script '%s':\n" +"%s" +msgstr "" + +#: ../src/auto4_lua.cpp:458 +msgid "Could not initialize Lua state" +msgstr "" + +#: ../src/auto4_lua.cpp:541 +#, c-format +msgid "" +"Error initialising Lua script \"%s\":\n" +"\n" +"%s" +msgstr "" + +#: ../src/auto4_lua.cpp:551 +msgid "" +"Attempted to load an Automation 3 script as an Automation 4 Lua script. " +"Automation 3 is no longer supported." +msgstr "" + #: ../src/charset_detect.cpp:50 msgid "" "Aegisub could not narrow down the character set to a single one.\n" @@ -273,10 +358,6 @@ msgstr "" msgid "&Language..." msgstr "" -#: ../src/command/app.cpp:156 -msgid "Language" -msgstr "" - #: ../src/command/app.cpp:157 msgid "Select Aegisub interface language" msgstr "" @@ -480,7 +561,6 @@ msgid "Play the current audio selection, ignoring changes made while playing" msgstr "" #: ../src/command/audio.cpp:205 ../src/command/audio.cpp:206 -#: ../src/command/video.cpp:647 msgid "Play current line" msgstr "" @@ -665,7 +745,7 @@ msgid "&Automation..." msgstr "" #: ../src/command/automation.cpp:74 ../src/command/automation.cpp:86 -#: ../src/preferences.cpp:333 +#: ../src/preferences.cpp:339 msgid "Automation" msgstr "" @@ -1094,7 +1174,7 @@ msgid "revert line" msgstr "" #: ../src/command/edit.cpp:1223 ../src/command/edit.cpp:1224 -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Clear" msgstr "" @@ -1257,7 +1337,7 @@ msgid "St&yle Name" msgstr "" #: ../src/command/grid.cpp:229 ../src/command/grid.cpp:241 -#: ../src/dialog_style_editor.cpp:178 +#: ../src/dialog_style_editor.cpp:179 msgid "Style Name" msgstr "" @@ -1918,6 +1998,10 @@ msgstr "" msgid "Open a VFR timecodes v1 or v2 file" msgstr "" +#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 +msgid "Text Files" +msgstr "" + #: ../src/command/timecode.cpp:83 msgid "Save Timecodes File..." msgstr "" @@ -2063,7 +2147,7 @@ msgid "&Translation Assistant..." msgstr "" #: ../src/command/tool.cpp:187 ../src/dialog_translation.cpp:64 -#: ../src/preferences.cpp:229 +#: ../src/preferences.cpp:235 msgid "Translation Assistant" msgstr "" @@ -2435,13 +2519,17 @@ msgid "Play" msgstr "" #: ../src/command/video.cpp:635 -msgid "Play video starting on this position" +msgid "Play the video starting on this position" msgstr "" #: ../src/command/video.cpp:645 ../src/command/video.cpp:646 msgid "Play line" msgstr "" +#: ../src/command/video.cpp:647 +msgid "Play the video for the current line" +msgstr "" + #: ../src/command/video.cpp:656 msgid "Show &Overscan Mask" msgstr "" @@ -2456,63 +2544,75 @@ msgid "" "overscan on televisions" msgstr "" +#: ../src/command/video.cpp:673 +msgid "Reset Video &Pan" +msgstr "" + #: ../src/command/video.cpp:674 -msgid "&100%" +msgid "Reset Video Pan" msgstr "" #: ../src/command/video.cpp:675 +msgid "Reset the video's position in the video display" +msgstr "" + +#: ../src/command/video.cpp:685 +msgid "&100%" +msgstr "" + +#: ../src/command/video.cpp:686 msgid "100%" msgstr "" -#: ../src/command/video.cpp:676 +#: ../src/command/video.cpp:687 msgid "Set zoom to 100%" msgstr "" -#: ../src/command/video.cpp:693 ../src/command/video.cpp:694 +#: ../src/command/video.cpp:704 ../src/command/video.cpp:705 msgid "Stop video" msgstr "" -#: ../src/command/video.cpp:695 +#: ../src/command/video.cpp:706 msgid "Stop video playback" msgstr "" -#: ../src/command/video.cpp:705 +#: ../src/command/video.cpp:716 msgid "&200%" msgstr "" -#: ../src/command/video.cpp:706 +#: ../src/command/video.cpp:717 msgid "200%" msgstr "" -#: ../src/command/video.cpp:707 +#: ../src/command/video.cpp:718 msgid "Set zoom to 200%" msgstr "" -#: ../src/command/video.cpp:723 +#: ../src/command/video.cpp:734 msgid "&50%" msgstr "" -#: ../src/command/video.cpp:724 +#: ../src/command/video.cpp:735 msgid "50%" msgstr "" -#: ../src/command/video.cpp:725 +#: ../src/command/video.cpp:736 msgid "Set zoom to 50%" msgstr "" -#: ../src/command/video.cpp:741 ../src/command/video.cpp:742 +#: ../src/command/video.cpp:752 ../src/command/video.cpp:753 msgid "Zoom In" msgstr "" -#: ../src/command/video.cpp:743 +#: ../src/command/video.cpp:754 msgid "Zoom video in" msgstr "" -#: ../src/command/video.cpp:753 ../src/command/video.cpp:754 +#: ../src/command/video.cpp:764 ../src/command/video.cpp:765 msgid "Zoom Out" msgstr "" -#: ../src/command/video.cpp:755 +#: ../src/command/video.cpp:766 msgid "Zoom video out" msgstr "" @@ -2582,7 +2682,7 @@ msgid "Line" msgstr "" #: ../src/command/vis_tool.cpp:141 -msgid "Appends a line" +msgid "Append a line" msgstr "" #: ../src/command/vis_tool.cpp:146 ../src/command/vis_tool.cpp:147 @@ -2590,7 +2690,7 @@ msgid "Bicubic" msgstr "" #: ../src/command/vis_tool.cpp:148 -msgid "Appends a bezier bicubic curve" +msgid "Append a bezier bicubic curve" msgstr "" #: ../src/command/vis_tool.cpp:153 ../src/command/vis_tool.cpp:154 @@ -2598,7 +2698,7 @@ msgid "Convert" msgstr "" #: ../src/command/vis_tool.cpp:155 -msgid "Converts a segment between line and bicubic" +msgid "Convert a segment between line and bicubic" msgstr "" #: ../src/command/vis_tool.cpp:160 ../src/command/vis_tool.cpp:161 @@ -2606,7 +2706,7 @@ msgid "Insert" msgstr "" #: ../src/command/vis_tool.cpp:162 -msgid "Inserts a control point" +msgid "Insert a control point" msgstr "" #: ../src/command/vis_tool.cpp:167 ../src/command/vis_tool.cpp:168 @@ -2614,7 +2714,7 @@ msgid "Remove" msgstr "" #: ../src/command/vis_tool.cpp:169 -msgid "Removes a control point" +msgid "Remove a control point" msgstr "" #: ../src/command/vis_tool.cpp:174 ../src/command/vis_tool.cpp:175 @@ -2622,7 +2722,7 @@ msgid "Freehand" msgstr "" #: ../src/command/vis_tool.cpp:176 -msgid "Draws a freehand shape" +msgid "Draw a freehand shape" msgstr "" #: ../src/command/vis_tool.cpp:181 ../src/command/vis_tool.cpp:182 @@ -2630,7 +2730,7 @@ msgid "Freehand smooth" msgstr "" #: ../src/command/vis_tool.cpp:183 -msgid "Draws a smoothed freehand shape" +msgid "Draw a smoothed freehand shape" msgstr "" #: ../src/dialog_about.cpp:46 @@ -2665,7 +2765,7 @@ msgid "E&xtract" msgstr "" #: ../src/dialog_attachments.cpp:79 ../src/dialog_style_manager.cpp:204 -#: ../src/preferences.cpp:605 +#: ../src/preferences.cpp:613 msgid "&Delete" msgstr "" @@ -2690,10 +2790,18 @@ msgstr "" msgid "Choose file to be attached" msgstr "" +#: ../src/dialog_attachments.cpp:139 ../src/dialog_attachments.cpp:170 +msgid "Font Files" +msgstr "" + #: ../src/dialog_attachments.cpp:142 msgid "attach font file" msgstr "" +#: ../src/dialog_attachments.cpp:149 ../src/dialog_attachments.cpp:170 +msgid "Graphic Files" +msgstr "" + #: ../src/dialog_attachments.cpp:152 msgid "attach graphics file" msgstr "" @@ -2742,15 +2850,20 @@ msgstr "" msgid "Filename" msgstr "" -#: ../src/dialog_automation.cpp:136 +#: ../src/dialog_automation.cpp:136 ../src/preferences.cpp:633 msgid "Description" msgstr "" -#: ../src/dialog_automation.cpp:222 +#: ../src/dialog_automation.cpp:224 msgid "Add Automation script" msgstr "" -#: ../src/dialog_automation.cpp:277 +#: ../src/dialog_automation.cpp:240 +#, c-format +msgid "Script '%s' is already loaded" +msgstr "" + +#: ../src/dialog_automation.cpp:279 #, c-format msgid "" "Total scripts loaded: %d\n" @@ -2758,11 +2871,11 @@ msgid "" "Local scripts loaded: %d\n" msgstr "" -#: ../src/dialog_automation.cpp:282 +#: ../src/dialog_automation.cpp:284 msgid "Scripting engines installed:" msgstr "" -#: ../src/dialog_automation.cpp:289 +#: ../src/dialog_automation.cpp:291 #, c-format msgid "" "\n" @@ -2773,29 +2886,40 @@ msgid "" "Version: %s\n" "Full path: %s\n" "State: %s\n" -"\n" -"Features provided by script:" msgstr "" -#: ../src/dialog_automation.cpp:295 +#: ../src/dialog_automation.cpp:297 msgid "Correctly loaded" msgstr "" -#: ../src/dialog_automation.cpp:295 +#: ../src/dialog_automation.cpp:297 msgid "Failed to load" msgstr "" -#: ../src/dialog_automation.cpp:298 +#: ../src/dialog_automation.cpp:297 +msgid "Loaded with warnings" +msgstr "" + +#: ../src/dialog_automation.cpp:300 +#, c-format +msgid "Warning: %s\n" +msgstr "" + +#: ../src/dialog_automation.cpp:303 +msgid "Features provided by script:\n" +msgstr "" + +#: ../src/dialog_automation.cpp:306 #, c-format msgid " Macro: %s (%s)" msgstr "" -#: ../src/dialog_automation.cpp:301 +#: ../src/dialog_automation.cpp:309 #, c-format msgid " Export filter: %s" msgstr "" -#: ../src/dialog_automation.cpp:305 +#: ../src/dialog_automation.cpp:313 msgid "Automation Script Info" msgstr "" @@ -2906,31 +3030,84 @@ msgstr "" msgid "Video: %s" msgstr "" -#: ../src/dialog_dummy_video.cpp:103 +#: ../src/dialog_dummy_video.cpp:71 +msgid "640×480 (SD fullscreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:72 +msgid "704×480 (SD anamorphic)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:73 +msgid "640×360 (SD widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:74 +msgid "704×396 (SD widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:75 +msgid "640×352 (SD widescreen MOD16)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:76 +msgid "704×400 (SD widescreen MOD16)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:77 +msgid "1024×576 (SuperPAL widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:78 +msgid "1280×720 (HD 720p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:79 +msgid "1920×1080 (FHD 1080p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:80 +msgid "2560×1440 (QHD 1440p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:81 +msgid "3840×2160 (4K UHD 2160p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:82 +msgid "1080×1920 (FHD vertical)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:104 msgid "Dummy video options" msgstr "" -#: ../src/dialog_dummy_video.cpp:115 +#: ../src/dialog_dummy_video.cpp:110 ../src/dialog_properties.cpp:130 +#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 +msgid "×" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:116 msgid "Checkerboard &pattern" msgstr "" -#: ../src/dialog_dummy_video.cpp:118 +#: ../src/dialog_dummy_video.cpp:119 msgid "Video resolution:" msgstr "" -#: ../src/dialog_dummy_video.cpp:120 +#: ../src/dialog_dummy_video.cpp:121 msgid "Color:" msgstr "" -#: ../src/dialog_dummy_video.cpp:123 +#: ../src/dialog_dummy_video.cpp:124 msgid "Frame rate (fps):" msgstr "" -#: ../src/dialog_dummy_video.cpp:124 +#: ../src/dialog_dummy_video.cpp:125 msgid "Duration (frames):" msgstr "" -#: ../src/dialog_dummy_video.cpp:179 +#: ../src/dialog_dummy_video.cpp:180 #, c-format msgid "Resulting duration: %s" msgstr "" @@ -2967,6 +3144,16 @@ msgstr "" msgid "Export subtitles file" msgstr "" +#: ../src/dialog_export.cpp:202 ../src/dialog_export.cpp:205 +#: ../src/dialog_export.cpp:208 +msgid "Error exporting subtitles" +msgstr "" + +#: ../src/dialog_export.cpp:208 ../src/dialog_style_manager.cpp:691 +#: ../src/project.cpp:142 +msgid "Unknown error" +msgstr "" + #: ../src/dialog_export_ebu3264.cpp:83 msgid "EBU STL export" msgstr "" @@ -3198,7 +3385,10 @@ msgstr "" #: ../src/dialog_fonts_collector.cpp:310 ../src/dialog_fonts_collector.cpp:315 #: ../src/dialog_fonts_collector.cpp:320 ../src/dialog_kara_timing_copy.cpp:489 #: ../src/dialog_kara_timing_copy.cpp:491 -#: ../src/dialog_kara_timing_copy.cpp:541 ../src/preferences.cpp:266 +#: ../src/dialog_kara_timing_copy.cpp:541 ../src/dialog_spellchecker.cpp:143 +#: ../src/dialog_spellchecker.cpp:149 ../src/dialog_style_manager.cpp:682 +#: ../src/dialog_style_manager.cpp:688 ../src/dialog_style_manager.cpp:691 +#: ../src/preferences.cpp:272 ../src/preferences.cpp:464 msgid "Error" msgstr "" @@ -3442,6 +3632,11 @@ msgstr "" msgid "From &video" msgstr "" +#: ../src/dialog_properties.cpp:138 ../src/dialog_resample.cpp:172 +#: ../src/dialog_resample.cpp:186 +msgid "YCbCr Matrix:" +msgstr "" + #: ../src/dialog_properties.cpp:141 msgid "Resolution" msgstr "" @@ -3512,14 +3707,6 @@ msgstr "" msgid "Margin offset" msgstr "" -#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "" - -#: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 -msgid "YCbCr Matrix:" -msgstr "" - #: ../src/dialog_resample.cpp:175 msgid "Source Resolution" msgstr "" @@ -3843,6 +4030,14 @@ msgstr "" msgid "Misspelled word:" msgstr "" +#: ../src/dialog_spellchecker.cpp:143 +msgid "No spellchecker available." +msgstr "" + +#: ../src/dialog_spellchecker.cpp:149 +msgid "No spellchecker dictionaries available." +msgstr "" + #: ../src/dialog_spellchecker.cpp:183 msgid "Ignore &UPPERCASE words" msgstr "" @@ -3887,217 +4082,224 @@ msgstr "" msgid "Style Editor" msgstr "" -#: ../src/dialog_style_editor.cpp:179 +#: ../src/dialog_style_editor.cpp:172 +msgid "Border boxes" +msgstr "" + +#: ../src/dialog_style_editor.cpp:172 ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:286 +msgid "Outline" +msgstr "" + +#: ../src/dialog_style_editor.cpp:172 +msgid "Shadow box (libass only)" +msgstr "" + +#: ../src/dialog_style_editor.cpp:180 msgid "Font" msgstr "" -#: ../src/dialog_style_editor.cpp:180 ../src/preferences.cpp:237 +#: ../src/dialog_style_editor.cpp:181 ../src/preferences.cpp:243 msgid "Colors" msgstr "" -#: ../src/dialog_style_editor.cpp:181 +#: ../src/dialog_style_editor.cpp:182 msgid "Margins" msgstr "" -#: ../src/dialog_style_editor.cpp:182 ../src/dialog_style_editor.cpp:285 -msgid "Outline" -msgstr "" - -#: ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:184 msgid "Miscellaneous" msgstr "" -#: ../src/dialog_style_editor.cpp:184 +#: ../src/dialog_style_editor.cpp:185 msgid "Preview" msgstr "" -#: ../src/dialog_style_editor.cpp:190 +#: ../src/dialog_style_editor.cpp:191 msgid "&Bold" msgstr "" -#: ../src/dialog_style_editor.cpp:191 +#: ../src/dialog_style_editor.cpp:192 msgid "&Italic" msgstr "" -#: ../src/dialog_style_editor.cpp:192 +#: ../src/dialog_style_editor.cpp:193 msgid "&Underline" msgstr "" -#: ../src/dialog_style_editor.cpp:193 +#: ../src/dialog_style_editor.cpp:194 msgid "&Strikeout" msgstr "" -#: ../src/dialog_style_editor.cpp:205 +#: ../src/dialog_style_editor.cpp:206 msgid "Alignment" msgstr "" -#: ../src/dialog_style_editor.cpp:208 -msgid "&Opaque box" -msgstr "" - -#: ../src/dialog_style_editor.cpp:216 +#: ../src/dialog_style_editor.cpp:217 msgid "Style name" msgstr "" -#: ../src/dialog_style_editor.cpp:217 +#: ../src/dialog_style_editor.cpp:218 msgid "Font face" msgstr "" -#: ../src/dialog_style_editor.cpp:218 +#: ../src/dialog_style_editor.cpp:219 msgid "Font size" msgstr "" -#: ../src/dialog_style_editor.cpp:219 +#: ../src/dialog_style_editor.cpp:220 msgid "Choose primary color" msgstr "" -#: ../src/dialog_style_editor.cpp:220 +#: ../src/dialog_style_editor.cpp:221 msgid "Choose secondary color" msgstr "" -#: ../src/dialog_style_editor.cpp:221 +#: ../src/dialog_style_editor.cpp:222 msgid "Choose outline color" msgstr "" -#: ../src/dialog_style_editor.cpp:222 +#: ../src/dialog_style_editor.cpp:223 msgid "Choose shadow color" msgstr "" -#: ../src/dialog_style_editor.cpp:223 +#: ../src/dialog_style_editor.cpp:224 msgid "Distance from left edge, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:224 +#: ../src/dialog_style_editor.cpp:225 msgid "Distance from right edge, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:225 +#: ../src/dialog_style_editor.cpp:226 msgid "Distance from top/bottom edge, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:226 -msgid "" -"When selected, display an opaque box behind the subtitles instead of an " -"outline around the text" +#: ../src/dialog_style_editor.cpp:227 +msgid "Whether to draw a normal outline or opaque boxes around the text" msgstr "" -#: ../src/dialog_style_editor.cpp:227 +#: ../src/dialog_style_editor.cpp:228 msgid "Outline width, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:228 +#: ../src/dialog_style_editor.cpp:229 msgid "Shadow distance, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:229 +#: ../src/dialog_style_editor.cpp:230 msgid "Scale X, in percentage" msgstr "" -#: ../src/dialog_style_editor.cpp:230 +#: ../src/dialog_style_editor.cpp:231 msgid "Scale Y, in percentage" msgstr "" -#: ../src/dialog_style_editor.cpp:231 +#: ../src/dialog_style_editor.cpp:232 msgid "Angle to rotate in Z axis, in degrees" msgstr "" -#: ../src/dialog_style_editor.cpp:232 +#: ../src/dialog_style_editor.cpp:233 msgid "" "Encoding, only useful in unicode if the font doesn't have the proper unicode " "mapping" msgstr "" -#: ../src/dialog_style_editor.cpp:233 +#: ../src/dialog_style_editor.cpp:234 msgid "Character spacing, in pixels" msgstr "" -#: ../src/dialog_style_editor.cpp:234 +#: ../src/dialog_style_editor.cpp:235 msgid "Alignment in screen, in numpad style" msgstr "" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Primary" msgstr "" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Secondary" msgstr "" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Shadow" msgstr "" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:263 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:263 msgid "Left" msgstr "" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:269 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:269 msgid "Right" msgstr "" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:275 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:275 msgid "Vert" msgstr "" -#: ../src/dialog_style_editor.cpp:314 +#: ../src/dialog_style_editor.cpp:315 msgid "Outline:" msgstr "" -#: ../src/dialog_style_editor.cpp:315 +#: ../src/dialog_style_editor.cpp:316 msgid "Shadow:" msgstr "" -#: ../src/dialog_style_editor.cpp:320 -msgid "Scale X%:" +#: ../src/dialog_style_editor.cpp:317 +msgid "Border style:" msgstr "" #: ../src/dialog_style_editor.cpp:321 -msgid "Scale Y%:" +msgid "Scale X%:" msgstr "" #: ../src/dialog_style_editor.cpp:322 -msgid "Rotation:" +msgid "Scale Y%:" msgstr "" #: ../src/dialog_style_editor.cpp:323 +msgid "Rotation:" +msgstr "" + +#: ../src/dialog_style_editor.cpp:324 msgid "Spacing:" msgstr "" -#: ../src/dialog_style_editor.cpp:326 +#: ../src/dialog_style_editor.cpp:327 msgid "Encoding:" msgstr "" -#: ../src/dialog_style_editor.cpp:336 +#: ../src/dialog_style_editor.cpp:337 msgid "Preview of current style" msgstr "" -#: ../src/dialog_style_editor.cpp:339 +#: ../src/dialog_style_editor.cpp:340 msgid "Text to be used for the preview" msgstr "" -#: ../src/dialog_style_editor.cpp:340 +#: ../src/dialog_style_editor.cpp:341 msgid "Color of preview background" msgstr "" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "Style name conflict" msgstr "" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "There is already a style with this name. Please choose another name." msgstr "" -#: ../src/dialog_style_editor.cpp:433 +#: ../src/dialog_style_editor.cpp:434 msgid "" "Do you want to change all instances of this style in the script to this new " "name?" msgstr "" -#: ../src/dialog_style_editor.cpp:434 +#: ../src/dialog_style_editor.cpp:435 msgid "Update script?" msgstr "" -#: ../src/dialog_style_editor.cpp:461 ../src/subs_edit_box.cpp:604 +#: ../src/dialog_style_editor.cpp:462 ../src/subs_edit_box.cpp:604 msgid "style change" msgstr "" @@ -4121,11 +4323,11 @@ msgstr "" msgid "Sort styles alphabetically" msgstr "" -#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:603 +#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:611 msgid "&New" msgstr "" -#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:604 +#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:612 msgid "&Edit" msgstr "" @@ -4263,6 +4465,10 @@ msgstr "" msgid "style delete" msgstr "" +#: ../src/dialog_style_manager.cpp:682 +msgid "Unsupported subtitle format" +msgstr "" + #: ../src/dialog_style_manager.cpp:698 msgid "Error Importing Styles" msgstr "" @@ -4648,7 +4854,7 @@ msgid "Decoder:" msgstr "" #: ../src/dialog_video_details.cpp:66 ../src/preferences.cpp:167 -#: ../src/preferences.cpp:438 +#: ../src/preferences.cpp:444 msgid "Video" msgstr "" @@ -4656,39 +4862,39 @@ msgstr "" msgid "Resolution mismatch" msgstr "" -#: ../src/dialog_video_properties.cpp:46 +#: ../src/dialog_video_properties.cpp:47 #, c-format msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" -#: ../src/dialog_video_properties.cpp:54 ../src/dialog_video_properties.cpp:63 +#: ../src/dialog_video_properties.cpp:58 ../src/dialog_video_properties.cpp:67 msgid "Set to video resolution" msgstr "" -#: ../src/dialog_video_properties.cpp:55 +#: ../src/dialog_video_properties.cpp:59 msgid "Resample script (stretch to new aspect ratio)" msgstr "" -#: ../src/dialog_video_properties.cpp:56 +#: ../src/dialog_video_properties.cpp:60 msgid "Resample script (add borders)" msgstr "" -#: ../src/dialog_video_properties.cpp:57 +#: ../src/dialog_video_properties.cpp:61 msgid "Resample script (remove borders)" msgstr "" -#: ../src/dialog_video_properties.cpp:64 +#: ../src/dialog_video_properties.cpp:68 msgid "Resample script" msgstr "" -#: ../src/dialog_video_properties.cpp:163 +#: ../src/dialog_video_properties.cpp:167 msgid "change script resolution" msgstr "" @@ -4895,7 +5101,7 @@ msgstr "" msgid "Invalid command name for hotkey" msgstr "" -#: ../src/main.cpp:246 +#: ../src/main.cpp:258 #, c-format msgid "" "Oops, Aegisub has crashed!\n" @@ -4907,21 +5113,29 @@ msgid "" "Aegisub will now close." msgstr "" -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "Check for updates?" msgstr "" -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "" "Do you want Aegisub to check for updates whenever it starts? You can still " "do it manually via the Help menu." msgstr "" -#: ../src/main.cpp:390 ../src/main.cpp:393 +#: ../src/main.cpp:402 ../src/main.cpp:405 msgid "Program error" msgstr "" -#: ../src/main.cpp:407 +#: ../src/main.cpp:405 +#, c-format +msgid "" +"Aegisub has crashed while starting up!\n" +"\n" +"The last startup step attempted was: %s." +msgstr "" + +#: ../src/main.cpp:419 #, c-format msgid "" "An unexpected error has occurred. Please save your work and restart " @@ -4930,6 +5144,10 @@ msgid "" "Error Message: %s" msgstr "" +#: ../src/main.cpp:420 +msgid "Exception in event handler" +msgstr "" + #: ../src/menu.cpp:96 msgid "Empty" msgstr "" @@ -4942,24 +5160,24 @@ msgstr "" msgid "No Automation macros loaded" msgstr "" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Choose which track to read:" msgstr "" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Multiple subtitle tracks found" msgstr "" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Parsing Matroska" msgstr "" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Reading subtitles from Matroska file." msgstr "" #: ../src/preferences.cpp:63 ../src/preferences.cpp:65 -#: ../src/preferences.cpp:335 ../src/preferences.cpp:356 +#: ../src/preferences.cpp:341 ../src/preferences.cpp:362 msgid "General" msgstr "" @@ -4983,11 +5201,11 @@ msgstr "" msgid "Always" msgstr "" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Ask" msgstr "" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Never" msgstr "" @@ -5043,7 +5261,7 @@ msgstr "" msgid "Plain text import" msgstr "" -#: ../src/preferences.cpp:127 ../src/preferences.cpp:371 +#: ../src/preferences.cpp:127 ../src/preferences.cpp:377 msgid "Audio" msgstr "" @@ -5139,7 +5357,7 @@ msgstr "" msgid "Video position" msgstr "" -#: ../src/preferences.cpp:155 ../src/preferences.cpp:251 +#: ../src/preferences.cpp:155 ../src/preferences.cpp:257 msgid "Seconds boundaries" msgstr "" @@ -5167,572 +5385,652 @@ msgstr "" msgid "Automatically open audio when opening video" msgstr "" +#: ../src/preferences.cpp:179 +msgid "Does nothing" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Pans the video" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Pans the video (X/Y swapped)" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box (reversed)" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video (reversed)" +msgstr "" + #: ../src/preferences.cpp:181 -msgid "Default Zoom" +msgid "Scrolling on the video display" +msgstr "" + +#: ../src/preferences.cpp:182 +msgid "Ctrl+Scrolling on the video display" msgstr "" #: ../src/preferences.cpp:183 -msgid "Fast jump step in frames" +msgid "Shift+Scrolling on the video display" msgstr "" #: ../src/preferences.cpp:187 -msgid "Screenshot save path" +msgid "Default Zoom" msgstr "" #: ../src/preferences.cpp:189 +msgid "Fast jump step in frames" +msgstr "" + +#: ../src/preferences.cpp:193 +msgid "Screenshot save path" +msgstr "" + +#: ../src/preferences.cpp:195 msgid "Script Resolution" msgstr "" -#: ../src/preferences.cpp:190 +#: ../src/preferences.cpp:196 msgid "Use resolution of first video opened" msgstr "" -#: ../src/preferences.cpp:193 +#: ../src/preferences.cpp:199 msgid "Default width" msgstr "" -#: ../src/preferences.cpp:195 +#: ../src/preferences.cpp:201 msgid "Default height" msgstr "" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always resample" msgstr "" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always set" msgstr "" -#: ../src/preferences.cpp:199 +#: ../src/preferences.cpp:205 msgid "Match video resolution on open" msgstr "" -#: ../src/preferences.cpp:206 +#: ../src/preferences.cpp:212 msgid "Interface" msgstr "" -#: ../src/preferences.cpp:208 +#: ../src/preferences.cpp:214 msgid "Edit Box" msgstr "" -#: ../src/preferences.cpp:209 +#: ../src/preferences.cpp:215 msgid "Enable call tips" msgstr "" -#: ../src/preferences.cpp:210 +#: ../src/preferences.cpp:216 msgid "Overwrite in time boxes" msgstr "" -#: ../src/preferences.cpp:211 +#: ../src/preferences.cpp:217 msgid "Shift+Enter adds \\n" msgstr "" -#: ../src/preferences.cpp:212 +#: ../src/preferences.cpp:218 msgid "Enable syntax highlighting" msgstr "" -#: ../src/preferences.cpp:213 +#: ../src/preferences.cpp:219 msgid "Dictionaries path" msgstr "" -#: ../src/preferences.cpp:216 +#: ../src/preferences.cpp:222 msgid "Character Counter" msgstr "" -#: ../src/preferences.cpp:217 +#: ../src/preferences.cpp:223 msgid "Maximum characters per line" msgstr "" -#: ../src/preferences.cpp:218 +#: ../src/preferences.cpp:224 msgid "Characters Per Second Warning Threshold" msgstr "" -#: ../src/preferences.cpp:219 +#: ../src/preferences.cpp:225 msgid "Characters Per Second Error Threshold" msgstr "" -#: ../src/preferences.cpp:220 +#: ../src/preferences.cpp:226 msgid "Ignore whitespace" msgstr "" -#: ../src/preferences.cpp:221 +#: ../src/preferences.cpp:227 msgid "Ignore punctuation" msgstr "" -#: ../src/preferences.cpp:223 +#: ../src/preferences.cpp:229 msgid "Grid" msgstr "" -#: ../src/preferences.cpp:224 +#: ../src/preferences.cpp:230 msgid "Focus grid on click" msgstr "" -#: ../src/preferences.cpp:225 +#: ../src/preferences.cpp:231 msgid "Highlight visible subtitles" msgstr "" -#: ../src/preferences.cpp:226 +#: ../src/preferences.cpp:232 msgid "Hide overrides symbol" msgstr "" -#: ../src/preferences.cpp:230 +#: ../src/preferences.cpp:236 msgid "Skip over whitespace" msgstr "" -#: ../src/preferences.cpp:245 +#: ../src/preferences.cpp:251 msgid "Audio Display" msgstr "" -#: ../src/preferences.cpp:246 +#: ../src/preferences.cpp:252 msgid "Play cursor" msgstr "" -#: ../src/preferences.cpp:247 +#: ../src/preferences.cpp:253 msgid "Line boundary start" msgstr "" -#: ../src/preferences.cpp:248 +#: ../src/preferences.cpp:254 msgid "Line boundary end" msgstr "" -#: ../src/preferences.cpp:249 +#: ../src/preferences.cpp:255 msgid "Line boundary inactive line" msgstr "" -#: ../src/preferences.cpp:250 +#: ../src/preferences.cpp:256 msgid "Syllable boundaries" msgstr "" -#: ../src/preferences.cpp:253 +#: ../src/preferences.cpp:259 msgid "Syntax Highlighting" msgstr "" -#: ../src/preferences.cpp:254 +#: ../src/preferences.cpp:260 msgid "Background" msgstr "" -#: ../src/preferences.cpp:255 +#: ../src/preferences.cpp:261 msgid "Normal" msgstr "" -#: ../src/preferences.cpp:256 +#: ../src/preferences.cpp:262 msgid "Comments" msgstr "" -#: ../src/preferences.cpp:257 +#: ../src/preferences.cpp:263 msgid "Drawing Commands" msgstr "" -#: ../src/preferences.cpp:258 +#: ../src/preferences.cpp:264 msgid "Drawing X Coords" msgstr "" -#: ../src/preferences.cpp:259 +#: ../src/preferences.cpp:265 msgid "Drawing Y Coords" msgstr "" -#: ../src/preferences.cpp:260 +#: ../src/preferences.cpp:266 msgid "Underline Spline Endpoints" msgstr "" -#: ../src/preferences.cpp:262 +#: ../src/preferences.cpp:268 msgid "Brackets" msgstr "" -#: ../src/preferences.cpp:263 +#: ../src/preferences.cpp:269 msgid "Slashes and Parentheses" msgstr "" -#: ../src/preferences.cpp:264 +#: ../src/preferences.cpp:270 msgid "Tags" msgstr "" -#: ../src/preferences.cpp:265 +#: ../src/preferences.cpp:271 msgid "Parameters" msgstr "" -#: ../src/preferences.cpp:267 +#: ../src/preferences.cpp:273 msgid "Error Background" msgstr "" -#: ../src/preferences.cpp:268 +#: ../src/preferences.cpp:274 msgid "Line Break" msgstr "" -#: ../src/preferences.cpp:269 +#: ../src/preferences.cpp:275 msgid "Karaoke templates" msgstr "" -#: ../src/preferences.cpp:270 +#: ../src/preferences.cpp:276 msgid "Karaoke variables" msgstr "" -#: ../src/preferences.cpp:276 +#: ../src/preferences.cpp:282 msgid "Audio Color Schemes" msgstr "" -#: ../src/preferences.cpp:278 ../src/preferences.cpp:387 +#: ../src/preferences.cpp:284 ../src/preferences.cpp:393 msgid "Spectrum" msgstr "" -#: ../src/preferences.cpp:279 +#: ../src/preferences.cpp:285 msgid "Waveform" msgstr "" -#: ../src/preferences.cpp:281 +#: ../src/preferences.cpp:287 msgid "Subtitle Grid" msgstr "" -#: ../src/preferences.cpp:282 +#: ../src/preferences.cpp:288 msgid "Standard foreground" msgstr "" -#: ../src/preferences.cpp:283 +#: ../src/preferences.cpp:289 msgid "Standard background" msgstr "" -#: ../src/preferences.cpp:284 +#: ../src/preferences.cpp:290 msgid "Selection foreground" msgstr "" -#: ../src/preferences.cpp:285 +#: ../src/preferences.cpp:291 msgid "Selection background" msgstr "" -#: ../src/preferences.cpp:286 +#: ../src/preferences.cpp:292 msgid "Collision foreground" msgstr "" -#: ../src/preferences.cpp:287 +#: ../src/preferences.cpp:293 msgid "In frame background" msgstr "" -#: ../src/preferences.cpp:288 +#: ../src/preferences.cpp:294 msgid "Comment background" msgstr "" -#: ../src/preferences.cpp:289 +#: ../src/preferences.cpp:295 msgid "Selected comment background" msgstr "" -#: ../src/preferences.cpp:290 +#: ../src/preferences.cpp:296 msgid "Header background" msgstr "" -#: ../src/preferences.cpp:291 +#: ../src/preferences.cpp:297 msgid "Left Column" msgstr "" -#: ../src/preferences.cpp:292 +#: ../src/preferences.cpp:298 msgid "Active Line Border" msgstr "" -#: ../src/preferences.cpp:293 +#: ../src/preferences.cpp:299 msgid "Lines" msgstr "" -#: ../src/preferences.cpp:294 +#: ../src/preferences.cpp:300 msgid "CPS Error" msgstr "" -#: ../src/preferences.cpp:296 +#: ../src/preferences.cpp:302 msgid "Visual Typesetting Tools" msgstr "" -#: ../src/preferences.cpp:297 +#: ../src/preferences.cpp:303 msgid "Primary Lines" msgstr "" -#: ../src/preferences.cpp:298 +#: ../src/preferences.cpp:304 msgid "Secondary Lines" msgstr "" -#: ../src/preferences.cpp:299 +#: ../src/preferences.cpp:305 msgid "Primary Highlight" msgstr "" -#: ../src/preferences.cpp:300 +#: ../src/preferences.cpp:306 msgid "Secondary Highlight" msgstr "" -#: ../src/preferences.cpp:303 +#: ../src/preferences.cpp:309 msgid "Visual Typesetting Tools Alpha" msgstr "" -#: ../src/preferences.cpp:304 +#: ../src/preferences.cpp:310 msgid "Shaded Area" msgstr "" -#: ../src/preferences.cpp:313 +#: ../src/preferences.cpp:319 msgid "Backup" msgstr "" -#: ../src/preferences.cpp:315 +#: ../src/preferences.cpp:321 msgid "Automatic Save" msgstr "" -#: ../src/preferences.cpp:316 ../src/preferences.cpp:324 +#: ../src/preferences.cpp:322 ../src/preferences.cpp:330 msgid "Enable" msgstr "" -#: ../src/preferences.cpp:319 +#: ../src/preferences.cpp:325 msgid "Interval in seconds" msgstr "" -#: ../src/preferences.cpp:320 ../src/preferences.cpp:326 -#: ../src/preferences.cpp:385 +#: ../src/preferences.cpp:326 ../src/preferences.cpp:332 +#: ../src/preferences.cpp:391 msgid "Path" msgstr "" -#: ../src/preferences.cpp:321 +#: ../src/preferences.cpp:327 msgid "Autosave after every change" msgstr "" -#: ../src/preferences.cpp:323 +#: ../src/preferences.cpp:329 msgid "Automatic Backup" msgstr "" -#: ../src/preferences.cpp:337 +#: ../src/preferences.cpp:343 msgid "Base path" msgstr "" -#: ../src/preferences.cpp:338 +#: ../src/preferences.cpp:344 msgid "Include path" msgstr "" -#: ../src/preferences.cpp:339 +#: ../src/preferences.cpp:345 msgid "Auto-load path" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "0: Fatal" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "1: Error" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "2: Warning" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "3: Hint" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "4: Debug" msgstr "" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "5: Trace" msgstr "" -#: ../src/preferences.cpp:343 +#: ../src/preferences.cpp:349 msgid "Trace level" msgstr "" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "All scripts" msgstr "" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Global autoload scripts" msgstr "" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "No scripts" msgstr "" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Subtitle-local scripts" msgstr "" -#: ../src/preferences.cpp:347 +#: ../src/preferences.cpp:353 msgid "Autoreload on Export" msgstr "" -#: ../src/preferences.cpp:354 +#: ../src/preferences.cpp:360 msgid "Advanced" msgstr "" -#: ../src/preferences.cpp:358 +#: ../src/preferences.cpp:364 msgid "" -"Changing these settings might result in bugs and/or crashes. Do not touch " +"Changing these settings might result in bugs and/or crashes. Do not touch " "these unless you know what you're doing." msgstr "" -#: ../src/preferences.cpp:373 ../src/preferences.cpp:440 +#: ../src/preferences.cpp:379 ../src/preferences.cpp:446 msgid "Expert" msgstr "" -#: ../src/preferences.cpp:376 +#: ../src/preferences.cpp:382 msgid "Audio provider" msgstr "" -#: ../src/preferences.cpp:379 +#: ../src/preferences.cpp:385 msgid "Audio player" msgstr "" -#: ../src/preferences.cpp:381 +#: ../src/preferences.cpp:387 msgid "Cache" msgstr "" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "Hard Disk" msgstr "" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "None (NOT RECOMMENDED)" msgstr "" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "RAM" msgstr "" -#: ../src/preferences.cpp:384 +#: ../src/preferences.cpp:390 msgid "Cache type" msgstr "" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Better quality" msgstr "" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "High quality" msgstr "" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Insane quality" msgstr "" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Regular quality" msgstr "" -#: ../src/preferences.cpp:391 +#: ../src/preferences.cpp:397 msgid "Quality" msgstr "" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Compressed" msgstr "" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Extended" msgstr "" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Linear" msgstr "" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Logarithmic" msgstr "" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Medium" msgstr "" -#: ../src/preferences.cpp:395 +#: ../src/preferences.cpp:401 msgid "Frequency mapping" msgstr "" -#: ../src/preferences.cpp:397 +#: ../src/preferences.cpp:403 msgid "Cache memory max (MB)" msgstr "" -#: ../src/preferences.cpp:403 +#: ../src/preferences.cpp:409 msgid "Avisynth down-mixer" msgstr "" -#: ../src/preferences.cpp:404 +#: ../src/preferences.cpp:410 msgid "Force sample rate" msgstr "" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Abort" msgstr "" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Ignore" msgstr "" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Stop" msgstr "" -#: ../src/preferences.cpp:412 +#: ../src/preferences.cpp:418 msgid "Audio indexing error handling mode" msgstr "" -#: ../src/preferences.cpp:414 +#: ../src/preferences.cpp:420 msgid "Always index all audio tracks" msgstr "" -#: ../src/preferences.cpp:419 +#: ../src/preferences.cpp:425 msgid "Portaudio device" msgstr "" -#: ../src/preferences.cpp:424 +#: ../src/preferences.cpp:430 msgid "OSS Device" msgstr "" -#: ../src/preferences.cpp:429 +#: ../src/preferences.cpp:435 msgid "Buffer latency" msgstr "" -#: ../src/preferences.cpp:430 +#: ../src/preferences.cpp:436 msgid "Buffer length" msgstr "" -#: ../src/preferences.cpp:443 +#: ../src/preferences.cpp:449 msgid "Video provider" msgstr "" -#: ../src/preferences.cpp:446 +#: ../src/preferences.cpp:452 msgid "Subtitles provider" msgstr "" -#: ../src/preferences.cpp:450 +#: ../src/preferences.cpp:456 msgid "Allow pre-2.56a Avisynth" msgstr "" -#: ../src/preferences.cpp:452 +#: ../src/preferences.cpp:458 msgid "Avisynth memory limit" msgstr "" -#: ../src/preferences.cpp:460 +#: ../src/preferences.cpp:464 +msgid "Debug" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Fatal" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Info" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Panic" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Quiet" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Verbose" +msgstr "" + +#: ../src/preferences.cpp:464 ../src/project.cpp:318 +msgid "Warning" +msgstr "" + +#: ../src/preferences.cpp:466 msgid "Debug log verbosity" msgstr "" -#: ../src/preferences.cpp:462 +#: ../src/preferences.cpp:468 msgid "Decoding threads" msgstr "" -#: ../src/preferences.cpp:463 +#: ../src/preferences.cpp:469 msgid "Enable unsafe seeking" msgstr "" -#: ../src/preferences.cpp:599 +#: ../src/preferences.cpp:605 msgid "Hotkeys" msgstr "" -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:609 +msgid "Search" +msgstr "" + +#: ../src/preferences.cpp:625 ../src/preferences.cpp:628 +msgid "Hotkey" +msgstr "" + +#: ../src/preferences.cpp:626 ../src/preferences.cpp:631 +msgid "Command" +msgstr "" + +#: ../src/preferences.cpp:705 msgid "" "Are you sure that you want to restore the defaults? All your settings will " "be overridden." msgstr "" -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:705 msgid "Restore defaults?" msgstr "" -#: ../src/preferences.cpp:715 +#: ../src/preferences.cpp:723 msgid "Preferences" msgstr "" -#: ../src/preferences.cpp:743 +#: ../src/preferences.cpp:751 msgid "&Restore Defaults" msgstr "" @@ -5752,6 +6050,15 @@ msgstr "" msgid "Font Size" msgstr "" +#: ../src/project.cpp:85 +msgid "Error loading file" +msgstr "" + +#: ../src/project.cpp:111 ../src/project.cpp:130 +#, c-format +msgid "%s not found." +msgstr "" + #: ../src/project.cpp:186 msgid "Do you want to load/unload the associated files?" msgstr "" @@ -5816,7 +6123,19 @@ msgid "" "The following providers were tried:\n" msgstr "" -#: ../src/resolution_resampler.cpp:288 +#: ../src/project.cpp:368 +msgid "Failed to parse timecodes file: " +msgstr "" + +#: ../src/project.cpp:394 +msgid "Failed to parse keyframes file: " +msgstr "" + +#: ../src/project.cpp:398 +msgid "Keyframes file in unknown format: " +msgstr "" + +#: ../src/resolution_resampler.cpp:300 msgid "resolution resampling" msgstr "" @@ -5844,13 +6163,21 @@ msgstr "" msgid "Unsaved changes" msgstr "" +#: ../src/subs_controller.cpp:265 ../src/subs_controller.cpp:404 +msgid "Untitled" +msgstr "" + #: ../src/subs_controller.cpp:279 #, c-format msgid "File backup saved as \"%s\"." msgstr "" -#: ../src/subs_controller.cpp:404 -msgid "Untitled" +#: ../src/subs_controller.cpp:282 +msgid "Exception when attempting to autosave file: " +msgstr "" + +#: ../src/subs_controller.cpp:285 +msgid "Unhandled exception when attempting to autosave file." msgstr "" #: ../src/subs_controller.cpp:406 @@ -6032,6 +6359,16 @@ msgstr "" msgid "Disable" msgstr "" +#: ../src/subs_preview.cpp:142 +msgid "" +"Could not get any subtitles provider for the preview box. Make sure that you " +"have a provider installed." +msgstr "" + +#: ../src/subs_preview.cpp:143 +msgid "No subtitles provider" +msgstr "" + #: ../src/subtitle_format.cpp:102 #, c-format msgid "From video (%g)" @@ -6122,6 +6459,18 @@ msgstr "" msgid "Time of this frame relative to start and end of current subs" msgstr "" +#: ../src/video_provider_manager.cpp:78 +msgid "file not found." +msgstr "" + +#: ../src/video_provider_manager.cpp:84 +msgid "video is not in a supported format." +msgstr "" + +#: ../src/video_provider_manager.cpp:101 +msgid "Could not open " +msgstr "" + #: ../src/visual_tool.cpp:119 msgid "visual typesetting" msgstr "" @@ -6320,6 +6669,16 @@ msgstr "" msgid "Adds \\be1 tags to all selected lines" msgstr "" +#: ../automation/autoload/macro-2-mkfullwitdh.lua:6 +msgid "Make text fullwidth" +msgstr "" + +#: ../automation/autoload/macro-2-mkfullwitdh.lua:7 +msgid "" +"Shows how to use the unicode include to iterate over characters and a lookup " +"table to convert those characters to something else." +msgstr "" + #: ../automation/autoload/macro-2-mkfullwitdh.lua:77 msgid "Make fullwidth" msgstr "" diff --git a/po/ar.po b/po/ar.po index 7224182e02..fecd6a0c07 100644 --- a/po/ar.po +++ b/po/ar.po @@ -3544,8 +3544,8 @@ msgid "Margin offset" msgstr "هوامش الإزاحة" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "س" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4728,15 +4728,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "دقة الفيديو المحمّل ودقة الترجمات لا تتطابق.\n" "\n" -"دقة الفيديو:\t%d x %d\n" -"دقة السكرِبت:\t%d x %d\n" +"دقة الفيديو:\t%d × %d\n" +"دقة السكرِبت:\t%d × %d\n" "\n" "تغيير دقة الترجمات لتطابق الفيديو؟" diff --git a/po/be.po b/po/be.po index 454859221f..90c5650fc8 100644 --- a/po/be.po +++ b/po/be.po @@ -3609,8 +3609,8 @@ msgid "Margin offset" msgstr "Змяшчэнне межаў" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4801,15 +4801,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Разрозненне загружанага відэа і разрозненне субтытраў не супадаюць.\n" "\n" -"Разрозненне відэа:\t%d x %d\n" -"Разрозненне субтытраў :\t%d x %d\n" +"Разрозненне відэа:\t%d × %d\n" +"Разрозненне субтытраў :\t%d × %d\n" "\n" "Змяніць разрозненне субтытраў на разрозненне відэа?" diff --git a/po/bg.po b/po/bg.po index 1a1e5d8b47..07c385c78f 100644 --- a/po/bg.po +++ b/po/bg.po @@ -3596,8 +3596,8 @@ msgid "Margin offset" msgstr "Преместване на границите на работната област" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4782,15 +4782,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Резолюцията на зареденото видео не съвпада с резолюцията на скрипта.\n" "\n" -"Резолюция на видеото:\t%d x %d\n" -"Резолюция на скрипта:\t%d x %d\n" +"Резолюция на видеото:\t%d × %d\n" +"Резолюция на скрипта:\t%d × %d\n" "\n" "Да променя ли резолюцията на субтитрите като резолюцията на видеото?" diff --git a/po/ca.po b/po/ca.po index bad3e033a4..3cb3cb5609 100644 --- a/po/ca.po +++ b/po/ca.po @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-02 21:53+0100\n" -"PO-Revision-Date: 2025-02-15 22:57+0100\n" +"PO-Revision-Date: 2025-10-14 18:52+0000\n" "Last-Translator: Eduard Ereza Martínez \n" "Language-Team: \n" "Language: ca\n" @@ -17,7 +17,7 @@ msgstr "" #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" -msgstr "" +msgstr "Detecta automàticament la direcció base (només libass)" #: ../src/ass_style.cpp:197 msgid "ANSI" @@ -253,7 +253,7 @@ msgstr "Visualització del &vídeo i els subtítols" #: ../src/command/app.cpp:124 msgid "Video+Subs View" -msgstr "Visualització dels vídeo i els subtítols" +msgstr "Visualització del vídeo i els subtítols" #: ../src/command/app.cpp:125 msgid "Display video and the subtitles grid only" @@ -690,8 +690,8 @@ msgid "" "Open automation manager. Ctrl: Rescan autoload folder. Ctrl+Shift: Rescan " "autoload folder and reload all automation scripts" msgstr "" -"Obre el gestor de l’automatització. Control: Torna a escanejar la carpeta de " -"càrrega automàtica. Control+Maj: Torna a escanejar la carpeta de càrrega " +"Obre el gestor de l’automatització. Ctrl: Torna a escanejar la carpeta de " +"càrrega automàtica. Ctrl+Maj: Torna a escanejar la carpeta de càrrega " "automàtica i recarrega tots els scripts d’automatització" #: ../src/command/command.cpp:35 @@ -1140,7 +1140,7 @@ msgstr "Esborra el text de la línia actual" #: ../src/command/edit.cpp:1230 ../src/command/edit.cpp:1249 msgid "clear line" -msgstr "l’esborrat de la línia" +msgstr "l’esborrament de la línia" #: ../src/command/edit.cpp:1237 ../src/command/edit.cpp:1238 msgid "Clear Text" @@ -1619,15 +1619,15 @@ msgstr "" #: ../src/command/subtitle.cpp:238 msgid "&New Subtitles" -msgstr "&Nous subtítols" +msgstr "Subtítols &nous" #: ../src/command/subtitle.cpp:239 msgid "New Subtitles" -msgstr "Nous subtítols" +msgstr "Subtítols nous" #: ../src/command/subtitle.cpp:240 msgid "New subtitles" -msgstr "Nous subtítols" +msgstr "Subtítols nous" #: ../src/command/subtitle.cpp:255 ../src/command/subtitle.cpp:256 #: ../src/command/subtitle.cpp:257 ../src/dialog_progress.cpp:175 @@ -2085,7 +2085,6 @@ msgid "Preview changes" msgstr "Previsualitza els canvis" #: ../src/command/tool.cpp:140 ../src/command/tool.cpp:224 -#, fuzzy msgid "Commit changes and stay on the current line" msgstr "Aplica els canvis i roman a la línia actual" @@ -2345,13 +2344,15 @@ msgstr "" #: ../src/command/video.cpp:321 ../src/command/video.cpp:322 msgid "Copy image to Clipboard (only subtitles)" -msgstr "" +msgstr "Copia la imatge al porta-retalls (només els subtítols)" #: ../src/command/video.cpp:323 msgid "" "Copy the currently displayed subtitles to the clipboard, with transparent " "background" msgstr "" +"Copia els subtítols que es mostren actualment al porta-retalls, amb un fons " +"transparent" #: ../src/command/video.cpp:332 ../src/command/video.cpp:333 msgid "Next Frame" @@ -2436,13 +2437,15 @@ msgstr "" #: ../src/command/video.cpp:534 ../src/command/video.cpp:535 msgid "Save PNG snapshot (only subtitles)" -msgstr "" +msgstr "Desa una captura PNG (només els subtítols)" #: ../src/command/video.cpp:536 msgid "" "Save the currently displayed subtitles with transparent background to a PNG " "file in the video's directory" msgstr "" +"Desa els subtítols que es mostren actualment amb un fons transparent en un " +"fitxer PNG al directori del vídeo" #: ../src/command/video.cpp:546 msgid "&Jump to..." @@ -3203,7 +3206,7 @@ msgstr "Estàndard de visualització" #: ../src/dialog_fonts_collector.cpp:101 #, c-format msgid "* An error occurred when enumerating the used fonts: %s.\n" -msgstr "" +msgstr "* S’ha produït un error en enumerar les fonts utilitzades: %s.\n" #: ../src/dialog_fonts_collector.cpp:115 msgid "Symlinking fonts to folder...\n" @@ -3637,8 +3640,8 @@ msgid "Margin offset" msgstr "Compensació del marge" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4009,7 +4012,7 @@ msgstr "L’Aegisub no ha trobat cap errada ortogràfica en aquest script." #: ../src/dialog_spellchecker.cpp:329 ../src/dialog_spellchecker.cpp:343 msgid "spell check replace" -msgstr "la substitució del correcció ortogràfic" +msgstr "la substitució del corrector ortogràfic" #: ../src/dialog_style_editor.cpp:127 msgid "Style Editor" @@ -4061,7 +4064,7 @@ msgstr "Alineació" #: ../src/dialog_style_editor.cpp:208 msgid "&Opaque box" -msgstr "Capsa &opaca" +msgstr "Caixa &opaca" #: ../src/dialog_style_editor.cpp:216 msgid "Style name" @@ -4101,14 +4104,14 @@ msgstr "Distància fins a la vora dreta, en píxels" #: ../src/dialog_style_editor.cpp:225 msgid "Distance from top/bottom edge, in pixels" -msgstr "Distància fins la vora superior/inferior, en píxels" +msgstr "Distància fins a la vora superior/inferior, en píxels" #: ../src/dialog_style_editor.cpp:226 msgid "" "When selected, display an opaque box behind the subtitles instead of an " "outline around the text" msgstr "" -"Quan estigui seleccionat, es mostrarà una capsa opaca darrere dels subtítols " +"Quan estigui seleccionat, es mostrarà una caixa opaca darrere dels subtítols " "en lloc d’un contorn al voltant del text" #: ../src/dialog_style_editor.cpp:227 @@ -4572,7 +4575,8 @@ msgid "" "Enable snapping of subtitles together if they are within a certain distance " "of each other" msgstr "" -"Activa que els subtítols si estan a una certa distància l’un de l’altre" +"Activa que els subtítols s’ajustin si estan a una certa distància l’un de " +"l’altre" #: ../src/dialog_timing_processor.cpp:195 msgid "Max gap:" @@ -4588,14 +4592,14 @@ msgstr "" #: ../src/dialog_timing_processor.cpp:197 msgid "Max overlap:" -msgstr "Sobreposició màxima:" +msgstr "Encavalcament màxim:" #: ../src/dialog_timing_processor.cpp:198 msgid "" "Maximum overlap between the end and start time for two subtitles to be made " "continuous, in milliseconds" msgstr "" -"Sobreposició màxima entre el temps de final i d’inici de dos subtítols " +"Encavalcament màxim entre el temps de final i d’inici de dos subtítols " "perquè es facin continus, en mil·lisegons" #: ../src/dialog_timing_processor.cpp:201 @@ -4741,7 +4745,7 @@ msgstr "Recorda-m’ho d’aquí a una &setmana" #: ../src/dialog_version_check.cpp:295 msgid "Curl could not be initialized." -msgstr "No s’ha pogut initialitzar el Curl." +msgstr "No s’ha pogut inicialitzar el Curl." #: ../src/dialog_version_check.cpp:317 #, c-format @@ -4827,16 +4831,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "La resolució del vídeo carregat i la resolució especificada als subtítols no " "coincideixen.\n" "\n" -"Resolució del vídeo: %d x %d\n" -"Resolució de l’script: %d x %d\n" +"Resolució del vídeo: %d × %d\n" +"Resolució de l’script: %d × %d\n" "\n" "Voleu canviar la resolució dels subtítols perquè coincideixi amb la del " "vídeo?" @@ -4875,7 +4879,7 @@ msgid "" "Default." msgstr "" "Arregla els estils substituint qualsevol estil que no estigui disponible al " -"fitxer per Default." +"fitxer per «Default»." #: ../src/export_framerate.cpp:52 msgid "Transform Framerate" @@ -4891,8 +4895,8 @@ msgid "" "It can also be used to convert subtitles to a different speed video, such as " "NTSC to PAL speedup." msgstr "" -"Transforma els temps dels subtítols, incloent els de les etiquetes d’estils, " -"d’una taxa de fotogrames a una altra.\n" +"Transforma els temps dels subtítols, incloent-hi els de les etiquetes d’" +"estils, d’una taxa de fotogrames a una altra.\n" "\n" "Això serveix si convertiu uns subtítols per temps normals a subtítols per " "temps VFRaC per a incrustar-los al vídeo.\n" @@ -5174,7 +5178,7 @@ msgstr "Mostra la barra d’eines principal" #: ../src/preferences.cpp:68 msgid "Save UI state in subtitles files" -msgstr "Desa l’estat de la IU als fitxers de subtítols" +msgstr "Desa l’estat de la interfície d’usuari als fitxers de subtítols" #: ../src/preferences.cpp:71 msgid "Toolbar Icon Size" @@ -5230,7 +5234,7 @@ msgstr "" #: ../src/preferences.cpp:116 msgid "New files" -msgstr "Nous fitxers" +msgstr "Fitxers nous" #: ../src/preferences.cpp:117 msgid "MicroDVD import" @@ -5322,7 +5326,7 @@ msgstr "Mostra les línies inactives" #: ../src/preferences.cpp:148 msgid "Include commented inactive lines" -msgstr "Inclou les les línies inactives comentades" +msgstr "Inclou les línies inactives comentades" #: ../src/preferences.cpp:150 msgid "Display Visual Options" @@ -5418,7 +5422,7 @@ msgstr "Interfície" #: ../src/preferences.cpp:208 msgid "Edit Box" -msgstr "Capsa d’edició" +msgstr "Caixa d’edició" #: ../src/preferences.cpp:209 msgid "Enable call tips" @@ -5430,7 +5434,7 @@ msgstr "Sobreescriptura a les capses de temps" #: ../src/preferences.cpp:211 msgid "Shift+Enter adds \\n" -msgstr "" +msgstr "Maj+Retorn afegeix \\n" #: ../src/preferences.cpp:212 msgid "Enable syntax highlighting" @@ -5526,19 +5530,19 @@ msgstr "Comentaris" #: ../src/preferences.cpp:257 msgid "Drawing Commands" -msgstr "" +msgstr "Ordres de dibuix" #: ../src/preferences.cpp:258 msgid "Drawing X Coords" -msgstr "" +msgstr "Coordenades X del dibuix" #: ../src/preferences.cpp:259 msgid "Drawing Y Coords" -msgstr "" +msgstr "Coordenades Y del dibuix" #: ../src/preferences.cpp:260 msgid "Underline Spline Endpoints" -msgstr "" +msgstr "Subratlla els extrems dels splines" #: ../src/preferences.cpp:262 msgid "Brackets" @@ -5666,7 +5670,7 @@ msgstr "Alfa de les eines de definició d’estils visuals" #: ../src/preferences.cpp:304 msgid "Shaded Area" -msgstr "Àrea d’ombrejat" +msgstr "Àrea d’ombreig" #: ../src/preferences.cpp:313 msgid "Backup" @@ -5827,7 +5831,7 @@ msgstr "Comprimit" #: ../src/preferences.cpp:393 msgid "Extended" -msgstr "Extès" +msgstr "Estès" #: ../src/preferences.cpp:393 msgid "Linear" @@ -6035,7 +6039,7 @@ msgstr "" #: ../src/resolution_resampler.cpp:288 msgid "resolution resampling" -msgstr "el reajust de resolució" +msgstr "el reajustament de resolució" #: ../src/search_replace_engine.cpp:189 ../src/search_replace_engine.cpp:273 msgid "replace" @@ -6273,7 +6277,7 @@ msgstr "15,000 FPS" #: ../src/subtitle_format.cpp:111 msgid "23.976 FPS (Decimated NTSC)" -msgstr "23,976 FPS (NTSC decimat)" +msgstr "23,976 FPS (NTSC amb reducció de camps)" #: ../src/subtitle_format.cpp:112 msgid "24.000 FPS (FILM)" @@ -6487,7 +6491,7 @@ msgstr "Exporta com a..." #: default_hotkey.json:244: msgid "Subtitle Edit Box" -msgstr "Capsa d’edició dels subtítols" +msgstr "Caixa d’edició dels subtítols" #: ../automation/autoload/cleantags-autoload.lua:31 msgid "Clean Tags" @@ -6568,11 +6572,13 @@ msgstr "Converteix les lletres llatines a lletres SJIS d’amplada completa" #: ../automation/autoload/select-overlaps.moon:17 msgid "Select overlaps" -msgstr "" +msgstr "Selecciona els encavalcaments" #: ../automation/autoload/select-overlaps.moon:18 msgid "Select lines which begin while another non-comment line is active" msgstr "" +"Selecciona les línies que comencin mentre una altra línia que no sigui un " +"comentari estigui activa" #: ../automation/autoload/strip-tags.lua:17 msgid "Strip tags" @@ -6605,7 +6611,7 @@ msgstr "subtítols;subtítol;subtitulació;subtitular;vídeo;àudio;" #: ../packages/desktop/aegisub.metainfo.xml.in.in:7 msgid "Create and modify subtitles" -msgstr "" +msgstr "Creeu i modifiqueu subtítols" #: ../packages/desktop/aegisub.metainfo.xml.in.in:9 msgid "" @@ -6634,7 +6640,7 @@ msgstr "" "començar el projecte, molts altres programes que admetien el format Advanced " "Substation Alpha no tenien (i en molts casos, encara és així: el " "desenvolupament de diversos programes competidors s’ha aturat per motius " -"diversos i gens relacionts amb l’Aegisub) moltes funcions vitals, tenien " +"diversos i gens relacionats amb l’Aegisub) moltes funcions vitals, tenien " "massa errors o no eren prou fiables per a ser útils." #: ../packages/desktop/aegisub.metainfo.xml.in.in:11 @@ -6720,19 +6726,9 @@ msgid "" "no warranties of any kind are given either.%n%nSee the Aegisub website for " "information on obtaining the source code." msgstr "" -"S’instal·larà l’Aegisub {#BUILD_GIT_VERSION_STRING} al vostre ordinador." -"%n%nL’Aegisub està cobert per la Llicència Pública General de GNU versió 2. " -"Això vol dir que podeu utilitzar l’aplicació per a qualsevol propòsit sense " -"càrrecs, però també que no es proporciona cap tipus de garantia.%n%nVegeu el " -"lloc web de l’Aegisub per a obtenir informació sobre com obtenir-ne el codi " -"font." - -#~ msgid "Drawings" -#~ msgstr "Dibuixos" - -#~ msgid "" -#~ "A free, cross-platform open source tool for creating and modifying " -#~ "subtitles" -#~ msgstr "" -#~ "Una eina gratuïta, de codi lliure i multiplataforma per a crear i " -#~ "modificar subtítols" +"S’instal·larà l’Aegisub {#BUILD_GIT_VERSION_STRING} al vostre " +"ordinador.%n%nL’Aegisub està cobert per la Llicència Pública General de GNU " +"versió 2. Això vol dir que podeu utilitzar l’aplicació per a qualsevol " +"propòsit sense càrrecs, però també que no es proporciona cap mena de " +"garantia.%n%nVegeu el lloc web de l’Aegisub per a obtenir informació sobre " +"com obtenir-ne el codi font." diff --git a/po/cs.po b/po/cs.po index 5c88d4ecdf..7e608f0b7a 100644 --- a/po/cs.po +++ b/po/cs.po @@ -3565,8 +3565,8 @@ msgid "Margin offset" msgstr "Offset okraje" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4757,15 +4757,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Rozlišení načteného videa neodpovídá zvolenému rozlišení titulků.\n" "\n" -"Rozlišení videa:\t%d x %d\n" -"Rozlišení skriptu:\t%d x %d\n" +"Rozlišení videa:\t%d × %d\n" +"Rozlišení skriptu:\t%d × %d\n" "\n" "Přejete si změnit rozlišení titulků, aby odpovídalo videu?" diff --git a/po/da.po b/po/da.po index d40c03bc14..083bc14d20 100644 --- a/po/da.po +++ b/po/da.po @@ -3537,7 +3537,7 @@ msgid "Margin offset" msgstr "Margin" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" +msgid "×" msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 @@ -4712,16 +4712,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Opløsningen på den indlæste video og underteksternes opløsning stemmer ikke " "overens.\n" "\n" -"Video opløsning:\t%d x %d\n" -"Undertekstopløsning:\t%d x %d\n" +"Video opløsning:\t%d × %d\n" +"Undertekstopløsning:\t%d × %d\n" "\n" "Vil du ændre underteksternes opløsning til at stemme med videoen?" diff --git a/po/de.po b/po/de.po index 016183ea6e..4c98b8e2ae 100644 --- a/po/de.po +++ b/po/de.po @@ -3617,8 +3617,8 @@ msgid "Margin offset" msgstr "Ränderversatz" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4807,16 +4807,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Die Auflösung des geladenen Videos und die im Skript angegebene " "Untertitelauflösung stimmen nicht überein.\n" "\n" -"Videoauflösung:\t%d x %d\n" -"Untertitelauflösung:\t%d x %d\n" +"Videoauflösung:\t%d × %d\n" +"Untertitelauflösung:\t%d × %d\n" "\n" "Untertitel-Auflösung anpassen, sodaß sie zum Video passt?" diff --git a/po/el.po b/po/el.po index c4f63036a2..a05112e5a2 100644 --- a/po/el.po +++ b/po/el.po @@ -3648,8 +3648,8 @@ msgid "Margin offset" msgstr "Offset περιθωρίου" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4844,16 +4844,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Η ανάλυση του φορτωμένου βίντεο και η ανάλυση που έχει καθοριστεί για τους " "υπότιτλους δεν ταιριάζουν.\n" "\n" -"Ανάλυση του βίντεο:\t%d x %d\n" -"Ανάλυση του script:\t%d x %d\n" +"Ανάλυση του βίντεο:\t%d × %d\n" +"Ανάλυση του script:\t%d × %d\n" "\n" "Επιθυμείτε αλλαγή της ανάλυσης των υποτίτλων σε αυτήν του βίντεο;" diff --git a/po/es.po b/po/es.po index 7b5b0557aa..9b43cbe3cd 100644 --- a/po/es.po +++ b/po/es.po @@ -3651,8 +3651,8 @@ msgid "Margin offset" msgstr "Desplazamiento de margen" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4844,16 +4844,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "La resolución del video cargado y la resolución especificada para los " "subtítulos no coinciden.\n" "\n" -"Resolución del video:\t%d x %d\n" -"Resolución de la secuencia:\t%d x %d\n" +"Resolución del video:\t%d × %d\n" +"Resolución de la secuencia:\t%d × %d\n" "\n" "¿Cambiar la resolución de los subtítulos para coincidir con la del video?" diff --git a/po/eu.po b/po/eu.po index cc6f61c90c..9a0b40e6b3 100644 --- a/po/eu.po +++ b/po/eu.po @@ -3608,8 +3608,8 @@ msgid "Margin offset" msgstr "Bazter oreka" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4797,16 +4797,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Gertaturiko bideoaren eta adierazitako azpidatziaren bereizmena ez datoz " "bat.\n" "\n" -"Bideo bereizmena:\t%d x %d\n" -"Eskript bereizmena:\t%d x %d\n" +"Bideo bereizmena:\t%d × %d\n" +"Eskript bereizmena:\t%d × %d\n" "\n" "Aldatu azpidatziaren bereizmena bideoarenera?" diff --git a/po/fa.po b/po/fa.po index 551edd344d..89f14242d2 100644 --- a/po/fa.po +++ b/po/fa.po @@ -3521,8 +3521,8 @@ msgid "Margin offset" msgstr "جایجایی حاشیه" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4685,15 +4685,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "ابعاد تصویر ویدیو با ابعادی که شما مشخص کرده اید همخوانی ندارد\n" "\n" -"ابعاد ویدیو :\t%d x %d\n" -"ابعاد اسکرییپت :\t%d x %d\n" +"ابعاد ویدیو :\t%d × %d\n" +"ابعاد اسکرییپت :\t%d × %d\n" "\n" "آیا مایلید که ابعاد زیرنویس به تناسب ویدیو تغییر کند؟ " diff --git a/po/fi.po b/po/fi.po index f8661186ad..41cc351222 100644 --- a/po/fi.po +++ b/po/fi.po @@ -3627,7 +3627,7 @@ msgid "Margin offset" msgstr "Reunuksen siirtymä" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" +msgid "×" msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 @@ -4844,8 +4844,8 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" diff --git a/po/fr_FR.po b/po/fr_FR.po index 281efaddd4..82f4db7515 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -3641,8 +3641,8 @@ msgid "Margin offset" msgstr "Décalage marge" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4828,15 +4828,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "La définition de la vidéo chargée et des sous-titres ne correspondent pas.\n" "\n" -"Définition vidéo : \t%d x %d\n" -"Définition script : \t%d x %d\n" +"Définition vidéo : \t%d × %d\n" +"Définition script : \t%d × %d\n" "\n" "Changer la définition des sous-titres pour correspondre à la vidéo ?" diff --git a/po/gl.po b/po/gl.po index 9bb085afe2..ab3e47d594 100644 --- a/po/gl.po +++ b/po/gl.po @@ -3574,8 +3574,8 @@ msgid "Margin offset" msgstr "Desprazamento de marxe" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4764,15 +4764,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "A resolución do vídeo cargado e a resolución especificada para os subtítulos " "non coinciden.\n" -"Resolución do vídeo:\t%d x %d\n" -"Resolución do documento:\t%d x %d\n" +"Resolución do vídeo:\t%d × %d\n" +"Resolución do documento:\t%d × %d\n" "\n" "Cambiar a resolución dos subtítulos para coincidir coa do vídeo?" diff --git a/po/hu.po b/po/hu.po index 492d670b0b..27d2ad59f4 100644 --- a/po/hu.po +++ b/po/hu.po @@ -3591,8 +3591,8 @@ msgid "Margin offset" msgstr "Margó eltolás" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4772,15 +4772,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "A felirat- és a videofájl felbontása nem egyezik.\n" "\n" -"Videó felbontása: \t%d x %d\n" -"Felirat felbontása: \t%d x %d\n" +"Videó felbontása: \t%d × %d\n" +"Felirat felbontása: \t%d × %d\n" "\n" "Megváltoztatja a felirat felbontását, hogy az egyezzen a videóval?" diff --git a/po/id.po b/po/id.po index cffea55097..9f7c3f1848 100644 --- a/po/id.po +++ b/po/id.po @@ -3592,8 +3592,8 @@ msgid "Margin offset" msgstr "Imbangi penjajaran" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4775,15 +4775,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Resolusi video dan resolusi dari takarir tidak cocok.\n" "\n" -"Resolusi Video: \t%d x %d\n" -"Resolusi Skrip: \t%d x %d\n" +"Resolusi Video: \t%d × %d\n" +"Resolusi Skrip: \t%d × %d\n" "\n" "Ubah resolusi skrip sesuai dengan resolusi video?" diff --git a/po/it.po b/po/it.po index f66c75d331..bafe47b1f2 100644 --- a/po/it.po +++ b/po/it.po @@ -3573,8 +3573,8 @@ msgid "Margin offset" msgstr "Margine offset" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4762,16 +4762,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "La risoluzione del video caricato e la risoluzione specificata per i " "sottotitoli non corrispondono.\n" "\n" -"Risoluzione video:\t%d x%d\n" -"Risoluzione script:\t%d x%d\n" +"Risoluzione video:\t%d × %d\n" +"Risoluzione script:\t%d × %d\n" "\n" "Eguagliare la risoluzione dei sottotitoli a quella del video?" diff --git a/po/ja.po b/po/ja.po index 19589bdb4b..9871d5e502 100644 --- a/po/ja.po +++ b/po/ja.po @@ -3533,8 +3533,8 @@ msgid "Margin offset" msgstr "余白の設定" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4707,15 +4707,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "読み込まれた動画の解像度と字幕ファイルに記述された解像度が違います\n" "\n" -"動画ファイルから取得された解像度 :\t%d x %d\n" -"字幕ファイルに記述されてる解像度 :\t%d x %d\n" +"動画ファイルから取得された解像度 :\t%d × %d\n" +"字幕ファイルに記述されてる解像度 :\t%d × %d\n" "\n" "字幕ファイルの解像度を、動画ファイルから取得された解像度に置き換えますか?" diff --git a/po/ko.po b/po/ko.po index ee8f052d45..37ef776b3b 100644 --- a/po/ko.po +++ b/po/ko.po @@ -3524,8 +3524,8 @@ msgid "Margin offset" msgstr "여백 설정" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4686,15 +4686,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "지정된 자막과 로드된 비디오의 해상도가 일치 하지 않습니다.\n" "\n" -"비디오 해상도:\t%d x %d\n" -"스크립트 해상도::\t%d x %d\n" +"비디오 해상도:\t%d × %d\n" +"스크립트 해상도::\t%d × %d\n" "\n" "비디오에 맞게 자막 해상도 바꾸시겠습니까?" diff --git a/po/make_pot.sh b/po/make_pot.sh index e3169abc06..f9eb8b0442 100755 --- a/po/make_pot.sh +++ b/po/make_pot.sh @@ -16,7 +16,7 @@ maybe_append() { find ../src ../src/command -name '*.cpp' -o -name '*.h' \ | xgettext --files-from=- -o - --c++ --sort-by-file \ - -k_ -kSTR_MENU -kSTR_DISP -kSTR_HELP -kCOMMAND_GROUP:5 \ + -k_ -kwxTRANSLATE -kSTR_MENU -kSTR_DISP -kSTR_HELP -kCOMMAND_GROUP:5 \ -kfmt_tl -kfmt_plural:2,3 \ | sed 's/SOME DESCRIPTIVE TITLE./Aegisub 3.2/' \ | sed 's/YEAR/2005-2014/' \ diff --git a/po/nl.po b/po/nl.po index 47fd14c038..543c804c32 100644 --- a/po/nl.po +++ b/po/nl.po @@ -3588,8 +3588,8 @@ msgid "Margin offset" msgstr "Marge-offset" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4783,16 +4783,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "De resolutie van de geladen video en de resolutie opgegeven voor de " "ondertitels komen niet overeen.\n" "\n" -"Videoresolutie:\t%d x %d\n" -"Scriptresolutie:\t%d x %d\n" +"Videoresolutie:\t%d × %d\n" +"Scriptresolutie:\t%d × %d\n" "\n" "Resolutie van ondertitels aanpassen zodat ze overeenkomt met die van de " "video?" diff --git a/po/pl.po b/po/pl.po index 120e643cd0..7feb672b13 100644 --- a/po/pl.po +++ b/po/pl.po @@ -3528,8 +3528,8 @@ msgid "Margin offset" msgstr "Wyrównanie marginesu" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4696,15 +4696,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Wczytane wideo ma inną rozdzielczość niż ta podana we właściwościach pliku.\n" "\n" -"Rozdzielczość wideo:\t%d x %d\n" -"Rozdzielczość skryptu:\t%d x %d\n" +"Rozdzielczość wideo:\t%d × %d\n" +"Rozdzielczość skryptu:\t%d × %d\n" "\n" "Czy chcesz zmienić rozdzielczość we właściwościach na tą z wideo?" diff --git a/po/pt_BR.po b/po/pt_BR.po index 1ecdf494f7..cb1053c8d1 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Aegisub 3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-02 21:53+0100\n" -"PO-Revision-Date: 2024-12-25 20:26-0300\n" +"PO-Revision-Date: 2025-06-26 12:46-0300\n" "Last-Translator: witchymary \n" "Language-Team: Rodrigo Braz Monteiro, witchymary, Tenebris Magi\n" "Language: pt_BR\n" @@ -12,11 +12,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.6\n" #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" -msgstr "" +msgstr "Detectar a direção automaticamente (libass apenas)" #: ../src/ass_style.cpp:197 msgid "ANSI" @@ -355,27 +355,27 @@ msgstr "Verifique se existe uma nova versão do Aegisub disponível" #: ../src/command/app.cpp:270 ../src/command/app.cpp:271 msgid "Minimize" -msgstr "" +msgstr "Minimizar" #: ../src/command/app.cpp:272 msgid "Minimize the active window" -msgstr "" +msgstr "Minimiza a janela ativa" #: ../src/command/app.cpp:281 ../src/command/app.cpp:282 msgid "Zoom" -msgstr "" +msgstr "Zoom" #: ../src/command/app.cpp:283 msgid "Maximize the active window" -msgstr "" +msgstr "Maximiza a janela ativa" #: ../src/command/app.cpp:292 ../src/command/app.cpp:293 msgid "Bring All to Front" -msgstr "" +msgstr "Trazer Todos para Frente" #: ../src/command/app.cpp:294 msgid "Bring forward all open documents to the front" -msgstr "" +msgstr "Traz todos os documentos abertos para frente" #: ../src/command/audio.cpp:65 msgid "&Close Audio" @@ -453,11 +453,11 @@ msgstr "Exibe áudio como um espectrógrafo de frequência-potência" #: ../src/command/audio.cpp:148 msgid "&Waveform Display" -msgstr "Forma de &Onda" +msgstr "&Onda" #: ../src/command/audio.cpp:149 msgid "Waveform Display" -msgstr "Forma de Onda" +msgstr "Onda" #: ../src/command/audio.cpp:150 msgid "Display audio as a linear amplitude graph" @@ -1316,7 +1316,7 @@ msgstr "Alternar o Modo de Exibição de Tags" #: ../src/command/grid.cpp:255 msgid "Cycle through tag hiding modes" -msgstr "Alterne entre os modos de exibição de tags" +msgstr "Alterna entre os modos de exibição de tags" #: ../src/command/grid.cpp:265 msgid "ASS Override Tag mode set to show full tags." @@ -1812,7 +1812,7 @@ msgstr "deslocar ao quadro" #: ../src/command/time.cpp:153 msgid "S&hift Times..." -msgstr "Deslocar &Sincronização..." +msgstr "Ajustar &Sincronização..." #: ../src/command/time.cpp:154 ../src/dialog_shift_times.cpp:134 msgid "Shift Times" @@ -2025,11 +2025,11 @@ msgstr "Seleciona linhas baseado no critério definido" #: ../src/command/tool.cpp:93 msgid "&Resample Resolution..." -msgstr "&Redimensionar a Resolução..." +msgstr "&Redimensionar Resolução..." #: ../src/command/tool.cpp:94 ../src/dialog_resample.cpp:90 msgid "Resample Resolution" -msgstr "Redimensionar a Resolução" +msgstr "Redimensionar Resolução" #: ../src/command/tool.cpp:95 msgid "" @@ -2333,13 +2333,15 @@ msgstr "" #: ../src/command/video.cpp:321 ../src/command/video.cpp:322 msgid "Copy image to Clipboard (only subtitles)" -msgstr "" +msgstr "Copiar imagem para a Área de Transferência (apenas legendas)" #: ../src/command/video.cpp:323 msgid "" "Copy the currently displayed subtitles to the clipboard, with transparent " "background" msgstr "" +"Copia as legendas exibidas atualmente para a área de transferência, com um " +"fundo transparente" #: ../src/command/video.cpp:332 ../src/command/video.cpp:333 msgid "Next Frame" @@ -2423,13 +2425,15 @@ msgstr "" #: ../src/command/video.cpp:534 ../src/command/video.cpp:535 msgid "Save PNG snapshot (only subtitles)" -msgstr "" +msgstr "Salvar imagem em PNG (apenas legendas)" #: ../src/command/video.cpp:536 msgid "" "Save the currently displayed subtitles with transparent background to a PNG " "file in the video's directory" msgstr "" +"Copia as legendas exibidas atualmente para um arquivo PNG no diretório do " +"vídeo, com um fundo transparente" #: ../src/command/video.cpp:546 msgid "&Jump to..." @@ -3192,7 +3196,7 @@ msgstr "Padrão de tela" #: ../src/dialog_fonts_collector.cpp:101 #, c-format msgid "* An error occurred when enumerating the used fonts: %s.\n" -msgstr "" +msgstr "* Ocorreu um erro ao enumerar as fontes utilizadas: %s.\n" #: ../src/dialog_fonts_collector.cpp:115 msgid "Symlinking fonts to folder...\n" @@ -3631,8 +3635,8 @@ msgid "Margin offset" msgstr "Deslocamento de margens" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -3875,7 +3879,7 @@ msgstr "&Tempo: " #: ../src/dialog_shift_times.cpp:144 msgid "Shift by time" -msgstr "Deslocar por tempo" +msgstr "Ajustar por tempo" #: ../src/dialog_shift_times.cpp:147 msgid "&Frames: " @@ -3883,7 +3887,7 @@ msgstr "&Quadros: " #: ../src/dialog_shift_times.cpp:148 msgid "Shift by frames" -msgstr "Deslocar por quadros" +msgstr "Ajustar por quadros" #: ../src/dialog_shift_times.cpp:152 msgid "Enter time in h:mm:ss.cs notation" @@ -3891,11 +3895,11 @@ msgstr "Insira tempo em formato h:mm:ss.cs" #: ../src/dialog_shift_times.cpp:155 msgid "Enter number of frames to shift by" -msgstr "Insira a quantidade de quadros pelo qual deslocar" +msgstr "Insira a quantidade de quadros pelo qual ajustar" #: ../src/dialog_shift_times.cpp:157 msgid "For&ward" -msgstr "Para &Frente" +msgstr "&Avançar" #: ../src/dialog_shift_times.cpp:158 msgid "" @@ -3907,7 +3911,7 @@ msgstr "" #: ../src/dialog_shift_times.cpp:160 msgid "&Backward" -msgstr "Para &Trás" +msgstr "&Retroceder" #: ../src/dialog_shift_times.cpp:161 msgid "" @@ -4735,12 +4739,12 @@ msgstr "Lembre-me novamente em uma &semana" #: ../src/dialog_version_check.cpp:295 msgid "Curl could not be initialized." -msgstr "" +msgstr "Não foi possível inicializar o Curl." #: ../src/dialog_version_check.cpp:317 #, c-format msgid "Checking for updates failed: %s." -msgstr "" +msgstr "A verificação de atualizações falhou: %s." #: ../src/dialog_version_check.cpp:345 msgid "An update to Aegisub was found." @@ -4820,15 +4824,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "A resolução do vídeo e a das legendas não coincidem.\n" "\n" -"Resolução do vídeo:\t%d x %d\n" -"Resolução do script:\t%d x %d\n" +"Resolução do vídeo:\t%d × %d\n" +"Resolução do script:\t%d × %d\n" "\n" "Deseja ajustar a resolução das legendas para coincidir com a do vídeo?" @@ -4951,7 +4955,7 @@ msgstr "Estilo '%s' não existe\n" #: ../src/font_file_lister.cpp:154 #, c-format msgid "Font '%s' is used in a drawing, but not in any text.\n" -msgstr "" +msgstr "Fonte '%s' é utilizada em um desenho, mas não em texto.\n" #: ../src/font_file_lister.cpp:160 #, c-format @@ -4966,7 +4970,7 @@ msgstr "Encontrou '%s' em '%s'\n" #: ../src/font_file_lister.cpp:174 #, c-format msgid "'%s' does not have a bold variant.\n" -msgstr "A fonte '%s' não possui uma variação em negrito.\n" +msgstr "'%s' não possui uma variação em negrito.\n" #: ../src/font_file_lister.cpp:176 #, c-format @@ -5423,7 +5427,7 @@ msgstr "Sobrescrever nas caixas de tempo" #: ../src/preferences.cpp:211 msgid "Shift+Enter adds \\n" -msgstr "" +msgstr "Shift+Enter insere \\n" #: ../src/preferences.cpp:212 msgid "Enable syntax highlighting" @@ -5475,7 +5479,7 @@ msgstr "Símbolo de tags na grade de linhas" #: ../src/preferences.cpp:230 msgid "Skip over whitespace" -msgstr "" +msgstr "Pular espaços em branco" #: ../src/preferences.cpp:245 msgid "Audio Display" @@ -5519,19 +5523,19 @@ msgstr "Comentários" #: ../src/preferences.cpp:257 msgid "Drawing Commands" -msgstr "" +msgstr "Comandos de Desenho" #: ../src/preferences.cpp:258 msgid "Drawing X Coords" -msgstr "" +msgstr "Desenho - Coordenadas X" #: ../src/preferences.cpp:259 msgid "Drawing Y Coords" -msgstr "" +msgstr "Desenho - Coordenadas Y" #: ../src/preferences.cpp:260 msgid "Underline Spline Endpoints" -msgstr "" +msgstr "Sublinhamento Pontos Finais de Spline" #: ../src/preferences.cpp:262 msgid "Brackets" @@ -5575,7 +5579,7 @@ msgstr "Espectro" #: ../src/preferences.cpp:279 msgid "Waveform" -msgstr "Forma de Onda" +msgstr "Onda" #: ../src/preferences.cpp:281 msgid "Subtitle Grid" @@ -5635,31 +5639,31 @@ msgstr "Erro de CPS" #: ../src/preferences.cpp:296 msgid "Visual Typesetting Tools" -msgstr "" +msgstr "Ferramentas de Composição Visual" #: ../src/preferences.cpp:297 msgid "Primary Lines" -msgstr "" +msgstr "Linhas Primárias" #: ../src/preferences.cpp:298 msgid "Secondary Lines" -msgstr "" +msgstr "Linhas Secundárias" #: ../src/preferences.cpp:299 msgid "Primary Highlight" -msgstr "" +msgstr "Destaque Primário" #: ../src/preferences.cpp:300 msgid "Secondary Highlight" -msgstr "" +msgstr "Destaque Secundário" #: ../src/preferences.cpp:303 msgid "Visual Typesetting Tools Alpha" -msgstr "" +msgstr "Ferramentas de Composição Visual - Transparência" #: ../src/preferences.cpp:304 msgid "Shaded Area" -msgstr "" +msgstr "Área de oclusão" #: ../src/preferences.cpp:313 msgid "Backup" @@ -5816,27 +5820,27 @@ msgstr "Qualidade" #: ../src/preferences.cpp:393 msgid "Compressed" -msgstr "" +msgstr "Comprimido" #: ../src/preferences.cpp:393 msgid "Extended" -msgstr "" +msgstr "Extendido" #: ../src/preferences.cpp:393 msgid "Linear" -msgstr "" +msgstr "Linear" #: ../src/preferences.cpp:393 msgid "Logarithmic" -msgstr "" +msgstr "Logarítmico" #: ../src/preferences.cpp:393 msgid "Medium" -msgstr "" +msgstr "Médio" #: ../src/preferences.cpp:395 msgid "Frequency mapping" -msgstr "" +msgstr "Mapeamento da frequência" #: ../src/preferences.cpp:397 msgid "Cache memory max (MB)" @@ -5932,7 +5936,7 @@ msgstr "Restaurar padrões?" #: ../src/preferences.cpp:715 msgid "Preferences" -msgstr "Preferências" +msgstr "Opções" #: ../src/preferences.cpp:743 msgid "&Restore Defaults" @@ -6453,27 +6457,27 @@ msgstr "Organizar Linhas Selecionadas" #: default_menu.json:0 msgid "Window" -msgstr "" +msgstr "Janela" #: default_menu.json:0 msgid "Open..." -msgstr "" +msgstr "Abrir..." #: default_menu.json:0 msgid "Open Recent" -msgstr "" +msgstr "Abrir Recente" #: default_menu.json:0 msgid "Save" -msgstr "" +msgstr "Salvar" #: default_menu.json:0 msgid "Save As..." -msgstr "" +msgstr "Salvar Como..." #: default_menu.json:0 msgid "Export As..." -msgstr "" +msgstr "Exportar Como..." #: default_hotkey.json:244: msgid "Subtitle Edit Box" @@ -6558,11 +6562,12 @@ msgstr "Converte letras em Latim em letras SJIS de largura total" #: ../automation/autoload/select-overlaps.moon:17 msgid "Select overlaps" -msgstr "" +msgstr "Selecionar sobrepostas" #: ../automation/autoload/select-overlaps.moon:18 msgid "Select lines which begin while another non-comment line is active" msgstr "" +"Seleciona as linhas cujos inícios coincidem com linhas não-comentadas ativas" #: ../automation/autoload/strip-tags.lua:17 msgid "Strip tags" @@ -6587,15 +6592,15 @@ msgstr "Editor de Legendas" #: ../packages/desktop/aegisub.desktop.in.in:6 msgid "Create and edit subtitles for film and videos." -msgstr "Cria e modifica legendas para filmes e vídeos." +msgstr "Crie e modifique legendas para filmes e vídeos." #: ../packages/desktop/aegisub.desktop.in.in:12 msgid "subtitles;subtitle;captions;captioning;video;audio;" -msgstr "" +msgstr "legendas;legenda;vídeo;áudio;" #: ../packages/desktop/aegisub.metainfo.xml.in.in:7 msgid "Create and modify subtitles" -msgstr "" +msgstr "Crie e modifique legendas" #: ../packages/desktop/aegisub.metainfo.xml.in.in:9 msgid "" @@ -6604,6 +6609,11 @@ msgid "" "audio, and features many powerful tools for styling them, including a built-" "in real-time video preview." msgstr "" +"O Aegisub é uma ferramenta gratuita, de código aberto e multiplataforma para " +"criar e modificar legendas. Ele facilita e agiliza o processo de " +"sincronização de legendas com áudio, oferecendo diversas ferramentas " +"avançadas de estilização, incluindo uma pré-visualização de vídeo em tempo " +"real integrada." #: ../packages/desktop/aegisub.metainfo.xml.in.in:10 msgid "" @@ -6615,6 +6625,14 @@ msgid "" "unrelated to Aegisub) many vital functions, or were too buggy and/or " "unreliable to be really useful." msgstr "" +"O Aegisub foi criado originalmente como uma ferramenta para tornar o " +"typesetting — especialmente em fansubs de anime — uma experiência menos " +"trabalhosa. Na época em que o projeto começou, muitos outros programas que " +"suportavam o formato Advanced Substation Alpha careciam de diversas funções " +"essenciais (e, em muitos casos, ainda carecem; o desenvolvimento de vários " +"programas concorrentes foi abandonado por motivos totalmente alheios ao " +"Aegisub), ou eram instáveis e com muitos bugs, o que os tornava pouco úteis " +"na prática." #: ../packages/desktop/aegisub.metainfo.xml.in.in:11 msgid "" @@ -6625,46 +6643,53 @@ msgid "" "for creating karaoke effects, Automation can now be used much else, " "including creating macros and various other convenient tools)." msgstr "" +"Desde então, o Aegisub evoluiu para um editor de legendas completo e " +"altamente personalizável. Ele oferece diversas ferramentas práticas para " +"auxiliar na sincronização, composição visual, edição e tradução de legendas, " +"além de um poderoso ambiente de scripts chamado Automação (originalmente " +"criado principalmente para efeitos de karaokê, a Automação agora pode ser " +"usado para muitas outras finalidades, incluindo a criação de macros e " +"diversas ferramentas adicionais)." #: ../packages/desktop/aegisub.metainfo.xml.in.in:12 msgid "Some highlights of Aegisub:" -msgstr "" +msgstr "Alguns destaques do Aegisub:" #: ../packages/desktop/aegisub.metainfo.xml.in.in:14 msgid "Simple and intuitive yet powerful interface for editing subtitles" -msgstr "" +msgstr "Interface simples e intuitiva, mas poderosa, para edição de legendas" #: ../packages/desktop/aegisub.metainfo.xml.in.in:15 msgid "Support for many formats and character sets" -msgstr "" +msgstr "Suporte a diversos formatos e conjuntos de caracteres" #: ../packages/desktop/aegisub.metainfo.xml.in.in:16 msgid "Powerful video mode" -msgstr "" +msgstr "Modo de vídeo avançado" #: ../packages/desktop/aegisub.metainfo.xml.in.in:17 msgid "Visual typesetting tools" -msgstr "" +msgstr "Ferramentas para composição visual" #: ../packages/desktop/aegisub.metainfo.xml.in.in:18 msgid "Intuitive and customizable audio timing mode" -msgstr "" +msgstr "Modo de sincronização de áudio intuitivo e personalizável" #: ../packages/desktop/aegisub.metainfo.xml.in.in:19 msgid "Fully scriptable through the Automation module" -msgstr "" +msgstr "Totalmente programável por meio do módulo de Automação" #: ../packages/desktop/aegisub.metainfo.xml.in.in:43 msgid "Typesetting" -msgstr "" +msgstr "Composição visual" #: ../packages/desktop/aegisub.metainfo.xml.in.in:47 msgid "Audio video" -msgstr "" +msgstr "Áudio vídeo" #: ../packages/desktop/aegisub.metainfo.xml.in.in:51 msgid "Audio timing" -msgstr "" +msgstr "Sincronização de áudio" #: packages/win_installer/fragment_strings.iss:1 msgid "Installing runtime libraries..." diff --git a/po/pt_PT.po b/po/pt_PT.po index 1eebd19593..e1d432f00f 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -3632,8 +3632,8 @@ msgid "Margin offset" msgstr "Deslocamento de margens" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4821,16 +4821,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "A resolução do vídeo carregado e a resolução especificada nas legendas não " "coincidem.\n" "\n" -"Resolução do vídeo:\t%d x %d\n" -"Resolução do documento:\t%d x %d\n" +"Resolução do vídeo:\t%d × %d\n" +"Resolução do documento:\t%d × %d\n" "\n" "Mudar a resolução das legendas para coincidir com o vídeo?" diff --git a/po/ru.po b/po/ru.po index c1c8017ef3..7823e4853f 100644 --- a/po/ru.po +++ b/po/ru.po @@ -3564,8 +3564,8 @@ msgid "Margin offset" msgstr "Cмещение границ рабочей области" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4752,15 +4752,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Разрешение загруженного видео и разрешение скрипта не совпадают.\n" "\n" -"Разрешение видео:\t%d x %d\n" -"Разрешение скрипта:\t%d x %d\n" +"Разрешение видео:\t%d × %d\n" +"Разрешение скрипта:\t%d × %d\n" "\n" "Изменить разрешение субтитров на разрешение видео?" diff --git a/po/sr_RS.po b/po/sr_RS.po index f2fbb93045..be9554b5dc 100644 --- a/po/sr_RS.po +++ b/po/sr_RS.po @@ -3561,7 +3561,7 @@ msgid "Margin offset" msgstr "Маргине" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" +msgid "×" msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 @@ -4740,15 +4740,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Резолуција снимка и резолуција одређена за титл се не поклапају.\n" "\n" -"Видео: \t%d x %d\n" -"Скрипт: \t%d x %d\n" +"Видео: \t%d × %d\n" +"Скрипт: \t%d × %d\n" "\n" "Променити резолуцију титла тако да се поклапа са снимком?" diff --git a/po/sr_RS@latin.po b/po/sr_RS@latin.po index 26da2507ca..ab2d551075 100644 --- a/po/sr_RS@latin.po +++ b/po/sr_RS@latin.po @@ -3561,7 +3561,7 @@ msgid "Margin offset" msgstr "Margine" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" +msgid "×" msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 @@ -4740,15 +4740,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Rezolucija snimka i rezolucija određena za titl se ne poklapaju.\n" "\n" -"Video: \t%d x %d\n" -"Skript: \t%d x %d\n" +"Video: \t%d × %d\n" +"Skript: \t%d × %d\n" "\n" "Promeniti rezoluciju titla tako da se poklapa sa snimkom?" diff --git a/po/tr.po b/po/tr.po index a78076c667..267896f6b3 100644 --- a/po/tr.po +++ b/po/tr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Aegisub [TR]\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-02 21:53+0100\n" -"PO-Revision-Date: 2025-05-19 21:30+0300\n" +"POT-Creation-Date: 2025-12-01 20:46+0100\n" +"PO-Revision-Date: 2025-12-05 15:08+0300\n" "Last-Translator: Kerim Demirkaynak \n" "Language-Team: Türkçe\n" "Language: tr\n" @@ -15,6 +15,14 @@ msgstr "" "X-Generator: Poedit 3.5\n" "X-Loco-Version: 2.6.10; wp-6.5.5\n" +#: ../src/aegisublocale.cpp:113 ../src/command/app.cpp:156 +msgid "Language" +msgstr "Dil" + +#: ../src/aegisublocale.cpp:113 +msgid "Please choose a language:" +msgstr "Lütfen bir dil seçin:" + #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" msgstr "Temel yönü otomatik algıla (sadece libass)" @@ -157,7 +165,76 @@ msgstr "zamanlama" msgid "karaoke timing" msgstr "karaoke zamanlaması" -#: ../src/auto4_base.cpp:454 +#: ../src/auto4_base.cpp:344 +msgid "" +"A script in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" +"Otomasyon otomatik yükleme dizinindeki bir betik yüklenemedi.\n" +"Lütfen hataları inceleyip düzeltin ve betikleri tekrar yüklemek için " +"Otomasyon Yöneticisi'ndeki Otomatik Yükleme Dizinini Yeniden Tara düğmesini " +"kullanın." + +#: ../src/auto4_base.cpp:347 +msgid "" +"Multiple scripts in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" +"Otomasyon otomatik yükleme dizinindeki birden fazla betik yüklenemedi.\n" +"Lütfen hataları inceleyip düzeltin ve betikleri tekrar yüklemek için " +"Otomasyon Yöneticisi'ndeki Otomatik Yükleme Dizinini Yeniden Tara düğmesini " +"kullanın." + +#: ../src/auto4_base.cpp:350 +msgid "" +"A script in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" +"Otomasyon otomatik yükleme dizinindeki bir betik uyarılarla yüklendi.\n" +"Lütfen uyarıları inceleyip düzeltin ve betikleri tekrar yüklemek için " +"Otomasyon Yöneticisi'ndeki Otomatik Yükleme Dizinini Yeniden Tara düğmesini " +"kullanın." + +#: ../src/auto4_base.cpp:353 +msgid "" +"Multiple scripts in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" +"Otomasyon otomatik yükleme dizinindeki birden fazla betik uyarılarla " +"yüklendi.\n" +"Lütfen uyarıları inceleyip düzeltin ve betikleri tekrar yüklemek için " +"Otomasyon Yöneticisi'ndeki Otomatik Yükleme Dizinini Yeniden Tara düğmesini " +"kullanın." + +#: ../src/auto4_base.cpp:393 +#, c-format +msgid "" +"Automation Script referenced with unknown location specifier character.\n" +"Location specifier found: %c\n" +"Filename specified: %s" +msgstr "" +"Otomasyon Betiğine bilinmeyen bir konum belirleyici karakterle başvuruldu.\n" +"Bulunan konum belirleyici: %c\n" +"Belirtilen dosya adı: %s" + +#: ../src/auto4_base.cpp:401 +#, c-format +msgid "" +"Automation Script referenced could not be found.\n" +"Filename specified: %c%s\n" +"Searched relative to: %s\n" +"Resolved filename: %s" +msgstr "" +"Başvurulan Otomasyon betiği bulunamadı.\n" +"Belirtilen dosya adı: %c%s\n" +"Aramanın yapıldığı konum: %s\n" +"Çözümlenen dosya adı: %s" + +#: ../src/auto4_base.cpp:462 #, c-format msgid "" "Failed to load Automation script '%s':\n" @@ -166,27 +243,67 @@ msgstr "" "Otomasyon betik dosyası yüklenemedi '%s': \n" "%s" -#: ../src/auto4_base.cpp:461 +#: ../src/auto4_base.cpp:465 +#, c-format +msgid "" +"Warning when loading Automation script '%s':\n" +"%s" +msgstr "" +"'%s' Otomasyon betiği yüklenirken uyarı oluştu:\n" +"%s" + +#: ../src/auto4_base.cpp:472 #, c-format msgid "The file was not recognised as an Automation script: %s" msgstr "Dosya otomasyon betiği olarak algılanamadı %s" -#: ../src/auto4_base.cpp:490 ../src/command/audio.cpp:84 +#: ../src/auto4_base.cpp:501 ../src/command/audio.cpp:84 #: ../src/command/keyframe.cpp:76 ../src/command/timecode.cpp:73 #: ../src/command/timecode.cpp:93 ../src/command/video.cpp:592 msgid "All Files" msgstr "Tüm Dosyalar" -#: ../src/auto4_base.cpp:496 ../src/command/keyframe.cpp:74 -#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 -#: ../src/subtitle_format.cpp:318 +#: ../src/auto4_base.cpp:507 ../src/command/keyframe.cpp:74 +#: ../src/dialog_attachments.cpp:170 ../src/subtitle_format.cpp:318 msgid "All Supported Formats" msgstr "Tüm Desteklenen Formatlar" -#: ../src/auto4_base.cpp:502 +#: ../src/auto4_base.cpp:513 msgid "File was not recognized as a script" msgstr "Dosya bir betik olarak tanınamadı" +#: ../src/auto4_lua.cpp:180 +#, c-format +msgid "" +"Warning in Automation script '%s':\n" +"%s" +msgstr "" +"'%s' Otomasyon betiğinde uyarı:\n" +"%s" + +#: ../src/auto4_lua.cpp:458 +msgid "Could not initialize Lua state" +msgstr "Lua durumu başlatılamadı" + +#: ../src/auto4_lua.cpp:541 +#, c-format +msgid "" +"Error initialising Lua script \"%s\":\n" +"\n" +"%s" +msgstr "" +"\"%s\" Lua betiği başlatılırken hata oluştu:\n" +"\n" +"%s" + +#: ../src/auto4_lua.cpp:551 +msgid "" +"Attempted to load an Automation 3 script as an Automation 4 Lua script. " +"Automation 3 is no longer supported." +msgstr "" +"Bir Otomasyon 3 betiği Otomasyon 4 Lua betiği olarak yüklenmeye çalışıldı. " +"Otomasyon 3 artık desteklenmemektedir." + #: ../src/charset_detect.cpp:50 msgid "" "Aegisub could not narrow down the character set to a single one.\n" @@ -221,7 +338,7 @@ msgstr "Ses+Altyazı Göster" #: ../src/command/app.cpp:69 msgid "Display audio and the subtitles grid only" -msgstr "Yalnızca ses ve altyazı ızgarasını görüntüle" +msgstr "Sadece ses ve altyazı ızgarasını görüntüler" #: ../src/command/app.cpp:87 msgid "&Full view" @@ -233,7 +350,7 @@ msgstr "Tam görünüm" #: ../src/command/app.cpp:89 msgid "Display audio, video and then subtitles grid" -msgstr "Ses, video ve ardından altyazı ızgarasını görüntüle" +msgstr "Ses, video ve ardından altyazı ızgarasını görüntüler" #: ../src/command/app.cpp:107 msgid "S&ubs Only View" @@ -245,7 +362,7 @@ msgstr "Sadece Altyazıları Göster" #: ../src/command/app.cpp:109 msgid "Display the subtitles grid only" -msgstr "Sadece altyazı ızgarasını göster" +msgstr "Sadece altyazı ızgarasını görüntüler" #: ../src/command/app.cpp:123 msgid "&Video+Subs View" @@ -257,7 +374,7 @@ msgstr "Video+Altyazı Göster" #: ../src/command/app.cpp:125 msgid "Display video and the subtitles grid only" -msgstr "Yalnızca video ve altyazı ızgarasını görüntüle" +msgstr "Sadece video ve altyazı ızgarasını görüntüler" #: ../src/command/app.cpp:143 msgid "E&xit" @@ -275,10 +392,6 @@ msgstr "Programdan çıkış yap" msgid "&Language..." msgstr "&Dil" -#: ../src/command/app.cpp:156 -msgid "Language" -msgstr "Dil" - #: ../src/command/app.cpp:157 msgid "Select Aegisub interface language" msgstr "Aegisub arayüz dilini seç" @@ -351,7 +464,7 @@ msgstr "Güncelleştirmeleri denetle" #: ../src/command/app.cpp:260 msgid "Check to see if there is a new version of Aegisub available" -msgstr "Aegisub'ın yeni versiyonunun olup olmadığını kontrol edin" +msgstr "Aegisub'ın yeni sürümünün olup olmadığını denetleyin" #: ../src/command/app.cpp:270 ../src/command/app.cpp:271 msgid "Minimize" @@ -484,7 +597,6 @@ msgstr "" "oynatır" #: ../src/command/audio.cpp:205 ../src/command/audio.cpp:206 -#: ../src/command/video.cpp:647 msgid "Play current line" msgstr "Geçerli satırı oynat" @@ -675,7 +787,7 @@ msgid "&Automation..." msgstr "&Otomasyon" #: ../src/command/automation.cpp:74 ../src/command/automation.cpp:86 -#: ../src/preferences.cpp:333 +#: ../src/preferences.cpp:339 msgid "Automation" msgstr "Otomasyon" @@ -810,15 +922,15 @@ msgstr "üstçizgiyi değiştir" #: ../src/command/edit.cpp:487 msgid "Font Face..." -msgstr "Font Tipi" +msgstr "Font Adı" #: ../src/command/edit.cpp:488 ../src/preferences_base.cpp:250 msgid "Font Face" -msgstr "Font Tipi" +msgstr "Font Adı" #: ../src/command/edit.cpp:489 msgid "Select a font face and size" -msgstr "Bir font tipi ve boyutu seç" +msgstr "Bir font ve boyut seç" #: ../src/command/edit.cpp:516 msgid "set font" @@ -858,7 +970,7 @@ msgstr "Satırları Kes" #: ../src/command/edit.cpp:631 msgid "Cut subtitles" -msgstr "Altyazıları Kes" +msgstr "Altyazıları kes" #: ../src/command/edit.cpp:638 msgid "cut lines" @@ -982,7 +1094,7 @@ msgstr "Satırları Yapıştır" #: ../src/command/edit.cpp:855 msgid "Paste subtitles" -msgstr "Altyazıları Yapıştır" +msgstr "Altyazıları yapıştır" #: ../src/command/edit.cpp:884 msgid "Paste Lines &Over..." @@ -1119,7 +1231,7 @@ msgid "revert line" msgstr "satırı geri al" #: ../src/command/edit.cpp:1223 ../src/command/edit.cpp:1224 -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Clear" msgstr "Temizle" @@ -1282,7 +1394,7 @@ msgid "St&yle Name" msgstr "St&il Adı" #: ../src/command/grid.cpp:229 ../src/command/grid.cpp:241 -#: ../src/dialog_style_editor.cpp:178 +#: ../src/dialog_style_editor.cpp:179 msgid "Style Name" msgstr "Stil adı" @@ -1324,7 +1436,7 @@ msgstr "Etiketleri gizle" #: ../src/command/grid.cpp:279 msgid "Hide override tags in the subtitle grid" -msgstr "Altyazı ızgarasında geçersiz kılma etiketlerini gizle" +msgstr "Altyazı ızgarasında geçersiz kılma etiketlerini gizler" #: ../src/command/grid.cpp:293 msgid "Sh&ow Tags" @@ -1336,7 +1448,7 @@ msgstr "Etiketleri göster" #: ../src/command/grid.cpp:295 msgid "Show full override tags in the subtitle grid" -msgstr "Altyazı kılavuzunda tam geçersiz kılma etiketlerini göster" +msgstr "Altyazı kılavuzunda tam geçersiz kılma etiketlerini gösterir" #: ../src/command/grid.cpp:309 msgid "S&implify Tags" @@ -1748,7 +1860,7 @@ msgstr "Yazı Denetimi" #: ../src/command/subtitle.cpp:443 msgid "Open spell checker" -msgstr "Yazı denetimini açar" +msgstr "Yazı denetimini aç" #: ../src/command/time.cpp:100 msgid "adjoin" @@ -1818,7 +1930,7 @@ msgstr "Video Sonuna Yasla" #: ../src/command/time.cpp:184 msgid "Set end of selected subtitles to current video frame" -msgstr "Seçili altyazıların sonunu geçerli video karesine ayarlar" +msgstr "Seçili altyazıların sonunu geçerli video karesine ayarla" #: ../src/command/time.cpp:194 msgid "Snap to S&cene" @@ -1924,7 +2036,7 @@ msgstr "Video Başlangıcına Yasla" #: ../src/command/time.cpp:345 msgid "Set start of selected subtitles to current video frame" -msgstr "Seçili altyazıların başlangıcını geçerli video karesine ayarlar" +msgstr "Seçili altyazıların başlangıcını geçerli video karesine ayarla" #: ../src/command/time.cpp:357 msgid "Next line or syllable" @@ -1954,6 +2066,10 @@ msgstr "Zamankodları Dosyasını Aç" msgid "Open a VFR timecodes v1 or v2 file" msgstr "VFR zamankodu v1 veya v2 dosyası açar" +#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 +msgid "Text Files" +msgstr "Metin Dosyaları" + #: ../src/command/timecode.cpp:83 msgid "Save Timecodes File..." msgstr "Zamankodu Dosyası Kaydet" @@ -2105,7 +2221,7 @@ msgid "&Translation Assistant..." msgstr "&Çeviri Asistanı" #: ../src/command/tool.cpp:187 ../src/dialog_translation.cpp:64 -#: ../src/preferences.cpp:229 +#: ../src/preferences.cpp:235 msgid "Translation Assistant" msgstr "Çeviri Asistanı" @@ -2485,13 +2601,17 @@ msgid "Play" msgstr "Oynat" #: ../src/command/video.cpp:635 -msgid "Play video starting on this position" -msgstr "Bu pozisyonda video başlangıcını oynat" +msgid "Play the video starting on this position" +msgstr "Videoyu bu pozisyondan başlayarak oynat" #: ../src/command/video.cpp:645 ../src/command/video.cpp:646 msgid "Play line" msgstr "Satırı oynat" +#: ../src/command/video.cpp:647 +msgid "Play the video for the current line" +msgstr "Videoyu geçerli satır için oynat" + #: ../src/command/video.cpp:656 msgid "Show &Overscan Mask" msgstr "Üsttarama &Maskesini Göster" @@ -2508,63 +2628,75 @@ msgstr "" "Videonun üstünde bir maske göster, televizyonlarda görünemeyebilecek " "alanları tanımlar" +#: ../src/command/video.cpp:673 +msgid "Reset Video &Pan" +msgstr "Video &Kaydırmayı Sıfırla" + #: ../src/command/video.cpp:674 +msgid "Reset Video Pan" +msgstr "Video Kaydırmayı Sıfırla" + +#: ../src/command/video.cpp:675 +msgid "Reset the video's position in the video display" +msgstr "Video ekranındaki video konumunu sıfırlar" + +#: ../src/command/video.cpp:685 msgid "&100%" msgstr "&%100" -#: ../src/command/video.cpp:675 +#: ../src/command/video.cpp:686 msgid "100%" msgstr "%100" -#: ../src/command/video.cpp:676 +#: ../src/command/video.cpp:687 msgid "Set zoom to 100%" msgstr "Yakınlaştırmayı 100%'ye ayarla" -#: ../src/command/video.cpp:693 ../src/command/video.cpp:694 +#: ../src/command/video.cpp:704 ../src/command/video.cpp:705 msgid "Stop video" msgstr "Videoyu durdur" -#: ../src/command/video.cpp:695 +#: ../src/command/video.cpp:706 msgid "Stop video playback" msgstr "Video oynatmayı durdur" -#: ../src/command/video.cpp:705 +#: ../src/command/video.cpp:716 msgid "&200%" msgstr "&%200" -#: ../src/command/video.cpp:706 +#: ../src/command/video.cpp:717 msgid "200%" msgstr "%200" -#: ../src/command/video.cpp:707 +#: ../src/command/video.cpp:718 msgid "Set zoom to 200%" msgstr "Yakınlaştırmayı 200%'ye ayarla" -#: ../src/command/video.cpp:723 +#: ../src/command/video.cpp:734 msgid "&50%" msgstr "&%50" -#: ../src/command/video.cpp:724 +#: ../src/command/video.cpp:735 msgid "50%" msgstr "%50" -#: ../src/command/video.cpp:725 +#: ../src/command/video.cpp:736 msgid "Set zoom to 50%" msgstr "Yakınlaştırmayı %50'ye ayarla" -#: ../src/command/video.cpp:741 ../src/command/video.cpp:742 +#: ../src/command/video.cpp:752 ../src/command/video.cpp:753 msgid "Zoom In" msgstr "Yaklaş" -#: ../src/command/video.cpp:743 +#: ../src/command/video.cpp:754 msgid "Zoom video in" msgstr "Videoya yaklaş" -#: ../src/command/video.cpp:753 ../src/command/video.cpp:754 +#: ../src/command/video.cpp:764 ../src/command/video.cpp:765 msgid "Zoom Out" msgstr "Uzaklaş" -#: ../src/command/video.cpp:755 +#: ../src/command/video.cpp:766 msgid "Zoom video out" msgstr "Videodan uzaklaş" @@ -2634,56 +2766,56 @@ msgid "Line" msgstr "Satır" #: ../src/command/vis_tool.cpp:141 -msgid "Appends a line" -msgstr "Satır ilave et" +msgid "Append a line" +msgstr "Satır ekle" #: ../src/command/vis_tool.cpp:146 ../src/command/vis_tool.cpp:147 msgid "Bicubic" msgstr "Bikübik" #: ../src/command/vis_tool.cpp:148 -msgid "Appends a bezier bicubic curve" -msgstr "Bir bezier bikübik eğri ilave et" +msgid "Append a bezier bicubic curve" +msgstr "Bikübik Bezier eğrisi ekle" #: ../src/command/vis_tool.cpp:153 ../src/command/vis_tool.cpp:154 msgid "Convert" msgstr "Çevir" #: ../src/command/vis_tool.cpp:155 -msgid "Converts a segment between line and bicubic" -msgstr "Bir segmenti satır ve bikübik arasında çevir" +msgid "Convert a segment between line and bicubic" +msgstr "Bir segmenti satır ve bikübik arasında dönüştür" #: ../src/command/vis_tool.cpp:160 ../src/command/vis_tool.cpp:161 msgid "Insert" msgstr "Ekle" #: ../src/command/vis_tool.cpp:162 -msgid "Inserts a control point" -msgstr "Kontrol noktası ekler" +msgid "Insert a control point" +msgstr "Kontrol noktası ekle" #: ../src/command/vis_tool.cpp:167 ../src/command/vis_tool.cpp:168 msgid "Remove" msgstr "Kaldır" #: ../src/command/vis_tool.cpp:169 -msgid "Removes a control point" -msgstr "Kontrol noktasını kaldırır" +msgid "Remove a control point" +msgstr "Kontrol noktası kaldır" #: ../src/command/vis_tool.cpp:174 ../src/command/vis_tool.cpp:175 msgid "Freehand" msgstr "Freehand" #: ../src/command/vis_tool.cpp:176 -msgid "Draws a freehand shape" -msgstr "Freehand şekli çiz" +msgid "Draw a freehand shape" +msgstr "Serbest çizim şekli çiz" #: ../src/command/vis_tool.cpp:181 ../src/command/vis_tool.cpp:182 msgid "Freehand smooth" msgstr "Freehand yumuşat" #: ../src/command/vis_tool.cpp:183 -msgid "Draws a smoothed freehand shape" -msgstr "Yumuşatılmış freehand şekli çiz" +msgid "Draw a smoothed freehand shape" +msgstr "Yumuşatılmış bir serbest çizim şekli çiz" #: ../src/dialog_about.cpp:46 msgid "Translated into LANGUAGE by PERSON\n" @@ -2721,7 +2853,7 @@ msgid "E&xtract" msgstr "Ç&ıkart" #: ../src/dialog_attachments.cpp:79 ../src/dialog_style_manager.cpp:204 -#: ../src/preferences.cpp:605 +#: ../src/preferences.cpp:613 msgid "&Delete" msgstr "&Sil" @@ -2746,10 +2878,18 @@ msgstr "Grup" msgid "Choose file to be attached" msgstr "Eklenecek dosyayı seç" +#: ../src/dialog_attachments.cpp:139 ../src/dialog_attachments.cpp:170 +msgid "Font Files" +msgstr "Font Dosyaları" + #: ../src/dialog_attachments.cpp:142 msgid "attach font file" msgstr "font dosyası ekle" +#: ../src/dialog_attachments.cpp:149 ../src/dialog_attachments.cpp:170 +msgid "Graphic Files" +msgstr "Grafik Dosyaları" + #: ../src/dialog_attachments.cpp:152 msgid "attach graphics file" msgstr "grafik dosyası ekle" @@ -2798,15 +2938,20 @@ msgstr "Adı" msgid "Filename" msgstr "Dosya adı" -#: ../src/dialog_automation.cpp:136 +#: ../src/dialog_automation.cpp:136 ../src/preferences.cpp:633 msgid "Description" msgstr "Açıklama" -#: ../src/dialog_automation.cpp:222 +#: ../src/dialog_automation.cpp:224 msgid "Add Automation script" msgstr "Otomasyon betiği ekle" -#: ../src/dialog_automation.cpp:277 +#: ../src/dialog_automation.cpp:240 +#, c-format +msgid "Script '%s' is already loaded" +msgstr "'%s' betiği zaten yüklü" + +#: ../src/dialog_automation.cpp:279 #, c-format msgid "" "Total scripts loaded: %d\n" @@ -2817,11 +2962,11 @@ msgstr "" "Genel yüklenen betik: %d\n" "Lokal yüklenen betik: %d\n" -#: ../src/dialog_automation.cpp:282 +#: ../src/dialog_automation.cpp:284 msgid "Scripting engines installed:" msgstr "Yüklenen betik motorları:" -#: ../src/dialog_automation.cpp:289 +#: ../src/dialog_automation.cpp:291 #, c-format msgid "" "\n" @@ -2832,38 +2977,48 @@ msgid "" "Version: %s\n" "Full path: %s\n" "State: %s\n" -"\n" -"Features provided by script:" msgstr "" "\n" "Betik bilgisi:\n" "Adı: %s\n" "Açıklama: %s\n" "Yazar: %s\n" -"Versiyon: %s\n" +"Sürüm: %s\n" "Tam yol: %s\n" "Bölge: %s\n" -"Betik tarafından sağlanan özellikler:" -#: ../src/dialog_automation.cpp:295 +#: ../src/dialog_automation.cpp:297 msgid "Correctly loaded" msgstr "Düzgünce yüklendi" -#: ../src/dialog_automation.cpp:295 +#: ../src/dialog_automation.cpp:297 msgid "Failed to load" msgstr "Yükleme başarısız" -#: ../src/dialog_automation.cpp:298 +#: ../src/dialog_automation.cpp:297 +msgid "Loaded with warnings" +msgstr "Uyarılarla yüklendi" + +#: ../src/dialog_automation.cpp:300 +#, c-format +msgid "Warning: %s\n" +msgstr "Uyarı: %s\n" + +#: ../src/dialog_automation.cpp:303 +msgid "Features provided by script:\n" +msgstr "Betiğin sağladığı özellikler:\n" + +#: ../src/dialog_automation.cpp:306 #, c-format msgid " Macro: %s (%s)" msgstr " Makro: %s (%s)" -#: ../src/dialog_automation.cpp:301 +#: ../src/dialog_automation.cpp:309 #, c-format msgid " Export filter: %s" msgstr " Dışa aktarma filtresi: %s" -#: ../src/dialog_automation.cpp:305 +#: ../src/dialog_automation.cpp:313 msgid "Automation Script Info" msgstr "Otomasyon Betik Bilgisi" @@ -2974,31 +3129,84 @@ msgstr "Değer:" msgid "Video: %s" msgstr "Video: %s" -#: ../src/dialog_dummy_video.cpp:103 +#: ../src/dialog_dummy_video.cpp:71 +msgid "640×480 (SD fullscreen)" +msgstr "640×480 (SD tam ekran)" + +#: ../src/dialog_dummy_video.cpp:72 +msgid "704×480 (SD anamorphic)" +msgstr "704×480 (SD anamorfik)" + +#: ../src/dialog_dummy_video.cpp:73 +msgid "640×360 (SD widescreen)" +msgstr "640×360 (SD geniş ekran)" + +#: ../src/dialog_dummy_video.cpp:74 +msgid "704×396 (SD widescreen)" +msgstr "704×396 (SD geniş ekran)" + +#: ../src/dialog_dummy_video.cpp:75 +msgid "640×352 (SD widescreen MOD16)" +msgstr "640×352 (SD geniş ekran MOD16)" + +#: ../src/dialog_dummy_video.cpp:76 +msgid "704×400 (SD widescreen MOD16)" +msgstr "704×400 (SD geniş ekran MOD16)" + +#: ../src/dialog_dummy_video.cpp:77 +msgid "1024×576 (SuperPAL widescreen)" +msgstr "1024×576 (SüperPAL geniş ekran)" + +#: ../src/dialog_dummy_video.cpp:78 +msgid "1280×720 (HD 720p)" +msgstr "1280×720 (HD 720p)" + +#: ../src/dialog_dummy_video.cpp:79 +msgid "1920×1080 (FHD 1080p)" +msgstr "1920×1080 (FHD 1080p)" + +#: ../src/dialog_dummy_video.cpp:80 +msgid "2560×1440 (QHD 1440p)" +msgstr "2560×1440 (QHD 1440p)" + +#: ../src/dialog_dummy_video.cpp:81 +msgid "3840×2160 (4K UHD 2160p)" +msgstr "3840×2160 (4K UHD 2160p)" + +#: ../src/dialog_dummy_video.cpp:82 +msgid "1080×1920 (FHD vertical)" +msgstr "1080×1920 (FHD dikey)" + +#: ../src/dialog_dummy_video.cpp:104 msgid "Dummy video options" msgstr "Sahte video ayarları" -#: ../src/dialog_dummy_video.cpp:115 +#: ../src/dialog_dummy_video.cpp:110 ../src/dialog_properties.cpp:130 +#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 +msgid "×" +msgstr "×" + +#: ../src/dialog_dummy_video.cpp:116 msgid "Checkerboard &pattern" msgstr "Dama &deseni" -#: ../src/dialog_dummy_video.cpp:118 +#: ../src/dialog_dummy_video.cpp:119 msgid "Video resolution:" msgstr "Video çözünürlüğü:" -#: ../src/dialog_dummy_video.cpp:120 +#: ../src/dialog_dummy_video.cpp:121 msgid "Color:" msgstr "Renk:" -#: ../src/dialog_dummy_video.cpp:123 +#: ../src/dialog_dummy_video.cpp:124 msgid "Frame rate (fps):" msgstr "Kare hızı (fps):" -#: ../src/dialog_dummy_video.cpp:124 +#: ../src/dialog_dummy_video.cpp:125 msgid "Duration (frames):" msgstr "Süre (karelerin):" -#: ../src/dialog_dummy_video.cpp:179 +#: ../src/dialog_dummy_video.cpp:180 #, c-format msgid "Resulting duration: %s" msgstr "Süre: %s" @@ -3035,6 +3243,16 @@ msgstr "Dışarı aktar" msgid "Export subtitles file" msgstr "Altyazı dosyalarını dışarı aktar" +#: ../src/dialog_export.cpp:202 ../src/dialog_export.cpp:205 +#: ../src/dialog_export.cpp:208 +msgid "Error exporting subtitles" +msgstr "Altyazılar dışa aktarılırken hata oluştu" + +#: ../src/dialog_export.cpp:208 ../src/dialog_style_manager.cpp:691 +#: ../src/project.cpp:142 +msgid "Unknown error" +msgstr "Bilinmeyen hata" + #: ../src/dialog_export_ebu3264.cpp:83 msgid "EBU STL export" msgstr "EBU STL dışa aktar" @@ -3271,7 +3489,10 @@ msgstr "&Başlat!" #: ../src/dialog_fonts_collector.cpp:310 ../src/dialog_fonts_collector.cpp:315 #: ../src/dialog_fonts_collector.cpp:320 ../src/dialog_kara_timing_copy.cpp:489 #: ../src/dialog_kara_timing_copy.cpp:491 -#: ../src/dialog_kara_timing_copy.cpp:541 ../src/preferences.cpp:266 +#: ../src/dialog_kara_timing_copy.cpp:541 ../src/dialog_spellchecker.cpp:143 +#: ../src/dialog_spellchecker.cpp:149 ../src/dialog_style_manager.cpp:682 +#: ../src/dialog_style_manager.cpp:688 ../src/dialog_style_manager.cpp:691 +#: ../src/preferences.cpp:272 ../src/preferences.cpp:464 msgid "Error" msgstr "Hata" @@ -3526,6 +3747,11 @@ msgstr "Güncelleme detayları:" msgid "From &video" msgstr "Video&dan" +#: ../src/dialog_properties.cpp:138 ../src/dialog_resample.cpp:172 +#: ../src/dialog_resample.cpp:186 +msgid "YCbCr Matrix:" +msgstr "YCbCr Matrisi:" + #: ../src/dialog_properties.cpp:141 msgid "Resolution" msgstr "Çözünürlük" @@ -3598,14 +3824,6 @@ msgstr "En-boy oranı yönetimi" msgid "Margin offset" msgstr "Kenar boşluğu konumu" -#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" - -#: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 -msgid "YCbCr Matrix:" -msgstr "YCbCr Matrisi:" - #: ../src/dialog_resample.cpp:175 msgid "Source Resolution" msgstr "Kaynak Çözünürlüğü" @@ -3933,6 +4151,14 @@ msgstr "kaydırma" msgid "Misspelled word:" msgstr "Yanlış girilen kelime:" +#: ../src/dialog_spellchecker.cpp:143 +msgid "No spellchecker available." +msgstr "Yazım denetleyicisi mevcut değil." + +#: ../src/dialog_spellchecker.cpp:149 +msgid "No spellchecker dictionaries available." +msgstr "Yazım denetleyicisi sözlükleri mevcut değil." + #: ../src/dialog_spellchecker.cpp:183 msgid "Ignore &UPPERCASE words" msgstr "Büyük &harfle yazılan sözcükleri yoksay" @@ -3977,122 +4203,125 @@ msgstr "yazı denetimi değiştir" msgid "Style Editor" msgstr "Stil Editörü" -#: ../src/dialog_style_editor.cpp:179 +#: ../src/dialog_style_editor.cpp:172 +msgid "Border boxes" +msgstr "Çerçeve Kutusu" + +#: ../src/dialog_style_editor.cpp:172 ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:286 +msgid "Outline" +msgstr "Kontur" + +#: ../src/dialog_style_editor.cpp:172 +msgid "Shadow box (libass only)" +msgstr "Gölge Kutusu (sadece libass)" + +#: ../src/dialog_style_editor.cpp:180 msgid "Font" msgstr "Font" -#: ../src/dialog_style_editor.cpp:180 ../src/preferences.cpp:237 +#: ../src/dialog_style_editor.cpp:181 ../src/preferences.cpp:243 msgid "Colors" msgstr "Renkler" -#: ../src/dialog_style_editor.cpp:181 +#: ../src/dialog_style_editor.cpp:182 msgid "Margins" msgstr "Kenar Boşluğu" -#: ../src/dialog_style_editor.cpp:182 ../src/dialog_style_editor.cpp:285 -msgid "Outline" -msgstr "Kontur" - -#: ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:184 msgid "Miscellaneous" msgstr "Diğer" -#: ../src/dialog_style_editor.cpp:184 +#: ../src/dialog_style_editor.cpp:185 msgid "Preview" msgstr "Önizleme" -#: ../src/dialog_style_editor.cpp:190 +#: ../src/dialog_style_editor.cpp:191 msgid "&Bold" msgstr "&Kalın" -#: ../src/dialog_style_editor.cpp:191 +#: ../src/dialog_style_editor.cpp:192 msgid "&Italic" msgstr "&İtalik" -#: ../src/dialog_style_editor.cpp:192 +#: ../src/dialog_style_editor.cpp:193 msgid "&Underline" msgstr "&Altıçizili" -#: ../src/dialog_style_editor.cpp:193 +#: ../src/dialog_style_editor.cpp:194 msgid "&Strikeout" msgstr "&Üstüçizili" -#: ../src/dialog_style_editor.cpp:205 +#: ../src/dialog_style_editor.cpp:206 msgid "Alignment" msgstr "Hizalama" -#: ../src/dialog_style_editor.cpp:208 -msgid "&Opaque box" -msgstr "&Opaklık kutusu" - -#: ../src/dialog_style_editor.cpp:216 +#: ../src/dialog_style_editor.cpp:217 msgid "Style name" msgstr "Stil adı" -#: ../src/dialog_style_editor.cpp:217 +#: ../src/dialog_style_editor.cpp:218 msgid "Font face" -msgstr "Font yüzü" +msgstr "Font adı" -#: ../src/dialog_style_editor.cpp:218 +#: ../src/dialog_style_editor.cpp:219 msgid "Font size" msgstr "Font boyutu" -#: ../src/dialog_style_editor.cpp:219 +#: ../src/dialog_style_editor.cpp:220 msgid "Choose primary color" msgstr "Birincil rengi seç" -#: ../src/dialog_style_editor.cpp:220 +#: ../src/dialog_style_editor.cpp:221 msgid "Choose secondary color" msgstr "İkincil rengi seç" -#: ../src/dialog_style_editor.cpp:221 +#: ../src/dialog_style_editor.cpp:222 msgid "Choose outline color" msgstr "Kontur rengi seç" -#: ../src/dialog_style_editor.cpp:222 +#: ../src/dialog_style_editor.cpp:223 msgid "Choose shadow color" msgstr "Gölge rengini seç" -#: ../src/dialog_style_editor.cpp:223 +#: ../src/dialog_style_editor.cpp:224 msgid "Distance from left edge, in pixels" msgstr "Sol kenardan uzaklık, piksel" -#: ../src/dialog_style_editor.cpp:224 +#: ../src/dialog_style_editor.cpp:225 msgid "Distance from right edge, in pixels" msgstr "Sağ kenardan uzaklık, piksel" -#: ../src/dialog_style_editor.cpp:225 +#: ../src/dialog_style_editor.cpp:226 msgid "Distance from top/bottom edge, in pixels" msgstr "Üst/Alt kenarından uzaklık, piksel" -#: ../src/dialog_style_editor.cpp:226 -msgid "" -"When selected, display an opaque box behind the subtitles instead of an " -"outline around the text" +#: ../src/dialog_style_editor.cpp:227 +msgid "Whether to draw a normal outline or opaque boxes around the text" msgstr "" -"Seçilirse, yaznın etrafındaki konturun arkasında opaklık kutusu gözükecektir" +"Metnin etrafına normal bir kenarlık mı yoksa opak kutular mı çizileceği" -#: ../src/dialog_style_editor.cpp:227 +#: ../src/dialog_style_editor.cpp:228 msgid "Outline width, in pixels" msgstr "Kontur uzunluğu, piksel" -#: ../src/dialog_style_editor.cpp:228 +#: ../src/dialog_style_editor.cpp:229 msgid "Shadow distance, in pixels" msgstr "Gölge uzaklığı, piksel" -#: ../src/dialog_style_editor.cpp:229 +#: ../src/dialog_style_editor.cpp:230 msgid "Scale X, in percentage" msgstr "Boyutlandır X, yüzdelik" -#: ../src/dialog_style_editor.cpp:230 +#: ../src/dialog_style_editor.cpp:231 msgid "Scale Y, in percentage" msgstr "Boyutlandır Y, yüzdelik" -#: ../src/dialog_style_editor.cpp:231 +#: ../src/dialog_style_editor.cpp:232 msgid "Angle to rotate in Z axis, in degrees" msgstr "Z aksında çevir, derece" -#: ../src/dialog_style_editor.cpp:232 +#: ../src/dialog_style_editor.cpp:233 msgid "" "Encoding, only useful in unicode if the font doesn't have the proper unicode " "mapping" @@ -4100,87 +4329,91 @@ msgstr "" "Kodlama, eğer font uygun unicode kodlamaya sahip değilse, sadece unicode'da " "etkilidir" -#: ../src/dialog_style_editor.cpp:233 +#: ../src/dialog_style_editor.cpp:234 msgid "Character spacing, in pixels" msgstr "Karakter boşluğu, piksel" -#: ../src/dialog_style_editor.cpp:234 +#: ../src/dialog_style_editor.cpp:235 msgid "Alignment in screen, in numpad style" msgstr "Ekrandaki hizalaması, numpad stili" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Primary" msgstr "Birincil" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Secondary" msgstr "İkincil" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Shadow" msgstr "Gölge" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:263 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:263 msgid "Left" msgstr "Sol" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:269 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:269 msgid "Right" msgstr "Sağ" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:275 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:275 msgid "Vert" msgstr "Dikey" -#: ../src/dialog_style_editor.cpp:314 +#: ../src/dialog_style_editor.cpp:315 msgid "Outline:" msgstr "Kontur:" -#: ../src/dialog_style_editor.cpp:315 +#: ../src/dialog_style_editor.cpp:316 msgid "Shadow:" msgstr "Gölge:" -#: ../src/dialog_style_editor.cpp:320 +#: ../src/dialog_style_editor.cpp:317 +msgid "Border style:" +msgstr "Çerçeve stili:" + +#: ../src/dialog_style_editor.cpp:321 msgid "Scale X%:" msgstr "Boyutlandır X%:" -#: ../src/dialog_style_editor.cpp:321 +#: ../src/dialog_style_editor.cpp:322 msgid "Scale Y%:" msgstr "Boyutlandır Y%:" -#: ../src/dialog_style_editor.cpp:322 +#: ../src/dialog_style_editor.cpp:323 msgid "Rotation:" msgstr "Rotasyon:" -#: ../src/dialog_style_editor.cpp:323 +#: ../src/dialog_style_editor.cpp:324 msgid "Spacing:" msgstr "Boşluk:" -#: ../src/dialog_style_editor.cpp:326 +#: ../src/dialog_style_editor.cpp:327 msgid "Encoding:" msgstr "Kodlama:" -#: ../src/dialog_style_editor.cpp:336 +#: ../src/dialog_style_editor.cpp:337 msgid "Preview of current style" msgstr "Stilin önizlemesi" -#: ../src/dialog_style_editor.cpp:339 +#: ../src/dialog_style_editor.cpp:340 msgid "Text to be used for the preview" msgstr "Önizleme için kullanılacak yazı" -#: ../src/dialog_style_editor.cpp:340 +#: ../src/dialog_style_editor.cpp:341 msgid "Color of preview background" msgstr "Önizleme arkaplan rengi" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "Style name conflict" msgstr "Stil adı çakışması" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "There is already a style with this name. Please choose another name." msgstr "Bu isimde bir stil zaten var. Lütfen başka bir isim seçin." -#: ../src/dialog_style_editor.cpp:433 +#: ../src/dialog_style_editor.cpp:434 msgid "" "Do you want to change all instances of this style in the script to this new " "name?" @@ -4188,11 +4421,11 @@ msgstr "" "Betikteki bu stile ait tüm örneklerin adını yenisiyle değiştirmek ister " "misiniz?" -#: ../src/dialog_style_editor.cpp:434 +#: ../src/dialog_style_editor.cpp:435 msgid "Update script?" msgstr "Betiği güncelle?" -#: ../src/dialog_style_editor.cpp:461 ../src/subs_edit_box.cpp:604 +#: ../src/dialog_style_editor.cpp:462 ../src/subs_edit_box.cpp:604 msgid "style change" msgstr "stil değiştir" @@ -4216,11 +4449,11 @@ msgstr "Stili en aşağı taşı" msgid "Sort styles alphabetically" msgstr "Stilleri alfabetik sırala" -#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:603 +#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:611 msgid "&New" msgstr "&Yeni" -#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:604 +#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:612 msgid "&Edit" msgstr "&Düzenle" @@ -4241,7 +4474,7 @@ msgstr "%s - Kopyala (%d)" #: ../src/dialog_style_manager.cpp:242 msgid "Could not parse style" -msgstr "Stil çözümlenemiyor" +msgstr "Stil ayrıştırılamadı" #: ../src/dialog_style_manager.cpp:247 #, c-format @@ -4364,6 +4597,10 @@ msgstr "Geçerliden silmeyi onayla" msgid "style delete" msgstr "stil sil" +#: ../src/dialog_style_manager.cpp:682 +msgid "Unsupported subtitle format" +msgstr "Desteklenmeyen altyazı formatı" + #: ../src/dialog_style_manager.cpp:698 msgid "Error Importing Styles" msgstr "Stilleri Aktarmada Hata" @@ -4689,7 +4926,7 @@ msgstr "çeviri asistanı" #: ../src/dialog_version_check.cpp:90 msgid "Version Checker" -msgstr "Versiyon Kontrol" +msgstr "Sürüm Kontrolü" #: ../src/dialog_version_check.cpp:115 msgid "&Auto Check for Updates" @@ -4771,7 +5008,7 @@ msgid "Decoder:" msgstr "Dekoder:" #: ../src/dialog_video_details.cpp:66 ../src/preferences.cpp:167 -#: ../src/preferences.cpp:438 +#: ../src/preferences.cpp:444 msgid "Video" msgstr "Video" @@ -4779,45 +5016,45 @@ msgstr "Video" msgid "Resolution mismatch" msgstr "Çözünürlük uyuşmuyor" -#: ../src/dialog_video_properties.cpp:46 +#: ../src/dialog_video_properties.cpp:47 #, c-format msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Yüklenen videonun ve altyazıların spesifik çözünürlüğü uyuşmuyor.\n" "\n" -"Video çözünürlüğü:\t%d x %d\n" -"Betik çözünürlüğü:\t%d x %d\n" +"Video çözünürlüğü:\t%d × %d\n" +"Betik çözünürlüğü:\t%d × %d\n" "\n" "Altyazının çözünürlüğünü video ile eşleştir?" -#: ../src/dialog_video_properties.cpp:54 ../src/dialog_video_properties.cpp:63 +#: ../src/dialog_video_properties.cpp:58 ../src/dialog_video_properties.cpp:67 msgid "Set to video resolution" msgstr "Video çözünürlüğüne ayarla" -#: ../src/dialog_video_properties.cpp:55 +#: ../src/dialog_video_properties.cpp:59 msgid "Resample script (stretch to new aspect ratio)" msgstr "Yeniden örnekleme betiği (yeni en boy oranına esnetme)" -#: ../src/dialog_video_properties.cpp:56 +#: ../src/dialog_video_properties.cpp:60 msgid "Resample script (add borders)" msgstr "Betiği yeniden örnekle (sınırlar ekle)" -#: ../src/dialog_video_properties.cpp:57 +#: ../src/dialog_video_properties.cpp:61 msgid "Resample script (remove borders)" msgstr "Betiği yeniden örnekle (kenarlıkları kaldır)" -#: ../src/dialog_video_properties.cpp:64 +#: ../src/dialog_video_properties.cpp:68 msgid "Resample script" msgstr "Betiği yeniden örnekle" -#: ../src/dialog_video_properties.cpp:163 +#: ../src/dialog_video_properties.cpp:167 msgid "change script resolution" msgstr "betik çözünürlüğünü değiştir" @@ -5039,7 +5276,7 @@ msgstr "Saniye Başına Karakter" msgid "Invalid command name for hotkey" msgstr "Kısayol tuşu için geçersiz komut adı" -#: ../src/main.cpp:246 +#: ../src/main.cpp:258 #, c-format msgid "" "Oops, Aegisub has crashed!\n" @@ -5058,11 +5295,11 @@ msgstr "" "\n" "Aegisub şimdi kapanacak." -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "Check for updates?" msgstr "Güncelleştirmeler denetlensin mi?" -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "" "Do you want Aegisub to check for updates whenever it starts? You can still " "do it manually via the Help menu." @@ -5070,11 +5307,22 @@ msgstr "" "Aegisub'ın başlangıçta güncelleştirmeleri denetlemesini ister misiniz? " "Yardım menüsünden elle sizde yapabilirsiniz." -#: ../src/main.cpp:390 ../src/main.cpp:393 +#: ../src/main.cpp:402 ../src/main.cpp:405 msgid "Program error" msgstr "Program hatası" -#: ../src/main.cpp:407 +#: ../src/main.cpp:405 +#, c-format +msgid "" +"Aegisub has crashed while starting up!\n" +"\n" +"The last startup step attempted was: %s." +msgstr "" +"Aegisub başlatılırken çöktü!\n" +"\n" +"Denenen son başlangıç adımı: %s." + +#: ../src/main.cpp:419 #, c-format msgid "" "An unexpected error has occurred. Please save your work and restart " @@ -5087,6 +5335,10 @@ msgstr "" "\n" "Hata Mesajı: %s" +#: ../src/main.cpp:420 +msgid "Exception in event handler" +msgstr "Olay işleyicisinde istisna" + #: ../src/menu.cpp:96 msgid "Empty" msgstr "Boş" @@ -5099,24 +5351,24 @@ msgstr "&Son kullanılanlar" msgid "No Automation macros loaded" msgstr "Otomasyon makrosu yüklenmedi" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Choose which track to read:" msgstr "Hangi parçanın okunacağını seç:" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Multiple subtitle tracks found" msgstr "Birden fazla altyazı parçası bulundu" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Parsing Matroska" msgstr "Matroska Ayrıştırma" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Reading subtitles from Matroska file." msgstr "Matroska dosyasından altyazıları oku." #: ../src/preferences.cpp:63 ../src/preferences.cpp:65 -#: ../src/preferences.cpp:335 ../src/preferences.cpp:356 +#: ../src/preferences.cpp:341 ../src/preferences.cpp:362 msgid "General" msgstr "Genel" @@ -5140,11 +5392,11 @@ msgstr "Araç Çubuğu Simge Boyutu" msgid "Always" msgstr "Her Zaman" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Ask" msgstr "Sor" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Never" msgstr "Asla" @@ -5204,7 +5456,7 @@ msgstr "TTXT içe aktarma" msgid "Plain text import" msgstr "Düz metin içe aktarma" -#: ../src/preferences.cpp:127 ../src/preferences.cpp:371 +#: ../src/preferences.cpp:127 ../src/preferences.cpp:377 msgid "Audio" msgstr "Ses" @@ -5300,7 +5552,7 @@ msgstr "İmleç zamanı" msgid "Video position" msgstr "Video pozisyonu" -#: ../src/preferences.cpp:155 ../src/preferences.cpp:251 +#: ../src/preferences.cpp:155 ../src/preferences.cpp:257 msgid "Seconds boundaries" msgstr "Saniye sınırları" @@ -5328,560 +5580,640 @@ msgstr "Seçim değiştiğinde video'da satır başlangıcına atla" msgid "Automatically open audio when opening video" msgstr "Video açarken sesi otomatik olarak aç" +#: ../src/preferences.cpp:179 +msgid "Does nothing" +msgstr "Hiçbir şey yapmaz" + +#: ../src/preferences.cpp:179 +msgid "Pans the video" +msgstr "Videoyu kaydırır" + +#: ../src/preferences.cpp:179 +msgid "Pans the video (X/Y swapped)" +msgstr "Videoyu kaydırır (X/Y ters)" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box" +msgstr "Video kutusunu boyutlandırır" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box (reversed)" +msgstr "Video kutusunu boyutlandırır (ters)" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video" +msgstr "Videoyu yakınlaştırır" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video (reversed)" +msgstr "Videoyu yakınlaştırır (ters)" + #: ../src/preferences.cpp:181 +msgid "Scrolling on the video display" +msgstr "Video ekranında kaydırma (TEKERLEK)" + +#: ../src/preferences.cpp:182 +msgid "Ctrl+Scrolling on the video display" +msgstr "Video ekranında Ctrl+TEKERLEK (Kaydırma)" + +#: ../src/preferences.cpp:183 +msgid "Shift+Scrolling on the video display" +msgstr "Video ekranında Shift+TEKERLEK (Kaydırma)" + +#: ../src/preferences.cpp:187 msgid "Default Zoom" msgstr "Varsayılan yakınlaştırma" -#: ../src/preferences.cpp:183 +#: ../src/preferences.cpp:189 msgid "Fast jump step in frames" msgstr "Kareler arası hızlı sıçrama" -#: ../src/preferences.cpp:187 +#: ../src/preferences.cpp:193 msgid "Screenshot save path" msgstr "Ekran görüntüsü yolu" -#: ../src/preferences.cpp:189 +#: ../src/preferences.cpp:195 msgid "Script Resolution" msgstr "Betik Çözünürlüğü" -#: ../src/preferences.cpp:190 +#: ../src/preferences.cpp:196 msgid "Use resolution of first video opened" msgstr "İlk açılan videonun çözünürlüğünü kullan" -#: ../src/preferences.cpp:193 +#: ../src/preferences.cpp:199 msgid "Default width" msgstr "Varsayılan genişlik" -#: ../src/preferences.cpp:195 +#: ../src/preferences.cpp:201 msgid "Default height" msgstr "Varsayılan yükseklik" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always resample" msgstr "Her zaman yeniden örnekle" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always set" msgstr "Her zaman etkinleştir" -#: ../src/preferences.cpp:199 +#: ../src/preferences.cpp:205 msgid "Match video resolution on open" msgstr "Açılışta video çözünürlüğünü eşleştir" -#: ../src/preferences.cpp:206 +#: ../src/preferences.cpp:212 msgid "Interface" msgstr "Arayüz" -#: ../src/preferences.cpp:208 +#: ../src/preferences.cpp:214 msgid "Edit Box" msgstr "Düzenleme Kutusu" -#: ../src/preferences.cpp:209 +#: ../src/preferences.cpp:215 msgid "Enable call tips" msgstr "Yardım balonunu etkinleştir" -#: ../src/preferences.cpp:210 +#: ../src/preferences.cpp:216 msgid "Overwrite in time boxes" msgstr "Zaman kutularının üzerine yaz" -#: ../src/preferences.cpp:211 +#: ../src/preferences.cpp:217 msgid "Shift+Enter adds \\n" msgstr "Shift+Enter \\n ekler." -#: ../src/preferences.cpp:212 +#: ../src/preferences.cpp:218 msgid "Enable syntax highlighting" msgstr "Sözdizim vurgulamayı etkinleştir" -#: ../src/preferences.cpp:213 +#: ../src/preferences.cpp:219 msgid "Dictionaries path" msgstr "Sözlüklerin yolu" -#: ../src/preferences.cpp:216 +#: ../src/preferences.cpp:222 msgid "Character Counter" msgstr "Karakter Sayacı" -#: ../src/preferences.cpp:217 +#: ../src/preferences.cpp:223 msgid "Maximum characters per line" msgstr "Satır başına maksimum karakter" -#: ../src/preferences.cpp:218 +#: ../src/preferences.cpp:224 msgid "Characters Per Second Warning Threshold" msgstr "Saniye Başına Karakter Uyarı Eşiği" -#: ../src/preferences.cpp:219 +#: ../src/preferences.cpp:225 msgid "Characters Per Second Error Threshold" msgstr "Saniye Başına Karakter Hata Eşiği" -#: ../src/preferences.cpp:220 +#: ../src/preferences.cpp:226 msgid "Ignore whitespace" msgstr "Boşlukları yoksay" -#: ../src/preferences.cpp:221 +#: ../src/preferences.cpp:227 msgid "Ignore punctuation" msgstr "Noktalama işaretlerini yoksay" -#: ../src/preferences.cpp:223 +#: ../src/preferences.cpp:229 msgid "Grid" msgstr "Izgara" -#: ../src/preferences.cpp:224 +#: ../src/preferences.cpp:230 msgid "Focus grid on click" msgstr "Tıklamada ızgaraya odaklan" -#: ../src/preferences.cpp:225 +#: ../src/preferences.cpp:231 msgid "Highlight visible subtitles" msgstr "Görünen altyazıları vurgula" -#: ../src/preferences.cpp:226 +#: ../src/preferences.cpp:232 msgid "Hide overrides symbol" msgstr "Geçersiz kılma sembolünü gizle" -#: ../src/preferences.cpp:230 +#: ../src/preferences.cpp:236 msgid "Skip over whitespace" msgstr "Boşlukları atla" -#: ../src/preferences.cpp:245 +#: ../src/preferences.cpp:251 msgid "Audio Display" msgstr "Ses Ekranı" -#: ../src/preferences.cpp:246 +#: ../src/preferences.cpp:252 msgid "Play cursor" msgstr "Oynatma imleci" -#: ../src/preferences.cpp:247 +#: ../src/preferences.cpp:253 msgid "Line boundary start" msgstr "Satır sınırı başlangıcı" -#: ../src/preferences.cpp:248 +#: ../src/preferences.cpp:254 msgid "Line boundary end" msgstr "Satır sınırı sonu" -#: ../src/preferences.cpp:249 +#: ../src/preferences.cpp:255 msgid "Line boundary inactive line" msgstr "Aktif olmayan satır sınırı" -#: ../src/preferences.cpp:250 +#: ../src/preferences.cpp:256 msgid "Syllable boundaries" msgstr "Hece sınırları" -#: ../src/preferences.cpp:253 +#: ../src/preferences.cpp:259 msgid "Syntax Highlighting" msgstr "Sözdizim vurgulama" -#: ../src/preferences.cpp:254 +#: ../src/preferences.cpp:260 msgid "Background" msgstr "Arkaplan" -#: ../src/preferences.cpp:255 +#: ../src/preferences.cpp:261 msgid "Normal" msgstr "Normal" -#: ../src/preferences.cpp:256 +#: ../src/preferences.cpp:262 msgid "Comments" msgstr "Yorumlar" -#: ../src/preferences.cpp:257 +#: ../src/preferences.cpp:263 msgid "Drawing Commands" msgstr "Çizim Komutları" -#: ../src/preferences.cpp:258 +#: ../src/preferences.cpp:264 msgid "Drawing X Coords" msgstr "X Çizim Koordinatları" -#: ../src/preferences.cpp:259 +#: ../src/preferences.cpp:265 msgid "Drawing Y Coords" msgstr "Y Çizim Koordinatları" -#: ../src/preferences.cpp:260 +#: ../src/preferences.cpp:266 msgid "Underline Spline Endpoints" msgstr "Eğri Uç Noktalarının Altını Çiz" -#: ../src/preferences.cpp:262 +#: ../src/preferences.cpp:268 msgid "Brackets" msgstr "Köşeli Parantezler" -#: ../src/preferences.cpp:263 +#: ../src/preferences.cpp:269 msgid "Slashes and Parentheses" msgstr "Eğik Çizgi ve Parentezler" -#: ../src/preferences.cpp:264 +#: ../src/preferences.cpp:270 msgid "Tags" msgstr "Etiketler" -#: ../src/preferences.cpp:265 +#: ../src/preferences.cpp:271 msgid "Parameters" msgstr "Parametreler" -#: ../src/preferences.cpp:267 +#: ../src/preferences.cpp:273 msgid "Error Background" msgstr "Arkaplan Hatası" -#: ../src/preferences.cpp:268 +#: ../src/preferences.cpp:274 msgid "Line Break" msgstr "Boş Satır" -#: ../src/preferences.cpp:269 +#: ../src/preferences.cpp:275 msgid "Karaoke templates" msgstr "Karaoke şablonları" -#: ../src/preferences.cpp:270 +#: ../src/preferences.cpp:276 msgid "Karaoke variables" msgstr "Karaoke değişkenleri" -#: ../src/preferences.cpp:276 +#: ../src/preferences.cpp:282 msgid "Audio Color Schemes" msgstr "Ses Ekranı Renkleri" -#: ../src/preferences.cpp:278 ../src/preferences.cpp:387 +#: ../src/preferences.cpp:284 ../src/preferences.cpp:393 msgid "Spectrum" msgstr "Spektrum" -#: ../src/preferences.cpp:279 +#: ../src/preferences.cpp:285 msgid "Waveform" msgstr "Dalga formu" -#: ../src/preferences.cpp:281 +#: ../src/preferences.cpp:287 msgid "Subtitle Grid" msgstr "Altyazı Izgarası" -#: ../src/preferences.cpp:282 +#: ../src/preferences.cpp:288 msgid "Standard foreground" msgstr "Standart önplan" -#: ../src/preferences.cpp:283 +#: ../src/preferences.cpp:289 msgid "Standard background" msgstr "Standart arkaplan" -#: ../src/preferences.cpp:284 +#: ../src/preferences.cpp:290 msgid "Selection foreground" msgstr "Seçili önplan" -#: ../src/preferences.cpp:285 +#: ../src/preferences.cpp:291 msgid "Selection background" msgstr "Seçili arkaplan" -#: ../src/preferences.cpp:286 +#: ../src/preferences.cpp:292 msgid "Collision foreground" msgstr "Çatışık önplan" -#: ../src/preferences.cpp:287 +#: ../src/preferences.cpp:293 msgid "In frame background" msgstr "Karedeki satır arkaplanı" -#: ../src/preferences.cpp:288 +#: ../src/preferences.cpp:294 msgid "Comment background" msgstr "Yorum arkaplanı" -#: ../src/preferences.cpp:289 +#: ../src/preferences.cpp:295 msgid "Selected comment background" msgstr "Seçili yorum arkaplanı" -#: ../src/preferences.cpp:290 +#: ../src/preferences.cpp:296 msgid "Header background" msgstr "Başlık arka planı" -#: ../src/preferences.cpp:291 +#: ../src/preferences.cpp:297 msgid "Left Column" msgstr "Sol sütun" -#: ../src/preferences.cpp:292 +#: ../src/preferences.cpp:298 msgid "Active Line Border" msgstr "Aktif satır çerçevesi" -#: ../src/preferences.cpp:293 +#: ../src/preferences.cpp:299 msgid "Lines" msgstr "Satırlar" -#: ../src/preferences.cpp:294 +#: ../src/preferences.cpp:300 msgid "CPS Error" msgstr "CPS Hatası" -#: ../src/preferences.cpp:296 +#: ../src/preferences.cpp:302 msgid "Visual Typesetting Tools" msgstr "Görsel Dizgi Araçları" -#: ../src/preferences.cpp:297 +#: ../src/preferences.cpp:303 msgid "Primary Lines" msgstr "Birincil Satırlar" -#: ../src/preferences.cpp:298 +#: ../src/preferences.cpp:304 msgid "Secondary Lines" msgstr "İkincil Satırlar" -#: ../src/preferences.cpp:299 +#: ../src/preferences.cpp:305 msgid "Primary Highlight" msgstr "Birincil Vurgulama" -#: ../src/preferences.cpp:300 +#: ../src/preferences.cpp:306 msgid "Secondary Highlight" msgstr "İkincil Vurgulama" -#: ../src/preferences.cpp:303 +#: ../src/preferences.cpp:309 msgid "Visual Typesetting Tools Alpha" msgstr "Görsel Dizgi Araçları Alfa" -#: ../src/preferences.cpp:304 +#: ../src/preferences.cpp:310 msgid "Shaded Area" msgstr "Shaded Area" -#: ../src/preferences.cpp:313 +#: ../src/preferences.cpp:319 msgid "Backup" msgstr "Yedek" -#: ../src/preferences.cpp:315 +#: ../src/preferences.cpp:321 msgid "Automatic Save" msgstr "Otomatik Kayıt" -#: ../src/preferences.cpp:316 ../src/preferences.cpp:324 +#: ../src/preferences.cpp:322 ../src/preferences.cpp:330 msgid "Enable" msgstr "Etkinleştir" -#: ../src/preferences.cpp:319 +#: ../src/preferences.cpp:325 msgid "Interval in seconds" msgstr "Saniye cinsinden aralık" -#: ../src/preferences.cpp:320 ../src/preferences.cpp:326 -#: ../src/preferences.cpp:385 +#: ../src/preferences.cpp:326 ../src/preferences.cpp:332 +#: ../src/preferences.cpp:391 msgid "Path" msgstr "Ana yol" -#: ../src/preferences.cpp:321 +#: ../src/preferences.cpp:327 msgid "Autosave after every change" msgstr "Her değişiklikten sonra otomatik kaydet" -#: ../src/preferences.cpp:323 +#: ../src/preferences.cpp:329 msgid "Automatic Backup" msgstr "Otomatik Yedekleme" -#: ../src/preferences.cpp:337 +#: ../src/preferences.cpp:343 msgid "Base path" msgstr "Ana yol" -#: ../src/preferences.cpp:338 +#: ../src/preferences.cpp:344 msgid "Include path" msgstr "Aktarma yolu" -#: ../src/preferences.cpp:339 +#: ../src/preferences.cpp:345 msgid "Auto-load path" msgstr "Oto-yükleme yolu" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "0: Fatal" msgstr "0: Önemli Hata" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "1: Error" msgstr "1: Hata" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "2: Warning" msgstr "2: Uyarı" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "3: Hint" msgstr "3: İpucu" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "4: Debug" msgstr "4: Hata ayıklama" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "5: Trace" msgstr "5: İzleme" -#: ../src/preferences.cpp:343 +#: ../src/preferences.cpp:349 msgid "Trace level" msgstr "İzleme seviyesi" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "All scripts" msgstr "Tüm betikler" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Global autoload scripts" msgstr "Genel betik oto yükleme" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "No scripts" msgstr "Betik yok" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Subtitle-local scripts" msgstr "Yerel-altyazı betikleri" -#: ../src/preferences.cpp:347 +#: ../src/preferences.cpp:353 msgid "Autoreload on Export" msgstr "Dışarı aktarmada otomatik yenile" -#: ../src/preferences.cpp:354 +#: ../src/preferences.cpp:360 msgid "Advanced" msgstr "Gelişmiş" -#: ../src/preferences.cpp:358 +#: ../src/preferences.cpp:364 msgid "" -"Changing these settings might result in bugs and/or crashes. Do not touch " +"Changing these settings might result in bugs and/or crashes. Do not touch " "these unless you know what you're doing." msgstr "" -"Bu ayarların değiştirilmesi hatalara ve/veya çökmelere neden olabilir. Ne " +"Bu ayarları değiştirmek hatalara ve/veya çökmelere neden olabilir. Ne " "yaptığınızı bilmiyorsanız bunlara dokunmayın." -#: ../src/preferences.cpp:373 ../src/preferences.cpp:440 +#: ../src/preferences.cpp:379 ../src/preferences.cpp:446 msgid "Expert" msgstr "Gelişmiş" -#: ../src/preferences.cpp:376 +#: ../src/preferences.cpp:382 msgid "Audio provider" msgstr "Ses sağlayıcı" -#: ../src/preferences.cpp:379 +#: ../src/preferences.cpp:385 msgid "Audio player" msgstr "Ses oynatıcısı" -#: ../src/preferences.cpp:381 +#: ../src/preferences.cpp:387 msgid "Cache" msgstr "Önbellek" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "Hard Disk" msgstr "Hard Disk" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "None (NOT RECOMMENDED)" msgstr "Hiçbiri (ÖNERİLMEZ)" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "RAM" msgstr "RAM" -#: ../src/preferences.cpp:384 +#: ../src/preferences.cpp:390 msgid "Cache type" msgstr "Önbellek tipi" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Better quality" msgstr "Daha iyi kalite" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "High quality" msgstr "Yüksek kalite" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Insane quality" msgstr "Maksimum kalite" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Regular quality" msgstr "Normal kalite" -#: ../src/preferences.cpp:391 +#: ../src/preferences.cpp:397 msgid "Quality" msgstr "Kalite" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Compressed" msgstr "Sıkıştırılmış" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Extended" msgstr "Genişletilmiş" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Linear" msgstr "Doğrusal" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Logarithmic" msgstr "Logaritmik" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Medium" msgstr "Orta" -#: ../src/preferences.cpp:395 +#: ../src/preferences.cpp:401 msgid "Frequency mapping" msgstr "Frekans haritalaması" -#: ../src/preferences.cpp:397 +#: ../src/preferences.cpp:403 msgid "Cache memory max (MB)" msgstr "Maksimum önbellek hafızası (MB)" -#: ../src/preferences.cpp:403 +#: ../src/preferences.cpp:409 msgid "Avisynth down-mixer" msgstr "Avisynth alt-mikser" -#: ../src/preferences.cpp:404 +#: ../src/preferences.cpp:410 msgid "Force sample rate" msgstr "Örnekleme hızını zorla" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Abort" msgstr "İptal" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Ignore" msgstr "Yoksay" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Stop" msgstr "Dur" -#: ../src/preferences.cpp:412 +#: ../src/preferences.cpp:418 msgid "Audio indexing error handling mode" msgstr "Ses dizini hata işleme modu" -#: ../src/preferences.cpp:414 +#: ../src/preferences.cpp:420 msgid "Always index all audio tracks" msgstr "Her zaman tüm ses parçalarını dizinle" -#: ../src/preferences.cpp:419 +#: ../src/preferences.cpp:425 msgid "Portaudio device" msgstr "Portaudio aygıtı" -#: ../src/preferences.cpp:424 +#: ../src/preferences.cpp:430 msgid "OSS Device" msgstr "OSS Aygıtı" -#: ../src/preferences.cpp:429 +#: ../src/preferences.cpp:435 msgid "Buffer latency" msgstr "Arabellek gecikmesi" -#: ../src/preferences.cpp:430 +#: ../src/preferences.cpp:436 msgid "Buffer length" msgstr "Arabellek uzunluğu" -#: ../src/preferences.cpp:443 +#: ../src/preferences.cpp:449 msgid "Video provider" msgstr "Video sağlayıcısı" -#: ../src/preferences.cpp:446 +#: ../src/preferences.cpp:452 msgid "Subtitles provider" msgstr "Altyazı sağlayıcısı" -#: ../src/preferences.cpp:450 +#: ../src/preferences.cpp:456 msgid "Allow pre-2.56a Avisynth" msgstr "pre-2.56a Avisynth'a izin ver" -#: ../src/preferences.cpp:452 +#: ../src/preferences.cpp:458 msgid "Avisynth memory limit" msgstr "Avisynth hafıza limiti" -#: ../src/preferences.cpp:460 +#: ../src/preferences.cpp:464 +msgid "Debug" +msgstr "Hata Ayıklama" + +#: ../src/preferences.cpp:464 +msgid "Fatal" +msgstr "Önemli Hata" + +#: ../src/preferences.cpp:464 +msgid "Info" +msgstr "Bilgi" + +#: ../src/preferences.cpp:464 +msgid "Panic" +msgstr "Panik" + +#: ../src/preferences.cpp:464 +msgid "Quiet" +msgstr "Sessiz" + +#: ../src/preferences.cpp:464 +msgid "Verbose" +msgstr "Ayrıntılı" + +#: ../src/preferences.cpp:464 ../src/project.cpp:318 +msgid "Warning" +msgstr "Uyarı" + +#: ../src/preferences.cpp:466 msgid "Debug log verbosity" msgstr "Hata ayıklama günlüğü ayrıntı seviyesi" -#: ../src/preferences.cpp:462 +#: ../src/preferences.cpp:468 msgid "Decoding threads" msgstr "Çözümleme iş parçacıkları" -#: ../src/preferences.cpp:463 +#: ../src/preferences.cpp:469 msgid "Enable unsafe seeking" msgstr "Güvensiz aramayı etkinleştir" -#: ../src/preferences.cpp:599 +#: ../src/preferences.cpp:605 msgid "Hotkeys" msgstr "Kısayollar" -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:609 +msgid "Search" +msgstr "Arama" + +#: ../src/preferences.cpp:625 ../src/preferences.cpp:628 +msgid "Hotkey" +msgstr "Kısayollar" + +#: ../src/preferences.cpp:626 ../src/preferences.cpp:631 +msgid "Command" +msgstr "Komutlar" + +#: ../src/preferences.cpp:705 msgid "" "Are you sure that you want to restore the defaults? All your settings will " "be overridden." @@ -5889,15 +6221,15 @@ msgstr "" "Varsayılanlara geri dönmek istediğinizden emin misiniz? Tüm ayarlar " "sıfırlanacak." -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:705 msgid "Restore defaults?" msgstr "Varsayılana geri dön?" -#: ../src/preferences.cpp:715 +#: ../src/preferences.cpp:723 msgid "Preferences" msgstr "Tercihler" -#: ../src/preferences.cpp:743 +#: ../src/preferences.cpp:751 msgid "&Restore Defaults" msgstr "&Varsayılana Geri Dön" @@ -5913,9 +6245,21 @@ msgstr "Gözat" msgid "Choose..." msgstr "Seç" +msgid "OK" +msgstr "Tamam" + #: ../src/preferences_base.cpp:251 msgid "Font Size" -msgstr "Font boyutu" +msgstr "Font Boyutu" + +#: ../src/project.cpp:85 +msgid "Error loading file" +msgstr "Dosya yüklenirken hata oluştu" + +#: ../src/project.cpp:111 ../src/project.cpp:130 +#, c-format +msgid "%s not found." +msgstr "%s bulunamadı." #: ../src/project.cpp:186 msgid "Do you want to load/unload the associated files?" @@ -5989,7 +6333,19 @@ msgstr "" "\n" "Aşağıdaki sağlayıcılar denendi:\n" -#: ../src/resolution_resampler.cpp:288 +#: ../src/project.cpp:368 +msgid "Failed to parse timecodes file: " +msgstr "Zaman kodları dosyası ayrıştırılamadı: " + +#: ../src/project.cpp:394 +msgid "Failed to parse keyframes file: " +msgstr "Anahtar kare dosyası ayrıştırılamadı: " + +#: ../src/project.cpp:398 +msgid "Keyframes file in unknown format: " +msgstr "Bilinmeyen formatta anahtar kare dosyası: " + +#: ../src/resolution_resampler.cpp:300 msgid "resolution resampling" msgstr "çözünürlük düzenleniyor" @@ -6017,14 +6373,22 @@ msgstr "%s öğesine yapılan değişiklikleri kaydetmek istiyor musunuz?" msgid "Unsaved changes" msgstr "Kaydedilmemiş değişiklikler" +#: ../src/subs_controller.cpp:265 ../src/subs_controller.cpp:404 +msgid "Untitled" +msgstr "Adsız" + #: ../src/subs_controller.cpp:279 #, c-format msgid "File backup saved as \"%s\"." msgstr "Dosya yedeği \"%s\" olarak kaydedildi." -#: ../src/subs_controller.cpp:404 -msgid "Untitled" -msgstr "Adsız" +#: ../src/subs_controller.cpp:282 +msgid "Exception when attempting to autosave file: " +msgstr "Dosya otomatik kaydedilmeye çalışılırken istisna: " + +#: ../src/subs_controller.cpp:285 +msgid "Unhandled exception when attempting to autosave file." +msgstr "Dosya otomatik kaydedilmeye çalışılırken işlenmemiş istisna." #: ../src/subs_controller.cpp:406 msgid "untitled" @@ -6210,6 +6574,18 @@ msgstr "Eşanlamlılar dili" msgid "Disable" msgstr "Etkisiz kıl" +#: ../src/subs_preview.cpp:142 +msgid "" +"Could not get any subtitles provider for the preview box. Make sure that you " +"have a provider installed." +msgstr "" +"Önizleme kutusu için altyazı sağlayıcısı bulunamadı. Bir sağlayıcının yüklü " +"olduğundan emin olun." + +#: ../src/subs_preview.cpp:143 +msgid "No subtitles provider" +msgstr "Altyazı sağlayıcısı yok" + #: ../src/subtitle_format.cpp:102 #, c-format msgid "From video (%g)" @@ -6300,6 +6676,18 @@ msgstr "Geçerli kare zamanı ve numarası" msgid "Time of this frame relative to start and end of current subs" msgstr "Bu karenin zamanı geçerli altyazının başlangıç ve bitişine bağlıdır" +#: ../src/video_provider_manager.cpp:78 +msgid "file not found." +msgstr "dosya bulunamadı." + +#: ../src/video_provider_manager.cpp:84 +msgid "video is not in a supported format." +msgstr "video desteklenen bir formatta değil." + +#: ../src/video_provider_manager.cpp:101 +msgid "Could not open " +msgstr "Açılamadı " + #: ../src/visual_tool.cpp:119 msgid "visual typesetting" msgstr "görsel dizgi" @@ -6499,6 +6887,10 @@ msgstr "" msgid "Add edgeblur" msgstr "Kenar bulanıklığı ekle" +msgctxt "standard Windows menu" +msgid "&Help" +msgstr "&Yardım" + #: ../automation/autoload/macro-1-edgeblur.lua:7 msgid "A demo macro showing how to do simple line modification in Automation 4" msgstr "" @@ -6508,9 +6900,22 @@ msgstr "" msgid "Adds \\be1 tags to all selected lines" msgstr "Seçilen tüm satırlara \\be1 etiketleri ekler" +#: ../automation/autoload/macro-2-mkfullwitdh.lua:6 +msgid "Make text fullwidth" +msgstr "Metni tam genişlikli yap" + +#: ../automation/autoload/macro-2-mkfullwitdh.lua:7 +msgid "" +"Shows how to use the unicode include to iterate over characters and a lookup " +"table to convert those characters to something else." +msgstr "" +"Karakterler üzerinde gezinmek için unicode include'unun ve bu karakterleri " +"başka bir şeye dönüştürmek için bir arama tablosunun nasıl kullanılacağını " +"gösterir." + #: ../automation/autoload/macro-2-mkfullwitdh.lua:77 msgid "Make fullwidth" -msgstr "Tam genişlik yap" +msgstr "Tam genişlikli yap" #: ../automation/autoload/macro-2-mkfullwitdh.lua:80 msgid "Convert Latin letters to SJIS fullwidth letters" @@ -6536,6 +6941,9 @@ msgstr "Seçili satırlardan tüm geçersiz kılma etiketlerini kaldır" msgid "strip tags" msgstr "etiketleri kaldır" +msgid "&Apply" +msgstr "&Uygula" + #: ../packages/desktop/aegisub.desktop.in.in:4 #: ../packages/desktop/aegisub.metainfo.xml.in.in:6 msgid "Aegisub" @@ -6674,6 +7082,31 @@ msgstr "" "gelir, ancak herhangi bir garanti verilmemektedir.%n%nKaynak koda nasıl " "erişileceği hakkında bilgi için Aegisub web sitesine bakın." +#~ msgid "anime" +#~ msgstr "anime" + +#~ msgid "movie" +#~ msgstr "film" + +#~ msgid "subtitle" +#~ msgstr "altyazı" + +#~ msgid "translate" +#~ msgstr "çeviri" + +#~ msgid "Aegisub Group" +#~ msgstr "Aegisub Grubu" + +#~ msgid "&Opaque box" +#~ msgstr "&Opaklık kutusu" + +#~ msgid "" +#~ "When selected, display an opaque box behind the subtitles instead of an " +#~ "outline around the text" +#~ msgstr "" +#~ "Seçilirse, yaznın etrafındaki konturun arkasında opaklık kutusu " +#~ "gözükecektir" + #~ msgid "Drawings" #~ msgstr "Çizimler" diff --git a/po/uk_UA.po b/po/uk_UA.po index 2ad68095d9..90930b9694 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -3593,8 +3593,8 @@ msgid "Margin offset" msgstr "Зсув меж" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4781,16 +4781,16 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Роздільна здатність, вказана у скрипті, і роздільна здатність завантаженого " "відео не збігаються.\n" "\n" -"Роздільна здатність відео:\t%d x %d\n" -"Роздільна здатність скрипта: \t%d x %d\n" +"Роздільна здатність відео:\t%d × %d\n" +"Роздільна здатність скрипта: \t%d × %d\n" "\n" "Встановити роздільну здатність скрипта, як у відео?" diff --git a/po/vi.po b/po/vi.po index b899d96a95..958a54e45a 100644 --- a/po/vi.po +++ b/po/vi.po @@ -3619,8 +3619,8 @@ msgid "Margin offset" msgstr "Khoảng bù lề" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "x" +msgid "×" +msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 msgid "YCbCr Matrix:" @@ -4805,15 +4805,15 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "Độ phân giải của video được nạp và độ phân giải của phụ đề không được khớp\n" "\n" -"Độ phân giải video:\t%d x %d\n" -"Độ phân giải phụ đề:\t%d x %d\n" +"Độ phân giải video:\t%d × %d\n" +"Độ phân giải phụ đề:\t%d × %d\n" "\n" "Thay đổi độ phân giải của phụ đề để khớp với video?" diff --git a/po/zh_CN.po b/po/zh_CN.po index 49b69a3e6e..ba86231bd4 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,101 +1,123 @@ # This file is distributed under the same license as the Aegisub package. # Niels Martin Hansen , 2005-2013. -# +# +# msgid "" +# msgstr "" +# "Project-Id-Version: Aegisub 3.2\n" +# "Report-Msgid-Bugs-To: \n" +# "POT-Creation-Date: 2025-01-13 21:34+0100\n" +# "PO-Revision-Date: 2024-12-18 17:29+0800\n" +# "Last-Translator: Oborozuki \n" +# "Language-Team: Vmoe Fansub \n" +# "Language: zh_CN\n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=UTF-8\n" +# "Content-Transfer-Encoding: 8bit\n" +# "Plural-Forms: nplurals=1; plural=0;\n" +# "X-Generator: Poedit 3.5\n" +# "X-Poedit-SourceCharset: UTF-8\n" +# msgid "" msgstr "" -"Project-Id-Version: Aegisub 3.2\n" +"Project-Id-Version: arch1t3cht / Aegisub Feature Release 12+ \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-02 21:53+0100\n" -"PO-Revision-Date: 2024-12-18 17:29+0800\n" -"Last-Translator: Oborozuki \n" -"Language-Team: Vmoe Fansub \n" +"POT-Creation-Date: 2025-12-01 20:46+0100\n" +"PO-Revision-Date: 2025-12-07 22:13+0800\n" +"Last-Translator: op200 <>\n" +"Language-Team: \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.5\n" -"X-Poedit-SourceCharset: UTF-8\n" + +#: ../src/aegisublocale.cpp:113 ../src/command/app.cpp:156 +msgid "Language" +msgstr "语言" + +#: ../src/aegisublocale.cpp:113 +msgid "Please choose a language:" +msgstr "请选择语言:" #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" -msgstr "" +msgstr "自动检测文本的书写方向 (libass 特有扩展)" #: ../src/ass_style.cpp:197 msgid "ANSI" -msgstr "ANSI编码" +msgstr "ANSI" #: ../src/ass_style.cpp:198 ../src/command/video.cpp:144 msgid "Default" -msgstr "默认" +msgstr "Default (默认)" #: ../src/ass_style.cpp:199 msgid "Symbol" -msgstr "符号编码" +msgstr "Symbol" #: ../src/ass_style.cpp:200 msgid "Mac" -msgstr "Mac编码" +msgstr "Mac" #: ../src/ass_style.cpp:201 msgid "Shift_JIS" -msgstr "日文Shift_JIS" +msgstr "Shift_JIS (日文)" #: ../src/ass_style.cpp:202 msgid "Hangeul" -msgstr "韩文Hangeul" +msgstr "Hangeul (韩文)" #: ../src/ass_style.cpp:203 msgid "Johab" -msgstr "韩文Johab" +msgstr "Johab (韩文)" #: ../src/ass_style.cpp:204 msgid "GB2312" -msgstr "简体中文GB2312" +msgstr "GB2312 (简体中文)" #: ../src/ass_style.cpp:205 msgid "Chinese BIG5" -msgstr "繁体中文BIG5" +msgstr "Chinese BIG5 (繁体中文)" #: ../src/ass_style.cpp:206 msgid "Greek" -msgstr "希腊文" +msgstr "Greek (希腊文)" #: ../src/ass_style.cpp:207 msgid "Turkish" -msgstr "土耳其文" +msgstr "Turkish (土耳其文)" #: ../src/ass_style.cpp:208 msgid "Vietnamese" -msgstr "越南文" +msgstr "Vietnamese (越南文)" #: ../src/ass_style.cpp:209 msgid "Hebrew" -msgstr "希伯来文" +msgstr "Hebrew (希伯来文)" #: ../src/ass_style.cpp:210 msgid "Arabic" -msgstr "阿拉伯文" +msgstr "Arabic (阿拉伯文)" #: ../src/ass_style.cpp:211 msgid "Baltic" -msgstr "波罗的海文" +msgstr "Baltic (波罗的海文)" #: ../src/ass_style.cpp:212 msgid "Russian" -msgstr "俄文" +msgstr "Russian (俄文)" #: ../src/ass_style.cpp:213 msgid "Thai" -msgstr "泰文" +msgstr "Thai (泰文)" #: ../src/ass_style.cpp:214 msgid "East European" -msgstr "东欧语系" +msgstr "East European (东欧语系)" #: ../src/ass_style.cpp:215 msgid "OEM" -msgstr "OEM编码" +msgstr "OEM" #: ../src/audio_box.cpp:73 msgid "Horizontal zoom" @@ -153,57 +175,137 @@ msgstr "最大 + 平均" #: ../src/audio_timing_dialogue.cpp:514 ../src/audio_timing_dialogue.cpp:520 #: ../src/command/time.cpp:176 msgid "timing" -msgstr "时间轴" +msgstr "调整时轴" #: ../src/audio_timing_karaoke.cpp:240 msgid "karaoke timing" -msgstr "卡拉OK时间轴" +msgstr "调整卡拉OK时轴" + +#: ../src/auto4_base.cpp:344 +msgid "" +"A script in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:347 +msgid "" +"Multiple scripts in the Automation autoload directory failed to load.\n" +"Please review the errors, fix them and use the Rescan Autoload Dir button in " +"Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:350 +msgid "" +"A script in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:353 +msgid "" +"Multiple scripts in the Automation autoload directory loaded with warnings.\n" +"Please review the warnings, fix them and use the Rescan Autoload Dir button " +"in Automation Manager to load the scripts again." +msgstr "" + +#: ../src/auto4_base.cpp:393 +#, c-format +msgid "" +"Automation Script referenced with unknown location specifier character.\n" +"Location specifier found: %c\n" +"Filename specified: %s" +msgstr "" + +#: ../src/auto4_base.cpp:401 +#, c-format +msgid "" +"Automation Script referenced could not be found.\n" +"Filename specified: %c%s\n" +"Searched relative to: %s\n" +"Resolved filename: %s" +msgstr "" -#: ../src/auto4_base.cpp:454 +#: ../src/auto4_base.cpp:462 #, c-format msgid "" "Failed to load Automation script '%s':\n" "%s" msgstr "" -"一个自动化脚本载入失败,文件名: '%s',错误报告:\n" -" %s" +"自动化脚本 '%s' 载入失败:\n" +"%s" + +#: ../src/auto4_base.cpp:465 +#, c-format +msgid "" +"Warning when loading Automation script '%s':\n" +"%s" +msgstr "" +"自动化脚本 '%s' 载入时发出警告:\n" +"%s" -#: ../src/auto4_base.cpp:461 +#: ../src/auto4_base.cpp:472 #, c-format msgid "The file was not recognised as an Automation script: %s" -msgstr "该文件未被识别为自动化脚本: %s" +msgstr "该文件未被识别为自动化脚本: %s" -#: ../src/auto4_base.cpp:490 ../src/command/audio.cpp:84 +#: ../src/auto4_base.cpp:501 ../src/command/audio.cpp:84 #: ../src/command/keyframe.cpp:76 ../src/command/timecode.cpp:73 #: ../src/command/timecode.cpp:93 ../src/command/video.cpp:592 msgid "All Files" msgstr "所有文件" -#: ../src/auto4_base.cpp:496 ../src/command/keyframe.cpp:74 -#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 -#: ../src/subtitle_format.cpp:318 +#: ../src/auto4_base.cpp:507 ../src/command/keyframe.cpp:74 +#: ../src/dialog_attachments.cpp:170 ../src/subtitle_format.cpp:318 msgid "All Supported Formats" msgstr "所有支持格式" -#: ../src/auto4_base.cpp:502 +#: ../src/auto4_base.cpp:513 msgid "File was not recognized as a script" msgstr "文件未被识别为脚本" +#: ../src/auto4_lua.cpp:180 +#, c-format +msgid "" +"Warning in Automation script '%s':\n" +"%s" +msgstr "" +"自动化脚本 '%s' 发出警告:\n" +"%s" + +#: ../src/auto4_lua.cpp:458 +msgid "Could not initialize Lua state" +msgstr "无法初始化 Lua 状态" + +#: ../src/auto4_lua.cpp:541 +#, c-format +msgid "" +"Error initialising Lua script \"%s\":\n" +"\n" +"%s" +msgstr "" + +#: ../src/auto4_lua.cpp:551 +msgid "" +"Attempted to load an Automation 3 script as an Automation 4 Lua script. " +"Automation 3 is no longer supported." +msgstr "" + #: ../src/charset_detect.cpp:50 msgid "" "Aegisub could not narrow down the character set to a single one.\n" "Please pick one below:" msgstr "" "Aegisub无法确定文字编码\n" -"请从下列中选择:" +"请从下列中选择: " #: ../src/charset_detect.cpp:51 msgid "Choose character set" -msgstr "选择文字编码" +msgstr "选择文字编码: " #: ../src/command/app.cpp:56 msgid "&About" -msgstr "关于(&A)…" +msgstr "关于(&A)" #: ../src/command/app.cpp:57 msgid "About" @@ -277,10 +379,6 @@ msgstr "退出程序" msgid "&Language..." msgstr "语言(&L)… (Language)" -#: ../src/command/app.cpp:156 -msgid "Language" -msgstr "语言" - #: ../src/command/app.cpp:157 msgid "Select Aegisub interface language" msgstr "选择Aegisub界面语言" @@ -325,11 +423,11 @@ msgstr "配置Aegisub" #: ../src/command/app.cpp:220 ../src/command/app.cpp:221 msgid "Toggle global hotkey overrides" -msgstr "切换全局热键模式" +msgstr "切换全局快捷键模式" #: ../src/command/app.cpp:222 msgid "Toggle global hotkey overrides (Medusa Mode)" -msgstr "切换全局热键模式(Medusa模式)" +msgstr "切换全局快捷键模式 (Medusa模式)" #: ../src/command/app.cpp:237 msgid "Toggle the main toolbar" @@ -357,27 +455,27 @@ msgstr "检查是否有可用的新版Aegisub" #: ../src/command/app.cpp:270 ../src/command/app.cpp:271 msgid "Minimize" -msgstr "" +msgstr "最小化" #: ../src/command/app.cpp:272 msgid "Minimize the active window" -msgstr "" +msgstr "最小化当前窗口" #: ../src/command/app.cpp:281 ../src/command/app.cpp:282 msgid "Zoom" -msgstr "" +msgstr "缩放" #: ../src/command/app.cpp:283 msgid "Maximize the active window" -msgstr "" +msgstr "最大化当前窗口" #: ../src/command/app.cpp:292 ../src/command/app.cpp:293 msgid "Bring All to Front" -msgstr "" +msgstr "全部置顶" #: ../src/command/app.cpp:294 msgid "Bring forward all open documents to the front" -msgstr "" +msgstr "置顶所有窗口" #: ../src/command/audio.cpp:65 msgid "&Close Audio" @@ -484,13 +582,12 @@ msgid "Play the current audio selection, ignoring changes made while playing" msgstr "播放当前选择部分音频,播放时忽略所做的更改" #: ../src/command/audio.cpp:205 ../src/command/audio.cpp:206 -#: ../src/command/video.cpp:647 msgid "Play current line" msgstr "播放当前行" #: ../src/command/audio.cpp:207 msgid "Play the audio for the current line" -msgstr "播放当前行" +msgstr "" #: ../src/command/audio.cpp:220 ../src/command/audio.cpp:221 msgid "Play audio selection" @@ -547,17 +644,17 @@ msgstr "提交" #: ../src/command/audio.cpp:340 msgid "Commit any pending audio timing changes" -msgstr "提交所有在波形上对时间的更改" +msgstr "提交所有在波形上对时轴的更改" #: ../src/command/audio.cpp:354 ../src/command/audio.cpp:355 msgid "Commit and use default timing for next line" -msgstr "提交并在下一行使用默认的时间轴" +msgstr "提交并在下一行使用默认的时轴" #: ../src/command/audio.cpp:356 msgid "" "Commit any pending audio timing changes and reset the next line's times to " "the default" -msgstr "提交所有挂起的音频时间轴更改,并重置下一行的时间为默认" +msgstr "提交所有在波形上对时轴的更改,并将下一行的时轴重置为默认" #: ../src/command/audio.cpp:369 ../src/command/audio.cpp:370 msgid "Commit and move to next line" @@ -565,7 +662,7 @@ msgstr "接受更改并移动到下一行" #: ../src/command/audio.cpp:371 msgid "Commit any pending audio timing changes and move to the next line" -msgstr "提交所有通过音频对时间的更改并移动到下一行" +msgstr "提交所有在波形上对时轴的更改,并移动到下一行" #: ../src/command/audio.cpp:384 ../src/command/audio.cpp:385 msgid "Commit and stay on current line" @@ -573,7 +670,7 @@ msgstr "提交并留在当前行" #: ../src/command/audio.cpp:386 msgid "Commit any pending audio timing changes and stay on the current line" -msgstr "提交所有通过音频对时间的更改并留在当前行" +msgstr "提交所有在波形上对时轴的更改,并留在当前行" #: ../src/command/audio.cpp:397 ../src/command/audio.cpp:398 msgid "Go to selection" @@ -669,7 +766,7 @@ msgid "&Automation..." msgstr "自动化(&A)…" #: ../src/command/automation.cpp:74 ../src/command/automation.cpp:86 -#: ../src/preferences.cpp:333 +#: ../src/preferences.cpp:339 msgid "Automation" msgstr "自动化" @@ -682,7 +779,7 @@ msgid "" "Open automation manager. Ctrl: Rescan autoload folder. Ctrl+Shift: Rescan " "autoload folder and reload all automation scripts" msgstr "" -"打开自动化脚本管理器。按Ctrl:重新扫描自动加载文件夹。按Ctrl + Shift:重新扫" +"打开自动化脚本管理器。按Ctrl: 重新扫描自动加载文件夹。按Ctrl + Shift: 重新扫" "描自动加载文件夹,并重新加载所有自动化脚本" #: ../src/command/command.cpp:35 @@ -708,7 +805,7 @@ msgstr "主要颜色" #: ../src/command/edit.cpp:393 msgid "Set the primary fill color (\\c) at the cursor position" -msgstr "设置主要填充色标签(\\c),应用于光标的位置之后" +msgstr "在文本输入光标后插入并设置主要颜色标签(\\c)" #: ../src/command/edit.cpp:403 msgid "Secondary Color..." @@ -720,7 +817,7 @@ msgstr "次要颜色" #: ../src/command/edit.cpp:405 msgid "Set the secondary (karaoke) fill color (\\2c) at the cursor position" -msgstr "设置次要填充色(用于卡拉OK效果)标签(\\2c),应用于光标的位置之后" +msgstr "在文本输入光标后插入并设置次要颜色标签(\\2c) (用于卡拉OK)" #: ../src/command/edit.cpp:415 msgid "Outline Color..." @@ -819,15 +916,15 @@ msgstr "设置字体" #: ../src/command/edit.cpp:543 msgid "Find and R&eplace..." -msgstr "查找替换(&E)…" +msgstr "查找与替换(&E)…" #: ../src/command/edit.cpp:544 msgid "Find and Replace" -msgstr "搜索替换" +msgstr "查找与替换" #: ../src/command/edit.cpp:545 msgid "Find and replace words in subtitles" -msgstr "在字幕中查找并替换字符串" +msgstr "在字幕中查找与替换字符串" #: ../src/command/edit.cpp:606 msgid "&Copy Lines" @@ -867,7 +964,7 @@ msgstr "删除行" #: ../src/command/edit.cpp:648 msgid "Delete currently selected lines" -msgstr "删除当前所选行" +msgstr "删除所选行" #: ../src/command/edit.cpp:651 msgid "delete lines" @@ -902,7 +999,7 @@ msgid "" "Split the current line into a line which ends on the current frame and a " "line which starts on the next frame" msgstr "" -"将当前行以当前帧的时间为界分割为两行,一行在当前帧结束,另一行在下一帧开始" +"将当前行以当前帧的时间为界分割为两行,第一行在当前帧结束,第二行在后一帧开始" #: ../src/command/edit.cpp:746 ../src/command/edit.cpp:747 msgid "Split lines before current frame" @@ -913,7 +1010,7 @@ msgid "" "Split the current line into a line which ends on the previous frame and a " "line which starts on the current frame" msgstr "" -"将当前行以当前帧的时间为界分割为两行,一行在前一帧结束,另一行在当前帧开始" +"将当前行以当前帧的时间为界分割为两行,第一行在前一帧结束,第二行在当前帧开始" #: ../src/command/edit.cpp:788 msgid "As &Karaoke" @@ -929,7 +1026,7 @@ msgstr "将所选行合并为一行,视为卡拉OK" #: ../src/command/edit.cpp:793 msgid "join as karaoke" -msgstr "合并(视为卡拉OK)" +msgstr "合并 (视为卡拉OK)" #: ../src/command/edit.cpp:799 msgid "&Concatenate" @@ -979,7 +1076,7 @@ msgstr "选择性粘贴…(&O)" #: ../src/command/edit.cpp:885 msgid "Paste Lines Over" -msgstr "选择性粘贴…" +msgstr "选择性粘贴" #: ../src/command/edit.cpp:886 msgid "Paste subtitles over others" @@ -995,7 +1092,7 @@ msgstr "重组行" #: ../src/command/edit.cpp:970 msgid "Recombine subtitles which have been split and merged" -msgstr "重新组合已被分割及合并的字幕" +msgstr "重新组合存在分割与合并的字幕行" #: ../src/command/edit.cpp:1040 msgid "combining" @@ -1003,11 +1100,11 @@ msgstr "组合中" #: ../src/command/edit.cpp:1046 ../src/command/edit.cpp:1047 msgid "Split Lines (by karaoke)" -msgstr "分割行(按照卡拉OK)" +msgstr "分割行 (按照卡拉OK)" #: ../src/command/edit.cpp:1048 msgid "Use karaoke timing to split line into multiple smaller lines" -msgstr "使用卡拉OK时间轴把行分成多个更小的行" +msgstr "根据卡拉OK标签将行分割成多个更小的行" #: ../src/command/edit.cpp:1082 msgid "splitting" @@ -1016,34 +1113,34 @@ msgstr "分割" #: ../src/command/edit.cpp:1114 ../src/command/edit.cpp:1115 #: ../src/subs_edit_ctrl.cpp:398 msgid "Split at cursor (estimate times)" -msgstr "在光标处分割(估算时间)" +msgstr "在文本输入光标处分割 (估算时轴)" #: ../src/command/edit.cpp:1116 msgid "" "Split the current line at the cursor, dividing the original line's duration " "between the new ones" -msgstr "在光标处分割所选行,把原始行的时段分配给新的两行" +msgstr "在文本输入光标处分割行,按字符数量计算分割位置的时轴" #: ../src/command/edit.cpp:1130 ../src/command/edit.cpp:1131 #: ../src/subs_edit_ctrl.cpp:397 msgid "Split at cursor (preserve times)" -msgstr "在光标处分割(保留原时间轴)" +msgstr "在文本输入光标处分割 (时轴不变)" #: ../src/command/edit.cpp:1132 msgid "" "Split the current line at the cursor, setting both lines to the original " "line's times" -msgstr "在光标处分割所选行,将新的两行的开始结束时间设为原始行的开始结束时间" +msgstr "在文本输入光标处分割行,新行的时轴与原行一致" #: ../src/command/edit.cpp:1141 ../src/command/edit.cpp:1142 msgid "Split at cursor (at video frame)" -msgstr "在光标处分割(以视频帧)" +msgstr "在文本输入光标处分割 (以视频帧)" #: ../src/command/edit.cpp:1143 msgid "" "Split the current line at the cursor, dividing the line's duration at the " "current video frame" -msgstr "在光标处分割所选行,以当前帧的时间分割行的持续时间" +msgstr "在文本输入光标处分割行,以当前帧的时轴分割" #: ../src/command/edit.cpp:1159 msgid "Redo last undone action" @@ -1095,14 +1192,14 @@ msgstr "还原" #: ../src/command/edit.cpp:1212 msgid "Revert the active line to its initial state (shown in the upper editor)" -msgstr "恢复编辑框的内容到它原来的状态(编辑框上方显示的内容)" +msgstr "恢复编辑框的内容到它原来的状态 (编辑框上方显示的内容)" #: ../src/command/edit.cpp:1217 msgid "revert line" msgstr "还原行" #: ../src/command/edit.cpp:1223 ../src/command/edit.cpp:1224 -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Clear" msgstr "清除" @@ -1120,7 +1217,7 @@ msgstr "清除文本" #: ../src/command/edit.cpp:1239 msgid "Clear the current line's text, leaving override tags" -msgstr "清除当前行的文本,只保留特效标签" +msgstr "清除当前行的文本,只保留样式覆写标签" #: ../src/command/edit.cpp:1255 ../src/command/edit.cpp:1256 #: ../src/command/tool.cpp:256 @@ -1175,7 +1272,7 @@ msgstr "说话人" #: ../src/command/grid.cpp:102 msgid "Sort all subtitles by their actor names" -msgstr "按照说话人排序所有字幕" +msgstr "按说话人排序所有行" #: ../src/command/grid.cpp:106 ../src/command/grid.cpp:126 #: ../src/command/grid.cpp:138 ../src/command/grid.cpp:150 @@ -1188,7 +1285,7 @@ msgstr "排序" #: ../src/command/grid.cpp:122 msgid "Sort selected subtitles by their actor names" -msgstr "按照说话人排序所选字幕" +msgstr "按说话人排序所选行" #: ../src/command/grid.cpp:132 ../src/command/grid.cpp:144 #: ../src/dialog_search_replace.cpp:87 @@ -1203,11 +1300,11 @@ msgstr "特效" #: ../src/command/grid.cpp:134 msgid "Sort all subtitles by their effects" -msgstr "按照特效排序所有字幕" +msgstr "按特效排序所有行" #: ../src/command/grid.cpp:146 msgid "Sort selected subtitles by their effects" -msgstr "按照特效排序所选字幕" +msgstr "按特效排序所选行" #: ../src/command/grid.cpp:156 ../src/command/grid.cpp:168 msgid "&End Time" @@ -1220,11 +1317,11 @@ msgstr "结束时间" #: ../src/command/grid.cpp:158 msgid "Sort all subtitles by their end times" -msgstr "按照结束时间排序所有字幕" +msgstr "按结束时间排序所有行" #: ../src/command/grid.cpp:170 msgid "Sort selected subtitles by their end times" -msgstr "按照结束时间排序所选字幕" +msgstr "按结束时间排序所选行" #: ../src/command/grid.cpp:180 ../src/command/grid.cpp:192 msgid "&Layer" @@ -1237,11 +1334,11 @@ msgstr "层级" #: ../src/command/grid.cpp:182 msgid "Sort all subtitles by their layer number" -msgstr "按照层级排序所有字幕" +msgstr "按层级排序所有行" #: ../src/command/grid.cpp:194 msgid "Sort selected subtitles by their layer number" -msgstr "按照层级排序所选字幕" +msgstr "按层级排序所选行" #: ../src/command/grid.cpp:204 ../src/command/grid.cpp:216 msgid "&Start Time" @@ -1254,28 +1351,28 @@ msgstr "开始时间" #: ../src/command/grid.cpp:206 msgid "Sort all subtitles by their start times" -msgstr "按照开始时间排序所有字幕" +msgstr "按开始时间排序所有行" #: ../src/command/grid.cpp:218 msgid "Sort selected subtitles by their start times" -msgstr "按照开始时间排序所选字幕" +msgstr "按开始时间排序所选行" #: ../src/command/grid.cpp:228 ../src/command/grid.cpp:240 msgid "St&yle Name" msgstr "样式名称(&Y)" #: ../src/command/grid.cpp:229 ../src/command/grid.cpp:241 -#: ../src/dialog_style_editor.cpp:178 +#: ../src/dialog_style_editor.cpp:179 msgid "Style Name" msgstr "样式名称" #: ../src/command/grid.cpp:230 msgid "Sort all subtitles by their style names" -msgstr "按照样式名称排序所有字幕" +msgstr "按样式名称排序所有行" #: ../src/command/grid.cpp:242 msgid "Sort selected subtitles by their style names" -msgstr "按照样式名称排序所选字幕" +msgstr "按样式名称排序所选行" #: ../src/command/grid.cpp:253 ../src/command/grid.cpp:254 msgid "Cycle Tag Hiding Mode" @@ -1287,15 +1384,15 @@ msgstr "切换标签隐藏模式" #: ../src/command/grid.cpp:265 msgid "ASS Override Tag mode set to show full tags." -msgstr "ASS特效标签模式设为显示完整标签。" +msgstr "ASS样式覆写标签模式设为显示完整标签。" #: ../src/command/grid.cpp:266 msgid "ASS Override Tag mode set to simplify tags." -msgstr "ASS特效标签模式设为简化标签。" +msgstr "ASS样式覆写标签模式设为简化标签。" #: ../src/command/grid.cpp:267 msgid "ASS Override Tag mode set to hide tags." -msgstr "ASS特效标签模式设为隐藏标签。" +msgstr "ASS样式覆写标签模式设为隐藏标签。" #: ../src/command/grid.cpp:277 msgid "&Hide Tags" @@ -1307,7 +1404,7 @@ msgstr "隐藏所有标签" #: ../src/command/grid.cpp:279 msgid "Hide override tags in the subtitle grid" -msgstr "在字幕栏隐藏特效标签" +msgstr "在字幕栏隐藏样式覆写标签" #: ../src/command/grid.cpp:293 msgid "Sh&ow Tags" @@ -1319,7 +1416,7 @@ msgstr "显示所有标签" #: ../src/command/grid.cpp:295 msgid "Show full override tags in the subtitle grid" -msgstr "在字幕栏显示特效标签" +msgstr "在字幕栏显示样式覆写标签" #: ../src/command/grid.cpp:309 msgid "S&implify Tags" @@ -1332,7 +1429,7 @@ msgstr "显示简化标签" #: ../src/command/grid.cpp:311 msgid "" "Replace override tags in the subtitle grid with a simplified placeholder" -msgstr "将字幕栏的特效标签替换为符号显示" +msgstr "将字幕栏的样式覆写标签替换为符号显示" #: ../src/command/grid.cpp:347 ../src/command/grid.cpp:348 msgid "Move line up" @@ -1392,7 +1489,7 @@ msgstr "帮助主题" #: ../src/command/help.cpp:80 msgid "&IRC Channel" -msgstr "IRC 频道(&I)…" +msgstr "IRC 频道(&I)" #: ../src/command/help.cpp:81 msgid "IRC Channel" @@ -1465,7 +1562,7 @@ msgstr "保存当前的关键帧列表" #: ../src/command/keyframe.cpp:97 msgid "Save keyframes file" -msgstr "保存关键帧…" +msgstr "保存关键帧文件" #: ../src/command/recent.cpp:43 ../src/command/recent.cpp:53 msgid "Open recent audio" @@ -1509,7 +1606,7 @@ msgstr "附件" #: ../src/command/subtitle.cpp:81 msgid "Open the attachment manager dialog" -msgstr "打开附件管理器" +msgstr "打开附件管理器对话框" #: ../src/command/subtitle.cpp:92 msgid "&Find..." @@ -1640,7 +1737,7 @@ msgstr "编码" #: ../src/command/subtitle.cpp:307 msgid "Choose charset code:" -msgstr "选择文字编码:" +msgstr "选择文字编码:" #: ../src/command/subtitle.cpp:316 msgid "Open Subtitles from &Video" @@ -1777,40 +1874,40 @@ msgstr "平移时间(&H)…" #: ../src/command/time.cpp:154 ../src/dialog_shift_times.cpp:134 msgid "Shift Times" -msgstr "平移时间" +msgstr "平移时轴" #: ../src/command/time.cpp:155 msgid "Shift subtitles by time or frames" -msgstr "按照时间或帧平移字幕" +msgstr "按时间或帧平移字幕" #: ../src/command/time.cpp:182 msgid "Snap &End to Video" -msgstr "设置开始时间到视频(&E)" +msgstr "结束时轴对齐画面帧(&E)" #: ../src/command/time.cpp:183 msgid "Snap End to Video" -msgstr "设置结束时间到视频" +msgstr "结束时轴对齐画面帧" #: ../src/command/time.cpp:184 msgid "Set end of selected subtitles to current video frame" -msgstr "将当前视频帧设为所选字幕的结束时间" +msgstr "将所选行的结束位置设为当前画面帧位置" #: ../src/command/time.cpp:194 msgid "Snap to S&cene" -msgstr "紧贴镜头(&C)" +msgstr "对齐关键帧(&C)" #: ../src/command/time.cpp:195 msgid "Snap to Scene" -msgstr "紧贴镜头" +msgstr "对齐关键帧" #: ../src/command/time.cpp:196 msgid "" "Set start and end of subtitles to the keyframes around current video frame" -msgstr "设置字幕的开始与结束紧贴至当前视频帧附近的关键帧" +msgstr "开始与结束轴分别对齐当前画面前后最近的关键帧" #: ../src/command/time.cpp:233 msgid "snap to scene" -msgstr "紧贴镜头" +msgstr "对齐关键帧" #: ../src/command/time.cpp:239 ../src/command/time.cpp:240 msgid "Add lead in and out" @@ -1888,15 +1985,15 @@ msgstr "向后平移当前时间轴的开始时间" #: ../src/command/time.cpp:343 msgid "Snap &Start to Video" -msgstr "视频抓取为开始时间(&S)" +msgstr "开始时轴对齐画面帧(&S)" #: ../src/command/time.cpp:344 msgid "Snap Start to Video" -msgstr "视频抓取为开始时间" +msgstr "开始时轴对齐画面帧" #: ../src/command/time.cpp:345 msgid "Set start of selected subtitles to current video frame" -msgstr "将当前视频帧设为所选字幕的开始时间" +msgstr "将所选行的开始位置设为当前画面帧位置" #: ../src/command/time.cpp:357 msgid "Next line or syllable" @@ -1920,12 +2017,16 @@ msgstr "打开时间码文件…" #: ../src/command/timecode.cpp:69 ../src/command/timecode.cpp:74 msgid "Open Timecodes File" -msgstr "打开时间码文件…" +msgstr "打开时间码文件" #: ../src/command/timecode.cpp:70 msgid "Open a VFR timecodes v1 or v2 file" msgstr "打开一个可变帧率时间码(VFR timecode)v1或v2文件" +#: ../src/command/timecode.cpp:73 ../src/command/timecode.cpp:93 +msgid "Text Files" +msgstr "" + #: ../src/command/timecode.cpp:83 msgid "Save Timecodes File..." msgstr "保存时间码文件…" @@ -1936,7 +2037,7 @@ msgstr "保存时间码文件" #: ../src/command/timecode.cpp:85 msgid "Save a VFR timecodes v2 file" -msgstr "保存一个可变帧率时间码(VFR timecode)v1或v2文件" +msgstr "保存一个可变帧率时间码(VFR timecode)v2文件" #: ../src/command/tool.cpp:56 msgid "&Export Subtitles..." @@ -1974,7 +2075,7 @@ msgstr "选择多行" #: ../src/command/tool.cpp:83 msgid "Select lines based on defined criteria" -msgstr "按照指定要求选择多行" +msgstr "按限定条件选择多行" #: ../src/command/tool.cpp:93 msgid "&Resample Resolution..." @@ -1988,7 +2089,7 @@ msgstr "重设分辨率" msgid "" "Resample subtitles to maintain their current appearance at a different " "script resolution" -msgstr "更改分辨率并修改字幕以配合更改" +msgstr "更改脚本分辨率并重采样值以保持字幕样式不变" #: ../src/command/tool.cpp:108 msgid "St&yling Assistant..." @@ -2042,36 +2143,36 @@ msgstr "打开样式管理器" #: ../src/command/tool.cpp:162 msgid "&Kanji Timer..." -msgstr "汉字K值配对(&K)…" +msgstr "汉字K值配对器(&K)…" #: ../src/command/tool.cpp:163 msgid "Kanji Timer" -msgstr "汉字K值配对" +msgstr "汉字K值配对器" #: ../src/command/tool.cpp:164 msgid "Open the Kanji timer copier" -msgstr "打开汉字K值配对" +msgstr "打开汉字K值配对器" #: ../src/command/tool.cpp:174 msgid "&Timing Post-Processor..." -msgstr "时间后续处理器(&T)…" +msgstr "时轴后处理器(&T)…" #: ../src/command/tool.cpp:175 ../src/dialog_timing_processor.cpp:139 msgid "Timing Post-Processor" -msgstr "时间后续处理器" +msgstr "时轴后处理器" #: ../src/command/tool.cpp:176 msgid "" "Post-process the subtitle timing to add lead-ins and lead-outs, snap timing " "to scene changes, etc." -msgstr "运行时间后续处理器来处理时间开始提前、结束延后以及场景变化对帧等" +msgstr "运行时轴后处理器来处理时间开始提前、结束延后以及对齐转场等。" #: ../src/command/tool.cpp:186 msgid "&Translation Assistant..." msgstr "翻译助手(&T)…" #: ../src/command/tool.cpp:187 ../src/dialog_translation.cpp:64 -#: ../src/preferences.cpp:229 +#: ../src/preferences.cpp:235 msgid "Translation Assistant" msgstr "翻译助手" @@ -2109,15 +2210,15 @@ msgstr "插入未翻译的文本" #: ../src/command/video.cpp:82 msgid "&Cinematic (2.35)" -msgstr "电影(2.35)(&C)" +msgstr "电影 (2.35) (&C)" #: ../src/command/video.cpp:83 msgid "Cinematic (2.35)" -msgstr "电影(2.35)" +msgstr "电影 (2.35)" #: ../src/command/video.cpp:84 msgid "Force video to 2.35 aspect ratio" -msgstr "强制以 2.35:1 的比例显示视频画面" +msgstr "强制视频为2.35宽高比" #: ../src/command/video.cpp:100 msgid "C&ustom..." @@ -2129,7 +2230,7 @@ msgstr "自定义" #: ../src/command/video.cpp:102 msgid "Force video to a custom aspect ratio" -msgstr "将视频强制显示为自定义宽高比" +msgstr "强制视频为自定义宽高比" #: ../src/command/video.cpp:113 msgid "" @@ -2151,7 +2252,7 @@ msgstr "无效宽高比" #: ../src/command/video.cpp:133 msgid "Invalid value! Aspect ratio must be between 0.5 and 5.0." -msgstr "无效数值!宽高比必须在0.5至5.0之间。" +msgstr "无效数值! 宽高比必须在0.5至5.0之间。" #: ../src/command/video.cpp:143 msgid "&Default" @@ -2171,7 +2272,7 @@ msgstr "全屏4:3" #: ../src/command/video.cpp:163 msgid "Force video to 4:3 aspect ratio" -msgstr "强制以 4:3 的比例显示视频画面" +msgstr "强制视频为4:3宽高比" #: ../src/command/video.cpp:179 msgid "&Widescreen (16:9)" @@ -2183,7 +2284,7 @@ msgstr "宽屏16:9" #: ../src/command/video.cpp:181 msgid "Force video to 16:9 aspect ratio" -msgstr "强制以 16:9 的比例显示视频画面" +msgstr "强制视频为16:9宽高比" #: ../src/command/video.cpp:198 msgid "&Close Video" @@ -2208,16 +2309,16 @@ msgstr "复制当前鼠标在视频上的坐标到剪贴板" #: ../src/command/video.cpp:220 ../src/command/video.cpp:221 msgid "Cycle active subtitles provider" -msgstr "切换字幕来源" +msgstr "切换字幕服务后端" #: ../src/command/video.cpp:222 msgid "Cycle through the available subtitles providers" -msgstr "在可用的字幕来源中切换" +msgstr "在可用的字幕服务后端中切换" #: ../src/command/video.cpp:233 #, c-format msgid "Subtitles provider set to %s" -msgstr "字幕来源设置为 %s" +msgstr "字幕服务后端设置为 %s" #: ../src/command/video.cpp:240 msgid "&Detach Video" @@ -2264,22 +2365,22 @@ msgstr "将当前显示的画面复制到剪贴板" #: ../src/command/video.cpp:310 ../src/command/video.cpp:311 msgid "Copy image to Clipboard (no subtitles)" -msgstr "复制图像至剪贴板(不带字幕)" +msgstr "复制图像至剪贴板 (不带字幕)" #: ../src/command/video.cpp:312 msgid "" "Copy the currently displayed frame to the clipboard, without the subtitles" -msgstr "将当前显示的画面复制到剪贴板,不带字幕" +msgstr "将当前显示的不带字幕的画面复制到剪贴板" #: ../src/command/video.cpp:321 ../src/command/video.cpp:322 msgid "Copy image to Clipboard (only subtitles)" -msgstr "" +msgstr "复制图像至剪贴板 (仅字幕)" #: ../src/command/video.cpp:323 msgid "" "Copy the currently displayed subtitles to the clipboard, with transparent " "background" -msgstr "" +msgstr "将当前显示的透明背景的字幕画面复制到剪贴板" #: ../src/command/video.cpp:332 ../src/command/video.cpp:333 msgid "Next Frame" @@ -2341,68 +2442,68 @@ msgstr "快速向后跳帧" #: ../src/command/video.cpp:512 ../src/command/video.cpp:513 msgid "Save PNG snapshot" -msgstr "保存 PNG 截图" +msgstr "保存为 PNG 截图" #: ../src/command/video.cpp:514 msgid "" "Save the currently displayed frame to a PNG file in the video's directory" -msgstr "保存当前显示帧为PNG格式到视频所在目录" +msgstr "保存当前显示帧为 PNG 格式到视频所在目录" #: ../src/command/video.cpp:523 ../src/command/video.cpp:524 msgid "Save PNG snapshot (no subtitles)" -msgstr "储存 PNG 截图(不带字幕)" +msgstr "保存为 PNG 截图 (不带字幕)" #: ../src/command/video.cpp:525 msgid "" "Save the currently displayed frame without the subtitles to a PNG file in " "the video's directory" -msgstr "保存当前显示帧(不带字幕)为PNG格式到视频所在目录" +msgstr "保存当前显示帧 (不带字幕) 为 PNG 格式到视频所在目录" #: ../src/command/video.cpp:534 ../src/command/video.cpp:535 msgid "Save PNG snapshot (only subtitles)" -msgstr "" +msgstr "保存为 PNG 截图 (仅字幕)" #: ../src/command/video.cpp:536 msgid "" "Save the currently displayed subtitles with transparent background to a PNG " "file in the video's directory" -msgstr "" +msgstr "保存当前显示的字幕为 PNG 格式到视频所在目录" #: ../src/command/video.cpp:546 msgid "&Jump to..." -msgstr "跳至(&J)…" +msgstr "跳转到(&J)…" #: ../src/command/video.cpp:547 ../src/dialog_jumpto.cpp:67 msgid "Jump to" -msgstr "跳至" +msgstr "跳转到" #: ../src/command/video.cpp:548 msgid "Jump to frame or time" -msgstr "跳至指定帧或时间" +msgstr "跳转到指定帧或时间" #: ../src/command/video.cpp:560 msgid "Jump Video to &End" -msgstr "视频跳至结束时间(&E)" +msgstr "视频跳转到结束时间(&E)" #: ../src/command/video.cpp:561 msgid "Jump Video to End" -msgstr "视频跳至结束时间" +msgstr "视频跳转到结束时间" #: ../src/command/video.cpp:562 msgid "Jump the video to the end frame of current subtitle" -msgstr "视频跳至当前字幕的结束帧" +msgstr "视频跳转到当前字幕的结束帧" #: ../src/command/video.cpp:573 msgid "Jump Video to &Start" -msgstr "视频跳至开始时间(&S)" +msgstr "视频跳转到开始时间(&S)" #: ../src/command/video.cpp:574 msgid "Jump Video to Start" -msgstr "视频跳至开始时间" +msgstr "视频跳转到开始时间" #: ../src/command/video.cpp:575 msgid "Jump the video to the start frame of current subtitle" -msgstr "视频跳至当前字幕的起始帧" +msgstr "视频跳转到当前行的第一帧" #: ../src/command/video.cpp:586 msgid "&Open Video..." @@ -2438,20 +2539,24 @@ msgstr "切换视频自动卷动" #: ../src/command/video.cpp:618 msgid "Toggle automatically seeking video to the start time of selected lines" -msgstr "自动将视频移至所选字幕的开始时间" +msgstr "自动将视频移至所选行的开始时间" #: ../src/command/video.cpp:633 ../src/command/video.cpp:634 msgid "Play" msgstr "播放" #: ../src/command/video.cpp:635 -msgid "Play video starting on this position" +msgid "Play the video starting on this position" msgstr "从该位置开始播放视频" #: ../src/command/video.cpp:645 ../src/command/video.cpp:646 msgid "Play line" msgstr "播放字幕行" +#: ../src/command/video.cpp:647 +msgid "Play the video for the current line" +msgstr "" + #: ../src/command/video.cpp:656 msgid "Show &Overscan Mask" msgstr "显示过扫描遮罩(&O)" @@ -2466,63 +2571,75 @@ msgid "" "overscan on televisions" msgstr "在视频上显示一个遮罩,表示这些区域可能在一些电视上会因过扫描而被剪切" +#: ../src/command/video.cpp:673 +msgid "Reset Video &Pan" +msgstr "还原视频位置(&P)" + #: ../src/command/video.cpp:674 +msgid "Reset Video Pan" +msgstr "还原视频位置" + +#: ../src/command/video.cpp:675 +msgid "Reset the video's position in the video display" +msgstr "还原视频展示中的视频位置" + +#: ../src/command/video.cpp:685 msgid "&100%" msgstr "&100%" -#: ../src/command/video.cpp:675 +#: ../src/command/video.cpp:686 msgid "100%" msgstr "100%" -#: ../src/command/video.cpp:676 +#: ../src/command/video.cpp:687 msgid "Set zoom to 100%" msgstr "设置缩放为100%" -#: ../src/command/video.cpp:693 ../src/command/video.cpp:694 +#: ../src/command/video.cpp:704 ../src/command/video.cpp:705 msgid "Stop video" msgstr "停止视频" -#: ../src/command/video.cpp:695 +#: ../src/command/video.cpp:706 msgid "Stop video playback" msgstr "停止视频回放" -#: ../src/command/video.cpp:705 +#: ../src/command/video.cpp:716 msgid "&200%" msgstr "&200%" -#: ../src/command/video.cpp:706 +#: ../src/command/video.cpp:717 msgid "200%" msgstr "200%" -#: ../src/command/video.cpp:707 +#: ../src/command/video.cpp:718 msgid "Set zoom to 200%" msgstr "设置缩放为200%" -#: ../src/command/video.cpp:723 +#: ../src/command/video.cpp:734 msgid "&50%" msgstr "&50%" -#: ../src/command/video.cpp:724 +#: ../src/command/video.cpp:735 msgid "50%" msgstr "50%" -#: ../src/command/video.cpp:725 +#: ../src/command/video.cpp:736 msgid "Set zoom to 50%" msgstr "设置缩放为50%" -#: ../src/command/video.cpp:741 ../src/command/video.cpp:742 +#: ../src/command/video.cpp:752 ../src/command/video.cpp:753 msgid "Zoom In" msgstr "放大" -#: ../src/command/video.cpp:743 +#: ../src/command/video.cpp:754 msgid "Zoom video in" msgstr "放大视频" -#: ../src/command/video.cpp:753 ../src/command/video.cpp:754 +#: ../src/command/video.cpp:764 ../src/command/video.cpp:765 msgid "Zoom Out" msgstr "缩小" -#: ../src/command/video.cpp:755 +#: ../src/command/video.cpp:766 msgid "Zoom video out" msgstr "缩小视频" @@ -2592,7 +2709,7 @@ msgid "Line" msgstr "直线" #: ../src/command/vis_tool.cpp:141 -msgid "Appends a line" +msgid "Append a line" msgstr "添加一条直线" #: ../src/command/vis_tool.cpp:146 ../src/command/vis_tool.cpp:147 @@ -2600,7 +2717,7 @@ msgid "Bicubic" msgstr "两次立方曲线" #: ../src/command/vis_tool.cpp:148 -msgid "Appends a bezier bicubic curve" +msgid "Append a bezier bicubic curve" msgstr "添加一条双三次贝塞尔曲线" #: ../src/command/vis_tool.cpp:153 ../src/command/vis_tool.cpp:154 @@ -2608,7 +2725,7 @@ msgid "Convert" msgstr "转换" #: ../src/command/vis_tool.cpp:155 -msgid "Converts a segment between line and bicubic" +msgid "Convert a segment between line and bicubic" msgstr "将一条线段在直线和曲线之间转换" #: ../src/command/vis_tool.cpp:160 ../src/command/vis_tool.cpp:161 @@ -2616,7 +2733,7 @@ msgid "Insert" msgstr "插入" #: ../src/command/vis_tool.cpp:162 -msgid "Inserts a control point" +msgid "Insert a control point" msgstr "插入一个控制点" #: ../src/command/vis_tool.cpp:167 ../src/command/vis_tool.cpp:168 @@ -2624,7 +2741,7 @@ msgid "Remove" msgstr "移除" #: ../src/command/vis_tool.cpp:169 -msgid "Removes a control point" +msgid "Remove a control point" msgstr "移除一个控制点" #: ../src/command/vis_tool.cpp:174 ../src/command/vis_tool.cpp:175 @@ -2632,7 +2749,7 @@ msgid "Freehand" msgstr "手绘" #: ../src/command/vis_tool.cpp:176 -msgid "Draws a freehand shape" +msgid "Draw a freehand shape" msgstr "画一个手绘形状" #: ../src/command/vis_tool.cpp:181 ../src/command/vis_tool.cpp:182 @@ -2640,14 +2757,17 @@ msgid "Freehand smooth" msgstr "平滑手绘" #: ../src/command/vis_tool.cpp:183 -msgid "Draws a smoothed freehand shape" +msgid "Draw a smoothed freehand shape" msgstr "画一个平滑的手绘形状" #: ../src/dialog_about.cpp:46 msgid "Translated into LANGUAGE by PERSON\n" msgstr "" -"简体中文版汉化:Vmoe字幕组\n" -" 原始翻译:芥末 & song_5007 & ……\n" +"简体中文翻译:\n" +" op200\n" +" (翻译 arch1t3cht/Aegisub 的 feature 分支)\n" +"旧版翻译来自: Vmoe字幕组\n" +" 原始翻译: 芥末 & song_5007 & ……\n" " 电脑迷 修订更新翻译\n" " Oborozuki 修订更新翻译\n" @@ -2681,7 +2801,7 @@ msgid "E&xtract" msgstr "提取(&X)" #: ../src/dialog_attachments.cpp:79 ../src/dialog_style_manager.cpp:204 -#: ../src/preferences.cpp:605 +#: ../src/preferences.cpp:613 msgid "&Delete" msgstr "删除(&D)" @@ -2706,21 +2826,29 @@ msgstr "分类" msgid "Choose file to be attached" msgstr "选择要附加的文件" +#: ../src/dialog_attachments.cpp:139 ../src/dialog_attachments.cpp:170 +msgid "Font Files" +msgstr "字体文件" + #: ../src/dialog_attachments.cpp:142 msgid "attach font file" msgstr "附加字体文件" +#: ../src/dialog_attachments.cpp:149 ../src/dialog_attachments.cpp:170 +msgid "Graphic Files" +msgstr "图片文件" + #: ../src/dialog_attachments.cpp:152 msgid "attach graphics file" msgstr "附加图片文件" #: ../src/dialog_attachments.cpp:164 msgid "Select the path to save the files to:" -msgstr "选择这些文件储存的路径:" +msgstr "选择这些文件储存的路径:" #: ../src/dialog_attachments.cpp:167 msgid "Select the path to save the file to:" -msgstr "选择这个文件储存的路径:" +msgstr "选择这个文件储存的路径:" #: ../src/dialog_attachments.cpp:189 msgid "remove attachment" @@ -2758,30 +2886,35 @@ msgstr "名称" msgid "Filename" msgstr "文件名" -#: ../src/dialog_automation.cpp:136 +#: ../src/dialog_automation.cpp:136 ../src/preferences.cpp:633 msgid "Description" msgstr "描述" -#: ../src/dialog_automation.cpp:222 +#: ../src/dialog_automation.cpp:224 msgid "Add Automation script" msgstr "添加自动化脚本" -#: ../src/dialog_automation.cpp:277 +#: ../src/dialog_automation.cpp:240 +#, c-format +msgid "Script '%s' is already loaded" +msgstr "脚本 '%s' 已载入" + +#: ../src/dialog_automation.cpp:279 #, c-format msgid "" "Total scripts loaded: %d\n" "Global scripts loaded: %d\n" "Local scripts loaded: %d\n" msgstr "" -"加载的全部脚本: %d\n" -"加载的全局脚本: %d\n" -"加载的本地脚本: %d\n" +"加载的全部脚本: %d\n" +"加载的全局脚本: %d\n" +"加载的本地脚本: %d\n" -#: ../src/dialog_automation.cpp:282 +#: ../src/dialog_automation.cpp:284 msgid "Scripting engines installed:" -msgstr "已安装的脚本引擎:" +msgstr "已安装的脚本引擎:" -#: ../src/dialog_automation.cpp:289 +#: ../src/dialog_automation.cpp:291 #, c-format msgid "" "\n" @@ -2792,39 +2925,48 @@ msgid "" "Version: %s\n" "Full path: %s\n" "State: %s\n" -"\n" -"Features provided by script:" msgstr "" "\n" -"脚本信息:\n" -"名称: %s\n" -"描述: %s\n" -"作者: %s\n" -"版本: %s\n" -"完整路径: %s\n" -"状态: %s\n" -"\n" -"脚本功能特性:" - -#: ../src/dialog_automation.cpp:295 +"脚本信息: \n" +"名称: %s\n" +"描述: %s\n" +"作者: %s\n" +"版本: %s\n" +"完整路径: %s\n" +"状态: %s\n" + +#: ../src/dialog_automation.cpp:297 msgid "Correctly loaded" msgstr "载入成功" -#: ../src/dialog_automation.cpp:295 +#: ../src/dialog_automation.cpp:297 msgid "Failed to load" msgstr "载入失败" -#: ../src/dialog_automation.cpp:298 +#: ../src/dialog_automation.cpp:297 +msgid "Loaded with warnings" +msgstr "" + +#: ../src/dialog_automation.cpp:300 +#, c-format +msgid "Warning: %s\n" +msgstr "警告: %s\n" + +#: ../src/dialog_automation.cpp:303 +msgid "Features provided by script:\n" +msgstr "" + +#: ../src/dialog_automation.cpp:306 #, c-format msgid " Macro: %s (%s)" -msgstr " 宏: %s (%s)" +msgstr " 宏: %s (%s)" -#: ../src/dialog_automation.cpp:301 +#: ../src/dialog_automation.cpp:309 #, c-format msgid " Export filter: %s" -msgstr " 导出滤镜: %s" +msgstr " 导出滤镜: %s" -#: ../src/dialog_automation.cpp:305 +#: ../src/dialog_automation.cpp:313 msgid "Automation Script Info" msgstr "自动化脚本信息" @@ -2896,73 +3038,126 @@ msgstr "HSV色彩" #: ../src/dialog_colorpicker.cpp:594 msgid "Spectrum mode:" -msgstr "光谱模式:" +msgstr "光谱模式:" #: ../src/dialog_colorpicker.cpp:611 msgid "Blue:" -msgstr "蓝:" +msgstr "蓝:" #: ../src/dialog_colorpicker.cpp:611 msgid "Green:" -msgstr "绿:" +msgstr "绿:" #: ../src/dialog_colorpicker.cpp:611 msgid "Red:" -msgstr "红:" +msgstr "红:" #: ../src/dialog_colorpicker.cpp:614 msgid "Alpha:" -msgstr "透明度:" +msgstr "透明度:" #: ../src/dialog_colorpicker.cpp:621 ../src/dialog_colorpicker.cpp:624 msgid "Hue:" -msgstr "色相:" +msgstr "色相:" #: ../src/dialog_colorpicker.cpp:621 msgid "Lum.:" -msgstr "亮度:" +msgstr "亮度:" #: ../src/dialog_colorpicker.cpp:621 ../src/dialog_colorpicker.cpp:624 msgid "Sat.:" -msgstr "饱和度:" +msgstr "饱和度:" #: ../src/dialog_colorpicker.cpp:624 msgid "Value:" -msgstr "明度:" +msgstr "明度:" #: ../src/dialog_detached_video.cpp:63 ../src/dialog_detached_video.cpp:131 #, c-format msgid "Video: %s" -msgstr "视频: %s" +msgstr "视频: %s" + +#: ../src/dialog_dummy_video.cpp:71 +msgid "640×480 (SD fullscreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:72 +msgid "704×480 (SD anamorphic)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:73 +msgid "640×360 (SD widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:74 +msgid "704×396 (SD widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:75 +msgid "640×352 (SD widescreen MOD16)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:76 +msgid "704×400 (SD widescreen MOD16)" +msgstr "" -#: ../src/dialog_dummy_video.cpp:103 +#: ../src/dialog_dummy_video.cpp:77 +msgid "1024×576 (SuperPAL widescreen)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:78 +msgid "1280×720 (HD 720p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:79 +msgid "1920×1080 (FHD 1080p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:80 +msgid "2560×1440 (QHD 1440p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:81 +msgid "3840×2160 (4K UHD 2160p)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:82 +msgid "1080×1920 (FHD vertical)" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:104 msgid "Dummy video options" msgstr "空白视频选项" -#: ../src/dialog_dummy_video.cpp:115 +#: ../src/dialog_dummy_video.cpp:110 ../src/dialog_properties.cpp:130 +#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 +msgid "×" +msgstr "" + +#: ../src/dialog_dummy_video.cpp:116 msgid "Checkerboard &pattern" msgstr "棋盘样式(&P)" -#: ../src/dialog_dummy_video.cpp:118 +#: ../src/dialog_dummy_video.cpp:119 msgid "Video resolution:" -msgstr "视频分辨率:" +msgstr "视频分辨率:" -#: ../src/dialog_dummy_video.cpp:120 +#: ../src/dialog_dummy_video.cpp:121 msgid "Color:" -msgstr "颜色:" +msgstr "颜色:" -#: ../src/dialog_dummy_video.cpp:123 +#: ../src/dialog_dummy_video.cpp:124 msgid "Frame rate (fps):" -msgstr "帧率 (fps):" +msgstr "帧率 (fps):" -#: ../src/dialog_dummy_video.cpp:124 +#: ../src/dialog_dummy_video.cpp:125 msgid "Duration (frames):" -msgstr "长度(帧):" +msgstr "长度 (帧):" -#: ../src/dialog_dummy_video.cpp:179 +#: ../src/dialog_dummy_video.cpp:180 #, c-format msgid "Resulting duration: %s" -msgstr "最终长度: %s" +msgstr "最终长度: %s" #: ../src/dialog_export.cpp:101 msgid "Export" @@ -2982,7 +3177,7 @@ msgstr "不选(&N)" #: ../src/dialog_export.cpp:140 msgid "Text encoding:" -msgstr "文字编码:" +msgstr "文字编码:" #: ../src/dialog_export.cpp:148 msgid "Filters" @@ -2996,6 +3191,17 @@ msgstr "导出…" msgid "Export subtitles file" msgstr "导出字幕文件" +#: ../src/dialog_export.cpp:202 ../src/dialog_export.cpp:205 +#: ../src/dialog_export.cpp:208 +#, fuzzy +msgid "Error exporting subtitles" +msgstr "导出字幕时出错" + +#: ../src/dialog_export.cpp:208 ../src/dialog_style_manager.cpp:691 +#: ../src/project.cpp:142 +msgid "Unknown error" +msgstr "未知错误" + #: ../src/dialog_export_ebu3264.cpp:83 msgid "EBU STL export" msgstr "EBU-STL(.stl)字幕导出" @@ -3074,11 +3280,11 @@ msgstr "文字编码" #: ../src/dialog_export_ebu3264.cpp:126 msgid "Automatically wrap long lines (ASS)" -msgstr "自动换行(ASS方式)" +msgstr "自动换行 (ASS方式)" #: ../src/dialog_export_ebu3264.cpp:127 msgid "Automatically wrap long lines (Balanced)" -msgstr "自动换行(平均方式)" +msgstr "自动换行 (平均方式)" #: ../src/dialog_export_ebu3264.cpp:128 msgid "Abort if any lines are too long" @@ -3110,7 +3316,7 @@ msgstr "最大行长度" #: ../src/dialog_export_ebu3264.cpp:149 msgid "Time code offset:" -msgstr "时间码偏移:" +msgstr "时间码偏移:" #: ../src/dialog_export_ebu3264.cpp:152 msgid "Text formatting" @@ -3127,7 +3333,7 @@ msgstr "显示标准" #: ../src/dialog_fonts_collector.cpp:101 #, c-format msgid "* An error occurred when enumerating the used fonts: %s.\n" -msgstr "" +msgstr "* 枚举使用的字体时报错: %s.\n" #: ../src/dialog_fonts_collector.cpp:115 msgid "Symlinking fonts to folder...\n" @@ -3144,7 +3350,7 @@ msgstr "正在复制字体至压缩文件…\n" #: ../src/dialog_fonts_collector.cpp:134 #, c-format msgid "* Failed to create directory '%s': %s.\n" -msgstr "* 无法创建目录 '%s': %s。\n" +msgstr "* 无法创建目录 '%s': %s。\n" #: ../src/dialog_fonts_collector.cpp:145 #, c-format @@ -3227,12 +3433,16 @@ msgstr "记录" #: ../src/dialog_fonts_collector.cpp:275 msgid "&Start!" -msgstr "开始!(&S)" +msgstr "开始!(&S)" #: ../src/dialog_fonts_collector.cpp:310 ../src/dialog_fonts_collector.cpp:315 -#: ../src/dialog_fonts_collector.cpp:320 ../src/dialog_kara_timing_copy.cpp:489 +#: ../src/dialog_fonts_collector.cpp:320 +#: ../src/dialog_kara_timing_copy.cpp:489 #: ../src/dialog_kara_timing_copy.cpp:491 -#: ../src/dialog_kara_timing_copy.cpp:541 ../src/preferences.cpp:266 +#: ../src/dialog_kara_timing_copy.cpp:541 ../src/dialog_spellchecker.cpp:143 +#: ../src/dialog_spellchecker.cpp:149 ../src/dialog_style_manager.cpp:682 +#: ../src/dialog_style_manager.cpp:688 ../src/dialog_style_manager.cpp:691 +#: ../src/preferences.cpp:272 ../src/preferences.cpp:464 msgid "Error" msgstr "错误" @@ -3274,19 +3484,19 @@ msgstr "输入目标压缩文件名。若输入为文件夹,则会使用一个 #: ../src/dialog_jumpto.cpp:73 msgid "Frame: " -msgstr "帧:" +msgstr "帧: " #: ../src/dialog_jumpto.cpp:74 msgid "Time: " -msgstr "时间:" +msgstr "时间: " #: ../src/dialog_kara_timing_copy.cpp:58 msgid "Source: " -msgstr "源:" +msgstr "源: " #: ../src/dialog_kara_timing_copy.cpp:59 msgid "Dest: " -msgstr "目标:" +msgstr "目标: " #: ../src/dialog_kara_timing_copy.cpp:385 msgid "Kanji timing" @@ -3324,26 +3534,26 @@ msgid "" "Enter: Link, accept line when done\n" "Backspace: Unlink last" msgstr "" -"当定位于目标文本框时,使用下列按键:\n" +"当聚焦于目标文本框时,使用下列按键:\n" "\n" -"向右箭头:增加目标选择的长度\n" -"向左箭头:减少目标选择的长度\n" -"向上箭头:增加源选择的长度\n" -"向下箭头:减少源选择的长度\n" -"回车:连结,接受完成的行\n" -"退格:解除最后的连结" +"向右箭头: 增加目标选择的长度\n" +"向左箭头: 减少目标选择的长度\n" +"向上箭头: 增加源选择的长度\n" +"向下箭头: 减少源选择的长度\n" +"回车: 配对,接受完成的行\n" +"退格: 解除最后的配对" #: ../src/dialog_kara_timing_copy.cpp:412 msgid "S&tart!" -msgstr "开始!(&T)" +msgstr "开始!(&T)" #: ../src/dialog_kara_timing_copy.cpp:413 msgid "&Link" -msgstr "连结(&L)" +msgstr "配对(&L)" #: ../src/dialog_kara_timing_copy.cpp:414 msgid "&Unlink" -msgstr "解除连结(&U)" +msgstr "解除配对(&U)" #: ../src/dialog_kara_timing_copy.cpp:415 msgid "Skip &Source Line" @@ -3367,7 +3577,7 @@ msgstr "汉字K值配对" #: ../src/dialog_kara_timing_copy.cpp:489 msgid "Select source and destination styles first." -msgstr "先选择源样式和目标样式。" +msgstr "首先需要选择源样式和目标样式。" #: ../src/dialog_kara_timing_copy.cpp:491 msgid "The source and destination styles must be different." @@ -3375,7 +3585,7 @@ msgstr "源样式与目标样式必须不同。" #: ../src/dialog_kara_timing_copy.cpp:541 msgid "Group all of the source text." -msgstr "将所有源文本分类。" +msgstr "需要配对源文本的所有组。" #: ../src/dialog_paste_over.cpp:55 msgid "Select Fields to Paste Over" @@ -3387,7 +3597,7 @@ msgstr "字段" #: ../src/dialog_paste_over.cpp:59 msgid "Please select the fields that you want to paste over:" -msgstr "请选择想要粘贴的字段:" +msgstr "请选择想要粘贴的字段:" #: ../src/dialog_paste_over.cpp:63 msgid "Comment" @@ -3417,7 +3627,7 @@ msgstr "垂直边距" #: ../src/dialog_paste_over.cpp:88 ../src/dialog_timing_processor.cpp:161 msgid "&All" -msgstr "全部(&A)" +msgstr "全选(&A)" #: ../src/dialog_paste_over.cpp:90 ../src/dialog_timing_processor.cpp:164 msgid "&None" @@ -3449,41 +3659,46 @@ msgstr "脚本" #: ../src/dialog_properties.cpp:106 msgid "Title:" -msgstr "标题:" +msgstr "标题:" #: ../src/dialog_properties.cpp:107 msgid "Original script:" -msgstr "脚本原作:" +msgstr "原脚本作者:" #: ../src/dialog_properties.cpp:108 msgid "Translation:" -msgstr "翻译:" +msgstr "原翻译:" #: ../src/dialog_properties.cpp:109 msgid "Editing:" -msgstr "编辑:" +msgstr "原编辑校对:" #: ../src/dialog_properties.cpp:110 msgid "Timing:" -msgstr "时间轴:" +msgstr "原时轴:" #: ../src/dialog_properties.cpp:111 msgid "Synch point:" -msgstr "同步点:" +msgstr "同步点:" #: ../src/dialog_properties.cpp:112 msgid "Updated by:" -msgstr "编修者:" +msgstr "更新者:" #: ../src/dialog_properties.cpp:113 msgid "Update details:" -msgstr "更新摘要:" +msgstr "更新摘要:" #: ../src/dialog_properties.cpp:122 ../src/dialog_resample.cpp:141 #: ../src/export_framerate.cpp:70 msgid "From &video" msgstr "从视频获得(&V)" +#: ../src/dialog_properties.cpp:138 ../src/dialog_resample.cpp:172 +#: ../src/dialog_resample.cpp:186 +msgid "YCbCr Matrix:" +msgstr "YCbCr 矩阵:" + #: ../src/dialog_properties.cpp:141 msgid "Resolution" msgstr "分辨率" @@ -3506,7 +3721,7 @@ msgstr "3: 智能换行,下行较宽" #: ../src/dialog_properties.cpp:156 msgid "Wrap Style: " -msgstr "换行方式:" +msgstr "换行方式: " #: ../src/dialog_properties.cpp:159 msgid "Scale Border and Shadow" @@ -3556,14 +3771,6 @@ msgstr "宽高比处理" msgid "Margin offset" msgstr "边距偏移" -#: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" -msgstr "×" - -#: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 -msgid "YCbCr Matrix:" -msgstr "YCbCr 矩阵:" - #: ../src/dialog_resample.cpp:175 msgid "Source Resolution" msgstr "原分辨率" @@ -3578,11 +3785,11 @@ msgstr "替换" #: ../src/dialog_search_replace.cpp:67 msgid "Find what:" -msgstr "查找目标:" +msgstr "查找目标:" #: ../src/dialog_search_replace.cpp:73 ../src/dialog_spellchecker.cpp:127 msgid "Replace with:" -msgstr "替换为:" +msgstr "替换为:" #: ../src/dialog_search_replace.cpp:78 msgid "&Match case" @@ -3598,7 +3805,7 @@ msgstr "忽略注释(&S)" #: ../src/dialog_search_replace.cpp:81 msgid "S&kip Override Tags" -msgstr "忽略特效标签" +msgstr "忽略样式覆写标签" #: ../src/dialog_search_replace.cpp:87 ../src/dialog_selection.cpp:137 msgid "&Text" @@ -3748,7 +3955,7 @@ msgstr "0 行已被移出所选" #: ../src/dialog_selection.cpp:237 msgid "Selection" -msgstr "选择" +msgstr "所选" #: ../src/dialog_shift_times.cpp:91 msgid "unsaved" @@ -3794,19 +4001,19 @@ msgstr "所选 " #: ../src/dialog_shift_times.cpp:143 msgid "&Time: " -msgstr "时间(&T):" +msgstr "时间(&T): " #: ../src/dialog_shift_times.cpp:144 msgid "Shift by time" -msgstr "按照时间平移" +msgstr "按时间平移" #: ../src/dialog_shift_times.cpp:147 msgid "&Frames: " -msgstr "帧数(&F):" +msgstr "帧数(&F): " #: ../src/dialog_shift_times.cpp:148 msgid "Shift by frames" -msgstr "平移(按照帧数)" +msgstr "平移 (按帧数)" #: ../src/dialog_shift_times.cpp:152 msgid "Enter time in h:mm:ss.cs notation" @@ -3882,7 +4089,17 @@ msgstr "平移" #: ../src/dialog_spellchecker.cpp:125 msgid "Misspelled word:" -msgstr "拼写错误词语:" +msgstr "拼写错误词语:" + +#: ../src/dialog_spellchecker.cpp:143 +#, fuzzy +msgid "No spellchecker available." +msgstr "没有可用的拼写检查器。" + +#: ../src/dialog_spellchecker.cpp:149 +#, fuzzy +msgid "No spellchecker dictionaries available." +msgstr "没有可用的拼写检查词典。" #: ../src/dialog_spellchecker.cpp:183 msgid "Ignore &UPPERCASE words" @@ -3914,7 +4131,7 @@ msgstr "Aegisub已经检查完该脚本的拼写检查。" #: ../src/dialog_spellchecker.cpp:279 ../src/dialog_spellchecker.cpp:283 msgid "Spell checking complete." -msgstr "拼写检查完成" +msgstr "拼写检查完成。" #: ../src/dialog_spellchecker.cpp:283 msgid "Aegisub has found no spelling mistakes in this script." @@ -3928,217 +4145,224 @@ msgstr "拼写检查替换" msgid "Style Editor" msgstr "样式编辑器" -#: ../src/dialog_style_editor.cpp:179 +#: ../src/dialog_style_editor.cpp:172 +msgid "Border boxes" +msgstr "" + +#: ../src/dialog_style_editor.cpp:172 ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:286 +msgid "Outline" +msgstr "边框" + +#: ../src/dialog_style_editor.cpp:172 +msgid "Shadow box (libass only)" +msgstr "" + +#: ../src/dialog_style_editor.cpp:180 msgid "Font" msgstr "字体" -#: ../src/dialog_style_editor.cpp:180 ../src/preferences.cpp:237 +#: ../src/dialog_style_editor.cpp:181 ../src/preferences.cpp:243 msgid "Colors" msgstr "颜色" -#: ../src/dialog_style_editor.cpp:181 +#: ../src/dialog_style_editor.cpp:182 msgid "Margins" msgstr "边距" -#: ../src/dialog_style_editor.cpp:182 ../src/dialog_style_editor.cpp:285 -msgid "Outline" -msgstr "边框" - -#: ../src/dialog_style_editor.cpp:183 +#: ../src/dialog_style_editor.cpp:184 msgid "Miscellaneous" msgstr "杂项" -#: ../src/dialog_style_editor.cpp:184 +#: ../src/dialog_style_editor.cpp:185 msgid "Preview" msgstr "预览" -#: ../src/dialog_style_editor.cpp:190 +#: ../src/dialog_style_editor.cpp:191 msgid "&Bold" msgstr "粗体(&B)" -#: ../src/dialog_style_editor.cpp:191 +#: ../src/dialog_style_editor.cpp:192 msgid "&Italic" msgstr "斜体(&I)" -#: ../src/dialog_style_editor.cpp:192 +#: ../src/dialog_style_editor.cpp:193 msgid "&Underline" msgstr "下划线(&U)" -#: ../src/dialog_style_editor.cpp:193 +#: ../src/dialog_style_editor.cpp:194 msgid "&Strikeout" msgstr "删除线(&S)" -#: ../src/dialog_style_editor.cpp:205 +#: ../src/dialog_style_editor.cpp:206 msgid "Alignment" msgstr "对齐方式" -#: ../src/dialog_style_editor.cpp:208 -msgid "&Opaque box" -msgstr "不透明背景(&O)" - -#: ../src/dialog_style_editor.cpp:216 +#: ../src/dialog_style_editor.cpp:217 msgid "Style name" msgstr "样式名称" -#: ../src/dialog_style_editor.cpp:217 +#: ../src/dialog_style_editor.cpp:218 msgid "Font face" msgstr "字体" -#: ../src/dialog_style_editor.cpp:218 +#: ../src/dialog_style_editor.cpp:219 msgid "Font size" msgstr "字体大小" -#: ../src/dialog_style_editor.cpp:219 +#: ../src/dialog_style_editor.cpp:220 msgid "Choose primary color" msgstr "选择主要颜色" -#: ../src/dialog_style_editor.cpp:220 +#: ../src/dialog_style_editor.cpp:221 msgid "Choose secondary color" msgstr "选择次要颜色" -#: ../src/dialog_style_editor.cpp:221 +#: ../src/dialog_style_editor.cpp:222 msgid "Choose outline color" msgstr "选择边框颜色" -#: ../src/dialog_style_editor.cpp:222 +#: ../src/dialog_style_editor.cpp:223 msgid "Choose shadow color" msgstr "选择阴影颜色" -#: ../src/dialog_style_editor.cpp:223 -msgid "Distance from left edge, in pixels" -msgstr "与左边界距离(像素)" - #: ../src/dialog_style_editor.cpp:224 -msgid "Distance from right edge, in pixels" -msgstr "与右边界距离(像素)" +msgid "Distance from left edge, in pixels" +msgstr "与左边界距离 (像素)" #: ../src/dialog_style_editor.cpp:225 -msgid "Distance from top/bottom edge, in pixels" -msgstr "与上/下边界距离(像素)" +msgid "Distance from right edge, in pixels" +msgstr "与右边界距离 (像素)" #: ../src/dialog_style_editor.cpp:226 -msgid "" -"When selected, display an opaque box behind the subtitles instead of an " -"outline around the text" -msgstr "选中时,则使用不透明背景取代字幕的边框" +msgid "Distance from top/bottom edge, in pixels" +msgstr "与上/下边界距离 (像素)" #: ../src/dialog_style_editor.cpp:227 -msgid "Outline width, in pixels" -msgstr "边框宽度(像素)" +msgid "Whether to draw a normal outline or opaque boxes around the text" +msgstr "" #: ../src/dialog_style_editor.cpp:228 -msgid "Shadow distance, in pixels" -msgstr "阴影距离(像素)" +msgid "Outline width, in pixels" +msgstr "边框宽度 (像素)" #: ../src/dialog_style_editor.cpp:229 -msgid "Scale X, in percentage" -msgstr "水平缩放率(百分比)" +msgid "Shadow distance, in pixels" +msgstr "阴影距离 (像素)" #: ../src/dialog_style_editor.cpp:230 -msgid "Scale Y, in percentage" -msgstr "垂直缩放率(百分比)" +msgid "Scale X, in percentage" +msgstr "水平缩放率 (百分比)" #: ../src/dialog_style_editor.cpp:231 -msgid "Angle to rotate in Z axis, in degrees" -msgstr "沿 Z 轴旋转角度(角度)" +msgid "Scale Y, in percentage" +msgstr "垂直缩放率 (百分比)" #: ../src/dialog_style_editor.cpp:232 +msgid "Angle to rotate in Z axis, in degrees" +msgstr "沿 Z 轴旋转角度 (角度)" + +#: ../src/dialog_style_editor.cpp:233 msgid "" "Encoding, only useful in unicode if the font doesn't have the proper unicode " "mapping" -msgstr "文字编码,仅当使用unicode时,字体没有正确的unicode映射时有用" +msgstr "文字编码,仅当使用unicode时,字体没有正确的unicode映射时生效" -#: ../src/dialog_style_editor.cpp:233 +#: ../src/dialog_style_editor.cpp:234 msgid "Character spacing, in pixels" -msgstr "字符间距(像素)" +msgstr "字符间距 (像素)" -#: ../src/dialog_style_editor.cpp:234 +#: ../src/dialog_style_editor.cpp:235 msgid "Alignment in screen, in numpad style" msgstr "画面中位置的对齐方式,按照数字键盘区布局" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Primary" msgstr "主要颜色" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Secondary" msgstr "次要颜色" -#: ../src/dialog_style_editor.cpp:285 +#: ../src/dialog_style_editor.cpp:286 msgid "Shadow" msgstr "阴影" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:263 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:263 msgid "Left" msgstr "左边距" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:269 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:269 msgid "Right" msgstr "右边距" -#: ../src/dialog_style_editor.cpp:296 ../src/grid_column.cpp:275 +#: ../src/dialog_style_editor.cpp:297 ../src/grid_column.cpp:275 msgid "Vert" msgstr "垂直边距" -#: ../src/dialog_style_editor.cpp:314 +#: ../src/dialog_style_editor.cpp:315 msgid "Outline:" -msgstr "边框:" +msgstr "边框:" -#: ../src/dialog_style_editor.cpp:315 +#: ../src/dialog_style_editor.cpp:316 msgid "Shadow:" -msgstr "阴影:" +msgstr "阴影:" -#: ../src/dialog_style_editor.cpp:320 -msgid "Scale X%:" -msgstr "水平缩放%:" +#: ../src/dialog_style_editor.cpp:317 +msgid "Border style:" +msgstr "边框样式" #: ../src/dialog_style_editor.cpp:321 -msgid "Scale Y%:" -msgstr "垂直缩放%:" +msgid "Scale X%:" +msgstr "水平缩放%:" #: ../src/dialog_style_editor.cpp:322 -msgid "Rotation:" -msgstr "旋转:" +msgid "Scale Y%:" +msgstr "垂直缩放%:" #: ../src/dialog_style_editor.cpp:323 +msgid "Rotation:" +msgstr "旋转:" + +#: ../src/dialog_style_editor.cpp:324 msgid "Spacing:" -msgstr "间距:" +msgstr "间距:" -#: ../src/dialog_style_editor.cpp:326 +#: ../src/dialog_style_editor.cpp:327 msgid "Encoding:" -msgstr "编码:" +msgstr "编码:" -#: ../src/dialog_style_editor.cpp:336 +#: ../src/dialog_style_editor.cpp:337 msgid "Preview of current style" msgstr "预览当前样式" -#: ../src/dialog_style_editor.cpp:339 +#: ../src/dialog_style_editor.cpp:340 msgid "Text to be used for the preview" msgstr "用于预览的文本" -#: ../src/dialog_style_editor.cpp:340 +#: ../src/dialog_style_editor.cpp:341 msgid "Color of preview background" msgstr "预览框背景色" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "Style name conflict" msgstr "样式名称冲突" -#: ../src/dialog_style_editor.cpp:421 +#: ../src/dialog_style_editor.cpp:422 msgid "There is already a style with this name. Please choose another name." -msgstr "已有相同名称的样式,请使用另一个名称。" +msgstr "已有相同名称的样式。请使用另一个名称。" -#: ../src/dialog_style_editor.cpp:433 +#: ../src/dialog_style_editor.cpp:434 msgid "" "Do you want to change all instances of this style in the script to this new " "name?" -msgstr "要将脚本中所有应用该样式的字幕行的样式名都改为这个新名称吗?" +msgstr "是否将脚本中所有应用该样式的字幕行的样式名都改为这个新名称?" -#: ../src/dialog_style_editor.cpp:434 +#: ../src/dialog_style_editor.cpp:435 msgid "Update script?" -msgstr "更新脚本?" +msgstr "更新脚本?" -#: ../src/dialog_style_editor.cpp:461 ../src/subs_edit_box.cpp:604 +#: ../src/dialog_style_editor.cpp:462 ../src/subs_edit_box.cpp:604 msgid "style change" msgstr "样式更改" @@ -4162,11 +4386,11 @@ msgstr "置底样式" msgid "Sort styles alphabetically" msgstr "按字母表顺序排序样式" -#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:603 +#: ../src/dialog_style_manager.cpp:201 ../src/preferences.cpp:611 msgid "&New" msgstr "新建(&N)" -#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:604 +#: ../src/dialog_style_manager.cpp:202 ../src/preferences.cpp:612 msgid "&Edit" msgstr "编辑(&E)" @@ -4193,7 +4417,7 @@ msgstr "无法解析样式" #, c-format msgid "Are you sure you want to delete this style?" msgid_plural "Are you sure you want to delete these %d styles?" -msgstr[0] "您确定要删除 %d 个样式?" +msgstr[0] "您确定要删除这 %d 个样式?" #: ../src/dialog_style_manager.cpp:272 msgid "Catalog of available storages" @@ -4233,7 +4457,7 @@ msgstr "新增目录" #: ../src/dialog_style_manager.cpp:453 msgid "New storage name:" -msgstr "新样式库名称:" +msgstr "新样式库名称:" #: ../src/dialog_style_manager.cpp:468 msgid "A catalog with that name already exists." @@ -4260,7 +4484,7 @@ msgstr "无效字符" #: ../src/dialog_style_manager.cpp:489 #, c-format msgid "Are you sure you want to delete the storage \"%s\" from the catalog?" -msgstr "您确定要将样式库“%s”从目录中删除吗?" +msgstr "您确定要将样式库“%s”从目录中删除吗?" #: ../src/dialog_style_manager.cpp:490 msgid "Confirm delete" @@ -4276,14 +4500,14 @@ msgstr "样式名称冲突" msgid "" "There is already a style with the name \"%s\" in the current storage. " "Overwrite?" -msgstr "当前已储存了相同的样式名“%s”。要覆盖吗?" +msgstr "当前已储存了相同的样式名“%s”。是否覆盖?" #: ../src/dialog_style_manager.cpp:535 ../src/dialog_style_manager.cpp:713 #, c-format msgid "" "There is already a style with the name \"%s\" in the current script. " "Overwrite?" -msgstr "当前脚本中已有相同的样式名\"%s\"。要覆盖吗?" +msgstr "当前脚本中已有相同的样式名\"%s\"。是否覆盖?" #: ../src/dialog_style_manager.cpp:546 msgid "style copy" @@ -4305,6 +4529,10 @@ msgstr "确认从当前脚本删除" msgid "style delete" msgstr "样式删除" +#: ../src/dialog_style_manager.cpp:682 +msgid "Unsupported subtitle format" +msgstr "不支持的字幕格式" + #: ../src/dialog_style_manager.cpp:698 msgid "Error Importing Styles" msgstr "导入样式出错" @@ -4315,7 +4543,7 @@ msgstr "所选文件没有可用样式。" #: ../src/dialog_style_manager.cpp:704 msgid "Choose styles to import:" -msgstr "选择要导入的样式:" +msgstr "选择要导入的样式:" #: ../src/dialog_style_manager.cpp:704 msgid "Import Styles" @@ -4327,7 +4555,7 @@ msgstr "样式导入" #: ../src/dialog_style_manager.cpp:839 msgid "Are you sure? This cannot be undone!" -msgstr "您确定吗?这些操作将无法恢复!" +msgstr "您确定吗? 这些操作将无法恢复!" #: ../src/dialog_style_manager.cpp:839 msgid "Sort styles" @@ -4372,7 +4600,7 @@ msgstr "播放音频" #: ../src/dialog_styling_assistant.cpp:94 msgid "Click on list" -msgstr "点击列表:" +msgstr "点击列表: " #: ../src/dialog_styling_assistant.cpp:95 msgid "Select style" @@ -4380,7 +4608,7 @@ msgstr "选择样式" #: ../src/dialog_styling_assistant.cpp:99 msgid "&Seek video to line start time" -msgstr "视频跳至行开始(&S)" +msgstr "视频跳转到行开始(&S)" #: ../src/dialog_styling_assistant.cpp:108 ../src/dialog_translation.cpp:129 msgid "Actions" @@ -4404,11 +4632,11 @@ msgstr "文本导入选项" #: ../src/dialog_text_import.cpp:54 msgid "Actor separator:" -msgstr "说话人分隔符:" +msgstr "说话人分隔符:" #: ../src/dialog_text_import.cpp:56 msgid "Comment starter:" -msgstr "注释前缀:" +msgstr "注释前缀:" #: ../src/dialog_text_import.cpp:61 msgid "Include blank lines" @@ -4432,7 +4660,7 @@ msgstr "取消选择所有样式" #: ../src/dialog_timing_processor.cpp:169 msgid "Affect &selection only" -msgstr "仅应用于选中的行" +msgstr "仅应用于所选行" #: ../src/dialog_timing_processor.cpp:174 msgid "Lead-in/Lead-out" @@ -4448,11 +4676,11 @@ msgstr "将各行开始时间都提前" #: ../src/dialog_timing_processor.cpp:179 msgid "Lead in to be added, in milliseconds" -msgstr "增加开始时间(毫秒)" +msgstr "增加开始时间 (毫秒)" #: ../src/dialog_timing_processor.cpp:181 msgid "Add lead &out:" -msgstr "结束延后:" +msgstr "结束延后:" #: ../src/dialog_timing_processor.cpp:183 msgid "Enable adding of lead-outs to lines" @@ -4460,7 +4688,7 @@ msgstr "将各行结束时间都延后" #: ../src/dialog_timing_processor.cpp:184 msgid "Lead out to be added, in milliseconds" -msgstr "增加结束时间(毫秒)" +msgstr "增加结束时间 (毫秒)" #: ../src/dialog_timing_processor.cpp:189 msgid "Make adjacent subtitles continuous" @@ -4478,23 +4706,23 @@ msgstr "启用字幕紧贴功能,当彼此距离小于指定间隔时" #: ../src/dialog_timing_processor.cpp:195 msgid "Max gap:" -msgstr "最大间隙:" +msgstr "最大间隙:" #: ../src/dialog_timing_processor.cpp:196 msgid "" "Maximum difference between start and end time for two subtitles to be made " "continuous, in milliseconds" -msgstr "两条连续字幕的起止时间间隔的最大差值(毫秒)" +msgstr "两条连续字幕的起止时间间隔的最大差值 (毫秒)" #: ../src/dialog_timing_processor.cpp:197 msgid "Max overlap:" -msgstr "最大重叠:" +msgstr "最大重叠:" #: ../src/dialog_timing_processor.cpp:198 msgid "" "Maximum overlap between the end and start time for two subtitles to be made " "continuous, in milliseconds" -msgstr "两条连续字幕的起止时间间隔的最大差值(毫秒)" +msgstr "两条连续字幕的起止时间间隔的最大差值 (毫秒)" #: ../src/dialog_timing_processor.cpp:201 msgid "" @@ -4502,12 +4730,12 @@ msgid "" "extend or shrink start time of the second line; if totally to right, it will " "extend or shrink the end time of the first line." msgstr "" -"设置如何紧贴字幕行,如果设为完全向左,将扩展至次行的开始时间;如果完全向右,将" -"扩展至首行的结束时间。" +"设置如何让相邻的字幕行的时轴紧贴。如果设为完全向左,将紧贴至第二行的开始时" +"间;如果完全向右,将紧贴至第一行的结束时间。" #: ../src/dialog_timing_processor.cpp:204 msgid "Bias: Start <- " -msgstr "偏重:开始<- " +msgstr "偏向: 开始 <- " #: ../src/dialog_timing_processor.cpp:206 msgid " -> End" @@ -4515,7 +4743,7 @@ msgstr " -> 结束" #: ../src/dialog_timing_processor.cpp:214 msgid "Keyframe snapping" -msgstr "紧贴关键帧" +msgstr "对齐关键帧" #: ../src/dialog_timing_processor.cpp:217 msgid "E&nable" @@ -4525,47 +4753,47 @@ msgstr "启用(&N)" msgid "" "Enable snapping of subtitles to nearest keyframe, if distance is within " "threshold" -msgstr "使字幕紧贴至最近的关键帧,如果距离在阈值之内" +msgstr "使字幕对齐至最近的关键帧,如果距离在阈值之内" #: ../src/dialog_timing_processor.cpp:229 msgid "Starts before thres.:" -msgstr "开始前阈:" +msgstr "开始前阈:" #: ../src/dialog_timing_processor.cpp:230 msgid "" "Threshold for 'before start' distance, that is, how many milliseconds a " "subtitle must start before a keyframe to snap to it" -msgstr "“开始之前”距离阈值,也就是,当字幕在距离关键帧多少帧之前开始则要紧贴。" +msgstr "“开始之前”距离阈值,也就是,当字幕在距离关键帧多少帧之前开始则要对齐。" #: ../src/dialog_timing_processor.cpp:232 msgid "Starts after thres.:" -msgstr "开始后阈:" +msgstr "开始后阈:" #: ../src/dialog_timing_processor.cpp:233 msgid "" "Threshold for 'after start' distance, that is, how many milliseconds a " "subtitle must start after a keyframe to snap to it" -msgstr "“开始之后”距离阈值,也就是,当字幕在距离关键帧多少帧之后开始则要紧贴。" +msgstr "“开始之后”距离阈值,也就是,当字幕在距离关键帧多少帧之后开始则要对齐。" #: ../src/dialog_timing_processor.cpp:237 msgid "Ends before thres.:" -msgstr "结束前阈:" +msgstr "结束前阈:" #: ../src/dialog_timing_processor.cpp:238 msgid "" "Threshold for 'before end' distance, that is, how many milliseconds a " "subtitle must end before a keyframe to snap to it" -msgstr "“结束之前”距离阈值,也就是,当字幕在距离关键帧多少帧之前结束则要紧贴。" +msgstr "“结束之前”距离阈值,也就是,当字幕在距离关键帧多少帧之前结束则要对齐。" #: ../src/dialog_timing_processor.cpp:240 msgid "Ends after thres.:" -msgstr "结束后阈:" +msgstr "结束后阈:" #: ../src/dialog_timing_processor.cpp:241 msgid "" "Threshold for 'after end' distance, that is, how many milliseconds a " "subtitle must end after a keyframe to snap to it" -msgstr "“结束之后”距离阈值,也就是,当字幕在距离关键帧多少帧之后结束则要紧贴。" +msgstr "“结束之后”距离阈值,也就是,当字幕在距离关键帧多少帧之后结束则要对齐。" #: ../src/dialog_timing_processor.cpp:349 #, c-format @@ -4607,7 +4835,7 @@ msgstr "没有需要翻译的行。" #: ../src/dialog_translation.cpp:186 ../src/dialog_translation.cpp:236 #, c-format msgid "Current line: %d/%d" -msgstr "当前行: %d/%d" +msgstr "当前行: %d/%d" #: ../src/dialog_translation.cpp:273 msgid "translation assistant" @@ -4627,24 +4855,24 @@ msgstr "下个星期再将提醒我(&W)" #: ../src/dialog_version_check.cpp:295 msgid "Curl could not be initialized." -msgstr "" +msgstr "初始化 curl 库失败" #: ../src/dialog_version_check.cpp:317 #, c-format msgid "Checking for updates failed: %s." -msgstr "" +msgstr "检查更新失败: %s。" #: ../src/dialog_version_check.cpp:345 msgid "An update to Aegisub was found." -msgstr "发现Aegisub更新。" +msgstr "Aegisub 有可用更新。" #: ../src/dialog_version_check.cpp:347 msgid "Several possible updates to Aegisub were found." -msgstr "发现几个Aegisub可用更新。" +msgstr "Aegisub 有多个可用更新。" #: ../src/dialog_version_check.cpp:349 msgid "There are no updates to Aegisub." -msgstr "没有发现Aegisub更新。" +msgstr "Aegisub 无可用更新。" #: ../src/dialog_version_check.cpp:377 #, c-format @@ -4655,7 +4883,7 @@ msgid "" "If other applications can access the Internet fine, this is probably a " "temporary server problem on our end." msgstr "" -"Aegisub检查更新时出错:\n" +"Aegisub检查更新时出错: \n" "%s\n" "\n" "如果其他程序可以正常访问互联网,可能是我们的服务器暂时出了问题。" @@ -4670,32 +4898,32 @@ msgstr "视频详情" #: ../src/dialog_video_details.cpp:59 msgid "File name:" -msgstr "文件名:" +msgstr "文件名:" #: ../src/dialog_video_details.cpp:60 msgid "FPS:" -msgstr "帧率:" +msgstr "帧率:" #: ../src/dialog_video_details.cpp:61 msgid "Resolution:" -msgstr "分辨率:" +msgstr "分辨率:" #: ../src/dialog_video_details.cpp:62 #, c-format msgid "1 frame" msgid_plural "%d frames (%s)" -msgstr[0] "%d 帧(%s)" +msgstr[0] "%d 帧 (%s)" #: ../src/dialog_video_details.cpp:62 msgid "Length:" -msgstr "长度:" +msgstr "长度:" #: ../src/dialog_video_details.cpp:64 msgid "Decoder:" -msgstr "解码器:" +msgstr "解码器:" #: ../src/dialog_video_details.cpp:66 ../src/preferences.cpp:167 -#: ../src/preferences.cpp:438 +#: ../src/preferences.cpp:444 msgid "Video" msgstr "视频" @@ -4703,45 +4931,45 @@ msgstr "视频" msgid "Resolution mismatch" msgstr "分辨率不匹配" -#: ../src/dialog_video_properties.cpp:46 +#: ../src/dialog_video_properties.cpp:47 #, c-format msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" "载入视频的分辨率与脚本指定的分辨率不匹配\n" "\n" -"视频分辨率:\t%d × %d\n" -"脚本分辨率:\t%d × %d\n" +"视频分辨率: \t%d × %d\n" +"脚本分辨率: \t%d × %d\n" "\n" -"是否更改脚本分辨率以匹配视频?" +"是否更改脚本分辨率以匹配视频?" -#: ../src/dialog_video_properties.cpp:54 ../src/dialog_video_properties.cpp:63 +#: ../src/dialog_video_properties.cpp:58 ../src/dialog_video_properties.cpp:67 msgid "Set to video resolution" msgstr "直接设为视频分辨率" -#: ../src/dialog_video_properties.cpp:55 +#: ../src/dialog_video_properties.cpp:59 msgid "Resample script (stretch to new aspect ratio)" -msgstr "重设脚本分辨率(拉伸至视频的分辨率)" +msgstr "重设脚本分辨率 (拉伸至视频的分辨率)" -#: ../src/dialog_video_properties.cpp:56 +#: ../src/dialog_video_properties.cpp:60 msgid "Resample script (add borders)" -msgstr "重设脚本分辨率(等比缩放适应视频)" +msgstr "重设脚本分辨率 (等比缩放适应视频)" -#: ../src/dialog_video_properties.cpp:57 +#: ../src/dialog_video_properties.cpp:61 msgid "Resample script (remove borders)" -msgstr "重设脚本分辨率(等比缩放铺满视频)" +msgstr "重设脚本分辨率 (等比缩放铺满视频)" -#: ../src/dialog_video_properties.cpp:64 +#: ../src/dialog_video_properties.cpp:68 msgid "Resample script" msgstr "重设脚本分辨率" -#: ../src/dialog_video_properties.cpp:163 +#: ../src/dialog_video_properties.cpp:167 msgid "change script resolution" msgstr "更改脚本分辨率" @@ -4753,7 +4981,7 @@ msgstr "修正样式" msgid "" "Fixes styles by replacing any style that isn't available on file with " "Default." -msgstr "修正样式将文件中不存在的样式以默认样式 (Default) 替代。" +msgstr "修正样式,将文件中不存在的样式替换为默认样式 (Default)。" #: ../src/export_framerate.cpp:52 msgid "Transform Framerate" @@ -4769,7 +4997,7 @@ msgid "" "It can also be used to convert subtitles to a different speed video, such as " "NTSC to PAL speedup." msgstr "" -"将字幕时间(包括特效标签中的时间)从输入帧率转换为输出帧率。\n" +"将字幕时间 (包括样式覆写标签中的时间) 从输入帧率转换为输出帧率。\n" "\n" "转换标准字幕时间到VFRaC字幕时间是特别有用的。\n" "它也可以用来转换字幕到不同帧率的视频,例如应对NTSC到PAL的帧率提高。" @@ -4780,7 +5008,7 @@ msgstr "可变(&A)" #: ../src/export_framerate.cpp:96 msgid "&Constant: " -msgstr "固定(&C):" +msgstr "固定(&C): " #: ../src/export_framerate.cpp:108 msgid "&Reverse transformation" @@ -4788,19 +5016,19 @@ msgstr "逆转换(&R)" #: ../src/export_framerate.cpp:116 msgid "Input framerate: " -msgstr "输入帧率:" +msgstr "输入帧率: " #: ../src/export_framerate.cpp:118 msgid "Output: " -msgstr "输出:" +msgstr "输出: " #: ../src/ffmpegsource_common.cpp:77 msgid "Indexing" -msgstr "索引" +msgstr "索引中" #: ../src/ffmpegsource_common.cpp:78 msgid "Reading timecodes and frame/sample data" -msgstr "正在读取时间码和帧/采样数据" +msgstr "正在读取 时间码 和 帧/采样 数据" #: ../src/ffmpegsource_common.cpp:126 #, c-format @@ -4809,29 +5037,29 @@ msgstr "轨道 %02d: %s" #: ../src/ffmpegsource_common.cpp:131 msgid "Multiple audio tracks detected, please choose the one you wish to load:" -msgstr "发现多条音频流,请选择要加载的音轨:" +msgstr "发现多条音频轨道,请选择您希望加载的那条:" #: ../src/ffmpegsource_common.cpp:131 msgid "Multiple video tracks detected, please choose the one you wish to load:" -msgstr "发现多条视频流,请选择要加载的视频:" +msgstr "发现多条视频轨道,请选择您希望加载的那条:" #: ../src/ffmpegsource_common.cpp:132 msgid "Choose audio track" -msgstr "选择音频流" +msgstr "选择音频轨道" #: ../src/ffmpegsource_common.cpp:132 msgid "Choose video track" -msgstr "选择视频流" +msgstr "选择视频轨道" #: ../src/font_file_lister.cpp:67 #, c-format msgid "Style '%s' does not exist\n" -msgstr "样式 '%s' 不存在\n" +msgstr "不存在样式 '%s'\n" #: ../src/font_file_lister.cpp:154 #, c-format msgid "Font '%s' is used in a drawing, but not in any text.\n" -msgstr "" +msgstr "在绘图标签中使用了字体 '%s',但没有在文本中使用它。\n" #: ../src/font_file_lister.cpp:160 #, c-format @@ -4841,17 +5069,17 @@ msgstr "无法找到字体 '%s'\n" #: ../src/font_file_lister.cpp:168 #, c-format msgid "Found '%s' at '%s'\n" -msgstr "已找到 '%s' 字体位于 '%s'\n" +msgstr "已找到字体 '%s' 位于 '%s'\n" #: ../src/font_file_lister.cpp:174 #, c-format msgid "'%s' does not have a bold variant.\n" -msgstr "'%s' 不具有粗体。\n" +msgstr "未找到 '%s' 的粗体版本(bold variant)。\n" #: ../src/font_file_lister.cpp:176 #, c-format msgid "'%s' does not have an italic variant.\n" -msgstr "'%s' 不具有斜体。\n" +msgstr "未找到 '%s' 的斜体版本(italic variant)。\n" #: ../src/font_file_lister.cpp:180 #, c-format @@ -4861,15 +5089,15 @@ msgstr "'%s' 缺少 %d 个字形。\n" #: ../src/font_file_lister.cpp:182 #, c-format msgid "'%s' is missing the following glyphs used: %s\n" -msgstr "'%s' 缺少下列字形:%s\n" +msgstr "'%s' 缺少下列字形: %s\n" #: ../src/font_file_lister.cpp:193 msgid "Used in styles:\n" -msgstr "应用于样式:\n" +msgstr "应用于样式:\n" #: ../src/font_file_lister.cpp:199 msgid "Used on lines:" -msgstr "应用于行:" +msgstr "应用于行:" #: ../src/font_file_lister.cpp:211 msgid "Parsing file\n" @@ -4902,11 +5130,11 @@ msgstr[0] "有 %d 个字体无法找到。\n" msgid "One font was found, but was missing glyphs used in the script.\n" msgid_plural "" "%d fonts were found, but were missing glyphs used in the script.\n" -msgstr[0] "找到了 %d 个字体,但是缺少脚本中使用的字形。\n" +msgstr[0] "有 %d 个已找到的字体缺少脚本中使用的字形。\n" #: ../src/font_file_lister_fontconfig.cpp:55 msgid "Updating font cache\n" -msgstr "正在更新字体缓存…\n" +msgstr "正在更新字体缓存\n" #: ../src/grid_column.cpp:105 msgid "#" @@ -4950,9 +5178,9 @@ msgstr "每秒字符数" #: ../src/hotkey.cpp:261 msgid "Invalid command name for hotkey" -msgstr "热键命令名称无效" +msgstr "快捷键命令名称无效" -#: ../src/main.cpp:246 +#: ../src/main.cpp:258 #, c-format msgid "" "Oops, Aegisub has crashed!\n" @@ -4963,28 +5191,36 @@ msgid "" "\n" "Aegisub will now close." msgstr "" -"喔唷,Aegisub娘崩溃啦!\n" +"哎呀,Aegisub娘崩溃啦!\n" "\n" -"已经将你的文件的副本保存到了:\n" +"已经将你的文件的副本保存到了: \n" "\n" "%s\n" "Aegisub被迫立即关闭。" -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "Check for updates?" -msgstr "是否检查更新?" +msgstr "是否检查更新?" -#: ../src/main.cpp:273 +#: ../src/main.cpp:285 msgid "" "Do you want Aegisub to check for updates whenever it starts? You can still " "do it manually via the Help menu." -msgstr "您想让Aegisub启动时检查更新吗?您也可以通过帮助菜单手动进行。" +msgstr "您想让Aegisub启动时检查更新吗? 您也可以通过帮助菜单手动进行。" -#: ../src/main.cpp:390 ../src/main.cpp:393 +#: ../src/main.cpp:402 ../src/main.cpp:405 msgid "Program error" msgstr "程序错误" -#: ../src/main.cpp:407 +#: ../src/main.cpp:405 +#, c-format +msgid "" +"Aegisub has crashed while starting up!\n" +"\n" +"The last startup step attempted was: %s." +msgstr "" + +#: ../src/main.cpp:419 #, c-format msgid "" "An unexpected error has occurred. Please save your work and restart " @@ -4992,13 +5228,17 @@ msgid "" "\n" "Error Message: %s" msgstr "" -"发生了一个意外的错误。请保存您的文件并重启Aegisub。\n" +"发生了一个意外的错误。请保存您的文件并重启 Aegisub。\n" "\n" -"错误信息: %s" +"错误信息: %s" + +#: ../src/main.cpp:420 +msgid "Exception in event handler" +msgstr "" #: ../src/menu.cpp:96 msgid "Empty" -msgstr "空白" +msgstr "空" #: ../src/menu.cpp:235 msgid "&Recent" @@ -5008,24 +5248,24 @@ msgstr "最近打开(&R)" msgid "No Automation macros loaded" msgstr "没有自动化宏被加载" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Choose which track to read:" -msgstr "选择读取哪个轨道:" +msgstr "选择读取哪个轨道:" -#: ../src/mkv_wrap.cpp:238 +#: ../src/mkv_wrap.cpp:241 msgid "Multiple subtitle tracks found" msgstr "发现多个字幕轨道" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Parsing Matroska" -msgstr "正在分析Matroska(MKV)文件" +msgstr "正在分析 Matroska(MKV) 文件" -#: ../src/mkv_wrap.cpp:283 +#: ../src/mkv_wrap.cpp:286 msgid "Reading subtitles from Matroska file." -msgstr "正在从Matroska(MKV)文件中读取字幕。" +msgstr "正在从 Matroska(MKV) 文件中读取字幕。" #: ../src/preferences.cpp:63 ../src/preferences.cpp:65 -#: ../src/preferences.cpp:335 ../src/preferences.cpp:356 +#: ../src/preferences.cpp:341 ../src/preferences.cpp:362 msgid "General" msgstr "通用" @@ -5049,11 +5289,11 @@ msgstr "工具栏图标大小" msgid "Always" msgstr "总是" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Ask" msgstr "询问" -#: ../src/preferences.cpp:72 ../src/preferences.cpp:197 +#: ../src/preferences.cpp:72 ../src/preferences.cpp:203 msgid "Never" msgstr "从不" @@ -5098,21 +5338,21 @@ msgstr "新建字幕" #: ../src/preferences.cpp:117 msgid "MicroDVD import" -msgstr "导入MicroDVD字幕" +msgstr "导入 MicroDVD" #: ../src/preferences.cpp:118 msgid "SRT import" -msgstr "导入SRT字幕" +msgstr "导入 SRT" #: ../src/preferences.cpp:119 msgid "TTXT import" -msgstr "导入TTXT" +msgstr "导入 TTXT" #: ../src/preferences.cpp:120 msgid "Plain text import" -msgstr "导入纯文本" +msgstr "导入 纯文本" -#: ../src/preferences.cpp:127 ../src/preferences.cpp:371 +#: ../src/preferences.cpp:127 ../src/preferences.cpp:377 msgid "Audio" msgstr "音频" @@ -5142,27 +5382,27 @@ msgstr "按住并拖动左键可移动结束标记" #: ../src/preferences.cpp:136 msgid "Default timing length (ms)" -msgstr "默认时间轴长度(毫秒)" +msgstr "默认时间轴长度 (毫秒)" #: ../src/preferences.cpp:137 msgid "Default lead-in length (ms)" -msgstr "默认提前开始时间长度(毫秒)" +msgstr "默认提前开始时间长度 (毫秒)" #: ../src/preferences.cpp:138 msgid "Default lead-out length (ms)" -msgstr "默认延后结束时间长度(毫秒)" +msgstr "默认延后结束时间长度 (毫秒)" #: ../src/preferences.cpp:140 msgid "Marker drag-start sensitivity (px)" -msgstr "标记拖动灵敏度(像素)" +msgstr "标记拖动灵敏度 (像素)" #: ../src/preferences.cpp:141 msgid "Line boundary thickness (px)" -msgstr "标记线宽度(像素)" +msgstr "标记线宽度 (像素)" #: ../src/preferences.cpp:142 msgid "Maximum snap distance (px)" -msgstr "标记会吸附的最大距离(像素)" +msgstr "标记会吸附的最大距离 (像素)" #: ../src/preferences.cpp:144 msgid "Don't show" @@ -5208,7 +5448,7 @@ msgstr "显示光标所指的时间" msgid "Video position" msgstr "显示视频位置" -#: ../src/preferences.cpp:155 ../src/preferences.cpp:251 +#: ../src/preferences.cpp:155 ../src/preferences.cpp:257 msgid "Seconds boundaries" msgstr "次要边线" @@ -5222,7 +5462,7 @@ msgstr "音频栏" #: ../src/preferences.cpp:170 msgid "Show keyframes in slider" -msgstr "在进度条上显示关键帧" +msgstr "进度条上显示关键帧" #: ../src/preferences.cpp:172 msgid "Only show visual tools when mouse is over video" @@ -5236,580 +5476,660 @@ msgstr "选择的行改变后,视频位置变为所选行的开始时间" msgid "Automatically open audio when opening video" msgstr "打开视频时自动加载音频" +#: ../src/preferences.cpp:179 +msgid "Does nothing" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Pans the video" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Pans the video (X/Y swapped)" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Resizes the video box (reversed)" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video" +msgstr "" + +#: ../src/preferences.cpp:179 +msgid "Zooms the video (reversed)" +msgstr "" + #: ../src/preferences.cpp:181 -msgid "Default Zoom" -msgstr "默认缩放" +msgid "Scrolling on the video display" +msgstr "" + +#: ../src/preferences.cpp:182 +msgid "Ctrl+Scrolling on the video display" +msgstr "" #: ../src/preferences.cpp:183 +msgid "Shift+Scrolling on the video display" +msgstr "" + +#: ../src/preferences.cpp:187 +msgid "Default Zoom" +msgstr "默认缩放倍率" + +#: ../src/preferences.cpp:189 msgid "Fast jump step in frames" msgstr "快进帧数" -#: ../src/preferences.cpp:187 +#: ../src/preferences.cpp:193 msgid "Screenshot save path" msgstr "截图保存路径" -#: ../src/preferences.cpp:189 +#: ../src/preferences.cpp:195 msgid "Script Resolution" msgstr "脚本分辨率" -#: ../src/preferences.cpp:190 +#: ../src/preferences.cpp:196 msgid "Use resolution of first video opened" msgstr "使用第一次打开的视频的分辨率" -#: ../src/preferences.cpp:193 +#: ../src/preferences.cpp:199 msgid "Default width" msgstr "默认宽度" -#: ../src/preferences.cpp:195 +#: ../src/preferences.cpp:201 msgid "Default height" msgstr "默认高度" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always resample" msgstr "重设分辨率" -#: ../src/preferences.cpp:197 +#: ../src/preferences.cpp:203 msgid "Always set" msgstr "使用视频分辨率" -#: ../src/preferences.cpp:199 +#: ../src/preferences.cpp:205 msgid "Match video resolution on open" msgstr "在打开视频时匹配分辨率" -#: ../src/preferences.cpp:206 +#: ../src/preferences.cpp:212 msgid "Interface" msgstr "界面" -#: ../src/preferences.cpp:208 +#: ../src/preferences.cpp:214 msgid "Edit Box" msgstr "编辑框" -#: ../src/preferences.cpp:209 +#: ../src/preferences.cpp:215 msgid "Enable call tips" msgstr "启用提示" -#: ../src/preferences.cpp:210 +#: ../src/preferences.cpp:216 msgid "Overwrite in time boxes" msgstr "时间框内覆盖写入" -#: ../src/preferences.cpp:211 +#: ../src/preferences.cpp:217 msgid "Shift+Enter adds \\n" -msgstr "" +msgstr "Shift+Enter 改为键入 \\n" -#: ../src/preferences.cpp:212 +#: ../src/preferences.cpp:218 msgid "Enable syntax highlighting" msgstr "启用语法高亮" -#: ../src/preferences.cpp:213 +#: ../src/preferences.cpp:219 msgid "Dictionaries path" msgstr "字典文件路径" -#: ../src/preferences.cpp:216 +#: ../src/preferences.cpp:222 msgid "Character Counter" msgstr "字数统计器" -#: ../src/preferences.cpp:217 +#: ../src/preferences.cpp:223 msgid "Maximum characters per line" msgstr "每行最大字符数" -#: ../src/preferences.cpp:218 +#: ../src/preferences.cpp:224 msgid "Characters Per Second Warning Threshold" msgstr "每秒字符数警告阈值" -#: ../src/preferences.cpp:219 +#: ../src/preferences.cpp:225 msgid "Characters Per Second Error Threshold" msgstr "每秒字符数报错阈值" -#: ../src/preferences.cpp:220 +#: ../src/preferences.cpp:226 msgid "Ignore whitespace" msgstr "忽略空格" -#: ../src/preferences.cpp:221 +#: ../src/preferences.cpp:227 msgid "Ignore punctuation" msgstr "忽略标点符号" -#: ../src/preferences.cpp:223 +#: ../src/preferences.cpp:229 msgid "Grid" msgstr "字幕栏" -#: ../src/preferences.cpp:224 +#: ../src/preferences.cpp:230 msgid "Focus grid on click" msgstr "点击激活字幕栏" -#: ../src/preferences.cpp:225 +#: ../src/preferences.cpp:231 msgid "Highlight visible subtitles" msgstr "高亮可见字幕" -#: ../src/preferences.cpp:226 +#: ../src/preferences.cpp:232 msgid "Hide overrides symbol" -msgstr "特效标签替代符号" +msgstr "代替样式覆写标签的字符串" -#: ../src/preferences.cpp:230 +#: ../src/preferences.cpp:236 msgid "Skip over whitespace" -msgstr "" +msgstr "跳过空行" -#: ../src/preferences.cpp:245 +#: ../src/preferences.cpp:251 msgid "Audio Display" -msgstr "音频显示" +msgstr "音频可视化" -#: ../src/preferences.cpp:246 +#: ../src/preferences.cpp:252 msgid "Play cursor" msgstr "播放游标" -#: ../src/preferences.cpp:247 +#: ../src/preferences.cpp:253 msgid "Line boundary start" msgstr "起始边线" -#: ../src/preferences.cpp:248 +#: ../src/preferences.cpp:254 msgid "Line boundary end" msgstr "结束边线" -#: ../src/preferences.cpp:249 +#: ../src/preferences.cpp:255 msgid "Line boundary inactive line" msgstr "非活动行边线" -#: ../src/preferences.cpp:250 +#: ../src/preferences.cpp:256 msgid "Syllable boundaries" msgstr "音节边线" -#: ../src/preferences.cpp:253 +#: ../src/preferences.cpp:259 msgid "Syntax Highlighting" msgstr "语法高亮" -#: ../src/preferences.cpp:254 +#: ../src/preferences.cpp:260 msgid "Background" msgstr "背景" -#: ../src/preferences.cpp:255 +#: ../src/preferences.cpp:261 msgid "Normal" msgstr "普通文本" -#: ../src/preferences.cpp:256 +#: ../src/preferences.cpp:262 msgid "Comments" msgstr "注释" -#: ../src/preferences.cpp:257 +#: ../src/preferences.cpp:263 msgid "Drawing Commands" -msgstr "" +msgstr "绘图命令关键字" -#: ../src/preferences.cpp:258 +#: ../src/preferences.cpp:264 msgid "Drawing X Coords" -msgstr "" +msgstr "绘图点的 X 坐标" -#: ../src/preferences.cpp:259 +#: ../src/preferences.cpp:265 msgid "Drawing Y Coords" -msgstr "" +msgstr "绘图点的 Y 坐标" -#: ../src/preferences.cpp:260 +#: ../src/preferences.cpp:266 msgid "Underline Spline Endpoints" -msgstr "" +msgstr "为贝塞尔曲线闭合点坐标添加下划线" -#: ../src/preferences.cpp:262 +#: ../src/preferences.cpp:268 msgid "Brackets" msgstr "大括号" -#: ../src/preferences.cpp:263 +#: ../src/preferences.cpp:269 msgid "Slashes and Parentheses" msgstr "斜杠和圆括号" -#: ../src/preferences.cpp:264 +#: ../src/preferences.cpp:270 msgid "Tags" msgstr "标签" -#: ../src/preferences.cpp:265 +#: ../src/preferences.cpp:271 msgid "Parameters" msgstr "参数" -#: ../src/preferences.cpp:267 +#: ../src/preferences.cpp:273 msgid "Error Background" msgstr "错误背景" -#: ../src/preferences.cpp:268 +#: ../src/preferences.cpp:274 msgid "Line Break" msgstr "换行符" -#: ../src/preferences.cpp:269 +#: ../src/preferences.cpp:275 msgid "Karaoke templates" msgstr "卡拉OK模版" -#: ../src/preferences.cpp:270 +#: ../src/preferences.cpp:276 msgid "Karaoke variables" msgstr "卡拉OK变量" -#: ../src/preferences.cpp:276 +#: ../src/preferences.cpp:282 msgid "Audio Color Schemes" -msgstr "音频配色方案" +msgstr "音频可视化配色方案" -#: ../src/preferences.cpp:278 ../src/preferences.cpp:387 +#: ../src/preferences.cpp:284 ../src/preferences.cpp:393 msgid "Spectrum" msgstr "频谱" -#: ../src/preferences.cpp:279 +#: ../src/preferences.cpp:285 msgid "Waveform" msgstr "波形" -#: ../src/preferences.cpp:281 +#: ../src/preferences.cpp:287 msgid "Subtitle Grid" msgstr "字幕栏" -#: ../src/preferences.cpp:282 +#: ../src/preferences.cpp:288 msgid "Standard foreground" msgstr "普通行前景色" -#: ../src/preferences.cpp:283 +#: ../src/preferences.cpp:289 msgid "Standard background" msgstr "普通行背景色" -#: ../src/preferences.cpp:284 +#: ../src/preferences.cpp:290 msgid "Selection foreground" -msgstr "选取行前景色" +msgstr "选中行前景色" -#: ../src/preferences.cpp:285 +#: ../src/preferences.cpp:291 msgid "Selection background" -msgstr "选取行背景色" +msgstr "选中行背景色" -#: ../src/preferences.cpp:286 +#: ../src/preferences.cpp:292 msgid "Collision foreground" -msgstr "冲突行前景色" +msgstr "与其他行时轴重叠行前景色" -#: ../src/preferences.cpp:287 +#: ../src/preferences.cpp:293 msgid "In frame background" -msgstr "在当前帧显示的行背景色" +msgstr "与视频预览帧时轴重叠行背景色" -#: ../src/preferences.cpp:288 +#: ../src/preferences.cpp:294 msgid "Comment background" msgstr "注释行背景色" -#: ../src/preferences.cpp:289 +#: ../src/preferences.cpp:295 msgid "Selected comment background" msgstr "选中注释行背景色" -#: ../src/preferences.cpp:290 +#: ../src/preferences.cpp:296 msgid "Header background" -msgstr "表头背景色" +msgstr "标题行背景色" -#: ../src/preferences.cpp:291 +#: ../src/preferences.cpp:297 msgid "Left Column" -msgstr "左边栏颜色" +msgstr "行号列背景色" -#: ../src/preferences.cpp:292 +#: ../src/preferences.cpp:298 msgid "Active Line Border" -msgstr "活动行边框颜色" +msgstr "当前操作行边框颜色" -#: ../src/preferences.cpp:293 +#: ../src/preferences.cpp:299 msgid "Lines" msgstr "分隔线颜色" -#: ../src/preferences.cpp:294 +#: ../src/preferences.cpp:300 msgid "CPS Error" -msgstr "每秒字符数错误" +msgstr "每秒字符数报错颜色" -#: ../src/preferences.cpp:296 +#: ../src/preferences.cpp:302 msgid "Visual Typesetting Tools" -msgstr "" +msgstr "可视化绘图工具" -#: ../src/preferences.cpp:297 +#: ../src/preferences.cpp:303 msgid "Primary Lines" -msgstr "" +msgstr "主要颜色" -#: ../src/preferences.cpp:298 +#: ../src/preferences.cpp:304 msgid "Secondary Lines" -msgstr "" +msgstr "次要颜色" -#: ../src/preferences.cpp:299 +#: ../src/preferences.cpp:305 msgid "Primary Highlight" -msgstr "" +msgstr "主要高亮" -#: ../src/preferences.cpp:300 +#: ../src/preferences.cpp:306 msgid "Secondary Highlight" -msgstr "" +msgstr "次要高亮" -#: ../src/preferences.cpp:303 +#: ../src/preferences.cpp:309 msgid "Visual Typesetting Tools Alpha" -msgstr "" +msgstr "可视化绘图工具透明度" -#: ../src/preferences.cpp:304 +#: ../src/preferences.cpp:310 msgid "Shaded Area" -msgstr "" +msgstr "遮罩透明度" -#: ../src/preferences.cpp:313 +#: ../src/preferences.cpp:319 msgid "Backup" msgstr "备份" -#: ../src/preferences.cpp:315 +#: ../src/preferences.cpp:321 msgid "Automatic Save" msgstr "自动保存" -#: ../src/preferences.cpp:316 ../src/preferences.cpp:324 +#: ../src/preferences.cpp:322 ../src/preferences.cpp:330 msgid "Enable" msgstr "启用" -#: ../src/preferences.cpp:319 +#: ../src/preferences.cpp:325 msgid "Interval in seconds" -msgstr "保存间隔(秒)" +msgstr "保存间隔 (秒)" -#: ../src/preferences.cpp:320 ../src/preferences.cpp:326 -#: ../src/preferences.cpp:385 +#: ../src/preferences.cpp:326 ../src/preferences.cpp:332 +#: ../src/preferences.cpp:391 msgid "Path" msgstr "路径" -#: ../src/preferences.cpp:321 +#: ../src/preferences.cpp:327 msgid "Autosave after every change" msgstr "每次更改后自动保存" -#: ../src/preferences.cpp:323 +#: ../src/preferences.cpp:329 msgid "Automatic Backup" msgstr "自动备份" -#: ../src/preferences.cpp:337 +#: ../src/preferences.cpp:343 msgid "Base path" msgstr "根路径" -#: ../src/preferences.cpp:338 +#: ../src/preferences.cpp:344 msgid "Include path" msgstr "包含路径" -#: ../src/preferences.cpp:339 +#: ../src/preferences.cpp:345 msgid "Auto-load path" msgstr "自动载入路径" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "0: Fatal" msgstr "0: 致命错误" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "1: Error" msgstr "1: 错误" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "2: Warning" msgstr "2: 警告" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "3: Hint" msgstr "3: 提示" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "4: Debug" msgstr "4: 调试" -#: ../src/preferences.cpp:341 +#: ../src/preferences.cpp:347 msgid "5: Trace" msgstr "5: 跟踪" -#: ../src/preferences.cpp:343 +#: ../src/preferences.cpp:349 msgid "Trace level" msgstr "跟踪等级" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "All scripts" msgstr "所有脚本" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Global autoload scripts" msgstr "全局自动载入脚本" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "No scripts" msgstr "无脚本" -#: ../src/preferences.cpp:345 +#: ../src/preferences.cpp:351 msgid "Subtitle-local scripts" msgstr "本地字幕脚本" -#: ../src/preferences.cpp:347 +#: ../src/preferences.cpp:353 msgid "Autoreload on Export" msgstr "导出时自动重新载入" -#: ../src/preferences.cpp:354 +#: ../src/preferences.cpp:360 msgid "Advanced" msgstr "高级" -#: ../src/preferences.cpp:358 +#: ../src/preferences.cpp:364 msgid "" -"Changing these settings might result in bugs and/or crashes. Do not touch " +"Changing these settings might result in bugs and/or crashes. Do not touch " "these unless you know what you're doing." msgstr "" -"修改这些设置可能导致出错,甚至异常崩溃, \n" +"修改这些设置可能导致出错,甚至异常崩溃,\n" "除非您知道自己在做什么,否则请不要修改这些设置。" -#: ../src/preferences.cpp:373 ../src/preferences.cpp:440 +#: ../src/preferences.cpp:379 ../src/preferences.cpp:446 msgid "Expert" msgstr "专家设置" -#: ../src/preferences.cpp:376 +#: ../src/preferences.cpp:382 msgid "Audio provider" -msgstr "音频来自" +msgstr "视频服务后端" -#: ../src/preferences.cpp:379 +#: ../src/preferences.cpp:385 msgid "Audio player" -msgstr "音频播放器" +msgstr "音频服务后端" -#: ../src/preferences.cpp:381 +#: ../src/preferences.cpp:387 msgid "Cache" msgstr "缓存" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "Hard Disk" msgstr "硬盘" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "None (NOT RECOMMENDED)" -msgstr "无(不推荐)" +msgstr "无 (不推荐)" -#: ../src/preferences.cpp:382 +#: ../src/preferences.cpp:388 msgid "RAM" msgstr "内存" -#: ../src/preferences.cpp:384 +#: ../src/preferences.cpp:390 msgid "Cache type" msgstr "缓存类型" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Better quality" msgstr "较好质量" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "High quality" -msgstr "高质量" +msgstr "较高质量" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Insane quality" msgstr "极高质量" -#: ../src/preferences.cpp:389 +#: ../src/preferences.cpp:395 msgid "Regular quality" msgstr "一般质量" -#: ../src/preferences.cpp:391 +#: ../src/preferences.cpp:397 msgid "Quality" msgstr "质量" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Compressed" -msgstr "" +msgstr "压缩 (Compressed)" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Extended" -msgstr "" +msgstr "扩展 (Extended)" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Linear" -msgstr "" +msgstr "线性 (Linear)" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Logarithmic" -msgstr "" +msgstr "对数 (Logarithmic)" -#: ../src/preferences.cpp:393 +#: ../src/preferences.cpp:399 msgid "Medium" -msgstr "" +msgstr "中频 (Medium)" -#: ../src/preferences.cpp:395 +#: ../src/preferences.cpp:401 msgid "Frequency mapping" -msgstr "" +msgstr "频率映射" -#: ../src/preferences.cpp:397 +#: ../src/preferences.cpp:403 msgid "Cache memory max (MB)" -msgstr "缓存最大容量 (MB)" +msgstr "最大缓存 (MB)" -#: ../src/preferences.cpp:403 +#: ../src/preferences.cpp:409 msgid "Avisynth down-mixer" -msgstr "Avisynth 声道混合" +msgstr "Avisynth 声道混合方法" -#: ../src/preferences.cpp:404 +#: ../src/preferences.cpp:410 msgid "Force sample rate" msgstr "强制转换采样率" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Abort" msgstr "取消" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Ignore" msgstr "忽略" -#: ../src/preferences.cpp:410 +#: ../src/preferences.cpp:416 msgid "Stop" msgstr "停止" -#: ../src/preferences.cpp:412 +#: ../src/preferences.cpp:418 msgid "Audio indexing error handling mode" msgstr "音频索引错误处理模式" -#: ../src/preferences.cpp:414 +#: ../src/preferences.cpp:420 msgid "Always index all audio tracks" msgstr "总是索引所有音轨" -#: ../src/preferences.cpp:419 +#: ../src/preferences.cpp:425 msgid "Portaudio device" msgstr "Portaudio 设备" -#: ../src/preferences.cpp:424 +#: ../src/preferences.cpp:430 msgid "OSS Device" msgstr "OSS 设备" -#: ../src/preferences.cpp:429 +#: ../src/preferences.cpp:435 msgid "Buffer latency" msgstr "缓冲延迟" -#: ../src/preferences.cpp:430 +#: ../src/preferences.cpp:436 msgid "Buffer length" msgstr "缓冲长度" -#: ../src/preferences.cpp:443 +#: ../src/preferences.cpp:449 msgid "Video provider" -msgstr "视频来自" +msgstr "视频服务后端" -#: ../src/preferences.cpp:446 +#: ../src/preferences.cpp:452 msgid "Subtitles provider" -msgstr "字幕来自" +msgstr "字幕服务后端" -#: ../src/preferences.cpp:450 +#: ../src/preferences.cpp:456 msgid "Allow pre-2.56a Avisynth" msgstr "允许使用2.56a之前版本的Avisynth" -#: ../src/preferences.cpp:452 +#: ../src/preferences.cpp:458 msgid "Avisynth memory limit" msgstr "Avisynth 内存限额" -#: ../src/preferences.cpp:460 +#: ../src/preferences.cpp:464 +msgid "Debug" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Fatal" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Info" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Panic" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Quiet" +msgstr "" + +#: ../src/preferences.cpp:464 +msgid "Verbose" +msgstr "" + +#: ../src/preferences.cpp:464 ../src/project.cpp:318 +msgid "Warning" +msgstr "警告" + +#: ../src/preferences.cpp:466 msgid "Debug log verbosity" -msgstr "Debug日志的详细级别" +msgstr "Debug 日志级别" -#: ../src/preferences.cpp:462 +#: ../src/preferences.cpp:468 msgid "Decoding threads" msgstr "解码线程" -#: ../src/preferences.cpp:463 +#: ../src/preferences.cpp:469 msgid "Enable unsafe seeking" msgstr "允许可能不安全的定位" -#: ../src/preferences.cpp:599 +#: ../src/preferences.cpp:605 msgid "Hotkeys" -msgstr "热键" +msgstr "快捷键" + +#: ../src/preferences.cpp:609 +msgid "Search" +msgstr "" -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:625 ../src/preferences.cpp:628 +msgid "Hotkey" +msgstr "快捷键" + +#: ../src/preferences.cpp:626 ../src/preferences.cpp:631 +msgid "Command" +msgstr "" + +#: ../src/preferences.cpp:705 msgid "" "Are you sure that you want to restore the defaults? All your settings will " "be overridden." -msgstr "您确定要恢复默认吗?您的所有设置都将被覆盖。" +msgstr "您确定要恢复默认吗? 您的所有设置都将被覆盖。" -#: ../src/preferences.cpp:697 +#: ../src/preferences.cpp:705 msgid "Restore defaults?" -msgstr "恢复默认?" +msgstr "恢复默认?" -#: ../src/preferences.cpp:715 +#: ../src/preferences.cpp:723 msgid "Preferences" msgstr "首选项" -#: ../src/preferences.cpp:743 +#: ../src/preferences.cpp:751 msgid "&Restore Defaults" msgstr "恢复默认(&R)" #: ../src/preferences_base.cpp:62 msgid "Please choose the folder:" -msgstr "请选择文件夹:" +msgstr "请选择文件夹:" #: ../src/preferences_base.cpp:208 msgid "Browse..." @@ -5823,14 +6143,23 @@ msgstr "选择…" msgid "Font Size" msgstr "字体大小" +#: ../src/project.cpp:85 +msgid "Error loading file" +msgstr "载入文件错误" + +#: ../src/project.cpp:111 ../src/project.cpp:130 +#, c-format +msgid "%s not found." +msgstr "没找到 %s。" + #: ../src/project.cpp:186 msgid "Do you want to load/unload the associated files?" -msgstr "您要加载/卸载相关文件吗?" +msgstr "您要加载/卸载相关文件吗?" #: ../src/project.cpp:197 #, c-format msgid "Load audio file: %s" -msgstr "载入音频文件:%s" +msgstr "载入音频文件: %s" #: ../src/project.cpp:197 msgid "Unload audio" @@ -5839,7 +6168,7 @@ msgstr "关闭音频" #: ../src/project.cpp:199 #, c-format msgid "Load video file: %s" -msgstr "载入视频文件:%s" +msgstr "载入视频文件: %s" #: ../src/project.cpp:199 msgid "Unload video" @@ -5848,7 +6177,7 @@ msgstr "关闭视频" #: ../src/project.cpp:201 #, c-format msgid "Load timecodes file: %s" -msgstr "载入时间码文件:%s" +msgstr "载入时间码文件: %s" #: ../src/project.cpp:201 msgid "Unload timecodes" @@ -5857,7 +6186,7 @@ msgstr "关闭时间码" #: ../src/project.cpp:203 #, c-format msgid "Load keyframes file: %s" -msgstr "载入关键帧文件:%s" +msgstr "载入关键帧文件: %s" #: ../src/project.cpp:203 msgid "Unload keyframes" @@ -5865,11 +6194,11 @@ msgstr "关闭关键帧" #: ../src/project.cpp:205 msgid "(Un)Load files?" -msgstr "加载/卸载相关文件吗?" +msgstr "加载/卸载相关文件?" #: ../src/project.cpp:254 msgid "The audio file was not found: " -msgstr "未找到音频文件:" +msgstr "未找到音频文件: " #: ../src/project.cpp:262 msgid "" @@ -5878,9 +6207,9 @@ msgid "" "\n" "The following providers were tried:\n" msgstr "" -"可用的音频来源无法将所选文件识别为包含音频的文件。\n" +"可用的音频服务后端都无法将所选文件识别为包含音频的文件。\n" "\n" -"已尝试下列来源:\n" +"已尝试下列服务后端:\n" #: ../src/project.cpp:265 msgid "" @@ -5889,11 +6218,23 @@ msgid "" "\n" "The following providers were tried:\n" msgstr "" -"可用的音频来源没有可用于处理所选文件的解码器。\n" +"可用的音频服务后端都没有适配所选文件的解码器。\n" "\n" -"已尝试下列来源:\n" +"已尝试下列服务后端:\n" + +#: ../src/project.cpp:368 +msgid "Failed to parse timecodes file: " +msgstr "解析时间码文件失败: %s" -#: ../src/resolution_resampler.cpp:288 +#: ../src/project.cpp:394 +msgid "Failed to parse keyframes file: " +msgstr "解析关键帧文件失败: %s" + +#: ../src/project.cpp:398 +msgid "Keyframes file in unknown format: " +msgstr "关键帧文件的格式未知: " + +#: ../src/resolution_resampler.cpp:300 msgid "resolution resampling" msgstr "重设分辨率" @@ -5914,20 +6255,28 @@ msgstr "没有找到匹配项。" #: ../src/subs_controller.cpp:246 #, c-format msgid "Do you want to save changes to %s?" -msgstr "您想保存更改到 %s 吗?" +msgstr "您想保存更改到 %s 吗?" #: ../src/subs_controller.cpp:246 msgid "Unsaved changes" msgstr "未保存的更改" +#: ../src/subs_controller.cpp:265 ../src/subs_controller.cpp:404 +msgid "Untitled" +msgstr "无标题" + #: ../src/subs_controller.cpp:279 #, c-format msgid "File backup saved as \"%s\"." msgstr "文件备份保存为 \"%s\"。" -#: ../src/subs_controller.cpp:404 -msgid "Untitled" -msgstr "无标题" +#: ../src/subs_controller.cpp:282 +msgid "Exception when attempting to autosave file: " +msgstr "" + +#: ../src/subs_controller.cpp:285 +msgid "Unhandled exception when attempting to autosave file." +msgstr "" #: ../src/subs_controller.cpp:406 msgid "untitled" @@ -5939,11 +6288,11 @@ msgstr "注释(&C)" #: ../src/subs_edit_box.cpp:115 msgid "Comment this line out. Commented lines don't show up on screen." -msgstr "将该行设为注释。注释行不会显示在屏幕上。" +msgstr "注释该行。注释(Comment)行不会被渲染。" #: ../src/subs_edit_box.cpp:122 msgid "Style for this line" -msgstr "该行的样式" +msgstr "该行的样式(Style)" #: ../src/subs_edit_box.cpp:124 ../src/subs_edit_box.cpp:125 msgid "Edit" @@ -5953,18 +6302,17 @@ msgstr "编辑" msgid "" "Actor name for this speech. This is only for reference, and is mainly " "useless." -msgstr "说话人名。这只用来参考,一般并无用处。" +msgstr "该行的说话人(Actor)。一般用来参考,无实际用处。" #: ../src/subs_edit_box.cpp:140 msgid "" "Effect for this line. This can be used to store extra information for " "karaoke scripts, or for the effects supported by the renderer." -msgstr "" -"该行的特效。这栏可以用来储存额外信息,针对卡拉OK脚本或渲染器支持的特效。" +msgstr "该行的特效(Effect)。可用于储存卡拉OK脚本或渲染器可调用的额外信息。" #: ../src/subs_edit_box.cpp:147 msgid "Number of characters in the longest line of this subtitle." -msgstr "在当前字幕行的最长行的字符数。" +msgstr "该字幕行中,换行符分割后的最长字符数。" #: ../src/subs_edit_box.cpp:154 msgid "Layer number" @@ -6012,7 +6360,7 @@ msgstr "时间(&I)" #: ../src/subs_edit_box.cpp:185 msgid "Time by h:mm:ss.cs" -msgstr "按照 时:分:秒.厘秒 计时" +msgstr "按照 时:分:秒.厘秒 显示时轴" #: ../src/subs_edit_box.cpp:186 msgid "F&rame" @@ -6020,7 +6368,7 @@ msgstr "帧(&R)" #: ../src/subs_edit_box.cpp:186 msgid "Time by frame number" -msgstr "按照帧数计时" +msgstr "按帧数显示时轴" #: ../src/subs_edit_box.cpp:189 msgid "Show Original" @@ -6111,6 +6459,16 @@ msgstr "词典语言" msgid "Disable" msgstr "禁用" +#: ../src/subs_preview.cpp:142 +msgid "" +"Could not get any subtitles provider for the preview box. Make sure that you " +"have a provider installed." +msgstr "" + +#: ../src/subs_preview.cpp:143 +msgid "No subtitles provider" +msgstr "没有字幕服务后端" + #: ../src/subtitle_format.cpp:102 #, c-format msgid "From video (%g)" @@ -6174,12 +6532,12 @@ msgstr "帧率" #: ../src/subtitle_format.cpp:126 msgid "Please choose the appropriate FPS for the subtitles:" -msgstr "请为字幕选择合适的帧率:" +msgstr "请为字幕选择合适的帧率:" #: ../src/subtitle_format_ebu3264.cpp:396 #, c-format msgid "Line over maximum length: %s" -msgstr "行超过最大长度:%s" +msgstr "行超过最大长度: %s" #: ../src/subtitles_provider_libass.cpp:102 msgid "Updating font index" @@ -6201,6 +6559,18 @@ msgstr "当前帧时间和序号" msgid "Time of this frame relative to start and end of current subs" msgstr "该帧时间,相对于当前字幕的开始与结束时间" +#: ../src/video_provider_manager.cpp:78 +msgid "file not found." +msgstr "未找到文件。\n" + +#: ../src/video_provider_manager.cpp:84 +msgid "video is not in a supported format." +msgstr "" + +#: ../src/video_provider_manager.cpp:101 +msgid "Could not open " +msgstr "无法打开 " + #: ../src/visual_tool.cpp:119 msgid "visual typesetting" msgstr "可视化排版" @@ -6219,39 +6589,39 @@ msgstr "删除控制点" #: default_menu.json:0 msgid "&Insert (before)" -msgstr "插入(之前)(&I)" +msgstr "插入 (前插)(&I)" #: default_menu.json:0 msgid "Insert (after)" -msgstr "插入(之后)" +msgstr "插入 (后插)" #: default_menu.json:0 msgid "Insert at video time (before)" -msgstr "以视频时间插入(之前)" +msgstr "以视频时间插入 (前插)" #: default_menu.json:0 msgid "Insert at video time (after)" -msgstr "以视频时间插入(之后)" +msgstr "以视频时间插入 (后插)" #: default_menu.json:0 msgid "&Join (concatenate)" -msgstr "合并(连接)(&J)" +msgstr "合并 (连接)(&J)" #: default_menu.json:0 msgid "Join (keep first)" -msgstr "合并(保留首行)" +msgstr "合并 (保留首行)" #: default_menu.json:0 msgid "Join (as Karaoke)" -msgstr "合并(视为卡拉OK)" +msgstr "合并 (视为卡拉OK)" #: default_menu.json:0 msgid "&Make times continuous (change start)" -msgstr "使时间连续(更改开始时间)(&M)" +msgstr "使时间连续 (更改开始时间)(&M)" #: default_menu.json:0 msgid "&Make times continuous (change end)" -msgstr "使时间连续(更改结束时间)(&M)" +msgstr "使时间连续 (更改结束时间)(&M)" #: default_menu.json:0 msgid "Make Times Continuous" @@ -6275,7 +6645,7 @@ msgstr "字幕(&S)" #: default_menu.json:0 msgid "&Timing" -msgstr "时间轴(&T)" +msgstr "时轴(&T)" #: default_menu.json:0 msgid "&Video" @@ -6315,27 +6685,27 @@ msgstr "排序选择行" #: default_menu.json:0 msgid "Window" -msgstr "" +msgstr "窗口" #: default_menu.json:0 msgid "Open..." -msgstr "" +msgstr "打开…" #: default_menu.json:0 msgid "Open Recent" -msgstr "" +msgstr "最近打开" #: default_menu.json:0 msgid "Save" -msgstr "" +msgstr "保存" #: default_menu.json:0 msgid "Save As..." -msgstr "" +msgstr "保存为…" #: default_menu.json:0 msgid "Export As..." -msgstr "" +msgstr "导出为…" #: default_hotkey.json:244: msgid "Subtitle Edit Box" @@ -6343,7 +6713,7 @@ msgstr "字幕编辑框" #: ../automation/autoload/cleantags-autoload.lua:31 msgid "Clean Tags" -msgstr "Clean Tags - 整理特效标签" +msgstr "Clean Tags - 整理样式覆写标签" #: ../automation/autoload/cleantags-autoload.lua:32 msgid "" @@ -6400,7 +6770,17 @@ msgstr "此demo展示了如何用 Automation 4 编写一个简单的对行进行 #: ../automation/autoload/macro-1-edgeblur.lua:21 msgid "Adds \\be1 tags to all selected lines" -msgstr "为所选行添加 \\be1 标签" +msgstr "在所选行中添加 \\be1 标签" + +#: ../automation/autoload/macro-2-mkfullwitdh.lua:6 +msgid "Make text fullwidth" +msgstr "Make text fullwidth - 转换为全角字符" + +#: ../automation/autoload/macro-2-mkfullwitdh.lua:7 +msgid "" +"Shows how to use the unicode include to iterate over characters and a lookup " +"table to convert those characters to something else." +msgstr "" #: ../automation/autoload/macro-2-mkfullwitdh.lua:77 msgid "Make fullwidth" @@ -6412,23 +6792,23 @@ msgstr "转换拉丁字母为SJIS全角字母" #: ../automation/autoload/select-overlaps.moon:17 msgid "Select overlaps" -msgstr "" +msgstr "Select overlaps - 选择重叠行" #: ../automation/autoload/select-overlaps.moon:18 msgid "Select lines which begin while another non-comment line is active" -msgstr "" +msgstr "在非注释字幕行中,选择每个时轴重叠段的非第一行" #: ../automation/autoload/strip-tags.lua:17 msgid "Strip tags" -msgstr "Strip tags - 删除特效标签" +msgstr "Strip tags - 移除样式覆写标签" #: ../automation/autoload/strip-tags.lua:18 msgid "Remove all override tags from selected lines" -msgstr "从所选行中移除所有特效标签" +msgstr "移除所选行中所有样式覆写标签" #: ../automation/autoload/strip-tags.lua:28 msgid "strip tags" -msgstr "删除特效标签" +msgstr "移除样式覆写标签" #: ../packages/desktop/aegisub.desktop.in.in:4 #: ../packages/desktop/aegisub.metainfo.xml.in.in:6 @@ -6449,7 +6829,7 @@ msgstr "" #: ../packages/desktop/aegisub.metainfo.xml.in.in:7 msgid "Create and modify subtitles" -msgstr "" +msgstr "创建和编辑字幕。" #: ../packages/desktop/aegisub.metainfo.xml.in.in:9 msgid "" @@ -6458,6 +6838,9 @@ msgid "" "audio, and features many powerful tools for styling them, including a built-" "in real-time video preview." msgstr "" +"Aegisub 是个用于创建和修改字幕的免费跨平台开源工具。Aegisub 可以快速、轻松地" +"将字幕的时轴与音频同步,且拥有大量强大的样式处理工具,内置了实时视频预览功" +"能。" #: ../packages/desktop/aegisub.metainfo.xml.in.in:10 msgid "" @@ -6498,7 +6881,7 @@ msgstr "" #: ../packages/desktop/aegisub.metainfo.xml.in.in:17 msgid "Visual typesetting tools" -msgstr "" +msgstr "可视化绘图工具" #: ../packages/desktop/aegisub.metainfo.xml.in.in:18 msgid "Intuitive and customizable audio timing mode" @@ -6514,7 +6897,7 @@ msgstr "" #: ../packages/desktop/aegisub.metainfo.xml.in.in:47 msgid "Audio video" -msgstr "" +msgstr "音视频" #: ../packages/desktop/aegisub.metainfo.xml.in.in:51 msgid "Audio timing" @@ -6522,7 +6905,7 @@ msgstr "" #: packages/win_installer/fragment_strings.iss:1 msgid "Installing runtime libraries..." -msgstr "正在安装运行库……" +msgstr "正在安装运行库…" #: packages/win_installer/fragment_strings.iss:1 msgid "Create a start menu icon" @@ -6534,7 +6917,7 @@ msgstr "自动检查Aegisub的新版本" #: packages/win_installer/fragment_strings.iss:1 msgid "Update Checker:" -msgstr "自动更新:" +msgstr "自动更新:" #: packages/win_installer/fragment_strings.iss:1 msgid "" @@ -6549,5 +6932,465 @@ msgstr "" "要支付费用,但同时也不会得到任何形式的担保。%n%n您可以到Aegisub官网获取源代码" "信息。" +#~ msgid "x" +#~ msgstr "×" + +#~ msgid "&Opaque box" +#~ msgstr "不透明背景(&O)" + +#~ msgid "" +#~ "When selected, display an opaque box behind the subtitles instead of an " +#~ "outline around the text" +#~ msgstr "选中时,则使用不透明背景取代字幕的边框" + +#~ msgid "Creating cache... This can take a while!" +#~ msgstr "正在索引文件... 这可能需要一定时间!" + +#~ msgid "Reload Audio" +#~ msgstr "重载音频" + +#~ msgid "Reload the current audio file" +#~ msgstr "重载当前音频文件" + +#~ msgid "Te&xt" +#~ msgstr "文本(&x)" + +#~ msgid "Sort all subtitles by their text, including styling tags" +#~ msgstr "按文本排序所有行 (包括样式标签)" + +#~ msgid "Sort selected subtitles by their text, including styling tags" +#~ msgstr "按文本排序所选行 (包括样式标签)" + +#~ msgid "Stri&pped Text" +#~ msgstr "文本 (忽略标签)(&p)" + +#~ msgid "Stripped Text" +#~ msgstr "文本 (忽略标签)" + +#~ msgid "Sort all subtitles by their stripped text" +#~ msgstr "按文本排序所有行 (忽略样式标签)" + +#~ msgid "Sort selected subtitles by their stripped text" +#~ msgstr "按文本排序所选行 (忽略样式标签)" + +#~ msgid "Create new Fold" +#~ msgstr "新建折叠组" + +#~ msgid "Create a new fold collapsing the selected lines into a group" +#~ msgstr "新建一个折叠组,将所选行折叠为一组" + +#~ msgid "Open Folds" +#~ msgstr "展开折叠组" + +#~ msgid "Expand the folds under the selected lines" +#~ msgstr "展开所选折叠组" + +#~ msgid "Close Folds" +#~ msgstr "折叠折叠组" + +#~ msgid "Collapse the folds around the selected lines" +#~ msgstr "折叠所选行所在的折叠组" + +#~ msgid "Clear Folds" +#~ msgstr "释放折叠组" + +#~ msgid "Remove the folds around the selected lines" +#~ msgstr "释放所选行所在的折叠组" + +#~ msgid "Toggle Folds" +#~ msgstr "切换折叠组状态" + +#~ msgid "Open or close the folds around the selected lines" +#~ msgstr "切换所选行所在的折叠组的折叠状态" + +#~ msgid "Open all Folds" +#~ msgstr "展开所有折叠组" + +#~ msgid "Close all Folds" +#~ msgstr "折叠所有折叠组" + +#~ msgid "Clear all Folds" +#~ msgstr "释放所有折叠组" + +#~ msgid "Remove all Folds" +#~ msgstr "移除所有折叠组" + +#~ msgid "Align subtitle to video" +#~ msgstr "以视频对齐时轴" + +#~ msgid "Align subtitle to video by key points" +#~ msgstr "以关键像素对齐时轴" + +#~ msgid "ASSDraw3..." +#~ msgstr "ASSDraw3..." + +#~ msgid "ASSDraw3" +#~ msgstr "ASSDraw3" + +#~ msgid "Launch the ASSDraw3 tool for vector drawing" +#~ msgstr "启动 ASSDraw3 工具用于矢量绘图" + +#~ msgid "Reload active subtitles provider" +#~ msgstr "重载字幕服务后端" + +#~ msgid "Reloads the current subtitles provider" +#~ msgstr "重载当前的字幕服务后端" + +#~ msgid "Reload Video" +#~ msgstr "重载视频" + +#~ msgid "Reload the current video file" +#~ msgstr "重载当前视频文件" + +#~ msgid "Apply 3D Perspective" +#~ msgstr "处理3D透视" + +#~ msgid "" +#~ "Rotate and shear subtitles to make them fit a given quad's perspective" +#~ msgstr "使用四角定位变形字幕" + +#~ msgid "Show Surrounding Plane" +#~ msgstr "显示环绕平面" + +#~ msgid "Toggles showing a second quad for the ambient 3D plane." +#~ msgstr "切换显示环绕三维平面的第二个四边形。" + +#~ msgid "Lock Outer Quad" +#~ msgstr "锁定外四边形" + +#~ msgid "" +#~ "When the surrounding plane is also visible, switches which quad is " +#~ "locked. If inactive, the inner quad can only be resized without changing " +#~ "the perspective plane. If active, this holds for the outer quad instead." +#~ msgstr "" +#~ "当环绕平面可见时,切换锁定两个四边形。关闭时,调整内四边形无法改变透视。启" +#~ "用时,则作用于外四边形。" + +#~ msgid "Show Grid" +#~ msgstr "显示网格" + +#~ msgid "Toggles showing a 3D grid in the visual perspective tool" +#~ msgstr "在可视化透视工具中切换显示三维网格" + +#~ msgid "\\org Mode: Center" +#~ msgstr "\\org 模式: 中心" + +#~ msgid "Puts \\org at the center of the perspective quad" +#~ msgstr "将 \\org 置于四边形的中心" + +#~ msgid "\\org Mode: No \\fax" +#~ msgstr "\\org 模式: 无 \\fax" + +#~ msgid "" +#~ "Finds a value for \\org where \\fax can be zero, if possible. Use this " +#~ "mode if your event contains line breaks." +#~ msgstr "" +#~ "如果可行,找到一个使 \\fax 为 0 的 \\org 值。如果文本中有换行符,使用本模" +#~ "式。" + +#~ msgid "\\org Mode: Keep" +#~ msgstr "\\org 模式: 维持" + +#~ msgid "Fixes the position of \\org" +#~ msgstr "保持四边形不变的情况下,可单独修改 \\org 的位置" + +#~ msgid "Cycle \\org mode" +#~ msgstr "切换 \\org 模式" + +#~ msgid "Cycles through the three \\org modes" +#~ msgstr "循环切换三个 \\org 模式" + +#~ msgid "Align subtitle to video by key point" +#~ msgstr "以关键像素对齐时轴" + +#, c-format +#~ msgid "%i" +#~ msgstr "%i" + +#~ msgid "The key color to be followed" +#~ msgstr "用来对比的颜色" + +#~ msgid "The x coord of the key point" +#~ msgstr "关键像素的x坐标" + +#~ msgid "The y coord of the key point" +#~ msgstr "关键像素的y坐标" + +#~ msgid "Max tolerance of the color" +#~ msgstr "颜色最大容差" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "Color" +#~ msgstr "颜色" + +#~ msgid "Tolerance" +#~ msgstr "容差" + +#~ msgid "Bad x or y position or tolerance value!" +#~ msgstr "坐标或容差的值错误!" + +#, c-format +#~ msgid "Bad x or y position! Require: 0 <= x < %i, 0 <= y < %i" +#~ msgstr "坐标值错误! 应当: 0 <= x < %i, 0 <= y < %i" + +#~ msgid "Bad tolerance value! Require: 0 <= torlerance <= 255" +#~ msgstr "容差值错误! 应当: 0 <= torlerance <= 255" + +#~ msgid "Selected position and color are not within tolerance!" +#~ msgstr "选定的位置和颜色不在容差范围内!" + +#~ msgid "Align to video by key point" +#~ msgstr "对齐关键像素" + +#~ msgid "Could not connect to updates server." +#~ msgstr "无法连接更新服务器。" + +#~ msgid "Could not download from updates server." +#~ msgstr "无法从更新服务器下载更新。" + +#, c-format +#~ msgid "HTTP request failed, got HTTP response %d." +#~ msgstr "HTTP请求失败,返回的状态 %d。" + +#~ msgid "add fold" +#~ msgstr "新建折叠组" + +#~ msgid "clear all folds" +#~ msgstr "释放所有折叠组" + +#~ msgid "open all folds" +#~ msgstr "展开所有折叠组" + +#~ msgid "close all folds" +#~ msgstr "折叠所有折叠组" + +#~ msgid "clear folds" +#~ msgstr "释放折叠组" + +#~ msgid "open folds" +#~ msgstr "展开折叠组" + +#~ msgid "close folds" +#~ msgstr "折叠折叠组" + +#~ msgid "toggle folds" +#~ msgstr "切换折叠组状态" + +#~ msgid " >" +#~ msgstr " >" + +#~ msgid "Folds" +#~ msgstr "折叠组" + +#~ msgid "Default to Video Zoom" +#~ msgstr "启用视频默认缩放" + +#~ msgid "Disable zooming with scroll bar" +#~ msgstr "禁用滚轮缩放视频" + +#~ msgid "Reverse zoom direction" +#~ msgstr "反转滚轮缩放" + +#~ msgid "Colour Picker" +#~ msgstr "取色器" + +#~ msgid "Restrict Screen Picker to Window" +#~ msgstr "仅在主窗口中取色" + +#~ msgid "Open fold background" +#~ msgstr "折叠组打开时首尾行背景色" + +#~ msgid "Closed fold background" +#~ msgstr "折叠组折叠时背景色" + +#~ msgid "Downmix to stereo" +#~ msgstr "混缩为双声道" + +#~ msgid "Max BS cache size (MB)" +#~ msgstr "最大 BS 缓存 (MB)" + +#~ msgid "Use Aegisub's Cache" +#~ msgstr "使用 Aegisub 的缓存" + +#~ msgid "Max cache size (MB)" +#~ msgstr "最大缓存 (MB)" + +#~ msgid "Decoder Threads (0 to autodetect)" +#~ msgstr "解码线程 (0 为自动)" + +#~ msgid "Seek preroll (Frames)" +#~ msgstr "前瞻缓冲帧数(seek pre-roll) (帧)" + +#~ msgid "VapourSynth" +#~ msgstr "VapourSynth" + +#~ msgid "Log Level" +#~ msgstr "日志级别" + +#~ msgid "Default Video Script" +#~ msgstr "默认视频脚本" + +#~ msgid "" +#~ "This script will be executed to load video files that aren't\n" +#~ "VapourSynth scripts (i.e. end in .py or .vpy).\n" +#~ "The filename variable stores the path to the file." +#~ msgstr "" +#~ "若载入的视频文件不是 VapourSynth 脚本\n" +#~ "(即文件扩展名不是 .py 或 .vpy),\n" +#~ "则执行此脚本 (即执行默认视频脚本)。\n" +#~ "filename 变量存储了文件的路径。" + +#~ msgid "Default Audio Script" +#~ msgstr "默认音频脚本" + +#~ msgid "" +#~ "This script will be executed to load audio files that aren't\n" +#~ "VapourSynth scripts (i.e. end in .py or .vpy).\n" +#~ "The filename variable stores the path to the file." +#~ msgstr "" +#~ "若载入的音频文件不是 VapourSynth 脚本\n" +#~ "(即文件扩展名不是 .py 或 .vpy),\n" +#~ "则执行此脚本 (即执行默认音频脚本)。\n" +#~ "filename 变量存储了文件的路径。" + +#~ msgid "Executing VapourSynth Script" +#~ msgstr "执行 VapourSynth 脚本" + +#~ msgid "Failed to execute script! Press \"Close\" to continue." +#~ msgstr "Failed to execute script! Press \"Close\" to continue." + +#~ msgid "" +#~ "A free, cross-platform open source tool for creating and modifying " +#~ "subtitles" +#~ msgstr "用于创建和修改字幕的免费跨平台开源工具" + +#~ msgid "Error loading audio" +#~ msgstr "音频载入错误" + +#~ msgid "Script: " +#~ msgstr "脚本: " + +#~ msgid "From video" +#~ msgstr "从视频获得" + +#~ msgid "Layout: " +#~ msgstr "布局: " + +#~ msgid "Visual Tools" +#~ msgstr "可视化绘图工具" + +#~ msgid "Shape handle size" +#~ msgstr "控制点大小" + +#~ msgid "Dark Mode" +#~ msgstr "深色模式" + +#~ msgid "Enable experimental dark mode (restart required)" +#~ msgstr "启用深色模式 (实验性选项) (需要重启)" + +#~ msgid "Apply RFF" +#~ msgstr "启用 RFF" + +#~ msgid "Load user plugins" +#~ msgstr "自动载入 user plugins" + +#~ msgid "Set to Default" +#~ msgstr "还原为默认" + +#~ msgid "" +#~ "None of the available audio providers recognised the selected file as " +#~ "containing audio data:\n" +#~ "\n" +#~ msgstr "" +#~ "可用的音频服务后端都无法从所选文件中识别到音频数据:\n" +#~ "\n" + +#~ msgid "" +#~ "None of the available audio providers have a codec available to handle " +#~ "the selected file:\n" +#~ "\n" +#~ msgstr "" +#~ "可用的音频服务后端都没有适配所选文件的解码器:\n" +#~ "\n" + +#~ msgid "" +#~ "Decoding the full track to ensure perfect frame accuracy. This will take " +#~ "a while!" +#~ msgstr "正在解码整个轨道以确保帧精度完美。这可能需要一定时间!" + +#~ msgid " Subtitle format handler: %s" +#~ msgstr " 字幕格式处理器: %s" + +#~ msgid "%d frames (%s)" +#~ msgstr "%d 帧 (%s)" + +#~ msgid "%u lines were added to selection" +#~ msgstr "%u 行已被加入所选" + +#~ msgid "%u lines were removed from selection" +#~ msgstr " %u 行已被移出所选" + +#~ msgid "&Change aspect ratio" +#~ msgstr "更改宽高比(&C)" + +#~ msgid "&Export As..." +#~ msgstr "导出(&E)…" + +#~ msgid "&Forums" +#~ msgstr "论坛(&F)" + +#~ msgid "Are you sure you want to delete these %d styles?" +#~ msgstr "您确定要删除这个 %d 样式?" + +#~ msgid "Below Normal (recommended)" +#~ msgstr "低于正常 (推荐)" + +#~ msgid "Clean Script Info" +#~ msgstr "清除脚本信息" + #~ msgid "Drawings" #~ msgstr "绘图代码" + +#~ msgid "File name" +#~ msgstr "文件名: " + +#~ msgid "Force BT.601" +#~ msgstr "强制使用 BT.601" + +#~ msgid "Forums" +#~ msgstr "论坛" + +#~ msgid "Lowest" +#~ msgstr "最低" + +#~ msgid "Reading into RAM" +#~ msgstr "读取至内存" + +#~ msgid "Reading to Hard Disk cache" +#~ msgstr "读取到磁盘缓存" + +#~ msgid "" +#~ "Removes all but the absolutely required fields from the Script Info " +#~ "section. You might want to run this on files that you plan to distribute " +#~ "in original form." +#~ msgstr "" +#~ "移除脚本配置中所有不必要的信息。您可以将其用于要以原始形式分发的文件。" + +#~ msgid "Selection was set to %u lines" +#~ msgstr "所选被设为 %u 行" + +#~ msgid "Thread priority" +#~ msgstr "线程优先级" + +#~ msgid "Visit Aegisub's forums" +#~ msgstr "访问Aegisub的论坛" + +#~ msgid "" +#~ "You already have timecodes loaded. Would you like to replace them with " +#~ "timecodes from the video file?" +#~ msgstr "您已经载入过时间码。是否要用视频文件中的时间码替换?" diff --git a/po/zh_TW.po b/po/zh_TW.po index 4a22c74d6f..746a8d26b6 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -6,20 +6,20 @@ msgstr "" "Project-Id-Version: Aegisub 3.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-02 21:53+0100\n" -"PO-Revision-Date: 2014-06-28 18:38+0800\n" -"Last-Translator: COMPUTERFAN \n" -"Language-Team: Vmoe字幕組 \n" +"PO-Revision-Date: 2025-11-18 21:22+0800\n" +"Last-Translator: Howardisme \n" +"Language-Team: None \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.7\n" -"X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.8\n" +"X-Poedit-SourceCharset: UTF-8\n" #: ../src/ass_style.cpp:196 msgid "Auto-detect base direction (libass only)" -msgstr "" +msgstr "自動偵測文字書寫方向(僅限 libass 引擎)" #: ../src/ass_style.cpp:197 msgid "ANSI" @@ -357,27 +357,27 @@ msgstr "檢查是否有可用的新版Aegisub" #: ../src/command/app.cpp:270 ../src/command/app.cpp:271 msgid "Minimize" -msgstr "" +msgstr "最小化" #: ../src/command/app.cpp:272 msgid "Minimize the active window" -msgstr "" +msgstr "最小化當前視窗" #: ../src/command/app.cpp:281 ../src/command/app.cpp:282 msgid "Zoom" -msgstr "" +msgstr "縮放" #: ../src/command/app.cpp:283 msgid "Maximize the active window" -msgstr "" +msgstr "最大化當前視窗" #: ../src/command/app.cpp:292 ../src/command/app.cpp:293 msgid "Bring All to Front" -msgstr "" +msgstr "全部移到最前端" #: ../src/command/app.cpp:294 msgid "Bring forward all open documents to the front" -msgstr "" +msgstr "將所有開啟的文件移到最前端" #: ../src/command/audio.cpp:65 msgid "&Close Audio" @@ -2276,13 +2276,13 @@ msgstr "將目前顯示的畫面複製到剪貼簿,不帶字幕" #: ../src/command/video.cpp:321 ../src/command/video.cpp:322 msgid "Copy image to Clipboard (only subtitles)" -msgstr "" +msgstr "複製圖像至剪貼簿(帶字幕)" #: ../src/command/video.cpp:323 msgid "" "Copy the currently displayed subtitles to the clipboard, with transparent " "background" -msgstr "" +msgstr "複製目前顯示字幕(透明背景)到剪貼簿" #: ../src/command/video.cpp:332 ../src/command/video.cpp:333 msgid "Next Frame" @@ -2363,13 +2363,13 @@ msgstr "儲存目前顯示影格(不帶字幕)為PNG格式到視訊所在目 #: ../src/command/video.cpp:534 ../src/command/video.cpp:535 msgid "Save PNG snapshot (only subtitles)" -msgstr "" +msgstr "儲存 PNG 截圖(僅限字幕)" #: ../src/command/video.cpp:536 msgid "" "Save the currently displayed subtitles with transparent background to a PNG " "file in the video's directory" -msgstr "" +msgstr "儲存目前顯示字幕(透明背景)為 PNG 格式到視訊所在目錄" #: ../src/command/video.cpp:546 msgid "&Jump to..." @@ -3127,7 +3127,7 @@ msgstr "顯示標準" #: ../src/dialog_fonts_collector.cpp:101 #, c-format msgid "* An error occurred when enumerating the used fonts: %s.\n" -msgstr "" +msgstr "列舉使用字型時發生錯誤: %s。 \n" #: ../src/dialog_fonts_collector.cpp:115 msgid "Symlinking fonts to folder...\n" @@ -3557,7 +3557,7 @@ msgid "Margin offset" msgstr "邊距偏移" #: ../src/dialog_resample.cpp:167 ../src/dialog_resample.cpp:181 -msgid "x" +msgid "×" msgstr "×" #: ../src/dialog_resample.cpp:172 ../src/dialog_resample.cpp:186 @@ -4631,12 +4631,12 @@ msgstr "下個星期再將提醒我(&W)" #: ../src/dialog_version_check.cpp:295 msgid "Curl could not be initialized." -msgstr "" +msgstr "無法初始化 Curl。" #: ../src/dialog_version_check.cpp:317 #, c-format msgid "Checking for updates failed: %s." -msgstr "" +msgstr "檢查更新失敗:%s." #: ../src/dialog_version_check.cpp:345 msgid "An update to Aegisub was found." @@ -4713,8 +4713,8 @@ msgid "" "The resolution of the loaded video and the resolution specified for the " "subtitles don't match.\n" "\n" -"Video resolution:\t%d x %d\n" -"Script resolution:\t%d x %d\n" +"Video resolution:\t%d × %d\n" +"Script resolution:\t%d × %d\n" "\n" "Change subtitles resolution to match video?" msgstr "" @@ -4835,7 +4835,7 @@ msgstr "樣式 '%s' 不存在\n" #: ../src/font_file_lister.cpp:154 #, c-format msgid "Font '%s' is used in a drawing, but not in any text.\n" -msgstr "" +msgstr "字型 '%s' 僅用於繪圖,未用於任何文字。\n" #: ../src/font_file_lister.cpp:160 #, c-format @@ -4967,7 +4967,7 @@ msgid "" "\n" "Aegisub will now close." msgstr "" -"喔唷,Aegisub娘崩潰啦!\n" +"糟糕,Aegisub 當機了!\n" "\n" "已經將你的檔的副本儲存到了:\n" "\n" @@ -5298,7 +5298,7 @@ msgstr "時間框內覆蓋寫入" #: ../src/preferences.cpp:211 msgid "Shift+Enter adds \\n" -msgstr "" +msgstr "Shift+Enter 加入 \\n" #: ../src/preferences.cpp:212 msgid "Enable syntax highlighting" @@ -5350,7 +5350,7 @@ msgstr "隱藏特效標籤" #: ../src/preferences.cpp:230 msgid "Skip over whitespace" -msgstr "" +msgstr "略過空格" #: ../src/preferences.cpp:245 msgid "Audio Display" @@ -5395,19 +5395,19 @@ msgstr "註解(&N)" #: ../src/preferences.cpp:257 msgid "Drawing Commands" -msgstr "" +msgstr "繪圖指令" #: ../src/preferences.cpp:258 msgid "Drawing X Coords" -msgstr "" +msgstr "繪圖 X 座標" #: ../src/preferences.cpp:259 msgid "Drawing Y Coords" -msgstr "" +msgstr "繪圖 Y 座標" #: ../src/preferences.cpp:260 msgid "Underline Spline Endpoints" -msgstr "" +msgstr "標示樣條端點" #: ../src/preferences.cpp:262 msgid "Brackets" @@ -5438,9 +5438,8 @@ msgid "Karaoke templates" msgstr "卡拉OK範本" #: ../src/preferences.cpp:270 -#, fuzzy msgid "Karaoke variables" -msgstr "卡拉OK範本" +msgstr "卡拉OK變數" #: ../src/preferences.cpp:276 msgid "Audio Color Schemes" @@ -5512,31 +5511,31 @@ msgstr "每秒字元數錯誤" #: ../src/preferences.cpp:296 msgid "Visual Typesetting Tools" -msgstr "" +msgstr "視覺排版工具" #: ../src/preferences.cpp:297 msgid "Primary Lines" -msgstr "" +msgstr "主要分隔線" #: ../src/preferences.cpp:298 msgid "Secondary Lines" -msgstr "" +msgstr "次要分隔線" #: ../src/preferences.cpp:299 msgid "Primary Highlight" -msgstr "" +msgstr "主要高亮" #: ../src/preferences.cpp:300 msgid "Secondary Highlight" -msgstr "" +msgstr "次要高亮" #: ../src/preferences.cpp:303 msgid "Visual Typesetting Tools Alpha" -msgstr "" +msgstr "視覺排版工具 Alpha" #: ../src/preferences.cpp:304 msgid "Shaded Area" -msgstr "" +msgstr "陰影區域" #: ../src/preferences.cpp:313 msgid "Backup" @@ -5693,27 +5692,27 @@ msgstr "品質" #: ../src/preferences.cpp:393 msgid "Compressed" -msgstr "" +msgstr "壓縮" #: ../src/preferences.cpp:393 msgid "Extended" -msgstr "" +msgstr "延伸" #: ../src/preferences.cpp:393 msgid "Linear" -msgstr "" +msgstr "線性" #: ../src/preferences.cpp:393 msgid "Logarithmic" -msgstr "" +msgstr "對數" #: ../src/preferences.cpp:393 msgid "Medium" -msgstr "" +msgstr "中等" #: ../src/preferences.cpp:395 msgid "Frequency mapping" -msgstr "" +msgstr "頻率映射" #: ../src/preferences.cpp:397 msgid "Cache memory max (MB)" @@ -6321,27 +6320,27 @@ msgstr "排序選擇行" #: default_menu.json:0 msgid "Window" -msgstr "" +msgstr "視窗" #: default_menu.json:0 msgid "Open..." -msgstr "" +msgstr "開啟..." #: default_menu.json:0 msgid "Open Recent" -msgstr "" +msgstr "開啟最近使用的檔案" #: default_menu.json:0 msgid "Save" -msgstr "" +msgstr "儲存" #: default_menu.json:0 msgid "Save As..." -msgstr "" +msgstr "另存新檔" #: default_menu.json:0 msgid "Export As..." -msgstr "" +msgstr "匯出為..." #: default_hotkey.json:244: msgid "Subtitle Edit Box" @@ -6418,11 +6417,12 @@ msgstr "轉換拉丁字母為SJIS全形字母" #: ../automation/autoload/select-overlaps.moon:17 msgid "Select overlaps" -msgstr "" +msgstr "選取重疊" #: ../automation/autoload/select-overlaps.moon:18 +#, fuzzy msgid "Select lines which begin while another non-comment line is active" -msgstr "" +msgstr "選取開始時間落在其他行(非註解)運行期間內的行句" #: ../automation/autoload/strip-tags.lua:17 msgid "Strip tags" @@ -6451,11 +6451,11 @@ msgstr "為電影和視訊建立和編輯字幕。" #: ../packages/desktop/aegisub.desktop.in.in:12 msgid "subtitles;subtitle;captions;captioning;video;audio;" -msgstr "" +msgstr "subtitles;subtitle;captions;captioning;video;audio;" #: ../packages/desktop/aegisub.metainfo.xml.in.in:7 msgid "Create and modify subtitles" -msgstr "" +msgstr "建立和修改字幕" #: ../packages/desktop/aegisub.metainfo.xml.in.in:9 msgid "" @@ -6464,6 +6464,8 @@ msgid "" "audio, and features many powerful tools for styling them, including a built-" "in real-time video preview." msgstr "" +"Aegisub 是一款免費、跨平台的開源字幕製作與修改工具。Aegisub 能讓你快速又輕鬆" +"地將字幕對齊音訊,並提供許多強大的字幕樣式編輯功能,包含內建的即時影片預覽。" #: ../packages/desktop/aegisub.metainfo.xml.in.in:10 msgid "" @@ -6475,6 +6477,10 @@ msgid "" "unrelated to Aegisub) many vital functions, or were too buggy and/or " "unreliable to be really useful." msgstr "" +"Aegisub 最初的誕生,是為了讓排版工作變得不再那麼痛苦,特別是針對當時的動畫同" +"人字幕製作流程。在專案開始之初,市面上許多支援 Advanced Substation Alpha 格式" +"的程式,要麼缺乏許多必要功能(而且至今仍然如此;有些競爭的程式其後開發也因各" +"種與 Aegisub 無關的理由而完全中止),要麼因錯誤過多或不夠穩定而無法真正實用。" #: ../packages/desktop/aegisub.metainfo.xml.in.in:11 msgid "" @@ -6485,46 +6491,50 @@ msgid "" "for creating karaoke effects, Automation can now be used much else, " "including creating macros and various other convenient tools)." msgstr "" +"自那之後,Aegisub 已發展成一款功能完整且高度可自訂的字幕編輯器。它具備眾多便" +"利工具,可用於字幕的對時、排版、編輯與翻譯,並提供名為 Automation 的強大腳本" +"環境(Automation 最初主要用於製作卡拉 OK 特效如今也能用於建立巨集及其他多種便" +"利工具)。" #: ../packages/desktop/aegisub.metainfo.xml.in.in:12 msgid "Some highlights of Aegisub:" -msgstr "" +msgstr "Aegisub 的特色:" #: ../packages/desktop/aegisub.metainfo.xml.in.in:14 msgid "Simple and intuitive yet powerful interface for editing subtitles" -msgstr "" +msgstr "簡潔直覺、功能強大的字幕編輯介面" #: ../packages/desktop/aegisub.metainfo.xml.in.in:15 msgid "Support for many formats and character sets" -msgstr "" +msgstr "支援多種格式與字元編碼" #: ../packages/desktop/aegisub.metainfo.xml.in.in:16 msgid "Powerful video mode" -msgstr "" +msgstr "強大的影片模式" #: ../packages/desktop/aegisub.metainfo.xml.in.in:17 msgid "Visual typesetting tools" -msgstr "" +msgstr "視覺排版工具" #: ../packages/desktop/aegisub.metainfo.xml.in.in:18 msgid "Intuitive and customizable audio timing mode" -msgstr "" +msgstr "直覺且可自訂的音訊對時模式" #: ../packages/desktop/aegisub.metainfo.xml.in.in:19 msgid "Fully scriptable through the Automation module" -msgstr "" +msgstr "可透過 Automation 模組進行完整腳本化" #: ../packages/desktop/aegisub.metainfo.xml.in.in:43 msgid "Typesetting" -msgstr "" +msgstr "排版" #: ../packages/desktop/aegisub.metainfo.xml.in.in:47 msgid "Audio video" -msgstr "" +msgstr "音訊與影片" #: ../packages/desktop/aegisub.metainfo.xml.in.in:51 msgid "Audio timing" -msgstr "" +msgstr "音訊對時" #: packages/win_installer/fragment_strings.iss:1 msgid "Installing runtime libraries..." diff --git a/src/aegisublocale.cpp b/src/aegisublocale.cpp index cc5f4e10db..703637d5cf 100644 --- a/src/aegisublocale.cpp +++ b/src/aegisublocale.cpp @@ -110,7 +110,7 @@ std::string AegisubLocale::PickLanguage() { if (!active_language.empty()) style |= wxCANCEL; - wxSingleChoiceDialog dialog(nullptr, "Please choose a language:", "Language", langNames, + wxSingleChoiceDialog dialog(nullptr, _("Please choose a language:"), _("Language"), langNames, (void **)nullptr, style); if (dialog.ShowModal() == wxID_OK) { diff --git a/src/ass_style.h b/src/ass_style.h index 60e028bb9c..f81933546d 100644 --- a/src/ass_style.h +++ b/src/ass_style.h @@ -57,7 +57,7 @@ class AssStyle final : public AssEntry, public AssEntryListHook { double scaley = 100.; ///< Font y scale with 100 = 100% double spacing = 0.; ///< Additional spacing between characters in pixels double angle = 0.; ///< Counterclockwise z rotation in degrees - int borderstyle = 1; ///< 1: Normal; 3: Opaque box; others are unused in Aegisub + int borderstyle = 1; ///< 1: Normal; 3: Opaque border boxes; 4: Single opaque shadow box (libass only) double outline_w = 2.; ///< Outline width in pixels double shadow_w = 2.; ///< Shadow distance in pixels int alignment = 2; ///< \an-style line alignment diff --git a/src/audio_karaoke.cpp b/src/audio_karaoke.cpp index 69ca14cd0a..b66bb07078 100644 --- a/src/audio_karaoke.cpp +++ b/src/audio_karaoke.cpp @@ -79,9 +79,9 @@ AudioKaraoke::AudioKaraoke(wxWindow *parent, agi::Context *c) main_sizer->Add(split_area, wxSizerFlags(1).Expand()); SetSizerAndFit(main_sizer); - /// @todo subscribe - split_font.SetFaceName(FontFace("Audio/Karaoke")); - split_font.SetPointSize(OPT_GET("Audio/Karaoke/Font Size")->GetInt()); + SetStyle(); + OPT_SUB("Audio/Karaoke/Font Face", &AudioKaraoke::SetStyle, this); + OPT_SUB("Audio/Karaoke/Font Size", &AudioKaraoke::SetStyle, this); split_area->Bind(wxEVT_SIZE, &AudioKaraoke::OnSize, this); split_area->Bind(wxEVT_PAINT, &AudioKaraoke::OnPaint, this); @@ -422,3 +422,20 @@ void AudioKaraoke::SetTagType(std::string_view new_tag) { kara->SetTagType(new_tag); AcceptSplit(); } + +void AudioKaraoke::SetStyle() { + wxString fontname = FontFace("Audio/Karaoke"); + if (!fontname.empty()) split_font.SetFaceName(fontname); + split_font.SetPointSize(OPT_GET("Audio/Karaoke/Font Size")->GetInt()); + + // Clear cached character metrics since font changed + char_widths.clear(); + char_height = 0; + char_width = 0; + + // Recalculate layout with new font + if (enabled && active_line) { + SetDisplayText(); + split_area->Refresh(false); + } +} diff --git a/src/audio_karaoke.h b/src/audio_karaoke.h index 83682cf833..6f1f301215 100644 --- a/src/audio_karaoke.h +++ b/src/audio_karaoke.h @@ -151,6 +151,8 @@ class AudioKaraoke final : public wxWindow { void OnScrollTimer(); void OnScrollTimer(wxTimerEvent& event); + void SetStyle(); + public: /// Constructor /// @param parent Parent window diff --git a/src/auto4_base.cpp b/src/auto4_base.cpp index a97aa24ec7..78a0c2711d 100644 --- a/src/auto4_base.cpp +++ b/src/auto4_base.cpp @@ -33,13 +33,13 @@ #include "ass_style.h" #include "compat.h" #include "dialog_progress.h" +#include "format.h" #include "include/aegisub/context.h" #include "options.h" #include "string_codec.h" #include "subs_controller.h" #include -#include #include #include #include @@ -330,19 +330,27 @@ namespace Automation4 { } int error_count = 0; + int warning_count = 0; // Count of scripts that have warnings (as opposed to count of all warnings) for (auto& future : script_futures) { auto s = future.get(); if (s) { if (!s->GetLoadedState()) ++error_count; + if (!s->GetWarnings().empty()) ++warning_count; scripts.emplace_back(std::move(s)); } } if (error_count == 1) { - wxLogWarning("A script in the Automation autoload directory failed to load.\nPlease review the errors, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again."); + wxLogWarning(_("A script in the Automation autoload directory failed to load.\nPlease review the errors, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again.")); } else if (error_count > 1) { - wxLogWarning("Multiple scripts in the Automation autoload directory failed to load.\nPlease review the errors, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again."); + wxLogWarning(_("Multiple scripts in the Automation autoload directory failed to load.\nPlease review the errors, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again.")); + } + else if (warning_count == 1) { + wxLogWarning(_("A script in the Automation autoload directory loaded with warnings.\nPlease review the warnings, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again.")); + } + else if (warning_count > 1) { + wxLogWarning(_("Multiple scripts in the Automation autoload directory loaded with warnings.\nPlease review the warnings, fix them and use the Rescan Autoload Dir button in Automation Manager to load the scripts again.")); } ScriptsChanged(); @@ -382,16 +390,16 @@ namespace Automation4 { basepath = autobasefn; } else if (first_char == '/') { } else { - wxLogWarning("Automation Script referenced with unknown location specifier character.\nLocation specifier found: %c\nFilename specified: %s", - first_char, to_wx(trimmed)); + wxLogWarning(fmt_tl("Automation Script referenced with unknown location specifier character.\nLocation specifier found: %c\nFilename specified: %s", + first_char, to_wx(trimmed))); continue; } auto sfname = basepath/trimmed; if (agi::fs::FileExists(sfname)) scripts.emplace_back(Automation4::ScriptFactory::CreateFromFile(sfname, true)); else { - wxLogWarning("Automation Script referenced could not be found.\nFilename specified: %c%s\nSearched relative to: %s\nResolved filename: %s", - first_char, to_wx(trimmed), basepath.wstring(), sfname.wstring()); + wxLogWarning(fmt_tl("Automation Script referenced could not be found.\nFilename specified: %c%s\nSearched relative to: %s\nResolved filename: %s", + first_char, to_wx(trimmed), basepath.wstring(), sfname.wstring())); } } @@ -451,7 +459,10 @@ namespace Automation4 { auto s = factory->Produce(filename); if (s) { if (!s->GetLoadedState()) { - wxLogError(_("Failed to load Automation script '%s':\n%s"), filename.wstring(), s->GetDescription()); + wxLogError(_("Failed to load Automation script '%s':\n%s"), filename.wstring(), to_wx(s->GetDescription())); + } + for (auto const& warning : s->GetWarnings()) { + wxLogWarning(_("Warning when loading Automation script '%s':\n%s"), filename.wstring(), to_wx(warning)); } return s; } diff --git a/src/auto4_base.h b/src/auto4_base.h index 548cddf4db..d7f976aadc 100644 --- a/src/auto4_base.h +++ b/src/auto4_base.h @@ -163,6 +163,8 @@ namespace Automation4 { virtual std::string GetVersion() const=0; /// Did the script load correctly? virtual bool GetLoadedState() const=0; + /// Did loading the script raise any warnings? + virtual std::vector GetWarnings() const=0; /// Get a list of commands provided by this script virtual std::vector GetMacros() const=0; @@ -277,6 +279,7 @@ namespace Automation4 { std::string GetAuthor() const override { return ""; } std::string GetVersion() const override { return ""; } bool GetLoadedState() const override { return false; } + std::vector GetWarnings() const override { return {}; } std::vector GetMacros() const override { return {}; } std::vector GetFilters() const override { return {}; } diff --git a/src/auto4_lua.cpp b/src/auto4_lua.cpp index 50fcafab77..821436acde 100644 --- a/src/auto4_lua.cpp +++ b/src/auto4_lua.cpp @@ -44,6 +44,7 @@ #include "audio_timing.h" #include "command/command.h" #include "compat.h" +#include "format.h" #include "frame_main.h" #include "include/aegisub/context.h" #include "options.h" @@ -54,7 +55,6 @@ #include "utils.h" #include -#include #include #include #include @@ -153,6 +153,34 @@ namespace { return 1; } + int raise_warning_onload(lua_State *L) + { + lua_getfield(L, LUA_REGISTRYINDEX, "warnings"); + if (lua_isnil(L, -1)) { + lua_pop(L, 1); + lua_newtable(L); + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, "warnings"); + } + lua_pushvalue(L, -2); + lua_rawseti(L, -2, lua_objlen(L, -2) + 1); + lua_pop(L, 2); + return 0; + } + + int raise_warning_postload(lua_State *L) + { + std::string message = check_string(L, -1); + lua_pop(L, 1); + + lua_getfield(L, LUA_REGISTRYINDEX, "filename"); + std::string filename = check_string(L, -1); + lua_pop(L, 1); + + wxLogWarning(fmt_tl("Warning in Automation script '%s':\n%s", filename, message)); + return 0; + } + int frame_from_ms(lua_State *L) { const agi::Context *c = get_context(L); @@ -376,6 +404,8 @@ namespace { std::string author; std::string version; + std::vector warnings; + std::vector macros; std::vector> filters; @@ -404,6 +434,7 @@ namespace { std::string GetAuthor() const override { return author; } std::string GetVersion() const override { return version; } bool GetLoadedState() const override { return L != nullptr; } + std::vector GetWarnings() const override { return warnings; } std::vector GetMacros() const override { return macros; } std::vector GetFilters() const override; @@ -424,7 +455,7 @@ namespace { // create lua environment L = luaL_newstate(); if (!L) { - description = "Could not initialize Lua state"; + description = from_wx(_("Could not initialize Lua state")); return; } @@ -480,6 +511,7 @@ namespace { set_field(L, "cancel"); set_field(L, "lua_automation_version", 4); set_field(L, "__init_clipboard"); + set_field(L, "__raise_warning"); set_field(L, "file_name"); set_field(L, "gettext"); set_field(L, "project_properties"); @@ -506,7 +538,7 @@ namespace { // this is where features are registered if (lua_pcall(L, 0, 0, -2)) { // error occurred, assumed to be on top of Lua stack - description = agi::format("Error initialising Lua script \"%s\":\n\n%s", GetPrettyFilename().string(), get_string_or_default(L, -1)); + description = from_wx(fmt_tl("Error initialising Lua script \"%s\":\n\n%s", GetPrettyFilename().string(), get_string_or_default(L, -1))); lua_pop(L, 2); // error + error handler return; } @@ -516,7 +548,7 @@ namespace { lua_getglobal(L, "version"); if (lua_isnumber(L, -1) && lua_tointeger(L, -1) == 3) { lua_pop(L, 1); // just to avoid tripping the stackcheck in debug - description = "Attempted to load an Automation 3 script as an Automation 4 Lua script. Automation 3 is no longer supported."; + description = from_wx(_("Attempted to load an Automation 3 script as an Automation 4 Lua script. Automation 3 is no longer supported.")); stackcheck.check_stack(0); return; } @@ -531,6 +563,21 @@ namespace { lua_pop(L, 1); stackcheck.check_stack(0); + + lua_getfield(L, LUA_REGISTRYINDEX, "warnings"); + if (!lua_isnil(L, -1)) { + lua_for_each(L, [this] { + this->warnings.push_back(check_string(L, -1)); + }); + } else { + lua_pop(L, 1); + } + lua_getfield(L, LUA_GLOBALSINDEX, "aegisub"); + set_field(L, "__raise_warning"); + lua_pop(L, 1); + + stackcheck.check_stack(0); + // if we got this far, the script should be ready loaded = true; } diff --git a/src/command/help.cpp b/src/command/help.cpp index 9516ae29a8..d24fe2a59f 100644 --- a/src/command/help.cpp +++ b/src/command/help.cpp @@ -106,7 +106,7 @@ struct help_website final : public Command { STR_HELP("Visit Aegisub's official website") void operator()(agi::Context *) override { - wxLaunchDefaultBrowser("http://www.aegisub.org/", wxBROWSER_NEW_WINDOW); + wxLaunchDefaultBrowser("https://aegisub.org/", wxBROWSER_NEW_WINDOW); } }; } diff --git a/src/command/timecode.cpp b/src/command/timecode.cpp index d9c4c70158..9687d0e56d 100644 --- a/src/command/timecode.cpp +++ b/src/command/timecode.cpp @@ -70,7 +70,7 @@ struct timecode_open final : public Command { STR_HELP("Open a VFR timecodes v1 or v2 file") void operator()(agi::Context *c) override { - auto str = from_wx(_("All Supported Formats") + " (*.txt)|*.txt|" + _("All Files") + " (*.*)|*.*"); + auto str = from_wx(_("Text Files") + " (*.txt)|*.txt|" + _("All Files") + " (*.*)|*.*"); auto filename = OpenFileSelector(_("Open Timecodes File"), "Path/Last/Timecodes", "", "", str, c->parent); if (!filename.empty()) c->project->LoadTimecodes(filename); @@ -90,7 +90,7 @@ struct timecode_save final : public Command { } void operator()(agi::Context *c) override { - auto str = from_wx(_("All Supported Formats") + " (*.txt)|*.txt|" + _("All Files") + " (*.*)|*.*"); + auto str = from_wx(_("Text Files") + " (*.txt)|*.txt|" + _("All Files") + " (*.*)|*.*"); auto filename = SaveFileSelector(_("Save Timecodes File"), "Path/Last/Timecodes", "", "", str, c->parent); if (filename.empty()) return; diff --git a/src/command/video.cpp b/src/command/video.cpp index f1133628ca..5ad74509e5 100644 --- a/src/command/video.cpp +++ b/src/command/video.cpp @@ -632,7 +632,7 @@ struct video_play final : public validator_video_loaded { CMD_ICON(button_play) STR_MENU("Play") STR_DISP("Play") - STR_HELP("Play video starting on this position") + STR_HELP("Play the video starting on this position") void operator()(agi::Context *c) override { c->videoController->Play(); @@ -644,7 +644,7 @@ struct video_play_line final : public validator_video_loaded { CMD_ICON(button_playline) STR_MENU("Play line") STR_DISP("Play line") - STR_HELP("Play current line") + STR_HELP("Play the video for the current line") void operator()(agi::Context *c) override { c->videoController->PlayLine(); @@ -668,6 +668,17 @@ struct video_show_overscan final : public validator_video_loaded { } }; +struct video_reset_pan final : public validator_video_loaded { + CMD_NAME("video/reset_pan") + STR_MENU("Reset Video &Pan") + STR_DISP("Reset Video Pan") + STR_HELP("Reset the video's position in the video display") + + void operator()(agi::Context *c) override { + c->videoDisplay->ResetVideoZoom(); + } +}; + class video_zoom_100: public validator_video_attached { public: CMD_NAME("video/zoom/100") @@ -677,12 +688,12 @@ class video_zoom_100: public validator_video_attached { CMD_TYPE(COMMAND_VALIDATE | COMMAND_RADIO) bool IsActive(const agi::Context *c) override { - return c->videoDisplay->GetZoom() == 1.; + return c->videoDisplay->GetWindowZoom() == 1.; } void operator()(agi::Context *c) override { c->videoController->Stop(); - c->videoDisplay->SetZoom(1.); + c->videoDisplay->SetWindowZoom(1.); } }; @@ -708,12 +719,12 @@ class video_zoom_200: public validator_video_attached { CMD_TYPE(COMMAND_VALIDATE | COMMAND_RADIO) bool IsActive(const agi::Context *c) override { - return c->videoDisplay->GetZoom() == 2.; + return c->videoDisplay->GetWindowZoom() == 2.; } void operator()(agi::Context *c) override { c->videoController->Stop(); - c->videoDisplay->SetZoom(2.); + c->videoDisplay->SetWindowZoom(2.); } }; @@ -726,12 +737,12 @@ class video_zoom_50: public validator_video_attached { CMD_TYPE(COMMAND_VALIDATE | COMMAND_RADIO) bool IsActive(const agi::Context *c) override { - return c->videoDisplay->GetZoom() == .5; + return c->videoDisplay->GetWindowZoom() == .5; } void operator()(agi::Context *c) override { c->videoController->Stop(); - c->videoDisplay->SetZoom(.5); + c->videoDisplay->SetWindowZoom(.5); } }; @@ -743,7 +754,7 @@ struct video_zoom_in final : public validator_video_attached { STR_HELP("Zoom video in") void operator()(agi::Context *c) override { - c->videoDisplay->SetZoom(c->videoDisplay->GetZoom() + .125); + c->videoDisplay->SetWindowZoom(c->videoDisplay->GetWindowZoom() + .125); } }; @@ -755,7 +766,7 @@ struct video_zoom_out final : public validator_video_attached { STR_HELP("Zoom video out") void operator()(agi::Context *c) override { - c->videoDisplay->SetZoom(c->videoDisplay->GetZoom() - .125); + c->videoDisplay->SetWindowZoom(c->videoDisplay->GetWindowZoom() - .125); } }; } @@ -796,6 +807,7 @@ namespace cmd { reg(std::make_unique()); reg(std::make_unique()); reg(std::make_unique()); + reg(std::make_unique()); reg(std::make_unique()); reg(std::make_unique()); reg(std::make_unique()); diff --git a/src/command/vis_tool.cpp b/src/command/vis_tool.cpp index 8262fa163e..6fd5ccef89 100644 --- a/src/command/vis_tool.cpp +++ b/src/command/vis_tool.cpp @@ -138,49 +138,49 @@ namespace { CMD_ICON(visual_vector_clip_line) STR_MENU("Line") STR_DISP("Line") - STR_HELP("Appends a line") + STR_HELP("Append a line") }; struct visual_mode_vclip_bicubic final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/bicubic") CMD_ICON(visual_vector_clip_bicubic) STR_MENU("Bicubic") STR_DISP("Bicubic") - STR_HELP("Appends a bezier bicubic curve") + STR_HELP("Append a bezier bicubic curve") }; struct visual_mode_vclip_convert final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/convert") CMD_ICON(visual_vector_clip_convert) STR_MENU("Convert") STR_DISP("Convert") - STR_HELP("Converts a segment between line and bicubic") + STR_HELP("Convert a segment between line and bicubic") }; struct visual_mode_vclip_insert final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/insert") CMD_ICON(visual_vector_clip_insert) STR_MENU("Insert") STR_DISP("Insert") - STR_HELP("Inserts a control point") + STR_HELP("Insert a control point") }; struct visual_mode_vclip_remove final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/remove") CMD_ICON(visual_vector_clip_remove) STR_MENU("Remove") STR_DISP("Remove") - STR_HELP("Removes a control point") + STR_HELP("Remove a control point") }; struct visual_mode_vclip_freehand final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/freehand") CMD_ICON(visual_vector_clip_freehand) STR_MENU("Freehand") STR_DISP("Freehand") - STR_HELP("Draws a freehand shape") + STR_HELP("Draw a freehand shape") }; struct visual_mode_vclip_freehand_smooth final : public visual_tool_vclip_command { CMD_NAME("video/tool/vclip/freehand_smooth") CMD_ICON(visual_vector_clip_freehand_smooth) STR_MENU("Freehand smooth") STR_DISP("Freehand smooth") - STR_HELP("Draws a smoothed freehand shape") + STR_HELP("Draw a smoothed freehand shape") }; } diff --git a/src/dialog_attachments.cpp b/src/dialog_attachments.cpp index 9edd13bded..00e7572e96 100644 --- a/src/dialog_attachments.cpp +++ b/src/dialog_attachments.cpp @@ -136,7 +136,7 @@ void DialogAttachments::AttachFile(wxFileDialog &diag, wxString const& commit_ms void DialogAttachments::OnAttachFont(wxCommandEvent &) { wxFileDialog diag(&d, _("Choose file to be attached"), - to_wx(OPT_GET("Path/Fonts Collector Destination")->GetString()), "", "Font Files (*.ttf)|*.ttf", + to_wx(OPT_GET("Path/Fonts Collector Destination")->GetString()), "", _("Font Files") + " (*.ttf)|*.ttf", wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); AttachFile(diag, _("attach font file")); @@ -146,7 +146,7 @@ void DialogAttachments::OnAttachGraphics(wxCommandEvent &) { wxFileDialog diag(&d, _("Choose file to be attached"), "", "", - "Graphic Files (*.bmp, *.gif, *.jpg, *.ico, *.wmf)|*.bmp;*.gif;*.jpg;*.ico;*.wmf", + _("Graphic Files") + " (*.bmp, *.gif, *.jpg, *.ico, *.wmf)|*.bmp;*.gif;*.jpg;*.ico;*.wmf", wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); AttachFile(diag, _("attach graphics file")); @@ -167,7 +167,7 @@ void DialogAttachments::OnExtract(wxCommandEvent &) { _("Select the path to save the file to:"), "Path/Fonts Collector Destination", ass->Attachments[i].GetFileName(), - ".ttf", "Font Files (*.ttf)|*.ttf", + "", from_wx(_("All Supported Formats") + " (*.bmp, *.gif, *.jpg, *.ico, *.ttf, *.wmf)|*.bmp;*.gif;*.jpg;*.ico;*.ttf;*.wmf|" + _("Font Files") + " (*.ttf)|*.ttf|" + _("Graphic Files") + " (*.bmp, *.gif, *.jpg, *.ico, *.wmf)|*.bmp;*.gif;*.jpg;*.ico;*.wmf"), &d); fullPath = true; } diff --git a/src/dialog_automation.cpp b/src/dialog_automation.cpp index 82acaff922..cbc8934c18 100644 --- a/src/dialog_automation.cpp +++ b/src/dialog_automation.cpp @@ -184,6 +184,8 @@ void DialogAutomation::SetScriptInfo(int i, Automation4::Script *script) list->SetItem(i, 3, to_wx(script->GetDescription())); if (!script->GetLoadedState()) list->SetItemBackgroundColour(i, wxColour(255,128,128)); + else if (!script->GetWarnings().empty()) + list->SetItemBackgroundColour(i, wxColour(255,255,128)); else list->SetItemBackgroundColour(i, list->GetBackgroundColour()); } @@ -235,7 +237,7 @@ void DialogAutomation::OnAdd(wxCommandEvent &) OPT_SET("Path/Last/Automation")->SetString(fnpath.parent_path().string()); if (has_file(local_manager->GetScripts(), fnpath) || has_file(global_manager->GetScripts(), fnpath)) { - wxLogError("Script '%s' is already loaded", fname); + wxLogError(fmt_tl("Script '%s' is already loaded", fname)); continue; } @@ -286,13 +288,19 @@ void DialogAutomation::OnInfo(wxCommandEvent &) }); if (ei) { - info.push_back(fmt_tl("\nScript info:\nName: %s\nDescription: %s\nAuthor: %s\nVersion: %s\nFull path: %s\nState: %s\n\nFeatures provided by script:", + info.push_back(fmt_tl("\nScript info:\nName: %s\nDescription: %s\nAuthor: %s\nVersion: %s\nFull path: %s\nState: %s\n", ei->script->GetName(), ei->script->GetDescription(), ei->script->GetAuthor(), ei->script->GetVersion(), ei->script->GetFilename().wstring(), - ei->script->GetLoadedState() ? _("Correctly loaded") : _("Failed to load"))); + ei->script->GetLoadedState() ? (ei->script->GetWarnings().empty() ? _("Correctly loaded") : _("Loaded with warnings")) : _("Failed to load"))); + + boost::transform(ei->script->GetWarnings(), append_info, [](std::string s) { + return fmt_tl("Warning: %s\n", s); + }); + + info.push_back(_("Features provided by script:\n")); boost::transform(ei->script->GetMacros(), append_info, [this](const cmd::Command *f) { return fmt_tl(" Macro: %s (%s)", f->StrDisplay(context), f->name()); diff --git a/src/dialog_dummy_video.cpp b/src/dialog_dummy_video.cpp index 3c67a6fcc9..e9da82363b 100644 --- a/src/dialog_dummy_video.cpp +++ b/src/dialog_dummy_video.cpp @@ -62,23 +62,24 @@ struct DialogDummyVideo { }; struct ResolutionShortcut { - const char *name; + const wchar_t *name; int width; int height; }; static ResolutionShortcut resolutions[] = { - {"640x480 (SD fullscreen)", 640, 480}, - {"704x480 (SD anamorphic)", 704, 480}, - {"640x360 (SD widescreen)", 640, 360}, - {"704x396 (SD widescreen)", 704, 396}, - {"640x352 (SD widescreen MOD16)", 640, 352}, - {"704x400 (SD widescreen MOD16)", 704, 400}, - {"1024x576 (SuperPAL widescreen)", 1024, 576}, - {"1280x720 (HD 720p)", 1280, 720}, - {"1920x1080 (FHD 1080p)", 1920, 1080}, - {"2560x1440 (QHD 1440p)", 2560, 1440}, - {"3840x2160 (4K UHD 2160p)", 3840, 2160}, + {wxTRANSLATE(L"640\u00D7480 (SD fullscreen)"), 640, 480}, // U+00D7 multiplication sign + {wxTRANSLATE(L"704\u00D7480 (SD anamorphic)"), 704, 480}, + {wxTRANSLATE(L"640\u00D7360 (SD widescreen)"), 640, 360}, + {wxTRANSLATE(L"704\u00D7396 (SD widescreen)"), 704, 396}, + {wxTRANSLATE(L"640\u00D7352 (SD widescreen MOD16)"), 640, 352}, + {wxTRANSLATE(L"704\u00D7400 (SD widescreen MOD16)"), 704, 400}, + {wxTRANSLATE(L"1024\u00D7576 (SuperPAL widescreen)"), 1024, 576}, + {wxTRANSLATE(L"1280\u00D7720 (HD 720p)"), 1280, 720}, + {wxTRANSLATE(L"1920\u00D71080 (FHD 1080p)"), 1920, 1080}, + {wxTRANSLATE(L"2560\u00D71440 (QHD 1440p)"), 2560, 1440}, + {wxTRANSLATE(L"3840\u00D72160 (4K UHD 2160p)"), 3840, 2160}, + {wxTRANSLATE(L"1080\u00D71920 (FHD vertical)"), 1080, 1920}, }; wxSpinCtrl *spin_ctrl(wxWindow *parent, int min, int max, int *value) { @@ -91,7 +92,7 @@ wxComboBox *resolution_shortcuts(wxWindow *parent, int width, int height) { wxComboBox *ctrl = new wxComboBox(parent, -1, "", wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); for (auto const& res : resolutions) { - ctrl->Append(res.name); + ctrl->Append(wxGetTranslation(res.name)); if (res.width == width && res.height == height) ctrl->SetSelection(ctrl->GetCount() - 1); } @@ -106,7 +107,7 @@ DialogDummyVideo::DialogDummyVideo(wxWindow *parent) auto res_sizer = new wxBoxSizer(wxHORIZONTAL); res_sizer->Add(spin_ctrl(&d, 1, 10000, &width), wxSizerFlags(1).Expand()); - res_sizer->Add(new wxStaticText(&d, -1, " x "), wxSizerFlags().Center()); + res_sizer->Add(new wxStaticText(&d, -1, _(L"\u00D7")), wxSizerFlags().Center().HorzBorder()); // U+00D7 multiplication sign res_sizer->Add(spin_ctrl(&d, 1, 10000, &height), wxSizerFlags(1).Expand()); auto color_sizer = new wxBoxSizer(wxHORIZONTAL); diff --git a/src/dialog_export.cpp b/src/dialog_export.cpp index e0b3e848f5..447d4ba3c4 100644 --- a/src/dialog_export.cpp +++ b/src/dialog_export.cpp @@ -199,13 +199,13 @@ void DialogExport::OnProcess(wxCommandEvent &) { } catch (agi::UserCancelException const&) { } catch (agi::Exception const& err) { - wxMessageBox(to_wx(err.GetMessage()), "Error exporting subtitles", wxOK | wxICON_ERROR | wxCENTER, &d); + wxMessageBox(to_wx(err.GetMessage()), _("Error exporting subtitles"), wxOK | wxICON_ERROR | wxCENTER, &d); } catch (std::exception const& err) { - wxMessageBox(to_wx(err.what()), "Error exporting subtitles", wxOK | wxICON_ERROR | wxCENTER, &d); + wxMessageBox(to_wx(err.what()), _("Error exporting subtitles"), wxOK | wxICON_ERROR | wxCENTER, &d); } catch (...) { - wxMessageBox("Unknown error", "Error exporting subtitles", wxOK | wxICON_ERROR | wxCENTER, &d); + wxMessageBox(_("Unknown error"), _("Error exporting subtitles"), wxOK | wxICON_ERROR | wxCENTER, &d); } d.EndModal(0); diff --git a/src/dialog_properties.cpp b/src/dialog_properties.cpp index 8e8eb7c5f5..918d844be5 100644 --- a/src/dialog_properties.cpp +++ b/src/dialog_properties.cpp @@ -127,7 +127,7 @@ DialogProperties::DialogProperties(agi::Context *c) auto res_sizer = new wxBoxSizer(wxHORIZONTAL); res_sizer->Add(ResX, 1, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); - res_sizer->Add(new wxStaticText(&d, -1, "x"), 0, wxALIGN_CENTER | wxRIGHT, 5); + res_sizer->Add(new wxStaticText(&d, -1, _(L"\u00D7")), 0, wxALIGN_CENTER | wxRIGHT, 5); // U+00D7 multiplication sign res_sizer->Add(ResY, 1, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); res_sizer->Add(FromVideo, 1, 0, 0); @@ -135,7 +135,7 @@ DialogProperties::DialogProperties(agi::Context *c) wxDefaultPosition, wxDefaultSize, to_wx(MatrixNames()), wxCB_READONLY); auto matrix_sizer = new wxBoxSizer(wxHORIZONTAL); - matrix_sizer->Add(new wxStaticText(&d, -1, "YCbCr Matrix:"), wxSizerFlags().Center()); + matrix_sizer->Add(new wxStaticText(&d, -1, _("YCbCr Matrix:")), wxSizerFlags().Center()); matrix_sizer->Add(YCbCrMatrix, wxSizerFlags(1).Expand().Border(wxLEFT)); auto res_box = new wxStaticBoxSizer(wxVERTICAL, &d, _("Resolution")); diff --git a/src/dialog_resample.cpp b/src/dialog_resample.cpp index 514eb46990..dad0658d09 100644 --- a/src/dialog_resample.cpp +++ b/src/dialog_resample.cpp @@ -164,7 +164,7 @@ DialogResample::DialogResample(agi::Context *c, ResampleSettings &settings) auto source_res_sizer = new wxBoxSizer(wxHORIZONTAL); source_res_sizer->Add(source_x, wxSizerFlags(1).Border(wxRIGHT).Align(wxALIGN_CENTER_VERTICAL)); - source_res_sizer->Add(new wxStaticText(&d, -1, _("x")), wxSizerFlags().Center().Border(wxRIGHT)); + source_res_sizer->Add(new wxStaticText(&d, -1, _(L"\u00D7")), wxSizerFlags().Center().Border(wxRIGHT)); // U+00D7 multiplication sign source_res_sizer->Add(source_y, wxSizerFlags(1).Border(wxRIGHT).Align(wxALIGN_CENTER_VERTICAL)); source_res_sizer->Add(from_script); @@ -178,7 +178,7 @@ DialogResample::DialogResample(agi::Context *c, ResampleSettings &settings) auto dest_res_sizer = new wxBoxSizer(wxHORIZONTAL); dest_res_sizer->Add(dest_x, wxSizerFlags(1).Border(wxRIGHT).Align(wxALIGN_CENTER_VERTICAL)); - dest_res_sizer->Add(new wxStaticText(&d, -1, _("x")), wxSizerFlags().Center().Border(wxRIGHT)); + dest_res_sizer->Add(new wxStaticText(&d, -1, _(L"\u00D7")), wxSizerFlags().Center().Border(wxRIGHT)); dest_res_sizer->Add(dest_y, wxSizerFlags(1).Border(wxRIGHT).Align(wxALIGN_CENTER_VERTICAL)); dest_res_sizer->Add(from_video); diff --git a/src/dialog_spellchecker.cpp b/src/dialog_spellchecker.cpp index cfbc4d1074..c0c1a9cbaa 100644 --- a/src/dialog_spellchecker.cpp +++ b/src/dialog_spellchecker.cpp @@ -140,13 +140,13 @@ DialogSpellChecker::DialogSpellChecker(agi::Context *context) // List of supported spellchecker languages { if (!spellchecker) { - wxMessageBox("No spellchecker available.", "Error", wxOK | wxICON_ERROR | wxCENTER); + wxMessageBox(_("No spellchecker available."), _("Error"), wxOK | wxICON_ERROR | wxCENTER); throw agi::UserCancelException("No spellchecker available"); } dictionary_lang_codes = to_wx(spellchecker->GetLanguageList()); if (dictionary_lang_codes.empty()) { - wxMessageBox("No spellchecker dictionaries available.", "Error", wxOK | wxICON_ERROR | wxCENTER); + wxMessageBox(_("No spellchecker dictionaries available."), _("Error"), wxOK | wxICON_ERROR | wxCENTER); throw agi::UserCancelException("No spellchecker dictionaries available"); } diff --git a/src/dialog_style_editor.cpp b/src/dialog_style_editor.cpp index 0f60e956af..74179bfee2 100644 --- a/src/dialog_style_editor.cpp +++ b/src/dialog_style_editor.cpp @@ -169,6 +169,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con // Prepare control values wxString EncodingValue = std::to_wstring(style->encoding); wxString alignValues[9] = { "7", "8", "9", "4", "5", "6", "1", "2", "3" }; + wxString borderStyleValues[3] = { _("Outline"), _("Border boxes"), _("Shadow box (libass only)") }; // Encoding options wxArrayString encodingStrings; @@ -205,7 +206,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con Alignment = new wxRadioBox(this, -1, _("Alignment"), wxDefaultPosition, wxDefaultSize, 9, alignValues, 3, wxRA_SPECIFY_COLS); auto Outline = num_text_ctrl(&work->outline_w, 0.0, 1000.0, 0.1, 2); auto Shadow = num_text_ctrl(&work->shadow_w, 0.0, 1000.0, 0.1, 2); - OutlineType = new wxCheckBox(this, -1, _("&Opaque box")); + OutlineType = new wxComboBox(this, -1, "", wxDefaultPosition, wxDefaultSize, 3, borderStyleValues, wxCB_READONLY); auto ScaleX = num_text_ctrl(&work->scalex, 0.0, 10000.0, 1, 2); auto ScaleY = num_text_ctrl(&work->scaley, 0.0, 10000.0, 1, 2); auto Angle = num_text_ctrl(&work->angle, -360.0, 360.0, 1.0, 2); @@ -223,7 +224,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con margin[0]->SetToolTip(_("Distance from left edge, in pixels")); margin[1]->SetToolTip(_("Distance from right edge, in pixels")); margin[2]->SetToolTip(_("Distance from top/bottom edge, in pixels")); - OutlineType->SetToolTip(_("When selected, display an opaque box behind the subtitles instead of an outline around the text")); + OutlineType->SetToolTip(_("Whether to draw a normal outline or opaque boxes around the text")); Outline->SetToolTip(_("Outline width, in pixels")); Shadow->SetToolTip(_("Shadow distance, in pixels")); ScaleX->SetToolTip(_("Scale X, in percentage")); @@ -238,7 +239,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con BoxItalic->SetValue(style->italic); BoxUnderline->SetValue(style->underline); BoxStrikeout->SetValue(style->strikeout); - OutlineType->SetValue(style->borderstyle == 3); + OutlineType->SetSelection(BorderStyleToControl(style->borderstyle)); Alignment->SetSelection(AlignToControl(style->alignment)); // Fill font face list box FontName->Freeze(); @@ -313,7 +314,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con // Outline add_with_label(OutlineBox, _("Outline:"), Outline); add_with_label(OutlineBox, _("Shadow:"), Shadow); - OutlineBox->Add(OutlineType, 0, wxLEFT | wxALIGN_CENTER, 5); + add_with_label(OutlineBox, _("Border style:"), OutlineType); // Misc auto MiscBoxTop = new wxFlexGridSizer(2, 4, 5, 5); @@ -484,7 +485,7 @@ void DialogStyleEditor::UpdateWorkStyle() { encoding_num.ToLong(&templ); work->encoding = templ; - work->borderstyle = OutlineType->IsChecked() ? 3 : 1; + work->borderstyle = ControlToBorderStyle(OutlineType->GetSelection()); work->alignment = ControlToAlign(Alignment->GetSelection()); @@ -553,3 +554,23 @@ int DialogStyleEditor::AlignToControl(int n) { default: return 7; } } + +int DialogStyleEditor::ControlToBorderStyle(int choice) { + switch (choice) { + case 1: return 3; + case 2: return 4; + case 0: + default: + return 1; + } +} + +int DialogStyleEditor::BorderStyleToControl(int border_style) { + switch (border_style) { + case 3: return 1; + case 4: return 2; + case 1: + default: + return 0; + } +} diff --git a/src/dialog_style_editor.h b/src/dialog_style_editor.h index 41ad606ed0..8a4fe72693 100644 --- a/src/dialog_style_editor.h +++ b/src/dialog_style_editor.h @@ -77,7 +77,7 @@ class DialogStyleEditor final : public wxDialog { wxCheckBox *BoxStrikeout; wxSpinCtrl *margin[3]; wxRadioBox *Alignment; - wxCheckBox *OutlineType; + wxComboBox *OutlineType; wxComboBox *Encoding; wxTextCtrl *PreviewText; SubtitlesPreview *SubsPreview; @@ -85,6 +85,8 @@ class DialogStyleEditor final : public wxDialog { void SetBitmapColor(int n,wxColour color); int AlignToControl(int n); int ControlToAlign(int n); + int BorderStyleToControl(int n); + int ControlToBorderStyle(int n); void UpdateWorkStyle(); void OnChildFocus(wxChildFocusEvent &event); diff --git a/src/dialog_style_manager.cpp b/src/dialog_style_manager.cpp index fa0b07cd52..1f60614092 100644 --- a/src/dialog_style_manager.cpp +++ b/src/dialog_style_manager.cpp @@ -679,16 +679,16 @@ void DialogStyleManager::OnCurrentImport() { try { auto reader = SubtitleFormat::GetReader(filename, charset.c_str()); if (!reader) { - wxMessageBox("Unsupported subtitle format", "Error", wxOK | wxICON_ERROR | wxCENTER, this); + wxMessageBox(_("Unsupported subtitle format"), _("Error"), wxOK | wxICON_ERROR | wxCENTER, this); return; } reader->ReadFile(&temp, filename, 0, charset.c_str()); } catch (agi::Exception const& err) { - wxMessageBox(to_wx(err.GetMessage()), "Error", wxOK | wxICON_ERROR | wxCENTER, this); + wxMessageBox(to_wx(err.GetMessage()), _("Error"), wxOK | wxICON_ERROR | wxCENTER, this); } catch (...) { - wxMessageBox("Unknown error", "Error", wxOK | wxICON_ERROR | wxCENTER, this); + wxMessageBox(_("Unknown error"), _("Error"), wxOK | wxICON_ERROR | wxCENTER, this); return; } diff --git a/src/dialog_video_properties.cpp b/src/dialog_video_properties.cpp index 90c407844c..9623e37539 100644 --- a/src/dialog_video_properties.cpp +++ b/src/dialog_video_properties.cpp @@ -43,7 +43,11 @@ enum { int prompt(wxWindow *parent, bool ar_changed, int sx, int sy, int vx, int vy) { wxDialog d(parent, -1, _("Resolution mismatch")); - auto label_text = fmt_tl("The resolution of the loaded video and the resolution specified for the subtitles don't match.\n\nVideo resolution:\t%d x %d\nScript resolution:\t%d x %d\n\nChange subtitles resolution to match video?", vx, vy, sx, sy); + auto label_text = fmt_tl( + "The resolution of the loaded video and the resolution specified for the subtitles don't match.\n\n" + "Video resolution:\t%d \u00D7 %d\n" // U+00D7 multiplication sign + "Script resolution:\t%d \u00D7 %d\n\n" + "Change subtitles resolution to match video?", vx, vy, sx, sy); auto sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(new wxStaticText(&d, -1, label_text), wxSizerFlags().Border()); diff --git a/src/frame_main.cpp b/src/frame_main.cpp index d20bc44fbf..b3a5f6ef51 100644 --- a/src/frame_main.cpp +++ b/src/frame_main.cpp @@ -94,11 +94,13 @@ class AegisubFileDropTarget final : public wxFileDropTarget { }; FrameMain::FrameMain() -: wxFrame(nullptr, -1, "", wxDefaultPosition, wxSize(920,700), wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN) +: wxFrame(nullptr, -1, "") , context(std::make_unique()) { StartupLog("Entering FrameMain constructor"); + SetSize(FromDIP(wxSize(920, 700))); + #ifdef __WXGTK__ // XXX HACK XXX // We need to set LC_ALL to "" here for input methods to work reliably. @@ -273,12 +275,12 @@ void FrameMain::OnVideoOpen(AsyncVideoProvider *provider) { int vidx = provider->GetWidth(), vidy = provider->GetHeight(); // Set zoom level based on video resolution and window size - double zoom = context->videoDisplay->GetZoom(); + double zoom = context->videoDisplay->GetWindowZoom(); wxSize windowSize = GetSize(); if (vidx*3*zoom > windowSize.GetX()*4 || vidy*4*zoom > windowSize.GetY()*6) - context->videoDisplay->SetZoom(zoom * .25); + context->videoDisplay->SetWindowZoom(zoom * .25); else if (vidx*3*zoom > windowSize.GetX()*2 || vidy*4*zoom > windowSize.GetY()*3) - context->videoDisplay->SetZoom(zoom * .5); + context->videoDisplay->SetWindowZoom(zoom * .5); SetDisplayMode(1,-1); diff --git a/src/libresrc/default_config.json b/src/libresrc/default_config.json index 8fdcfb6ef4..f93f69af97 100644 --- a/src/libresrc/default_config.json +++ b/src/libresrc/default_config.json @@ -597,6 +597,9 @@ "Video" : { "Default Zoom" : 7, + "Scroll Action": 0, + "Ctrl Scroll Action": 2, + "Shift Scroll Action": 4, "Detached" : { "Enabled" : false, "Last" : { diff --git a/src/libresrc/default_menu.json b/src/libresrc/default_menu.json index 493938ac45..131b772892 100644 --- a/src/libresrc/default_menu.json +++ b/src/libresrc/default_menu.json @@ -95,6 +95,7 @@ { "submenu" : "main/video/set zoom", "text" : "Set &Zoom" }, { "submenu" : "main/video/override ar", "text" : "Override &AR" }, { "command" : "video/show_overscan" }, + { "command" : "video/reset_pan" }, {}, { "command" : "video/jump" }, { "command" : "video/jump/start" }, @@ -159,6 +160,7 @@ { "command" : "video/frame/save/subs" }, { "command" : "video/frame/copy/subs" }, {}, - { "command" : "video/copy_coordinates" } + { "command" : "video/copy_coordinates" }, + { "command" : "video/reset_pan" } ] } diff --git a/src/main.cpp b/src/main.cpp index c5d7e50ab1..0131470347 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -402,7 +402,7 @@ void AegisubApp::UnhandledException(bool stackWalk) { wxMessageBox(agi::wxformat(exception_message, path), _("Program error"), wxOK | wxICON_ERROR | wxCENTER, nullptr); } else if (LastStartupState) { - wxMessageBox(fmt_wx("Aegisub has crashed while starting up!\n\nThe last startup step attempted was: %s.", LastStartupState), _("Program error"), wxOK | wxICON_ERROR | wxCENTER); + wxMessageBox(fmt_tl("Aegisub has crashed while starting up!\n\nThe last startup step attempted was: %s.", LastStartupState), _("Program error"), wxOK | wxICON_ERROR | wxCENTER); } #endif } @@ -417,7 +417,7 @@ void AegisubApp::OnFatalException() { #define SHOW_EXCEPTION(str) \ wxMessageBox(fmt_tl("An unexpected error has occurred. Please save your work and restart Aegisub.\n\nError Message: %s", str), \ - "Exception in event handler", wxOK | wxICON_ERROR | wxCENTER | wxSTAY_ON_TOP) + _("Exception in event handler"), wxOK | wxICON_ERROR | wxCENTER | wxSTAY_ON_TOP) bool AegisubApp::OnExceptionInMainLoop() { try { throw; diff --git a/src/mkv_wrap.cpp b/src/mkv_wrap.cpp index eb1e0bf730..ce2ca43792 100644 --- a/src/mkv_wrap.cpp +++ b/src/mkv_wrap.cpp @@ -40,6 +40,7 @@ #include "dialog_progress.h" #include "MatroskaParser.h" #include "options.h" +#include "subtitle_format_srt.h" #include #include @@ -123,6 +124,8 @@ static bool read_subtitles(agi::ProgressSink *ps, MatroskaFile *file, MkvStdIO * std::vector uncompBuf(cs ? 256 : 0); + SrtTagParser srtParser; + while (mkv_ReadFrame(file, 0, &rt, &startTime, &endTime, &filePos, &frameSize, &frameFlags) == 0) { if (ps->IsCancelled()) return true; if (frameSize == 0) continue; @@ -179,7 +182,7 @@ static bool read_subtitles(agi::ProgressSink *ps, MatroskaFile *file, MkvStdIO * auto line = agi::format("Dialogue: 0,%s,%s,Default,,0,0,0,,%s" , subStart.GetAssFormatted() , subEnd.GetAssFormatted() - , readBuf); + , srtParser.ToAss(std::string(readBuf))); boost::replace_all(line, "\r\n", "\\N"); boost::replace_all(line, "\r", "\\N"); boost::replace_all(line, "\n", "\\N"); diff --git a/src/preferences.cpp b/src/preferences.cpp index 0d20ff2035..6eb31ff663 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -176,6 +176,12 @@ void Video(wxTreebook *book, Preferences *parent) { p->OptionAdd(general, _("Automatically open audio when opening video"), "Video/Open Audio"); p->CellSkip(general); + const wxString cscroll_arr[] = {_("Resizes the video box"), _("Resizes the video box (reversed)"), _("Zooms the video"), _("Zooms the video (reversed)"), _("Pans the video"), _("Pans the video (X/Y swapped)"), _("Does nothing")}; + wxArrayString choice_scroll(7, cscroll_arr); + p->OptionChoice(general, _("Scrolling on the video display"), choice_scroll, "Video/Scroll Action"); + p->OptionChoice(general, _("Ctrl+Scrolling on the video display"), choice_scroll, "Video/Ctrl Scroll Action"); + p->OptionChoice(general, _("Shift+Scrolling on the video display"), choice_scroll, "Video/Shift Scroll Action"); + const wxString czoom_arr[24] = { "12.5%", "25%", "37.5%", "50%", "62.5%", "75%", "87.5%", "100%", "112.5%", "125%", "137.5%", "150%", "162.5%", "175%", "187.5%", "200%", "212.5%", "225%", "237.5%", "250%", "262.5%", "275%", "287.5%", "300%" }; wxArrayString choice_zoom(24, czoom_arr); p->OptionChoice(general, _("Default Zoom"), choice_zoom, "Video/Default Zoom"); @@ -355,7 +361,7 @@ void Advanced(wxTreebook *book, Preferences *parent) { auto general = p->PageSizer(_("General")); - auto warning = new wxStaticText(p, wxID_ANY ,_("Changing these settings might result in bugs and/or crashes. Do not touch these unless you know what you're doing.")); + auto warning = new wxStaticText(p, wxID_ANY ,_("Changing these settings might result in bugs and/or crashes. Do not touch these unless you know what you're doing.")); auto font = parent->GetFont().MakeBold(); font.SetPointSize(12); warning->SetFont(font); @@ -455,9 +461,9 @@ void Advanced_Video(wxTreebook *book, Preferences *parent) { #ifdef WITH_FFMS2 auto ffms = p->PageSizer("FFmpegSource"); - const wxString log_levels[] = { "Quiet", "Panic", "Fatal", "Error", "Warning", "Info", "Verbose", "Debug" }; + const wxString log_levels[] = { wxTRANSLATE("Quiet"), wxTRANSLATE("Panic"), wxTRANSLATE("Fatal"), wxTRANSLATE("Error"), wxTRANSLATE("Warning"), wxTRANSLATE("Info"), wxTRANSLATE("Verbose"), wxTRANSLATE("Debug") }; wxArrayString log_levels_choice(8, log_levels); - p->OptionChoice(ffms, _("Debug log verbosity"), log_levels_choice, "Provider/FFmpegSource/Log Level"); + p->OptionChoice(ffms, _("Debug log verbosity"), log_levels_choice, "Provider/FFmpegSource/Log Level", true); p->OptionAdd(ffms, _("Decoding threads"), "Provider/Video/FFmpegSource/Decoding Threads", -1); p->OptionAdd(ffms, _("Enable unsafe seeking"), "Provider/Video/FFmpegSource/Unsafe Seeking"); @@ -600,6 +606,8 @@ Interface_Hotkeys::Interface_Hotkeys(wxTreebook *book, Preferences *parent) , model(new HotkeyDataViewModel(parent)) { quick_search = new wxSearchCtrl(this, -1); + quick_search->SetDescriptiveText(_("Search")); + auto new_button = new wxButton(this, -1, _("&New")); auto edit_button = new wxButton(this, -1, _("&Edit")); auto delete_button = new wxButton(this, -1, _("&Delete")); @@ -614,15 +622,15 @@ Interface_Hotkeys::Interface_Hotkeys(wxTreebook *book, Preferences *parent) dvc = new wxDataViewCtrl(this, -1); dvc->AssociateModel(model.get()); #ifndef __APPLE__ - dvc->AppendColumn(new wxDataViewColumn("Hotkey", new HotkeyRenderer, 0, 125, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); - dvc->AppendColumn(new wxDataViewColumn("Command", new CommandRenderer, 1, 250, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); + dvc->AppendColumn(new wxDataViewColumn(_("Hotkey"), new HotkeyRenderer, 0, 125, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); + dvc->AppendColumn(new wxDataViewColumn(_("Command"), new CommandRenderer, 1, 250, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); #else - auto col = new wxDataViewColumn("Hotkey", new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_EDITABLE), 0, 150, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE); + auto col = new wxDataViewColumn(_("Hotkey"), new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_EDITABLE), 0, 150, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE); col->SetMinWidth(150); dvc->AppendColumn(col); - dvc->AppendColumn(new wxDataViewColumn("Command", new wxDataViewIconTextRenderer("wxDataViewIconText", wxDATAVIEW_CELL_EDITABLE), 1, 250, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); + dvc->AppendColumn(new wxDataViewColumn(_("Command"), new wxDataViewIconTextRenderer("wxDataViewIconText", wxDATAVIEW_CELL_EDITABLE), 1, 250, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE)); #endif - dvc->AppendTextColumn("Description", 2, wxDATAVIEW_CELL_INERT, 300, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE); + dvc->AppendTextColumn(_("Description"), 2, wxDATAVIEW_CELL_INERT, 300, wxALIGN_LEFT, wxCOL_SORTABLE | wxCOL_RESIZABLE); wxSizer *buttons = new wxBoxSizer(wxHORIZONTAL); buttons->Add(quick_search, wxSizerFlags(1).Expand().Border()); diff --git a/src/preferences_base.cpp b/src/preferences_base.cpp index c8b30ede74..b8606e11d4 100644 --- a/src/preferences_base.cpp +++ b/src/preferences_base.cpp @@ -26,6 +26,8 @@ #include #include +#include + #include #include #include @@ -58,6 +60,19 @@ OPTION_UPDATER(DoubleUpdater, wxSpinDoubleEvent, OptionValueDouble, evt.GetValue OPTION_UPDATER(BoolUpdater, wxCommandEvent, OptionValueBool, !!evt.GetInt()); OPTION_UPDATER(ColourUpdater, ValueEvent, OptionValueColor, evt.Get()); +class StringChoiceUpdater { + std::string name; + Preferences *parent; + wxArrayString values; + +public: + StringChoiceUpdater(std::string const& n, Preferences *p, const wxArrayString &values) : name(n), parent(p), values(values) { } + void operator()(wxCommandEvent& evt) { + evt.Skip(); + parent->SetOption(std::make_unique(name, from_wx(values[evt.GetInt()]))); + } +}; + static void browse_button(wxTextCtrl *ctrl) { wxDirDialog dlg(nullptr, _("Please choose the folder:"), config::path->Decode(from_wx(ctrl->GetValue())).wstring()); if (dlg.ShowModal() == wxID_OK) { @@ -155,11 +170,17 @@ wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, co } } -void OptionPage::OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name) { +void OptionPage::OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name, bool translate) { parent->AddChangeableOption(opt_name); const auto opt = OPT_GET(opt_name); - auto cb = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, choices, wxCB_READONLY | wxCB_DROPDOWN); + wxArrayString choices_translated; + if (translate) { + choices_translated.reserve(choices.size()); + std::transform(choices.begin(), choices.end(), std::back_inserter(choices_translated), [](const wxString &s) { return wxGetTranslation(s); }); + } + + auto cb = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, translate ? choices_translated : choices, wxCB_READONLY | wxCB_DROPDOWN); Add(flex, name, cb); switch (opt->GetType()) { @@ -171,11 +192,14 @@ void OptionPage::OptionChoice(wxFlexGridSizer *flex, const wxString &name, const } case agi::OptionType::String: { wxString val(to_wx(opt->GetString())); + if (translate) + val = wxGetTranslation(val); + if (cb->FindString(val) != wxNOT_FOUND) cb->SetStringSelection(val); else if (!choices.empty()) cb->SetSelection(0); - cb->Bind(wxEVT_COMBOBOX, StringUpdater(opt_name, parent)); + cb->Bind(wxEVT_COMBOBOX, StringChoiceUpdater(opt_name, parent, choices)); break; } diff --git a/src/preferences_base.h b/src/preferences_base.h index d88507f9f1..c4a55538da 100644 --- a/src/preferences_base.h +++ b/src/preferences_base.h @@ -43,7 +43,7 @@ class OptionPage : public wxScrolled { void CellSkip(wxFlexGridSizer *flex); wxControl *OptionAdd(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, double min=0, double max=INT_MAX, double inc=1); - void OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name); + void OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name, bool translate = false); void OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler = nullptr, bool do_enable = false); void OptionFont(wxSizer *sizer, std::string opt_prefix); diff --git a/src/project.cpp b/src/project.cpp index 84c34082b6..0db5cf5a74 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -82,7 +82,7 @@ void Project::ReloadVideo() { } void Project::ShowError(wxString const& message) { - wxMessageBox(message, "Error loading file", wxOK | wxICON_ERROR | wxCENTER, context->parent); + wxMessageBox(message, _("Error loading file"), wxOK | wxICON_ERROR | wxCENTER, context->parent); } void Project::ShowError(std::string const& message) { @@ -108,7 +108,7 @@ bool Project::DoLoadSubtitles(agi::fs::path const& path, std::string encoding, P } catch (agi::fs::FileNotFound const&) { config::mru->Remove("Subtitle", path); - ShowError(path.string() + " not found."); + ShowError(fmt_tl("%s not found.", path.string())); return false; } @@ -127,7 +127,7 @@ bool Project::DoLoadSubtitles(agi::fs::path const& path, std::string encoding, P catch (agi::UserCancelException const&) { return false; } catch (agi::fs::FileNotFound const&) { config::mru->Remove("Subtitle", path); - ShowError(path.string() + " not found."); + ShowError(fmt_tl("%s not found.", path.string())); return false; } catch (agi::Exception const& e) { @@ -139,7 +139,7 @@ bool Project::DoLoadSubtitles(agi::fs::path const& path, std::string encoding, P return false; } catch (...) { - ShowError(wxString("Unknown error")); + ShowError(_("Unknown error")); return false; } @@ -219,7 +219,7 @@ void Project::LoadUnloadFiles(ProjectProperties properties) { vc->SetAspectRatio(properties.ar_value); else vc->SetAspectRatio(ar_mode); - context->videoDisplay->SetZoom(properties.video_zoom); + context->videoDisplay->SetWindowZoom(properties.video_zoom); } } @@ -315,7 +315,7 @@ bool Project::DoLoadVideo(agi::fs::path const& path) { std::string warning = video_provider->GetWarning(); if (!warning.empty()) - wxMessageBox(to_wx(warning), "Warning", wxICON_WARNING | wxOK); + wxMessageBox(to_wx(warning), _("Warning"), wxICON_WARNING | wxOK); video_has_subtitles = false; if (agi::fs::HasExtension(path, "mkv")) @@ -365,7 +365,7 @@ void Project::LoadTimecodes(agi::fs::path path) { config::mru->Remove("Timecodes", path); } catch (agi::vfr::Error const& e) { - ShowError("Failed to parse timecodes file: " + e.GetMessage()); + ShowError(_("Failed to parse timecodes file: ") + to_wx(e.GetMessage())); config::mru->Remove("Timecodes", path); } } @@ -391,11 +391,11 @@ void Project::LoadKeyframes(agi::fs::path path) { config::mru->Remove("Keyframes", path); } catch (agi::keyframe::KeyframeFormatParseError const& e) { - ShowError("Failed to parse keyframes file: " + e.GetMessage()); + ShowError(_("Failed to parse keyframes file: ") + to_wx(e.GetMessage())); config::mru->Remove("Keyframes", path); } catch (agi::keyframe::UnknownKeyframeFormatError const& e) { - ShowError("Keyframes file in unknown format: " + e.GetMessage()); + ShowError(_("Keyframes file in unknown format: ") + to_wx(e.GetMessage())); config::mru->Remove("Keyframes", path); } } diff --git a/src/subs_controller.cpp b/src/subs_controller.cpp index 92272698c9..e094b0d516 100644 --- a/src/subs_controller.cpp +++ b/src/subs_controller.cpp @@ -262,7 +262,7 @@ void SubsController::AutoSave() { auto name = filename.filename(); if (name.empty()) - name = "Untitled"; + name = from_wx(_("Untitled")); autosaved_commit_id = commit_id; auto frame = context->frame; @@ -279,10 +279,10 @@ void SubsController::AutoSave() { msg = fmt_tl("File backup saved as \"%s\".", path); } catch (const agi::Exception& err) { - msg = to_wx("Exception when attempting to autosave file: " + err.GetMessage()); + msg = _("Exception when attempting to autosave file: ") + to_wx(err.GetMessage()); } catch (...) { - msg = "Unhandled exception when attempting to autosave file."; + msg = _("Unhandled exception when attempting to autosave file."); } agi::dispatch::Main().Async([frame, msg] { diff --git a/src/subs_preview.cpp b/src/subs_preview.cpp index 22e5c93429..0c04cb266a 100644 --- a/src/subs_preview.cpp +++ b/src/subs_preview.cpp @@ -139,9 +139,8 @@ void SubtitlesPreview::OnSize(wxSizeEvent &evt) { } catch (...) { wxMessageBox( - "Could not get any subtitles provider for the preview box. Make " - "sure that you have a provider installed.", - "No subtitles provider", wxOK | wxICON_ERROR | wxCENTER); + _("Could not get any subtitles provider for the preview box. Make sure that you have a provider installed."), + _("No subtitles provider"), wxOK | wxICON_ERROR | wxCENTER); } sub_file->SetScriptInfo("PlayResX", std::to_string(w)); diff --git a/src/subtitle_format_ass.cpp b/src/subtitle_format_ass.cpp index 20109b6ec8..547c549aa3 100644 --- a/src/subtitle_format_ass.cpp +++ b/src/subtitle_format_ass.cpp @@ -66,7 +66,7 @@ struct Writer { { file.WriteLineToFile("[Script Info]"); file.WriteLineToFile(std::string("; Script generated by Aegisub ") + GetAegisubLongVersionString()); - file.WriteLineToFile("; http://www.aegisub.org/"); + file.WriteLineToFile("; https://aegisub.org/"); } template diff --git a/src/subtitle_format_srt.cpp b/src/subtitle_format_srt.cpp index d4529465e0..991e2aa6ec 100644 --- a/src/subtitle_format_srt.cpp +++ b/src/subtitle_format_srt.cpp @@ -48,7 +48,6 @@ #include #include #include -#include DEFINE_EXCEPTION(SRTParseError, SubtitleFormatParseError); @@ -119,169 +118,154 @@ struct ToggleTag { } }; -class SrtTagParser { - struct FontAttribs { - std::string face; - std::string size; - std::string color; - }; +std::string WriteSRTTime(agi::Time const& ts) +{ + return ts.GetSrtFormatted(); +} - const boost::regex tag_matcher; - const boost::regex attrib_matcher; - const boost::regex is_quoted; +} -public: - SrtTagParser() - : tag_matcher("^(.*?)<(/?b|/?i|/?u|/?s|/?font)([^>]*)>(.*)$", boost::regex::icase) - , attrib_matcher(R"(^[[:space:]]+(face|size|color)=('[^']*'|"[^"]*"|[^[:space:]]+))", boost::regex::icase) - , is_quoted(R"(^(['"]).*\1$)") - { - } +SrtTagParser::SrtTagParser() +: tag_matcher("^(.*?)<(/?b|/?i|/?u|/?s|/?font)([^>]*)>(.*)$", boost::regex::icase) +, attrib_matcher(R"(^[[:space:]]+(face|size|color)=('[^']*'|"[^"]*"|[^[:space:]]+))", boost::regex::icase) +, is_quoted(R"(^(['"]).*\1$)") +{} + +std::string SrtTagParser::ToAss(std::string srt) { + ToggleTag bold('b'); + ToggleTag italic('i'); + ToggleTag underline('u'); + ToggleTag strikeout('s'); + std::vector font_stack; + + std::string ass; // result to be built - std::string ToAss(std::string srt) + while (!srt.empty()) { - ToggleTag bold('b'); - ToggleTag italic('i'); - ToggleTag underline('u'); - ToggleTag strikeout('s'); - std::vector font_stack; + boost::smatch result; + if (!regex_match(srt, result, tag_matcher)) + { + // no more tags could be matched, end of string + ass.append(srt); + break; + } - std::string ass; // result to be built + // we found a tag, translate it + std::string pre_text = result.str(1); + std::string tag_name = result.str(2); + std::string tag_attrs = result.str(3); + std::string post_text = result.str(4); - while (!srt.empty()) + // the text before the tag goes through unchanged + ass.append(pre_text); + // the text after the tag is the input for next iteration + srt = post_text; + + boost::to_lower(tag_name); + switch (type_from_name(tag_name)) { - boost::smatch result; - if (!regex_match(srt, result, tag_matcher)) + case TagType::BOLD_OPEN: bold.Open(ass); break; + case TagType::BOLD_CLOSE: bold.Close(ass); break; + case TagType::ITALICS_OPEN: italic.Open(ass); break; + case TagType::ITALICS_CLOSE: italic.Close(ass); break; + case TagType::UNDERLINE_OPEN: underline.Open(ass); break; + case TagType::UNDERLINE_CLOSE: underline.Close(ass); break; + case TagType::STRIKEOUT_OPEN: strikeout.Open(ass); break; + case TagType::STRIKEOUT_CLOSE: strikeout.Close(ass); break; + case TagType::FONT_OPEN: { - // no more tags could be matched, end of string - ass.append(srt); - break; - } - - // we found a tag, translate it - std::string pre_text = result.str(1); - std::string tag_name = result.str(2); - std::string tag_attrs = result.str(3); - std::string post_text = result.str(4); + // new attributes to fill in + FontAttribs new_attribs; + FontAttribs old_attribs; + // start out with any previous ones on stack + if (font_stack.size() > 0) + old_attribs = font_stack.back(); + new_attribs = old_attribs; + // now find all attributes on this font tag + boost::smatch result; + while (regex_search(tag_attrs, result, attrib_matcher)) + { + // get attribute name and values + std::string attr_name = result.str(1); + std::string attr_value = result.str(2); + + // clean them + boost::to_lower(attr_name); + if (regex_match(attr_value, is_quoted)) + attr_value = attr_value.substr(1, attr_value.size() - 2); + + // handle the attributes + if (attr_name == "face") + new_attribs.face = agi::format("{\\fn%s}", attr_value); + else if (attr_name == "size") + new_attribs.size = agi::format("{\\fs%s}", attr_value); + else if (attr_name == "color") + new_attribs.color = agi::format("{\\c%s}", agi::Color(attr_value).GetAssOverrideFormatted()); + + // remove this attribute to prepare for the next + tag_attrs = result.suffix().str(); + } - // the text before the tag goes through unchanged - ass.append(pre_text); - // the text after the tag is the input for next iteration - srt = post_text; + // the attributes changed from old are then written out + if (new_attribs.face != old_attribs.face) + ass.append(new_attribs.face); + if (new_attribs.size != old_attribs.size) + ass.append(new_attribs.size); + if (new_attribs.color != old_attribs.color) + ass.append(new_attribs.color); - boost::to_lower(tag_name); - switch (type_from_name(tag_name)) + // lastly dump the new attributes state onto the stack + font_stack.push_back(new_attribs); + } + break; + case TagType::FONT_CLOSE: { - case TagType::BOLD_OPEN: bold.Open(ass); break; - case TagType::BOLD_CLOSE: bold.Close(ass); break; - case TagType::ITALICS_OPEN: italic.Open(ass); break; - case TagType::ITALICS_CLOSE: italic.Close(ass); break; - case TagType::UNDERLINE_OPEN: underline.Open(ass); break; - case TagType::UNDERLINE_CLOSE: underline.Close(ass); break; - case TagType::STRIKEOUT_OPEN: strikeout.Open(ass); break; - case TagType::STRIKEOUT_CLOSE: strikeout.Close(ass); break; - case TagType::FONT_OPEN: + // this requires a font stack entry + if (font_stack.empty()) + break; + // get the current attribs + FontAttribs cur_attribs = font_stack.back(); + // remove them from the stack + font_stack.pop_back(); + // grab the old attributes if there are any + FontAttribs old_attribs; + if (font_stack.size() > 0) + old_attribs = font_stack.back(); + // then restore the attributes to previous settings + if (cur_attribs.face != old_attribs.face) { - // new attributes to fill in - FontAttribs new_attribs; - FontAttribs old_attribs; - // start out with any previous ones on stack - if (font_stack.size() > 0) - old_attribs = font_stack.back(); - new_attribs = old_attribs; - // now find all attributes on this font tag - boost::smatch result; - while (regex_search(tag_attrs, result, attrib_matcher)) - { - // get attribute name and values - std::string attr_name = result.str(1); - std::string attr_value = result.str(2); - - // clean them - boost::to_lower(attr_name); - if (regex_match(attr_value, is_quoted)) - attr_value = attr_value.substr(1, attr_value.size() - 2); - - // handle the attributes - if (attr_name == "face") - new_attribs.face = agi::format("{\\fn%s}", attr_value); - else if (attr_name == "size") - new_attribs.size = agi::format("{\\fs%s}", attr_value); - else if (attr_name == "color") - new_attribs.color = agi::format("{\\c%s}", agi::Color(attr_value).GetAssOverrideFormatted()); - - // remove this attribute to prepare for the next - tag_attrs = result.suffix().str(); - } - - // the attributes changed from old are then written out - if (new_attribs.face != old_attribs.face) - ass.append(new_attribs.face); - if (new_attribs.size != old_attribs.size) - ass.append(new_attribs.size); - if (new_attribs.color != old_attribs.color) - ass.append(new_attribs.color); - - // lastly dump the new attributes state onto the stack - font_stack.push_back(new_attribs); + if (old_attribs.face.empty()) + ass.append("{\\fn}"); + else + ass.append(old_attribs.face); } - break; - case TagType::FONT_CLOSE: + if (cur_attribs.size != old_attribs.size) { - // this requires a font stack entry - if (font_stack.empty()) - break; - // get the current attribs - FontAttribs cur_attribs = font_stack.back(); - // remove them from the stack - font_stack.pop_back(); - // grab the old attributes if there are any - FontAttribs old_attribs; - if (font_stack.size() > 0) - old_attribs = font_stack.back(); - // then restore the attributes to previous settings - if (cur_attribs.face != old_attribs.face) - { - if (old_attribs.face.empty()) - ass.append("{\\fn}"); - else - ass.append(old_attribs.face); - } - if (cur_attribs.size != old_attribs.size) - { - if (old_attribs.size.empty()) - ass.append("{\\fs}"); - else - ass.append(old_attribs.size); - } - if (cur_attribs.color != old_attribs.color) - { - if (old_attribs.color.empty()) - ass.append("{\\c}"); - else - ass.append(old_attribs.color); - } + if (old_attribs.size.empty()) + ass.append("{\\fs}"); + else + ass.append(old_attribs.size); + } + if (cur_attribs.color != old_attribs.color) + { + if (old_attribs.color.empty()) + ass.append("{\\c}"); + else + ass.append(old_attribs.color); } - break; - default: - // unknown tag, replicate it in the output - ass.append("<").append(tag_name).append(tag_attrs).append(">"); - break; } + break; + default: + // unknown tag, replicate it in the output + ass.append("<").append(tag_name).append(tag_attrs).append(">"); + break; } - - // make it a little prettier, join tag groups - boost::replace_all(ass, "}{", ""); - - return ass; } -}; -std::string WriteSRTTime(agi::Time const& ts) -{ - return ts.GetSrtFormatted(); -} + // make it a little prettier, join tag groups + boost::replace_all(ass, "}{", ""); + return ass; } SRTSubtitleFormat::SRTSubtitleFormat() diff --git a/src/subtitle_format_srt.h b/src/subtitle_format_srt.h index 1d9d2bc453..ddd24cef3b 100644 --- a/src/subtitle_format_srt.h +++ b/src/subtitle_format_srt.h @@ -32,10 +32,31 @@ /// @ingroup subtitle_io /// +#include + #include "subtitle_format.h" +#include + class AssDialogue; +class SrtTagParser { + struct FontAttribs { + std::string face; + std::string size; + std::string color; + }; + + const boost::regex tag_matcher; + const boost::regex attrib_matcher; + const boost::regex is_quoted; + +public: + SrtTagParser(); + + std::string ToAss(std::string srt); +}; + class SRTSubtitleFormat final : public SubtitleFormat { std::string ConvertTags(const AssDialogue *diag) const; public: diff --git a/src/subtitle_format_ssa.cpp b/src/subtitle_format_ssa.cpp index 0c3c1f3b52..3faab7f06d 100644 --- a/src/subtitle_format_ssa.cpp +++ b/src/subtitle_format_ssa.cpp @@ -47,7 +47,7 @@ void SsaSubtitleFormat::WriteFile(const AssFile *src, agi::fs::path const& filen file.WriteLineToFile("[Script Info]"); file.WriteLineToFile(std::string("; Script generated by Aegisub ") + GetAegisubLongVersionString()); - file.WriteLineToFile("; http://www.aegisub.org/"); + file.WriteLineToFile("; https://aegisub.org/"); for (auto const& line : src->Info) file.WriteLineToFile(boost::iequals(line.Key(), "scripttype") ? "ScriptType: v4.00" : line.GetEntryData()); diff --git a/src/subtitles_provider_csri.cpp b/src/subtitles_provider_csri.cpp index e616b58688..8bb1e89fbe 100644 --- a/src/subtitles_provider_csri.cpp +++ b/src/subtitles_provider_csri.cpp @@ -98,7 +98,7 @@ void CSRISubtitlesProvider::DrawSubtitles(VideoFrame &dst, double time) { } frame.pixfmt = CSRI_F_BGR_; - csri_fmt format = { frame.pixfmt, dst.width, dst.height }; + csri_fmt format = { frame.pixfmt, static_cast(dst.width), static_cast(dst.height) }; std::lock_guard lock(csri_mutex); if (!csri_request_fmt(instance.get(), &format)) diff --git a/src/text_file_writer.cpp b/src/text_file_writer.cpp index bc059926a4..17cedc31c6 100644 --- a/src/text_file_writer.cpp +++ b/src/text_file_writer.cpp @@ -24,7 +24,7 @@ #include TextFileWriter::TextFileWriter(agi::fs::path const& filename, std::string encoding) -: file(new agi::io::Save(filename, true)) +: file(filename, true) { if (encoding.empty()) encoding = OPT_GET("App/Save Charset")->GetString(); @@ -43,16 +43,16 @@ TextFileWriter::TextFileWriter(agi::fs::path const& filename, std::string encodi } // Explicit empty destructor required with a unique_ptr to an incomplete class -TextFileWriter::~TextFileWriter() = default; +TextFileWriter::~TextFileWriter() noexcept(false) = default; void TextFileWriter::WriteLineToFile(std::string_view line, bool addLineBreak) { if (conv) { auto converted = conv->Convert(line); - file->Get().write(converted.data(), converted.size()); + file.Get().write(converted.data(), converted.size()); } else - file->Get().write(line.data(), line.size()); + file.Get().write(line.data(), line.size()); if (addLineBreak) - file->Get().write(newline.data(), newline.size()); + file.Get().write(newline.data(), newline.size()); } diff --git a/src/text_file_writer.h b/src/text_file_writer.h index b9e20713e6..630ce5ad1c 100644 --- a/src/text_file_writer.h +++ b/src/text_file_writer.h @@ -15,6 +15,7 @@ // Aegisub Project http://www.aegisub.org/ #include +#include #include #include @@ -24,7 +25,7 @@ namespace agi { } class TextFileWriter { - std::unique_ptr file; + agi::io::Save file; std::unique_ptr conv; #ifdef _WIN32 std::string newline = "\r\n"; @@ -34,7 +35,7 @@ class TextFileWriter { public: TextFileWriter(agi::fs::path const& filename, std::string encoding=""); - ~TextFileWriter(); + ~TextFileWriter() noexcept(false); // ~Save() is noexcept(false) void WriteLineToFile(std::string_view line, bool addLineBreak=true); }; diff --git a/src/video_display.cpp b/src/video_display.cpp index 2447639e61..3a446a1741 100644 --- a/src/video_display.cpp +++ b/src/video_display.cpp @@ -34,6 +34,8 @@ #include "video_display.h" +#include "libaegisub/log.h" + #include "ass_file.h" #include "async_video_provider.h" #include "command/command.h" @@ -76,26 +78,43 @@ class OpenGlException final : public agi::Exception { #define E(cmd) cmd; if (GLenum err = glGetError()) throw OpenGlException(#cmd, err) +enum { + SCALE_VIDEO, + SCALE_VIDEO_REV, + ZOOM_VIDEO, + ZOOM_VIDEO_REV, + PAN_VIDEO, + PAN_VIDEO_SWAP, + NOTHING, +}; + VideoDisplay::VideoDisplay(wxToolBar *toolbar, bool freeSize, wxComboBox *zoomBox, wxWindow *parent, agi::Context *c) : wxGLCanvas(parent, -1, attribList) , autohideTools(OPT_GET("Tool/Visual/Autohide")) , con(c) -, zoomValue(OPT_GET("Video/Default Zoom")->GetInt() * .125 + .125) +, windowZoomValue(OPT_GET("Video/Default Zoom")->GetInt() * .125 + .125) , toolBar(toolbar) , zoomBox(zoomBox) , freeSize(freeSize) , scale_factor(GetContentScaleFactor()) { - zoomBox->SetValue(fmt_wx("%g%%", zoomValue * 100.)); + zoomBox->SetValue(fmt_wx("%g%%", windowZoomValue * 100.)); zoomBox->Bind(wxEVT_COMBOBOX, &VideoDisplay::SetZoomFromBox, this); zoomBox->Bind(wxEVT_TEXT_ENTER, &VideoDisplay::SetZoomFromBoxText, this); con->videoController->Bind(EVT_FRAME_READY, &VideoDisplay::UploadFrameData, this); connections = agi::signal::make_vector({ - con->project->AddVideoProviderListener(&VideoDisplay::UpdateSize, this), + con->project->AddVideoProviderListener([this] (AsyncVideoProvider *provider) { + if (!provider) ResetVideoZoom(); + UpdateSize(); + }), con->videoController->AddARChangeListener(&VideoDisplay::UpdateSize, this), }); + if (!EnableTouchEvents(wxTOUCH_ZOOM_GESTURE)) { + LOG_E("video/display") << "Failed to enable touch events."; + } + Bind(wxEVT_PAINT, std::bind(&VideoDisplay::Render, this)); Bind(wxEVT_SIZE, &VideoDisplay::OnSizeEvent, this); Bind(wxEVT_CONTEXT_MENU, &VideoDisplay::OnContextMenu, this); @@ -105,13 +124,16 @@ VideoDisplay::VideoDisplay(wxToolBar *toolbar, bool freeSize, wxComboBox *zoomBo Bind(wxEVT_LEFT_DCLICK, &VideoDisplay::OnMouseEvent, this); Bind(wxEVT_LEFT_DOWN, &VideoDisplay::OnMouseEvent, this); Bind(wxEVT_LEFT_UP, &VideoDisplay::OnMouseEvent, this); + Bind(wxEVT_MIDDLE_DOWN, &VideoDisplay::OnMouseEvent, this); + Bind(wxEVT_MIDDLE_UP, &VideoDisplay::OnMouseEvent, this); Bind(wxEVT_MOTION, &VideoDisplay::OnMouseEvent, this); Bind(wxEVT_MOUSEWHEEL, &VideoDisplay::OnMouseWheel, this); + Bind(wxEVT_GESTURE_ZOOM, &VideoDisplay::OnGestureZoom, this); Bind(wxEVT_DPI_CHANGED, [this] (wxDPIChangedEvent &e) { - double new_zoom = zoomValue * GetContentScaleFactor() / scale_factor; + double new_zoom = windowZoomValue * GetContentScaleFactor() / scale_factor; scale_factor = GetContentScaleFactor(); - SetZoom(new_zoom); + SetWindowZoom(new_zoom); e.Skip(); }); @@ -189,12 +211,16 @@ void VideoDisplay::Render() try { if (!viewport_height || !viewport_width) PositionVideo(); - videoOut->Render(viewport_left, viewport_bottom, viewport_width, viewport_height); - E(glViewport(0, std::min(viewport_bottom, 0), videoSize.GetWidth(), videoSize.GetHeight())); + wxSize client_size = GetClientSize(); + client_size = wxSize(std::max(1, client_size.GetWidth()), std::max(1, client_size.GetHeight())); + + videoOut->Render(client_size.GetWidth() * scale_factor, client_size.GetHeight() * scale_factor, + viewport_left, viewport_bottom, viewport_width, viewport_height); + E(glViewport(0, 0, client_size.GetWidth() * scale_factor, client_size.GetHeight() * scale_factor)); E(glMatrixMode(GL_PROJECTION)); E(glLoadIdentity()); - E(glOrtho(0.0f, videoSize.GetWidth() / scale_factor, videoSize.GetHeight() / scale_factor, 0.0f, -1000.0f, 1000.0f)); + E(glOrtho(0.0f, client_size.GetWidth(), client_size.GetHeight(), 0.0f, -1000.0f, 1000.0f)); if (OPT_GET("Video/Overscan Mask")->GetBool()) { double ar = con->videoController->GetAspectRatioValue(); @@ -268,11 +294,11 @@ void VideoDisplay::PositionVideo() { if (!provider || !IsShownOnScreen()) return; viewport_left = 0; - viewport_bottom = GetClientSize().GetHeight() * scale_factor - videoSize.GetHeight(); viewport_top = 0; viewport_width = videoSize.GetWidth(); viewport_height = videoSize.GetHeight(); + // Center video in canvas if necessary if (freeSize) { int vidW = provider->GetWidth(); int vidH = provider->GetHeight(); @@ -290,24 +316,44 @@ void VideoDisplay::PositionVideo() { // Video is wider than window, blackbox top/bottom else if (videoAr - displayAr > 0.01) { int delta = viewport_height - viewport_width / videoAr; - viewport_top = viewport_bottom = delta / 2; + viewport_top = delta / 2; viewport_height -= delta; } } - if (tool) + // Apply video zoom + int viewport_center_x = viewport_left + viewport_width / 2; + int viewport_center_y = viewport_top + viewport_height / 2; + + viewport_width *= videoZoomValue; + viewport_height *= videoZoomValue; + + viewport_left = viewport_center_x - viewport_width / 2; + viewport_top = viewport_center_y - viewport_height / 2; + + // Apply panning + viewport_left += pan_x * videoSize.GetHeight(); + viewport_top += pan_y * videoSize.GetHeight(); + + viewport_bottom = GetClientSize().GetHeight() * scale_factor - viewport_height - viewport_top; + + if (tool) { + wxSize client_size = GetClientSize(); + tool->SetCanvasSize(client_size.GetWidth(), client_size.GetHeight()); tool->SetDisplayArea(viewport_left / scale_factor, viewport_top / scale_factor, viewport_width / scale_factor, viewport_height / scale_factor); + } Render(); } void VideoDisplay::UpdateSize() { auto provider = con->project->VideoProvider(); + if (!provider || !IsShownOnScreen()) return; videoSize.Set(provider->GetWidth(), provider->GetHeight()); - videoSize *= zoomValue; + videoSize *= windowZoomValue; if (con->videoController->GetAspectRatioType() != AspectRatio::Default) videoSize.SetWidth(videoSize.GetHeight() * con->videoController->GetAspectRatioValue()); @@ -335,9 +381,9 @@ void VideoDisplay::OnSizeEvent(wxSizeEvent &event) { if (freeSize) { videoSize = GetClientSize() * scale_factor; PositionVideo(); - zoomValue = double(viewport_height) / con->project->VideoProvider()->GetHeight(); - zoomBox->ChangeValue(fmt_wx("%g%%", zoomValue * 100.)); - con->ass->Properties.video_zoom = zoomValue; + windowZoomValue = double(viewport_height) / con->project->VideoProvider()->GetHeight(); + zoomBox->ChangeValue(fmt_wx("%g%%", windowZoomValue * 100.)); + con->ass->Properties.video_zoom = windowZoomValue; } else { PositionVideo(); @@ -348,6 +394,10 @@ void VideoDisplay::OnMouseEvent(wxMouseEvent& event) { if (event.ButtonDown()) SetFocus(); + if (event.Dragging() && event.MiddleIsDown()) { + Pan(Vector2D(event.GetPosition()) - last_mouse_pos); + } + last_mouse_pos = mouse_pos = event.GetPosition(); if (tool) @@ -362,11 +412,76 @@ void VideoDisplay::OnMouseLeave(wxMouseEvent& event) { void VideoDisplay::OnMouseWheel(wxMouseEvent& event) { if (int wheel = event.GetWheelRotation()) { - if (ForwardMouseWheelEvent(this, event)) - SetZoom(zoomValue + .125 * (wheel / event.GetWheelDelta())); + if (ForwardMouseWheelEvent(this, event)) { + const char *opt = "Scroll Action"; + if (event.CmdDown() && event.ShiftDown()) { + return; + } else if (event.CmdDown()) { + opt = "Ctrl Scroll Action"; + } else if (event.ShiftDown()) { + opt = "Shift Scroll Action"; + } + + int action = OPT_GET(std::string("Video/") + opt)->GetInt(); + int dir = 1; + bool swap = false; + switch (action) { + case SCALE_VIDEO_REV: + dir = -1; // fallthrough + case SCALE_VIDEO: + SetWindowZoom(windowZoomValue + dir * .125 * (wheel / event.GetWheelDelta())); + break; + + case ZOOM_VIDEO_REV: + dir = -1; // fallthrough + case ZOOM_VIDEO: + { + double newZoomValue = videoZoomValue * (1 + dir * 0.125 * wheel / event.GetWheelDelta()); + VideoZoom(newZoomValue, event.GetPosition() * scale_factor); + } + break; + + case PAN_VIDEO_SWAP: + swap = true; // Fallthrough + case PAN_VIDEO: + { + double distance = 5 * static_cast(wheel) / event.GetWheelDelta(); + Vector2D pan = event.GetWheelAxis() == wxMOUSE_WHEEL_HORIZONTAL ? Vector2D(-distance, 0) : Vector2D(0, distance); + + Pan(swap ? Vector2D(pan.Y(), pan.X()) : pan); + } + break; + + case NOTHING: + default: + break; + } + } } } +void VideoDisplay::OnGestureZoom(wxZoomGestureEvent& event) { +#ifdef __WXGTK__ + if (event.IsGestureEnd() && event.GetZoomFactor() == 1.0 && event.GetPosition() == wxPoint(0, 0)) { + return; + // On X11+wxGTK, right-clicking seems to generate a single false event of this form + // (without any preceding GestureStart event). + // TODO: report this upstream; last time I tried I couldn't reproduce this with a minimal sample. + } +#endif + + if (event.IsGestureStart()) { + videoZoomAtGestureStart = videoZoomValue; + } + VideoZoom(videoZoomAtGestureStart * event.GetZoomFactor(), event.GetPosition() * scale_factor); +} + +void VideoDisplay::Pan(Vector2D delta) { + pan_x += delta.X() * scale_factor / videoSize.GetHeight(); + pan_y += delta.Y() * scale_factor / videoSize.GetHeight(); + PositionVideo(); +} + void VideoDisplay::OnContextMenu(wxContextMenuEvent&) { if (!context_menu) context_menu = menu::GetMenu("video_context", (wxID_HIGHEST + 1) + 9000, con); SetCursor(wxNullCursor); @@ -377,22 +492,44 @@ void VideoDisplay::OnKeyDown(wxKeyEvent &event) { hotkey::check("Video", con, event); } -void VideoDisplay::SetZoom(double value) { +void VideoDisplay::SetWindowZoom(double value) { if (value == 0) return; - zoomValue = std::max(value, .125); - size_t selIndex = zoomValue / .125 - 1; + windowZoomValue = std::max(value, .125); + size_t selIndex = windowZoomValue / .125 - 1; if (selIndex < zoomBox->GetCount()) zoomBox->SetSelection(selIndex); - zoomBox->ChangeValue(fmt_wx("%g%%", zoomValue * 100.)); - con->ass->Properties.video_zoom = zoomValue; + zoomBox->ChangeValue(fmt_wx("%g%%", windowZoomValue * 100.)); + con->ass->Properties.video_zoom = windowZoomValue; UpdateSize(); } +void VideoDisplay::VideoZoom(double newZoomValue, wxPoint zoomCenter) { + newZoomValue = std::max(0.125, std::min(10.0, newZoomValue)); + + Vector2D unpannedVideoCenter = Vector2D(viewport_left, viewport_top) + Vector2D(viewport_width, viewport_height) / 2; + Vector2D videoCenter = unpannedVideoCenter + Vector2D(pan_x, pan_y); + Vector2D zoomCenterToVideoCenter = videoCenter - zoomCenter; + Vector2D panDiff = Vector2D(zoomCenter) + newZoomValue / videoZoomValue * zoomCenterToVideoCenter - videoCenter; + + pan_x += panDiff.X() / videoSize.GetHeight(); + pan_y += panDiff.Y() / videoSize.GetHeight(); + videoZoomValue = newZoomValue; + + PositionVideo(); +} + +void VideoDisplay::ResetVideoZoom() { + pan_x = 0; + pan_y = 0; + videoZoomValue = 1; + PositionVideo(); +} + void VideoDisplay::SetZoomFromBox(wxCommandEvent &) { int sel = zoomBox->GetSelection(); if (sel != wxNOT_FOUND) { - zoomValue = (sel + 1) * .125; - con->ass->Properties.video_zoom = zoomValue; + windowZoomValue = (sel + 1) * .125; + con->ass->Properties.video_zoom = windowZoomValue; UpdateSize(); } } @@ -404,7 +541,7 @@ void VideoDisplay::SetZoomFromBoxText(wxCommandEvent &) { double value; if (strValue.ToDouble(&value)) - SetZoom(value / 100.); + SetWindowZoom(value / 100.); } void VideoDisplay::SetTool(std::unique_ptr new_tool) { @@ -422,8 +559,7 @@ void VideoDisplay::SetTool(std::unique_ptr new_tool) { else { // UpdateSize fits the window to the video, which we don't want to do GetGrandParent()->Layout(); - tool->SetDisplayArea(viewport_left / scale_factor, viewport_top / scale_factor, - viewport_width / scale_factor, viewport_height / scale_factor); + PositionVideo(); } } diff --git a/src/video_display.h b/src/video_display.h index c0844a0f8f..0fac4b53ef 100644 --- a/src/video_display.h +++ b/src/video_display.h @@ -67,25 +67,35 @@ class VideoDisplay final : public wxGLCanvas { std::unique_ptr context_menu; - /// The size of the video in screen at the current zoom level, which may not + /// The size of the video canvas in physical pixels at the current zoom level + /// (including any letter- or pillarboxing if applicable), which may not /// be the same as the actual client size of the display wxSize videoSize; Vector2D last_mouse_pos, mouse_pos; - /// Screen pixels between the left of the canvas and the left of the video + /// Physical (screen) pixels between the left of the canvas and the left of the video int viewport_left = 0; - /// The width of the video in screen pixels + /// The width of the video in physical pixels int viewport_width = 0; - /// Screen pixels between the bottom of the canvas and the bottom of the video; used for glViewport + /// Physical pixels between the bottom of the canvas and the bottom of the video; used for glViewport int viewport_bottom = 0; - /// Screen pixels between the bottom of the canvas and the top of the video; used for coordinate space conversion + /// Physical pixels between the bottom of the canvas and the top of the video; used for coordinate space conversion int viewport_top = 0; - /// The height of the video in screen pixels + /// The height of the video in physical pixels int viewport_height = 0; /// The current zoom level, where 1.0 = 100% - double zoomValue; + double windowZoomValue; + + /// The zoom level of the video inside the video display. + double videoZoomValue = 1; + + double videoZoomAtGestureStart = 1; + + /// The video pan, relative to the unzoomed viewport's height. + double pan_x = 0; + double pan_y = 0; /// The video renderer std::unique_ptr videoOut; @@ -135,10 +145,14 @@ class VideoDisplay final : public wxGLCanvas { void OnMouseEvent(wxMouseEvent& event); void OnMouseWheel(wxMouseEvent& event); void OnMouseLeave(wxMouseEvent& event); + void OnGestureZoom(wxZoomGestureEvent& event); /// @brief Recalculate video positioning and scaling when the available area or zoom changes void OnSizeEvent(wxSizeEvent &event); void OnContextMenu(wxContextMenuEvent&); + void Pan(Vector2D delta); // Takes delta in logical pixels + void VideoZoom(double newVideoZoom, wxPoint zoomCenter); + public: /// @brief Constructor VideoDisplay( @@ -154,9 +168,11 @@ class VideoDisplay final : public wxGLCanvas { /// @brief Set the zoom level /// @param value The new zoom level - void SetZoom(double value); + void SetWindowZoom(double value); /// @brief Get the current zoom level - double GetZoom() const { return zoomValue; } + double GetWindowZoom() const { return windowZoomValue; } + + void ResetVideoZoom(); /// Get the last seen position of the mouse in script coordinates Vector2D GetMousePosition() const; diff --git a/src/video_out_gl.cpp b/src/video_out_gl.cpp index 75c6eae6ba..080cb733c1 100644 --- a/src/video_out_gl.cpp +++ b/src/video_out_gl.cpp @@ -167,8 +167,6 @@ void VideoOutGL::InitTextures(int width, int height, GLenum format, int bpp, boo // Switch to video coordinates CHECK_ERROR(glMatrixMode(GL_PROJECTION)); - CHECK_ERROR(glLoadIdentity()); - CHECK_ERROR(glPushMatrix()); if (frameFlipped) { CHECK_ERROR(glOrtho(0.0f, frameWidth, 0.0f, frameHeight, -1000.0f, 1000.0f)); } @@ -233,7 +231,6 @@ void VideoOutGL::InitTextures(int width, int height, GLenum format, int bpp, boo } } CHECK_ERROR(glDisable(GL_TEXTURE_2D)); - CHECK_ERROR(glPopMatrix()); glEndList(); @@ -267,9 +264,27 @@ void VideoOutGL::UploadFrameData(VideoFrame const& frame) { CHECK_ERROR(glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)); } -void VideoOutGL::Render(int dx1, int dy1, int dx2, int dy2) { - CHECK_ERROR(glViewport(dx1, dy1, dx2, dy2)); +void VideoOutGL::Render(int client_width, int client_height, int dx1, int dy1, int dx2, int dy2) { + CHECK_ERROR(glMatrixMode(GL_PROJECTION)); + CHECK_ERROR(glLoadIdentity()); + CHECK_ERROR(glPushMatrix()); + + float cw = static_cast(client_width); + float ch = static_cast(client_height); + // Transform (-1, -1) ~ (1, 1) rect to (-1, 1) + 2 * ( (dx1 / client_width, dx2 / client_height) ~ ((dx1 + dx2) / client_width, (dy1 + dy2) / client_height)) )) rect + // x = -1 goes to -1 + 2 * dx1 / cw + // x = +1 goes to -1 + 2 * (dx1 + dx2) / cw + float matrix[16] = { + dx2 / cw, 0, 0, 0, + 0, dy2 / ch, 0, 0, + 0, 0, 1, 0, + -1 + (2 * dx1 + dx2) / cw, -1 + (2 * dy1 + dy2) / ch, 0, 1, + }; + CHECK_ERROR(glMultMatrixf(matrix)); + CHECK_ERROR(glCallList(dl)); + + CHECK_ERROR(glPopMatrix()); CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); CHECK_ERROR(glLoadIdentity()); diff --git a/src/video_out_gl.h b/src/video_out_gl.h index 7d12f5dfd9..add210efc5 100644 --- a/src/video_out_gl.h +++ b/src/video_out_gl.h @@ -69,11 +69,13 @@ class VideoOutGL { void UploadFrameData(VideoFrame const& frame); /// @brief Render a frame + /// @param width Width in physical pixels of client window + /// @param height Height in physical pixels of client window /// @param x Bottom left x coordinate /// @param y Bottom left y coordinate /// @param width Width in pixels of viewport /// @param height Height in pixels of viewport - void Render(int x, int y, int width, int height); + void Render(int client_width, int client_height, int x, int y, int width, int height); VideoOutGL(); ~VideoOutGL(); diff --git a/src/video_provider_manager.cpp b/src/video_provider_manager.cpp index 243be335bf..508d64c1db 100644 --- a/src/video_provider_manager.cpp +++ b/src/video_provider_manager.cpp @@ -16,6 +16,7 @@ #include "video_provider_manager.h" +#include "compat.h" #include "factory_manager.h" #include "include/aegisub/video_provider.h" #include "options.h" @@ -24,6 +25,8 @@ #include #include +#include + std::unique_ptr CreateDummyVideoProvider(agi::fs::path const&, std::string_view, agi::BackgroundRunner *); std::unique_ptr CreateYUV4MPEGVideoProvider(agi::fs::path const&, std::string_view, agi::BackgroundRunner *); std::unique_ptr CreateFFmpegSourceVideoProvider(agi::fs::path const&, std::string_view, agi::BackgroundRunner *); @@ -72,13 +75,13 @@ std::unique_ptr VideoProviderFactory::GetProvider(agi::fs::path c return provider->WantsCaching() ? CreateCacheVideoProvider(std::move(provider)) : std::move(provider); } catch (agi::fs::FileNotFound const&) { - err = "file not found."; + err = from_wx(_("file not found.")); // Keep trying other providers as this one may just not be able to // open a valid path } catch (VideoNotSupported const&) { found = true; - err = "video is not in a supported format."; + err = from_wx(_("video is not in a supported format.")); } catch (VideoOpenError const& ex) { supported = true; @@ -95,7 +98,7 @@ std::unique_ptr VideoProviderFactory::GetProvider(agi::fs::path c // No provider could open the file LOG_E("manager/video/provider") << "Could not open " << filename; - std::string msg = "Could not open " + filename.string() + ":\n" + errors; + std::string msg = from_wx(_("Could not open ")) + filename.string() + ":\n" + errors; if (!found) throw agi::fs::FileNotFound(filename.string()); if (!supported) throw VideoNotSupported(msg); diff --git a/src/visual_tool.cpp b/src/visual_tool.cpp index 9340cf1d4b..5a50cdc362 100644 --- a/src/visual_tool.cpp +++ b/src/visual_tool.cpp @@ -129,11 +129,15 @@ AssDialogue* VisualToolBase::GetActiveDialogueLine() { return nullptr; } +void VisualToolBase::SetCanvasSize(int w, int h) { + canvas_size = Vector2D(w, h); +} + void VisualToolBase::SetDisplayArea(int x, int y, int w, int h) { - if (x == video_pos.X() && y == video_pos.Y() && w == video_res.X() && h == video_res.Y()) return; + if (x == video_pos.X() && y == video_pos.Y() && w == video_size.X() && h == video_size.Y()) return; video_pos = Vector2D(x, y); - video_res = Vector2D(w, h); + video_size = Vector2D(w, h); holding = false; dragging = false; @@ -143,11 +147,11 @@ void VisualToolBase::SetDisplayArea(int x, int y, int w, int h) { } Vector2D VisualToolBase::ToScriptCoords(Vector2D point) const { - return (point - video_pos) * script_res / video_res; + return (point - video_pos) * script_res / video_size; } Vector2D VisualToolBase::FromScriptCoords(Vector2D point) const { - return (point * video_res / script_res) + video_pos; + return (point * video_size / script_res) + video_pos; } template diff --git a/src/visual_tool.h b/src/visual_tool.h index 195fdfea3b..ff35886291 100644 --- a/src/visual_tool.h +++ b/src/visual_tool.h @@ -98,8 +98,9 @@ class VisualToolBase { Vector2D mouse_pos; ///< Last seen mouse position Vector2D drag_start; ///< Mouse position at the beginning of the last drag Vector2D script_res; ///< Script resolution + Vector2D canvas_size; ///< The size of the display area Vector2D video_pos; ///< Top-left corner of the video in the display area - Vector2D video_res; ///< Video resolution + Vector2D video_size; ///< Size of the video on screen. Not necessarily equal to the video resolution const agi::OptionValue *highlight_color_primary_opt; const agi::OptionValue *highlight_color_secondary_opt; @@ -140,6 +141,9 @@ class VisualToolBase { // Stuff called by VideoDisplay virtual void OnMouseEvent(wxMouseEvent &event)=0; virtual void Draw()=0; + // Called by VideoDisplay to set the canvas size in GL coordinates (i.e. logical wx coordinates) + virtual void SetCanvasSize(int w, int h); + // Called by VideoDisplay to set the video's position and size in the canvas in GL coordinates virtual void SetDisplayArea(int x, int y, int w, int h); virtual void SetToolbar(wxToolBar *) { } virtual void SetSubTool(int subtool) { } diff --git a/src/visual_tool_clip.cpp b/src/visual_tool_clip.cpp index 52a1024b26..b0014c8e18 100644 --- a/src/visual_tool_clip.cpp +++ b/src/visual_tool_clip.cpp @@ -33,7 +33,7 @@ VisualToolClip::VisualToolClip(VideoDisplay *parent, agi::Context *context) : VisualTool(parent, context) , cur_1(0, 0) -, cur_2(video_res) +, cur_2(video_size) { ClipCorner *feats[4]; for (auto& feat : feats) { @@ -85,7 +85,7 @@ void VisualToolClip::Draw() { } else { Vector2D v_min = video_pos; - Vector2D v_max = video_pos + video_res; + Vector2D v_max = video_pos + video_size; Vector2D c_min = cur_1.Min(cur_2); Vector2D c_max = cur_1.Max(cur_2); gl.DrawRectangle(v_min, Vector2D(v_max, c_min)); @@ -101,8 +101,8 @@ bool VisualToolClip::InitializeHold() { void VisualToolClip::UpdateHold() { // Limit to video area - cur_1 = video_pos.Max((video_pos + video_res).Min(drag_start)); - cur_2 = video_pos.Max((video_pos + video_res).Min(mouse_pos)); + cur_1 = video_pos.Max((video_pos + video_size).Min(drag_start)); + cur_2 = video_pos.Max((video_pos + video_size).Min(mouse_pos)); SetFeaturePositions(); CommitHold(); diff --git a/src/visual_tool_cross.cpp b/src/visual_tool_cross.cpp index 5d20be3f6f..5113e2e4c9 100644 --- a/src/visual_tool_cross.cpp +++ b/src/visual_tool_cross.cpp @@ -69,14 +69,14 @@ void VisualToolCross::Draw() { gl.SetLineColour(*wxWHITE, 1.0, 1); float lines[] = { 0.f, mouse_pos.Y(), - video_res.X() + video_pos.X() * 2, mouse_pos.Y(), + canvas_size.X(), mouse_pos.Y(), mouse_pos.X(), 0.f, - mouse_pos.X(), video_res.Y() + video_pos.Y() * 2 + mouse_pos.X(), canvas_size.Y(), }; gl.DrawLines(2, lines, 4); gl.ClearInvert(); - std::string mouse_text = Text(ToScriptCoords(shift_down ? video_res - mouse_pos : mouse_pos)); + std::string mouse_text = Text(ToScriptCoords(shift_down ? 2 * video_pos + video_size - mouse_pos : mouse_pos)); int tw, th; gl_text->SetFont("Verdana", 12, true, false); @@ -86,12 +86,12 @@ void VisualToolCross::Draw() { // Place the text in the corner of the cross closest to the center of the video int dx = mouse_pos.X(); int dy = mouse_pos.Y(); - if (dx > video_res.X() / 2) + if (dx > canvas_size.X() / 2) dx -= tw + 4; else dx += 4; - if (dy < video_res.Y() / 2) + if (dy < canvas_size.Y() / 2) dy += 3; else dy -= th + 3; @@ -100,5 +100,5 @@ void VisualToolCross::Draw() { } std::string VisualToolCross::Text(Vector2D v) { - return video_res.X() > script_res.X() ? v.Str(',', 3) : v.DStr(); + return video_size.X() > script_res.X() ? v.Str(',', 3) : v.DStr(); } diff --git a/src/visual_tool_rotatexy.cpp b/src/visual_tool_rotatexy.cpp index acb389acd6..d9fac710d5 100644 --- a/src/visual_tool_rotatexy.cpp +++ b/src/visual_tool_rotatexy.cpp @@ -49,7 +49,9 @@ void VisualToolRotateXY::Draw() { // Transform grid gl.SetOrigin(org->pos); + gl.SetScale(100 * video_size / script_res); gl.SetRotation(angle_x, angle_y, angle_z); + gl.SetScale(fsc); gl.SetShear(fax, fay); // Draw grid @@ -197,4 +199,5 @@ void VisualToolRotateXY::DoRefresh() { GetLineRotation(active_line, angle_x, angle_y, angle_z); GetLineShear(active_line, fax, fay); + GetLineScale(active_line, fsc); } diff --git a/src/visual_tool_rotatexy.h b/src/visual_tool_rotatexy.h index a4c00a3732..86c4803b8a 100644 --- a/src/visual_tool_rotatexy.h +++ b/src/visual_tool_rotatexy.h @@ -29,6 +29,7 @@ class VisualToolRotateXY final : public VisualTool { float fax = 0.f; float fay = 0.f; + Vector2D fsc; float orig_x = 0.f; ///< x rotation at the beginning of the current hold float orig_y = 0.f; ///< y rotation at the beginning of the current hold diff --git a/src/visual_tool_scale.cpp b/src/visual_tool_scale.cpp index 10468d3a97..b2b1a2165f 100644 --- a/src/visual_tool_scale.cpp +++ b/src/visual_tool_scale.cpp @@ -46,7 +46,7 @@ void VisualToolScale::Draw() { // Ensure that the scaling UI is comfortably visible on screen Vector2D base_point = pos .Max(Vector2D(base_len / 2 + guide_size, base_len / 2 + guide_size)) - .Min(video_res - base_len / 2 - guide_size * 3); + .Min(canvas_size - base_len / 2 - guide_size * 3); // Set the origin to the base point and apply the line's rotation gl.SetOrigin(base_point); diff --git a/src/visual_tool_vector_clip.cpp b/src/visual_tool_vector_clip.cpp index c94fa57d53..ad412c56ef 100644 --- a/src/visual_tool_vector_clip.cpp +++ b/src/visual_tool_vector_clip.cpp @@ -103,7 +103,7 @@ void VisualToolVectorClip::Draw() { gl.SetFillColour(*wxBLACK, shaded_alpha); // draw the shade over clipped out areas and line showing the clip - gl.DrawMultiPolygon(points, start, count, video_pos, video_res, !inverse); + gl.DrawMultiPolygon(points, start, count, video_pos, video_size, !inverse); if (mode == VCLIP_DRAG && holding && drag_start && mouse_pos) { // Draw drag-select box diff --git a/subprojects/csri/subhelp/logging.c b/subprojects/csri/subhelp/logging.c index 08b9960e19..a7c611b4ff 100644 --- a/subprojects/csri/subhelp/logging.c +++ b/subprojects/csri/subhelp/logging.c @@ -79,15 +79,17 @@ void subhelp_vlog(enum csri_logging_severity severity, buffer = (char *)malloc(256); while (buffer) { n = vsnprintf(buffer, size, msg, args); + if (n < 0) + break; // Error if (n >= 0 && (unsigned)n < size) - break; - size = n > 0 ? (size_t)n + 1 : size * 2; + break; // Done + size = (size_t)n + 1; char* old_buffer = buffer; buffer = (char *)realloc(old_buffer, size); if (!buffer) free(old_buffer); } - final = buffer ? buffer : ""; + final = buffer ? (n < 0 ? "" : buffer) : ""; subhelp_slog(severity, final); if (buffer) free(buffer); diff --git a/subprojects/curl.wrap b/subprojects/curl.wrap index f7e384b85c..01f1d3ee09 100644 --- a/subprojects/curl.wrap +++ b/subprojects/curl.wrap @@ -1,13 +1,13 @@ [wrap-file] -directory = curl-8.10.1 -source_url = https://github.com/curl/curl/releases/download/curl-8_10_1/curl-8.10.1.tar.xz -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/curl_8.10.1-1/curl-8.10.1.tar.xz -source_filename = curl-8.10.1.tar.xz -source_hash = 73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee -patch_filename = curl_8.10.1-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/curl_8.10.1-1/get_patch -patch_hash = 707c28f35fc9b0e8d68c0c2800712007612f922a31da9637ce706a2159f3ddd8 -wrapdb_version = 8.10.1-1 +directory = curl-8.12.1 +source_url = https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/curl_8.12.1-1/curl-8.12.1.tar.xz +source_filename = curl-8.12.1.tar.xz +source_hash = 0341f1ed97a26c811abaebd37d62b833956792b7607ea3f15d001613c76de202 +patch_filename = curl_8.12.1-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/curl_8.12.1-1/get_patch +patch_hash = e7e5c517773997d7801046ed95a500a7ad16fc42c5f47fb9cc7377d796ee750b +wrapdb_version = 8.12.1-1 [provide] dependency_names = libcurl diff --git a/subprojects/expat.wrap b/subprojects/expat.wrap index ac611ad530..d16ba7aba0 100644 --- a/subprojects/expat.wrap +++ b/subprojects/expat.wrap @@ -1,13 +1,13 @@ [wrap-file] -directory = expat-2.6.3 -source_url = https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-2.6.3.tar.xz -source_filename = expat-2.6.3.tar.bz2 -source_hash = 274db254a6979bde5aad404763a704956940e465843f2a9bd9ed7af22e2c0efc -patch_filename = expat_2.6.3-2_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.6.3-2/get_patch -patch_hash = 0725caa4f23288ebe32e5566e3aa4fb5e6daf3c9fc179956cc144b430ab11bc5 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/expat_2.6.3-2/expat-2.6.3.tar.bz2 -wrapdb_version = 2.6.3-2 +directory = expat-2.7.3 +source_url = https://github.com/libexpat/libexpat/releases/download/R_2_7_3/expat-2.7.3.tar.xz +source_filename = expat-2.7.3.tar.bz2 +source_hash = 71df8f40706a7bb0a80a5367079ea75d91da4f8c65c58ec59bcdfbf7decdab9f +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/expat_2.7.3-1/expat-2.7.3.tar.bz2 +patch_filename = expat_2.7.3-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.7.3-1/get_patch +patch_hash = e870eb4b2e3c142ce1d18ed24309aa40e07c6c911a4625fa1c6fc493ba18153a +wrapdb_version = 2.7.3-1 [provide] expat = expat_dep diff --git a/subprojects/gtest.wrap b/subprojects/gtest.wrap index 91afad57e7..9902a4f7ec 100644 --- a/subprojects/gtest.wrap +++ b/subprojects/gtest.wrap @@ -1,13 +1,13 @@ [wrap-file] -directory = googletest-1.15.0 -source_url = https://github.com/google/googletest/archive/refs/tags/v1.15.0.tar.gz -source_filename = gtest-1.15.0.tar.gz -source_hash = 7315acb6bf10e99f332c8a43f00d5fbb1ee6ca48c52f6b936991b216c586aaad -patch_filename = gtest_1.15.0-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.15.0-1/get_patch -patch_hash = 5f8e484c48fdc1029c7fd08807bd2615f8c9d16f90df6d81984f4f292752c925 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/gtest_1.15.0-1/gtest-1.15.0.tar.gz -wrapdb_version = 1.15.0-1 +directory = googletest-1.17.0 +source_url = https://github.com/google/googletest/archive/refs/tags/v1.17.0.tar.gz +source_filename = googletest-1.17.0.tar.gz +source_hash = 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c +patch_filename = gtest_1.17.0-4_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.17.0-4/get_patch +patch_hash = 3abf7662d09db706453a5b064a1e914678c74b9d9b0b19382747ca561d0d8750 +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/gtest_1.17.0-4/googletest-1.17.0.tar.gz +wrapdb_version = 1.17.0-4 [provide] gtest = gtest_dep diff --git a/subprojects/hunspell.wrap b/subprojects/hunspell.wrap index ba26099543..0af166e7c6 100644 --- a/subprojects/hunspell.wrap +++ b/subprojects/hunspell.wrap @@ -1,8 +1,8 @@ [wrap-file] -directory = hunspell-1.7.0 -source_url = https://github.com/hunspell/hunspell/files/2573619/hunspell-1.7.0.tar.gz -source_filename = hunspell-1.7.0.tar.gz -source_hash = 57be4e03ae9dd62c3471f667a0d81a14513e314d4d92081292b90435944ff951 +directory = hunspell-1.7.2 +source_url = https://github.com/hunspell/hunspell/releases/download/v1.7.2/hunspell-1.7.2.tar.gz +source_filename = hunspell-1.7.2.tar.gz +source_hash = 11ddfa39afe28c28539fe65fc4f1592d410c1e9b6dd7d8a91ca25d85e9ec65b8 patch_directory = hunspell [provide] diff --git a/subprojects/libpng.wrap b/subprojects/libpng.wrap index 06044a9534..09f2b97887 100644 --- a/subprojects/libpng.wrap +++ b/subprojects/libpng.wrap @@ -1,13 +1,14 @@ [wrap-file] -directory = libpng-1.6.44 -source_url = https://github.com/glennrp/libpng/archive/v1.6.44.tar.gz -source_filename = libpng-1.6.44.tar.gz -source_hash = 0ef5b633d0c65f780c4fced27ff832998e71478c13b45dfb6e94f23a82f64f7c -patch_filename = libpng_1.6.44-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/libpng_1.6.44-1/get_patch -patch_hash = 394b07614c45fbd1beac8b660386216a490fe12f841a1a445799b676c9c892fb -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libpng_1.6.44-1/libpng-1.6.44.tar.gz -wrapdb_version = 1.6.44-1 +directory = libpng-1.6.52 +source_url = https://github.com/pnggroup/libpng/archive/v1.6.52.tar.gz +source_filename = libpng-1.6.52.tar.gz +source_hash = 07098f37e7b7570fc06d2ccbaaf5a47e9344fc36e773e312e334a083689a6212 +source_fallback_url = https://wrapdb.mesonbuild.com/v2/libpng_1.6.52-1/get_source/libpng-1.6.52.tar.gz +patch_filename = libpng_1.6.52-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/libpng_1.6.52-1/get_patch +patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libpng_1.6.52-1/libpng_1.6.52-1_patch.zip +patch_hash = f25b75488a22ec9ced17d86ac30370e0f6a41d968d22aa1a5952df99fa9b0219 +wrapdb_version = 1.6.52-1 [provide] -libpng = libpng_dep +dependency_names = libpng diff --git a/subprojects/nasm.wrap b/subprojects/nasm.wrap index dfb3c66e00..a431eb7c94 100644 --- a/subprojects/nasm.wrap +++ b/subprojects/nasm.wrap @@ -1,7 +1,7 @@ [wrap-file] -directory = nasm-2.15.05 -source_url = https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip -source_fallback_url = https://web.archive.org/web/20210420023625if_/https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip -source_filename = nasm-2.15.05-win64.zip -source_hash = f5c93c146f52b4f1664fa3ce6579f961a910e869ab0dae431bd871bdd2584ef2 +directory = nasm-3.01 +source_url = https://www.nasm.us/pub/nasm/releasebuilds/3.01/win64/nasm-3.01-win64.zip +source_fallback_url = https://web.archive.org/web/20251114141643if_/https://www.nasm.us/pub/nasm/releasebuilds/3.01/win64/nasm-3.01-win64.zip +source_filename = nasm-3.01-win64.zip +source_hash = e0ba5157007abc7b1a65118a96657a961ddf55f7e3f632ee035366dfce039ca4 patch_directory = nasm diff --git a/subprojects/packagefiles/ffms2/meson.build b/subprojects/packagefiles/ffms2/meson.build index 8c6a078516..bfcee7c7a1 100644 --- a/subprojects/packagefiles/ffms2/meson.build +++ b/subprojects/packagefiles/ffms2/meson.build @@ -1,4 +1,4 @@ -project('ffms2', 'cpp', version: '2.40.0') +project('ffms2', 'cpp', version: '5.0') deps = [] diff --git a/subprojects/packagefiles/hunspell/meson.build b/subprojects/packagefiles/hunspell/meson.build index 5df100963e..76f2d1fd0f 100644 --- a/subprojects/packagefiles/hunspell/meson.build +++ b/subprojects/packagefiles/hunspell/meson.build @@ -1,4 +1,4 @@ -project('Hunspell', 'cpp', version: '1.7.0', meson_version: '>=0.57.0') +project('Hunspell', 'cpp', version: '1.7.2', meson_version: '>=0.57.0') subdir('src/hunspell') diff --git a/subprojects/packagefiles/nasm/meson.build b/subprojects/packagefiles/nasm/meson.build index 0f2b11986b..dcc1d2a5d3 100644 --- a/subprojects/packagefiles/nasm/meson.build +++ b/subprojects/packagefiles/nasm/meson.build @@ -1,3 +1,3 @@ -project('nasm', version: '2.15.05') +project('nasm', version: '3.01') nasm = find_program('nasm.exe', dirs: meson.current_source_dir()) diff --git a/subprojects/tronkko-dirent.wrap b/subprojects/tronkko-dirent.wrap index 17abc0c199..298c6c87c3 100644 --- a/subprojects/tronkko-dirent.wrap +++ b/subprojects/tronkko-dirent.wrap @@ -5,6 +5,6 @@ source_url = https://github.com/tronkko/dirent/archive/1.23.2.tar.gz source_filename = dirent-1.23.2.tar.gz source_hash = f72d39e3c39610b6901e391b140aa69b51e0eb99216939ed5e547b5dad03afb1 -patch_url = https://wrapdb.mesonbuild.com/v1/projects/tronkko-dirent/1.23.2/1/get_zip +patch_url = https://wrapdb.mesonbuild.com/v2/tronkko-dirent_1.23.2-1/get_patch patch_filename = tronkko-dirent-1.23.2-1-wrap.zip patch_hash = 036957f6dee31d0b92f14cf3676d13baf44e9a1be950c248468440ffc40c78a4 diff --git a/subprojects/wxWidgets.wrap b/subprojects/wxWidgets.wrap index e6947e6a92..14a8df17d6 100644 --- a/subprojects/wxWidgets.wrap +++ b/subprojects/wxWidgets.wrap @@ -1,5 +1,5 @@ [wrap-git] directory = wxWidgets url = https://github.com/wxWidgets/wxWidgets.git -revision = v3.2.2 +revision = 3.2 clone-recursive = true diff --git a/tools/osx-bundle.sh b/tools/osx-bundle.sh index 875bdf9009..cea6cf9248 100755 --- a/tools/osx-bundle.sh +++ b/tools/osx-bundle.sh @@ -105,5 +105,16 @@ echo echo "---- Fixing libraries ----" sudo python3 "${SRC_DIR}/tools/osx-fix-libs.py" "${PKG_DIR}/Contents/MacOS/aegisub" || exit $? +echo +echo "---- Signing ----" +# Even if the binaries were already ad-hoc signed during compilation, +# they need to be resigned after bundling and rewriting dylib paths. +if codesign -d "${PKG_DIR}/Contents/MacOS/aegisub"; then + for fname in "${PKG_DIR}/Contents/MacOS/"*; do + codesign -s ${AEGISUB_BUNDLE_SIGNATURE:--} -vf "${fname}" + done + codesign -s ${AEGISUB_BUNDLE_SIGNATURE:--} -vf "${PKG_DIR}/" +fi + echo echo "Done creating \"${PKG_DIR}\"" diff --git a/tools/version.sh b/tools/version.sh index c9dd474b30..bc07c60c37 100755 --- a/tools/version.sh +++ b/tools/version.sh @@ -42,6 +42,10 @@ osx_bundle_sed_path="${builddir}/osx-bundle.sed" last_svn_revision=6962 last_svn_hash="16cd907fe7482cb54a7374cd28b8501f138116be" +git() { + command git -C "$srcdir" "$@" +} + # Check if the commit exists first, it doesn't exist in shallow clones. if [ "$(git cat-file -t $last_svn_hash 2> /dev/null)" = "commit" ]; then git_revision=$(expr $last_svn_revision + $(git rev-list --count $last_svn_hash..HEAD))