WIP 화면 캡처에서 찾은 것: 85 멈춤 표시는 경고 아이콘 · 78 이름 일괄 창의 칸 이름을 짧게 (폭 412 일본어 잘림) (검토 대기)

- 85: 멈춘 (실패한) 작은 표시가 꽉 찬 진행 고리라 "끝났다" 로 보였다 → 빨간 경고 아이콘.
- 78: 폭 412 · 일본어에서 "名前の形式 (拡張子は…" · "置き換える文字 (空なら…" 로 칸 이름이 잘렸다 →
  이름은 "이름 틀" · "바꿀 글" 로 짧게, "확장자는 그대로" 는 아래 설명 줄 (2줄까지), "비우면 지움" 은 칸 안 안내로.
- 내 판단 (화면 캡처를 보고 고침, 동작은 같음).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
묶음6
RyuJongJin 2026-10-17 15:39:00 +09:00
parent 3b6d50f409
commit dc8a5f0b56
7 changed files with 28 additions and 10 deletions

View File

@ -374,6 +374,7 @@
"ZIP 이 있는 폴더로": "To the ZIP's folder",
"ZIP 이름": "ZIP name",
"[N] 원래 이름 · [C] 번호 예: Show S01E[C]": "[N] original name · [C] counter e.g. Show S01E[C]",
"[N] 원래 이름 · [C] 번호 · 확장자는 그대로 예: Show S01E[C]": "[N] original name · [C] counter · extension kept e.g. Show S01E[C]",
"[서버 설정 고치기] 에서 비밀번호를 넣으면 이 기기의 안전 저장소에 남아 다음부터는 다시 넣지 않아도 됩니다.": "Enter the password in [Edit server settings]. It is kept in this device's secure storage, so you won't need to enter it again.",
"[서버 설정 고치기] 에서 아이디 · 비밀번호를 확인하세요.": "Check the user name and password in [Edit server settings].",
"[허용] 을 누르면 Android 설정이 열립니다. JJ_MKVMaker 를 허용하고 돌아오면, 읽지 못했던 동영상을 저절로 다시 분석합니다.": "Tap [Allow] to open Android settings. After you allow JJ_MKVMaker and come back, videos that couldn't be read are analyzed again automatically.",
@ -1131,6 +1132,7 @@
"바꾸는 정도 {0}%": "Change amount {0}%",
"바꾸면 바로 저장됩니다": "Saved automatically",
"바꾼 것이 없습니다 (원본 그대로)": "Nothing changed (original as is)",
"바꿀 글": "Replace with",
"바꿀 글 (비우면 지움)": "Replace with (empty = remove)",
"바뀌는 것 {0}개": "{0} will change",
"바뀌는 것 없음 (양쪽이 같습니다)": "Nothing to change (both sides are the same)",
@ -1304,6 +1306,7 @@
"비어 있는 폴더": "Empty folder",
"비어 있는 폴더입니다.\n위의 [즐겨찾기 추가] · [새 폴더] 를 누르거나, 즐겨찾기를 왼쪽 폴더로 끌어다 놓으세요.": "This folder is empty.\nPress [Add bookmark] · [New folder] above, or drag bookmarks onto a folder on the left.",
"비어 있음": "Empty",
"비우면 지움": "Empty = remove",
"빈 이름": "Empty name",
"빈 폴더 {0}개 지움": "Deleted {0} empty folders",
"빈 폴더 그대로": "Leave empty folders",
@ -1855,6 +1858,7 @@
"이름 바꾸기 · 이동": "Rename · move",
"이름 변경": "Rename",
"이름 일괄 바꾸기 · {0}개": "Batch rename · {0} items",
"이름 틀": "Name pattern",
"이름 틀 (확장자는 그대로)": "Name pattern (extension kept)",
"이름을 바꿀 수 없습니다: {0}": "Cannot rename: {0}",
"이름을 바꿀 항목 하나를 고르세요.": "Choose one item to rename.",

View File

