From e81fa6e5ba4b0e8ed96eb570dd105d05d8235f5c Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Mon, 12 Oct 2026 01:54:04 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=8B=9C=ED=97=98=EC=9D=84=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=20=C2=B7=20=ED=8F=AD=EB=B3=84=EB=A1=9C=20=C2=B7=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=A7=A8=20=EC=9C=84=20=EA=B8=80=20=C2=B7?= =?UTF-8?q?=20=EC=98=81=EC=96=B4=20=ED=83=90=EC=83=89=EA=B8=B0=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=20=EC=9D=B4=EB=A6=84=20(246=20=C2=B7=20251=20=C2=B7?= =?UTF-8?q?=20252)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 246 시험: ko · en · ja × 폭 800 · 1200 (P11 확인에서 영어 · 일본어는 체크가 안 보였음) - 251 (기기 확인): 영어 설정 맨 위 글이 잘림 - 두 줄까지 · 'Saved automatically' - 252 (기기 확인): 영어 'Side ⇆' 뜻이 잘 오지 않음 - 'Side by side ⇆' · 'Side by side ⇆ / Stacked ⇅' Co-Authored-By: Claude Opus 5.5 --- assets/l10n/en.json | 6 ++--- lib/ui/settings_page.dart | 3 ++- test/batch_test.dart | 53 +++++++++++++++++++++++---------------- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/assets/l10n/en.json b/assets/l10n/en.json index 3364079..1f697b2 100644 --- a/assets/l10n/en.json +++ b/assets/l10n/en.json @@ -892,7 +892,7 @@ "바꾸거나 끄려면 지금 마스터 비밀번호 (또는 최상 비밀번호) 를 넣으세요.": "To change or turn it off, enter the current master password (or the top password).", "바꾸기": "Change", "바꾸는 정도 {0}%": "Change amount {0}%", - "바꾸면 바로 저장됩니다": "Changes are saved right away", + "바꾸면 바로 저장됩니다": "Saved automatically", "바꾼 것이 없습니다 (원본 그대로)": "Nothing changed (original as is)", "바뀌는 것 없음 (양쪽이 같습니다)": "Nothing to change (both sides are the same)", "바뀐 것을 살펴보는 간격": "Interval for checking changes", @@ -1728,8 +1728,8 @@ "좌 ⇄ 우": "Left ⇄ right", "좌우": "Side by side", "좌우 (기본)": "Side by side (default)", - "좌우 ⇆": "Side ⇆", - "좌우 ⇆ / 위아래 ⇅": "Side by side ⇆ / Top and bottom ⇅", + "좌우 ⇆": "Side by side ⇆", + "좌우 ⇆ / 위아래 ⇅": "Side by side ⇆ / Stacked ⇅", "좌우 두 폴더 맞추기 (rsync) · 모니터링 · 실시간 동기화 (lsync)": "Sync two folders (rsync) · monitoring · live sync (lsync)", "좌우 맞추기 (세로로 밀어 봄)": "Fit width (scroll vertically)", "좌우로 밀어 화면 이동": "Swipe left/right to switch screens", diff --git a/lib/ui/settings_page.dart b/lib/ui/settings_page.dart index 4fc0500..37c3b02 100644 --- a/lib/ui/settings_page.dart +++ b/lib/ui/settings_page.dart @@ -317,8 +317,9 @@ class _SettingsPageState extends State { Text(tr('환경 설정'), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600)), const Spacer(), Flexible( + // 251: 영어 등 긴 언어에서 잘리지 않게 두 줄까지 child: Text(tr('바꾸면 바로 저장됩니다'), - maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 12, color: JjColors.textDim)), + maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 12, color: JjColors.textDim)), ), const SizedBox(width: 8), ]), diff --git a/test/batch_test.dart b/test/batch_test.dart index 0d91cbf..97a29e5 100644 --- a/test/batch_test.dart +++ b/test/batch_test.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; @@ -12,6 +13,7 @@ import 'package:jj_mkvmaker/core/encode_options.dart'; import 'package:jj_mkvmaker/core/models.dart'; import 'package:jj_mkvmaker/core/output_paths.dart'; import 'package:jj_mkvmaker/core/srt.dart'; +import 'package:jj_mkvmaker/l10n/tr.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/ai_services.dart'; @@ -404,28 +406,37 @@ void main() { d.dispose(); }); - testWidgets('246: 폰 가로 (약 800×411) 다운로드 화면 - 버튼 줄의 글이 잘리거나 "전체 선택" 과 겹치지 않는다', (tester) async { - tester.view.physicalSize = const Size(800, 411); - tester.view.devicePixelRatio = 1; - addTearDown(tester.view.reset); - final s = AppSettings(); - final d = DownloadManager(backends: [_Backend()], settings: () => s, readClipboard: () async => null); - addTearDown(d.dispose); - d.addToEditList = (files) async => files.length; - d.setAutoAdd = (on) async => s.addFinishedDownloads = on; - d.addPage('https://vimeo.com/1')!.title = '영상'; - await tester.pumpWidget(MaterialApp(home: DownloadsPage(d: d))); - await tester.pump(); - expect(tester.takeException(), isNull); - final all = tester.getRect(find.text('전체 선택')); - final auto = tester.getRect(find.text('완료 시 자동 동영상 추가')); - expect(auto.overlaps(all), isFalse, reason: '$auto · $all'); - expect([auto.left >= 0, auto.right <= 800], [true, true], reason: '화면 안에 다 보임 $auto'); - for (final t in ['일시정지', '재개', '다운로드 취소', '삭제', '완료 정리']) { - final r = tester.getRect(find.text(t).first); - expect([r.left >= 0, r.right <= 800], [true, true], reason: '$t $r'); + // 246 · P11 확인 (921): 영어 · 일본어는 글이 길어 체크가 아예 안 보였다 - 언어 · 폭마다 + for (final lang in ['ko', 'en', 'ja']) { + for (final w in [800.0, 1200.0]) { + testWidgets('246: 다운로드 화면 ($lang, 폭 $w) - 버튼 줄의 글이 잘리거나 "전체 선택" 과 겹치지 않는다', (tester) async { + Map dict(String code) => + Map.from(jsonDecode(File('assets/l10n/$code.json').readAsStringSync()) as Map); + setTranslations(lang, lang == 'ko' ? const {} : dict(lang), lang == 'ko' ? const {} : dict('en')); + addTearDown(() => setTranslations('ko', const {})); + tester.view.physicalSize = Size(w, 411); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.reset); + final s = AppSettings(); + final d = DownloadManager(backends: [_Backend()], settings: () => s, readClipboard: () async => null); + addTearDown(d.dispose); + d.addToEditList = (files) async => files.length; + d.setAutoAdd = (on) async => s.addFinishedDownloads = on; + d.addPage('https://vimeo.com/1')!.title = '영상'; + await tester.pumpWidget(MaterialApp(home: DownloadsPage(d: d))); + await tester.pump(); + expect(tester.takeException(), isNull); + final all = tester.getRect(find.text(tr('전체 선택'))); + final auto = tester.getRect(find.text(tr('완료 시 자동 동영상 추가'))); + expect(auto.overlaps(all), isFalse, reason: '$auto · $all'); + expect([auto.left >= 0, auto.right <= w], [true, true], reason: '화면 안에 다 보임 $auto'); + for (final t in ['일시정지', '재개', '다운로드 취소', '삭제', '완료 정리']) { + final r = tester.getRect(find.text(tr(t)).first); + expect([r.left >= 0, r.right <= w], [true, true], reason: '$t $r'); + } + }); } - }); + } testWidgets('환경 설정 · 종료 버튼: 모든 화면에서 같은 자리', (tester) async { tester.view.physicalSize = const Size(1500, 900);