From 53389baa64288d7d29ba0020d60218b0ac95e9e6 Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Wed, 21 Oct 2026 02:52:22 +0900 Subject: [PATCH] =?UTF-8?q?F1=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=C2=B7=20=ED=82=A4=20=EC=B9=B8=20=EC=9D=B4=EB=A6=84=EC=9D=80=20?= =?UTF-8?q?=EC=A7=A7=EA=B2=8C,=20=EA=B4=84=ED=98=B8=20=EC=84=A4=EB=AA=85?= =?UTF-8?q?=EC=9D=80=20=EC=B9=B8=20=EC=95=84=EB=9E=98=20=EB=8F=84=EC=9B=80?= =?UTF-8?q?=20=EA=B8=80=EB=A1=9C=20=C2=B7=20131=20=EC=BF=A0=ED=82=A4=20?= =?UTF-8?q?=EC=95=88=EB=82=B4=20=EA=B8=80=EC=9D=84=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=EC=84=A4=EB=AA=85=20=EA=B8=80=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=ED=81=AC=EA=B8=B0=20=C2=B7=20=EC=83=89=EC=9C=BC=EB=A1=9C=20(?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=A7=80=EC=8B=9C=2010/21,=2015?= =?UTF-8?q?=20=EC=B0=BE=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - F1: 412 ํญ en ยท ja ์—์„œ ๐Ÿ‘ ์ž๋ฆฌ ๋•Œ๋ฌธ์— ์นธ ์ด๋ฆ„์ด "โ€ฆ" ๋กœ ์ž˜๋ ธ๋‹ค (SFTP ์ถ”๊ฐ€ ์ฐฝ "Password (leave empty if usinโ€ฆ") ยท SFTP ๋น„๋ฐ€๋ฒˆํ˜ธ "๋น„๋ฐ€๋ฒˆํ˜ธ" + ๋„์›€ ๊ธ€ "๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›๋‹ˆ๋‹ค", ๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ" + "์—†์œผ๋ฉด ๋น„์›๋‹ˆ๋‹ค" ยท AI ์ธํ„ฐ๋„ท ์„œ๋น„์Šค "API ํ‚ค" / "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ" + "๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค" ยท ZIP ์œผ๋กœ ๋ฌถ๊ธฐ "๋น„๋ฐ€๋ฒˆํ˜ธ" (๋„์›€ ๊ธ€ "๋„ฃ์œผ๋ฉด AES-256 โ€ฆ ๋น„์šฐ๋ฉด ๋ณดํ†ต ZIP" ์ด ์„ ํƒ์ž„์„ ์•Œ๋ฆผ) ยท WebDAV ยท SMB ยท FTP ยท ๋งˆ์Šคํ„ฐ ยท OpenSubtitles ๋Š” ์นธ ์ด๋ฆ„์ด ์ด๋ฏธ "๋น„๋ฐ€๋ฒˆํ˜ธ" ๋ฟ์ด๋ผ ๊ทธ๋Œ€๋กœ. ์˜› ์—ด์‡  4๊ฐœ ์ง€์›€ (en ยท ja ยท zh) - 131: ์ฟ ํ‚ค ์•ˆ๋‚ด ๊ธ€ 12px ํ๋ฆฐ ํšŒ์ƒ‰ โ†’ ListTile ๋ถ€์ œ๋ชฉ๊ณผ ๊ฐ™์€ bodyMedium ยท onSurfaceVariant - ์‹œํ—˜: windows_f1_shot_test (ZIP ยท AI ์„œ๋น„์Šค ์ฐฝ, ko ยท en ยท ja ร— 412 ยท 960) ์ถ”๊ฐ€. f1 ยท trunc ยท cookie ์บก์ฒ˜ ๊ฐ 6๊ฐœ ํ†ต๊ณผ, 72์žฅ release\test\shots_f1 - ์ง์ ‘ ๋ด„ (en 412 SFTP ยท ja 412 AI ยท en 412 ZIP ยท ja 960 ์ฟ ํ‚ค): ์นธ ์ด๋ฆ„ ์ž˜๋ฆผ ์—†์Œ - ์ด ๊ณ ์นจ์€ ๋‹ค์Œ ํŒ (10.20_001 ๋…ธํŠธ์—๋Š” ๋„ฃ์ง€ ์•Š์Œ, ๊ด€๋ฆฌ์ž ๊ฒฐ์ •) Co-Authored-By: Claude Opus 5.5 --- assets/l10n/en.json | 9 +-- assets/l10n/ja.json | 9 +-- assets/l10n/zh-Hans.json | 9 +-- integration_test/windows_f1_shot_test.dart | 80 ++++++++++++++++++++++ lib/ui/ai_settings.dart | 5 +- lib/ui/archive_ui.dart | 4 +- lib/ui/settings_page.dart | 3 +- lib/ui/sftp_settings.dart | 7 +- 8 files changed, 109 insertions(+), 17 deletions(-) create mode 100644 integration_test/windows_f1_shot_test.dart diff --git a/assets/l10n/en.json b/assets/l10n/en.json index d9e6b66..79fe092 100644 --- a/assets/l10n/en.json +++ b/assets/l10n/en.json @@ -137,9 +137,8 @@ "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ ๋“ฑ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์ž‘์—…์ด ๋๋‚ฌ์„ ๋•Œ": "When a long task such as AI upscaling finishes", "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ: {0}": "AI upscaling: {0}", "API ํ‚ค": "API key", - "API ํ‚ค (์„ ํƒ)": "API key (optional)", "API ํ‚ค (ํ•„์ˆ˜, ๋ฌด๋ฃŒ)": "API key (required, free)", - "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "API key or user:password (optional)", + "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ": "API key or user:password", "AV1 ์˜์ƒ์€ ์ด ๊ธฐ๊ธฐ์—์„œ ๋‹ค์‹œ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋ฑ์„ \"์›๋ณธ ์œ ์ง€\" ๋กœ ๋ฐ”๊ฟ” MKV ๋ฅผ ๋งŒ๋“œ์„ธ์š”. (PC ํŒ์€ ๋ฉ๋‹ˆ๋‹ค)": "AV1 video cannot be re-encoded on this device. Change the codec to \"Keep original\" to make the MKV. (The PC version can.)", "Android 11 ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ํด๋” (Android/data ยท Android/obb) ๋Š” ์–ด๋–ค ํŒŒ์ผ ์•ฑ๋„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ์•ฑ ์•ˆ์˜ ๋‚ด๋ณด๋‚ด๊ธฐ ยท ๊ณต์œ ๋กœ ํŒŒ์ผ์„ ๊บผ๋‚ด์„ธ์š”.": "Since Android 11, no file app can open other apps' data folders (Android/data ยท Android/obb). Use export or share inside that app to get the files.", "Android System WebView ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค ({0}). Play ์Šคํ† ์–ด์—์„œ Android System WebView ยท Chrome ์„ ์—…๋ฐ์ดํŠธํ•œ ๋’ค ๋‹ค์‹œ ์—ฌ์„ธ์š”. Tor ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์—ด๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ํ™”๋ฉด์€ ํŽ˜์ด์ง€๋ฅผ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.": "Android System WebView lacks a required feature ({0}). Update Android System WebView / Chrome in the Play Store and open this screen again. Because pages could open without going through Tor, this screen loads nothing.", @@ -697,13 +696,14 @@ "๊ฐœ์ธ ํ‚ค": "Private key", "๊ฐœ์ธ ํ‚ค ๋ฐ”๊พธ๊ธฐ": "Change private key", "๊ฐœ์ธ ํ‚ค ๋นผ๊ธฐ": "Remove private key", - "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ (์—†์œผ๋ฉด ๋น„์›€)": "Private key passphrase (leave empty if none)", + "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ": "Private key passphrase", "๊ฐœ์ธ ํ‚ค ์žˆ์Œ": "Private key set", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ ๊ณ ๋ฅด๊ธฐ": "Choose private key file", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹์˜ ๋น„๋ฐ€ ํ‚ค๋ฅผ ๊ณ ๋ฅด์„ธ์š”, .pub ์•„๋‹˜)": "This isn't a private key file (choose an OpenSSH or PEM private key, not .pub)", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (๋„ˆ๋ฌด ํผ)": "This isn't a private key file (too large)", "๊ฐœ์ธ ํ‚ค๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค (์›๋ž˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)": "Private key added (the original file path isn't saved)", "๊ฐœ์ธ ํ‚ค๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹)": "Can't read the private key (OpenSSH or PEM format)", + "๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "Leave empty if you use only a private key", "๊ฐœ์ธ ํ‚ค์˜ ์•”ํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค": "The private key passphrase is incorrect", "๊ฑฐ๊พธ๋กœ": "Reverse", "๊ฑฐ๊พธ๋กœ ๋œ ๋ฒ”์œ„: {0}": "Reversed range: {0}", @@ -924,6 +924,7 @@ "๋„˜๊ธฐ๋Š” ๋ฐฉํ–ฅ: ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ": "Page direction: left โ†’ right", "๋„ฃ์œผ๋ฉด AES-256 ์œผ๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฐ๋ฉด ๋ณดํ†ต ZIP": "If set, encrypts with AES-256. Leave empty for a normal ZIP", "๋„ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค: {0}": "Could not add: {0}", + "๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค": "Optional", "๋„ค๋œ๋ž€๋“œ์–ด": "Dutch", "๋„คํŠธ์›Œํฌ ยท DNS": "Network ยท DNS", "๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ (UNC)": "Network path (UNC)", @@ -1472,7 +1473,6 @@ "๋น„๊ตํ•  ๊ฐ’ ๋ถ™์—ฌ๋„ฃ๊ธฐ (๋ฐ›์€ ๊ณณ์˜ ํ•ด์‹œ)": "Paste a value to compare (hash from the source)", "๋น„๊ตํ•  ํ•ด์‹œ": "Hash to compare", "๋น„๋ฐ€๋ฒˆํ˜ธ": "Password", - "๋น„๋ฐ€๋ฒˆํ˜ธ (๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›€)": "Password (leave empty if using only a private key)", "๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "Password (optional)", "๋น„๋ฐ€๋ฒˆํ˜ธ ZIP ์„ ๋งŒ๋“ค 7-Zip ์ด ์ด ํŒ์— ์—†์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๋ฌถ๊ฑฐ๋‚˜ ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด ์ฃผ์„ธ์š”.": "This version has no 7-Zip to make password ZIPs. Make the ZIP without a password or reinstall the app.", "๋น„๋ฐ€๋ฒˆํ˜ธ ยท API ํ‚ค (WebDAV ยท OpenSubtitles ยท AI ์„œ๋น„์Šค)": "Passwords ยท API keys (WebDAV ยท OpenSubtitles ยท AI services)", @@ -1830,6 +1830,7 @@ "์—†๋Š” ๊ฒฝ๋กœ: {0}": "path not found: {0}", "์—†๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค: {0}": "The path doesn't exist: {0}", "์—†๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค": "No such item", + "์—†์œผ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "Leave empty if there is none", "์—†์Œ": "None", "์—†์Œ: ์„ธ๋ถ€ ์ •๋ณด์˜ [์ด๋™] ์„ ์ฒ˜์Œ ๋ˆ„๋ฅผ ๋•Œ ํด๋”๋ฅผ ๊ณจ๋ผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค": "None: one is created when you first press [Move] in the details", "์—”์ง„": "Engine", diff --git a/assets/l10n/ja.json b/assets/l10n/ja.json index bff83cd..2b1da07 100644 --- a/assets/l10n/ja.json +++ b/assets/l10n/ja.json @@ -137,9 +137,8 @@ "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ ๋“ฑ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์ž‘์—…์ด ๋๋‚ฌ์„ ๋•Œ": "AI ้ซ˜่งฃๅƒๅบฆๅŒ–ใชใฉๆ™‚้–“ใฎใ‹ใ‹ใ‚‹ไฝœๆฅญใŒ็ต‚ใ‚ใฃใŸใจใ", "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ: {0}": "AI ้ซ˜่งฃๅƒๅบฆๅŒ–: {0}", "API ํ‚ค": "API ใ‚ญใƒผ", - "API ํ‚ค (์„ ํƒ)": "API ใ‚ญใƒผ (ไปปๆ„)", "API ํ‚ค (ํ•„์ˆ˜, ๋ฌด๋ฃŒ)": "API ใ‚ญใƒผ๏ผˆๅฟ…้ ˆใƒป็„กๆ–™๏ผ‰", - "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "API ใ‚ญใƒผใพใŸใฏ ID:ใƒ‘ใ‚นใƒฏใƒผใƒ‰ (ไปปๆ„)", + "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ": "API ใ‚ญใƒผใพใŸใฏ ID:ใƒ‘ใ‚นใƒฏใƒผใƒ‰", "AV1 ์˜์ƒ์€ ์ด ๊ธฐ๊ธฐ์—์„œ ๋‹ค์‹œ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋ฑ์„ \"์›๋ณธ ์œ ์ง€\" ๋กœ ๋ฐ”๊ฟ” MKV ๋ฅผ ๋งŒ๋“œ์„ธ์š”. (PC ํŒ์€ ๋ฉ๋‹ˆ๋‹ค)": "AV1 ๅ‹•็”ปใฏใ“ใฎ็ซฏๆœซใงใฏๅ†ใ‚จใƒณใ‚ณใƒผใƒ‰ใงใใพใ›ใ‚“ใ€‚ใ‚ณใƒผใƒ‡ใƒƒใ‚ฏใ‚’ใ€Œๅ…ƒใฎใพใพใ€ใซๅค‰ใˆใฆ MKV ใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„ใ€‚๏ผˆPC ็‰ˆใฏใงใใพใ™๏ผ‰", "Android 11 ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ํด๋” (Android/data ยท Android/obb) ๋Š” ์–ด๋–ค ํŒŒ์ผ ์•ฑ๋„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ์•ฑ ์•ˆ์˜ ๋‚ด๋ณด๋‚ด๊ธฐ ยท ๊ณต์œ ๋กœ ํŒŒ์ผ์„ ๊บผ๋‚ด์„ธ์š”.": "Android 11 ไปฅ้™ใ€ไป–ใฎใ‚ขใƒ—ใƒชใฎใƒ‡ใƒผใ‚ฟใƒ•ใ‚ฉใƒซใƒ€ใƒผ (Android/dataใƒปAndroid/obb) ใฏใฉใฎใƒ•ใ‚กใ‚คใƒซใ‚ขใƒ—ใƒชใงใ‚‚้–‹ใ‘ใพใ›ใ‚“ใ€‚ใใฎใ‚ขใƒ—ใƒชๅ†…ใฎใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใƒปๅ…ฑๆœ‰ใงใƒ•ใ‚กใ‚คใƒซใ‚’ๅ–ใ‚Šๅ‡บใ—ใฆใใ ใ•ใ„ใ€‚", "Android System WebView ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค ({0}). Play ์Šคํ† ์–ด์—์„œ Android System WebView ยท Chrome ์„ ์—…๋ฐ์ดํŠธํ•œ ๋’ค ๋‹ค์‹œ ์—ฌ์„ธ์š”. Tor ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์—ด๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ํ™”๋ฉด์€ ํŽ˜์ด์ง€๋ฅผ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.": "Android System WebView ใซๅฟ…่ฆใชๆฉŸ่ƒฝใŒใ‚ใ‚Šใพใ›ใ‚“ ({0})ใ€‚Play ใ‚นใƒˆใ‚ขใง Android System WebViewใƒปChrome ใ‚’ๆ›ดๆ–ฐใ—ใฆใ‹ใ‚‰้–‹ใ็›ดใ—ใฆใใ ใ•ใ„ใ€‚Tor ใ‚’้€šใ‚‰ใšใซ้–‹ใๆใ‚ŒใŒใ‚ใ‚‹ใŸใ‚ใ€ใ“ใฎ็”ป้ขใฏใƒšใƒผใ‚ธใ‚’่ชญใฟ่พผใฟใพใ›ใ‚“ใ€‚", @@ -697,13 +696,14 @@ "๊ฐœ์ธ ํ‚ค": "็ง˜ๅฏ†้ต", "๊ฐœ์ธ ํ‚ค ๋ฐ”๊พธ๊ธฐ": "็ง˜ๅฏ†้ตใ‚’ๅค‰ๆ›ด", "๊ฐœ์ธ ํ‚ค ๋นผ๊ธฐ": "็ง˜ๅฏ†้ตใ‚’ๅค–ใ™", - "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ (์—†์œผ๋ฉด ๋น„์›€)": "็ง˜ๅฏ†้ตใฎใƒ‘ใ‚นใƒ•ใƒฌใƒผใ‚บ (ใชใ‘ใ‚Œใฐ็ฉบๆฌ„)", + "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ": "็ง˜ๅฏ†้ตใฎใƒ‘ใ‚นใƒ•ใƒฌใƒผใ‚บ", "๊ฐœ์ธ ํ‚ค ์žˆ์Œ": "็ง˜ๅฏ†้ตใ‚ใ‚Š", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ ๊ณ ๋ฅด๊ธฐ": "็ง˜ๅฏ†้ตใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠž", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹์˜ ๋น„๋ฐ€ ํ‚ค๋ฅผ ๊ณ ๋ฅด์„ธ์š”, .pub ์•„๋‹˜)": "็ง˜ๅฏ†้ตใƒ•ใ‚กใ‚คใƒซใงใฏใ‚ใ‚Šใพใ›ใ‚“ (OpenSSHใƒปPEM ๅฝขๅผใฎ็ง˜ๅฏ†้ตใ‚’้ธใ‚“ใงใใ ใ•ใ„ใ€‚.pub ใงใฏใ‚ใ‚Šใพใ›ใ‚“)", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (๋„ˆ๋ฌด ํผ)": "็ง˜ๅฏ†้ตใƒ•ใ‚กใ‚คใƒซใงใฏใ‚ใ‚Šใพใ›ใ‚“ (ๅคงใใ™ใŽใพใ™)", "๊ฐœ์ธ ํ‚ค๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค (์›๋ž˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)": "็ง˜ๅฏ†้ตใ‚’็™ป้Œฒใ—ใพใ—ใŸ (ๅ…ƒใฎใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚นใฏไฟๅญ˜ใ—ใพใ›ใ‚“)", "๊ฐœ์ธ ํ‚ค๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹)": "็ง˜ๅฏ†้ตใ‚’่ชญใฟ่พผใ‚ใพใ›ใ‚“ (OpenSSHใƒปPEM ๅฝขๅผ)", + "๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "็ง˜ๅฏ†้ตใ ใ‘ใ‚’ไฝฟใ†ใชใ‚‰็ฉบใซใ—ใพใ™", "๊ฐœ์ธ ํ‚ค์˜ ์•”ํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค": "็ง˜ๅฏ†้ตใฎใƒ‘ใ‚นใƒ•ใƒฌใƒผใ‚บใŒๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“", "๊ฑฐ๊พธ๋กœ": "้€†้ †", "๊ฑฐ๊พธ๋กœ ๋œ ๋ฒ”์œ„: {0}": "้€†้ †ใฎ็ฏ„ๅ›ฒ: {0}", @@ -924,6 +924,7 @@ "๋„˜๊ธฐ๋Š” ๋ฐฉํ–ฅ: ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ": "ใ‚ใใ‚‹ๆ–นๅ‘: ๅทฆ โ†’ ๅณ", "๋„ฃ์œผ๋ฉด AES-256 ์œผ๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฐ๋ฉด ๋ณดํ†ต ZIP": "ๅ…ฅๅŠ›ใ™ใ‚‹ใจ AES-256 ใงๆš—ๅทๅŒ–ใ—ใพใ™ใ€‚็ฉบๆฌ„ใชใ‚‰้€šๅธธใฎ ZIP", "๋„ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค: {0}": "่ฟฝๅŠ ใงใใพใ›ใ‚“ใงใ—ใŸ: {0}", + "๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค": "ๅ…ฅใ‚Œใชใใฆใ‚‚ใ‹ใพใ„ใพใ›ใ‚“", "๋„ค๋œ๋ž€๋“œ์–ด": "ใ‚ชใƒฉใƒณใƒ€่ชž", "๋„คํŠธ์›Œํฌ ยท DNS": "ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใƒปDNS", "๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ (UNC)": "ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใƒ‘ใ‚น (UNC)", @@ -1472,7 +1473,6 @@ "๋น„๊ตํ•  ๊ฐ’ ๋ถ™์—ฌ๋„ฃ๊ธฐ (๋ฐ›์€ ๊ณณ์˜ ํ•ด์‹œ)": "ๆฏ”่ผƒใ™ใ‚‹ๅ€คใ‚’่ฒผใ‚Šไป˜ใ‘ (ๅ…ฅๆ‰‹ๅ…ƒใฎใƒใƒƒใ‚ทใƒฅ)", "๋น„๊ตํ•  ํ•ด์‹œ": "ๆฏ”่ผƒใ™ใ‚‹ใƒใƒƒใ‚ทใƒฅ", "๋น„๋ฐ€๋ฒˆํ˜ธ": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰", - "๋น„๋ฐ€๋ฒˆํ˜ธ (๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›€)": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ (็ง˜ๅฏ†้ตใ ใ‘ใ‚’ไฝฟใ†ๅ ดๅˆใฏ็ฉบๆฌ„)", "๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰๏ผˆไปปๆ„๏ผ‰", "๋น„๋ฐ€๋ฒˆํ˜ธ ZIP ์„ ๋งŒ๋“ค 7-Zip ์ด ์ด ํŒ์— ์—†์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๋ฌถ๊ฑฐ๋‚˜ ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด ์ฃผ์„ธ์š”.": "ใ“ใฎใƒใƒผใ‚ธใƒงใƒณใซใฏใƒ‘ใ‚นใƒฏใƒผใƒ‰ไป˜ใ ZIP ใ‚’ไฝœใ‚‹ 7-Zip ใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใชใ—ใงใพใจใ‚ใ‚‹ใ‹ใ€ใ‚ขใƒ—ใƒชใ‚’ๅ†ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใฆใใ ใ•ใ„ใ€‚", "๋น„๋ฐ€๋ฒˆํ˜ธ ยท API ํ‚ค (WebDAV ยท OpenSubtitles ยท AI ์„œ๋น„์Šค)": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใƒปAPI ใ‚ญใƒผ (WebDAVใƒปOpenSubtitlesใƒปAI ใ‚ตใƒผใƒ“ใ‚น)", @@ -1830,6 +1830,7 @@ "์—†๋Š” ๊ฒฝ๋กœ: {0}": "ๅญ˜ๅœจใ—ใชใ„ใƒ‘ใ‚น: {0}", "์—†๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค: {0}": "ๅญ˜ๅœจใ—ใชใ„ใƒ‘ใ‚นใงใ™: {0}", "์—†๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค": "ๅญ˜ๅœจใ—ใชใ„้ …็›ฎใงใ™", + "์—†์œผ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "ใชใ‘ใ‚Œใฐ็ฉบใซใ—ใพใ™", "์—†์Œ": "ใชใ—", "์—†์Œ: ์„ธ๋ถ€ ์ •๋ณด์˜ [์ด๋™] ์„ ์ฒ˜์Œ ๋ˆ„๋ฅผ ๋•Œ ํด๋”๋ฅผ ๊ณจ๋ผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค": "ใชใ—: ่ฉณ็ดฐใฎ๏ผป็งปๅ‹•๏ผฝใ‚’ๅˆใ‚ใฆๆŠผใ—ใŸใจใใซใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚’้ธใ‚“ใงไฝœๆˆใ—ใพใ™", "์—”์ง„": "ใ‚จใƒณใ‚ธใƒณ", diff --git a/assets/l10n/zh-Hans.json b/assets/l10n/zh-Hans.json index c112a03..69b10cb 100644 --- a/assets/l10n/zh-Hans.json +++ b/assets/l10n/zh-Hans.json @@ -137,9 +137,8 @@ "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ ๋“ฑ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์ž‘์—…์ด ๋๋‚ฌ์„ ๋•Œ": "AI ๆๅ‡ๅˆ†่พจ็އ็ญ‰่€—ๆ—ถไปปๅŠกๅฎŒๆˆๆ—ถ", "AI ํ•ด์ƒ๋„ ์˜ฌ๋ฆฌ๊ธฐ: {0}": "AI ๆๅ‡ๅˆ†่พจ็އ: {0}", "API ํ‚ค": "API ๅฏ†้’ฅ", - "API ํ‚ค (์„ ํƒ)": "API ๅฏ†้’ฅ (ๅฏ้€‰)", "API ํ‚ค (ํ•„์ˆ˜, ๋ฌด๋ฃŒ)": "API ๅฏ†้’ฅ๏ผˆๅฟ…ๅกซ๏ผŒๅ…่ดน๏ผ‰", - "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "API ๅฏ†้’ฅๆˆ– ็”จๆˆทๅ:ๅฏ†็  (ๅฏ้€‰)", + "API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ": "API ๅฏ†้’ฅๆˆ– ็”จๆˆทๅ:ๅฏ†็ ", "AV1 ์˜์ƒ์€ ์ด ๊ธฐ๊ธฐ์—์„œ ๋‹ค์‹œ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋ฑ์„ \"์›๋ณธ ์œ ์ง€\" ๋กœ ๋ฐ”๊ฟ” MKV ๋ฅผ ๋งŒ๋“œ์„ธ์š”. (PC ํŒ์€ ๋ฉ๋‹ˆ๋‹ค)": "ๆญค่ฎพๅค‡ๆ— ๆณ•้‡ๆ–ฐ็ผ–็  AV1 ่ง†้ข‘ใ€‚่ฏทๅฐ†็ผ–่งฃ็ ๅ™จๆ”นไธบโ€œไฟๆŒๅŽŸๆ ทโ€ๅŽๅˆถไฝœ MKVใ€‚๏ผˆPC ็‰ˆๅฏไปฅ๏ผ‰", "Android 11 ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ํด๋” (Android/data ยท Android/obb) ๋Š” ์–ด๋–ค ํŒŒ์ผ ์•ฑ๋„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ์•ฑ ์•ˆ์˜ ๋‚ด๋ณด๋‚ด๊ธฐ ยท ๊ณต์œ ๋กœ ํŒŒ์ผ์„ ๊บผ๋‚ด์„ธ์š”.": "ไปŽ Android 11 ่ตท๏ผŒไปปไฝ•ๆ–‡ไปถๅบ”็”จ้ƒฝๆ— ๆณ•ๆ‰“ๅผ€ๅ…ถไป–ๅบ”็”จ็š„ๆ•ฐๆฎๆ–‡ไปถๅคน (Android/data ยท Android/obb)ใ€‚่ฏทๅœจ่ฏฅๅบ”็”จๅ†…ไฝฟ็”จๅฏผๅ‡บๆˆ–ๅˆ†ไบซๅ–ๅ‡บๆ–‡ไปถใ€‚", "Android System WebView ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค ({0}). Play ์Šคํ† ์–ด์—์„œ Android System WebView ยท Chrome ์„ ์—…๋ฐ์ดํŠธํ•œ ๋’ค ๋‹ค์‹œ ์—ฌ์„ธ์š”. Tor ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์—ด๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด ํ™”๋ฉด์€ ํŽ˜์ด์ง€๋ฅผ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.": "Android System WebView ็ผบๅฐ‘ๆ‰€้œ€ๅŠŸ่ƒฝ ({0})ใ€‚่ฏทๅœจ Play ๅ•†ๅบ—ๆ›ดๆ–ฐ Android System WebView ยท Chrome ๅŽ้‡ๆ–ฐๆ‰“ๅผ€ใ€‚็”ฑไบŽ้กต้ขๅฏ่ƒฝไธ็ป่ฟ‡ Tor ๆ‰“ๅผ€๏ผŒๆญค็”ป้ขไธไผšๅŠ ่ฝฝไปปไฝ•้กต้ขใ€‚", @@ -697,13 +696,14 @@ "๊ฐœ์ธ ํ‚ค": "็ง้’ฅ", "๊ฐœ์ธ ํ‚ค ๋ฐ”๊พธ๊ธฐ": "ๆ›ดๆข็ง้’ฅ", "๊ฐœ์ธ ํ‚ค ๋นผ๊ธฐ": "็งป้™ค็ง้’ฅ", - "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ (์—†์œผ๋ฉด ๋น„์›€)": "็ง้’ฅๅฏ†็  (ๆฒกๆœ‰ๅˆ™็•™็ฉบ)", + "๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ": "็ง้’ฅๅฏ†็ ", "๊ฐœ์ธ ํ‚ค ์žˆ์Œ": "ๅทฒ่ฎพ็ฝฎ็ง้’ฅ", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ ๊ณ ๋ฅด๊ธฐ": "้€‰ๆ‹ฉ็ง้’ฅๆ–‡ไปถ", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹์˜ ๋น„๋ฐ€ ํ‚ค๋ฅผ ๊ณ ๋ฅด์„ธ์š”, .pub ์•„๋‹˜)": "่ฟ™ไธๆ˜ฏ็ง้’ฅๆ–‡ไปถ (่ฏท้€‰ๆ‹ฉ OpenSSH ยท PEM ๆ ผๅผ็š„็ง้’ฅ๏ผŒ่€Œไธๆ˜ฏ .pub)", "๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (๋„ˆ๋ฌด ํผ)": "่ฟ™ไธๆ˜ฏ็ง้’ฅๆ–‡ไปถ (ๆ–‡ไปถ่ฟ‡ๅคง)", "๊ฐœ์ธ ํ‚ค๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค (์›๋ž˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)": "ๅทฒๆทปๅŠ ็ง้’ฅ (ไธไฟๅญ˜ๅŽŸๆ–‡ไปถ่ทฏๅพ„)", "๊ฐœ์ธ ํ‚ค๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (OpenSSH ยท PEM ํ˜•์‹)": "ๆ— ๆณ•่ฏปๅ–็ง้’ฅ (OpenSSH ยท PEM ๆ ผๅผ)", + "๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "ไป…ไฝฟ็”จ็ง้’ฅๆ—ถ็•™็ฉบ", "๊ฐœ์ธ ํ‚ค์˜ ์•”ํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค": "็ง้’ฅๅฏ†็ ไธๆญฃ็กฎ", "๊ฑฐ๊พธ๋กœ": "ๅ€’ๅบ", "๊ฑฐ๊พธ๋กœ ๋œ ๋ฒ”์œ„: {0}": "่Œƒๅ›ด้กบๅบ้ข ๅ€’: {0}", @@ -924,6 +924,7 @@ "๋„˜๊ธฐ๋Š” ๋ฐฉํ–ฅ: ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ": "็ฟป้กตๆ–นๅ‘: ๅทฆ โ†’ ๅณ", "๋„ฃ์œผ๋ฉด AES-256 ์œผ๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฐ๋ฉด ๋ณดํ†ต ZIP": "ๅกซๅ†™ๅŽไฝฟ็”จ AES-256 ๅŠ ๅฏ†ใ€‚็•™็ฉบๅˆ™ไธบๆ™ฎ้€š ZIP", "๋„ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค: {0}": "ๆ— ๆณ•ๅŠ ๅ…ฅ: {0}", + "๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค": "ๅฏไปฅไธๅกซ", "๋„ค๋œ๋ž€๋“œ์–ด": "่ทๅ…ฐ่ฏญ", "๋„คํŠธ์›Œํฌ ยท DNS": "็ฝ‘็ปœ ยท DNS", "๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ (UNC)": "็ฝ‘็ปœ่ทฏๅพ„ (UNC)", @@ -1472,7 +1473,6 @@ "๋น„๊ตํ•  ๊ฐ’ ๋ถ™์—ฌ๋„ฃ๊ธฐ (๋ฐ›์€ ๊ณณ์˜ ํ•ด์‹œ)": "็ฒ˜่ดด่ฆๆฏ”่พƒ็š„ๅ€ผ (ๆฅๆบๅค„็š„ๅ“ˆๅธŒ)", "๋น„๊ตํ•  ํ•ด์‹œ": "่ฆๆฏ”่พƒ็š„ๅ“ˆๅธŒ", "๋น„๋ฐ€๋ฒˆํ˜ธ": "ๅฏ†็ ", - "๋น„๋ฐ€๋ฒˆํ˜ธ (๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›€)": "ๅฏ†็  (ไป…ไฝฟ็”จ็ง้’ฅๆ—ถ็•™็ฉบ)", "๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)": "ๅฏ†็ ๏ผˆๅฏ้€‰๏ผ‰", "๋น„๋ฐ€๋ฒˆํ˜ธ ZIP ์„ ๋งŒ๋“ค 7-Zip ์ด ์ด ํŒ์— ์—†์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๋ฌถ๊ฑฐ๋‚˜ ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด ์ฃผ์„ธ์š”.": "ๆญค็‰ˆๆœฌๆฒกๆœ‰็”จไบŽๅˆ›ๅปบๅŠ ๅฏ† ZIP ็š„ 7-Zipใ€‚่ฏทไธ่ฎพๅฏ†็ ๅŽ‹็ผฉ,ๆˆ–้‡ๆ–ฐๅฎ‰่ฃ…ๅบ”็”จใ€‚", "๋น„๋ฐ€๋ฒˆํ˜ธ ยท API ํ‚ค (WebDAV ยท OpenSubtitles ยท AI ์„œ๋น„์Šค)": "ๅฏ†็  ยท API ๅฏ†้’ฅ (WebDAV ยท OpenSubtitles ยท AI ๆœๅŠก)", @@ -1830,6 +1830,7 @@ "์—†๋Š” ๊ฒฝ๋กœ: {0}": "่ทฏๅพ„ไธๅญ˜ๅœจ: {0}", "์—†๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค: {0}": "่ทฏๅพ„ไธๅญ˜ๅœจ: {0}", "์—†๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค": "้กน็›ฎไธๅญ˜ๅœจ", + "์—†์œผ๋ฉด ๋น„์›๋‹ˆ๋‹ค": "ๆฒกๆœ‰ๅˆ™็•™็ฉบ", "์—†์Œ": "ๆ— ", "์—†์Œ: ์„ธ๋ถ€ ์ •๋ณด์˜ [์ด๋™] ์„ ์ฒ˜์Œ ๋ˆ„๋ฅผ ๋•Œ ํด๋”๋ฅผ ๊ณจ๋ผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค": "ๆ— : ้ฆ–ๆฌกๅœจ่ฏฆ็ป†ไฟกๆฏไธญ็‚นๅ‡ป๏ผป็งปๅŠจ๏ผฝๆ—ถ้€‰ๆ‹ฉๆ–‡ไปถๅคนๅนถๅˆ›ๅปบ", "์—”์ง„": "ๅผ•ๆ“Ž", diff --git a/integration_test/windows_f1_shot_test.dart b/integration_test/windows_f1_shot_test.dart new file mode 100644 index 0000000..2e05c91 --- /dev/null +++ b/integration_test/windows_f1_shot_test.dart @@ -0,0 +1,80 @@ +import 'dart:async'; +import 'dart:io'; +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:jj_mkvmaker/app/app_controller.dart'; +import 'package:jj_mkvmaker/app/i18n_controller.dart'; +import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; +import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; +import 'package:jj_mkvmaker/services/platform_services.dart'; +import 'package:jj_mkvmaker/ui/ai_settings.dart'; +import 'package:jj_mkvmaker/ui/archive_ui.dart'; +import 'package:jj_mkvmaker/ui/theme.dart'; +import 'package:path/path.dart' as p; + +import 'support/temp_dir.dart'; + +/// F1 (๊ด€๋ฆฌ์ž ์ง€์‹œ 10/21, 15 ์ฐพ์Œ): ๋น„๋ฐ€๋ฒˆํ˜ธ ยท ํ‚ค ์นธ ์ด๋ฆ„์€ ์งง๊ฒŒ, ์„ค๋ช…์€ ์นธ ์•„๋ž˜ - ZIP ์œผ๋กœ ๋ฌถ๊ธฐ ์ฐฝ ยท AI ์ธํ„ฐ๋„ท ์„œ๋น„์Šค ์ถ”๊ฐ€ ์ฐฝ์„ +/// ko ยท en ยท ja ร— 412 ยท 960 ์œผ๋กœ ์ฐ๋Š”๋‹ค (SFTP ์ถ”๊ฐ€ ์ฐฝ์€ windows_trunc_shot_test). ์•„๋ฌด๊ฒƒ๋„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค (์ฐฝ๋งŒ ์—ด๊ณ  ๋‹ซ์Œ). +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + final out = Platform.environment['JJ_SHOT_DIR'] ?? ''; + + for (final lang in ['ko', 'en', 'ja']) { + for (final (w, h) in [(412, 900), (960, 600)]) { + testWidgets('F1 ์นธ ์ด๋ฆ„ $lang ${w}x$h', (t) async { + t.view.physicalSize = Size(w.toDouble(), h.toDouble()); + t.view.devicePixelRatio = 1; + addTearDown(t.view.reset); + await t.runAsync(() => i18n.apply(lang, save: false)); + addTearDown(() => i18n.apply('ko', save: false)); + final tmp = testTempDir('jj_f1shot_'); + final file = File(p.join(tmp.path, 'a.txt'))..writeAsStringSync('a'); + final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); + final navKey = GlobalKey(); + final shotKey = GlobalKey(); + await t.pumpWidget(RepaintBoundary( + key: shotKey, + child: MaterialApp( + theme: buildTheme(), debugShowCheckedModeBanner: false, navigatorKey: navKey, home: const Scaffold(body: SizedBox.expand())), + )); + Future settle([int n = 8]) async { + for (var i = 0; i < n; i++) { + await t.runAsync(() => Future.delayed(const Duration(milliseconds: 60))); + await t.pump(); + } + } + + Future shot(String name) async { + await settle(3); + expect(t.takeException(), isNull, reason: '$name ๋„˜์นจ'); + if (out.isEmpty) return; + final b = shotKey.currentContext!.findRenderObject()! as RenderRepaintBoundary; + final img = await t.runAsync(() => b.toImage()); + final bytes = await t.runAsync(() => img!.toByteData(format: ui.ImageByteFormat.png)); + Directory(out).createSync(recursive: true); + File(p.join(out, 'f1_${name}_${lang}_$w.png')).writeAsBytesSync(bytes!.buffer.asUint8List()); + } + + Future closeAll() async { + navKey.currentState!.popUntil((r) => r.isFirst); + await settle(); + } + + unawaited(createZipFlow(navKey.currentContext!, c, [file.path], dir: tmp.path)); + await settle(12); + await shot('zip'); + await closeAll(); + unawaited(editAiService(navKey.currentContext!, c)); + await settle(12); + await shot('ai'); + await closeAll(); + expect(Directory(tmp.path).listSync().map((e) => p.basename(e.path)), ['a.txt'], reason: '์ฐฝ๋งŒ ์—ด๊ณ  ๋‹ซ์Œ - ์•„๋ฌด๊ฒƒ๋„ ๋งŒ๋“ค์ง€ ์•Š์Œ'); + }); + } + } +} diff --git a/lib/ui/ai_settings.dart b/lib/ui/ai_settings.dart index fd6f78b..5014253 100644 --- a/lib/ui/ai_settings.dart +++ b/lib/ui/ai_settings.dart @@ -518,7 +518,10 @@ Future editAiService(BuildContext context, AppController c, {AiService? ol controller: key, obscureText: hide, decoration: InputDecoration( - labelText: kind == 'a1111' ? tr('API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ (์„ ํƒ)') : tr('API ํ‚ค (์„ ํƒ)'), + // ๊ด€๋ฆฌ์ž ์ง€์‹œ (10/21, 15 ์ฐพ์Œ F1): ์นธ ์ด๋ฆ„์€ ์งง๊ฒŒ, ๊ด„ํ˜ธ ์„ค๋ช…์€ ์นธ ์•„๋ž˜ ๋„์›€ ๊ธ€๋กœ - 412 ํญ en ยท ja ์—์„œ ๐Ÿ‘ ์ž๋ฆฌ ๋•Œ๋ฌธ์— ์ด๋ฆ„์ด "โ€ฆ" ๋กœ ์ž˜๋ ธ๋‹ค + labelText: kind == 'a1111' ? tr('API ํ‚ค ๋˜๋Š” ์•„์ด๋””:๋น„๋ฐ€๋ฒˆํ˜ธ') : tr('API ํ‚ค'), + helperText: tr('๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค'), + helperMaxLines: 3, suffixIcon: IconButton(icon: Icon(hide ? Icons.visibility : Icons.visibility_off), onPressed: () => set(() => hide = !hide)), ), ), diff --git a/lib/ui/archive_ui.dart b/lib/ui/archive_ui.dart index 1a14a63..d3a56b8 100644 --- a/lib/ui/archive_ui.dart +++ b/lib/ui/archive_ui.dart @@ -360,8 +360,10 @@ Future createZipFlow(BuildContext context, AppController c, List { Text( tr('๋กœ๊ทธ์ธ ์ฟ ํ‚ค๋Š” ๋‹ค์šด๋กœ๋“œ (yt-dlp) ๊ฐ€ ์“ฐ๋„๋ก ์ด ๊ธฐ๊ธฐ์˜ ์•ฑ ํด๋”์— cookies_youtube.txt ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค (ํ‰๋ฌธ). ' '์ด ํŒŒ์ผ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ๊ทธ ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ธฐ๊ธฐ๋ฅผ ๋‚จ์—๊ฒŒ ์ค„ ๋•Œ๋Š” ์ง€์šฐ์„ธ์š”. ๊ณ ๋ฅธ ์‚ฌ์ดํŠธ์˜ ์ฟ ํ‚ค๋งŒ ๋„˜๊น๋‹ˆ๋‹ค:'), - style: const TextStyle(fontSize: 12, color: JjColors.textDim)), + // ๊ด€๋ฆฌ์ž ์ง€์‹œ (10/21, 131 ํ™•์ธ): 12px ํ๋ฆฐ ํšŒ์ƒ‰์€ ์ฝ๊ธฐ ํž˜๋“ค์—ˆ๋‹ค - ์œ„์•„๋ž˜ ์„ค๋ช… ๊ธ€ (ListTile ๋ถ€์ œ๋ชฉ) ๊ณผ ๊ฐ™์€ ํฌ๊ธฐ ยท ์ƒ‰์œผ๋กœ + style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onSurfaceVariant)), const SizedBox(height: 6), Wrap(spacing: 6, runSpacing: 6, children: [ for (final d in loginCookieDomains) diff --git a/lib/ui/sftp_settings.dart b/lib/ui/sftp_settings.dart index 7d042f4..ffcb44d 100644 --- a/lib/ui/sftp_settings.dart +++ b/lib/ui/sftp_settings.dart @@ -274,7 +274,10 @@ Future editSftpServer(BuildContext context, AppController c, {SftpS controller: pass, obscureText: hide, decoration: InputDecoration( - labelText: tr('๋น„๋ฐ€๋ฒˆํ˜ธ (๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›€)'), + // ๊ด€๋ฆฌ์ž ์ง€์‹œ (10/21, 15 ์ฐพ์Œ F1): ์นธ ์ด๋ฆ„์€ ์งง๊ฒŒ, ๊ด„ํ˜ธ ์„ค๋ช…์€ ์นธ ์•„๋ž˜ ๋„์›€ ๊ธ€๋กœ - 412 ํญ en ยท ja ์—์„œ ๐Ÿ‘ ์ž๋ฆฌ ๋•Œ๋ฌธ์— ์ด๋ฆ„์ด "โ€ฆ" ๋กœ ์ž˜๋ ธ๋‹ค + labelText: tr('๋น„๋ฐ€๋ฒˆํ˜ธ'), + helperText: tr('๊ฐœ์ธ ํ‚ค๋งŒ ์“ฐ๋ฉด ๋น„์›๋‹ˆ๋‹ค'), + helperMaxLines: 3, suffixIcon: IconButton( tooltip: hide ? tr('๋ณด์ด๊ธฐ') : tr('๊ฐ€๋ฆฌ๊ธฐ'), icon: Icon(hide ? Icons.visibility_outlined : Icons.visibility_off_outlined, size: 18), @@ -298,7 +301,7 @@ Future editSftpServer(BuildContext context, AppController c, {SftpS TextField( controller: passphrase, obscureText: hide, - decoration: InputDecoration(labelText: tr('๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ (์—†์œผ๋ฉด ๋น„์›€)')), + decoration: InputDecoration(labelText: tr('๊ฐœ์ธ ํ‚ค ์•”ํ˜ธ'), helperText: tr('์—†์œผ๋ฉด ๋น„์›๋‹ˆ๋‹ค'), helperMaxLines: 3), ), TextField( controller: root,