@ -374,6 +374,7 @@
"ZIP 이 있는 폴더로": "ZIP のあるフォルダーへ",
"ZIP 이름": "ZIP の名前",
"[N] 원래 이름 · [C] 번호 예: Show S01E[C]": "[N] 元の名前 · [C] 番号 例: Show S01E[C]",
"[N] 원래 이름 · [C] 번호 · 확장자는 그대로 예: Show S01E[C]": "[N] 元の名前 · [C] 番号 · 拡張子はそのまま 例: Show S01E[C]",
"[서버 설정 고치기] 에서 비밀번호를 넣으면 이 기기의 안전 저장소에 남아 다음부터는 다시 넣지 않아도 됩니다.": "[サーバー設定を修正] でパスワードを入力すると、この端末の安全な保存領域に残り、次回からは入力不要です。",
"[서버 설정 고치기] 에서 아이디 · 비밀번호를 확인하세요.": "[サーバー設定を修正] でユーザー名・パスワードを確認してください。",
"[허용] 을 누르면 Android 설정이 열립니다. JJ_MKVMaker 를 허용하고 돌아오면, 읽지 못했던 동영상을 저절로 다시 분석합니다.": "[許可] を押すと Android の設定が開きます。JJ_MKVMaker を許可して戻ると、読み取れなかった動画を自動的に再分析します。",
@ -1131,6 +1132,7 @@
"바꾸는 정도 {0}%": "変える度合い {0}%",
"바꾸면 바로 저장됩니다": "変更するとすぐ保存されます",
"바꾼 것이 없습니다 (원본 그대로)": "変更なし(元のまま)",
"바꿀 글": "置き換える文字",
"바꿀 글 (비우면 지움)": "置き換える文字 (空なら削除)",
"바뀌는 것 {0}개": "変更されるもの {0} 件",
"바뀌는 것 없음 (양쪽이 같습니다)": "変更なし (両方同じです)",
@ -1304,6 +1306,7 @@
"비어 있는 폴더": "空のフォルダー",
"비어 있는 폴더입니다.\n위의 [즐겨찾기 추가] · [새 폴더] 를 누르거나, 즐겨찾기를 왼쪽 폴더로 끌어다 놓으세요.": "空のフォルダーです。\n上の[ブックマーク追加]・[新しいフォルダー]を押すか、ブックマークを左のフォルダーにドラッグしてください。",
"비어 있음": "空",
"비우면 지움": "空なら削除",
"빈 이름": "空の名前",
"빈 폴더 {0}개 지움": "空フォルダー {0} 個を削除",
"빈 폴더 그대로": "空フォルダーはそのまま",
@ -1855,6 +1858,7 @@
"이름 바꾸기 · 이동": "名前の変更・移動",
"이름 변경": "名前の変更",
"이름 일괄 바꾸기 · {0}개": "名前の一括変更 · {0} 件",
"이름 틀": "名前の形式",
"이름 틀 (확장자는 그대로)": "名前の形式 (拡張子はそのまま)",
"이름을 바꿀 수 없습니다: {0}": "名前を変更できません: {0}",
"이름을 바꿀 항목 하나를 고르세요.": "名前を変更する項目を 1 つ選んでください。",

View File

@ -374,6 +374,7 @@
"ZIP 이 있는 폴더로": "到 ZIP 所在文件夹",
"ZIP 이름": "ZIP 名称",
"[N] 원래 이름 · [C] 번호 예: Show S01E[C]": "[N] 原名称 · [C] 序号 例如: Show S01E[C]",
"[N] 원래 이름 · [C] 번호 · 확장자는 그대로 예: Show S01E[C]": "[N] 原名称 · [C] 序号 · 保留扩展名 例如: Show S01E[C]",
"[서버 설정 고치기] 에서 비밀번호를 넣으면 이 기기의 안전 저장소에 남아 다음부터는 다시 넣지 않아도 됩니다.": "在 [修改服务器设置] 中输入密码后会保存在本设备的安全存储中,以后无需再次输入。",
"[서버 설정 고치기] 에서 아이디 · 비밀번호를 확인하세요.": "请在 [修改服务器设置] 中检查用户名和密码。",
"[허용] 을 누르면 Android 설정이 열립니다. JJ_MKVMaker 를 허용하고 돌아오면, 읽지 못했던 동영상을 저절로 다시 분석합니다.": "点按 [允许] 将打开 Android 设置。允许 JJ_MKVMaker 后返回,无法读取的视频会自动重新分析。",
@ -1131,6 +1132,7 @@
"바꾸는 정도 {0}%": "改变程度 {0}%",
"바꾸면 바로 저장됩니다": "更改后立即保存",
"바꾼 것이 없습니다 (원본 그대로)": "未做更改(保持原样)",
"바꿀 글": "替换为",
"바꿀 글 (비우면 지움)": "替换为 (留空则删除)",
"바뀌는 것 {0}개": "将更改 {0} 个",
"바뀌는 것 없음 (양쪽이 같습니다)": "没有更改 (两边相同)",
@ -1304,6 +1306,7 @@
"비어 있는 폴더": "空文件夹",
"비어 있는 폴더입니다.\n위의 [즐겨찾기 추가] · [새 폴더] 를 누르거나, 즐겨찾기를 왼쪽 폴더로 끌어다 놓으세요.": "这是空文件夹。\n请点击上方的[添加书签] · [新建文件夹],或将书签拖到左侧文件夹。",
"비어 있음": "空",
"비우면 지움": "留空则删除",
"빈 이름": "空名称",
"빈 폴더 {0}개 지움": "已删除 {0} 个空文件夹",
"빈 폴더 그대로": "保留空文件夹",
@ -1855,6 +1858,7 @@
"이름 바꾸기 · 이동": "重命名 · 移动",
"이름 변경": "重命名",
"이름 일괄 바꾸기 · {0}개": "批量重命名 · {0} 项",
"이름 틀": "名称模式",
"이름 틀 (확장자는 그대로)": "名称模式 (保留扩展名)",
"이름을 바꿀 수 없습니다: {0}": "无法重命名: {0}",
"이름을 바꿀 항목 하나를 고르세요.": "请选择一个要重命名的项目。",

