diff --git a/docs/credits.md b/docs/credits.md index 06fdb4d7..660d28fd 100644 --- a/docs/credits.md +++ b/docs/credits.md @@ -46,4 +46,6 @@ | retrie | Efficient Trie-based regex unions for blacklist/whitelist filtering and one-pass mapping-based string replacing | MIT License | | lxml | Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. | BSD License (BSD-3-Clause) | | textual | Modern Text User Interface framework | MIT License | -| flet | Flet for Python - easily build interactive multi-platform apps in Python | Apache Software License | \ No newline at end of file +| textual-fspicker | A simple Textual filesystem picker dialog library. | MIT License | +| flet | Flet for Python - easily build interactive multi-platform apps in Python | Apache Software License | +| repro-zipfile | A tiny, zero-dependency replacement for Python's zipfile.ZipFile for creating reproducible/deterministic ZIP archives. | MIT License | \ No newline at end of file diff --git a/docs/project_formats.md b/docs/project_formats.md index b3357d40..31451116 100644 --- a/docs/project_formats.md +++ b/docs/project_formats.md @@ -1,8 +1,8 @@ | 格式后缀 | 适用引擎/软件 | 基本类型 | 类型说明 | 备注 | 开发状态 | | ------------ | ------------------------------ | -------- | ------------------------------- | ------------------------------- | ---- | | `acep` | ACE Studio | 标准序列化格式 | 基于json;内容使用了zstandard压缩 | 公测期间曾更换过加密方法,最终于1.7.8版本移除 | 活跃开发 | -| `ais` | AISingers Web | 混合类型 | 将json头和自定义文本拼接而成 | | 尚在维护 | -| `aisp` | AISingers Studio | 混合类型 | 基于json;为两段json拼接而成 | | 活跃开发 | +| `ais` | AISingers Web | 混合类型 | 将json头和自定义文本拼接而成 | | 暂停维护 | +| `aisp` | AISingers Studio | 混合类型 | 基于json;为两段json拼接而成 | | 尚在维护 | | `ccs/ccst` | CeVIO Creative Studio | 标准序列化格式 | 基于xml | | 活跃开发 | | `ds` | DiffSinger | 标准序列化格式 | 基于json | 为临时解决方案 | 活跃开发 | | `dsc` | 大市唱 | 标准序列化格式 | 基于json | | 活跃开发 | @@ -35,6 +35,6 @@ | `vsq` | Vocaloid 2 | 自定义二进制格式 | 基于MIDI和INI | | 停止开发 | | `vsqx` | Vocaloid 3/4 | 标准序列化格式 | 基于xml | | 尚在维护 | | `vvproj` | VOICEVOX | 标准序列化格式 | 基于json | | 活跃开发 | -| `vxf` | VOCALOID β-STUDIO | 自定义二进制格式 | 基于MIDI2.0切片(SMF2CLIP)格式 | | 活跃开发 | +| `vxf` | VOCALOID β-STUDIO | 自定义二进制格式 | 基于MIDI2.0切片(SMF2CLIP)格式 | | 活跃开发 | | `xvsq` | Cadencii | 标准序列化格式 | 基于xml | | 停止开发 | | `y77` | 元七七编辑器 | 标准序列化格式 | 基于json | | 停止开发 | diff --git a/libresvip/__init__.py b/libresvip/__init__.py index 93b008ce..1d19dc29 100644 --- a/libresvip/__init__.py +++ b/libresvip/__init__.py @@ -1,4 +1,4 @@ import os -__version__ = "1.7.0" +__version__ = "1.8.0" os.environ.setdefault("LOGURU_AUTOINIT", "false") diff --git a/libresvip/plugins/ass/ass.po b/libresvip/plugins/ass/ass.po index 4c97227f..66344471 100644 --- a/libresvip/plugins/ass/ass.po +++ b/libresvip/plugins/ass/ass.po @@ -42,6 +42,14 @@ msgstr "" msgid "New line by" msgstr "" +msgid "Ignore slur notes" +msgstr "" + +msgid "" +"Ignore '-' lyrics that are used to indicate slur notes in singing " +"synthesizers." +msgstr "" + msgid "Text encoding" msgstr "" diff --git a/libresvip/plugins/lrc/lrc.po b/libresvip/plugins/lrc/lrc.po index 5ffbf218..1de09f32 100644 --- a/libresvip/plugins/lrc/lrc.po +++ b/libresvip/plugins/lrc/lrc.po @@ -75,6 +75,14 @@ msgstr "" msgid "New line by" msgstr "" +msgid "Ignore slur notes" +msgstr "" + +msgid "" +"Ignore '-' lyrics that are used to indicate slur notes in singing " +"synthesizers." +msgstr "" + msgid "Write timeline" msgstr "" diff --git a/libresvip/plugins/srt/srt.po b/libresvip/plugins/srt/srt.po index f9d71b09..4aa1d03c 100644 --- a/libresvip/plugins/srt/srt.po +++ b/libresvip/plugins/srt/srt.po @@ -30,6 +30,14 @@ msgstr "" msgid "New line by" msgstr "" +msgid "Ignore slur notes" +msgstr "" + +msgid "" +"Ignore '-' lyrics that are used to indicate slur notes in singing " +"synthesizers." +msgstr "" + msgid "Text encoding" msgstr "" diff --git a/libresvip/plugins/tsmsln/tsmsln.po b/libresvip/plugins/tsmsln/tsmsln.po new file mode 100644 index 00000000..5d3ac536 --- /dev/null +++ b/libresvip/plugins/tsmsln/tsmsln.po @@ -0,0 +1,18 @@ +msgid "TSMSln" +msgstr "" + +msgid "Techno-Speech Mobile Solution file" +msgstr "" + +msgid "Conversion plugin for VoiSona Mobile project file" +msgstr "" + +msgid "SoulMelody" +msgstr "" + +msgid "Unsupported lyric: " +msgstr "" + +msgid "Pitch value is out of bounds" +msgstr "" + diff --git a/libresvip/res/libresvip.po b/libresvip/res/libresvip.po index fd170514..32f333af 100644 --- a/libresvip/res/libresvip.po +++ b/libresvip/res/libresvip.po @@ -43,13 +43,13 @@ msgid "Name" msgstr "" #: ../libresvip/cli/commands/plugin.py:65 -#: ../libresvip/gui/models/table_models.py:27 ../libresvip/mobile/app.py:782 -#: ../libresvip/web/pages.py:283 +#: ../libresvip/gui/models/table_models.py:27 ../libresvip/mobile/app.py:781 +#: ../libresvip/web/pages.py:282 msgid "Version" msgstr "" #: ../libresvip/cli/commands/plugin.py:66 -#: ../libresvip/gui/models/table_models.py:26 ../libresvip/web/pages.py:292 +#: ../libresvip/gui/models/table_models.py:26 ../libresvip/web/pages.py:291 msgid "Author" msgstr "" @@ -65,13 +65,13 @@ msgstr "" msgid "Plugin: " msgstr "" -#: ../libresvip/cli/commands/plugin.py:90 ../libresvip/mobile/app.py:1146 -#: ../libresvip/tui/app.py:150 ../libresvip/tui/app.py:937 -#: ../libresvip/web/pages.py:1119 +#: ../libresvip/cli/commands/plugin.py:90 ../libresvip/mobile/app.py:1145 +#: ../libresvip/tui/app.py:99 ../libresvip/tui/app.py:868 +#: ../libresvip/web/pages.py:1118 msgid "Version: " msgstr "" -#: ../libresvip/cli/commands/plugin.py:91 ../libresvip/tui/app.py:151 +#: ../libresvip/cli/commands/plugin.py:91 ../libresvip/tui/app.py:100 msgid "Author: " msgstr "" @@ -158,32 +158,32 @@ msgstr "" msgid "Applicable File Format" msgstr "" -#: ../libresvip/gui/models/table_models.py:105 ../libresvip/web/pages.py:1199 +#: ../libresvip/gui/models/table_models.py:105 ../libresvip/web/pages.py:1198 msgid "Mode" msgstr "" -#: ../libresvip/gui/models/table_models.py:106 ../libresvip/web/pages.py:1204 +#: ../libresvip/gui/models/table_models.py:106 ../libresvip/web/pages.py:1203 msgid "Prefix" msgstr "" -#: ../libresvip/gui/models/table_models.py:107 ../libresvip/web/pages.py:1209 +#: ../libresvip/gui/models/table_models.py:107 ../libresvip/web/pages.py:1208 msgid "Pattern" msgstr "" -#: ../libresvip/gui/models/table_models.py:108 ../libresvip/web/pages.py:1214 +#: ../libresvip/gui/models/table_models.py:108 ../libresvip/web/pages.py:1213 msgid "Suffix" msgstr "" -#: ../libresvip/gui/models/table_models.py:109 ../libresvip/web/pages.py:1219 +#: ../libresvip/gui/models/table_models.py:109 ../libresvip/web/pages.py:1218 msgid "Replacement" msgstr "" -#: ../libresvip/gui/models/table_models.py:110 ../libresvip/web/pages.py:1269 +#: ../libresvip/gui/models/table_models.py:110 ../libresvip/web/pages.py:1268 msgid "Case sensitive" msgstr "" -#: ../libresvip/gui/models/table_models.py:111 ../libresvip/mobile/app.py:338 -#: ../libresvip/mobile/app.py:411 ../libresvip/web/pages.py:1229 +#: ../libresvip/gui/models/table_models.py:111 ../libresvip/mobile/app.py:337 +#: ../libresvip/mobile/app.py:410 ../libresvip/web/pages.py:1228 msgid "Actions" msgstr "" @@ -240,246 +240,246 @@ msgstr "" msgid "Failed to check for updates. Please try again later." msgstr "" -#: ../libresvip/mobile/app.py:241 ../libresvip/tui/app.py:175 -#: ../libresvip/web/pages.py:685 ../libresvip/web/pages.py:713 +#: ../libresvip/mobile/app.py:240 ../libresvip/tui/app.py:124 +#: ../libresvip/web/pages.py:684 ../libresvip/web/pages.py:712 msgid "Copied" msgstr "" -#: ../libresvip/mobile/app.py:243 ../libresvip/mobile/app.py:425 -#: ../libresvip/mobile/app.py:469 +#: ../libresvip/mobile/app.py:242 ../libresvip/mobile/app.py:424 +#: ../libresvip/mobile/app.py:468 msgid "OK" msgstr "" -#: ../libresvip/mobile/app.py:251 +#: ../libresvip/mobile/app.py:250 msgid "Task log" msgstr "" -#: ../libresvip/mobile/app.py:255 ../libresvip/mobile/app.py:766 -#: ../libresvip/mobile/app.py:1061 ../libresvip/mobile/app.py:1128 +#: ../libresvip/mobile/app.py:254 ../libresvip/mobile/app.py:765 +#: ../libresvip/mobile/app.py:1060 ../libresvip/mobile/app.py:1127 msgid "Back" msgstr "" -#: ../libresvip/mobile/app.py:265 ../libresvip/tui/app.py:184 -#: ../libresvip/web/pages.py:683 ../libresvip/web/pages.py:711 +#: ../libresvip/mobile/app.py:264 ../libresvip/tui/app.py:133 +#: ../libresvip/web/pages.py:682 ../libresvip/web/pages.py:710 msgid "Copy to clipboard" msgstr "" -#: ../libresvip/mobile/app.py:324 ../libresvip/mobile/app.py:397 -#: ../libresvip/tui/app.py:441 +#: ../libresvip/mobile/app.py:323 ../libresvip/mobile/app.py:396 +#: ../libresvip/tui/app.py:368 msgid "View Log" msgstr "" -#: ../libresvip/mobile/app.py:329 ../libresvip/mobile/app.py:402 -#: ../libresvip/mobile/app.py:466 +#: ../libresvip/mobile/app.py:328 ../libresvip/mobile/app.py:401 +#: ../libresvip/mobile/app.py:465 msgid "Rename" msgstr "" -#: ../libresvip/mobile/app.py:334 ../libresvip/mobile/app.py:407 -#: ../libresvip/web/pages.py:727 +#: ../libresvip/mobile/app.py:333 ../libresvip/mobile/app.py:406 +#: ../libresvip/web/pages.py:726 msgid "Remove" msgstr "" -#: ../libresvip/mobile/app.py:430 +#: ../libresvip/mobile/app.py:429 msgid "Permission granted, you can now select files from your device." msgstr "" -#: ../libresvip/mobile/app.py:438 +#: ../libresvip/mobile/app.py:437 msgid "Permission denied, please grant the permission to manage external storage." msgstr "" -#: ../libresvip/mobile/app.py:449 +#: ../libresvip/mobile/app.py:448 msgid "Permission already granted, you can now select files from your device." msgstr "" -#: ../libresvip/mobile/app.py:664 ../libresvip/tui/app.py:255 -#: ../libresvip/web/pages.py:1567 +#: ../libresvip/mobile/app.py:663 ../libresvip/tui/app.py:182 +#: ../libresvip/web/pages.py:1566 msgid "Select File Formats" msgstr "" -#: ../libresvip/mobile/app.py:667 ../libresvip/tui/app.py:804 +#: ../libresvip/mobile/app.py:666 ../libresvip/tui/app.py:735 msgid "Conversion mode & Task list" msgstr "" -#: ../libresvip/mobile/app.py:670 ../libresvip/web/pages.py:2096 +#: ../libresvip/mobile/app.py:669 ../libresvip/web/pages.py:2095 msgid "Advanced Options" msgstr "" -#: ../libresvip/mobile/app.py:676 ../libresvip/tui/app.py:908 -#: ../libresvip/web/pages.py:1738 +#: ../libresvip/mobile/app.py:675 ../libresvip/tui/app.py:839 +#: ../libresvip/web/pages.py:1737 msgid "Switch Theme" msgstr "" -#: ../libresvip/mobile/app.py:679 ../libresvip/web/pages.py:1761 +#: ../libresvip/mobile/app.py:678 ../libresvip/web/pages.py:1760 msgid "System" msgstr "" -#: ../libresvip/mobile/app.py:684 ../libresvip/tui/app.py:911 -#: ../libresvip/web/pages.py:1749 +#: ../libresvip/mobile/app.py:683 ../libresvip/tui/app.py:842 +#: ../libresvip/web/pages.py:1748 msgid "Light" msgstr "" -#: ../libresvip/mobile/app.py:689 ../libresvip/tui/app.py:912 -#: ../libresvip/web/pages.py:1755 +#: ../libresvip/mobile/app.py:688 ../libresvip/tui/app.py:843 +#: ../libresvip/web/pages.py:1754 msgid "Dark" msgstr "" -#: ../libresvip/mobile/app.py:697 ../libresvip/tui/app.py:894 -#: ../libresvip/web/pages.py:1176 +#: ../libresvip/mobile/app.py:696 ../libresvip/tui/app.py:825 +#: ../libresvip/web/pages.py:1175 msgid "Switch Language" msgstr "" -#: ../libresvip/mobile/app.py:717 ../libresvip/web/pages.py:1621 +#: ../libresvip/mobile/app.py:716 ../libresvip/web/pages.py:1620 msgid "Restore" msgstr "" -#: ../libresvip/mobile/app.py:720 ../libresvip/mobile/app.py:733 -#: ../libresvip/web/pages.py:1620 +#: ../libresvip/mobile/app.py:719 ../libresvip/mobile/app.py:732 +#: ../libresvip/web/pages.py:1619 msgid "Maximize" msgstr "" -#: ../libresvip/mobile/app.py:727 ../libresvip/web/pages.py:1637 +#: ../libresvip/mobile/app.py:726 ../libresvip/web/pages.py:1636 msgid "Minimize" msgstr "" -#: ../libresvip/mobile/app.py:739 ../libresvip/tui/app.py:156 -#: ../libresvip/tui/app.py:185 ../libresvip/web/pages.py:687 -#: ../libresvip/web/pages.py:715 ../libresvip/web/pages.py:1147 -#: ../libresvip/web/pages.py:1564 ../libresvip/web/pages.py:1647 -#: ../libresvip/web/pages.py:1875 ../libresvip/web/pages.py:1928 +#: ../libresvip/mobile/app.py:738 ../libresvip/tui/app.py:105 +#: ../libresvip/tui/app.py:134 ../libresvip/web/pages.py:686 +#: ../libresvip/web/pages.py:714 ../libresvip/web/pages.py:1146 +#: ../libresvip/web/pages.py:1563 ../libresvip/web/pages.py:1646 +#: ../libresvip/web/pages.py:1874 ../libresvip/web/pages.py:1927 msgid "Close" msgstr "" -#: ../libresvip/mobile/app.py:815 ../libresvip/tui/app.py:152 -#: ../libresvip/tui/app.py:943 ../libresvip/web/pages.py:307 +#: ../libresvip/mobile/app.py:814 ../libresvip/tui/app.py:101 +#: ../libresvip/tui/app.py:874 ../libresvip/web/pages.py:306 msgid "Introduction" msgstr "" -#: ../libresvip/mobile/app.py:838 ../libresvip/tui/app.py:257 -#: ../libresvip/web/pages.py:1702 ../libresvip/web/pages.py:1860 +#: ../libresvip/mobile/app.py:837 ../libresvip/tui/app.py:184 +#: ../libresvip/web/pages.py:1701 ../libresvip/web/pages.py:1859 msgid "Import format" msgstr "" -#: ../libresvip/mobile/app.py:853 ../libresvip/mobile/app.py:882 -#: ../libresvip/tui/app.py:275 ../libresvip/tui/app.py:299 -#: ../libresvip/web/pages.py:1883 ../libresvip/web/pages.py:1936 +#: ../libresvip/mobile/app.py:852 ../libresvip/mobile/app.py:881 +#: ../libresvip/tui/app.py:202 ../libresvip/tui/app.py:226 +#: ../libresvip/web/pages.py:1882 ../libresvip/web/pages.py:1935 msgid "View Detail Information" msgstr "" -#: ../libresvip/mobile/app.py:860 ../libresvip/tui/app.py:277 -#: ../libresvip/web/pages.py:1699 ../libresvip/web/pages.py:1900 +#: ../libresvip/mobile/app.py:859 ../libresvip/tui/app.py:204 +#: ../libresvip/web/pages.py:1698 ../libresvip/web/pages.py:1899 msgid "Swap Input and Output" msgstr "" -#: ../libresvip/mobile/app.py:867 ../libresvip/tui/app.py:281 -#: ../libresvip/web/pages.py:1722 ../libresvip/web/pages.py:1908 +#: ../libresvip/mobile/app.py:866 ../libresvip/tui/app.py:208 +#: ../libresvip/web/pages.py:1721 ../libresvip/web/pages.py:1907 msgid "Export format" msgstr "" -#: ../libresvip/mobile/app.py:897 +#: ../libresvip/mobile/app.py:896 msgid "Conversion mode" msgstr "" -#: ../libresvip/mobile/app.py:899 ../libresvip/tui/app.py:806 +#: ../libresvip/mobile/app.py:898 ../libresvip/tui/app.py:737 msgid "Direct" msgstr "" -#: ../libresvip/mobile/app.py:900 ../libresvip/tui/app.py:807 +#: ../libresvip/mobile/app.py:899 ../libresvip/tui/app.py:738 msgid "Split" msgstr "" -#: ../libresvip/mobile/app.py:901 ../libresvip/tui/app.py:808 +#: ../libresvip/mobile/app.py:900 ../libresvip/tui/app.py:739 msgid "Merge" msgstr "" -#: ../libresvip/mobile/app.py:922 ../libresvip/tui/app.py:817 -#: ../libresvip/web/pages.py:326 +#: ../libresvip/mobile/app.py:921 ../libresvip/tui/app.py:748 +#: ../libresvip/web/pages.py:325 msgid "Input Options" msgstr "" -#: ../libresvip/mobile/app.py:967 ../libresvip/tui/app.py:833 -#: ../libresvip/web/pages.py:335 +#: ../libresvip/mobile/app.py:966 ../libresvip/tui/app.py:764 +#: ../libresvip/web/pages.py:334 msgid "Output Options" msgstr "" -#: ../libresvip/mobile/app.py:1002 ../libresvip/tui/app.py:800 +#: ../libresvip/mobile/app.py:1001 ../libresvip/tui/app.py:731 msgid "Converter" msgstr "" -#: ../libresvip/mobile/app.py:1005 ../libresvip/mobile/app.py:1054 -#: ../libresvip/tui/app.py:851 +#: ../libresvip/mobile/app.py:1004 ../libresvip/mobile/app.py:1053 +#: ../libresvip/tui/app.py:782 msgid "Basic Settings" msgstr "" -#: ../libresvip/mobile/app.py:1009 ../libresvip/mobile/app.py:1121 -#: ../libresvip/tui/app.py:931 ../libresvip/web/pages.py:1116 -#: ../libresvip/web/pages.py:1782 +#: ../libresvip/mobile/app.py:1008 ../libresvip/mobile/app.py:1120 +#: ../libresvip/tui/app.py:862 ../libresvip/web/pages.py:1115 +#: ../libresvip/web/pages.py:1781 msgid "About" msgstr "" -#: ../libresvip/mobile/app.py:1029 ../libresvip/web/pages.py:2020 +#: ../libresvip/mobile/app.py:1028 ../libresvip/web/pages.py:2019 msgid "Continue Adding files" msgstr "" -#: ../libresvip/mobile/app.py:1031 +#: ../libresvip/mobile/app.py:1030 msgid "Select files to convert" msgstr "" -#: ../libresvip/mobile/app.py:1042 ../libresvip/web/pages.py:2087 +#: ../libresvip/mobile/app.py:1041 ../libresvip/web/pages.py:2086 msgid "Start Conversion" msgstr "" -#: ../libresvip/mobile/app.py:1069 ../libresvip/tui/app.py:855 -#: ../libresvip/web/pages.py:1185 ../libresvip/web/pages.py:1884 +#: ../libresvip/mobile/app.py:1068 ../libresvip/tui/app.py:786 +#: ../libresvip/web/pages.py:1184 ../libresvip/web/pages.py:1883 msgid "Auto detect import format" msgstr "" -#: ../libresvip/mobile/app.py:1075 ../libresvip/tui/app.py:862 -#: ../libresvip/web/pages.py:1190 ../libresvip/web/pages.py:1891 +#: ../libresvip/mobile/app.py:1074 ../libresvip/tui/app.py:793 +#: ../libresvip/web/pages.py:1189 ../libresvip/web/pages.py:1890 msgid "Reset list when import format changed" msgstr "" -#: ../libresvip/mobile/app.py:1080 ../libresvip/tui/app.py:844 +#: ../libresvip/mobile/app.py:1079 ../libresvip/tui/app.py:775 msgid "Max track count" msgstr "" -#: ../libresvip/mobile/app.py:1092 ../libresvip/tui/app.py:880 +#: ../libresvip/mobile/app.py:1091 ../libresvip/tui/app.py:811 msgid "Output Folder" msgstr "" -#: ../libresvip/mobile/app.py:1098 ../libresvip/mobile/app.py:1101 -#: ../libresvip/tui/app.py:888 +#: ../libresvip/mobile/app.py:1097 ../libresvip/mobile/app.py:1100 +#: ../libresvip/tui/app.py:819 msgid "Change Output Directory" msgstr "" -#: ../libresvip/mobile/app.py:1105 +#: ../libresvip/mobile/app.py:1104 msgid "Request permission to access files" msgstr "" -#: ../libresvip/mobile/app.py:1151 ../libresvip/tui/app.py:939 -#: ../libresvip/web/pages.py:1122 +#: ../libresvip/mobile/app.py:1150 ../libresvip/tui/app.py:870 +#: ../libresvip/web/pages.py:1121 msgid "Author: SoulMelody" msgstr "" -#: ../libresvip/mobile/app.py:1154 ../libresvip/tui/app.py:941 -#: ../libresvip/web/pages.py:1126 +#: ../libresvip/mobile/app.py:1153 ../libresvip/tui/app.py:872 +#: ../libresvip/web/pages.py:1125 msgid "Author's Profile" msgstr "" -#: ../libresvip/mobile/app.py:1160 ../libresvip/tui/app.py:935 -#: ../libresvip/web/pages.py:1132 +#: ../libresvip/mobile/app.py:1159 ../libresvip/tui/app.py:866 +#: ../libresvip/web/pages.py:1131 msgid "Repo URL" msgstr "" -#: ../libresvip/mobile/app.py:1169 ../libresvip/tui/app.py:945 -#: ../libresvip/web/pages.py:1137 +#: ../libresvip/mobile/app.py:1168 ../libresvip/tui/app.py:876 +#: ../libresvip/web/pages.py:1136 msgid "" "LibreSVIP is an open-sourced, liberal and extensionable framework that " "can convert your singing synthesis projects between different file " "formats." msgstr "" -#: ../libresvip/mobile/app.py:1174 ../libresvip/tui/app.py:946 -#: ../libresvip/web/pages.py:1142 +#: ../libresvip/mobile/app.py:1173 ../libresvip/tui/app.py:877 +#: ../libresvip/web/pages.py:1141 msgid "" "All people should have the right and freedom to choose. That's why we're " "committed to giving you a second chance to keep your creations free from " @@ -1158,63 +1158,67 @@ msgctxt "QPlatformTheme" msgid "N&o to All" msgstr "" -#: ../libresvip/tui/app.py:116 -msgid "Select a drive" +#: ../libresvip/tui/app.py:235 +msgid "Invalid color format" msgstr "" -#: ../libresvip/tui/app.py:308 -msgid "Invalid color format" +#: ../libresvip/tui/app.py:489 +msgid "Open" msgstr "" -#: ../libresvip/tui/app.py:816 ../libresvip/web/pages.py:1568 +#: ../libresvip/tui/app.py:701 +msgid "Select directory" +msgstr "" + +#: ../libresvip/tui/app.py:747 ../libresvip/web/pages.py:1567 msgid "Advanced Settings" msgstr "" -#: ../libresvip/tui/app.py:827 +#: ../libresvip/tui/app.py:758 msgid "Enable" msgstr "" -#: ../libresvip/tui/app.py:836 +#: ../libresvip/tui/app.py:767 msgid "Add task" msgstr "" -#: ../libresvip/tui/app.py:838 +#: ../libresvip/tui/app.py:769 msgid "Start conversion" msgstr "" -#: ../libresvip/tui/app.py:840 +#: ../libresvip/tui/app.py:771 msgid "Delete selected task" msgstr "" -#: ../libresvip/tui/app.py:841 +#: ../libresvip/tui/app.py:772 msgid "Clear tasks" msgstr "" -#: ../libresvip/tui/app.py:842 +#: ../libresvip/tui/app.py:773 msgid "Progress" msgstr "" -#: ../libresvip/tui/app.py:853 ../libresvip/web/pages.py:1170 +#: ../libresvip/tui/app.py:784 ../libresvip/web/pages.py:1169 msgid "Conversion Settings" msgstr "" -#: ../libresvip/tui/app.py:870 +#: ../libresvip/tui/app.py:801 msgid "Output Settings" msgstr "" -#: ../libresvip/tui/app.py:873 +#: ../libresvip/tui/app.py:804 msgid "Set Output File Extension Automatically" msgstr "" -#: ../libresvip/tui/app.py:890 +#: ../libresvip/tui/app.py:821 msgid "Other Settings" msgstr "" -#: ../libresvip/tui/app.py:892 +#: ../libresvip/tui/app.py:823 msgid "Appearance" msgstr "" -#: ../libresvip/tui/app.py:920 +#: ../libresvip/tui/app.py:851 msgid "Choose Plugins" msgstr "" @@ -1222,176 +1226,176 @@ msgstr "" msgid "Audio file not found: " msgstr "" -#: ../libresvip/web/pages.py:279 +#: ../libresvip/web/pages.py:278 msgid "name" msgstr "" -#: ../libresvip/web/pages.py:294 +#: ../libresvip/web/pages.py:293 msgid "author" msgstr "" -#: ../libresvip/web/pages.py:301 ../libresvip/web/pages.py:318 -#: ../libresvip/web/pages.py:1713 ../libresvip/web/pages.py:1732 -#: ../libresvip/web/pages.py:1857 ../libresvip/web/pages.py:1905 +#: ../libresvip/web/pages.py:300 ../libresvip/web/pages.py:317 +#: ../libresvip/web/pages.py:1712 ../libresvip/web/pages.py:1731 +#: ../libresvip/web/pages.py:1856 ../libresvip/web/pages.py:1904 msgid "file_format" msgstr "" -#: ../libresvip/web/pages.py:308 +#: ../libresvip/web/pages.py:307 msgid "description" msgstr "" -#: ../libresvip/web/pages.py:327 +#: ../libresvip/web/pages.py:326 msgid "[Import as " msgstr "" -#: ../libresvip/web/pages.py:336 +#: ../libresvip/web/pages.py:335 msgid "[Export to " msgstr "" -#: ../libresvip/web/pages.py:433 ../libresvip/web/pages.py:551 +#: ../libresvip/web/pages.py:432 ../libresvip/web/pages.py:550 msgid "Invalid integer" msgstr "" -#: ../libresvip/web/pages.py:437 ../libresvip/web/pages.py:555 +#: ../libresvip/web/pages.py:436 ../libresvip/web/pages.py:554 msgid "Invalid float" msgstr "" -#: ../libresvip/web/pages.py:932 +#: ../libresvip/web/pages.py:931 msgid "Conversion Failed" msgstr "" -#: ../libresvip/web/pages.py:934 +#: ../libresvip/web/pages.py:933 msgid "Conversion Successful" msgstr "" -#: ../libresvip/web/pages.py:1015 ../libresvip/web/pages.py:1050 +#: ../libresvip/web/pages.py:1014 ../libresvip/web/pages.py:1049 msgid "All files (*.*)" msgstr "" -#: ../libresvip/web/pages.py:1037 +#: ../libresvip/web/pages.py:1036 msgid "Save failed!" msgstr "" -#: ../libresvip/web/pages.py:1047 +#: ../libresvip/web/pages.py:1046 msgid "Compressed Archive (*.zip)" msgstr "" -#: ../libresvip/web/pages.py:1059 +#: ../libresvip/web/pages.py:1058 msgid "Saved" msgstr "" -#: ../libresvip/web/pages.py:1118 +#: ../libresvip/web/pages.py:1117 msgid "LibreSVIP" msgstr "" -#: ../libresvip/web/pages.py:1158 +#: ../libresvip/web/pages.py:1157 msgid "Toggle menu" msgstr "" -#: ../libresvip/web/pages.py:1174 +#: ../libresvip/web/pages.py:1173 msgid "Lyric Replace Rules" msgstr "" -#: ../libresvip/web/pages.py:1224 +#: ../libresvip/web/pages.py:1223 msgid "Flags" msgstr "" -#: ../libresvip/web/pages.py:1252 +#: ../libresvip/web/pages.py:1251 msgid "Full match" msgstr "" -#: ../libresvip/web/pages.py:1254 +#: ../libresvip/web/pages.py:1253 msgid "Alphabetic" msgstr "" -#: ../libresvip/web/pages.py:1258 +#: ../libresvip/web/pages.py:1257 msgid "Non-alphabetic" msgstr "" -#: ../libresvip/web/pages.py:1261 +#: ../libresvip/web/pages.py:1260 msgid "Regex" msgstr "" -#: ../libresvip/web/pages.py:1265 +#: ../libresvip/web/pages.py:1264 msgid "Ignore case" msgstr "" -#: ../libresvip/web/pages.py:1461 +#: ../libresvip/web/pages.py:1460 msgid "Toggle fullscreen" msgstr "" -#: ../libresvip/web/pages.py:1473 +#: ../libresvip/web/pages.py:1472 msgid "Preset: " msgstr "" -#: ../libresvip/web/pages.py:1488 +#: ../libresvip/web/pages.py:1487 msgid "Remove current preset" msgstr "" -#: ../libresvip/web/pages.py:1507 +#: ../libresvip/web/pages.py:1506 msgid "Save current preset" msgstr "" -#: ../libresvip/web/pages.py:1530 +#: ../libresvip/web/pages.py:1529 msgid "Add new rule" msgstr "" -#: ../libresvip/web/pages.py:1531 +#: ../libresvip/web/pages.py:1530 msgid "" "Alphabetic: Applies to alphabetic characters.\n" "Non-Alphabetic: For non-alphabetic characters and punctuation marks.\n" "Regex: for advanced users with knowledge of regular expressions." msgstr "" -#: ../libresvip/web/pages.py:1651 ../libresvip/web/pages.py:1680 +#: ../libresvip/web/pages.py:1650 ../libresvip/web/pages.py:1679 msgid "Convert" msgstr "" -#: ../libresvip/web/pages.py:1666 ../libresvip/web/pages.py:1941 +#: ../libresvip/web/pages.py:1665 ../libresvip/web/pages.py:1940 msgid "Import project" msgstr "" -#: ../libresvip/web/pages.py:1692 ../libresvip/web/pages.py:1986 +#: ../libresvip/web/pages.py:1691 ../libresvip/web/pages.py:1985 msgid "Clear Task List" msgstr "" -#: ../libresvip/web/pages.py:1763 +#: ../libresvip/web/pages.py:1762 msgid "Settings" msgstr "" -#: ../libresvip/web/pages.py:1769 +#: ../libresvip/web/pages.py:1768 msgid "Help" msgstr "" -#: ../libresvip/web/pages.py:1786 +#: ../libresvip/web/pages.py:1785 msgid "Documentation" msgstr "" -#: ../libresvip/web/pages.py:1848 +#: ../libresvip/web/pages.py:1847 msgid "Choose file format" msgstr "" -#: ../libresvip/web/pages.py:1943 +#: ../libresvip/web/pages.py:1942 msgid "Conversion Mode:" msgstr "" -#: ../libresvip/web/pages.py:1990 +#: ../libresvip/web/pages.py:1989 msgid "Remove Tasks With Other Extensions" msgstr "" -#: ../libresvip/web/pages.py:1994 +#: ../libresvip/web/pages.py:1993 msgid "Max Track count:" msgstr "" -#: ../libresvip/web/pages.py:2055 +#: ../libresvip/web/pages.py:2054 msgid "Drag and drop files here or click to upload" msgstr "" -#: ../libresvip/web/pages.py:2095 +#: ../libresvip/web/pages.py:2094 msgid "Export" msgstr "" -#: ../libresvip/web/pages.py:2108 +#: ../libresvip/web/pages.py:2107 msgid "Intermediate Processing" msgstr ""