diff --git a/assets/l10n/en.json b/assets/l10n/en.json index 0552a52..769c83b 100644 --- a/assets/l10n/en.json +++ b/assets/l10n/en.json @@ -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.", diff --git a/assets/l10n/ja.json b/assets/l10n/ja.json index d7412a5..cdbc1dd 100644 --- a/assets/l10n/ja.json +++ b/assets/l10n/ja.json @@ -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 つ選んでください。", diff --git a/assets/l10n/zh-Hans.json b/assets/l10n/zh-Hans.json index 4640212..8eb62c4 100644 --- a/assets/l10n/zh-Hans.json +++ b/assets/l10n/zh-Hans.json @@ -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}", "이름을 바꿀 항목 하나를 고르세요.": "请选择一个要重命名的项目。", diff --git a/lib/ui/batch_rename_dialog.dart b/lib/ui/batch_rename_dialog.dart index a180b18..8d64eef 100644 --- a/lib/ui/batch_rename_dialog.dart +++ b/lib/ui/batch_rename_dialog.dart @@ -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(() {}), ), ), diff --git a/lib/ui/explorer_page.dart b/lib/ui/explorer_page.dart index 4bf38d3..3667cb9 100644 --- a/lib/ui/explorer_page.dart +++ b/lib/ui/explorer_page.dart @@ -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 diff --git a/test/batch_rename_test.dart b/test/batch_rename_test.dart index 08347ad..f6e2134 100644 --- a/test/batch_rename_test.dart +++ b/test/batch_rename_test.dart @@ -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); diff --git a/test/explorer_test.dart b/test/explorer_test.dart index b5de30c..da0ed0e 100644 --- a/test/explorer_test.dart +++ b/test/explorer_test.dart @@ -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 가 바쁠 때 한 번 흔들림)