View File

@ -143,8 +143,10 @@ class _BatchRenameDialogState extends State<_BatchRenameDialog> {
controller: _template,
enabled: !_running,
decoration: InputDecoration(
labelText: tr('이름 틀 (확장자는 그대로)'),
helperText: tr('[N] 원래 이름 · [C] 번호 예: Show S01E[C]'),
// 폭 412 에서 긴 이름이 잘려 (일본어) 이름은 짧게, 설명은 아래 줄에
labelText: tr('이름 틀'),
helperText: tr('[N] 원래 이름 · [C] 번호 · 확장자는 그대로 예: Show S01E[C]'),
helperMaxLines: 2,
isDense: true,
),
onChanged: (_) => setState(() {}),
@ -187,7 +189,7 @@ class _BatchRenameDialogState extends State<_BatchRenameDialog> {
child: TextField(
controller: _replace,
enabled: !_running,
decoration: InputDecoration(labelText: tr('바꿀 글 (비우면 지움)'), isDense: true),
decoration: InputDecoration(labelText: tr('바꿀 글'), hintText: tr('비우면 지움'), isDense: true),
onChanged: (_) => setState(() {}),
),
),

View File

@ -4739,11 +4739,15 @@ class TransferProgressChip extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisSize: MainAxisSize.min, children: [
SizedBox(
width: 14,
height: 14,
child: CircularProgressIndicator(strokeWidth: 2, value: running == 0 ? 1 : (percent == null ? null : percent! / 100)),
),
// 멈춤은 진행 고리 대신 경고 표시 (꽉 찬 고리는 "끝났다" 로 보였다)
if (failed)
const Icon(Icons.error_outline, size: 16, color: JjColors.danger)
else
SizedBox(
width: 14,
height: 14,
child: CircularProgressIndicator(strokeWidth: 2, value: running == 0 ? 1 : (percent == null ? null : percent! / 100)),
),
const SizedBox(width: 8),
Text(
failed

View File

@ -151,7 +151,7 @@ void main() {
expect(find.text('이름 일괄 바꾸기 · 2개'), findsOneWidget);
expect(find.text('바뀌는 것 0개'), findsOneWidget);
await tester.enterText(find.widgetWithText(TextField, '이름 틀 (확장자는 그대로)'), 'Show [C]');
await tester.enterText(find.widgetWithText(TextField, '이름 틀'), 'Show [C]');
await tester.pump();
// 첫 번째가 Show 01.mkv - 고르지 않은 파일과 겹친다
expect(find.textContaining('같은 이름이 이미 있음'), findsOneWidget);

View File

@ -887,7 +887,7 @@ void main() {
await act(tester, () => tester.tap(markOf('b.txt')));
await act(tester, () => tester.tap(find.text('이름 변경').first));
await settle(tester, () => find.text('바뀌는 것 0개').evaluate().isNotEmpty);
await tester.enterText(find.widgetWithText(TextField, '이름 틀 (확장자는 그대로)'), 'Ep[C]');
await tester.enterText(find.widgetWithText(TextField, '이름 틀'), 'Ep[C]');
await tester.pump();
await act(tester, () => tester.tap(find.widgetWithText(FilledButton, '바꾸기 (2개)')));
// 알림은 목록을 다시 읽은 뒤에 뜬다 - 알림까지 기다린다 (PC 가 바쁠 때 한 번 흔들림)