diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0ff8666..981b355 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,13 +5,24 @@ on: tags: - '20*' workflow_dispatch: + inputs: + platform: + description: 'Platform to build' + required: true + default: 'all' + type: choice + options: + - all + - linux-android + - windows permissions: contents: write jobs: - build: + build-linux-android: runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' || inputs.platform == 'all' || inputs.platform == 'linux-android' }} steps: - uses: actions/checkout@v4 @@ -71,11 +82,74 @@ jobs: - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: release-artifacts + name: release-artifacts-linux-android path: release-artifacts/* + build-windows: + runs-on: windows-latest + if: ${{ github.event_name == 'push' || inputs.platform == 'all' || inputs.platform == 'windows' }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + + - name: Enable Windows Desktop + run: flutter config --enable-windows-desktop + + - name: Get Dependencies + run: flutter pub get + + - name: Build Windows Release + run: flutter build windows --release + + - name: Create MSIX + run: dart run msix:create --install-certificate false + + - name: Separate MSIX and Compress Windows Build + run: | + Move-Item -Path build/windows/x64/runner/Release/*.msix -Destination DailyAL-Windows-x64.msix + Compress-Archive -Path build/windows/x64/runner/Release/* -DestinationPath DailyAL-Windows-x64.zip + + - name: Generate SHA1 Checksums + run: | + Get-FileHash DailyAL-Windows-x64.zip -Algorithm SHA1 | Select-Object -ExpandProperty Hash > DailyAL-Windows-x64.zip.sha1 + Get-FileHash DailyAL-Windows-x64.msix -Algorithm SHA1 | Select-Object -ExpandProperty Hash > DailyAL-Windows-x64.msix.sha1 + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: release-artifacts-windows + path: | + DailyAL-Windows-x64.msix + DailyAL-Windows-x64.msix.sha1 + DailyAL-Windows-x64.zip + DailyAL-Windows-x64.zip.sha1 + + release: + needs: [build-linux-android, build-windows] + runs-on: ubuntu-latest + if: ${{ always() && startsWith(github.ref, 'refs/tags/20') }} + + steps: + - name: Download Linux/Android Artifacts + if: ${{ needs.build-linux-android.result == 'success' }} + uses: actions/download-artifact@v4 + with: + name: release-artifacts-linux-android + path: release-artifacts + + - name: Download Windows Artifacts + if: ${{ needs.build-windows.result == 'success' }} + uses: actions/download-artifact@v4 + with: + name: release-artifacts-windows + path: release-artifacts + - name: Create Release - if: startsWith(github.ref, 'refs/tags/20') uses: softprops/action-gh-release@v1 with: files: | @@ -83,3 +157,7 @@ jobs: release-artifacts/app-release.apk.sha1 release-artifacts/DailyAL-x86_64.AppImage release-artifacts/DailyAL-x86_64.AppImage.sha1 + release-artifacts/DailyAL-Windows-x64.msix + release-artifacts/DailyAL-Windows-x64.msix.sha1 + release-artifacts/DailyAL-Windows-x64.zip + release-artifacts/DailyAL-Windows-x64.zip.sha1 diff --git a/.metadata b/.metadata index 0691157..08c2478 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "9f455d2486bcb28cad87b062475f42edc959f636" + revision: "3b62efc2a3da49882f43c372e0bc53daef7295a6" channel: "stable" project_type: app @@ -13,11 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 9f455d2486bcb28cad87b062475f42edc959f636 - base_revision: 9f455d2486bcb28cad87b062475f42edc959f636 + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 - platform: android - create_revision: 9f455d2486bcb28cad87b062475f42edc959f636 - base_revision: 9f455d2486bcb28cad87b062475f42edc959f636 + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + - platform: ios + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + - platform: linux + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + - platform: macos + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + - platform: web + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + - platform: windows + create_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 + base_revision: 3b62efc2a3da49882f43c372e0bc53daef7295a6 # User provided section diff --git a/android/app/src/main/kotlin/io/github/dailyanimelist/MainActivity.kt b/android/app/src/main/kotlin/io/github/dailyanimelist/MainActivity.kt new file mode 100644 index 0000000..786741e --- /dev/null +++ b/android/app/src/main/kotlin/io/github/dailyanimelist/MainActivity.kt @@ -0,0 +1,5 @@ +package io.github.dailyanimelist + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/cache/cachemanager.dart b/lib/cache/cachemanager.dart index 9a763e0..974f0d8 100644 --- a/lib/cache/cachemanager.dart +++ b/lib/cache/cachemanager.dart @@ -126,18 +126,38 @@ class CacheManager { Future getBackUpData() async { final pref = await _pref; final allData = {}; - final keys = [ + + // Fixed keys that should always be backed up + final fixedKeys = [ 'user', StreamUtils.i.key(StreamType.book_marks), '${UserContentBuilder.serviceName} - anime-@me', '${UserContentBuilder.serviceName} - manga-@me', ]; - for (var key in keys) { + + // Get all keys from SharedPreferences + final allKeys = pref.getKeys(); + + // Combine fixed keys with dynamic private notes + final keysToBackup = {...fixedKeys}; + + // Add all private note keys + for (var key in allKeys) { + // The key format in setValueForService is "$serviceName - $key" + // So for 'private_note', it is "private_note - 123" + if (key.startsWith('private_note - ')) { + keysToBackup.add(key); + } + } + + // Collect data for all keys + for (var key in keysToBackup) { String? data = pref.get(key)?.toString(); if (data != null) { allData[key] = data; } } + return jsonEncode(allData); } diff --git a/lib/constant.dart b/lib/constant.dart index 95c109e..2eb6441 100644 --- a/lib/constant.dart +++ b/lib/constant.dart @@ -1067,25 +1067,28 @@ Future showContentEditSheet( return showCupertinoDialog( context: context, barrierDismissible: true, - builder: (context) => AnimatedPadding( - padding: MediaQuery.of(context).viewInsets, - duration: const Duration(milliseconds: 100), - curve: Curves.decelerate, - child: ContentEditWidget( - category: category, - showAdditional: true, - contentDetailed: content, - isCacheRefreshed: true, - updateCache: updateCache, - onDelete: () { - if (onDelete != null) onDelete(); - }, - onListStatusChange: (status) { - if (onListStatusChange != null) onListStatusChange(status); - }, - onUpdate: (value) { - if (onUpdate != null) onUpdate(value); - }, + builder: (context) => Scaffold( + backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: true, + body: GestureDetector( + onTap: () => Navigator.pop(context), + behavior: HitTestBehavior.opaque, + child: ContentEditWidget( + category: category, + showAdditional: true, + contentDetailed: content, + isCacheRefreshed: true, + updateCache: updateCache, + onDelete: () { + if (onDelete != null) onDelete(); + }, + onListStatusChange: (status) { + if (onListStatusChange != null) onListStatusChange(status); + }, + onUpdate: (value) { + if (onUpdate != null) onUpdate(value); + }, + ), ), )); } diff --git a/lib/generated/intl/messages_ar_EG.dart b/lib/generated/intl/messages_ar_EG.dart index 9380704..0fc63cc 100644 --- a/lib/generated/intl/messages_ar_EG.dart +++ b/lib/generated/intl/messages_ar_EG.dart @@ -197,6 +197,7 @@ class MessageLookup extends MessageLookupByLibrary { "دعم تطوير هذا التطبيق هنا", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("تقويم"), "Cancel": MessageLookupByLibrary.simpleMessage("يلغي"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "تم إلغاء الاستعادة", @@ -378,6 +379,7 @@ class MessageLookup extends MessageLookupByLibrary { "هل ترغب في تسجيل الخروج؟", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("طريقة الاتجاه"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("تحميل .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "اسحب الحقل أو استخدم مفاتيح الأسهم لتحريك الحقل", ), @@ -443,6 +445,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "خطأ في إضافة حدث إلى التقويم", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "خطأ في حفظ الملف!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "حدث خطأ أثناء إزالة الصورة", ), @@ -493,6 +498,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("أنثى"), "Figures": MessageLookupByLibrary.simpleMessage("الأرقام"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "تم حفظ الملف في مجلد التنزيل!", + ), "Filter": MessageLookupByLibrary.simpleMessage("منقي"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "سيتم استخدام هذه المرشحات عند إجراء البحث التالي", @@ -1056,6 +1064,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "ما هو مستوى أولويتك لمشاهدة / قراءة هذا؟", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("ملاحظة خاصة"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "يتم حفظها محليًا، ولن يتم إرسالها إلى الخوادم أبدًا", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "اكتب ملاحظتك الخاصة هنا...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "هذه الملاحظة محلية فقط ولن يتمت مزامنتها.", + ), "Profile": MessageLookupByLibrary.simpleMessage("الملف الشخصي"), "Profile_Page": MessageLookupByLibrary.simpleMessage("الصفحة الشخصية"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1191,6 +1209,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sci_fi": MessageLookupByLibrary.simpleMessage("SCI-FI."), "Score": MessageLookupByLibrary.simpleMessage("نتيجة"), "Score_Distribution": MessageLookupByLibrary.simpleMessage("توزيع النتيجة"), + "Score_Stats": MessageLookupByLibrary.simpleMessage("إحصائيات النتيجة"), "Screening": MessageLookupByLibrary.simpleMessage("تحري"), "Search": MessageLookupByLibrary.simpleMessage("يبحث"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1270,6 +1289,7 @@ class MessageLookup extends MessageLookupByLibrary { "ضبط مهلة.حاول مرة اخرى.", ), "Share": MessageLookupByLibrary.simpleMessage("يشارك"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("مشاركة .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("شوجو"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "يجب أن تكون أبجدية رقمية", @@ -1298,7 +1318,16 @@ class MessageLookup extends MessageLookupByLibrary { "Show_Original": MessageLookupByLibrary.simpleMessage( "إظهار النسخة الأصلية", ), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "إظهار الملاحظة الخاصة", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "إظهار حقل الملاحظة الخاصة في شاشة التحرير", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("عرض المفسد"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "إظهار حالة الدبلجة (الإنجليزية) لأنيمي في القائمة", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "إظهار الأولوية في قائمة أنيمي / مانغا", ), @@ -1538,6 +1567,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("لعبة فيديو"), "Videos": MessageLookupByLibrary.simpleMessage("أشرطة فيديو"), "View_All": MessageLookupByLibrary.simpleMessage("عرض الكل"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "عرض الرسم البياني أنيمي / مانغا ذات الصلة", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "عرض جميع المناقشات", ), diff --git a/lib/generated/intl/messages_de_DE.dart b/lib/generated/intl/messages_de_DE.dart index 6c8eb9e..a8e2c0c 100644 --- a/lib/generated/intl/messages_de_DE.dart +++ b/lib/generated/intl/messages_de_DE.dart @@ -215,6 +215,7 @@ class MessageLookup extends MessageLookupByLibrary { "Unterstütze die Entwicklung dieser App hier", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Kalender"), "Cancel": MessageLookupByLibrary.simpleMessage("Abbrechen"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Wiederherstellung abgebrochen", @@ -418,6 +419,9 @@ class MessageLookup extends MessageLookupByLibrary { "Möchten Sie mich abmelden?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Richtungsart"), + "Download_ICS": MessageLookupByLibrary.simpleMessage( + "Laden Sie .ics herunter", + ), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Ziehen Sie das Feld oder verwenden Sie die Pfeiltasten, um das Feld zu verschieben", ), @@ -487,6 +491,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Fehler beim Addieren von Ereignissen zum Kalender", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Fehler beim Speichern der Datei!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Fehler beim Entfernen des Bildes", ), @@ -539,6 +546,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Weiblich"), "Figures": MessageLookupByLibrary.simpleMessage("Zahlen"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "Datei im Download-Ordner gespeichert!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filter"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Diese Filter werden verwendet, wenn Sie Ihre nächste Suche durchführen", @@ -1130,6 +1140,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Was ist Ihr Prioritätsniveau, um dies zu sehen / zu lesen?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Private Notiz"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Lokal gespeichert, wird nie an Server gesendet", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Schreiben Sie hier Ihre private Notiz...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Diese Notiz ist nur lokal und wird nicht synchronisiert.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Profil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Profilseite"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1275,6 +1295,7 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Punkteverteilung", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage("Punktestatistiken"), "Screening": MessageLookupByLibrary.simpleMessage("Screening."), "Search": MessageLookupByLibrary.simpleMessage("Suchen"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1366,6 +1387,7 @@ class MessageLookup extends MessageLookupByLibrary { "Setup zeitlich herausgestellt.Bitte versuche es erneut.", ), "Share": MessageLookupByLibrary.simpleMessage("Teilen"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Teilen Sie .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Sollte alphanumerisch sein", @@ -1392,7 +1414,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Zeige das Menü"), "Show_Original": MessageLookupByLibrary.simpleMessage("Original zeigen"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Private Notiz anzeigen", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Privates Notizfeld im Bearbeitungsbildschirm anzeigen", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Spoiler zeigen"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Dub-Status (Englisch) eines Animes in der Liste anzeigen", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Priorität in Anime / Manga-Liste anzeigen", ), @@ -1571,7 +1602,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "Top_Manga": MessageLookupByLibrary.simpleMessage("Top Manga"), "Top_Manga_Bypopularity": MessageLookupByLibrary.simpleMessage( - "Top Manga Bypopularity.", + "Top Manga nach Popularität", ), "Top_Manhua": MessageLookupByLibrary.simpleMessage("Top Mannblume."), "Top_Manhwa": MessageLookupByLibrary.simpleMessage("Top Manhwa"), @@ -1648,6 +1679,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Videospiel"), "Videos": MessageLookupByLibrary.simpleMessage("Videos"), "View_All": MessageLookupByLibrary.simpleMessage("Alle ansehen"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Zugehöriges Anime-/Manga-Diagramm anzeigen", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Alle Diskussionen anzeigen.", ), diff --git a/lib/generated/intl/messages_en_US.dart b/lib/generated/intl/messages_en_US.dart index 2fb970e..a252470 100644 --- a/lib/generated/intl/messages_en_US.dart +++ b/lib/generated/intl/messages_en_US.dart @@ -397,6 +397,7 @@ class MessageLookup extends MessageLookupByLibrary { "Do you wish to logout?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Doujunshi"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Download .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Drag the field or use arrow keys to move the field", ), @@ -466,6 +467,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Error adding event to calendar", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Error saving file!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Error removing image", ), @@ -518,6 +522,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Female"), "Figures": MessageLookupByLibrary.simpleMessage("Figures"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "File saved to download folder!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filter"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "These filters will be used when you do your next search", @@ -1073,6 +1080,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "What is your priority level to watch/read this?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Private Note"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Saved locally, never sent to servers", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Write your private note here...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "This note is local only and won\'t be synced.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Profile"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Profile Page"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1206,6 +1223,7 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Score Distribution", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage("Score Stats"), "Screening": MessageLookupByLibrary.simpleMessage("Screening"), "Search": MessageLookupByLibrary.simpleMessage("Search"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1291,6 +1309,7 @@ class MessageLookup extends MessageLookupByLibrary { "Setup Timed out. Please try again.", ), "Share": MessageLookupByLibrary.simpleMessage("Share"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Share .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Should be alphanumeric", @@ -1317,6 +1336,12 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Show Menu"), "Show_Original": MessageLookupByLibrary.simpleMessage("Show Original"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Show Private Review", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Show private note field in the edit screen", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Show Spoiler"), "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( "Show dub (English) status of an anime in list", @@ -1487,7 +1512,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "Top_Manga": MessageLookupByLibrary.simpleMessage("Top Manga"), "Top_Manga_Bypopularity": MessageLookupByLibrary.simpleMessage( - "Top Manga Bypopularity", + "Top Manga by Popularity", ), "Top_Manhua": MessageLookupByLibrary.simpleMessage("Top Manhua"), "Top_Manhwa": MessageLookupByLibrary.simpleMessage("Top Manhwa"), diff --git a/lib/generated/intl/messages_es_ES.dart b/lib/generated/intl/messages_es_ES.dart index 74d7b6e..ceab83c 100644 --- a/lib/generated/intl/messages_es_ES.dart +++ b/lib/generated/intl/messages_es_ES.dart @@ -213,6 +213,7 @@ class MessageLookup extends MessageLookupByLibrary { "Apoye el desarrollo de esta aplicación aquí", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Calendario"), "Cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Restauración cancelada", @@ -420,6 +421,7 @@ class MessageLookup extends MessageLookupByLibrary { "¿Deseas cerrar sesión?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Forma de dirección"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Descargar .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Arrastre el campo o use las teclas de flecha para mover el campo", ), @@ -495,6 +497,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Error a agregar evento al calendario", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "¡Error al guardar el archivo!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Error al eliminar la imagen", ), @@ -549,6 +554,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Mujer"), "Figures": MessageLookupByLibrary.simpleMessage("Cifras"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "¡Archivo guardado en la carpeta de descargas!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filtrar"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Estos filtros se utilizarán cuando realice su próxima búsqueda.", @@ -1156,6 +1164,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "¿Cuál es su nivel de prioridad para ver / leer esto?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Nota Privada"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Guardado localmente, nunca se envía a los servidores", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Escribe tu nota privada aquí...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Esta nota es solo local y no se sincronizará.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Perfil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Página de perfil"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1297,6 +1315,9 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Distribución de puntuación", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage( + "Estadísticas de puntuación", + ), "Screening": MessageLookupByLibrary.simpleMessage("Poner en pantalla"), "Search": MessageLookupByLibrary.simpleMessage("Buscar"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1392,6 +1413,7 @@ class MessageLookup extends MessageLookupByLibrary { "Configuración programada.Inténtalo de nuevo.", ), "Share": MessageLookupByLibrary.simpleMessage("Cuota"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Compartir .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "debe ser alfanumérico", @@ -1418,7 +1440,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Muestrame el menu"), "Show_Original": MessageLookupByLibrary.simpleMessage("Mostrar original"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Mostrar Notas Privadas", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Mostrar el campo de notas privadas en la pantalla de edición", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Mostrar spoiler"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Mostrar el estado de doblaje (inglés) de un anime en la lista", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Mostrar prioridad en la lista de anime / manga", ), @@ -1686,6 +1717,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Videojuego"), "Videos": MessageLookupByLibrary.simpleMessage("Vídeos"), "View_All": MessageLookupByLibrary.simpleMessage("Ver todo"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Ver gráfico de anime/manga relacionado", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Ver todas las discusiones", ), diff --git a/lib/generated/intl/messages_fr_FR.dart b/lib/generated/intl/messages_fr_FR.dart index bbec63a..f5912ab 100644 --- a/lib/generated/intl/messages_fr_FR.dart +++ b/lib/generated/intl/messages_fr_FR.dart @@ -219,6 +219,7 @@ class MessageLookup extends MessageLookupByLibrary { "Soutenez le développement de cette application ici", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Calendrier"), "Cancel": MessageLookupByLibrary.simpleMessage("Annuler"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Restauration annulée", @@ -430,6 +431,7 @@ class MessageLookup extends MessageLookupByLibrary { "Souhaitez-vous vous déconnecter?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Façon de direction"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Télécharger .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Faites glisser le champ ou utilisez les touches fléchées pour déplacer le champ", ), @@ -507,6 +509,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Erreur d\'ajout d\'événement au calendrier", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Erreur lors de l\'enregistrement du fichier !", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Erreur lors de la suppression de l\'image", ), @@ -561,6 +566,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Femelle"), "Figures": MessageLookupByLibrary.simpleMessage("Les figures"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "Fichier enregistré dans le dossier de téléchargement !", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filtre"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Ces filtres seront utilisés lorsque vous faites votre prochaine recherche", @@ -1178,6 +1186,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Quel est votre niveau de priorité pour regarder / lire ceci?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Note privée"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Enregistré localement, jamais envoyé aux serveurs", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Écrivez votre note privée ici...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Cette note est locale uniquement et ne sera pas synchronisée.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Profil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Page de profil"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1323,6 +1341,9 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Répartition des scores", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage( + "Statistiques des scores", + ), "Screening": MessageLookupByLibrary.simpleMessage("Dépistage"), "Search": MessageLookupByLibrary.simpleMessage("Recherche"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1418,6 +1439,7 @@ class MessageLookup extends MessageLookupByLibrary { "Configuration expirée.Veuillez réessayer.", ), "Share": MessageLookupByLibrary.simpleMessage("Partager"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Partager .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Doit être alphanumérique", @@ -1446,7 +1468,16 @@ class MessageLookup extends MessageLookupByLibrary { "Show_Original": MessageLookupByLibrary.simpleMessage( "Montrer l\'original", ), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Afficher l\'avis privé", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Afficher le champ de note privée dans l\'écran d\'édition", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Show spoiler"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Afficher le statut de doublage (anglais) d\'un anime dans la liste", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Afficher la priorité dans la liste anime / manga", ), @@ -1698,6 +1729,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Jeu vidéo"), "Videos": MessageLookupByLibrary.simpleMessage("Vidéos"), "View_All": MessageLookupByLibrary.simpleMessage("Voir tout"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Voir le graphique anime/manga associé", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Voir toutes les discussions", ), diff --git a/lib/generated/intl/messages_id_ID.dart b/lib/generated/intl/messages_id_ID.dart index 71dee31..1a36ae7 100644 --- a/lib/generated/intl/messages_id_ID.dart +++ b/lib/generated/intl/messages_id_ID.dart @@ -205,6 +205,7 @@ class MessageLookup extends MessageLookupByLibrary { "Dukung pengembangan aplikasi ini di sini", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Kalender"), "Cancel": MessageLookupByLibrary.simpleMessage("Membatalkan"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Pemulihan Dibatalkan", @@ -402,6 +403,7 @@ class MessageLookup extends MessageLookupByLibrary { "Apakah Anda ingin keluar?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Cara arah"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Unduh .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Seret bidang atau gunakan tombol panah untuk memindahkan bidang", ), @@ -475,6 +477,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Kesalahan Menambahkan Acara ke Kalender", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Terjadi kesalahan saat menyimpan file!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Terjadi kesalahan saat menghapus gambar", ), @@ -527,6 +532,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Perempuan"), "Figures": MessageLookupByLibrary.simpleMessage("Angka"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "File disimpan ke folder unduhan!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Saring"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Filter ini akan digunakan ketika Anda melakukan pencarian berikutnya", @@ -1112,6 +1120,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Apa tingkat prioritas Anda untuk menonton / membaca ini?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Catatan Pribadi"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Disimpan secara lokal, tidak pernah dikirim ke server", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Tulis catatan pribadi Anda di sini...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Catatan ini hanya bersifat lokal dan tidak akan disinkronkan.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Profil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Halaman profil"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1253,6 +1271,7 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Distribusi Skor", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage("Statistik Skor"), "Screening": MessageLookupByLibrary.simpleMessage("Penyaringan"), "Search": MessageLookupByLibrary.simpleMessage("Mencari"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1334,6 +1353,7 @@ class MessageLookup extends MessageLookupByLibrary { "Pengaturan waktu habis.Silakan coba lagi.", ), "Share": MessageLookupByLibrary.simpleMessage("Membagikan"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Bagikan .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo."), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Harus alfanumerik", @@ -1362,7 +1382,16 @@ class MessageLookup extends MessageLookupByLibrary { "Show_Original": MessageLookupByLibrary.simpleMessage( "Menunjukkan yang asli", ), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Tampilkan Catatan Pribadi", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Tampilkan kolom catatan pribadi di layar edit", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Tampilkan Spoiler."), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Tampilkan status dubbing (Bahasa Inggris) suatu anime dalam daftar", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Tampilkan prioritas dalam daftar anime / manga", ), @@ -1616,6 +1645,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Video game"), "Videos": MessageLookupByLibrary.simpleMessage("Video"), "View_All": MessageLookupByLibrary.simpleMessage("Lihat semua"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Lihat grafik anime/manga terkait", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Lihat semua Diskusi", ), diff --git a/lib/generated/intl/messages_ja.dart b/lib/generated/intl/messages_ja.dart index 281b62f..7d11293 100644 --- a/lib/generated/intl/messages_ja.dart +++ b/lib/generated/intl/messages_ja.dart @@ -177,6 +177,7 @@ class MessageLookup extends MessageLookupByLibrary { "ここでこのアプリの開発をサポート", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("カレンダー"), "Cancel": MessageLookupByLibrary.simpleMessage("キャンセル"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage("キャンセルされた復元"), "Cannot_launch": MessageLookupByLibrary.simpleMessage("起動できません"), @@ -328,6 +329,7 @@ class MessageLookup extends MessageLookupByLibrary { "あなたはログアウトしたいですか?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("道順し"), + "Download_ICS": MessageLookupByLibrary.simpleMessage(".icsをダウンロード"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "フィールドをドラッグするか、矢印キーを使用してフィールドを移動します", ), @@ -393,6 +395,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "カレンダーにイベントを追加するエラー", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "ファイルの保存中にエラーが発生しました!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "画像の削除中にエラーが発生しました", ), @@ -443,6 +448,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("女性"), "Figures": MessageLookupByLibrary.simpleMessage("数字"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "ダウンロードフォルダにファイルが保存されました!", + ), "Filter": MessageLookupByLibrary.simpleMessage("フィルター"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "次回の検索が行われるときは、これらのフィルタが使用されます。", @@ -940,6 +948,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "これを見る/読むためのあなたの優先レベルは何ですか?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("プライベートノート"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "ローカルに保存され、サーバーには送信されません", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "ここにプライベートノートを書いてください...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "このノートはローカルのみであり、同期されません。", + ), "Profile": MessageLookupByLibrary.simpleMessage("プロフィール"), "Profile_Page": MessageLookupByLibrary.simpleMessage("自己紹介ページ"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1055,6 +1073,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sci_fi": MessageLookupByLibrary.simpleMessage("サイド"), "Score": MessageLookupByLibrary.simpleMessage("スコア"), "Score_Distribution": MessageLookupByLibrary.simpleMessage("スコア分布"), + "Score_Stats": MessageLookupByLibrary.simpleMessage("スコア統計"), "Screening": MessageLookupByLibrary.simpleMessage("ふるい分け"), "Search": MessageLookupByLibrary.simpleMessage("検索"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage("アニメ、マンガなどを検索"), @@ -1124,6 +1143,7 @@ class MessageLookup extends MessageLookupByLibrary { "セットアップがタイムアウトしました。もう一度やり直してください。", ), "Share": MessageLookupByLibrary.simpleMessage("シェア"), + "Share_ICS": MessageLookupByLibrary.simpleMessage(".icsを共有する"), "Shoujo": MessageLookupByLibrary.simpleMessage("千条"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "英数字である必要があります", @@ -1150,7 +1170,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("メニューを表示"), "Show_Original": MessageLookupByLibrary.simpleMessage("オリジナルを見せる"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "プライベートレビューを表示", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "編集画面にプライベートノートフィールドを表示する", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("スポイラーを見せる"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "アニメの吹き替え(英語)ステータスをリストに表示します", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "アニメ/マンガリストの優先順位を表示します", ), @@ -1355,6 +1384,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("テレビゲーム"), "Videos": MessageLookupByLibrary.simpleMessage("動画"), "View_All": MessageLookupByLibrary.simpleMessage("全体を見る"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "関連するアニメ/マンガのグラフを表示", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "すべてのディスカッションを表示します", ), diff --git a/lib/generated/intl/messages_ko_KR.dart b/lib/generated/intl/messages_ko_KR.dart index 65579e1..e901a50 100644 --- a/lib/generated/intl/messages_ko_KR.dart +++ b/lib/generated/intl/messages_ko_KR.dart @@ -169,6 +169,7 @@ class MessageLookup extends MessageLookupByLibrary { "여기에서 이 앱의 개발을 지원하세요.", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("달력"), "Cancel": MessageLookupByLibrary.simpleMessage("취소"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage("취소된 복원"), "Cannot_launch": MessageLookupByLibrary.simpleMessage("실행할 수 없음"), @@ -322,6 +323,7 @@ class MessageLookup extends MessageLookupByLibrary { "로그 아웃하고 싶습니까?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("방향의 방법"), + "Download_ICS": MessageLookupByLibrary.simpleMessage(".ics 다운로드"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "필드를 드래그하거나 화살표 키를 사용하여 필드를 이동하세요.", ), @@ -383,6 +385,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "캘린더에 이벤트를 추가하는 오류", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "파일을 저장하는 중에 오류가 발생했습니다.", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "이미지를 삭제하는 중에 오류가 발생했습니다.", ), @@ -433,6 +438,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("여자"), "Figures": MessageLookupByLibrary.simpleMessage("수치"), + "File_Saved": MessageLookupByLibrary.simpleMessage("다운로드 폴더에 파일이 저장되었습니다!"), "Filter": MessageLookupByLibrary.simpleMessage("필터"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "이 필터는 다음 검색을 수행 할 때 사용됩니다.", @@ -920,6 +926,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "이것을 보거나 읽을 우선 순위 수준은 무엇입니까?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("개인 메모"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "로컬에 저장되며 서버로 전송되지 않습니다.", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "여기에 개인 메모를 작성하세요...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "이 메모는 로컬 전용이며 동기화되지 않습니다.", + ), "Profile": MessageLookupByLibrary.simpleMessage("프로필"), "Profile_Page": MessageLookupByLibrary.simpleMessage("프로필 페이지"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1031,6 +1047,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sci_fi": MessageLookupByLibrary.simpleMessage("Sci-Fi"), "Score": MessageLookupByLibrary.simpleMessage("점수"), "Score_Distribution": MessageLookupByLibrary.simpleMessage("점수 분포"), + "Score_Stats": MessageLookupByLibrary.simpleMessage("점수 통계"), "Screening": MessageLookupByLibrary.simpleMessage("상영"), "Search": MessageLookupByLibrary.simpleMessage("찾다"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage("애니메이션, 만화 등 검색"), @@ -1098,6 +1115,7 @@ class MessageLookup extends MessageLookupByLibrary { "설정 시간이 초과되었습니다.다시 시도하십시오.", ), "Share": MessageLookupByLibrary.simpleMessage("공유하다"), + "Share_ICS": MessageLookupByLibrary.simpleMessage(".ics 공유"), "Shoujo": MessageLookupByLibrary.simpleMessage("쇼 조"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "영숫자여야 합니다.", @@ -1122,7 +1140,14 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("메뉴 보기"), "Show_Original": MessageLookupByLibrary.simpleMessage("원본보기"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage("개인 메모 표시"), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "편집 화면에서 개인 메모 필드를 표시합니다.", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("쇼 스포일러"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "목록에 있는 애니메이션의 더빙(영어) 상태 표시", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Anime / Manga 목록에서 우선 순위를 표시합니다", ), @@ -1331,6 +1356,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("비디오 게임"), "Videos": MessageLookupByLibrary.simpleMessage("비디오"), "View_All": MessageLookupByLibrary.simpleMessage("모두보기"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "관련 애니메이션/만화 그래프 보기", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage("모든 토론을 봅니다"), "Views": MessageLookupByLibrary.simpleMessage("견해"), "Visual_Arts": MessageLookupByLibrary.simpleMessage("시각예술"), diff --git a/lib/generated/intl/messages_pt_BR.dart b/lib/generated/intl/messages_pt_BR.dart index f66850c..d307b2a 100644 --- a/lib/generated/intl/messages_pt_BR.dart +++ b/lib/generated/intl/messages_pt_BR.dart @@ -213,6 +213,7 @@ class MessageLookup extends MessageLookupByLibrary { "Apoie o desenvolvimento deste aplicativo aqui", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Calendário"), "Cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Restauração cancelada", @@ -420,6 +421,7 @@ class MessageLookup extends MessageLookupByLibrary { "Você deseja fazer logout?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Maneira de direção"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Baixar .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Arraste o campo ou use as teclas de seta para movê-lo", ), @@ -495,6 +497,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Erro adicionando evento ao calendário", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Erro ao salvar o arquivo!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Erro ao remover imagem", ), @@ -549,6 +554,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Female"), "Figures": MessageLookupByLibrary.simpleMessage("Figuras"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "Arquivo salvo na pasta de download!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filtro"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Esses filtros serão usados quando você fizer sua próxima pesquisa", @@ -1162,6 +1170,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Qual é o seu nível de prioridade para assistir / ler isso?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Nota Privada"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Salvo localmente, nunca enviado para servidores", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Escreva sua nota privada aqui...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Esta nota é apenas local e não será sincronizada.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Perfil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Página de perfil"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1303,6 +1321,9 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Distribuição de pontuação", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage( + "Estatísticas de pontuação", + ), "Screening": MessageLookupByLibrary.simpleMessage("Triagem"), "Search": MessageLookupByLibrary.simpleMessage("Procurar"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1394,6 +1415,7 @@ class MessageLookup extends MessageLookupByLibrary { "Configuração expirou.Por favor, tente novamente.", ), "Share": MessageLookupByLibrary.simpleMessage("Compartilhar"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Compartilhe .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo."), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Deve ser alfanumérico", @@ -1420,7 +1442,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Mostrar Menu"), "Show_Original": MessageLookupByLibrary.simpleMessage("Mostrar original"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Mostrar Nota Privada", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Mostrar campo de nota privada na tela de edição", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Mostrar spoiler"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Mostrar status de dublagem (inglês) de um anime na lista", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Mostrar prioridade na lista de anime / mangá", ), @@ -1678,6 +1709,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Videogame"), "Videos": MessageLookupByLibrary.simpleMessage("Vídeos"), "View_All": MessageLookupByLibrary.simpleMessage("Ver tudo"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Ver gráfico de anime/mangá relacionado", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Ver todas as discussões", ), diff --git a/lib/generated/intl/messages_ru_RU.dart b/lib/generated/intl/messages_ru_RU.dart index 216a048..51c06f4 100644 --- a/lib/generated/intl/messages_ru_RU.dart +++ b/lib/generated/intl/messages_ru_RU.dart @@ -211,6 +211,7 @@ class MessageLookup extends MessageLookupByLibrary { "Поддержите разработку этого приложения здесь", ), "CGDCT": MessageLookupByLibrary.simpleMessage("КГДКТ"), + "Calendar": MessageLookupByLibrary.simpleMessage("Календарь"), "Cancel": MessageLookupByLibrary.simpleMessage("Отмена"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "Отменено восстановление", @@ -408,6 +409,7 @@ class MessageLookup extends MessageLookupByLibrary { "Вы хотите выйти из системы?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Как патрулировать"), + "Download_ICS": MessageLookupByLibrary.simpleMessage("Скачать .ics"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Перетащите поле или используйте клавиши со стрелками для перемещения поля.", ), @@ -483,6 +485,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Ошибка добавления события в календарь", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Ошибка сохранения файла!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Ошибка удаления изображения.", ), @@ -535,6 +540,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Женский"), "Figures": MessageLookupByLibrary.simpleMessage("Цифры"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "Файл сохранен в папке загрузки!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Фильтр"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Эти фильтры будут использоваться при следующем поиске.", @@ -1132,6 +1140,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Какой у вас приоритет при просмотре/чтении этого?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Личная заметка"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Сохранено локально, никогда не отправляется на серверы", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Напишите здесь свою личную заметку...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Эта заметка только локальная и не будет синхронизирована.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Профиль"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Страница профиля"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1277,6 +1295,7 @@ class MessageLookup extends MessageLookupByLibrary { "Score_Distribution": MessageLookupByLibrary.simpleMessage( "Распределение очков", ), + "Score_Stats": MessageLookupByLibrary.simpleMessage("Статистика очков"), "Screening": MessageLookupByLibrary.simpleMessage("Скрининг"), "Search": MessageLookupByLibrary.simpleMessage("Поиск"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1360,6 +1379,7 @@ class MessageLookup extends MessageLookupByLibrary { "Время установки истекло. Пожалуйста, попробуйте еще раз.", ), "Share": MessageLookupByLibrary.simpleMessage("Делиться"), + "Share_ICS": MessageLookupByLibrary.simpleMessage("Поделиться .ics"), "Shoujo": MessageLookupByLibrary.simpleMessage("Сёдзё"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Должно быть буквенно-цифровым", @@ -1386,7 +1406,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Показать меню"), "Show_Original": MessageLookupByLibrary.simpleMessage("Показать оригинал"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Показать личную заметку", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Показать поле личной заметки на экране редактирования", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Показать спойлер"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Показывать статус дубляжа (английского) аниме в списке", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Показывать приоритет в списке аниме/манги", ), @@ -1654,6 +1683,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Видео игра"), "Videos": MessageLookupByLibrary.simpleMessage("Видео"), "View_All": MessageLookupByLibrary.simpleMessage("Посмотреть все"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "Посмотреть связанный график аниме/манги", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Просмотреть все обсуждения", ), diff --git a/lib/generated/intl/messages_tr_TR.dart b/lib/generated/intl/messages_tr_TR.dart index aa51656..d18418b 100644 --- a/lib/generated/intl/messages_tr_TR.dart +++ b/lib/generated/intl/messages_tr_TR.dart @@ -211,6 +211,7 @@ class MessageLookup extends MessageLookupByLibrary { "Bu uygulamanın gelişimini buradan destekleyin", ), "CGDCT": MessageLookupByLibrary.simpleMessage("CGDCT"), + "Calendar": MessageLookupByLibrary.simpleMessage("Takvim"), "Cancel": MessageLookupByLibrary.simpleMessage("İptal etmek"), "Cancelled_Restore": MessageLookupByLibrary.simpleMessage( "İptal Edilen Geri Yükleme", @@ -402,6 +403,7 @@ class MessageLookup extends MessageLookupByLibrary { "Oturumu kapatmak istiyor musunuz?", ), "Doujunshi": MessageLookupByLibrary.simpleMessage("Devriye nasıl yapılır"), + "Download_ICS": MessageLookupByLibrary.simpleMessage(".ics\'i indirin"), "Drag_the_field": MessageLookupByLibrary.simpleMessage( "Alanı sürükleyin veya alanı taşımak için ok tuşlarını kullanın", ), @@ -473,6 +475,9 @@ class MessageLookup extends MessageLookupByLibrary { "Error_Adding_Event_To_Calendar": MessageLookupByLibrary.simpleMessage( "Takvime olay ekleme hatası", ), + "Error_Saving_File": MessageLookupByLibrary.simpleMessage( + "Dosya kaydedilirken hata oluştu!", + ), "Error_removing_image": MessageLookupByLibrary.simpleMessage( "Resim kaldırılırken hata oluştu", ), @@ -525,6 +530,9 @@ class MessageLookup extends MessageLookupByLibrary { ), "Female": MessageLookupByLibrary.simpleMessage("Dişi"), "Figures": MessageLookupByLibrary.simpleMessage("Rakamlar"), + "File_Saved": MessageLookupByLibrary.simpleMessage( + "Dosya indirme klasörüne kaydedildi!", + ), "Filter": MessageLookupByLibrary.simpleMessage("Filtre"), "Filter_After_search": MessageLookupByLibrary.simpleMessage( "Bir sonraki aramanızı yaptığınızda bu filtreler kullanılacaktır", @@ -1100,6 +1108,16 @@ class MessageLookup extends MessageLookupByLibrary { "Priority_level_qn": MessageLookupByLibrary.simpleMessage( "Bunu izlemek/okumak için öncelik düzeyiniz nedir?", ), + "Private_Note": MessageLookupByLibrary.simpleMessage("Özel Not"), + "Private_Note_Desc": MessageLookupByLibrary.simpleMessage( + "Yerel olarak kaydedilir, asla sunuculara gönderilmez", + ), + "Private_Note_Hint": MessageLookupByLibrary.simpleMessage( + "Özel notunuzu buraya yazın...", + ), + "Private_Note_Local_Only": MessageLookupByLibrary.simpleMessage( + "Bu not yalnızca yereldir ve senkronize edilmeyecektir.", + ), "Profile": MessageLookupByLibrary.simpleMessage("Profil"), "Profile_Page": MessageLookupByLibrary.simpleMessage("Profil sayfası"), "Profile_bg_removed": MessageLookupByLibrary.simpleMessage( @@ -1235,6 +1253,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sci_fi": MessageLookupByLibrary.simpleMessage("Bilim kurgu"), "Score": MessageLookupByLibrary.simpleMessage("Gol"), "Score_Distribution": MessageLookupByLibrary.simpleMessage("Puan Dağılımı"), + "Score_Stats": MessageLookupByLibrary.simpleMessage("Puan İstatistikleri"), "Screening": MessageLookupByLibrary.simpleMessage("Tarama"), "Search": MessageLookupByLibrary.simpleMessage("Aramak"), "SearchBarHintText": MessageLookupByLibrary.simpleMessage( @@ -1322,6 +1341,7 @@ class MessageLookup extends MessageLookupByLibrary { "Kurulum Zaman aşımına uğradı. Lütfen tekrar deneyin.", ), "Share": MessageLookupByLibrary.simpleMessage("Paylaşmak"), + "Share_ICS": MessageLookupByLibrary.simpleMessage(".ics\'i paylaşın"), "Shoujo": MessageLookupByLibrary.simpleMessage("Shoujo"), "Should_be_aplhanumeric": MessageLookupByLibrary.simpleMessage( "Alfasayısal olmalı", @@ -1348,7 +1368,16 @@ class MessageLookup extends MessageLookupByLibrary { ), "Show_Menu": MessageLookupByLibrary.simpleMessage("Menüyü göster"), "Show_Original": MessageLookupByLibrary.simpleMessage("Orjinali göster"), + "Show_Private_Review": MessageLookupByLibrary.simpleMessage( + "Özel Notu Göster", + ), + "Show_Private_Review_Desc": MessageLookupByLibrary.simpleMessage( + "Düzenleme ekranında özel not alanını göster", + ), "Show_Spoiler": MessageLookupByLibrary.simpleMessage("Spoiler\'ı Göster"), + "Show_dub_status_AnimeList_Desc": MessageLookupByLibrary.simpleMessage( + "Listede bir animenin dub (İngilizce) durumunu göster", + ), "Show_priority_in_anime_manga_list": MessageLookupByLibrary.simpleMessage( "Anime/manga listesinde önceliği göster", ), @@ -1608,6 +1637,9 @@ class MessageLookup extends MessageLookupByLibrary { "Video_Game": MessageLookupByLibrary.simpleMessage("Video oyunu"), "Videos": MessageLookupByLibrary.simpleMessage("Videolar"), "View_All": MessageLookupByLibrary.simpleMessage("Hepsini gör"), + "View_Related_Graph_Tooltip": MessageLookupByLibrary.simpleMessage( + "İlgili anime/manga grafiğini görüntüleyin", + ), "View_all_Discussions": MessageLookupByLibrary.simpleMessage( "Tüm Tartışmaları Görüntüle", ), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index daf4477..7bc5074 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -239,10 +239,10 @@ class S { return Intl.message('Top Manhua', name: 'Top_Manhua', desc: '', args: []); } - /// `Top Manga Bypopularity` + /// `Top Manga by Popularity` String get Top_Manga_Bypopularity { return Intl.message( - 'Top Manga Bypopularity', + 'Top Manga by Popularity', name: 'Top_Manga_Bypopularity', desc: '', args: [], @@ -321,12 +321,7 @@ class S { /// `Score Stats` String get Score_Stats { - return Intl.message( - 'Score Stats', - name: 'Score_Stats', - desc: '', - args: [], - ); + return Intl.message('Score Stats', name: 'Score_Stats', desc: '', args: []); } /// `Pictures` @@ -5764,6 +5759,41 @@ class S { ); } + /// `Download .ics` + String get Download_ICS { + return Intl.message( + 'Download .ics', + name: 'Download_ICS', + desc: '', + args: [], + ); + } + + /// `Share .ics` + String get Share_ICS { + return Intl.message('Share .ics', name: 'Share_ICS', desc: '', args: []); + } + + /// `File saved to download folder!` + String get File_Saved { + return Intl.message( + 'File saved to download folder!', + name: 'File_Saved', + desc: '', + args: [], + ); + } + + /// `Error saving file!` + String get Error_Saving_File { + return Intl.message( + 'Error saving file!', + name: 'Error_Saving_File', + desc: '', + args: [], + ); + } + /// `Discord Invite` String get DiscordInvite { return Intl.message( @@ -7613,6 +7643,66 @@ class S { String get Calendar { return Intl.message('Calendar', name: 'Calendar', desc: '', args: []); } + + /// `Private Note` + String get Private_Note { + return Intl.message( + 'Private Note', + name: 'Private_Note', + desc: '', + args: [], + ); + } + + /// `Show Private Review` + String get Show_Private_Review { + return Intl.message( + 'Show Private Review', + name: 'Show_Private_Review', + desc: '', + args: [], + ); + } + + /// `Show private note field in the edit screen` + String get Show_Private_Review_Desc { + return Intl.message( + 'Show private note field in the edit screen', + name: 'Show_Private_Review_Desc', + desc: '', + args: [], + ); + } + + /// `Saved locally, never sent to servers` + String get Private_Note_Desc { + return Intl.message( + 'Saved locally, never sent to servers', + name: 'Private_Note_Desc', + desc: '', + args: [], + ); + } + + /// `Write your private note here...` + String get Private_Note_Hint { + return Intl.message( + 'Write your private note here...', + name: 'Private_Note_Hint', + desc: '', + args: [], + ); + } + + /// `This note is local only and won't be synced.` + String get Private_Note_Local_Only { + return Intl.message( + 'This note is local only and won\'t be synced.', + name: 'Private_Note_Local_Only', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/intl_ar_EG.arb b/lib/l10n/intl_ar_EG.arb index 7531a15..8388e52 100644 --- a/lib/l10n/intl_ar_EG.arb +++ b/lib/l10n/intl_ar_EG.arb @@ -685,18 +685,18 @@ "Auto_Add_Start_End_Date_Desc": "\u064a\u0636\u064a\u0641 \u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0628\u062f\u0621 \u0648\u0627\u0644\u0627\u0646\u062a\u0647\u0627\u0621 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0639\u0646\u062f \u0646\u0642\u0644 \u0627\u0644\u062d\u0627\u0644\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0634\u0627\u0647\u062f\u0629 / \u0627\u0644\u0627\u0643\u062a\u0645\u0627\u0644.", "Show_Airing_info_AnimeList": "\u0639\u0631\u0636 \u0648\u0642\u062a \u0627\u0644\u0628\u062b \u0639\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0633\u0648\u0645 \u0627\u0644\u0645\u062a\u062d\u0631\u0643\u0629", "Show_Airing_info_AnimeList_Desc": "\u0627\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0628\u062b \u0644\u0644\u0623\u0646\u0645\u064a \u0627\u0644\u062c\u0627\u0631\u064a \u0628\u0639\u062f\u062f \u0627\u0644\u062d\u0644\u0642\u0629 \u0627\u0644\u062a\u0627\u0644\u064a\u0629", - "Dub_Settings": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062F\u0628\u0644\u062C\u0629", - "Dub_Settings_Desc": "\u062A\u062E\u0635\u064A\u0635 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062F\u0628\u0644\u062C\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643", - "Dub_Show_Icon": "\u0625\u0638\u0647\u0627\u0631 \u0631\u0645\u0632 \u0627\u0644\u062F\u0628\u0644\u062C\u0629", - "Dub_Show_Icon_Desc": "\u062A\u0645\u0643\u064A\u0646 \u0623\u064A\u0642\u0648\u0646\u0629 \u0627\u0644\u062F\u0628\u0644\u062C\u0629 \u0628\u062C\u0648\u0627\u0631 \u0627\u0644\u0623\u0646\u0645\u064A \u0627\u0644\u0645\u062F\u0628\u0644\u062C", - "Dub_Language": "\u0644\u063A\u0629 \u0627\u0644\u062F\u0628\u0644\u062C\u0629", - "Dub_Language_Desc": "\u062D\u062F\u062F \u0627\u0644\u0644\u063A\u0629 \u0644\u0644\u062F\u0628\u0644\u062C\u0629", - "Dub_Confidence": "\u062B\u0642\u0629 \u0627\u0644\u062F\u0628\u0644\u062C\u0629", - "Dub_Confidence_Desc": "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0645\u0635\u0627\u062F\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0623\u0646\u0645\u064A \u0628\u0623\u0646\u0647 \u0645\u062F\u0628\u0644\u062C (\u0625\u0638\u0647\u0627\u0631 \u0631\u0645\u0632 \u0627\u0644\u062F\u0628\u0644\u062C\u0629)", - "Dub_Icon_Style": "\u0646\u0645\u0637 \u0627\u0644\u0623\u064A\u0642\u0648\u0646\u0629", - "Dub_Icon_Style_Desc": "\u062D\u062F\u062F \u0646\u0645\u0637 \u0627\u0644\u0623\u064A\u0642\u0648\u0646\u0627\u062A \u0644\u0644\u0623\u0646\u0645\u064A \u0627\u0644\u0645\u062F\u0628\u0644\u062C \u0648\u0627\u0644\u0645\u062F\u0628\u0644\u062C \u062C\u0632\u0626\u064A\u064B\u0627", - "Dub_Report": "\u0627\u0644\u0625\u0628\u0644\u0627\u063A \u0639\u0646 \u0627\u0644\u062F\u0628\u0644\u062C\u0629 \u063A\u064A\u0631 \u0627\u0644\u062F\u0642\u064A\u0642\u0629", - "Dub_Support": "\u0627\u062F\u0639\u0645 \u0645\u0634\u0631\u0648\u0639 MyDubList", + "Dub_Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062f\u0628\u0644\u062c\u0629", + "Dub_Settings_Desc": "\u062a\u062e\u0635\u064a\u0635 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062f\u0628\u0644\u062c\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643", + "Dub_Show_Icon": "\u0625\u0638\u0647\u0627\u0631 \u0631\u0645\u0632 \u0627\u0644\u062f\u0628\u0644\u062c\u0629", + "Dub_Show_Icon_Desc": "\u062a\u0645\u0643\u064a\u0646 \u0623\u064a\u0642\u0648\u0646\u0629 \u0627\u0644\u062f\u0628\u0644\u062c\u0629 \u0628\u062c\u0648\u0627\u0631 \u0627\u0644\u0623\u0646\u0645\u064a \u0627\u0644\u0645\u062f\u0628\u0644\u062c", + "Dub_Language": "\u0644\u063a\u0629 \u0627\u0644\u062f\u0628\u0644\u062c\u0629", + "Dub_Language_Desc": "\u062d\u062f\u062f \u0627\u0644\u0644\u063a\u0629 \u0644\u0644\u062f\u0628\u0644\u062c\u0629", + "Dub_Confidence": "\u062b\u0642\u0629 \u0627\u0644\u062f\u0628\u0644\u062c\u0629", + "Dub_Confidence_Desc": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0639\u062f\u062f \u0627\u0644\u0645\u0635\u0627\u062f\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u0648\u0636\u0639 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0623\u0646\u0645\u064a \u0628\u0623\u0646\u0647 \u0645\u062f\u0628\u0644\u062c (\u0625\u0638\u0647\u0627\u0631 \u0631\u0645\u0632 \u0627\u0644\u062f\u0628\u0644\u062c\u0629)", + "Dub_Icon_Style": "\u0646\u0645\u0637 \u0627\u0644\u0623\u064a\u0642\u0648\u0646\u0629", + "Dub_Icon_Style_Desc": "\u062d\u062f\u062f \u0646\u0645\u0637 \u0627\u0644\u0623\u064a\u0642\u0648\u0646\u0627\u062a \u0644\u0644\u0623\u0646\u0645\u064a \u0627\u0644\u0645\u062f\u0628\u0644\u062c \u0648\u0627\u0644\u0645\u062f\u0628\u0644\u062c \u062c\u0632\u0626\u064a\u064b\u0627", + "Dub_Report": "\u0627\u0644\u0625\u0628\u0644\u0627\u063a \u0639\u0646 \u0627\u0644\u062f\u0628\u0644\u062c\u0629 \u063a\u064a\u0631 \u0627\u0644\u062f\u0642\u064a\u0642\u0629", + "Dub_Support": "\u0627\u062f\u0639\u0645 \u0645\u0634\u0631\u0648\u0639 MyDubList", "Made_With_Flutter": "\u0645\u0635\u0646\u0648\u0639 \u0645\u0646", "Cannot_launch": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0625\u0637\u0644\u0627\u0642", "Anime_Manga_BG": "\u062e\u0644\u0641\u064a\u0629 \u0644\u0623\u0646\u0645\u064a / \u0645\u0627\u0646\u063a\u0627", @@ -1016,5 +1016,19 @@ "Add_To_Calendar_Prompt": "\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u062a\u0642\u0648\u064a\u0645", "Add_Recurring_Event": "\u0645\u062a\u0643\u0631\u0631 \u0623\u0633\u0628\u0648\u0639\u064a", "Add_Recurring_Event_Desc": "\u0623\u0636\u0641 \u0627\u0644\u062d\u0644\u0642\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0642\u0628\u0644\u064a\u0629 \u0643\u0623\u062d\u062f\u0627\u062b \u0623\u0633\u0628\u0648\u0639\u064a\u0629", - "Add": "\u064a\u0636\u064a\u0641" + "Add": "\u064a\u0636\u064a\u0641", + "Private_Note": "\u0645\u0644\u0627\u062d\u0638\u0629 \u062e\u0627\u0635\u0629", + "Show_Private_Review": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629 \u0627\u0644\u062e\u0627\u0635\u0629", + "Show_Private_Review_Desc": "\u0625\u0638\u0647\u0627\u0631 \u062d\u0642\u0644 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0641\u064a \u0634\u0627\u0634\u0629 \u0627\u0644\u062a\u062d\u0631\u064a\u0631", + "Private_Note_Desc": "\u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0645\u062d\u0644\u064a\u064b\u0627\u060c \u0648\u0644\u0646 \u064a\u062a\u0645 \u0625\u0631\u0633\u0627\u0644\u0647\u0627 \u0625\u0644\u0649 \u0627\u0644\u062e\u0648\u0627\u062f\u0645 \u0623\u0628\u062f\u064b\u0627", + "Private_Note_Hint": "\u0627\u0643\u062a\u0628 \u0645\u0644\u0627\u062d\u0638\u062a\u0643 \u0627\u0644\u062e\u0627\u0635\u0629 \u0647\u0646\u0627...", + "Private_Note_Local_Only": "\u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062d\u0638\u0629 \u0645\u062d\u0644\u064a\u0629 \u0641\u0642\u0637 \u0648\u0644\u0646 \u064a\u062a\u0645\u062a \u0645\u0632\u0627\u0645\u0646\u062a\u0647\u0627.", + "Score_Stats": "\u0625\u062d\u0635\u0627\u0626\u064a\u0627\u062a \u0627\u0644\u0646\u062a\u064a\u062c\u0629", + "Show_dub_status_AnimeList_Desc": "\u0625\u0638\u0647\u0627\u0631 \u062d\u0627\u0644\u0629 \u0627\u0644\u062f\u0628\u0644\u062c\u0629 (\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629) \u0644\u0623\u0646\u064a\u0645\u064a \u0641\u064a \u0627\u0644\u0642\u0627\u0626\u0645\u0629", + "Download_ICS": "\u062a\u062d\u0645\u064a\u0644 .ics", + "Share_ICS": "\u0645\u0634\u0627\u0631\u0643\u0629 .ics", + "File_Saved": "\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0645\u0644\u0641 \u0641\u064a \u0645\u062c\u0644\u062f \u0627\u0644\u062a\u0646\u0632\u064a\u0644!", + "Error_Saving_File": "\u062e\u0637\u0623 \u0641\u064a \u062d\u0641\u0638 \u0627\u0644\u0645\u0644\u0641!", + "View_Related_Graph_Tooltip": "\u0639\u0631\u0636 \u0627\u0644\u0631\u0633\u0645 \u0627\u0644\u0628\u064a\u0627\u0646\u064a \u0623\u0646\u064a\u0645\u064a / \u0645\u0627\u0646\u063a\u0627 \u0630\u0627\u062a \u0627\u0644\u0635\u0644\u0629", + "Calendar": "\u062a\u0642\u0648\u064a\u0645" } \ No newline at end of file diff --git a/lib/l10n/intl_de_DE.arb b/lib/l10n/intl_de_DE.arb index 2c2483e..952cef6 100644 --- a/lib/l10n/intl_de_DE.arb +++ b/lib/l10n/intl_de_DE.arb @@ -23,7 +23,7 @@ "Top_Novels": "Top Romane", "Top_Manhwa": "Top Manhwa", "Top_Manhua": "Top Mannblume.", - "Top_Manga_Bypopularity": "Top Manga Bypopularity.", + "Top_Manga_Bypopularity": "Top Manga nach Popularit\u00e4t", "Top_Favorite_Manga": "Top Favoriten Manga.", "View_All": "Alle ansehen", "Search_Bar_Text": "Suche hier...", @@ -68,7 +68,7 @@ "Statistics": "Statistiken", "No_Recommendations_yet": "Noch keine Empfehlungen...", "No_Related_Content_yet": "Noch keine verwandte Inhalte...", - "Opening_Songs": "Eröffnungslieder", + "Opening_Songs": "Er\u00f6ffnungslieder", "Ending Songs": "Schlusslieder", "Background": "Hintergrund", "None": "Keiner", @@ -505,7 +505,7 @@ "No_Image": "Kein Bild", "Filter_After_search": "Diese Filter werden verwendet, wenn Sie Ihre n\u00e4chste Suche durchf\u00fchren", "Cancel": "Abbrechen", - "Close": "Schließen", + "Close": "Schlie\u00dfen", "Apply_Filters": "Filter anwenden", "Filter_along_with": "Bitte verwenden Sie den Filter * 1 zusammen mit * 2", "Filter_cannot_with": "Sie k\u00f6nnen * 1-Filter nicht zusammen mit * 2 verwenden", @@ -691,13 +691,13 @@ "Dub_Show_Icon": "Dub-Symbol anzeigen", "Dub_Show_Icon_Desc": "Aktivieren Sie das Synchronisationssymbol neben synchronisierten Animes", "Dub_Language": "Synchronsprache", - "Dub_Language_Desc": "W\u00E4hlen Sie die Sprache f\u00FCr die Synchronisation", + "Dub_Language_Desc": "W\u00e4hlen Sie die Sprache f\u00fcr die Synchronisation", "Dub_Confidence": "Dub-Vertrauen", "Dub_Confidence_Desc": "Mindestanzahl an Quellen, die erforderlich sind, um einen Anime als synchronisiert zu markieren (das Synchronisationssymbol anzeigen)", "Dub_Icon_Style": "Symbolstil", - "Dub_Icon_Style_Desc": "W\u00E4hlen Sie den Symbolstil f\u00FCr synchronisierte und teilweise synchronisierte Anime", + "Dub_Icon_Style_Desc": "W\u00e4hlen Sie den Symbolstil f\u00fcr synchronisierte und teilweise synchronisierte Anime", "Dub_Report": "Ungenaue Dubs melden", - "Dub_Support": "Unterstützen Sie das MyDubList-Projekt", + "Dub_Support": "Unterst\u00fctzen Sie das MyDubList-Projekt", "Made_With_Flutter": "Gemacht mit", "Cannot_launch": "Kann nicht starten", "Anime_Manga_BG": "Hintergrund f\u00fcr Anime/Manga", @@ -1017,5 +1017,19 @@ "Add_To_Calendar_Prompt": "Zum Kalender hinzuf\u00fcgen", "Add_Recurring_Event": "Wiederkehrendes w\u00f6chentliches", "Add_Recurring_Event_Desc": "F\u00fcgen Sie zuk\u00fcnftige Episoden als w\u00f6chentliche Ereignisse hinzu", - "Add": "Hinzuf\u00fcgen" -} + "Add": "Hinzuf\u00fcgen", + "Private_Note": "Private Notiz", + "Show_Private_Review": "Private Notiz anzeigen", + "Show_Private_Review_Desc": "Privates Notizfeld im Bearbeitungsbildschirm anzeigen", + "Private_Note_Desc": "Lokal gespeichert, wird nie an Server gesendet", + "Private_Note_Hint": "Schreiben Sie hier Ihre private Notiz...", + "Private_Note_Local_Only": "Diese Notiz ist nur lokal und wird nicht synchronisiert.", + "Score_Stats": "Punktestatistiken", + "Show_dub_status_AnimeList_Desc": "Dub-Status (Englisch) eines Animes in der Liste anzeigen", + "Download_ICS": "Laden Sie .ics herunter", + "Share_ICS": "Teilen Sie .ics", + "File_Saved": "Datei im Download-Ordner gespeichert!", + "Error_Saving_File": "Fehler beim Speichern der Datei!", + "View_Related_Graph_Tooltip": "Zugeh\u00f6riges Anime-/Manga-Diagramm anzeigen", + "Calendar": "Kalender" +} \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 128fb25..a994feb 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -23,7 +23,7 @@ "Top_Novels": "Top Novels", "Top_Manhwa": "Top Manhwa", "Top_Manhua": "Top Manhua", - "Top_Manga_Bypopularity": "Top Manga Bypopularity", + "Top_Manga_Bypopularity": "Top Manga by Popularity", "Top_Favorite_Manga": "Top Favorite Manga", "View_All": "View All", "Search_Bar_Text": "search here...", @@ -798,6 +798,10 @@ "NoMoreItemsFound": "No more items found...", "ConfirmNotifPerm": "Allow Notifications", "ConfirmNotifPermDesc": "Do you wish to allow notifications for this app. This includes notifications when an episode is aired from your PTW (Plan To Watch) and Watching list.", + "Download_ICS": "Download .ics", + "Share_ICS": "Share .ics", + "File_Saved": "File saved to download folder!", + "Error_Saving_File": "Error saving file!", "DiscordInvite": "Discord Invite", "DiscordInviteDesc": "Click here to join the official Discord Server", "Adaptations": "Adaptations", @@ -919,7 +923,7 @@ "Grid_Height": "Grid Height", "My_List2": "My List", "showAnimeMangaCard": "Show content card", - "showAnimeMangaCardDesc": "Show card around the content in list view (comfirtable) wherever possible", + "showAnimeMangaCardDesc": "Show card around the content in list view (Comfortable) wherever possible", "moreLinks": "More Links", "Resources": "Resources", "Available_At": "Available At", @@ -1017,5 +1021,11 @@ "Add_Recurring_Event_Desc": "Add future episodes as weekly events", "Add": "Add", "View_Related_Graph_Tooltip": "View related anime/manga graph", - "Calendar": "Calendar" + "Calendar": "Calendar", + "Private_Note": "Private Note", + "Show_Private_Review": "Show Private Review", + "Show_Private_Review_Desc": "Show private note field in the edit screen", + "Private_Note_Desc": "Saved locally, never sent to servers", + "Private_Note_Hint": "Write your private note here...", + "Private_Note_Local_Only": "This note is local only and won't be synced." } \ No newline at end of file diff --git a/lib/l10n/intl_es_ES.arb b/lib/l10n/intl_es_ES.arb index 1273dbd..16ca233 100644 --- a/lib/l10n/intl_es_ES.arb +++ b/lib/l10n/intl_es_ES.arb @@ -686,14 +686,14 @@ "Auto_Add_Start_End_Date_Desc": "Agrega autom\u00e1ticamente la fecha de inicio y finalizaci\u00f3n cuando el estado se mueve a viendo/completado.", "Show_Airing_info_AnimeList": "Mostrar el tiempo de emisi\u00f3n en la lista de anime", "Show_Airing_info_AnimeList_Desc": "Mostrar informaci\u00f3n de transmisi\u00f3n del anime en curso con el pr\u00f3ximo recuento de episodios", - "Dub_Settings": "Configuraci\u00F3n de doblaje", - "Dub_Settings_Desc": "Personaliza tu configuraci\u00F3n de doblaje", + "Dub_Settings": "Configuraci\u00f3n de doblaje", + "Dub_Settings_Desc": "Personaliza tu configuraci\u00f3n de doblaje", "Dub_Show_Icon": "Mostrar icono de doblaje", "Dub_Show_Icon_Desc": "Habilitar el icono de doblaje junto al anime doblado", "Dub_Language": "Lenguaje de doblaje", "Dub_Language_Desc": "Seleccione el idioma para los doblajes", "Dub_Confidence": "Dub confianza", - "Dub_Confidence_Desc": "N\u00FAmero m\u00EDnimo de fuentes necesarias para marcar un anime como doblado (mostrar el \u00EDcono de doblaje)", + "Dub_Confidence_Desc": "N\u00famero m\u00ednimo de fuentes necesarias para marcar un anime como doblado (mostrar el \u00edcono de doblaje)", "Dub_Icon_Style": "Estilo de icono", "Dub_Icon_Style_Desc": "Seleccione el estilo de icono para anime doblado y parcialmente doblado", "Dub_Report": "Informar sobre doblajes inexactos", @@ -1017,5 +1017,19 @@ "Add_To_Calendar_Prompt": "Agregar al calendario", "Add_Recurring_Event": "Semanal recurrente", "Add_Recurring_Event_Desc": "Agregar episodios futuros como eventos semanales", - "Add": "Agregar" + "Add": "Agregar", + "Private_Note": "Nota Privada", + "Show_Private_Review": "Mostrar Notas Privadas", + "Show_Private_Review_Desc": "Mostrar el campo de notas privadas en la pantalla de edici\u00f3n", + "Private_Note_Desc": "Guardado localmente, nunca se env\u00eda a los servidores", + "Private_Note_Hint": "Escribe tu nota privada aqu\u00ed...", + "Private_Note_Local_Only": "Esta nota es solo local y no se sincronizar\u00e1.", + "Score_Stats": "Estad\u00edsticas de puntuaci\u00f3n", + "Show_dub_status_AnimeList_Desc": "Mostrar el estado de doblaje (ingl\u00e9s) de un anime en la lista", + "Download_ICS": "Descargar .ics", + "Share_ICS": "Compartir .ics", + "File_Saved": "\u00a1Archivo guardado en la carpeta de descargas!", + "Error_Saving_File": "\u00a1Error al guardar el archivo!", + "View_Related_Graph_Tooltip": "Ver gr\u00e1fico de anime/manga relacionado", + "Calendar": "Calendario" } \ No newline at end of file diff --git a/lib/l10n/intl_fr_FR.arb b/lib/l10n/intl_fr_FR.arb index 40d2b52..aa6dbc0 100644 --- a/lib/l10n/intl_fr_FR.arb +++ b/lib/l10n/intl_fr_FR.arb @@ -686,15 +686,15 @@ "Show_Airing_info_AnimeList": "Afficher le temps de diffusion sur la liste des anime", "Show_Airing_info_AnimeList_Desc": "Afficher les informations de diffusion de l'anime en cours avec le prochain nombre d'\u00e9pisodes", "Dub_Settings": "Signaler les doublages inexacts", - "Dub_Settings_Desc": "Personnalisez vos param\u00E8tres de doublage", - "Dub_Show_Icon": "Afficher l'ic\u00F4ne de doublage", - "Dub_Show_Icon_Desc": "Activer l'ic\u00F4ne de doublage \u00E0 c\u00F4t\u00E9 de l'anime doubl\u00E9", + "Dub_Settings_Desc": "Personnalisez vos param\u00e8tres de doublage", + "Dub_Show_Icon": "Afficher l'ic\u00f4ne de doublage", + "Dub_Show_Icon_Desc": "Activer l'ic\u00f4ne de doublage \u00e0 c\u00f4t\u00e9 de l'anime doubl\u00e9", "Dub_Language": "Langue dub", - "Dub_Language_Desc": "S\u00E9lectionnez la langue pour les doublages", + "Dub_Language_Desc": "S\u00e9lectionnez la langue pour les doublages", "Dub_Confidence": "Doublage de confiance", - "Dub_Confidence_Desc": "Nombre minimum de sources requises pour marquer un anime comme doubl\u00E9 (afficher l'ic\u00F4ne de doublage)", - "Dub_Icon_Style": "Style d'ic\u00F4ne", - "Dub_Icon_Style_Desc": "S\u00E9lectionnez le style d'ic\u00F4ne pour les animes doubl\u00E9s et partiellement doubl\u00E9s", + "Dub_Confidence_Desc": "Nombre minimum de sources requises pour marquer un anime comme doubl\u00e9 (afficher l'ic\u00f4ne de doublage)", + "Dub_Icon_Style": "Style d'ic\u00f4ne", + "Dub_Icon_Style_Desc": "S\u00e9lectionnez le style d'ic\u00f4ne pour les animes doubl\u00e9s et partiellement doubl\u00e9s", "Dub_Report": "Signaler les doublages inexacts", "Dub_Support": "Soutenez le projet MyDubList", "Made_With_Flutter": "Fabriqu\u00e9 avec", @@ -1016,5 +1016,19 @@ "Add_To_Calendar_Prompt": "Ajouter au calendrier", "Add_Recurring_Event": "Hebdomadaire r\u00e9current", "Add_Recurring_Event_Desc": "Ajouter les futurs \u00e9pisodes comme \u00e9v\u00e9nements hebdomadaires", - "Add": "Ajouter" + "Add": "Ajouter", + "Score_Stats": "Statistiques des scores", + "Show_dub_status_AnimeList_Desc": "Afficher le statut de doublage (anglais) d'un anime dans la liste", + "Download_ICS": "T\u00e9l\u00e9charger .ics", + "Share_ICS": "Partager .ics", + "File_Saved": "Fichier enregistr\u00e9 dans le dossier de t\u00e9l\u00e9chargement\u00a0!", + "Error_Saving_File": "Erreur lors de l'enregistrement du fichier\u00a0!", + "View_Related_Graph_Tooltip": "Voir le graphique anime/manga associ\u00e9", + "Calendar": "Calendrier", + "Private_Note": "Note priv\u00e9e", + "Show_Private_Review": "Afficher l'avis priv\u00e9", + "Show_Private_Review_Desc": "Afficher le champ de note priv\u00e9e dans l'\u00e9cran d'\u00e9dition", + "Private_Note_Desc": "Enregistr\u00e9 localement, jamais envoy\u00e9 aux serveurs", + "Private_Note_Hint": "\u00c9crivez votre note priv\u00e9e ici...", + "Private_Note_Local_Only": "Cette note est locale uniquement et ne sera pas synchronis\u00e9e." } \ No newline at end of file diff --git a/lib/l10n/intl_id_ID.arb b/lib/l10n/intl_id_ID.arb index 88127cb..a9fe399 100644 --- a/lib/l10n/intl_id_ID.arb +++ b/lib/l10n/intl_id_ID.arb @@ -1016,5 +1016,19 @@ "Add_To_Calendar_Prompt": "Tambahkan ke Kalender", "Add_Recurring_Event": "Berulang mingguan", "Add_Recurring_Event_Desc": "Tambahkan episode masa depan sebagai acara mingguan", - "Add": "Menambahkan" + "Add": "Menambahkan", + "Private_Note": "Catatan Pribadi", + "Show_Private_Review": "Tampilkan Catatan Pribadi", + "Show_Private_Review_Desc": "Tampilkan kolom catatan pribadi di layar edit", + "Private_Note_Desc": "Disimpan secara lokal, tidak pernah dikirim ke server", + "Private_Note_Hint": "Tulis catatan pribadi Anda di sini...", + "Private_Note_Local_Only": "Catatan ini hanya bersifat lokal dan tidak akan disinkronkan.", + "Score_Stats": "Statistik Skor", + "Show_dub_status_AnimeList_Desc": "Tampilkan status dubbing (Bahasa Inggris) suatu anime dalam daftar", + "Download_ICS": "Unduh .ics", + "Share_ICS": "Bagikan .ics", + "File_Saved": "File disimpan ke folder unduhan!", + "Error_Saving_File": "Terjadi kesalahan saat menyimpan file!", + "View_Related_Graph_Tooltip": "Lihat grafik anime/manga terkait", + "Calendar": "Kalender" } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index ee1552f..03a3612 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -685,18 +685,18 @@ "Auto_Add_Start_End_Date_Desc": "\u30b9\u30c6\u30fc\u30bf\u30b9\u304c\u76e3\u8996/\u5b8c\u4e86\u306b\u79fb\u884c\u3059\u308b\u3068\u3001\u958b\u59cb\u65e5\u3068\u7d42\u4e86\u65e5\u304c\u81ea\u52d5\u7684\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002", "Show_Airing_info_AnimeList": "\u30a2\u30cb\u30e1\u30ea\u30b9\u30c8\u306b\u653e\u6620\u6642\u9593\u3092\u8868\u793a", "Show_Airing_info_AnimeList_Desc": "\u6b21\u306e\u30a8\u30d4\u30bd\u30fc\u30c9\u6570\u3067\u9032\u884c\u4e2d\u306e\u30a2\u30cb\u30e1\u306e\u653e\u9001\u60c5\u5831\u3092\u8868\u793a\u3059\u308b", - "Dub_Settings": "\u30C0\u30D6\u8A2D\u5B9A", - "Dub_Settings_Desc": "\u5439\u304D\u66FF\u3048\u8A2D\u5B9A\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3059\u308B", - "Dub_Show_Icon": "\u5439\u304D\u66FF\u3048\u30A2\u30A4\u30B3\u30F3\u3092\u8868\u793A", - "Dub_Show_Icon_Desc": "\u5439\u304D\u66FF\u3048\u30A2\u30CB\u30E1\u306E\u6A2A\u306B\u3042\u308B\u5439\u304D\u66FF\u3048\u30A2\u30A4\u30B3\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B", - "Dub_Language": "\u5439\u304D\u66FF\u3048\u8A00\u8A9E", - "Dub_Language_Desc": "\u5439\u304D\u66FF\u3048\u306E\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044", - "Dub_Confidence": "\u30C0\u30D6\u306E\u81EA\u4FE1", - "Dub_Confidence_Desc": "\u30A2\u30CB\u30E1\u3092\u5439\u304D\u66FF\u3048\u3068\u3057\u3066\u30DE\u30FC\u30AF\u3059\u308B\u305F\u3081\u306B\u5FC5\u8981\u306A\u30BD\u30FC\u30B9\u306E\u6700\u5C0F\u6570\uFF08\u5439\u304D\u66FF\u3048\u30A2\u30A4\u30B3\u30F3\u3092\u8868\u793A\uFF09", - "Dub_Icon_Style": "\u30A2\u30A4\u30B3\u30F3\u30B9\u30BF\u30A4\u30EB", - "Dub_Icon_Style_Desc": "\u5439\u304D\u66FF\u3048\u7248\u304A\u3088\u3073\u90E8\u5206\u5439\u304D\u66FF\u3048\u7248\u30A2\u30CB\u30E1\u306E\u30A2\u30A4\u30B3\u30F3\u30B9\u30BF\u30A4\u30EB\u3092\u9078\u629E\u3057\u307E\u3059", - "Dub_Report": "\u4E0D\u6B63\u78BA\u306A\u5439\u304D\u66FF\u3048\u3092\u5831\u544A\u3059\u308B", - "Dub_Support": "MyDubList\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B", + "Dub_Settings": "\u30c0\u30d6\u8a2d\u5b9a", + "Dub_Settings_Desc": "\u5439\u304d\u66ff\u3048\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b", + "Dub_Show_Icon": "\u5439\u304d\u66ff\u3048\u30a2\u30a4\u30b3\u30f3\u3092\u8868\u793a", + "Dub_Show_Icon_Desc": "\u5439\u304d\u66ff\u3048\u30a2\u30cb\u30e1\u306e\u6a2a\u306b\u3042\u308b\u5439\u304d\u66ff\u3048\u30a2\u30a4\u30b3\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b", + "Dub_Language": "\u5439\u304d\u66ff\u3048\u8a00\u8a9e", + "Dub_Language_Desc": "\u5439\u304d\u66ff\u3048\u306e\u8a00\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044", + "Dub_Confidence": "\u30c0\u30d6\u306e\u81ea\u4fe1", + "Dub_Confidence_Desc": "\u30a2\u30cb\u30e1\u3092\u5439\u304d\u66ff\u3048\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30bd\u30fc\u30b9\u306e\u6700\u5c0f\u6570\uff08\u5439\u304d\u66ff\u3048\u30a2\u30a4\u30b3\u30f3\u3092\u8868\u793a\uff09", + "Dub_Icon_Style": "\u30a2\u30a4\u30b3\u30f3\u30b9\u30bf\u30a4\u30eb", + "Dub_Icon_Style_Desc": "\u5439\u304d\u66ff\u3048\u7248\u304a\u3088\u3073\u90e8\u5206\u5439\u304d\u66ff\u3048\u7248\u30a2\u30cb\u30e1\u306e\u30a2\u30a4\u30b3\u30f3\u30b9\u30bf\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059", + "Dub_Report": "\u4e0d\u6b63\u78ba\u306a\u5439\u304d\u66ff\u3048\u3092\u5831\u544a\u3059\u308b", + "Dub_Support": "MyDubList\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b", "Made_With_Flutter": "\u3067\u4f5c\u3063\u305f", "Cannot_launch": "\u8d77\u52d5\u3067\u304d\u307e\u305b\u3093", "Anime_Manga_BG": "\u30a2\u30cb\u30e1\u30fb\u30de\u30f3\u30ac\u306e\u80cc\u666f", @@ -1016,5 +1016,19 @@ "Add_To_Calendar_Prompt": "\u30ab\u30ec\u30f3\u30c0\u30fc\u306b\u8ffd\u52a0\u3057\u307e\u3059", "Add_Recurring_Event": "\u6bce\u9031\u7e70\u308a\u8fd4\u3057", "Add_Recurring_Event_Desc": "Add future episodes as weekly events", - "Add": "\u8ffd\u52a0" + "Add": "\u8ffd\u52a0", + "Private_Note": "\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ce\u30fc\u30c8", + "Show_Private_Review": "\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ec\u30d3\u30e5\u30fc\u3092\u8868\u793a", + "Show_Private_Review_Desc": "\u7de8\u96c6\u753b\u9762\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ce\u30fc\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u8868\u793a\u3059\u308b", + "Private_Note_Desc": "\u30ed\u30fc\u30ab\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3001\u30b5\u30fc\u30d0\u30fc\u306b\u306f\u9001\u4fe1\u3055\u308c\u307e\u305b\u3093", + "Private_Note_Hint": "\u3053\u3053\u306b\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30ce\u30fc\u30c8\u3092\u66f8\u3044\u3066\u304f\u3060\u3055\u3044...", + "Private_Note_Local_Only": "\u3053\u306e\u30ce\u30fc\u30c8\u306f\u30ed\u30fc\u30ab\u30eb\u306e\u307f\u3067\u3042\u308a\u3001\u540c\u671f\u3055\u308c\u307e\u305b\u3093\u3002", + "Score_Stats": "\u30b9\u30b3\u30a2\u7d71\u8a08", + "Show_dub_status_AnimeList_Desc": "\u30a2\u30cb\u30e1\u306e\u5439\u304d\u66ff\u3048\uff08\u82f1\u8a9e\uff09\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u30ea\u30b9\u30c8\u306b\u8868\u793a\u3057\u307e\u3059", + "Download_ICS": ".ics\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9", + "Share_ICS": ".ics\u3092\u5171\u6709\u3059\u308b", + "File_Saved": "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30d5\u30a9\u30eb\u30c0\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\uff01", + "Error_Saving_File": "\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f!", + "View_Related_Graph_Tooltip": "\u95a2\u9023\u3059\u308b\u30a2\u30cb\u30e1/\u30de\u30f3\u30ac\u306e\u30b0\u30e9\u30d5\u3092\u8868\u793a", + "Calendar": "\u30ab\u30ec\u30f3\u30c0\u30fc" } \ No newline at end of file diff --git a/lib/l10n/intl_ko_KR.arb b/lib/l10n/intl_ko_KR.arb index 9efd47f..d564510 100644 --- a/lib/l10n/intl_ko_KR.arb +++ b/lib/l10n/intl_ko_KR.arb @@ -685,18 +685,18 @@ "Auto_Add_Start_End_Date_Desc": "\uc0c1\ud0dc\uac00 \uc2dc\uccad/\uc644\ub8cc\ub85c \uc804\ud658\ub418\uba74 \uc2dc\uc791 \ub0a0\uc9dc\uc640 \uc885\ub8cc \ub0a0\uc9dc\ub97c \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4.", "Show_Airing_info_AnimeList": "\uc560\ub2c8\uba54\uc774\uc158 \ubaa9\ub85d\uc5d0 \ubc29\uc601 \uc2dc\uac04 \ud45c\uc2dc", "Show_Airing_info_AnimeList_Desc": "\ub2e4\uc74c \uc5d0\ud53c\uc18c\ub4dc \uc218\uc640 \ud568\uaed8 \uc9c4\ud589 \uc911\uc778 \uc560\ub2c8\uba54\uc774\uc158\uc758 \ubc29\uc601 \uc815\ubcf4 \ud45c\uc2dc", - "Dub_Settings": "\uB354\uBE59 \uC124\uC815", - "Dub_Settings_Desc": "\uB354\uBE59 \uC124\uC815 \uC0AC\uC6A9\uC790 \uC9C0\uC815", - "Dub_Show_Icon": "\uB354\uBE59 \uC544\uC774\uCF58 \uD45C\uC2DC", - "Dub_Show_Icon_Desc": "\uB354\uBE59\uB41C \uC560\uB2C8\uBA54\uC774\uC158 \uC606\uC5D0 \uC788\uB294 \uB354\uBE59 \uC544\uC774\uCF58\uC744 \uD65C\uC131\uD654\uD558\uC138\uC694", - "Dub_Language": "\uB354\uBE0C \uC5B8\uC5B4", - "Dub_Language_Desc": "\uB354\uBE59 \uC5B8\uC5B4\uB97C \uC120\uD0DD\uD558\uC138\uC694", - "Dub_Confidence": "\uB354\uBE0C \uCEE8\uD53C\uB358\uC2A4", - "Dub_Confidence_Desc": "\uC560\uB2C8\uBA54\uC774\uC158\uC744 \uB354\uBE59\uC73C\uB85C \uD45C\uC2DC\uD558\uB294 \uB370 \uD544\uC694\uD55C \uCD5C\uC18C \uC18C\uC2A4 \uC218(\uB354\uBE59 \uC544\uC774\uCF58 \uD45C\uC2DC)", - "Dub_Icon_Style": "\uC544\uC774\uCF58 \uC2A4\uD0C0\uC77C", - "Dub_Icon_Style_Desc": "\uB354\uBE59 \uBC0F \uBD80\uBD84 \uB354\uBE59 \uC560\uB2C8\uBA54\uC774\uC158\uC758 \uC544\uC774\uCF58 \uC2A4\uD0C0\uC77C\uC744 \uC120\uD0DD\uD558\uC138\uC694", - "Dub_Report": "\uBD80\uC815\uD655\uD55C \uB354\uBE59 \uC2E0\uACE0", - "Dub_Support": "MyDubList \uD504\uB85C\uC81D\uD2B8\uB97C \uC9C0\uC6D0\uD558\uC138\uC694", + "Dub_Settings": "\ub354\ube59 \uc124\uc815", + "Dub_Settings_Desc": "\ub354\ube59 \uc124\uc815 \uc0ac\uc6a9\uc790 \uc9c0\uc815", + "Dub_Show_Icon": "\ub354\ube59 \uc544\uc774\ucf58 \ud45c\uc2dc", + "Dub_Show_Icon_Desc": "\ub354\ube59\ub41c \uc560\ub2c8\uba54\uc774\uc158 \uc606\uc5d0 \uc788\ub294 \ub354\ube59 \uc544\uc774\ucf58\uc744 \ud65c\uc131\ud654\ud558\uc138\uc694", + "Dub_Language": "\ub354\ube0c \uc5b8\uc5b4", + "Dub_Language_Desc": "\ub354\ube59 \uc5b8\uc5b4\ub97c \uc120\ud0dd\ud558\uc138\uc694", + "Dub_Confidence": "\ub354\ube0c \ucee8\ud53c\ub358\uc2a4", + "Dub_Confidence_Desc": "\uc560\ub2c8\uba54\uc774\uc158\uc744 \ub354\ube59\uc73c\ub85c \ud45c\uc2dc\ud558\ub294 \ub370 \ud544\uc694\ud55c \ucd5c\uc18c \uc18c\uc2a4 \uc218(\ub354\ube59 \uc544\uc774\ucf58 \ud45c\uc2dc)", + "Dub_Icon_Style": "\uc544\uc774\ucf58 \uc2a4\ud0c0\uc77c", + "Dub_Icon_Style_Desc": "\ub354\ube59 \ubc0f \ubd80\ubd84 \ub354\ube59 \uc560\ub2c8\uba54\uc774\uc158\uc758 \uc544\uc774\ucf58 \uc2a4\ud0c0\uc77c\uc744 \uc120\ud0dd\ud558\uc138\uc694", + "Dub_Report": "\ubd80\uc815\ud655\ud55c \ub354\ube59 \uc2e0\uace0", + "Dub_Support": "MyDubList \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc138\uc694", "Made_With_Flutter": "\ub85c \ub9cc\ub4e0", "Cannot_launch": "\uc2e4\ud589\ud560 \uc218 \uc5c6\uc74c", "Anime_Manga_BG": "\uc560\ub2c8\uba54\uc774\uc158/\ub9cc\ud654\uc758 \ubc30\uacbd", @@ -1016,5 +1016,19 @@ "Add_To_Calendar_Prompt": "\ub2ec\ub825\uc5d0 \ucd94\uac00\ud558\uc2ed\uc2dc\uc624", "Add_Recurring_Event": "\ub9e4\uc8fc \ubc18\ubcf5", "Add_Recurring_Event_Desc": "\uc8fc\uac04 \uc774\ubca4\ud2b8\ub85c \ud5a5\ud6c4 \uc5d0\ud53c\uc18c\ub4dc\ub97c \ucd94\uac00\ud558\uc2ed\uc2dc\uc624", - "Add": "\ucd94\uac00\ud558\ub2e4" + "Add": "\ucd94\uac00\ud558\ub2e4", + "Private_Note": "\uac1c\uc778 \uba54\ubaa8", + "Show_Private_Review": "\uac1c\uc778 \uba54\ubaa8 \ud45c\uc2dc", + "Show_Private_Review_Desc": "\ud3b8\uc9d1 \ud654\uba74\uc5d0\uc11c \uac1c\uc778 \uba54\ubaa8 \ud544\ub4dc\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4.", + "Private_Note_Desc": "\ub85c\uceec\uc5d0 \uc800\uc7a5\ub418\uba70 \uc11c\ubc84\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "Private_Note_Hint": "\uc5ec\uae30\uc5d0 \uac1c\uc778 \uba54\ubaa8\ub97c \uc791\uc131\ud558\uc138\uc694...", + "Private_Note_Local_Only": "\uc774 \uba54\ubaa8\ub294 \ub85c\uceec \uc804\uc6a9\uc774\uba70 \ub3d9\uae30\ud654\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "Score_Stats": "\uc810\uc218 \ud1b5\uacc4", + "Show_dub_status_AnimeList_Desc": "\ubaa9\ub85d\uc5d0 \uc788\ub294 \uc560\ub2c8\uba54\uc774\uc158\uc758 \ub354\ube59(\uc601\uc5b4) \uc0c1\ud0dc \ud45c\uc2dc", + "Download_ICS": ".ics \ub2e4\uc6b4\ub85c\ub4dc", + "Share_ICS": ".ics \uacf5\uc720", + "File_Saved": "\ub2e4\uc6b4\ub85c\ub4dc \ud3f4\ub354\uc5d0 \ud30c\uc77c\uc774 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4!", + "Error_Saving_File": "\ud30c\uc77c\uc744 \uc800\uc7a5\ud558\ub294 \uc911\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "View_Related_Graph_Tooltip": "\uad00\ub828 \uc560\ub2c8\uba54\uc774\uc158/\ub9cc\ud654 \uadf8\ub798\ud504 \ubcf4\uae30", + "Calendar": "\ub2ec\ub825" } \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 6e7cbc2..de6a62b 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -686,16 +686,16 @@ "Auto_Add_Start_End_Date_Desc": "Adiciona automaticamente a data de in\u00edcio e t\u00e9rmino quando o status \u00e9 movido para assistindo/conclu\u00eddo.", "Show_Airing_info_AnimeList": "Mostrar tempo de exibi\u00e7\u00e3o na lista de animes", "Show_Airing_info_AnimeList_Desc": "Mostrar informa\u00e7\u00f5es de exibi\u00e7\u00e3o do anime em andamento com a pr\u00f3xima contagem de epis\u00f3dios", - "Dub_Settings": "Configura\u00E7\u00F5es de dublagem", - "Dub_Settings_Desc": "Personalize suas configura\u00E7\u00F5es de dublagem", - "Dub_Show_Icon": "Mostrar \u00EDcone de dublagem", - "Dub_Show_Icon_Desc": "Habilitar o \u00EDcone de dublagem ao lado do anime dublado", + "Dub_Settings": "Configura\u00e7\u00f5es de dublagem", + "Dub_Settings_Desc": "Personalize suas configura\u00e7\u00f5es de dublagem", + "Dub_Show_Icon": "Mostrar \u00edcone de dublagem", + "Dub_Show_Icon_Desc": "Habilitar o \u00edcone de dublagem ao lado do anime dublado", "Dub_Language": "Linguagem de dublagem", "Dub_Language_Desc": "Selecione o idioma para dublagens", - "Dub_Confidence": "Confian\u00E7a Dub", - "Dub_Confidence_Desc": "N\u00FAmero m\u00EDnimo de fontes necess\u00E1rias para marcar um anime como dublado (mostrar o \u00EDcone de dublagem)", - "Dub_Icon_Style": "Estilo de \u00EDcone", - "Dub_Icon_Style_Desc": "Selecione o estilo do \u00EDcone para anime dublado e parcialmente dublado", + "Dub_Confidence": "Confian\u00e7a Dub", + "Dub_Confidence_Desc": "N\u00famero m\u00ednimo de fontes necess\u00e1rias para marcar um anime como dublado (mostrar o \u00edcone de dublagem)", + "Dub_Icon_Style": "Estilo de \u00edcone", + "Dub_Icon_Style_Desc": "Selecione o estilo do \u00edcone para anime dublado e parcialmente dublado", "Dub_Report": "Denunciar dublagens imprecisas", "Dub_Support": "Apoie o projeto MyDubList", "Made_With_Flutter": "Feito com", @@ -1017,5 +1017,19 @@ "Add_To_Calendar_Prompt": "Adicione ao calend\u00e1rio", "Add_Recurring_Event": "Recorrente semanalmente", "Add_Recurring_Event_Desc": "Adicione epis\u00f3dios futuros como eventos semanais", - "Add": "Adicionar" + "Add": "Adicionar", + "Private_Note": "Nota Privada", + "Show_Private_Review": "Mostrar Nota Privada", + "Show_Private_Review_Desc": "Mostrar campo de nota privada na tela de edi\u00e7\u00e3o", + "Private_Note_Desc": "Salvo localmente, nunca enviado para servidores", + "Private_Note_Hint": "Escreva sua nota privada aqui...", + "Private_Note_Local_Only": "Esta nota \u00e9 apenas local e n\u00e3o ser\u00e1 sincronizada.", + "Score_Stats": "Estat\u00edsticas de pontua\u00e7\u00e3o", + "Show_dub_status_AnimeList_Desc": "Mostrar status de dublagem (ingl\u00eas) de um anime na lista", + "Download_ICS": "Baixar .ics", + "Share_ICS": "Compartilhe .ics", + "File_Saved": "Arquivo salvo na pasta de download!", + "Error_Saving_File": "Erro ao salvar o arquivo!", + "View_Related_Graph_Tooltip": "Ver gr\u00e1fico de anime/mang\u00e1 relacionado", + "Calendar": "Calend\u00e1rio" } \ No newline at end of file diff --git a/lib/l10n/intl_ru_RU.arb b/lib/l10n/intl_ru_RU.arb index 48cc8e9..0f14279 100644 --- a/lib/l10n/intl_ru_RU.arb +++ b/lib/l10n/intl_ru_RU.arb @@ -686,18 +686,18 @@ "Auto_Add_Start_End_Date_Desc": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0442\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440/\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e.", "Show_Airing_info_AnimeList": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u044d\u0444\u0438\u0440 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043d\u0438\u043c\u0435", "Show_Airing_info_AnimeList_Desc": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u044b\u0445\u043e\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043d\u0438\u043c\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0435\u0440\u0438\u0439.", - "Dub_Settings": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u0443\u0431\u043B\u044F\u0436\u0430", - "Dub_Settings_Desc": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0442\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0434\u0443\u0431\u043B\u044F\u0436\u0430", - "Dub_Show_Icon": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u0443\u0431\u043B\u044F\u0436\u0430", - "Dub_Show_Icon_Desc": "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u0443\u0431\u043B\u044F\u0436\u0430 \u0440\u044F\u0434\u043E\u043C \u0441 \u0434\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C \u0430\u043D\u0438\u043C\u0435", - "Dub_Language": "\u044F\u0437\u044B\u043A \u0434\u0443\u0431\u043B\u044F\u0436\u0430", - "Dub_Language_Desc": "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u044F\u0437\u044B\u043A \u0434\u043B\u044F \u0434\u0443\u0431\u043B\u044F\u0436\u0430", - "Dub_Confidence": "\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u0443\u0432\u0435\u0440\u0435\u043D\u043D\u043E\u0441\u0442\u044C", - "Dub_Confidence_Desc": "\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u043E\u0432, \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0435 \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043C\u0435\u0442\u0438\u0442\u044C \u0430\u043D\u0438\u043C\u0435 \u043A\u0430\u043A \u0434\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 (\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u0443\u0431\u043B\u044F\u0436\u0430)", - "Dub_Icon_Style": "\u0418\u043A\u043E\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0441\u0442\u0438\u043B\u044C", - "Dub_Icon_Style_Desc": "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u0438\u043B\u044C \u0437\u043D\u0430\u0447\u043A\u0430 \u0434\u043B\u044F \u0434\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043D\u043E \u0434\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0430\u043D\u0438\u043C\u0435.", - "Dub_Report": "\u0421\u043E\u043E\u0431\u0449\u0438\u0442\u044C \u043E \u043D\u0435\u0442\u043E\u0447\u043D\u044B\u0445 \u0434\u0443\u0431\u043B\u044F\u0436\u0430\u0445", - "Dub_Support": "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043F\u0440\u043E\u0435\u043A\u0442 MyDubList", + "Dub_Settings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u0443\u0431\u043b\u044f\u0436\u0430", + "Dub_Settings_Desc": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0443\u0431\u043b\u044f\u0436\u0430", + "Dub_Show_Icon": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0434\u0443\u0431\u043b\u044f\u0436\u0430", + "Dub_Show_Icon_Desc": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0434\u0443\u0431\u043b\u044f\u0436\u0430 \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0430\u043d\u0438\u043c\u0435", + "Dub_Language": "\u044f\u0437\u044b\u043a \u0434\u0443\u0431\u043b\u044f\u0436\u0430", + "Dub_Language_Desc": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u0434\u0443\u0431\u043b\u044f\u0436\u0430", + "Dub_Confidence": "\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c", + "Dub_Confidence_Desc": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0430\u043d\u0438\u043c\u0435 \u043a\u0430\u043a \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 (\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0434\u0443\u0431\u043b\u044f\u0436\u0430)", + "Dub_Icon_Style": "\u0418\u043a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0438\u043b\u044c", + "Dub_Icon_Style_Desc": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u0438\u043b\u044c \u0437\u043d\u0430\u0447\u043a\u0430 \u0434\u043b\u044f \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0438\u043c\u0435.", + "Dub_Report": "\u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0445 \u0434\u0443\u0431\u043b\u044f\u0436\u0430\u0445", + "Dub_Support": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 MyDubList", "Made_With_Flutter": "\u0421\u0434\u0435\u043b\u0430\u043d\u043e \u0441", "Anime_Manga_BG": "\u0424\u043e\u043d \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0435/\u043c\u0430\u043d\u0433\u0438", "Anime_Manga_BG_Desc": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0430\u043d\u0438\u043c\u0435/\u043c\u0430\u043d\u0433\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u043e\u043d\u0430", @@ -1014,5 +1014,19 @@ "Add_To_Calendar_Prompt": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c", "Add_Recurring_Event": "\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439", "Add_Recurring_Event_Desc": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b \u043a\u0430\u043a \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f", - "Add": "\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c" + "Add": "\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c", + "Private_Note": "\u041b\u0438\u0447\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430", + "Show_Private_Review": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443", + "Show_Private_Review_Desc": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u043b\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f", + "Private_Note_Desc": "\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b", + "Private_Note_Hint": "\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c \u0441\u0432\u043e\u044e \u043b\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443...", + "Private_Note_Local_Only": "\u042d\u0442\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", + "Score_Stats": "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043e\u0447\u043a\u043e\u0432", + "Show_dub_status_AnimeList_Desc": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u0434\u0443\u0431\u043b\u044f\u0436\u0430 (\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e) \u0430\u043d\u0438\u043c\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435", + "Download_ICS": "\u0421\u043a\u0430\u0447\u0430\u0442\u044c .ics", + "Share_ICS": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f .ics", + "File_Saved": "\u0424\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438!", + "Error_Saving_File": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430!", + "View_Related_Graph_Tooltip": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0430\u043d\u0438\u043c\u0435/\u043c\u0430\u043d\u0433\u0438", + "Calendar": "\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c" } \ No newline at end of file diff --git a/lib/l10n/intl_tr_TR.arb b/lib/l10n/intl_tr_TR.arb index e799cb1..588e37b 100644 --- a/lib/l10n/intl_tr_TR.arb +++ b/lib/l10n/intl_tr_TR.arb @@ -687,15 +687,15 @@ "Show_Airing_info_AnimeList": "Anime listesinde yay\u0131n saatini g\u00f6ster", "Show_Airing_info_AnimeList_Desc": "Bir sonraki b\u00f6l\u00fcm say\u0131s\u0131yla birlikte devam eden animenin yay\u0131n bilgilerini g\u00f6ster", "Dub_Settings": "Dublaj Ayarlar\u0131", - "Dub_Settings_Desc": "Dublaj ayarlar\u0131n\u0131z\u0131 \u00F6zelle\u015Ftirin", - "Dub_Show_Icon": "Dub simgesini g\u00F6ster", - "Dub_Show_Icon_Desc": "Dublajl\u0131 animenin yan\u0131ndaki dublaj simgesini etkinle\u015Ftirin", + "Dub_Settings_Desc": "Dublaj ayarlar\u0131n\u0131z\u0131 \u00f6zelle\u015ftirin", + "Dub_Show_Icon": "Dub simgesini g\u00f6ster", + "Dub_Show_Icon_Desc": "Dublajl\u0131 animenin yan\u0131ndaki dublaj simgesini etkinle\u015ftirin", "Dub_Language": "Dublaj dili", - "Dub_Language_Desc": "Dublaj i\u00E7in dili se\u00E7in", - "Dub_Confidence": "Lakapl\u0131 g\u00FCven", - "Dub_Confidence_Desc": "Bir animeyi dublajl\u0131 olarak i\u015Faretlemek i\u00E7in gereken minimum kaynak say\u0131s\u0131 (dub simgesini g\u00F6ster)", + "Dub_Language_Desc": "Dublaj i\u00e7in dili se\u00e7in", + "Dub_Confidence": "Lakapl\u0131 g\u00fcven", + "Dub_Confidence_Desc": "Bir animeyi dublajl\u0131 olarak i\u015faretlemek i\u00e7in gereken minimum kaynak say\u0131s\u0131 (dub simgesini g\u00f6ster)", "Dub_Icon_Style": "Simge stili", - "Dub_Icon_Style_Desc": "Dublajl\u0131 ve k\u0131smen dublajl\u0131 anime i\u00E7in simge stilini se\u00E7in", + "Dub_Icon_Style_Desc": "Dublajl\u0131 ve k\u0131smen dublajl\u0131 anime i\u00e7in simge stilini se\u00e7in", "Dub_Report": "Hatal\u0131 dublajlar\u0131 bildirin", "Dub_Support": "MyDubList projesini destekleyin", "Made_With_Flutter": "\u0130le yap\u0131lan", @@ -1014,5 +1014,19 @@ "Add_To_Calendar_Prompt": "Takvime ekle", "Add_Recurring_Event": "Tekrarlayan haftal\u0131k", "Add_Recurring_Event_Desc": "Haftal\u0131k etkinlikler olarak gelecekteki b\u00f6l\u00fcmleri ekleyin", - "Add": "Eklemek" + "Add": "Eklemek", + "Private_Note": "\u00d6zel Not", + "Show_Private_Review": "\u00d6zel Notu G\u00f6ster", + "Show_Private_Review_Desc": "D\u00fczenleme ekran\u0131nda \u00f6zel not alan\u0131n\u0131 g\u00f6ster", + "Private_Note_Desc": "Yerel olarak kaydedilir, asla sunuculara g\u00f6nderilmez", + "Private_Note_Hint": "\u00d6zel notunuzu buraya yaz\u0131n...", + "Private_Note_Local_Only": "Bu not yaln\u0131zca yereldir ve senkronize edilmeyecektir.", + "Score_Stats": "Puan \u0130statistikleri", + "Show_dub_status_AnimeList_Desc": "Listede bir animenin dub (\u0130ngilizce) durumunu g\u00f6ster", + "Download_ICS": ".ics'i indirin", + "Share_ICS": ".ics'i payla\u015f\u0131n", + "File_Saved": "Dosya indirme klas\u00f6r\u00fcne kaydedildi!", + "Error_Saving_File": "Dosya kaydedilirken hata olu\u015ftu!", + "View_Related_Graph_Tooltip": "\u0130lgili anime/manga grafi\u011fini g\u00f6r\u00fcnt\u00fcleyin", + "Calendar": "Takvim" } \ No newline at end of file diff --git a/lib/notifservice.dart b/lib/notifservice.dart index 2490e92..590bdfa 100644 --- a/lib/notifservice.dart +++ b/lib/notifservice.dart @@ -85,7 +85,7 @@ class NotificationService { linux: LinuxInitializationSettings(defaultActionName: 'Open')); await flutterLocalNotificationsPlugin.initialize( - initializationSettings, + settings: initializationSettings, onDidReceiveBackgroundNotificationResponse: onDidReceiveBackgroundNotificationResponse, onDidReceiveNotificationResponse: onDidReceiveNotificationResponse, @@ -305,30 +305,29 @@ class NotificationService { } } else { await flutterLocalNotificationsPlugin.zonedSchedule( - serviceId * 100 + node.id!, - _replaceTags(title) ?? - "DailyAnimeList - ${S.current.Episode_Reminder}", - _replaceTags(body) ?? - "${node.title} - Episode $episode ${S.current.just_got_aired}!!", - exactDate != null - ? tz.TZDateTime.from(exactDate, tz.local) - : tz.TZDateTime.now(tz.local).add(addTime), - NotificationDetails( - android: AndroidNotificationDetails( - channel.channelId, - channel.channelName, - channelDescription: channel.channelDescription, - priority: Priority.high, - styleInformation: styleInfo, - icon: 'ic_stat_name', - largeIcon: largeIconBitmap, - category: AndroidNotificationCategory.reminder, - ), + id: serviceId * 100 + node.id!, + title: _replaceTags(title) ?? + "DailyAnimeList - ${S.current.Episode_Reminder}", + body: _replaceTags(body) ?? + "${node.title} - Episode $episode ${S.current.just_got_aired}!!", + scheduledDate: exactDate != null + ? tz.TZDateTime.from(exactDate, tz.local) + : tz.TZDateTime.now(tz.local).add(addTime), + notificationDetails: NotificationDetails( + android: AndroidNotificationDetails( + channel.channelId, + channel.channelName, + channelDescription: channel.channelDescription, + priority: Priority.high, + styleInformation: styleInfo, + icon: 'ic_stat_name', + largeIcon: largeIconBitmap, + category: AndroidNotificationCategory.reminder, ), - androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle, - payload: jsonEncode(node.toJson()), - uiLocalNotificationDateInterpretation: - UILocalNotificationDateInterpretation.absoluteTime); + ), + androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle, + payload: jsonEncode(node.toJson()), + ); } } catch (e) { logDal(e); @@ -349,10 +348,10 @@ class NotificationService { iconPath != null ? FilePathLinuxIcon(iconPath) : null; await flutterLocalNotificationsPlugin.show( - serviceId * 100 + node.id!, - cleanTitle, - cleanBody, - NotificationDetails( + id: serviceId * 100 + node.id!, + title: cleanTitle, + body: cleanBody, + notificationDetails: NotificationDetails( linux: LinuxNotificationDetails( urgency: LinuxNotificationUrgency.normal, icon: linuxIcon, diff --git a/lib/pages/animedetailed/relatedanimewidget.dart b/lib/pages/animedetailed/relatedanimewidget.dart index ff8eefe..1ff031f 100644 --- a/lib/pages/animedetailed/relatedanimewidget.dart +++ b/lib/pages/animedetailed/relatedanimewidget.dart @@ -76,7 +76,7 @@ class _RelatedAnimeWidgetState extends State if (_graph is AnimeGraph && nullOrEmpty(_graph.edges)) { throw Error(); } - if ((then - now) > 1) { + if ((then - now) > 1 && _selectedView == RelatedSelectedView.list) { showSnackBar(_graphSnackBar(), Duration(seconds: 3)); } } catch (e) { diff --git a/lib/pages/settings/anime_manga_settings.dart b/lib/pages/settings/anime_manga_settings.dart index b8704ce..d2ef3a2 100644 --- a/lib/pages/settings/anime_manga_settings.dart +++ b/lib/pages/settings/anime_manga_settings.dart @@ -138,6 +138,19 @@ class _AnimeMangaSettingsState extends State { onToggled: (value) => _changeAnimeMangaBG(value), ), ), + OptionTile( + text: S.current.Show_Private_Review, + iconData: Icons.notes_rounded, + multiLine: true, + desc: S.current.Show_Private_Review_Desc, + onPressed: () => _changePrivateNotes( + !user.pref.animeMangaPagePreferences.showPrivateNotes), + trailing: ToggleButton( + toggleValue: + user.pref.animeMangaPagePreferences.showPrivateNotes, + onToggled: (value) => _changePrivateNotes(value), + ), + ), OptionTile( text: S.current.Anime_Timezone_Pref, iconData: Icons.timelapse_rounded, @@ -246,4 +259,10 @@ class _AnimeMangaSettingsState extends State { user.setIntance(); setState(() {}); } + + void _changePrivateNotes(bool value) { + user.pref.animeMangaPagePreferences.showPrivateNotes = value; + user.setIntance(); + setState(() {}); + } } diff --git a/lib/pages/settings/backup_restore.dart b/lib/pages/settings/backup_restore.dart index 8a939a9..a4e821d 100644 --- a/lib/pages/settings/backup_restore.dart +++ b/lib/pages/settings/backup_restore.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:dailyanimelist/cache/cachemanager.dart'; @@ -55,7 +56,10 @@ class _BackUpAndRestorePageState extends State { if (path != null) { File file = File(path); final bytes = await file.readAsBytes(); - final data = String.fromCharCodes(bytes); + + // Use utf8.decode to properly handle special characters (tildes, ñ, emojis, etc.) + final data = utf8.decode(bytes); + final result = await CacheManager.instance.restoreData(data); if (result) { user = await User.getInstance(); @@ -69,7 +73,9 @@ class _BackUpAndRestorePageState extends State { return; } } - } catch (e) {} + } catch (e) { + print('Restore error: $e'); + } showToast(S.current.Cancelled_Restore); } diff --git a/lib/user/anime_manga_pref.dart b/lib/user/anime_manga_pref.dart index b62b1a6..131ef6f 100644 --- a/lib/user/anime_manga_pref.dart +++ b/lib/user/anime_manga_pref.dart @@ -17,12 +17,14 @@ class AnimeMangaPagePreferences { String? defaultMangaTab; String? defaultAnimeAddToList; String? defaultMangaAddToList; + bool showPrivateNotes; List? contentCardProps; AnimeMangaPagePreferences({ required this.animeTabs, required this.mangaTabs, this.timezonePref = TimezonePref.local, + this.showPrivateNotes = false, this.defaultTab, this.defaultAnimeTab, this.defaultMangaTab, diff --git a/lib/user/anime_manga_pref.g.dart b/lib/user/anime_manga_pref.g.dart index 2f72781..a4a42cf 100644 --- a/lib/user/anime_manga_pref.g.dart +++ b/lib/user/anime_manga_pref.g.dart @@ -20,6 +20,7 @@ AnimeMangaPagePreferences _$AnimeMangaPagePreferencesFromJson( timezonePref: $enumDecodeNullable(_$TimezonePrefEnumMap, json['timezonePref']) ?? TimezonePref.local, + showPrivateNotes: json['showPrivateNotes'] as bool? ?? false, defaultTab: json['defaultTab'] as String?, defaultAnimeTab: json['defaultAnimeTab'] as String?, defaultMangaTab: json['defaultMangaTab'] as String?, @@ -41,6 +42,7 @@ Map _$AnimeMangaPagePreferencesToJson( 'defaultMangaTab': instance.defaultMangaTab, 'defaultAnimeAddToList': instance.defaultAnimeAddToList, 'defaultMangaAddToList': instance.defaultMangaAddToList, + 'showPrivateNotes': instance.showPrivateNotes, 'contentCardProps': instance.contentCardProps, }; diff --git a/lib/util/file_service.dart b/lib/util/file_service.dart index fb31780..63dfc19 100644 --- a/lib/util/file_service.dart +++ b/lib/util/file_service.dart @@ -5,17 +5,18 @@ import 'package:permission_handler/permission_handler.dart'; // To save the file in the device class FileStorage { static Future getExternalDocumentPath() async { - // To check whether permission is given for this app or not. - var status = await Permission.storage.status; - if (!status.isGranted) { - // If not we will ask for permission first - await Permission.storage.request(); - } - Directory _directory = Directory(""); + Directory _directory; + if (Platform.isAndroid) { - // Redirects it to download folder in android + // Android: Check storage permissions and use Download folder + var status = await Permission.storage.status; + if (!status.isGranted) { + await Permission.storage.request(); + } _directory = Directory("/storage/emulated/0/Download"); } else { + // Desktop platforms (Linux, macOS, Windows) and iOS: use app documents directory + // This works generically across all desktop platforms _directory = await getApplicationDocumentsDirectory(); } diff --git a/lib/util/linux_desktop_helper.dart b/lib/util/linux_desktop_helper.dart index cb6cf4d..ecbc547 100644 --- a/lib/util/linux_desktop_helper.dart +++ b/lib/util/linux_desktop_helper.dart @@ -54,15 +54,65 @@ class LinuxDesktopHelper extends TrayListener { try { await _initTimezone(); await _checkDependencies(); + await _extractAppIcon(); // Extract logo for system notifications + await _installSystemIcon(); // Install icon for dock/taskbar await _initWindowManager(); await _instance._initTray(); - await _extractAppIcon(); // Extract logo for system notifications print('DEBUG: Linux Desktop Helper initialized successfully'); } catch (e) { print('ERROR: Failed to initialize Linux Desktop Helper: $e'); } } + /// Installs the app icon in the system icon directories so GNOME/KDE can find it. + /// This makes the icon appear correctly in the dock/taskbar. + static Future _installSystemIcon() async { + try { + final String homeDir = Platform.environment['HOME'] ?? ''; + if (homeDir.isEmpty) return; + + // Icon sizes that desktop environments expect + final List sizes = ['48x48', '128x128', '256x256', '512x512']; + final String iconName = 'com.teen.dailyanimelist.png'; + + for (final size in sizes) { + final String iconDir = '$homeDir/.local/share/icons/hicolor/$size/apps'; + final Directory dir = Directory(iconDir); + + // Create directory if it doesn't exist + if (!await dir.exists()) { + await dir.create(recursive: true); + } + + // Copy icon to system location + final String iconPath = '$iconDir/$iconName'; + final File iconFile = File(iconPath); + + // Only copy if it doesn't exist or is outdated + if (!await iconFile.exists()) { + final ByteData data = await rootBundle.load('assets/images/dal-black-bg.png'); + final List bytes = data.buffer.asUint8List(); + await iconFile.writeAsBytes(bytes); + print('DEBUG: Installed icon to: $iconPath'); + } + } + + // Update icon cache (ignore errors if gtk-update-icon-cache is not available) + try { + await Process.run('gtk-update-icon-cache', [ + '-f', + '-t', + '$homeDir/.local/share/icons/hicolor' + ]); + print('DEBUG: Updated icon cache'); + } catch (e) { + // Icon cache update is optional, app will still work + } + } catch (e) { + print('WARNING: Could not install system icon: $e'); + } + } + /// Extracts the app asset logo to a temporary directory. /// Standard Linux notifications (libnotify) require an absolute file path to display icons. static Future _extractAppIcon() async { diff --git a/lib/widgets/anime_graph.dart b/lib/widgets/anime_graph.dart index 238a0f4..e17580e 100644 --- a/lib/widgets/anime_graph.dart +++ b/lib/widgets/anime_graph.dart @@ -7,12 +7,18 @@ import 'package:dailyanimelist/enums.dart'; import 'package:dailyanimelist/generated/l10n.dart'; import 'package:dailyanimelist/screens/contentdetailedscreen.dart'; import 'package:dailyanimelist/screens/plainscreen.dart'; -import 'package:dailyanimelist/widgets/common/image_preview.dart'; + import 'package:dailyanimelist/widgets/home/animecard.dart'; import 'package:dailyanimelist/widgets/selectbottom.dart'; import 'package:dal_commons/commons.dart' as dal; import 'package:flutter/material.dart'; import 'package:graphview/GraphView.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/rendering.dart'; +import 'dart:ui' as ui; +import 'dart:io'; +import 'package:path_provider/path_provider.dart'; +import 'package:share_plus/share_plus.dart'; enum _GraphOrderType { by_sequel, @@ -54,18 +60,21 @@ class _AnimeGraphWidgetState extends State { _GraphOrderType.by_sequel: S.current.Graph_Order_By_Sequel, _GraphOrderType.from_selected: S.current.Graph_Order_From_Selected, }; - _GraphOrderType _graphOrderType = _GraphOrderType.by_sequel; + _GraphOrderType _graphOrderType = _GraphOrderType.from_selected; + late int _selectedId; + final GlobalKey _globalKey = GlobalKey(); @override void initState() { super.initState(); + _selectedId = widget.id; widget.graph.nodes?.forEach((node) => _nodeMap[node.id!] = node); _setGraph(); _algorithm = SugiyamaAlgorithm(SugiyamaConfiguration() ..bendPointShape = CurvedBendPointShape(curveLength: 120.0) - ..nodeSeparation = 40 - ..levelSeparation = 80); + ..nodeSeparation = 60 + ..levelSeparation = 100); WidgetsBinding.instance.addPostFrameCallback((_) { _setInitialPosition(); @@ -151,7 +160,7 @@ class _AnimeGraphWidgetState extends State { void _setInitialPosition([Size? size]) { final position = _algorithm.nodeData.keys.firstWhere((e) { - return e.key?.value == widget.id; + return e.key?.value == _selectedId; }).position; final contextSize = size ?? MediaQuery.of(context).size; _controller.value = Matrix4.identity() @@ -183,14 +192,17 @@ class _AnimeGraphWidgetState extends State { minScale: 0.01, maxScale: 5.6, transformationController: _controller, - child: GraphView( - graph: _graph, - algorithm: _algorithm, - animated: false, - builder: (Node node) { - var a = node.key?.value as int?; - return rectangleWidget(_nodeMap[a]!); - }, + child: RepaintBoundary( + key: _globalKey, + child: GraphView( + graph: _graph, + algorithm: _algorithm, + animated: false, + builder: (Node node) { + var a = node.key?.value as int?; + return rectangleWidget(_nodeMap[a]!); + }, + ), ), ), _bottomBar(), @@ -229,6 +241,7 @@ class _AnimeGraphWidgetState extends State { children: [ IconButton.filled( onPressed: () { + _selectedId = widget.id; _setInitialPosition(); if (mounted) setState(() {}); }, @@ -238,6 +251,11 @@ class _AnimeGraphWidgetState extends State { IconButton.filled( onPressed: () => _onEdgeInfo(), icon: Icon(Icons.info), + ), + SB.w20, + IconButton.filled( + onPressed: () => _captureAndSharePng(), + icon: Icon(Icons.camera_alt), ) ], ), @@ -327,7 +345,7 @@ class _AnimeGraphWidgetState extends State { child: Center( child: AutoSizeText( a.title ?? "", - maxLines: 2, + maxLines: 3, minFontSize: 10.0, textAlign: TextAlign.center, ), @@ -419,7 +437,7 @@ class _AnimeGraphWidgetState extends State { child: InkWell( borderRadius: BorderRadius.circular(64), onTap: () => _setExpanded(a), - onLongPress: () => zoomInImage(context, imageUrl), + onLongPress: () => _onNodeSelect(a), child: Ink( child: CircleAvatar( backgroundImage: NetworkImage(imageUrl), @@ -430,6 +448,7 @@ class _AnimeGraphWidgetState extends State { final myListStatus = widget.statusMap[a.id]; final value = NodeStatusValue.fromListStatus(myListStatus); final contains = _expandedIds.contains(a.id); + final isSelected = _selectedId == a.id; final statusOutline = Container( height: 140.0, width: 140.0, @@ -471,7 +490,7 @@ class _AnimeGraphWidgetState extends State { width: 140.0, child: Stack( children: [ - if (widget.id == a.id) centerBorder, + if (isSelected) centerBorder, if (value.color != null || contains) statusOutline, Positioned( top: 10, @@ -496,4 +515,126 @@ class _AnimeGraphWidgetState extends State { )), )); } + + Future _captureAndSharePng() async { + try { + RenderRepaintBoundary boundary = _globalKey.currentContext! + .findRenderObject() as RenderRepaintBoundary; + + ui.Image? graphImage; + // Try higher pixel ratios for better quality + final ratios = [50.0, 30.0, 15.0, 10.0, 5.0, 3.0, 1.0]; + + for (final ratio in ratios) { + try { + graphImage = await boundary.toImage(pixelRatio: ratio); + break; + } catch (e) { + debugPrint('Failed to capture at ratio $ratio: $e'); + } + } + + if (graphImage == null) { + if (mounted) showToast(S.current.Couldnt_generate_graph); + return; + } + + // Load Logo + final logoBytes = await rootBundle.load('assets/images/dal-black-bg.png'); + final logoCodec = await ui.instantiateImageCodec( + logoBytes.buffer.asUint8List(), + ); + final logoFrame = await logoCodec.getNextFrame(); + final logoImage = logoFrame.image; + + // Calculate sizes + // Footer height relative to graph height, but at least enough for logo + padding + final footerHeight = (graphImage.height * 0.15).clamp(100.0, 400.0); + final totalWidth = graphImage.width; + final totalHeight = graphImage.height + footerHeight.toInt(); + final scaleFactor = totalWidth / 1000.0; // Base scale on width + + // Create Canvas + final recorder = ui.PictureRecorder(); + final canvas = Canvas( + recorder, + Rect.fromPoints(Offset.zero, + Offset(totalWidth.toDouble(), totalHeight.toDouble()))); + + // Draw Graph + canvas.drawImage(graphImage, Offset.zero, Paint()); + + // Draw Footer Background + final footerRect = Rect.fromLTWH( + 0, graphImage.height.toDouble(), totalWidth.toDouble(), footerHeight); + canvas.drawRect(footerRect, Paint()..color = const Color(0xFF151515)); + + // Draw Logo + final logoSize = footerHeight * 0.7; // Logo takes 80% of footer height + final logoY = graphImage.height + (footerHeight - logoSize) / 2; + final logoX = 50.0 * scaleFactor; // Padding from left + final logoRect = Rect.fromLTWH(logoX, logoY, logoSize, logoSize); + + // Paint logo with high quality filtering + paintImage( + canvas: canvas, + rect: logoRect, + image: logoImage, + fit: BoxFit.contain, + filterQuality: FilterQuality.high, + ); + + // Draw Text + final textSpan = TextSpan( + text: 'Created from DailyAL App', + style: TextStyle( + color: Colors.white, + fontSize: (footerHeight * 0.35).clamp(24.0, 100.0), + fontFamily: 'Roboto', // Default flutter font or app font + fontWeight: FontWeight.bold, + ), + ); + final textPainter = TextPainter( + text: textSpan, + textDirection: TextDirection.ltr, + ); + textPainter.layout(); + + final textX = logoX + logoSize + (40.0 * scaleFactor); + final textY = graphImage.height + (footerHeight - textPainter.height) / 2; + + textPainter.paint(canvas, Offset(textX, textY)); + + // Finalize Image + final picture = recorder.endRecording(); + final finalImage = await picture.toImage(totalWidth, totalHeight); + + ByteData? byteData = + await finalImage.toByteData(format: ui.ImageByteFormat.png); + Uint8List pngBytes = byteData!.buffer.asUint8List(); + + final tempDir = await getTemporaryDirectory(); + final node = _nodeMap[widget.id]; + final title = + node?.title?.replaceAll(RegExp(r'[^\w\s]+'), '') ?? 'anime_graph'; + final timestamp = DateTime.now().millisecondsSinceEpoch; + final fileName = '${title}_${widget.id}_$timestamp.png'; + + final file = await File('${tempDir.path}/$fileName').create(); + await file.writeAsBytes(pngBytes); + + await Share.shareXFiles([XFile(file.path)], text: fileName); + } catch (e) { + dal.logDal(e.toString()); + if (mounted) showToast(S.current.Couldnt_generate_graph); + } + } + + void _onNodeSelect(dal.GraphNode a) { + if (a.id != null) { + _selectedId = a.id!; + _setInitialPosition(); + if (mounted) setState(() {}); + } + } } diff --git a/lib/widgets/home/anime_calendar.dart b/lib/widgets/home/anime_calendar.dart index 6a2aea0..353be6e 100644 --- a/lib/widgets/home/anime_calendar.dart +++ b/lib/widgets/home/anime_calendar.dart @@ -3,6 +3,8 @@ import 'dart:collection'; import 'package:collection/collection.dart'; import 'package:dailyanimelist/api/dalapi.dart'; import 'package:dailyanimelist/constant.dart'; +import 'package:dailyanimelist/util/file_service.dart'; +import 'dart:io'; import 'package:dailyanimelist/generated/l10n.dart'; import 'package:dailyanimelist/pages/animedetailed/synopsiswidget.dart'; import 'package:dailyanimelist/screens/contentdetailedscreen.dart'; @@ -16,6 +18,7 @@ import 'package:dal_commons/commons.dart'; import 'package:flutter/material.dart'; import 'package:add_2_calendar/add_2_calendar.dart'; import 'package:intl/intl.dart'; +import 'package:share_plus/share_plus.dart'; import '../../api/malapi.dart'; @@ -657,10 +660,13 @@ class __ScheduleCustomListState extends State<_ScheduleCustomList> { canRecurring: canRecurring, initialRecurring: recurring, onConfirm: (useRecurring) { - Navigator.of(context).pop(); _createCalendarEvent(node, startDate, endDate, useRecurring: useRecurring); }, + onDownloadICS: (useRecurring) => _downloadICS(node, useRecurring), + onShareICS: Platform.isLinux + ? null + : (useRecurring) => _shareICS(node, useRecurring), ); }, ), @@ -717,16 +723,22 @@ class __ScheduleCustomListState extends State<_ScheduleCustomList> { } String _getCalendarTitle( - ScheduleData schedule, Node anime, Recurrence? recurrence) { + ScheduleData schedule, Node anime, Recurrence? recurrence, + [int? episode]) { return recurrence != null ? '${anime.title} Episode Release Reminder' - : 'Ep ${schedule.episode ?? '?'} - ${anime.title}'; - } - - _getAnimeDescription(Node anime, ScheduleData schedule) { - final title = '${anime.title} - Episode ${schedule.episode ?? '?'}'; - final airDate = DateFormat.yMMMd().format( - DateTime.fromMillisecondsSinceEpoch(schedule.timestamp! * 1000)); + : 'Ep ${episode ?? schedule.episode ?? '?'} - ${anime.title}'; + } + + _getAnimeDescription(Node anime, ScheduleData schedule, + [int? episode, int? timestamp]) { + final title = + '${anime.title} - Episode ${episode ?? schedule.episode ?? '?'}'; + final stamp = timestamp ?? schedule.timestamp; + final airDate = stamp != null + ? DateFormat.yMMMd() + .format(DateTime.fromMillisecondsSinceEpoch(stamp * 1000)) + : '?'; final relatedLinks = schedule.relatedLinks; final linksBuffer = StringBuffer(); @@ -753,6 +765,85 @@ class __ScheduleCustomListState extends State<_ScheduleCustomList> { return '$title\nAir Date: $airDate\n\nLinks:\n${linksBuffer.toString()}\n' 'This is a reminder for the scheduled episode of $title. \n\n Generated by DailyAL.'; } + + void _shareICS(SchduledNode node, bool useRecurring) async { + Navigator.of(context).pop(); + final file = await _generateICSFile(node, useRecurring); + if (file != null) { + Share.shareXFiles([XFile(file.path)]); + } + } + + void _downloadICS(SchduledNode node, bool useRecurring) async { + Navigator.of(context).pop(); + final file = await _generateICSFile(node, useRecurring); + if (file != null) { + showToast(S.current.File_Saved); + } + } + + Future _generateICSFile(SchduledNode node, bool useRecurring) async { + final anime = node.anime; + final schedule = node.scheduleData; + final startDate = + DateTime.fromMillisecondsSinceEpoch(schedule.timestamp! * 1000); + final endDate = startDate.add(Duration(minutes: 25)); + + int occurrences = 1; + if (useRecurring && anime.numEpisodes != null && schedule.episode != null) { + final total = anime.numEpisodes!; + final nextEp = schedule.episode!; + occurrences = total - nextEp + 1; + if (occurrences < 1) occurrences = 1; + } + + final buffer = StringBuffer(); + buffer.writeln('BEGIN:VCALENDAR'); + buffer.writeln('VERSION:2.0'); + buffer.writeln('PRODID:-//DailyAL//NONSGML v1.0//EN'); + + for (int i = 0; i < occurrences; i++) { + final ep = (schedule.episode ?? 1) + i; + final start = startDate.add(Duration(days: 7 * i)); + final end = endDate.add(Duration(days: 7 * i)); + final timestamp = start.millisecondsSinceEpoch ~/ 1000; + + final description = + _getAnimeDescription(anime, schedule, ep, timestamp).toString(); + final title = _getCalendarTitle(schedule, anime, null, ep); + + buffer.write(_generateEventString(title, description, start, end)); + } + + buffer.writeln('END:VCALENDAR'); + + final fileName = '${anime.title ?? "anime"}_calendar.ics' + .replaceAll(RegExp(r'[^\w\s\.]'), ''); + + try { + return await FileStorage.writeFile(buffer.toString(), fileName); + } catch (e) { + logDal(e); + showToast(S.current.Error_Saving_File); + return null; + } + } + + String _generateEventString( + String title, String description, DateTime start, DateTime end) { + final dateFormat = DateFormat("yyyyMMdd'T'HHmmss'Z'"); + final buffer = StringBuffer(); + buffer.writeln('BEGIN:VEVENT'); + buffer.writeln( + 'UID:${start.millisecondsSinceEpoch}-${title.hashCode}@dailyal'); + buffer.writeln('DTSTAMP:${dateFormat.format(DateTime.now().toUtc())}'); + buffer.writeln('DTSTART:${dateFormat.format(start.toUtc())}'); + buffer.writeln('DTEND:${dateFormat.format(end.toUtc())}'); + buffer.writeln('SUMMARY:$title'); + buffer.writeln('DESCRIPTION:${description.replaceAll('\n', '\\n')}'); + buffer.writeln('END:VEVENT'); + return buffer.toString(); + } } class _AddToCalendarSheetContent extends StatefulWidget { @@ -762,6 +853,8 @@ class _AddToCalendarSheetContent extends StatefulWidget { final bool canRecurring; final bool initialRecurring; final ValueChanged onConfirm; + final ValueChanged? onDownloadICS; + final ValueChanged? onShareICS; const _AddToCalendarSheetContent({ Key? key, @@ -771,6 +864,8 @@ class _AddToCalendarSheetContent extends StatefulWidget { required this.canRecurring, required this.initialRecurring, required this.onConfirm, + this.onDownloadICS, + this.onShareICS, }) : super(key: key); @override @@ -833,6 +928,38 @@ class _AddToCalendarSheetContentState ), ], SB.h20, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + if (widget.onShareICS != null) + PlainButton( + onPressed: () => + widget.onShareICS!(_recurring && widget.canRecurring), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.share, size: 18), + SB.w10, + Text(S.current.Share_ICS), + ], + ), + ), + if (widget.onDownloadICS != null) + PlainButton( + onPressed: () => + widget.onDownloadICS!(_recurring && widget.canRecurring), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.download, size: 18), + SB.w10, + Text(S.current.Download_ICS), + ], + ), + ), + ], + ), + SB.h20, Row( mainAxisAlignment: MainAxisAlignment.end, children: [ @@ -848,6 +975,7 @@ class _AddToCalendarSheetContentState ), ], ), + SB.h20, ], ), ); diff --git a/lib/widgets/user/contenteditwidget.dart b/lib/widgets/user/contenteditwidget.dart index c0eac59..c81f10b 100644 --- a/lib/widgets/user/contenteditwidget.dart +++ b/lib/widgets/user/contenteditwidget.dart @@ -78,7 +78,8 @@ class _ContentEditWidgetState extends State { dynamic contentDetailed; late TextEditingController episodeController, chapterController, - volumesController; + volumesController, + privateNoteController; bool modifyStartDate = false; @@ -112,6 +113,7 @@ class _ContentEditWidgetState extends State { super.initState(); reset(); contentDetailed = widget.contentDetailed; + _loadPrivateNote(); showAddOptions = isFloating && user.status == AuthStatus.AUTHENTICATED; if (widget.updateCache && user.status == AuthStatus.AUTHENTICATED) { cacheUpdated = false; @@ -156,6 +158,45 @@ class _ContentEditWidgetState extends State { }); } + void _loadPrivateNote() async { + // Try loading with category-specific key first + String? note = await CacheManager.instance + .getValueForService('private_note', "${widget.category} - $_id"); + + // Fallback: try loading legacy key (without category) if specific one doesn't exist + if (note == null) { + note = await CacheManager.instance + .getValueForService('private_note', "$_id"); + // If legacy note exists, save it with new key format for future + if (note != null) { + CacheManager.instance.setValueForService( + 'private_note', "${widget.category} - $_id", note); + } + } + + if (note != null && mounted) { + privateNoteController.text = note; + } + } + + void _savePrivateNote() { + if (_id != null) { + // Save with category to avoid ID collisions between Anime and Manga + CacheManager.instance.setValueForService('private_note', + "${widget.category} - $_id", privateNoteController.text); + } + } + + @override + void dispose() { + _savePrivateNote(); + privateNoteController.dispose(); + episodeController.dispose(); + chapterController.dispose(); + volumesController.dispose(); + super.dispose(); + } + int? get _id { if (widget.id != null) { return widget.id; @@ -171,6 +212,7 @@ class _ContentEditWidgetState extends State { episodeController = new TextEditingController(text: "0"); chapterController = new TextEditingController(text: "0"); volumesController = new TextEditingController(text: "0"); + privateNoteController = new TextEditingController(); statusValue = null; starValue = null; } @@ -864,6 +906,31 @@ class _ContentEditWidgetState extends State { child: rewatchWidget, ), ), + if (user.pref.animeMangaPagePreferences.showPrivateNotes) + Padding( + padding: + EdgeInsets.only(top: 10, bottom: 20, right: 15, left: 15), + child: field( + S.current.Private_Note, + TextFormField( + controller: privateNoteController, + minLines: 5, + maxLines: null, + scrollPhysics: const AlwaysScrollableScrollPhysics(), + decoration: InputDecoration( + hintText: S.current.Private_Note_Hint, + helperText: S.current.Private_Note_Local_Only, + prefixIcon: Icon(Icons.lock_outline), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + ), + S.current.Private_Note_Desc, + null, + CrossAxisAlignment.start, + EdgeInsets.only(left: 20, bottom: 8)), + ), sectionHeading(S.current.Dates_Priority, isOpen: isDatesOpen, onChange: () { if (mounted) @@ -1429,11 +1496,19 @@ class _ContentEditWidgetState extends State { void _scrollToEpisodeCount() { const duration = const Duration(milliseconds: 200); Future.delayed(duration).then( - (value) => _episodeScrollController.scrollTo( - index: _episodeCount(), - alignment: 0.6, - duration: duration, - ), + (value) { + if (mounted && _episodeScrollController.isAttached) { + try { + _episodeScrollController.scrollTo( + index: _episodeCount(), + alignment: 0.6, + duration: duration, + ); + } catch (e) { + // Ignore scroll errors if list is not ready + } + } + }, ); } diff --git a/linux/my_application.cc b/linux/my_application.cc index 2fb95ef..b1b5948 100644 --- a/linux/my_application.cc +++ b/linux/my_application.cc @@ -17,6 +17,14 @@ G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) // Implements GApplication::activate. static void my_application_activate(GApplication* application) { MyApplication* self = MY_APPLICATION(application); + + // NOTE: This file (my_application.cc) is ONLY compiled for Linux builds. + // It does NOT affect Android, macOS, Windows, or web builds. + // Set application name for GNOME to find the icon in ~/.local/share/icons/ + // This must be set BEFORE creating the window + g_set_application_name("DailyAL"); + g_set_prgname("com.teen.dailyanimelist"); + GtkWindow* window = GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); diff --git a/linux/runner/CMakeLists.txt b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000..e97dabc --- /dev/null +++ b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/linux/runner/main.cc b/linux/runner/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/runner/my_application.cc b/linux/runner/my_application.cc new file mode 100644 index 0000000..acbc8b3 --- /dev/null +++ b/linux/runner/my_application.cc @@ -0,0 +1,148 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView* view) { + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "dailyanimelist"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "dailyanimelist"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments( + project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 + // for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), + self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, + gchar*** arguments, + int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = + my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, "flags", + G_APPLICATION_NON_UNIQUE, nullptr)); +} diff --git a/linux/runner/my_application.h b/linux/runner/my_application.h new file mode 100644 index 0000000..db16367 --- /dev/null +++ b/linux/runner/my_application.h @@ -0,0 +1,21 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, + my_application, + MY, + APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock index e089f4d..a57b59a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -162,6 +162,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.4" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -210,6 +218,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + console: + dependency: transitive + description: + name: console + sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a + url: "https://pub.dev" + source: hosted + version: "4.1.0" convert: dependency: transitive description: @@ -521,26 +537,34 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" + sha256: "2b50e938a275e1ad77352d6a25e25770f4130baa61eaf02de7a9a884680954ad" url: "https://pub.dev" source: hosted - version: "17.2.4" + version: "20.1.0" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af + sha256: dce0116868cedd2cdf768af0365fc37ff1cbef7c02c4f51d0587482e625868d0 url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "7.0.0" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" + sha256: "23de31678a48c084169d7ae95866df9de5c9d2a44be3e5915a2ff067aeeba899" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + flutter_local_notifications_windows: + dependency: transitive + description: + name: flutter_local_notifications_windows + sha256: e97a1a3016512437d9c0b12fae7d1491c3c7b9aa7f03a69b974308840656b02a url: "https://pub.dev" source: hosted - version: "7.2.0" + version: "2.0.1" flutter_localizations: dependency: "direct main" description: flutter @@ -652,6 +676,14 @@ packages: url: "https://pub.dev" source: hosted version: "9.0.0" + get_it: + dependency: transitive + description: + name: get_it + sha256: "1d648d2dd2047d7f7450d5727ca24ee435f240385753d90b49650e3cdff32e56" + url: "https://pub.dev" + source: hosted + version: "9.2.0" glob: dependency: transitive description: @@ -724,6 +756,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c" + url: "https://pub.dev" + source: hosted + version: "4.7.2" image_picker: dependency: "direct main" description: @@ -932,6 +972,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + msix: + dependency: "direct dev" + description: + name: msix + sha256: b6b08e7a7b5d1845f2b1d31216d5b1fb558e98251efefe54eb79ed00d27bc2ac + url: "https://pub.dev" + source: hosted + version: "3.16.13" native_toolchain_c: dependency: transitive description: @@ -1501,10 +1549,10 @@ packages: dependency: "direct main" description: name: timezone - sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" + sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1 url: "https://pub.dev" source: hosted - version: "0.9.4" + version: "0.10.1" translator_plus: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index afd0e75..bbad3d9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 2026.2.3+105 +version: 2026.2.4+106 environment: sdk: '>=3.2.6 <4.0.0' @@ -47,8 +47,8 @@ dependencies: scroll_to_index: ^3.0.1 share_plus: ^10.0.2 built_collection: ^5.1.0 - flutter_local_notifications: ^17.2.2 - timezone: ^0.9.0 + flutter_local_notifications: ^20.1.0 + timezone: ^0.10.0 flutter_custom_tabs: ^2.1.0 flex_color_picker: ^3.5.1 translator_plus: ^1.0.1 @@ -95,6 +95,7 @@ dev_dependencies: json_serializable: ^6.7.1 build_runner: ^2.1.7 intl_utils: ^2.8.4 + msix: ^3.16.13 flutter: generate: true @@ -192,3 +193,12 @@ flutter: # see https://flutter.dev/custom-fonts/#from-packages flutter_intl: enabled: true + +msix_config: + display_name: DailyAL + publisher_display_name: JICA98 + identity_name: io.github.jica98.dailyal + publisher: CN=JICA98 + msix_version: 1.0.0.0 + logo_path: windows/runner/resources/app_icon.ico + capabilities: internetClient diff --git a/py-req.txt b/python/py-req.txt similarity index 100% rename from py-req.txt rename to python/py-req.txt diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 152cb30..6ee232c 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -18,6 +18,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + flutter_local_notifications_windows ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico index c04e20c..260f94e 100644 Binary files a/windows/runner/resources/app_icon.ico and b/windows/runner/resources/app_icon.ico differ