kasy-cli 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/bin/kasy.js +529 -0
- package/docs/cli-reference.md +251 -0
- package/lib/commands/add.js +777 -0
- package/lib/commands/check.js +240 -0
- package/lib/commands/codemagic.js +161 -0
- package/lib/commands/deploy.js +257 -0
- package/lib/commands/docs.js +47 -0
- package/lib/commands/doctor.js +227 -0
- package/lib/commands/features.js +36 -0
- package/lib/commands/ios.js +206 -0
- package/lib/commands/new.js +1870 -0
- package/lib/commands/notifications.js +207 -0
- package/lib/commands/remove.js +466 -0
- package/lib/commands/run.js +75 -0
- package/lib/commands/update.js +382 -0
- package/lib/commands/validate.js +131 -0
- package/lib/scaffold/CHANGELOG.json +6 -0
- package/lib/scaffold/backends/api/.flutter-plugins-dependencies +1 -0
- package/lib/scaffold/backends/api/analysis_options.yaml +5 -0
- package/lib/scaffold/backends/api/generator.js +76 -0
- package/lib/scaffold/backends/api/patch/README.md +85 -0
- package/lib/scaffold/backends/api/patch/android/app/src/main/AndroidManifest.xml +87 -0
- package/lib/scaffold/backends/api/patch/ios/Runner/AppDelegate.swift +61 -0
- package/lib/scaffold/backends/api/patch/lib/core/data/api/meta_ads_api.dart +80 -0
- package/lib/scaffold/backends/api/patch/lib/core/data/api/storage_api.dart +117 -0
- package/lib/scaffold/backends/api/patch/lib/core/data/api/user_api.dart +148 -0
- package/lib/scaffold/backends/api/patch/lib/core/data/entities/json_converters.dart +35 -0
- package/lib/scaffold/backends/api/patch/lib/core/data/entities/user_entity.dart +48 -0
- package/lib/scaffold/backends/api/patch/lib/core/rating/widgets/review_popup.dart +211 -0
- package/lib/scaffold/backends/api/patch/lib/environnements.dart +151 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/api/authentication_api.dart +303 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/api/authentication_api_interface.dart +80 -0
- package/lib/scaffold/backends/api/patch/lib/features/authentication/repositories/authentication_repository.dart +406 -0
- package/lib/scaffold/backends/api/patch/lib/features/camera/xfile_extension.dart +6 -0
- package/lib/scaffold/backends/api/patch/lib/features/feedbacks/api/entities/feature_request_entity.dart +24 -0
- package/lib/scaffold/backends/api/patch/lib/features/feedbacks/api/entities/feature_vote_entity.dart +21 -0
- package/lib/scaffold/backends/api/patch/lib/features/feedbacks/api/feature_request_api.dart +52 -0
- package/lib/scaffold/backends/api/patch/lib/features/feedbacks/api/feature_vote_api.dart +60 -0
- package/lib/scaffold/backends/api/patch/lib/features/llm_chat/api/llm_chat_api.dart +58 -0
- package/lib/scaffold/backends/api/patch/lib/features/llm_chat/api/llm_chat_message_entity.dart +29 -0
- package/lib/scaffold/backends/api/patch/lib/features/notifications/api/device_api.dart +398 -0
- package/lib/scaffold/backends/api/patch/lib/features/notifications/api/entities/device_entity.dart +39 -0
- package/lib/scaffold/backends/api/patch/lib/features/notifications/api/entities/notifications_entity.dart +23 -0
- package/lib/scaffold/backends/api/patch/lib/features/notifications/api/notifications_api.dart +333 -0
- package/lib/scaffold/backends/api/patch/lib/features/notifications/providers/models/notification.dart +185 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/api/entities/user_info_entity.dart +26 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/api/user_infos_api.dart +107 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/models/user_info.dart +94 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/repositories/user_infos_repository.dart +29 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/ui/animations/movefade_anim.dart +34 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/ui/components/onboarding_att_setup.dart +66 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/ui/components/onboarding_notifications_setup.dart +73 -0
- package/lib/scaffold/backends/api/patch/lib/features/onboarding/ui/widgets/onboarding_radio_question.dart +173 -0
- package/lib/scaffold/backends/api/patch/lib/features/settings/ui/widgets/avatar_utils.dart +33 -0
- package/lib/scaffold/backends/api/patch/lib/features/subscription/api/entities/subscription_entity.dart +34 -0
- package/lib/scaffold/backends/api/patch/lib/features/subscription/api/subscription_api.dart +49 -0
- package/lib/scaffold/backends/api/patch/lib/features/subscription/shared/maybeshow_premium.dart +88 -0
- package/lib/scaffold/backends/api/patch/lib/main.dart +256 -0
- package/lib/scaffold/backends/api/patch/lib/router.dart +133 -0
- package/lib/scaffold/backends/api/pubspec.yaml.tpl +108 -0
- package/lib/scaffold/backends/firebase/deploy.js +1006 -0
- package/lib/scaffold/backends/firebase/generator.js +24 -0
- package/lib/scaffold/backends/firebase/setup-from-scratch.js +1008 -0
- package/lib/scaffold/backends/firebase/tokens.js +113 -0
- package/lib/scaffold/backends/supabase/.flutter-plugins-dependencies +1 -0
- package/lib/scaffold/backends/supabase/analysis_options.yaml +5 -0
- package/lib/scaffold/backends/supabase/config.toml +34 -0
- package/lib/scaffold/backends/supabase/deploy.js +485 -0
- package/lib/scaffold/backends/supabase/edge-functions/delete-user-account/README.md +15 -0
- package/lib/scaffold/backends/supabase/edge-functions/delete-user-account/index.ts +97 -0
- package/lib/scaffold/backends/supabase/edge-functions/llm-chat/index.ts +156 -0
- package/lib/scaffold/backends/supabase/edge-functions/meta-track-event/index.ts +292 -0
- package/lib/scaffold/backends/supabase/edge-functions/revenuecat-webhook/README.md +30 -0
- package/lib/scaffold/backends/supabase/edge-functions/revenuecat-webhook/index.ts +488 -0
- package/lib/scaffold/backends/supabase/edge-functions/send-push-notification/README.md +35 -0
- package/lib/scaffold/backends/supabase/edge-functions/send-push-notification/index.ts +314 -0
- package/lib/scaffold/backends/supabase/generator.js +108 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000001_initial_schema.sql +149 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000002_storage_bucket.sql +40 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000005_vote_triggers.sql +34 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000006_notification_webhook.sql +36 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000007_welcome_notification.sql +64 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000008_user_feature_requests.sql +2 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000009_llm_messages.sql +22 -0
- package/lib/scaffold/backends/supabase/migrations/20240101000010_notification_image.sql +2 -0
- package/lib/scaffold/backends/supabase/patch/README.md +121 -0
- package/lib/scaffold/backends/supabase/patch/android/app/src/main/AndroidManifest.xml +87 -0
- package/lib/scaffold/backends/supabase/patch/ios/Runner/AppDelegate.swift +61 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/data/api/meta_ads_api.dart +75 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/data/api/storage_api.dart +83 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/data/api/user_api.dart +143 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/data/entities/json_converters.dart +35 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/data/entities/user_entity.dart +48 -0
- package/lib/scaffold/backends/supabase/patch/lib/core/rating/widgets/review_popup.dart +211 -0
- package/lib/scaffold/backends/supabase/patch/lib/environnements.dart +149 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/authentication/api/authentication_api.dart +546 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/authentication/repositories/authentication_repository.dart +410 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/camera/xfile_extension.dart +6 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/feedbacks/api/entities/feature_request_entity.dart +25 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/feedbacks/api/entities/feature_vote_entity.dart +21 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/feedbacks/api/feature_request_api.dart +59 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/feedbacks/api/feature_vote_api.dart +85 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/feedbacks/ui/component/add_feature_form.dart +199 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/llm_chat/api/llm_chat_api.dart +47 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/llm_chat/api/llm_chat_message_entity.dart +30 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/llm_chat/providers/llm_chat_notifier.dart +266 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/device_api.dart +410 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/entities/device_entity.dart +51 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/entities/notifications_entity.dart +26 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/notifications_api.dart +317 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/notifications/providers/models/notification.dart +174 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/api/entities/user_info_entity.dart +26 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/api/user_infos_api.dart +90 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/models/user_info.dart +94 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/repositories/user_infos_repository.dart +29 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/ui/animations/movefade_anim.dart +34 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/ui/components/onboarding_att_setup.dart +66 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/ui/components/onboarding_notifications_setup.dart +73 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/onboarding/ui/widgets/onboarding_radio_question.dart +173 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/settings/ui/widgets/avatar_utils.dart +35 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/subscription/api/entities/subscription_entity.dart +35 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/subscription/api/subscription_api.dart +44 -0
- package/lib/scaffold/backends/supabase/patch/lib/features/subscription/shared/maybeshow_premium.dart +85 -0
- package/lib/scaffold/backends/supabase/patch/lib/google_auth_options.dart +23 -0
- package/lib/scaffold/backends/supabase/patch/lib/main.dart +288 -0
- package/lib/scaffold/backends/supabase/patch/lib/router.dart +133 -0
- package/lib/scaffold/backends/supabase/pubspec.yaml.tpl +110 -0
- package/lib/scaffold/backends/supabase/tokens.js +9 -0
- package/lib/scaffold/catalog.js +177 -0
- package/lib/scaffold/engine.js +230 -0
- package/lib/scaffold/features/README.md +152 -0
- package/lib/scaffold/features/analytics/lib/core/data/api/analytics_api.dart +124 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/BUG.es.md +35 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/BUG.md +35 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/BUG.pt.md +35 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/feature_request.es.md +12 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/feature_request.md +12 -0
- package/lib/scaffold/features/ci/.github/ISSUE_TEMPLATE/feature_request.pt.md +12 -0
- package/lib/scaffold/features/ci/.github/PULL_REQUEST_TEMPLATE.es.md +17 -0
- package/lib/scaffold/features/ci/.github/PULL_REQUEST_TEMPLATE.md +17 -0
- package/lib/scaffold/features/ci/.github/PULL_REQUEST_TEMPLATE.pt.md +17 -0
- package/lib/scaffold/features/ci/.github/dependabot.yml +16 -0
- package/lib/scaffold/features/ci/.github/workflows/app.yml +20 -0
- package/lib/scaffold/features/ci/.gitlab/templates/deploy.yaml +14 -0
- package/lib/scaffold/features/ci/.gitlab/templates/dropbox.yaml +19 -0
- package/lib/scaffold/features/ci/.gitlab/templates/flutter.yaml +163 -0
- package/lib/scaffold/features/ci/.gitlab/templates/mailgun.yaml +28 -0
- package/lib/scaffold/features/ci/.gitlab-ci.yml +37 -0
- package/lib/scaffold/features/ci/codemagic.yaml +157 -0
- package/lib/scaffold/features/facebook/lib/core/data/api/tracking_api.dart +111 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/api/entities/feature_request_entity.dart +27 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/api/entities/feature_vote_entity.dart +27 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/api/feature_request_api.dart +50 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/api/feature_vote_api.dart +79 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/models/feature_requests.dart +48 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/models/feedback_state.dart +42 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/providers/feedback_page_notifier.dart +147 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/repositories/feature_request_repository.dart +95 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/ui/component/add_feature_form.dart +199 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/ui/feedback_page.dart +175 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/ui/widgets/add_feature_button.dart +76 -0
- package/lib/scaffold/features/feedback/lib/features/feedbacks/ui/widgets/feature_card.dart +279 -0
- package/lib/scaffold/features/ios-release/.kasy/apple.env.example +8 -0
- package/lib/scaffold/features/ios-release/.kasy/codemagic.env.example +7 -0
- package/lib/scaffold/features/ios-release/docs/codemagic-release.en.md +50 -0
- package/lib/scaffold/features/ios-release/docs/codemagic-release.es.md +50 -0
- package/lib/scaffold/features/ios-release/docs/codemagic-release.pt.md +50 -0
- package/lib/scaffold/features/ios-release/docs/ios-release.en.md +41 -0
- package/lib/scaffold/features/ios-release/docs/ios-release.es.md +41 -0
- package/lib/scaffold/features/ios-release/docs/ios-release.pt.md +41 -0
- package/lib/scaffold/features/ios-release/scripts/bump-ios-version.js +38 -0
- package/lib/scaffold/features/ios-release/scripts/release-ios.sh +137 -0
- package/lib/scaffold/features/llm_chat/lib/features/llm_chat/llm_chat_page.dart +301 -0
- package/lib/scaffold/features/local_notifications/lib/features/local_reminder/providers/reminder_notifier.dart +81 -0
- package/lib/scaffold/features/local_notifications/lib/features/local_reminder/repositories/reminder_preferences.dart +76 -0
- package/lib/scaffold/features/local_notifications/lib/features/local_reminder/ui/reminder_page.dart +282 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/api/entities/user_info_entity.dart +24 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/api/user_infos_api.dart +71 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/models/user_info.dart +92 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/providers/onboarding_model.dart +15 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/providers/onboarding_provider.dart +78 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/repositories/user_infos_repository.dart +29 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/animations/page_transitions.dart +30 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/components/onboarding_att_setup.dart +66 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/components/onboarding_features.dart +72 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/components/onboarding_loader.dart +92 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/components/onboarding_notifications_setup.dart +73 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/components/onboarding_questions.dart +89 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/onboarding_page.dart +94 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_background.dart +80 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_feature.dart +139 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_illustration_scaffold.dart +110 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_progress.dart +84 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_radio_question.dart +173 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_reassurance.dart +45 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/onboarding_sticky_footer.dart +77 -0
- package/lib/scaffold/features/onboarding/lib/features/onboarding/ui/widgets/selectable_row_tile.dart +392 -0
- package/lib/scaffold/features/revenuecat/lib/core/data/api/tracking_api.dart +116 -0
- package/lib/scaffold/features/revenuecat/lib/core/data/models/subscription.dart +322 -0
- package/lib/scaffold/features/revenuecat/lib/core/home_widgets/home_widget_background_task.dart +41 -0
- package/lib/scaffold/features/revenuecat/lib/core/states/user_state_notifier.dart +305 -0
- package/lib/scaffold/features/widget/lib/core/home_widgets/home_widget_background_task.dart +41 -0
- package/lib/scaffold/features/widget/lib/core/home_widgets/home_widget_mywidget_service.dart +57 -0
- package/lib/scaffold/features/widget/lib/core/home_widgets/home_widget_service.dart +54 -0
- package/lib/scaffold/features/widget/lib/features/settings/ui/components/admin/admin_home_widgets.dart +32 -0
- package/lib/scaffold/generate.js +370 -0
- package/lib/scaffold/patch.js +395 -0
- package/lib/scaffold/shared/backend-config.js +74 -0
- package/lib/scaffold/shared/fcm-service-account.js +126 -0
- package/lib/scaffold/shared/generator-utils.js +1664 -0
- package/lib/scaffold/shared/post-build.js +809 -0
- package/lib/scaffold/shared/template-strings.js +112 -0
- package/lib/utils/apple-release.js +273 -0
- package/lib/utils/checks.js +319 -0
- package/lib/utils/codemagic-release.js +127 -0
- package/lib/utils/fs.js +122 -0
- package/lib/utils/i18n.js +2123 -0
- package/lib/utils/license-gate.js +72 -0
- package/lib/utils/license.js +64 -0
- package/lib/utils/prompts.js +213 -0
- package/lib/utils/updates.js +97 -0
- package/package.json +55 -0
- package/templates/firebase/.env.example +24 -0
- package/templates/firebase/.firebaserc +5 -0
- package/templates/firebase/.kasy/apple.env.example +8 -0
- package/templates/firebase/.kasy/codemagic.env.example +7 -0
- package/templates/firebase/.metadata +30 -0
- package/templates/firebase/.windsurfrules +95 -0
- package/templates/firebase/Makefile +30 -0
- package/templates/firebase/README.en.md +180 -0
- package/templates/firebase/README.es.md +180 -0
- package/templates/firebase/README.md +180 -0
- package/templates/firebase/analysis_options.yaml +37 -0
- package/templates/firebase/android/app/build.gradle.kts +80 -0
- package/templates/firebase/android/app/src/debug/AndroidManifest.xml +7 -0
- package/templates/firebase/android/app/src/main/AndroidManifest.xml +93 -0
- package/templates/firebase/android/app/src/main/kotlin/com/aicrus/firebase/kit/MainActivity.kt +36 -0
- package/templates/firebase/android/app/src/main/kotlin/com/aicrus/firebase/kit/MyWidget.kt +50 -0
- package/templates/firebase/android/app/src/main/kotlin/com/aicrus/firebase/kit/MyWidgetReceiver.kt +7 -0
- package/templates/firebase/android/app/src/main/res/drawable/background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable/launch_background.xml +9 -0
- package/templates/firebase/android/app/src/main/res/drawable-hdpi/splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-mdpi/splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-v21/background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-v21/launch_background.xml +9 -0
- package/templates/firebase/android/app/src/main/res/drawable-xhdpi/splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxhdpi/splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxxhdpi/splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/templates/firebase/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/templates/firebase/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/templates/firebase/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/templates/firebase/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/templates/firebase/android/app/src/main/res/values/strings.xml +6 -0
- package/templates/firebase/android/app/src/main/res/values/styles.xml +22 -0
- package/templates/firebase/android/app/src/main/res/values-night/styles.xml +22 -0
- package/templates/firebase/android/app/src/main/res/values-night-v31/styles.xml +20 -0
- package/templates/firebase/android/app/src/main/res/values-v31/styles.xml +20 -0
- package/templates/firebase/android/app/src/main/res/xml/locales_config.xml +7 -0
- package/templates/firebase/android/app/src/main/res/xml/mywidget_info.xml +11 -0
- package/templates/firebase/android/app/src/profile/AndroidManifest.xml +7 -0
- package/templates/firebase/android/build.gradle.kts +28 -0
- package/templates/firebase/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/templates/firebase/android/gradle.properties +2 -0
- package/templates/firebase/android/settings.gradle.kts +29 -0
- package/templates/firebase/assets/icons/apple.png +0 -0
- package/templates/firebase/assets/icons/facebook.png +0 -0
- package/templates/firebase/assets/icons/google.png +0 -0
- package/templates/firebase/assets/icons/google_play_games.png +0 -0
- package/templates/firebase/assets/images/app_icon.png +0 -0
- package/templates/firebase/assets/images/empty_notifications.jpg +0 -0
- package/templates/firebase/assets/images/icon.png +0 -0
- package/templates/firebase/assets/images/onboarding/authentication-login-template.jpg +0 -0
- package/templates/firebase/assets/images/onboarding/img1.jpg +0 -0
- package/templates/firebase/assets/images/onboarding/img2.jpg +0 -0
- package/templates/firebase/assets/images/onboarding/img3.jpg +0 -0
- package/templates/firebase/assets/images/onboarding/notifications.png +0 -0
- package/templates/firebase/assets/images/onboarding/onboarding.png +0 -0
- package/templates/firebase/assets/images/onboarding/purchase.png +0 -0
- package/templates/firebase/assets/images/premium-bg.jpg +0 -0
- package/templates/firebase/assets/images/premium-switch-header.png +0 -0
- package/templates/firebase/assets/images/review.png +0 -0
- package/templates/firebase/assets/images/splashscreen.png +0 -0
- package/templates/firebase/assets/images/update.png +0 -0
- package/templates/firebase/build.yaml +13 -0
- package/templates/firebase/devtools_options.yaml +3 -0
- package/templates/firebase/docs/auth-setup.en.md +145 -0
- package/templates/firebase/docs/auth-setup.es.md +145 -0
- package/templates/firebase/docs/auth-setup.pt.md +145 -0
- package/templates/firebase/docs/codemagic-release.en.md +50 -0
- package/templates/firebase/docs/codemagic-release.es.md +50 -0
- package/templates/firebase/docs/codemagic-release.pt.md +50 -0
- package/templates/firebase/docs/ios-release.en.md +41 -0
- package/templates/firebase/docs/ios-release.es.md +41 -0
- package/templates/firebase/docs/ios-release.pt.md +54 -0
- package/templates/firebase/docs/navigation-transitions.md +80 -0
- package/templates/firebase/docs/revenuecat-setup.es.md +341 -0
- package/templates/firebase/docs/revenuecat-setup.pt.md +341 -0
- package/templates/firebase/firebase.json +1 -0
- package/templates/firebase/firestore.indexes.json +25 -0
- package/templates/firebase/firestore.rules +51 -0
- package/templates/firebase/functions/.eslintrc.js +45 -0
- package/templates/firebase/functions/jest.config.js +16 -0
- package/templates/firebase/functions/package-lock.json +6876 -0
- package/templates/firebase/functions/package.json +33 -0
- package/templates/firebase/functions/src/authentication/functions.ts +30 -0
- package/templates/firebase/functions/src/authentication/triggers.ts +103 -0
- package/templates/firebase/functions/src/core/api/meta_ads_api.ts +390 -0
- package/templates/firebase/functions/src/core/data/entities/entity_utils.ts +87 -0
- package/templates/firebase/functions/src/core/data/entities/notification_entity.ts +74 -0
- package/templates/firebase/functions/src/core/data/entities/page.ts +4 -0
- package/templates/firebase/functions/src/core/data/entities/subscription_entity.ts +76 -0
- package/templates/firebase/functions/src/core/data/entities/user_device_entity.ts +64 -0
- package/templates/firebase/functions/src/core/data/entities/user_entity.ts +43 -0
- package/templates/firebase/functions/src/core/data/repositories/repositories.ts +16 -0
- package/templates/firebase/functions/src/core/data/repositories/subscription_repository.ts +42 -0
- package/templates/firebase/functions/src/core/data/repositories/user_device_repository.ts +31 -0
- package/templates/firebase/functions/src/core/data/repositories/user_notifications_repository.ts +58 -0
- package/templates/firebase/functions/src/core/data/repositories/user_repository.ts +84 -0
- package/templates/firebase/functions/src/core/logger/logger.ts +13 -0
- package/templates/firebase/functions/src/core/storage/storage_manager.ts +52 -0
- package/templates/firebase/functions/src/core/utils/async_utils.ts +5 -0
- package/templates/firebase/functions/src/feature_requests/triggers.ts +3 -0
- package/templates/firebase/functions/src/index.ts +24 -0
- package/templates/firebase/functions/src/llm_chat/index.ts +181 -0
- package/templates/firebase/functions/src/notifications/admin_functions.ts +91 -0
- package/templates/firebase/functions/src/notifications/models/notification.ts +61 -0
- package/templates/firebase/functions/src/notifications/notifications_api.ts +147 -0
- package/templates/firebase/functions/src/notifications/triggers.ts +102 -0
- package/templates/firebase/functions/src/subscriptions/models/revenuecat_events.ts +162 -0
- package/templates/firebase/functions/src/subscriptions/models/subscription_status.ts +18 -0
- package/templates/firebase/functions/src/subscriptions/models/subscriptions.ts +173 -0
- package/templates/firebase/functions/src/subscriptions/subscriptions_functions.ts +135 -0
- package/templates/firebase/functions/src/subscriptions/triggers.ts +35 -0
- package/templates/firebase/functions/src/test/core/data/entities/entity_utils.spec.ts +44 -0
- package/templates/firebase/functions/tsconfig.dev.json +5 -0
- package/templates/firebase/functions/tsconfig.json +18 -0
- package/templates/firebase/home_widget_config.json +30 -0
- package/templates/firebase/ios/Flutter/AppFrameworkInfo.plist +24 -0
- package/templates/firebase/ios/Flutter/Debug.xcconfig +2 -0
- package/templates/firebase/ios/Flutter/Profile.xcconfig +2 -0
- package/templates/firebase/ios/Flutter/Release.xcconfig +2 -0
- package/templates/firebase/ios/HomeWidgetExtension/HomeWidgetBundle.swift +13 -0
- package/templates/firebase/ios/HomeWidgetExtension/Info.plist +29 -0
- package/templates/firebase/ios/HomeWidgetExtension/MyWidget.swift +86 -0
- package/templates/firebase/ios/HomeWidgetExtension.entitlements +10 -0
- package/templates/firebase/ios/NotificationService/Info.plist +31 -0
- package/templates/firebase/ios/NotificationService/NotificationService.swift +76 -0
- package/templates/firebase/ios/Podfile +111 -0
- package/templates/firebase/ios/Runner/AppDelegate.swift +75 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +1 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json +21 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +23 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png +0 -0
- package/templates/firebase/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +5 -0
- package/templates/firebase/ios/Runner/Base.lproj/LaunchScreen.storyboard +44 -0
- package/templates/firebase/ios/Runner/Base.lproj/Main.storyboard +26 -0
- package/templates/firebase/ios/Runner/Info.plist +132 -0
- package/templates/firebase/ios/Runner/Runner-Bridging-Header.h +1 -0
- package/templates/firebase/ios/Runner/Runner.entitlements +14 -0
- package/templates/firebase/ios/Runner/es.lproj/InfoPlist.strings +10 -0
- package/templates/firebase/ios/Runner/pt-BR.lproj/InfoPlist.strings +10 -0
- package/templates/firebase/ios/Runner/pt.lproj/InfoPlist.strings +10 -0
- package/templates/firebase/ios/Runner.xcodeproj/project.pbxproj +1108 -0
- package/templates/firebase/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/templates/firebase/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/templates/firebase/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/templates/firebase/ios/Runner.xcodeproj/xcshareddata/xcschemes/NotificationService.xcscheme +58 -0
- package/templates/firebase/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +101 -0
- package/templates/firebase/ios/Runner.xcworkspace/contents.xcworkspacedata +10 -0
- package/templates/firebase/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/templates/firebase/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/templates/firebase/ios/RunnerTests/RunnerTests.swift +12 -0
- package/templates/firebase/lib/components/components.dart +27 -0
- package/templates/firebase/lib/components/kasy_accordion.dart +384 -0
- package/templates/firebase/lib/components/kasy_alert.dart +266 -0
- package/templates/firebase/lib/components/kasy_app_bar.dart +536 -0
- package/templates/firebase/lib/components/kasy_avatar.dart +549 -0
- package/templates/firebase/lib/components/kasy_avatar_presets.dart +104 -0
- package/templates/firebase/lib/components/kasy_badge.dart +278 -0
- package/templates/firebase/lib/components/kasy_bottom_sheet.dart +338 -0
- package/templates/firebase/lib/components/kasy_button.dart +926 -0
- package/templates/firebase/lib/components/kasy_card.dart +128 -0
- package/templates/firebase/lib/components/kasy_checkbox.dart +429 -0
- package/templates/firebase/lib/components/kasy_chip.dart +83 -0
- package/templates/firebase/lib/components/kasy_dialog.dart +789 -0
- package/templates/firebase/lib/components/kasy_otp_verification_bottom_sheet.dart +233 -0
- package/templates/firebase/lib/components/kasy_skeleton.dart +225 -0
- package/templates/firebase/lib/components/kasy_text_area.dart +392 -0
- package/templates/firebase/lib/components/kasy_text_field.dart +591 -0
- package/templates/firebase/lib/components/kasy_text_field_otp.dart +532 -0
- package/templates/firebase/lib/components/kasy_toast.dart +803 -0
- package/templates/firebase/lib/core/ads/ads_provider.dart +136 -0
- package/templates/firebase/lib/core/ads/ads_state.dart +15 -0
- package/templates/firebase/lib/core/animations/bottomfade_anim.dart +37 -0
- package/templates/firebase/lib/core/animations/movefade_anim.dart +34 -0
- package/templates/firebase/lib/core/animations/slideright_anim.dart +38 -0
- package/templates/firebase/lib/core/bottom_menu/bart_inner_paths.dart +5 -0
- package/templates/firebase/lib/core/bottom_menu/bottom_menu.dart +127 -0
- package/templates/firebase/lib/core/bottom_menu/bottom_router.dart +281 -0
- package/templates/firebase/lib/core/bottom_menu/kasy_bart_navigation.dart +22 -0
- package/templates/firebase/lib/core/bottom_menu/kasy_bottom_bar_factory.dart +127 -0
- package/templates/firebase/lib/core/bottom_menu/notification_bottom_item.dart +48 -0
- package/templates/firebase/lib/core/config/app_env.dart +100 -0
- package/templates/firebase/lib/core/config/features.dart +15 -0
- package/templates/firebase/lib/core/data/api/analytics_api.dart +124 -0
- package/templates/firebase/lib/core/data/api/base_api_exceptions.dart +28 -0
- package/templates/firebase/lib/core/data/api/firestore_retry.dart +29 -0
- package/templates/firebase/lib/core/data/api/http_client.dart +38 -0
- package/templates/firebase/lib/core/data/api/image.dart +52 -0
- package/templates/firebase/lib/core/data/api/remote_config_api.dart +170 -0
- package/templates/firebase/lib/core/data/api/storage_api.dart +115 -0
- package/templates/firebase/lib/core/data/api/tracking_api.dart +119 -0
- package/templates/firebase/lib/core/data/api/user_api.dart +115 -0
- package/templates/firebase/lib/core/data/entities/json_converters.dart +39 -0
- package/templates/firebase/lib/core/data/entities/upload_result.dart +48 -0
- package/templates/firebase/lib/core/data/entities/user_entity.dart +54 -0
- package/templates/firebase/lib/core/data/models/pageable.dart +12 -0
- package/templates/firebase/lib/core/data/models/subscription.dart +322 -0
- package/templates/firebase/lib/core/data/models/user.dart +107 -0
- package/templates/firebase/lib/core/data/repositories/user_repository.dart +130 -0
- package/templates/firebase/lib/core/dev_inspector/dev_inspector.dart +464 -0
- package/templates/firebase/lib/core/dev_inspector/dev_inspector_highlight.dart +88 -0
- package/templates/firebase/lib/core/dev_inspector/dev_inspector_info.dart +70 -0
- package/templates/firebase/lib/core/dev_inspector/dev_inspector_panel.dart +204 -0
- package/templates/firebase/lib/core/dev_inspector/dev_inspector_service.dart +321 -0
- package/templates/firebase/lib/core/extensions/date.ext.dart +32 -0
- package/templates/firebase/lib/core/guards/authenticated_guard.dart +37 -0
- package/templates/firebase/lib/core/guards/guard.dart +68 -0
- package/templates/firebase/lib/core/guards/user_info_guard.dart +55 -0
- package/templates/firebase/lib/core/haptics/haptic_feedback_notifier.dart +19 -0
- package/templates/firebase/lib/core/haptics/kasy_haptics.dart +27 -0
- package/templates/firebase/lib/core/home_widgets/home_widget_background_task.dart +41 -0
- package/templates/firebase/lib/core/home_widgets/home_widget_mywidget_service.dart +57 -0
- package/templates/firebase/lib/core/home_widgets/home_widget_service.dart +54 -0
- package/templates/firebase/lib/core/icons/kasy_icons.dart +86 -0
- package/templates/firebase/lib/core/initializer/models/run_state.dart +14 -0
- package/templates/firebase/lib/core/initializer/onstart_service.dart +38 -0
- package/templates/firebase/lib/core/initializer/onstart_widget.dart +83 -0
- package/templates/firebase/lib/core/initializer/pending_notification_handler.dart +48 -0
- package/templates/firebase/lib/core/keyboard_fix/keyboard_flicker_fix.dart +164 -0
- package/templates/firebase/lib/core/navigation/kasy_fade_page_transitions_builder.dart +34 -0
- package/templates/firebase/lib/core/navigation/kasy_material_page_route.dart +41 -0
- package/templates/firebase/lib/core/navigation/kasy_navigation_config.dart +29 -0
- package/templates/firebase/lib/core/navigation/kasy_page_transition.dart +40 -0
- package/templates/firebase/lib/core/navigation/kasy_route_transition.dart +68 -0
- package/templates/firebase/lib/core/navigation/kasy_transition_kind.dart +17 -0
- package/templates/firebase/lib/core/navigation/navigation.dart +6 -0
- package/templates/firebase/lib/core/rating/api/rating_api.dart +99 -0
- package/templates/firebase/lib/core/rating/models/rating.dart +52 -0
- package/templates/firebase/lib/core/rating/models/review.dart +70 -0
- package/templates/firebase/lib/core/rating/providers/rating_repository.dart +75 -0
- package/templates/firebase/lib/core/rating/widgets/rate_banner.dart +190 -0
- package/templates/firebase/lib/core/rating/widgets/rate_popup.dart +54 -0
- package/templates/firebase/lib/core/rating/widgets/review_popup.dart +175 -0
- package/templates/firebase/lib/core/security/biometric_copy_slot.dart +20 -0
- package/templates/firebase/lib/core/security/biometric_guard.dart +114 -0
- package/templates/firebase/lib/core/security/biometric_preference_notifier.dart +17 -0
- package/templates/firebase/lib/core/security/biometric_service.dart +79 -0
- package/templates/firebase/lib/core/security/biometric_ui_bundle.dart +136 -0
- package/templates/firebase/lib/core/security/secured_storage.dart +46 -0
- package/templates/firebase/lib/core/shared_preferences/shared_preferences.dart +70 -0
- package/templates/firebase/lib/core/sidebar/kasy_sidebar.dart +2021 -0
- package/templates/firebase/lib/core/states/components/maybe_ask_biometric_setup.dart +88 -0
- package/templates/firebase/lib/core/states/components/maybe_ask_rating.dart +49 -0
- package/templates/firebase/lib/core/states/components/maybe_show_update_bottom_sheet.dart +86 -0
- package/templates/firebase/lib/core/states/components/maybeshow_component.dart +110 -0
- package/templates/firebase/lib/core/states/events_dispatcher.dart +103 -0
- package/templates/firebase/lib/core/states/models/event_model.dart +118 -0
- package/templates/firebase/lib/core/states/models/user_state.dart +22 -0
- package/templates/firebase/lib/core/states/notifications_dispatcher.dart +81 -0
- package/templates/firebase/lib/core/states/translations.dart +11 -0
- package/templates/firebase/lib/core/states/user_state_notifier.dart +321 -0
- package/templates/firebase/lib/core/theme/colors.dart +262 -0
- package/templates/firebase/lib/core/theme/extensions/theme_extension.dart +48 -0
- package/templates/firebase/lib/core/theme/providers/kasy_theme.dart +76 -0
- package/templates/firebase/lib/core/theme/providers/theme_provider.dart +212 -0
- package/templates/firebase/lib/core/theme/radius.dart +33 -0
- package/templates/firebase/lib/core/theme/shadows.dart +64 -0
- package/templates/firebase/lib/core/theme/spacing.dart +44 -0
- package/templates/firebase/lib/core/theme/texts.dart +176 -0
- package/templates/firebase/lib/core/theme/theme.dart +24 -0
- package/templates/firebase/lib/core/theme/theme_data/theme_data.dart +32 -0
- package/templates/firebase/lib/core/theme/theme_data/theme_data_factory.dart +15 -0
- package/templates/firebase/lib/core/theme/universal_theme.dart +210 -0
- package/templates/firebase/lib/core/toast/toast_service.dart +55 -0
- package/templates/firebase/lib/core/ui/app_dialog.dart +26 -0
- package/templates/firebase/lib/core/web_device_preview/web_device_preview.dart +1126 -0
- package/templates/firebase/lib/core/widgets/debouncer.dart +31 -0
- package/templates/firebase/lib/core/widgets/kasy_hover.dart +166 -0
- package/templates/firebase/lib/core/widgets/kasy_pressable.dart +2 -0
- package/templates/firebase/lib/core/widgets/kasy_pressable_depth.dart +161 -0
- package/templates/firebase/lib/core/widgets/kasy_scroll_behavior.dart +17 -0
- package/templates/firebase/lib/core/widgets/keyboard_visibility.dart +75 -0
- package/templates/firebase/lib/core/widgets/page_background.dart +71 -0
- package/templates/firebase/lib/core/widgets/page_not_found.dart +15 -0
- package/templates/firebase/lib/core/widgets/responsive_layout.dart +215 -0
- package/templates/firebase/lib/core/widgets/update_bottom_sheet.dart +192 -0
- package/templates/firebase/lib/environnements.dart +160 -0
- package/templates/firebase/lib/features/authentication/api/authentication_api.dart +528 -0
- package/templates/firebase/lib/features/authentication/api/authentication_api_interface.dart +84 -0
- package/templates/firebase/lib/features/authentication/providers/models/email.dart +36 -0
- package/templates/firebase/lib/features/authentication/providers/models/password.dart +37 -0
- package/templates/firebase/lib/features/authentication/providers/models/phone_signin_state.dart +21 -0
- package/templates/firebase/lib/features/authentication/providers/models/recover_state.dart +21 -0
- package/templates/firebase/lib/features/authentication/providers/models/signin_state.dart +20 -0
- package/templates/firebase/lib/features/authentication/providers/models/signup_state.dart +20 -0
- package/templates/firebase/lib/features/authentication/providers/phone_auth_notifier.dart +132 -0
- package/templates/firebase/lib/features/authentication/providers/recover_provider.dart +51 -0
- package/templates/firebase/lib/features/authentication/providers/signin_state_provider.dart +166 -0
- package/templates/firebase/lib/features/authentication/providers/signup_state_provider.dart +67 -0
- package/templates/firebase/lib/features/authentication/repositories/authentication_repository.dart +399 -0
- package/templates/firebase/lib/features/authentication/repositories/exceptions/authentication_exceptions.dart +85 -0
- package/templates/firebase/lib/features/authentication/ui/components/apple_signin.dart +19 -0
- package/templates/firebase/lib/features/authentication/ui/components/facebook_signin.dart +19 -0
- package/templates/firebase/lib/features/authentication/ui/components/google_signin.dart +32 -0
- package/templates/firebase/lib/features/authentication/ui/components/otp_verification.dart +100 -0
- package/templates/firebase/lib/features/authentication/ui/components/phone_input.dart +109 -0
- package/templates/firebase/lib/features/authentication/ui/phone_auth_page.dart +60 -0
- package/templates/firebase/lib/features/authentication/ui/recover_password_page.dart +101 -0
- package/templates/firebase/lib/features/authentication/ui/signin_page.dart +321 -0
- package/templates/firebase/lib/features/authentication/ui/signup_page.dart +310 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/auth_brand.dart +35 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/auth_page_back_button.dart +149 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/otp_input.dart +194 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/recover_password_result.dart +62 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/round_signin.dart +73 -0
- package/templates/firebase/lib/features/authentication/ui/widgets/social_separator.dart +26 -0
- package/templates/firebase/lib/features/dev/keyboard_test_page.dart +93 -0
- package/templates/firebase/lib/features/feedbacks/api/entities/feature_request_entity.dart +27 -0
- package/templates/firebase/lib/features/feedbacks/api/entities/feature_vote_entity.dart +27 -0
- package/templates/firebase/lib/features/feedbacks/api/feature_request_api.dart +51 -0
- package/templates/firebase/lib/features/feedbacks/api/feature_vote_api.dart +79 -0
- package/templates/firebase/lib/features/feedbacks/models/feature_requests.dart +48 -0
- package/templates/firebase/lib/features/feedbacks/models/feedback_state.dart +43 -0
- package/templates/firebase/lib/features/feedbacks/providers/feedback_page_notifier.dart +147 -0
- package/templates/firebase/lib/features/feedbacks/repositories/feature_request_repository.dart +92 -0
- package/templates/firebase/lib/features/feedbacks/ui/component/add_feature_form.dart +112 -0
- package/templates/firebase/lib/features/feedbacks/ui/feedback_page.dart +184 -0
- package/templates/firebase/lib/features/feedbacks/ui/widgets/add_feature_button.dart +66 -0
- package/templates/firebase/lib/features/feedbacks/ui/widgets/feature_card.dart +266 -0
- package/templates/firebase/lib/features/home/design_system_page.dart +552 -0
- package/templates/firebase/lib/features/home/home_components_page.dart +314 -0
- package/templates/firebase/lib/features/home/home_components_preview_page.dart +791 -0
- package/templates/firebase/lib/features/home/home_components_preview_registry.dart +7712 -0
- package/templates/firebase/lib/features/home/home_features_page.dart +207 -0
- package/templates/firebase/lib/features/home/home_page.dart +348 -0
- package/templates/firebase/lib/features/llm_chat/api/llm_chat_api.dart +50 -0
- package/templates/firebase/lib/features/llm_chat/api/llm_chat_message_entity.dart +35 -0
- package/templates/firebase/lib/features/llm_chat/llm_chat_page.dart +352 -0
- package/templates/firebase/lib/features/llm_chat/providers/llm_chat_notifier.dart +315 -0
- package/templates/firebase/lib/features/llm_chat/ui/widgets/llm_chat_avatars.dart +148 -0
- package/templates/firebase/lib/features/llm_chat/ui/widgets/llm_chat_composer.dart +124 -0
- package/templates/firebase/lib/features/local_reminder/providers/reminder_notifier.dart +81 -0
- package/templates/firebase/lib/features/local_reminder/repositories/reminder_preferences.dart +76 -0
- package/templates/firebase/lib/features/local_reminder/ui/reminder_page.dart +288 -0
- package/templates/firebase/lib/features/notifications/api/device_api.dart +433 -0
- package/templates/firebase/lib/features/notifications/api/entities/device_entity.dart +62 -0
- package/templates/firebase/lib/features/notifications/api/entities/notifications_entity.dart +35 -0
- package/templates/firebase/lib/features/notifications/api/local_notifier.dart +409 -0
- package/templates/firebase/lib/features/notifications/api/notifications_api.dart +319 -0
- package/templates/firebase/lib/features/notifications/providers/models/device.dart +27 -0
- package/templates/firebase/lib/features/notifications/providers/models/notification.dart +196 -0
- package/templates/firebase/lib/features/notifications/providers/models/notification_list.dart +38 -0
- package/templates/firebase/lib/features/notifications/providers/notifications_provider.dart +120 -0
- package/templates/firebase/lib/features/notifications/repositories/background_notification_handler.dart +13 -0
- package/templates/firebase/lib/features/notifications/repositories/device_repository.dart +137 -0
- package/templates/firebase/lib/features/notifications/repositories/notifications_repository.dart +214 -0
- package/templates/firebase/lib/features/notifications/shared/att_permission.dart +75 -0
- package/templates/firebase/lib/features/notifications/shared/notification_permission_bottom_sheet.dart +144 -0
- package/templates/firebase/lib/features/notifications/ui/components/notification_settings_sheet.dart +169 -0
- package/templates/firebase/lib/features/notifications/ui/components/notification_tile.dart +46 -0
- package/templates/firebase/lib/features/notifications/ui/components/notifications_header.dart +32 -0
- package/templates/firebase/lib/features/notifications/ui/components/push_notification_switcher.dart +106 -0
- package/templates/firebase/lib/features/notifications/ui/notifications_page.dart +202 -0
- package/templates/firebase/lib/features/notifications/ui/request_notification_permission.dart +84 -0
- package/templates/firebase/lib/features/notifications/ui/widgets/empty_notifications.dart +73 -0
- package/templates/firebase/lib/features/notifications/ui/widgets/notification_tile.dart +362 -0
- package/templates/firebase/lib/features/onboarding/api/entities/user_info_entity.dart +24 -0
- package/templates/firebase/lib/features/onboarding/api/user_infos_api.dart +71 -0
- package/templates/firebase/lib/features/onboarding/models/user_info.dart +92 -0
- package/templates/firebase/lib/features/onboarding/providers/onboarding_model.dart +15 -0
- package/templates/firebase/lib/features/onboarding/providers/onboarding_provider.dart +78 -0
- package/templates/firebase/lib/features/onboarding/repositories/user_infos_repository.dart +29 -0
- package/templates/firebase/lib/features/onboarding/ui/animations/page_transitions.dart +33 -0
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_att_setup.dart +66 -0
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_features.dart +76 -0
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_loader.dart +92 -0
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_notifications_setup.dart +76 -0
- package/templates/firebase/lib/features/onboarding/ui/components/onboarding_questions.dart +89 -0
- package/templates/firebase/lib/features/onboarding/ui/onboarding_page.dart +108 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_background.dart +80 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_feature.dart +145 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_illustration_scaffold.dart +125 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_progress.dart +84 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_radio_question.dart +173 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_reassurance.dart +44 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/onboarding_sticky_footer.dart +77 -0
- package/templates/firebase/lib/features/onboarding/ui/widgets/selectable_row_tile.dart +392 -0
- package/templates/firebase/lib/features/settings/settings_page.dart +460 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_bottom_sheet.dart +301 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_home_widgets.dart +38 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_paywalls.dart +53 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/admin_routes.dart +22 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/send_push_notification_page.dart +366 -0
- package/templates/firebase/lib/features/settings/ui/components/admin/send_push_notifier.dart +40 -0
- package/templates/firebase/lib/features/settings/ui/components/avatar_component.dart +430 -0
- package/templates/firebase/lib/features/settings/ui/components/delete_user_component.dart +28 -0
- package/templates/firebase/lib/features/settings/ui/components/language_switcher.dart +163 -0
- package/templates/firebase/lib/features/settings/ui/widgets/admin_card.dart +59 -0
- package/templates/firebase/lib/features/settings/ui/widgets/avatar_utils.dart +51 -0
- package/templates/firebase/lib/features/settings/ui/widgets/round_progress.dart +151 -0
- package/templates/firebase/lib/features/settings/ui/widgets/settings_bottom_sheet_option_tile.dart +52 -0
- package/templates/firebase/lib/features/settings/ui/widgets/settings_tile.dart +163 -0
- package/templates/firebase/lib/features/subscription/api/entities/subscription_entity.dart +40 -0
- package/templates/firebase/lib/features/subscription/api/inapp_subscription_api.dart +389 -0
- package/templates/firebase/lib/features/subscription/api/subscription_api.dart +39 -0
- package/templates/firebase/lib/features/subscription/providers/models/premium_state.dart +35 -0
- package/templates/firebase/lib/features/subscription/providers/premium_page_provider.dart +259 -0
- package/templates/firebase/lib/features/subscription/repositories/subscription_repository.dart +177 -0
- package/templates/firebase/lib/features/subscription/shared/maybeshow_premium.dart +85 -0
- package/templates/firebase/lib/features/subscription/ui/component/active_premium_content.dart +171 -0
- package/templates/firebase/lib/features/subscription/ui/component/paywall_minimal.dart +146 -0
- package/templates/firebase/lib/features/subscription/ui/component/paywall_row.dart +332 -0
- package/templates/firebase/lib/features/subscription/ui/component/paywall_with_switch.dart +207 -0
- package/templates/firebase/lib/features/subscription/ui/component/premium_content.dart +157 -0
- package/templates/firebase/lib/features/subscription/ui/component/premium_page_factory.dart +161 -0
- package/templates/firebase/lib/features/subscription/ui/premium_page.dart +139 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/comparison_table.dart +346 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/feature_line.dart +131 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/paywall_empty_state.dart +68 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_background.dart +63 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_background_gradient.dart +53 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_banner.dart +80 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_bottom_menu.dart +102 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_card.dart +26 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_close_button.dart +61 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/premium_feature.dart +39 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/selectable_col.dart +377 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/selectable_row.dart +436 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/trial_switcher.dart +85 -0
- package/templates/firebase/lib/features/subscription/ui/widgets/unsubscribe_feedback_popup.dart +123 -0
- package/templates/firebase/lib/firebase_options.dart +75 -0
- package/templates/firebase/lib/google_auth_options.dart +10 -0
- package/templates/firebase/lib/i18n/app_locale_display.dart +17 -0
- package/templates/firebase/lib/i18n/en.i18n.json +514 -0
- package/templates/firebase/lib/i18n/es.i18n.json +514 -0
- package/templates/firebase/lib/i18n/pt.i18n.json +514 -0
- package/templates/firebase/lib/i18n/widgets/locale_code_badge.dart +47 -0
- package/templates/firebase/lib/main.dart +263 -0
- package/templates/firebase/lib/router.dart +226 -0
- package/templates/firebase/login-redesign-preview.png +0 -0
- package/templates/firebase/pubspec.yaml +177 -0
- package/templates/firebase/scripts/bump-ios-version.js +38 -0
- package/templates/firebase/scripts/release-ios.sh +137 -0
- package/templates/firebase/slang.yaml +7 -0
- package/templates/firebase/storage.rules +12 -0
- package/templates/firebase/test/core/data/api/analytics_api_fake.dart +25 -0
- package/templates/firebase/test/core/data/api/fake_remote_config_api.dart +45 -0
- package/templates/firebase/test/core/data/api/storage_api_fake.dart +28 -0
- package/templates/firebase/test/core/data/models/subscription_test.dart +42 -0
- package/templates/firebase/test/core/data/repositories/user_repository_test.dart +56 -0
- package/templates/firebase/test/core/guards/guard_test.dart +78 -0
- package/templates/firebase/test/core/navigation/kasy_page_transition_test.dart +30 -0
- package/templates/firebase/test/core/onstart_service_test.dart +18 -0
- package/templates/firebase/test/core/rating/rating_api_fake.dart +58 -0
- package/templates/firebase/test/core/rating/rating_banner_test.dart +117 -0
- package/templates/firebase/test/core/rating/rating_test.dart +60 -0
- package/templates/firebase/test/core/security/secured_storage_fake.dart +33 -0
- package/templates/firebase/test/core/states/event_dispatcher_test.dart +269 -0
- package/templates/firebase/test/core/states/user_state_notifier_test.dart +244 -0
- package/templates/firebase/test/core/widgets/responsive_layout_test.dart +50 -0
- package/templates/firebase/test/device_test_utils.dart +98 -0
- package/templates/firebase/test/features/authentication/data/api/auth_api_fake.dart +169 -0
- package/templates/firebase/test/features/authentication/data/api/user_api_fake.dart +86 -0
- package/templates/firebase/test/features/authentication/lost_password_page_test.dart +59 -0
- package/templates/firebase/test/features/authentication/repositories/authentication_repository_test.dart +88 -0
- package/templates/firebase/test/features/authentication/signin_page_test.dart +133 -0
- package/templates/firebase/test/features/authentication/signup_page_test.dart +136 -0
- package/templates/firebase/test/features/notifications/data/device_api_fake.dart +66 -0
- package/templates/firebase/test/features/notifications/data/fake_facebook_api.dart +40 -0
- package/templates/firebase/test/features/notifications/data/local_notifier_fake.dart +59 -0
- package/templates/firebase/test/features/notifications/data/notifications_api_fake.dart +120 -0
- package/templates/firebase/test/features/notifications/data/notifications_settings_fake.dart +34 -0
- package/templates/firebase/test/features/notifications/providers/device_repository_test.dart +68 -0
- package/templates/firebase/test/features/notifications/providers/notifications_repository_test.dart +74 -0
- package/templates/firebase/test/features/notifications/ui/notifications_page_test.dart +69 -0
- package/templates/firebase/test/features/subscription/api/fake_inapp_subscription_api.dart +85 -0
- package/templates/firebase/test/features/subscription/api/fake_revenuecat_product.dart +186 -0
- package/templates/firebase/test/features/subscription/api/fake_subscription_api.dart +11 -0
- package/templates/firebase/test/features/subscription/subscription_page_test.dart +119 -0
- package/templates/firebase/test/firebase_test_utils.dart +25 -0
- package/templates/firebase/test/test_utils.dart +272 -0
- package/templates/firebase/web/favicon.png +0 -0
- package/templates/firebase/web/firebase-messaging-sw.js +27 -0
- package/templates/firebase/web/icons/Icon-192.png +0 -0
- package/templates/firebase/web/icons/Icon-512.png +0 -0
- package/templates/firebase/web/icons/Icon-maskable-192.png +0 -0
- package/templates/firebase/web/icons/Icon-maskable-512.png +0 -0
- package/templates/firebase/web/index.html +110 -0
- package/templates/firebase/web/local_notifications.js +31 -0
- package/templates/firebase/web/manifest.json +35 -0
- package/templates/firebase/web/splash/img/dark-1x.png +0 -0
- package/templates/firebase/web/splash/img/dark-2x.png +0 -0
- package/templates/firebase/web/splash/img/dark-3x.png +0 -0
- package/templates/firebase/web/splash/img/dark-4x.png +0 -0
- package/templates/firebase/web/splash/img/light-1x.png +0 -0
- package/templates/firebase/web/splash/img/light-2x.png +0 -0
- package/templates/firebase/web/splash/img/light-3x.png +0 -0
- package/templates/firebase/web/splash/img/light-4x.png +0 -0
|
@@ -0,0 +1,2123 @@
|
|
|
1
|
+
const LANGUAGE_CHOICES = [
|
|
2
|
+
{ title: 'English', value: 'en' },
|
|
3
|
+
{ title: 'Português', value: 'pt' },
|
|
4
|
+
{ title: 'Español', value: 'es' }
|
|
5
|
+
];
|
|
6
|
+
|
|
7
|
+
const MESSAGES = {
|
|
8
|
+
en: {
|
|
9
|
+
'cli.tagline': 'Create mobile apps without setup pain',
|
|
10
|
+
'cli.description': 'Build Flutter apps without setup pain.',
|
|
11
|
+
'cli.usage': '<command> [arguments]',
|
|
12
|
+
'cli.option.version': 'Show installed version',
|
|
13
|
+
'cli.option.lang': 'Language (en, pt, es)',
|
|
14
|
+
'cli.help.afterError': '(run with --help for usage details)',
|
|
15
|
+
'cli.help.more': 'Run "{command}" for details about a specific command.',
|
|
16
|
+
'cli.help.quickStart': 'Quick start - create a new app:',
|
|
17
|
+
'cli.help.optionDescription': 'Show help for command',
|
|
18
|
+
'cli.help.commandDescription': 'Show help for command',
|
|
19
|
+
'cli.help.inline.options': '[options]',
|
|
20
|
+
'cli.help.heading.usage': 'Usage',
|
|
21
|
+
'cli.help.heading.arguments': 'Arguments',
|
|
22
|
+
'cli.help.heading.options': 'Options',
|
|
23
|
+
'cli.help.heading.globalOptions': 'Global Options',
|
|
24
|
+
'cli.help.heading.commands': 'Commands',
|
|
25
|
+
'cli.command.setup.description': '📱 Set up a new Flutter app template',
|
|
26
|
+
'cli.command.new.description': '✨ Create a new app',
|
|
27
|
+
'cli.command.new.projectName': 'project name',
|
|
28
|
+
'cli.command.new.projectNameArg': 'Project folder name',
|
|
29
|
+
'prompt.projectName.enter': "What's your project name?",
|
|
30
|
+
'prompt.projectName.required': 'Project name is required.',
|
|
31
|
+
'prompt.projectName.default': 'my_app',
|
|
32
|
+
'cli.command.setup.directoryName': 'directory',
|
|
33
|
+
'cli.command.setup.directoryArg': 'Target directory (default: current folder .)',
|
|
34
|
+
'cli.command.setup.langName': 'lang',
|
|
35
|
+
'cli.command.setup.langOption': 'Prompt language (en, pt, es)',
|
|
36
|
+
'cli.command.setup.backendOption': 'Backend adapter (firebase, supabase, api)',
|
|
37
|
+
'cli.command.setup.featuresOption': 'Comma separated optional features (web,widget,camera,llm_chat,revenuecat,ci)',
|
|
38
|
+
'cli.command.help.paramName': 'command',
|
|
39
|
+
'cli.command.doctor.description': '🩺 Check environment and dependencies',
|
|
40
|
+
'cli.command.modules.description': '🧩 List available backend and features',
|
|
41
|
+
'cli.command.validate.description': '✅ Validate minimum backend/feature combinations',
|
|
42
|
+
'cli.command.validate.analyzeOnlyOption': 'Run flutter analyze only (skip builds)',
|
|
43
|
+
'cli.command.version.description': '🏷️ Print installed CLI version',
|
|
44
|
+
'cli.command.upgrade.description': '⬆️ Update the kasy CLI to the latest version',
|
|
45
|
+
'cli.command.uninstall.description': '🗑️ Uninstall the kasy CLI from this machine',
|
|
46
|
+
'cli.command.upgrade.running': 'Updating kasy CLI...',
|
|
47
|
+
'cli.command.upgrade.done': 'kasy updated successfully!',
|
|
48
|
+
'cli.command.uninstall.running': 'Uninstalling kasy CLI...',
|
|
49
|
+
'cli.command.uninstall.done': 'kasy uninstalled. Goodbye!',
|
|
50
|
+
'new.checks.environment': 'Environment checks',
|
|
51
|
+
'new.checks.environment.checking': 'Checking environment',
|
|
52
|
+
'new.checks.environment.done': 'Environment ready',
|
|
53
|
+
'setup.checks.backend.checking': 'Checking {backend} tools',
|
|
54
|
+
'setup.checks.backend.done': '{backend} tools ready',
|
|
55
|
+
'new.checks.firebaseForPush': 'Note: Firebase CLI is required for push notifications (FCM) on all backends.',
|
|
56
|
+
'new.checks.requiredBlock': 'Required tools are missing. Install them to continue.',
|
|
57
|
+
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
58
|
+
'new.checks.installSupabase': 'Supabase: npm i -g supabase (or brew install supabase/tap/supabase) && supabase login',
|
|
59
|
+
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (or npm i -g supabase)',
|
|
60
|
+
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
61
|
+
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
62
|
+
'setup.checks.environment': 'Environment checks',
|
|
63
|
+
'setup.checks.prepareFirebase': 'Firebase tooling (push, remote config)',
|
|
64
|
+
'setup.checks.backend': 'Backend checks ({backend})',
|
|
65
|
+
'setup.firebase.installing': 'Installing Firebase CLI...',
|
|
66
|
+
'setup.supabase.installing': 'Installing Supabase CLI...',
|
|
67
|
+
'setup.flutterfire.installing': 'Installing FlutterFire CLI...',
|
|
68
|
+
'setup.warn.hang': 'If setup stalls, run manually: flutterfire --version',
|
|
69
|
+
'setup.warn.supabase': 'Using Supabase or custom API? Firebase still helps with push notifications and remote config.',
|
|
70
|
+
'doctor.title': 'Kasy Doctor',
|
|
71
|
+
'doctor.baseEnvironment': 'Base environment',
|
|
72
|
+
'doctor.optionalBackend': 'Optional backend tooling',
|
|
73
|
+
'doctor.requiredMissing': 'Missing required dependencies. Fix the errors above and rerun doctor.',
|
|
74
|
+
'doctor.requiredPassed': '✓ Required environment checks passed.',
|
|
75
|
+
'modules.backends': 'Available backends:',
|
|
76
|
+
'modules.features': 'Available optional features:',
|
|
77
|
+
'modules.backend.firebase.description': 'Firebase backend adapter',
|
|
78
|
+
'modules.backend.supabase.description': 'Supabase backend adapter',
|
|
79
|
+
'modules.backend.api.description': 'REST/GraphQL API backend adapter',
|
|
80
|
+
'modules.feature.sentry.description': 'Sentry error tracking and crash reporting',
|
|
81
|
+
'modules.feature.analytics.description': 'Analytics event tracking (Firebase Analytics)',
|
|
82
|
+
'modules.feature.facebook.description': 'Facebook Login integration',
|
|
83
|
+
'modules.feature.revenuecat.description': 'RevenueCat subscriptions integration',
|
|
84
|
+
'modules.feature.onboarding.description': 'Onboarding flow feature',
|
|
85
|
+
'modules.feature.web.description': 'Web compatibility layer',
|
|
86
|
+
'modules.feature.widget.description': 'iOS/Android home widget integration',
|
|
87
|
+
'modules.feature.camera.description': 'Camera feature template',
|
|
88
|
+
'modules.feature.llm_chat.description': 'LLM chat feature template',
|
|
89
|
+
'modules.feature.feedback.description': 'User feedback and feature requests feature',
|
|
90
|
+
'modules.feature.local_notifications.description': 'Local reminders — user-scheduled notifications (iOS & Android only)',
|
|
91
|
+
'modules.feature.ci.description': 'CI: GitHub/GitLab (tests + build) + Codemagic (publish to stores)',
|
|
92
|
+
'checks.checking': 'Checking {name}...',
|
|
93
|
+
'checks.found': '{name} found',
|
|
94
|
+
'checks.foundWithVersion': '{name} ready ({version})',
|
|
95
|
+
'checks.missing': '{name} missing',
|
|
96
|
+
'checks.notFound': '{name} not found',
|
|
97
|
+
'checks.flutter.warn': 'Flutter SDK not found. Install Flutter to build and run apps: https://docs.flutter.dev/get-started/install',
|
|
98
|
+
'checks.install.failed': 'auto-install failed — run the command manually',
|
|
99
|
+
'banner.title': 'Kasy CLI · Flutter SaaS Generator',
|
|
100
|
+
'welcome.firstRun': 'Welcome to Kasy CLI!',
|
|
101
|
+
'welcome.chooseLanguage': 'First, choose your language:',
|
|
102
|
+
'prompt.language.select': 'Choose your language',
|
|
103
|
+
'prompt.cancelled': 'Command cancelled by user.',
|
|
104
|
+
'license.required': '🔑 License key required to use Kasy CLI',
|
|
105
|
+
'license.checking': 'Validating license key...',
|
|
106
|
+
'license.saved': '✅ License validated successfully',
|
|
107
|
+
'license.invalid': 'Invalid license format. Expected XXXX-XXXX-XXXX-XXXX.',
|
|
108
|
+
'prompt.license.enter': '👉 Enter your license key (XXXX-XXXX-XXXX-XXXX)',
|
|
109
|
+
'prompt.license.invalid': 'Invalid format. Use XXXX-XXXX-XXXX-XXXX.',
|
|
110
|
+
'prompt.appName.enter': 'Enter the name of your app',
|
|
111
|
+
'prompt.appName.required': 'App name is required.',
|
|
112
|
+
'prompt.bundleId.enter': 'Enter the bundle ID (com.company.app)',
|
|
113
|
+
'prompt.bundleId.required': 'Bundle ID is required.',
|
|
114
|
+
'prompt.bundleId.invalid': 'Bundle ID must look like com.company.app.',
|
|
115
|
+
'prompt.backend.select': 'Select backend provider',
|
|
116
|
+
'prompt.features.select': 'Select optional features to include',
|
|
117
|
+
'prompt.features.instructions': 'Space to toggle, enter to confirm',
|
|
118
|
+
'prompt.multiselect.instructions': '\nInstructions:\n ↑/↓: Highlight option\n ←/→/[space]: Toggle selection\n a: Toggle all\n enter/return: Complete answer',
|
|
119
|
+
'prompt.multiselect.warnDisabled': 'Use ↓ to go to a selectable option, then Space to select, Enter to confirm',
|
|
120
|
+
'prompt.firebase.projectId.enter': 'Enter Firebase Project ID',
|
|
121
|
+
'prompt.firebase.projectId.required': 'Firebase Project ID is required.',
|
|
122
|
+
'prompt.supabase.url.enter': 'Enter Supabase URL',
|
|
123
|
+
'prompt.supabase.url.required': 'Supabase URL is required.',
|
|
124
|
+
'prompt.supabase.anonKey.enter': 'Enter Supabase anon key',
|
|
125
|
+
'prompt.supabase.anonKey.required': 'Supabase anon key is required.',
|
|
126
|
+
'new.supabase.q.create': 'Create new Supabase project or use existing?',
|
|
127
|
+
'new.supabase.q.create.create': '✨ Create new project (recommended for beginners)',
|
|
128
|
+
'new.supabase.q.create.existing': '📂 Use existing project',
|
|
129
|
+
'new.firebase.q.setupMode': 'How do you want to set up Firebase?',
|
|
130
|
+
'new.firebase.q.setupMode.push': 'Firebase project for push notifications (FCM):',
|
|
131
|
+
'new.firebase.q.setupMode.create': '✨ Create from scratch (recommended for beginners)',
|
|
132
|
+
'new.firebase.q.setupMode.existing': '📂 Use existing project',
|
|
133
|
+
'new.firebase.q.region': 'Where are most of your app users located?',
|
|
134
|
+
'new.firebase.q.region.brazil': '🇧🇷 Brazil (São Paulo) — southamerica-east1',
|
|
135
|
+
'new.firebase.q.region.us': '🇺🇸 United States — us-central1',
|
|
136
|
+
'new.firebase.q.region.europe': '🇪🇺 Europe — europe-west1',
|
|
137
|
+
'new.firebase.q.region.global': '🌍 Global / Not sure — us-central1',
|
|
138
|
+
'new.firebase.create.prereq': 'You need: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Blaze plan required for deploy.',
|
|
139
|
+
'new.firebase.create.creating': 'Creating Firebase project…',
|
|
140
|
+
'new.firebase.create.includeWeb': 'Include Web app in Firebase? (for web platform)',
|
|
141
|
+
'new.firebase.create.nowDo': 'Now activate authentication (before running the app):',
|
|
142
|
+
'new.firebase.create.activateEmail': 'Enable Email/Password: Firebase Console → Authentication → Sign-in method',
|
|
143
|
+
'new.firebase.create.activateGoogle': 'Enable Google: same page, click Google → Enable',
|
|
144
|
+
'new.firebase.create.beforeContinue.title': 'Before continuing, enable in Firebase Console:',
|
|
145
|
+
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Password and Anonymous were enabled automatically)',
|
|
146
|
+
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → enable Email/Password, Anonymous and Google',
|
|
147
|
+
'new.firebase.create.beforeContinue.ready': 'I have enabled Google Sign-In. Continue?',
|
|
148
|
+
'new.firebase.create.beforeContinue.ready.noAuth': 'I have enabled Email/Password, Anonymous and Google Sign-In. Continue?',
|
|
149
|
+
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager and Storage were enabled automatically)',
|
|
150
|
+
'new.firebase.create.sha1Skipped': 'SHA-1 not added',
|
|
151
|
+
'new.firebase.create.sha1ManualInstruction': 'Add SHA-1 manually: Firebase Console → Project settings → Your apps → Android → Add fingerprint',
|
|
152
|
+
'new.firebase.create.sha1ParseError': 'Could not parse SHA1 from keytool output',
|
|
153
|
+
'new.firebase.create.sha1ErrorDetail': 'Reason',
|
|
154
|
+
'new.firebase.create.useExistingHint': 'Project may have been created. Try "Use existing project" with ID: {id}',
|
|
155
|
+
'new.firebase.create.usingProjectId': 'Using project ID: {id} (continuing with existing project)',
|
|
156
|
+
'new.firebase.create.waitPropagate': 'Waiting for project propagation (20s)…',
|
|
157
|
+
'new.firebase.create.success': 'Firebase project created successfully.',
|
|
158
|
+
'new.firebase.create.failed': 'Could not create project',
|
|
159
|
+
'new.firebase.create.gcloudRequired': 'gcloud CLI is required for "create from scratch". Without it, the full Firebase flow cannot run.',
|
|
160
|
+
'new.firebase.create.installTitle': 'To install gcloud CLI, run:',
|
|
161
|
+
'new.firebase.create.installCommand': 'Command',
|
|
162
|
+
'new.firebase.create.installAfter': 'Then log in',
|
|
163
|
+
'new.firebase.create.installUrl': 'Or download from',
|
|
164
|
+
'new.firebase.create.authCommand': 'Run: gcloud auth login',
|
|
165
|
+
'new.firebase.create.fallbackHint': 'For now, enter an existing Firebase Project ID to continue (or install gcloud and run again):',
|
|
166
|
+
'new.firebase.q.billingAccount': 'Which billing account to link to the project?',
|
|
167
|
+
'new.firebase.q.billingAccount.hint': 'Choose the account with available quota (up to 3 projects per account)',
|
|
168
|
+
'new.firebase.q.billingAccount.context': 'Limit: up to 3 projects per billing account. Choose one with available quota (remove unused projects at console.cloud.google.com/billing if needed).',
|
|
169
|
+
'new.firebase.q.billingAccount.other': 'Other — enter billing account ID manually',
|
|
170
|
+
'new.firebase.q.billingAccount.manualId': 'Billing account ID (e.g. 018A70-7D0548-0F84A8)',
|
|
171
|
+
'new.firebase.q.billingAccount.manualId.hint': 'Find it at console.cloud.google.com/billing',
|
|
172
|
+
'new.firebase.q.billingAccount.manualId.required': 'Billing account ID is required.',
|
|
173
|
+
'new.firebase.q.organization': 'In which GCP organization should the project be created?',
|
|
174
|
+
'new.firebase.q.organization.none': 'No organization (personal account / standalone project)',
|
|
175
|
+
'new.firebase.q.organization.hint': 'Organizations linked to your gcloud account',
|
|
176
|
+
'new.firebase.create.billingRetry.title': 'Link billing manually (quota exceeded or billing error):',
|
|
177
|
+
'new.firebase.create.billingRetry.hint': 'Tip: Limit is 3 projects per billing account. Remove unused projects at the link above. If you just removed one, wait 2–5 min for changes to propagate, then retry.',
|
|
178
|
+
'new.firebase.create.billingRetry.ready': 'Linked billing. Retry setup?',
|
|
179
|
+
'new.firebase.create.billingRetry.retrying': 'Retrying setup…',
|
|
180
|
+
'new.firebase.create.billingRetry.exit': 'Run again with "Use existing project" after linking billing.',
|
|
181
|
+
'new.firebase.create.projectQuotaExceeded': 'Project quota exceeded (limit of projects per Google account). Delete unused projects at console.cloud.google.com or enter an existing project ID below.',
|
|
182
|
+
'new.supabase.q.orgSelect': 'Which organization to create the project in?',
|
|
183
|
+
'new.supabase.orgsRequired': 'No organizations found. Run supabase login and try again.',
|
|
184
|
+
'new.supabase.q.region': 'Where are most of your app users located?',
|
|
185
|
+
'new.supabase.q.region.brazil': '🇧🇷 Brazil (São Paulo) — sa-east-1',
|
|
186
|
+
'new.supabase.q.region.us': '🇺🇸 United States (Virginia) — us-east-1',
|
|
187
|
+
'new.supabase.q.region.europe': '🇪🇺 Europe (Ireland) — eu-west-1',
|
|
188
|
+
'new.supabase.q.region.global': '🌍 Global / Not sure — us-east-1',
|
|
189
|
+
'new.supabase.q.dbPassword': 'Database password (min 6 chars)',
|
|
190
|
+
'new.supabase.q.dbPassword.required': 'Password must be at least 6 characters.',
|
|
191
|
+
'new.supabase.creating': 'Creating project on Supabase…',
|
|
192
|
+
'new.supabase.created': 'Project created successfully.',
|
|
193
|
+
'new.supabase.createFailed': 'Could not create project',
|
|
194
|
+
'new.supabase.loginHint': 'Run: supabase login. Then enter your existing project URL and key below.',
|
|
195
|
+
'new.supabase.setup': 'Linking project and deploying…',
|
|
196
|
+
'new.supabase.setupManual': 'Run manually: supabase link, supabase db push, supabase functions deploy',
|
|
197
|
+
'new.supabase.q.useExisting.orgSelect': 'Which organization is the project in?',
|
|
198
|
+
'new.supabase.q.useExisting.projectSelect': 'Which existing Supabase project do you want to use?',
|
|
199
|
+
'new.supabase.projectsRequired': 'No projects found in this organization.',
|
|
200
|
+
'new.supabase.q.dbPassword.existing': 'Database password (required to link and apply migrations)',
|
|
201
|
+
'new.supabase.existingLinked': 'Project ready to link and apply migrations.',
|
|
202
|
+
'setup.license.loaded': '✓ License key loaded from local config.',
|
|
203
|
+
'setup.license.saved': '✓ License key validated and saved.',
|
|
204
|
+
'setup.license.invalid': 'Invalid license key format. Expected XXXX-XXXX-XXXX-XXXX.',
|
|
205
|
+
'setup.error.targetNotEmpty': 'Target directory is not empty: {path}',
|
|
206
|
+
'setup.error.targetExists': 'Target directory already exists: {path}',
|
|
207
|
+
'setup.error.coreMissing': 'Core template folder not found: {path}',
|
|
208
|
+
'setup.error.requiredChecksFailed': 'Required environment checks failed. Run `kasy doctor`.',
|
|
209
|
+
'setup.error.generatingFailed': 'Project generation failed.',
|
|
210
|
+
'setup.error.conflictHint': 'Tip: Remove the project folder and run again, or use an empty directory.',
|
|
211
|
+
'setup.spinner.generating': 'Generating project files...',
|
|
212
|
+
'setup.success.created': 'Project created successfully.',
|
|
213
|
+
'setup.success.complete': '✓ Setup complete',
|
|
214
|
+
'setup.success.location': 'Location',
|
|
215
|
+
'setup.success.nextSteps': 'Next steps',
|
|
216
|
+
'setup.success.stepPubGet': 'flutter pub get',
|
|
217
|
+
'setup.success.stepRun': 'flutter run',
|
|
218
|
+
'validate.title': 'Kasy Validate',
|
|
219
|
+
'validate.success': '✓ Validation matrix passed.',
|
|
220
|
+
'validate.failed': 'Validation matrix failed.',
|
|
221
|
+
'validate.error': 'One or more validation combinations failed.',
|
|
222
|
+
'validate.projectNotFound': 'Project not found',
|
|
223
|
+
'validate.ok': 'ok',
|
|
224
|
+
'validate.fail': 'fail',
|
|
225
|
+
'validate.passed': 'passed',
|
|
226
|
+
|
|
227
|
+
// ── New Firebase flow ─────────────────────────────────────────────────
|
|
228
|
+
'cli.command.firebase.description': '🔥 Create a complete Flutter app with Firebase (recommended)',
|
|
229
|
+
'new.banner': '✨ New Flutter app',
|
|
230
|
+
'new.subtitle': 'Choose backend: Firebase, Supabase or REST API.',
|
|
231
|
+
'new.subtitle2': '🔒 Setup runs on your machine with your credentials — no third-party access needed.',
|
|
232
|
+
'new.q.backend': 'Where do you want to store your app data?',
|
|
233
|
+
'new.q.backend.firebase.desc': 'Easiest to start — auth, database and storage included',
|
|
234
|
+
'new.q.backend.supabase.desc': 'SQL database (PostgreSQL) with more control',
|
|
235
|
+
'new.q.backend.api.desc': 'You already have your own backend server',
|
|
236
|
+
|
|
237
|
+
'new.q.mode': 'How do you want to configure?',
|
|
238
|
+
'new.q.mode.quick': '⚡ Quick — minimal questions, smart defaults',
|
|
239
|
+
'new.q.mode.advanced': '🛠 Advanced — all options and credentials now',
|
|
240
|
+
|
|
241
|
+
'new.q.preset': 'Which features to include?',
|
|
242
|
+
'new.q.preset.starter': '⚡ Starter — analytics + crash reports + onboarding',
|
|
243
|
+
'new.q.preset.saas': '💰 SaaS — subscriptions + analytics + onboarding + feedback',
|
|
244
|
+
'new.q.preset.content': '📱 Content — analytics + onboarding + camera + LLM chat',
|
|
245
|
+
'new.q.preset.full': '🚀 Full — all features',
|
|
246
|
+
'new.q.preset.custom': '⚙️ Custom — choose features one by one',
|
|
247
|
+
'new.q.preset.none': '○ None — just the core',
|
|
248
|
+
|
|
249
|
+
'new.firebase.success.deployStep': '• Deploy backend (from inside the project folder):',
|
|
250
|
+
|
|
251
|
+
'cli.command.deploy.description': 'Deploy backend (Firebase or Supabase) — auto-detects project and configures FCM',
|
|
252
|
+
'cli.command.check.description': '🔔 Check push notifications setup (use --fix to auto-configure)',
|
|
253
|
+
'deploy.q.project': 'Firebase Project ID:',
|
|
254
|
+
'deploy.q.serviceAccount': 'Path to service account JSON:',
|
|
255
|
+
'deploy.detected.project': '✓ Firebase project detected:',
|
|
256
|
+
'deploy.detected.serviceAccount': '✓ Service account detected:',
|
|
257
|
+
'deploy.error.notProject': 'No firebase.json found in this directory. Run kasy deploy from inside the project folder.',
|
|
258
|
+
|
|
259
|
+
'cli.command.ios.description': 'iOS App Store release (Mac)',
|
|
260
|
+
'cli.command.ios.configure.description': 'Configure Apple API credentials for local IPA upload',
|
|
261
|
+
'cli.command.ios.release.description': 'Bump build, create IPA, and upload to App Store Connect',
|
|
262
|
+
'cli.command.ios.build.description': 'Build IPA only (no upload)',
|
|
263
|
+
'cli.command.ios.clean.description': 'Clean Flutter/Xcode caches before a failed iOS build',
|
|
264
|
+
'cli.command.codemagic.description': 'Trigger iOS builds on Codemagic (cloud)',
|
|
265
|
+
'cli.command.codemagic.configure.description': 'Configure Codemagic API credentials',
|
|
266
|
+
'cli.command.codemagic.release.description': 'Start a Codemagic iOS workflow build',
|
|
267
|
+
'cli.command.codemagic.status.description': 'Show Codemagic build status by ID',
|
|
268
|
+
|
|
269
|
+
'ios.configure.title': 'iOS App Store — setup',
|
|
270
|
+
'ios.configure.bundleId': 'Bundle ID',
|
|
271
|
+
'ios.configure.doc': 'Guide',
|
|
272
|
+
'ios.configure.openingLinks': 'Opening App Store Connect in your browser…',
|
|
273
|
+
'ios.configure.q.apiKey': 'App Store Connect API Key ID',
|
|
274
|
+
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
275
|
+
'ios.configure.q.p8Path': 'Path to downloaded AuthKey_XXXXX.p8 file',
|
|
276
|
+
'ios.configure.q.appId': 'App Store Connect App ID (optional)',
|
|
277
|
+
'ios.configure.q.required': 'Required',
|
|
278
|
+
'ios.configure.q.p8NotFound': 'File not found',
|
|
279
|
+
'ios.configure.cancelled': 'Setup cancelled',
|
|
280
|
+
'ios.configure.success': 'Apple credentials saved',
|
|
281
|
+
'ios.configure.p8Installed': 'Private key installed at',
|
|
282
|
+
'ios.configure.next': 'Next',
|
|
283
|
+
'ios.release.title': 'Building and uploading iOS release…',
|
|
284
|
+
'ios.release.success': 'iOS release uploaded',
|
|
285
|
+
'ios.build.title': 'Building iOS IPA…',
|
|
286
|
+
'ios.build.success': 'IPA built',
|
|
287
|
+
'ios.error.notProject': 'Not a Flutter iOS project (pubspec.yaml + ios/ required).',
|
|
288
|
+
'ios.error.noScript': 'scripts/release-ios.sh not found. Run: kasy update ios-release',
|
|
289
|
+
'ios.error.notMac': 'iOS release requires macOS with Xcode.',
|
|
290
|
+
'ios.error.useCodemagic': 'Use cloud release instead',
|
|
291
|
+
'ios.error.notConfigured': 'Apple credentials not configured',
|
|
292
|
+
'ios.error.runConfigure': 'Run: kasy ios configure',
|
|
293
|
+
'ios.error.signing': 'iOS code signing is not configured (DEVELOPMENT_TEAM missing).',
|
|
294
|
+
'ios.error.signingHint': 'Open ios/Runner.xcworkspace in Xcode → Runner → Signing & Capabilities → select your Team.',
|
|
295
|
+
'ios.error.googleUrlScheme': 'Google Sign-In iOS URL scheme is not configured.',
|
|
296
|
+
'ios.error.googleUrlSchemeHint': 'Fix: run flutterfire configure, then kasy ios clean, or re-run project setup before building.',
|
|
297
|
+
'ios.warn.lowDisk': 'Low disk space ({gb} GB free; recommend at least {min} GB for Xcode builds).',
|
|
298
|
+
'ios.hints.title': 'Xcode cache may be corrupted — try:',
|
|
299
|
+
'ios.hints.closeXcode': 'Close Xcode completely',
|
|
300
|
+
'ios.hints.retry': 'Then retry',
|
|
301
|
+
'ios.hints.manual': 'Or manually',
|
|
302
|
+
'ios.clean.title': 'Cleaning iOS build caches…',
|
|
303
|
+
'ios.clean.success': 'Caches cleaned',
|
|
304
|
+
'ios.clean.notMac': 'iOS clean is only available on macOS.',
|
|
305
|
+
'ios.clean.step.flutterClean': 'flutter clean',
|
|
306
|
+
'ios.clean.step.derivedData': 'Remove Xcode DerivedData (Runner)',
|
|
307
|
+
'ios.clean.step.buildDir': 'Remove build folders',
|
|
308
|
+
'ios.clean.step.pubGet': 'flutter pub get',
|
|
309
|
+
'ios.clean.step.pods': 'pod install',
|
|
310
|
+
|
|
311
|
+
'codemagic.configure.title': 'Codemagic — setup',
|
|
312
|
+
'codemagic.configure.doc': 'Guide',
|
|
313
|
+
'codemagic.configure.checklist': 'Complete signing + App Store Connect in the Codemagic dashboard (see guide).',
|
|
314
|
+
'codemagic.configure.openingLinks': 'Opening Codemagic in your browser…',
|
|
315
|
+
'codemagic.configure.q.token': 'Codemagic API token',
|
|
316
|
+
'codemagic.configure.q.appId': 'Codemagic App ID',
|
|
317
|
+
'codemagic.configure.q.workflowId': 'Workflow ID (from codemagic.yaml)',
|
|
318
|
+
'codemagic.configure.q.branch': 'Git branch to build',
|
|
319
|
+
'codemagic.configure.q.required': 'Required',
|
|
320
|
+
'codemagic.configure.cancelled': 'Setup cancelled',
|
|
321
|
+
'codemagic.configure.success': 'Codemagic credentials saved',
|
|
322
|
+
'codemagic.configure.next': 'Next',
|
|
323
|
+
'codemagic.release.title': 'Triggering Codemagic build…',
|
|
324
|
+
'codemagic.release.triggered': 'Build started',
|
|
325
|
+
'codemagic.status.title': 'Build status',
|
|
326
|
+
'codemagic.status.usage': 'Usage: kasy codemagic status <buildId>',
|
|
327
|
+
'codemagic.error.notProject': 'Not a Flutter iOS project (pubspec.yaml + ios/ required).',
|
|
328
|
+
'codemagic.error.notConfigured': 'Codemagic not configured',
|
|
329
|
+
'codemagic.error.addCi': 'Add CI first: kasy add ci (creates codemagic.yaml)',
|
|
330
|
+
'codemagic.error.runConfigure': 'Run: kasy codemagic configure',
|
|
331
|
+
'codemagic.error.googleUrlScheme': 'Codemagic build blocked: Google Sign-In iOS URL scheme is not configured.',
|
|
332
|
+
|
|
333
|
+
'doctor.ios.title': 'iOS release',
|
|
334
|
+
'doctor.ios.appleOk': 'Apple credentials configured',
|
|
335
|
+
'doctor.ios.appleMissing': 'Apple credentials missing — kasy ios configure',
|
|
336
|
+
'doctor.ios.p8Ok': 'API key file found',
|
|
337
|
+
'doctor.ios.p8Missing': 'AuthKey .p8 missing — kasy ios configure',
|
|
338
|
+
'doctor.ios.codemagicOk': 'Codemagic credentials configured',
|
|
339
|
+
'doctor.ios.codemagicMissing': 'Codemagic optional — kasy codemagic configure',
|
|
340
|
+
'doctor.ios.notMac': 'Local iOS release requires macOS',
|
|
341
|
+
'doctor.ios.doc': 'Documentation',
|
|
342
|
+
'doctor.ios.signingOk': 'Xcode signing (Development Team) configured',
|
|
343
|
+
'doctor.ios.signingMissing': 'Xcode signing not set — open Runner in Xcode and choose your Team',
|
|
344
|
+
'doctor.ios.googleUrlSchemeOk': 'Google Sign-In iOS URL scheme configured',
|
|
345
|
+
'doctor.ios.googleUrlSchemeMissing': 'Google Sign-In iOS URL scheme mismatch',
|
|
346
|
+
'doctor.ios.googleUrlSchemeSkipped': 'Google Sign-In iOS URL scheme check skipped (GoogleService-Info.plist not found)',
|
|
347
|
+
'doctor.ios.appleSignInEntitlementOk': 'Apple Sign-In entitlement configured',
|
|
348
|
+
'doctor.ios.appleSignInEntitlementMissing': 'Apple Sign-In entitlement missing — add Sign In with Apple capability in Xcode',
|
|
349
|
+
'doctor.ios.facebookOk': 'Facebook credentials configured (iOS)',
|
|
350
|
+
'doctor.ios.facebookPlaceholders': 'Facebook credentials are still placeholders — update FacebookAppID and FacebookClientToken in Info.plist',
|
|
351
|
+
'doctor.ios.facebookSkipped': 'Facebook credential check skipped (no FacebookAppID in Info.plist)',
|
|
352
|
+
'doctor.android.facebookOk': 'Facebook credentials configured (Android)',
|
|
353
|
+
'doctor.android.facebookPlaceholders': 'Facebook credentials are still placeholders — update facebook_app_id and facebook_client_token in android/app/src/main/res/values/strings.xml',
|
|
354
|
+
|
|
355
|
+
'doctor.revenuecat.title': 'RevenueCat',
|
|
356
|
+
'doctor.revenuecat.keysOk': 'API keys configured (iOS + Android)',
|
|
357
|
+
'doctor.revenuecat.keysEmpty': 'API keys not configured — set RC_IOS_API_KEY and RC_ANDROID_API_KEY in Makefile and .vscode/launch.json',
|
|
358
|
+
'doctor.revenuecat.keysTest': 'Using Test Store keys (test_) — replace with appl_ and goog_ for production',
|
|
359
|
+
'doctor.revenuecat.webhookUrlSupabase': 'Webhook URL (paste in RevenueCat → Integrations → Webhooks)',
|
|
360
|
+
'doctor.revenuecat.webhookUrlFirebase': 'Webhook URL: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
361
|
+
|
|
362
|
+
'update.iosRelease.success': 'iOS release files updated',
|
|
363
|
+
'add.iosRelease.success': 'iOS release files added',
|
|
364
|
+
'add.iosRelease.already': 'iOS release files already present',
|
|
365
|
+
|
|
366
|
+
'new.api.q.baseUrl': 'What is your API base URL?',
|
|
367
|
+
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
368
|
+
'new.firebase.banner': '🔥 New Flutter app — Firebase',
|
|
369
|
+
'new.firebase.subtitle': 'Full project: auth, Firestore, notifications, social login and more.',
|
|
370
|
+
'new.prereq.title': 'Before we start, make sure you have:',
|
|
371
|
+
'new.firebase.prereq.title': 'Before we start, make sure you have:',
|
|
372
|
+
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
373
|
+
'new.firebase.prereq.create.2': '2. Blaze plan (credit card — required for Cloud Functions)',
|
|
374
|
+
'new.firebase.prereq.create.billingLimit': '3. Limit: up to 3 projects per billing account. Remove unused projects or request quota increase if you\'ve reached this limit.',
|
|
375
|
+
'new.firebase.prereq.create.projectQuota': '4. Project quota: Google account has a limit (e.g. 10–30 projects). Delete unused projects at console.cloud.google.com if needed.',
|
|
376
|
+
'new.firebase.prereq.create.note': ' Project and APIs will be created automatically.',
|
|
377
|
+
'new.firebase.prereq.create.pushNote': ' Firebase project for FCM + Remote Config will be created automatically (no service account needed).',
|
|
378
|
+
'new.firebase.create.creatingPush': 'Creating Firebase project for push notifications…',
|
|
379
|
+
'new.firebase.create.successPush': 'Firebase project created for FCM + Remote Config.',
|
|
380
|
+
'new.firebase.prereq.1': '1. Firebase CLI installed (npm i -g firebase-tools) + firebase login',
|
|
381
|
+
'new.firebase.prereq.2': '2. Firebase project created at console.firebase.google.com',
|
|
382
|
+
'new.firebase.prereq.3': '3. Blaze plan activated (credit card — required for Cloud Functions)',
|
|
383
|
+
'new.firebase.prereq.4': '4. gcloud CLI installed + gcloud auth login (used to enable APIs automatically)',
|
|
384
|
+
'new.firebase.prereq.5': '5. Before deploy: enable Secret Manager API + Firebase Storage (see PREREQUISITES.md or links after generation)',
|
|
385
|
+
'new.firebase.prereq.doc': ' Full checklist: PREREQUISITES.md',
|
|
386
|
+
|
|
387
|
+
'new.firebase.q.appName': "What is the name of your app?",
|
|
388
|
+
'new.firebase.q.appName.hint': 'e.g.: My Amazing App',
|
|
389
|
+
'new.firebase.q.appName.required': 'App name is required.',
|
|
390
|
+
|
|
391
|
+
'new.firebase.q.bundleId': 'What is the unique identifier (Bundle ID) of your app?',
|
|
392
|
+
'new.firebase.q.bundleId.hint': 'It works like an address for your app, e.g.: com.mycompany.myapp',
|
|
393
|
+
'new.firebase.q.bundleId.invalid': 'Invalid format. Use: com.company.app',
|
|
394
|
+
'new.firebase.q.bundleId.required': 'Bundle ID is required.',
|
|
395
|
+
|
|
396
|
+
'new.firebase.q.projectId': 'What is your Firebase Project ID?',
|
|
397
|
+
'new.firebase.q.projectId.hint': 'Find it in the Firebase Console → your project → Settings',
|
|
398
|
+
'new.firebase.q.projectId.required': 'Firebase Project ID is required.',
|
|
399
|
+
|
|
400
|
+
'new.firebase.q.modules': 'Which optional features do you want to include?',
|
|
401
|
+
'new.firebase.q.modules.hint': 'Space to select, Enter to confirm',
|
|
402
|
+
'new.modules.header.common': '── Common (all backends) ──',
|
|
403
|
+
'new.modules.header.features': '── Screens & features ──',
|
|
404
|
+
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
405
|
+
'new.modules.header.ci': '── CI/CD ──',
|
|
406
|
+
'new.modules.header.monetization': '── Monetization ──',
|
|
407
|
+
'new.firebase.module.revenuecat': '💰 In-app subscriptions (RevenueCat)',
|
|
408
|
+
'new.firebase.module.sentry': '🚨 Crash reporting (Sentry)',
|
|
409
|
+
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
410
|
+
'new.firebase.module.facebook': '👤 Facebook login (requires App ID + Token)',
|
|
411
|
+
'new.firebase.module.web': '🌐 Web (add browser support — iOS/Android always included)',
|
|
412
|
+
'new.firebase.module.widget': '📱 Home widget (iOS/Android)',
|
|
413
|
+
'new.firebase.module.camera': '📷 Camera feature',
|
|
414
|
+
'new.firebase.module.llm_chat': '🤖 LLM chat feature',
|
|
415
|
+
'new.firebase.module.local_notifications': '🔔 Local reminders — user-scheduled notifications (iOS & Android only)',
|
|
416
|
+
'new.firebase.module.feedback': '💬 Feedback / feature requests',
|
|
417
|
+
'new.firebase.module.ci': '⚙️ CI: GitHub/GitLab (tests + build) + Codemagic (publish to stores)',
|
|
418
|
+
'new.firebase.module.onboarding': '👋 Onboarding (welcome screens, profile questions)',
|
|
419
|
+
|
|
420
|
+
'new.firebase.q.secrets.configureNow': 'Configure server secrets now? (RevenueCat webhook, Meta Ads)',
|
|
421
|
+
'new.firebase.q.secrets.configureNow.hint': 'If not now, see the README for commands to add them later',
|
|
422
|
+
'new.firebase.q.secrets.later': '• Server secrets not configured — they will be set up during `kasy deploy`.',
|
|
423
|
+
'new.firebase.q.revenuecat.webhookKey': 'Webhook secret key (a random value was suggested — press Enter to accept or type your own)',
|
|
424
|
+
'new.firebase.q.revenuecat.webhookKey.hint': 'Save this value. In RevenueCat dashboard, paste as: Bearer <this-value>',
|
|
425
|
+
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (for Ads Conversions API, optional)',
|
|
426
|
+
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (optional)',
|
|
427
|
+
'new.firebase.q.revenuecat.android': 'RevenueCat API key for Android',
|
|
428
|
+
'new.firebase.q.revenuecat.ios': 'RevenueCat API key for iOS',
|
|
429
|
+
'new.firebase.q.paywall': 'Which paywall style?',
|
|
430
|
+
'new.firebase.q.paywall.hint': 'Layout of the subscription screen — you can change it later in RevenueCat',
|
|
431
|
+
'new.firebase.q.revenuecat.web': 'Enable subscriptions on web (RevenueCat Web Billing)?',
|
|
432
|
+
'new.firebase.q.revenuecat.web.hint': 'Requires Web Billing setup in RevenueCat dashboard + Stripe. Leave unchecked if not needed.',
|
|
433
|
+
'new.firebase.q.revenuecat.webKey': 'RevenueCat Web Billing API key (rcb_xxx or rcb_sb_xxx, optional — configure later)',
|
|
434
|
+
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: add RC_WEB_API_KEY (launch.json) for web subscriptions',
|
|
435
|
+
'new.firebase.q.sentry.dsn': 'Sentry DSN (leave blank to configure later)',
|
|
436
|
+
'new.firebase.q.sentry.dsn.invalid': 'Invalid DSN. Expected format: https://key@host/project-id',
|
|
437
|
+
'new.firebase.q.mixpanel.token': 'Mixpanel Token (leave blank to configure later)',
|
|
438
|
+
'new.firebase.q.facebook.appId': 'Facebook App ID',
|
|
439
|
+
'new.firebase.q.facebook.appId.required': 'Facebook App ID is required.',
|
|
440
|
+
'new.firebase.q.facebook.appId.invalid': 'Facebook App ID must be numeric (e.g. 1234567890).',
|
|
441
|
+
'new.firebase.q.facebook.token': 'Facebook App Token',
|
|
442
|
+
'new.firebase.q.facebook.token.required': 'Facebook App Token is required.',
|
|
443
|
+
'new.firebase.q.revenuecat.android.required': 'RevenueCat Android key is required.',
|
|
444
|
+
'new.firebase.q.revenuecat.ios.required': 'RevenueCat iOS key is required.',
|
|
445
|
+
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID must be numeric (e.g. 1234567890).',
|
|
446
|
+
'new.firebase.q.revenuecat.webKey.invalid': 'Web Billing key must start with rcb_ (e.g. rcb_sb_xxx or rcb_xxx).',
|
|
447
|
+
|
|
448
|
+
'new.firebase.confirm.title': 'Configuration summary:',
|
|
449
|
+
'new.firebase.confirm.app': 'App',
|
|
450
|
+
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
451
|
+
'new.firebase.confirm.project': 'Firebase',
|
|
452
|
+
'new.firebase.confirm.modules': 'Features',
|
|
453
|
+
'new.firebase.confirm.none': 'none',
|
|
454
|
+
'new.firebase.confirm.proceed': 'Create project now?',
|
|
455
|
+
|
|
456
|
+
'new.firebase.step.copying': 'Setting up your project...',
|
|
457
|
+
'new.firebase.step.pubGet': 'Installing Flutter packages...',
|
|
458
|
+
'new.firebase.step.buildRunner': 'Generating code (Riverpod/Freezed)...',
|
|
459
|
+
'new.firebase.step.flutterfire': 'Configuring Firebase (flutterfire)...',
|
|
460
|
+
'new.firebase.step.deploy': 'Deploying Cloud Functions + Firestore rules...',
|
|
461
|
+
'new.firebase.step.done': 'Done!',
|
|
462
|
+
|
|
463
|
+
'new.firebase.success.title': '🎉 Your app is ready!',
|
|
464
|
+
'new.firebase.success.open': 'Open the project:',
|
|
465
|
+
'new.firebase.success.run': 'Run the app:',
|
|
466
|
+
'new.firebase.success.runMake': 'Or use make: make run | make run-ios | make run-android',
|
|
467
|
+
'new.firebase.success.deviceSetup': 'Before running on device:',
|
|
468
|
+
'new.firebase.success.deviceSetup.ios': 'iOS: connect iPhone via cable → trust computer → Xcode → Window → Devices → pair',
|
|
469
|
+
'new.firebase.success.deviceSetup.android': 'Android: Settings → Developer options → enable USB debugging',
|
|
470
|
+
'new.firebase.success.hotReload': "Hot reload: press 'r' in terminal while app runs. Changes appear instantly.",
|
|
471
|
+
'new.firebase.success.oneLiner': 'Or copy-paste to enter and run:',
|
|
472
|
+
'new.firebase.success.configure': 'Configure when ready:',
|
|
473
|
+
'new.firebase.success.alreadyDone': 'Already configured by CLI:',
|
|
474
|
+
'new.firebase.success.manualNeeded': 'Configure manually (if needed):',
|
|
475
|
+
'new.firebase.success.apn': '• APN Key (iOS push): Firebase Console → Project Settings → Cloud Messaging',
|
|
476
|
+
'new.firebase.success.social': '• Enable social login in Firebase Console → Authentication (Google and Apple are already in the code; just activate them there)',
|
|
477
|
+
'new.firebase.success.googleSignIn': '• Google Sign-In: 1) Enable in Firebase Console → Auth → Sign-in method → Google. 2) CLI auto-fills kGoogleWebClientId (google_auth_options.dart) from google-services.json for native (Android/iOS). Web uses signInWithPopup.',
|
|
478
|
+
'new.firebase.success.sentry': '• Sentry: For production error reports. Get DSN at sentry.io. Already in launch.json for dev. For release: --dart-define=SENTRY_DSN=xxx',
|
|
479
|
+
'new.firebase.success.mixpanel': '• Mixpanel: For production analytics. Already in launch.json for dev. For release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
480
|
+
'new.firebase.success.web': '• Web (add-on): Android & iOS work as usual. To test on browser: "flutter run -d chrome" or "flutter run -d web-server --web-port=5000". To build: "flutter build web". Push notifications are mobile-only and disabled on web automatically.',
|
|
481
|
+
|
|
482
|
+
'new.firebase.q.deploy': 'Deploy Cloud Functions + Firestore rules now?',
|
|
483
|
+
'new.firebase.q.deploy.hint': 'Requires Blaze plan and firebase-tools installed globally',
|
|
484
|
+
'new.firebase.deployFailed.hint': 'If deploy failed: create Firestore and Storage in Console first:',
|
|
485
|
+
'new.firebase.deployFailed.firestore': '• Firestore: create database (Create database → Native mode)',
|
|
486
|
+
'new.firebase.deployFailed.storage': '• Storage: click Get Started',
|
|
487
|
+
'new.firebase.deployFailed.orGcloud': 'Or create Firestore via CLI:',
|
|
488
|
+
'new.firebase.success.deployLater': '• Deploy backend when ready (from inside the project folder):',
|
|
489
|
+
'new.firebase.success.beforeDeploy': 'Before firebase deploy, enable (click to open):',
|
|
490
|
+
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
491
|
+
'new.firebase.success.firestore': '• Firestore (create database if missing)',
|
|
492
|
+
'new.firebase.success.storage': '• Firebase Storage (Get Started)',
|
|
493
|
+
'new.firebase.success.auth': '• Firebase Authentication (Email/Password)',
|
|
494
|
+
'new.firebase.success.security': '🔒 .gitignore excludes .env and other secrets. Cloud Functions use server-side secrets.',
|
|
495
|
+
|
|
496
|
+
'new.firebase.interactive.title': '⚠️ Cloud Configuration Required',
|
|
497
|
+
'new.firebase.interactive.desc': 'For security and billing reasons, Firebase requires manual activation of these services:',
|
|
498
|
+
'new.firebase.interactive.step1': '1. Create Firestore Database (Native mode): ',
|
|
499
|
+
'new.firebase.interactive.step2': '2. Upgrade to Blaze Plan (Pay-as-you-go): ',
|
|
500
|
+
'new.firebase.interactive.step3': '3. Enable Authentication (Email/Password): ',
|
|
501
|
+
|
|
502
|
+
'new.firebase.interactive.prompt1': 'Did you create the Firestore Database and enabled Authentication?',
|
|
503
|
+
'new.firebase.interactive.prompt2': 'Did you upgrade to the Blaze Plan? (Required for Cloud Functions)',
|
|
504
|
+
'new.firebase.interactive.googleAuthNote': '* Enable Google Sign-In manually (Email/Password and Anonymous are already enabled): ',
|
|
505
|
+
'new.firebase.interactive.billingNeeded': 'Blaze plan not yet active. Activate it at the link above, then wait.',
|
|
506
|
+
'new.firebase.interactive.billingWaiting': 'Checking Blaze status...',
|
|
507
|
+
'new.firebase.interactive.billingTimeout': 'Blaze plan not confirmed after timeout. Deploy skipped — run manually when ready.',
|
|
508
|
+
'new.firebase.interactive.authWarn': 'Could not enable Email/Password and Anonymous auth automatically. Enable manually:',
|
|
509
|
+
|
|
510
|
+
'new.firebase.interactive.ready': 'Ready to deploy Push Notifications + Security Rules now?',
|
|
511
|
+
'new.firebase.interactive.deploying': 'Deploying Cloud Functions + Firestore/Storage rules...',
|
|
512
|
+
'new.firebase.interactive.errorTitle': 'Deploy failed.',
|
|
513
|
+
'new.firebase.interactive.errorHint': 'Make sure Firestore is created and the Blaze plan is active with a credit card.',
|
|
514
|
+
'new.firebase.interactive.laterHint': 'You can deploy later inside the project folder using: ',
|
|
515
|
+
'new.firebase.interactive.skipped': 'Deploy skipped. You can deploy later manually.',
|
|
516
|
+
|
|
517
|
+
'new.firebase.warn.flutterfire': '⚠️ FlutterFire could not generate firebase_options_dev.dart automatically.',
|
|
518
|
+
'new.firebase.warn.flutterfire.manual': 'Run manually in the project folder:',
|
|
519
|
+
|
|
520
|
+
'new.firebase.error.templateMissing': 'Firebase template not found at: {path}. Make sure the Firebase/ folder exists.',
|
|
521
|
+
'new.firebase.error.dirNotEmpty': 'Directory "{path}" already exists and is not empty.',
|
|
522
|
+
'new.firebase.error.aborted': 'Setup aborted.',
|
|
523
|
+
|
|
524
|
+
'new.supabase.prereq.1': '1. Supabase account at supabase.com',
|
|
525
|
+
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI installed (both required)',
|
|
526
|
+
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase needed for push notifications)',
|
|
527
|
+
'new.supabase.prereq.login': ' If creating manually: have your project URL and anon key ready',
|
|
528
|
+
'new.supabase.loginRequired': '⚠️ You must be logged in to create a project. Run supabase login first.',
|
|
529
|
+
'new.supabase.loginCommand': ' supabase login',
|
|
530
|
+
'new.supabase.success.done.db': '• Database: tables, RLS policies',
|
|
531
|
+
'new.supabase.success.done.storage': '• Storage: bucket kasy with policies',
|
|
532
|
+
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
533
|
+
'new.supabase.success.done.secrets': '• Edge Function secrets (if provided)',
|
|
534
|
+
'new.supabase.success.done.launch': '• launch.json with Sentry, Mixpanel, RevenueCat',
|
|
535
|
+
'new.supabase.success.auth': '• Auth: Email already enabled. Enable Google, Apple, Facebook at: {authUrl}',
|
|
536
|
+
'new.supabase.success.storage': '• Storage: Bucket kasy created with policies (ready to use)',
|
|
537
|
+
'new.supabase.success.fcm': '• Push (FCM): Must configure in Firebase Console (Blaze plan). App is ready for Supabase + FCM. URL: {fcmUrl}',
|
|
538
|
+
'new.supabase.success.deployLater': '• Deploy backend when ready (from inside the project folder):',
|
|
539
|
+
|
|
540
|
+
'new.api.prereq.1': '1. Your REST API running and reachable',
|
|
541
|
+
'new.api.prereq.2': '2. API base URL (e.g. https://api.yourapp.com)',
|
|
542
|
+
'new.api.prereq.3': '3. Firebase CLI required for push notifications (FCM)',
|
|
543
|
+
'new.api.success.backendUrl': '• Point BACKEND_URL to your running API (launch.json)',
|
|
544
|
+
'new.api.success.fcm': '• Firebase is required for push notifications (FCM) — configure APNs key in Firebase console',
|
|
545
|
+
'new.api.success.auth': '• Implement the social auth endpoints (Google, Apple) on your backend',
|
|
546
|
+
|
|
547
|
+
'new.success.title': 'Project created successfully!',
|
|
548
|
+
'new.success.nextSteps': 'Next steps:',
|
|
549
|
+
'new.success.step.cd': 'Go to your project folder:',
|
|
550
|
+
'new.success.step.run': 'Run your app (with your configured keys):',
|
|
551
|
+
'new.success.step.console': 'Open your backend console:',
|
|
552
|
+
'new.firebase.create.estimatedTime': '(usually 3–5 min — do not close the terminal)',
|
|
553
|
+
'new.internet.warning': '📶 Make sure you have a stable internet connection — this step requires network access.',
|
|
554
|
+
|
|
555
|
+
// run command
|
|
556
|
+
'cli.command.run.description': '▶ Run the Flutter app using .env (launch.json dart-defines fallback)',
|
|
557
|
+
'run.launching': 'Launching Flutter app...',
|
|
558
|
+
'run.error.notFlutterProject': 'No pubspec.yaml found. Run this command from inside a Flutter project.',
|
|
559
|
+
'run.error.flutterNotFound': 'Flutter not found. Make sure Flutter is installed and on your PATH.',
|
|
560
|
+
|
|
561
|
+
// doctor project checks
|
|
562
|
+
'doctor.project.title': 'Project',
|
|
563
|
+
'doctor.project.appName': 'App name',
|
|
564
|
+
'doctor.project.backend': 'Backend',
|
|
565
|
+
'doctor.project.bundleId': 'Bundle ID',
|
|
566
|
+
'doctor.project.pubGet': 'Dependencies installed (pubspec.lock present)',
|
|
567
|
+
'doctor.project.pubGetMissing': 'Run flutter pub get — pubspec.lock not found',
|
|
568
|
+
'doctor.project.modules': 'Active features',
|
|
569
|
+
'doctor.project.noModules': 'No optional features active',
|
|
570
|
+
|
|
571
|
+
// add command
|
|
572
|
+
'cli.command.add.description': '➕ Add a feature to an existing project',
|
|
573
|
+
|
|
574
|
+
// docs command
|
|
575
|
+
'cli.command.docs.description': '📖 Show CLI documentation and available commands',
|
|
576
|
+
|
|
577
|
+
// notifications command
|
|
578
|
+
'cli.command.notifications.description': '🔔 Local notification copy (scheduled reminders + Home demo)',
|
|
579
|
+
'cli.command.notifications.text.description': 'Set titles and bodies shown in local notifications',
|
|
580
|
+
'notifications.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
581
|
+
'notifications.error.noI18n': 'lib/i18n/*.i18n.json not found in this project.',
|
|
582
|
+
'notifications.error.noFeatures': 'lib/core/config/features.dart not found.',
|
|
583
|
+
'notifications.error.notEnabled': 'Local notifications are disabled. Run: kasy add local_notifications',
|
|
584
|
+
'notifications.error.cancelled': 'Cancelled.',
|
|
585
|
+
'notifications.prompt.intro': 'Local notification texts',
|
|
586
|
+
'notifications.prompt.hint': 'Home demo = instant test from Features. Reminder = scheduled alert from Settings.',
|
|
587
|
+
'notifications.prompt.demoTitle': 'Home demo — notification title',
|
|
588
|
+
'notifications.prompt.demoBody': 'Home demo — description / body',
|
|
589
|
+
'notifications.prompt.reminderTitle': 'Scheduled reminder — title',
|
|
590
|
+
'notifications.prompt.reminderBody': 'Scheduled reminder — body',
|
|
591
|
+
'notifications.prompt.required': 'Required.',
|
|
592
|
+
'notifications.writing': 'Updating lib/i18n/*.i18n.json...',
|
|
593
|
+
'notifications.written': 'Updated: {langs}',
|
|
594
|
+
'notifications.slang': 'Running dart run slang...',
|
|
595
|
+
'notifications.slangDone': 'Translations regenerated',
|
|
596
|
+
'notifications.slangFailed': 'dart run slang failed — run it manually in the project',
|
|
597
|
+
'notifications.done': 'Local notification copy updated.',
|
|
598
|
+
'notifications.summary.demo': 'Home → Features (demo):',
|
|
599
|
+
'notifications.summary.reminder': 'Settings → Reminders (scheduled):',
|
|
600
|
+
|
|
601
|
+
'add.list.title': 'Available features (✓ = already active)',
|
|
602
|
+
'add.error.noModule': 'Provide a feature name or use --list to see available features.',
|
|
603
|
+
'add.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
604
|
+
'add.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
605
|
+
'add.alreadyActive': 'Feature "{module}" is already active in this project.',
|
|
606
|
+
'add.applying': 'Adding feature: {module}',
|
|
607
|
+
'add.applyingPatch': 'Applying patch files...',
|
|
608
|
+
'add.patchApplied': 'Patch applied',
|
|
609
|
+
'add.patchFailed': 'Patch failed — check the output above',
|
|
610
|
+
'add.pubGet': 'Running flutter pub get...',
|
|
611
|
+
'add.pubGetDone': 'Dependencies updated',
|
|
612
|
+
'add.pubGetFailed': 'flutter pub get failed — run it manually',
|
|
613
|
+
'add.buildRunner': 'Running build_runner...',
|
|
614
|
+
'add.buildRunnerDone': 'Code generation complete',
|
|
615
|
+
'add.buildRunnerFailed': 'build_runner failed — run it manually',
|
|
616
|
+
'add.success': 'Feature "{module}" added successfully.',
|
|
617
|
+
'add.cancelled': 'Cancelled.',
|
|
618
|
+
'add.prompt.sentryDsn': 'Sentry DSN (leave blank to configure later):',
|
|
619
|
+
'add.prompt.mixpanelToken': 'Mixpanel Token (leave blank to configure later):',
|
|
620
|
+
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (leave blank to configure later):',
|
|
621
|
+
'add.prompt.rcIosKey': 'RevenueCat iOS API key (leave blank to configure later):',
|
|
622
|
+
'add.note.facebook': 'Add your Facebook App ID and token in .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
623
|
+
'new.q.llm_chat.configureNow': 'Configure the LLM Chat agent now?',
|
|
624
|
+
'new.q.llm_chat.configureNow.hint': 'You can skip and run "kasy add llm_chat" later',
|
|
625
|
+
'add.llm_chat.reconfigure': 'Feature already active — reconfiguring credentials only.',
|
|
626
|
+
'add.prompt.llmProvider': 'LLM provider:',
|
|
627
|
+
'add.prompt.llmSystemPrompt': 'Agent system prompt (leave blank for none):\n Example: "You are a support assistant for the Fitsync app. Only answer about workouts."\n >',
|
|
628
|
+
'add.prompt.llmApiKey': 'API key (OpenAI or Gemini) — stored as server secret, never in the app (leave blank to set later):',
|
|
629
|
+
'add.prompt.llmEndpoint': 'Your LLM endpoint URL (leave blank to configure later):',
|
|
630
|
+
'add.llm_chat.settingSecret': 'Storing API key as server secret...',
|
|
631
|
+
'add.llm_chat.secretSet': 'API key stored as secret',
|
|
632
|
+
'add.llm_chat.secretFailed': 'Could not set secret automatically — set it manually (see instructions below)',
|
|
633
|
+
'add.llm_chat.skipSecret': 'API key skipped — set it later via the server CLI before deploying',
|
|
634
|
+
'add.llm_chat.deploying': 'Deploying LLM function to server...',
|
|
635
|
+
'add.llm_chat.deployed': 'LLM function deployed successfully',
|
|
636
|
+
'add.llm_chat.deployFailed': 'Auto-deploy failed — deploy manually (see instructions below)',
|
|
637
|
+
'add.llm_chat.nextSteps.firebase': '\n Next steps:\n 1. The LLM_CHAT_ENDPOINT in .vscode/launch.json has been pre-filled.\n 2. Run the app: kasy run\n',
|
|
638
|
+
'add.llm_chat.nextSteps.firebase.deployFailed': '\n Next steps:\n 1. Deploy manually: firebase deploy --only functions:llmChat\n 2. The LLM_CHAT_ENDPOINT in .vscode/launch.json has been pre-filled.\n 3. Run the app: kasy run\n',
|
|
639
|
+
'add.llm_chat.nextSteps.supabase': '\n Next steps:\n 1. The LLM_CHAT_ENDPOINT in .vscode/launch.json has been pre-filled.\n 2. Run the app: kasy run\n',
|
|
640
|
+
'add.llm_chat.nextSteps.supabase.deployFailed': '\n Next steps:\n 1. Deploy manually: supabase functions deploy llm-chat --no-verify-jwt\n 2. The LLM_CHAT_ENDPOINT in .vscode/launch.json has been pre-filled.\n 3. Run the app: kasy run\n',
|
|
641
|
+
'add.llm_chat.nextSteps.api': '\n Next steps:\n 1. Create an endpoint on your server that accepts {message, history} and calls your LLM.\n 2. Update LLM_CHAT_ENDPOINT in .vscode/launch.json with your endpoint URL.\n 3. Run the app: kasy run\n',
|
|
642
|
+
'cli.command.remove.description': '🗑️ Remove a feature from an existing project',
|
|
643
|
+
'remove.error.noModule': 'Provide a feature name. Usage: kasy remove <feature>',
|
|
644
|
+
'remove.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
645
|
+
'remove.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
646
|
+
'remove.error.notActive': 'Feature "{module}" is not active in this project.',
|
|
647
|
+
'remove.confirm': 'Remove feature "{module}"? This will delete files and dependencies.',
|
|
648
|
+
'remove.cancelled': 'Cancelled.',
|
|
649
|
+
'remove.removing': 'Removing feature: {module}',
|
|
650
|
+
'remove.pubGet': 'Running flutter pub get...',
|
|
651
|
+
'remove.pubGetDone': 'Dependencies updated',
|
|
652
|
+
'remove.pubGetFailed': 'flutter pub get failed — run it manually',
|
|
653
|
+
'remove.buildRunner': 'Running build_runner...',
|
|
654
|
+
'remove.buildRunnerDone': 'Code generation complete',
|
|
655
|
+
'remove.buildRunnerFailed': 'build_runner failed — run it manually',
|
|
656
|
+
'remove.success': 'Feature "{module}" removed successfully.',
|
|
657
|
+
'remove.warn.ci': 'CI files removed. If you had custom workflow files, restore them from git.',
|
|
658
|
+
'remove.warn.sentry.shared': 'sentry_flutter kept — still required by active features (revenuecat/facebook).',
|
|
659
|
+
'cli.command.update.description': '⬆️ Update features/components in an existing project',
|
|
660
|
+
'cli.command.update.targetArg': 'Target to update (e.g. camera, revenuecat, sentry, components)',
|
|
661
|
+
'update.error.noProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
662
|
+
'update.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
663
|
+
'update.error.unknownTarget': 'Unknown update target: {module}\nAvailable: {list}',
|
|
664
|
+
'update.error.notActive': 'Feature "{module}" is not active in this project.',
|
|
665
|
+
'update.alreadyUpToDate': 'Project is already up to date (v{version}).',
|
|
666
|
+
'update.status': 'Project: v{from} → CLI: v{to}',
|
|
667
|
+
'update.noVersion': 'Project was generated without version tracking. All features can be updated.',
|
|
668
|
+
'update.changesTitle': 'Changes available for your features:',
|
|
669
|
+
'update.howToUpdate': 'To update a feature:',
|
|
670
|
+
'update.howToUpdateComponents': 'To update base components:',
|
|
671
|
+
'update.warn.commit': 'This will overwrite files from feature "{module}". Make sure you have committed your changes first.',
|
|
672
|
+
'update.warn.commitComponents': 'This will overwrite base component files. Make sure you have committed your changes first.',
|
|
673
|
+
'update.confirm': 'Overwrite feature "{module}" files with the latest version?',
|
|
674
|
+
'update.confirmComponents': 'Overwrite base component files with the latest version?',
|
|
675
|
+
'update.cancelled': 'Cancelled.',
|
|
676
|
+
'update.applying': 'Applying update for feature: {module}',
|
|
677
|
+
'update.applyingComponents': 'Applying update for base components...',
|
|
678
|
+
'update.applied': 'Feature {module} updated',
|
|
679
|
+
'update.appliedComponents': '{count} base component files updated',
|
|
680
|
+
'update.applyFailed': 'Failed to apply update for feature {module}',
|
|
681
|
+
'update.applyComponentsFailed': 'Failed to apply update for base components',
|
|
682
|
+
'update.noPatch': 'Feature "{module}" has no files to update (configuration-only feature).',
|
|
683
|
+
'update.noComponentFiles': 'No base component files were found to update.',
|
|
684
|
+
'update.pubGet': 'Running flutter pub get...',
|
|
685
|
+
'update.pubGetDone': 'Dependencies updated',
|
|
686
|
+
'update.pubGetFailed': 'flutter pub get failed — run it manually',
|
|
687
|
+
'update.buildRunner': 'Running build_runner...',
|
|
688
|
+
'update.buildRunnerDone': 'Code generation complete',
|
|
689
|
+
'update.buildRunnerFailed': 'build_runner failed — run it manually',
|
|
690
|
+
'update.success': 'Feature "{module}" updated successfully.',
|
|
691
|
+
'update.componentsSuccess': 'Base components updated successfully.',
|
|
692
|
+
},
|
|
693
|
+
pt: {
|
|
694
|
+
'cli.tagline': 'Crie apps móveis sem dor de configuração',
|
|
695
|
+
'cli.description': 'Crie apps Flutter sem dor de configuração.',
|
|
696
|
+
'cli.usage': '<comando> [argumentos]',
|
|
697
|
+
'cli.option.version': 'Mostrar versao instalada',
|
|
698
|
+
'cli.option.lang': 'Idioma (en, pt, es)',
|
|
699
|
+
'cli.help.afterError': '(execute com --help para detalhes de uso)',
|
|
700
|
+
'cli.help.more': 'Execute "{command}" para detalhes de um comando especifico.',
|
|
701
|
+
'cli.help.quickStart': 'Criar um novo app:',
|
|
702
|
+
'cli.help.optionDescription': 'Mostrar ajuda do comando',
|
|
703
|
+
'cli.help.commandDescription': 'Mostrar ajuda do comando',
|
|
704
|
+
'cli.help.inline.options': '[opcoes]',
|
|
705
|
+
'cli.help.heading.usage': 'Uso',
|
|
706
|
+
'cli.help.heading.arguments': 'Argumentos',
|
|
707
|
+
'cli.help.heading.options': 'Opcoes',
|
|
708
|
+
'cli.help.heading.globalOptions': 'Opcoes Globais',
|
|
709
|
+
'cli.help.heading.commands': 'Comandos',
|
|
710
|
+
'cli.command.setup.description': '📱 Configura um novo template Flutter',
|
|
711
|
+
'cli.command.new.description': '✨ Cria um novo app',
|
|
712
|
+
'cli.command.new.projectName': 'nome do projeto',
|
|
713
|
+
'cli.command.new.projectNameArg': 'Nome da pasta do projeto',
|
|
714
|
+
'prompt.projectName.enter': 'Qual o nome do seu projeto?',
|
|
715
|
+
'prompt.projectName.required': 'O nome do projeto é obrigatório.',
|
|
716
|
+
'prompt.projectName.default': 'meu_app',
|
|
717
|
+
'cli.command.setup.directoryName': 'diretorio',
|
|
718
|
+
'cli.command.setup.directoryArg': 'Diretório de destino (padrão: pasta atual .)',
|
|
719
|
+
'cli.command.setup.langName': 'idioma',
|
|
720
|
+
'cli.command.setup.langOption': 'Idioma dos prompts (en, pt, es)',
|
|
721
|
+
'cli.command.setup.backendOption': 'Adapter de backend (firebase, supabase, api)',
|
|
722
|
+
'cli.command.setup.featuresOption': 'Features opcionais separadas por virgula (web,widget,camera,llm_chat,revenuecat,ci)',
|
|
723
|
+
'cli.command.help.paramName': 'comando',
|
|
724
|
+
'cli.command.doctor.description': '🩺 Verifica ambiente e dependencias',
|
|
725
|
+
'cli.command.modules.description': '🧩 Lista backends e features disponiveis',
|
|
726
|
+
'cli.command.validate.description': '✅ Valida combinacoes minimas de backend/features',
|
|
727
|
+
'cli.command.validate.analyzeOnlyOption': 'Executa apenas flutter analyze (sem build)',
|
|
728
|
+
'cli.command.version.description': '🏷️ Mostra a versao instalada da CLI',
|
|
729
|
+
'cli.command.upgrade.description': '⬆️ Atualiza a CLI kasy para a versao mais recente',
|
|
730
|
+
'cli.command.uninstall.description': '🗑️ Remove a CLI kasy desta maquina',
|
|
731
|
+
'cli.command.upgrade.running': 'Atualizando a CLI kasy...',
|
|
732
|
+
'cli.command.upgrade.done': 'kasy atualizado com sucesso!',
|
|
733
|
+
'cli.command.uninstall.running': 'Desinstalando a CLI kasy...',
|
|
734
|
+
'cli.command.uninstall.done': 'kasy desinstalado. Ate mais!',
|
|
735
|
+
'new.checks.environment': 'Verificacoes de ambiente',
|
|
736
|
+
'new.checks.environment.checking': 'Verificando ambiente',
|
|
737
|
+
'new.checks.environment.done': 'Ambiente pronto',
|
|
738
|
+
'setup.checks.backend.checking': 'Verificando ferramentas {backend}',
|
|
739
|
+
'setup.checks.backend.done': 'Ferramentas {backend} prontas',
|
|
740
|
+
'new.checks.firebaseForPush': 'Atencao: Firebase CLI e obrigatorio para notificacoes push (FCM) em todos os backends.',
|
|
741
|
+
'new.checks.requiredBlock': 'Ferramentas obrigatorias nao encontradas. Instale-as para continuar.',
|
|
742
|
+
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
743
|
+
'new.checks.installSupabase': 'Supabase: npm i -g supabase (ou brew install supabase/tap/supabase) && supabase login',
|
|
744
|
+
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (ou npm i -g supabase)',
|
|
745
|
+
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
746
|
+
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
747
|
+
'setup.checks.environment': 'Verificacoes de ambiente',
|
|
748
|
+
'setup.checks.prepareFirebase': 'Ferramentas Firebase (push, remote config)',
|
|
749
|
+
'setup.checks.backend': 'Verificacoes de backend ({backend})',
|
|
750
|
+
'setup.firebase.installing': 'Instalando Firebase CLI...',
|
|
751
|
+
'setup.supabase.installing': 'Instalando Supabase CLI...',
|
|
752
|
+
'setup.flutterfire.installing': 'Instalando FlutterFire CLI...',
|
|
753
|
+
'setup.warn.hang': 'Se travar, execute manualmente: flutterfire --version',
|
|
754
|
+
'setup.warn.supabase': 'Usando Supabase ou API propria? O Firebase ainda ajuda com push e remote config.',
|
|
755
|
+
'doctor.title': 'Kasy Doctor',
|
|
756
|
+
'doctor.baseEnvironment': 'Ambiente base',
|
|
757
|
+
'doctor.optionalBackend': 'Ferramentas opcionais de backend',
|
|
758
|
+
'doctor.requiredMissing': 'Dependencias obrigatorias ausentes. Corrija os erros acima e execute o doctor novamente.',
|
|
759
|
+
'doctor.requiredPassed': '✓ Verificacoes obrigatorias de ambiente aprovadas.',
|
|
760
|
+
'modules.backends': 'Backends disponiveis:',
|
|
761
|
+
'modules.features': 'Features opcionais disponiveis:',
|
|
762
|
+
'modules.backend.firebase.description': 'Adapter de backend Firebase',
|
|
763
|
+
'modules.backend.supabase.description': 'Adapter de backend Supabase',
|
|
764
|
+
'modules.backend.api.description': 'Adapter de backend API REST/GraphQL',
|
|
765
|
+
'modules.feature.sentry.description': 'Rastreamento de erros e crashes com Sentry',
|
|
766
|
+
'modules.feature.analytics.description': 'Rastreamento de eventos de analytics (Firebase Analytics)',
|
|
767
|
+
'modules.feature.facebook.description': 'Integracao de Login com Facebook',
|
|
768
|
+
'modules.feature.revenuecat.description': 'Integracao de assinaturas com RevenueCat',
|
|
769
|
+
'modules.feature.onboarding.description': 'Feature de fluxo de onboarding',
|
|
770
|
+
'modules.feature.web.description': 'Camada de compatibilidade Web',
|
|
771
|
+
'modules.feature.widget.description': 'Integracao de widget iOS/Android',
|
|
772
|
+
'modules.feature.camera.description': 'Template da feature de camera',
|
|
773
|
+
'modules.feature.llm_chat.description': 'Template da feature de chat com LLM',
|
|
774
|
+
'modules.feature.feedback.description': 'Feature de feedback e sugestoes de funcionalidades',
|
|
775
|
+
'modules.feature.local_notifications.description': 'Lembretes locais — agendados pelo usuario (apenas iOS e Android)',
|
|
776
|
+
'modules.feature.ci.description': 'CI: GitHub/GitLab (testes + build) + Codemagic (publicacao nas lojas)',
|
|
777
|
+
'checks.checking': 'Verificando {name}...',
|
|
778
|
+
'checks.found': '{name} encontrado',
|
|
779
|
+
'checks.foundWithVersion': '{name} pronto ({version})',
|
|
780
|
+
'checks.missing': '{name} ausente',
|
|
781
|
+
'checks.notFound': '{name} nao encontrado',
|
|
782
|
+
'checks.flutter.warn': 'Flutter SDK nao encontrado. Instale o Flutter para compilar e executar apps: https://docs.flutter.dev/get-started/install',
|
|
783
|
+
'checks.install.failed': 'instalacao automatica falhou — execute o comando manualmente',
|
|
784
|
+
'banner.title': 'Kasy CLI · Gerador Flutter SaaS',
|
|
785
|
+
'welcome.firstRun': 'Bem-vindo ao Kasy CLI!',
|
|
786
|
+
'welcome.chooseLanguage': 'Primeiro, escolha seu idioma:',
|
|
787
|
+
'prompt.language.select': 'Escolha seu idioma',
|
|
788
|
+
'prompt.cancelled': 'Comando cancelado pelo usuario.',
|
|
789
|
+
'license.required': '🔑 Chave de ativação necessária para usar o Kasy CLI',
|
|
790
|
+
'license.checking': 'Validando chave de ativação...',
|
|
791
|
+
'license.saved': '✅ Chave validada com sucesso',
|
|
792
|
+
'license.invalid': 'Formato inválido. Use XXXX-XXXX-XXXX-XXXX.',
|
|
793
|
+
'prompt.license.enter': '👉 Digite sua chave de ativação (XXXX-XXXX-XXXX-XXXX)',
|
|
794
|
+
'prompt.license.invalid': 'Formato inválido. Use XXXX-XXXX-XXXX-XXXX.',
|
|
795
|
+
'prompt.appName.enter': 'Digite o nome do seu app',
|
|
796
|
+
'prompt.appName.required': 'O nome do app e obrigatorio.',
|
|
797
|
+
'prompt.bundleId.enter': 'Digite o bundle ID (com.company.app)',
|
|
798
|
+
'prompt.bundleId.required': 'O bundle ID e obrigatorio.',
|
|
799
|
+
'prompt.bundleId.invalid': 'O bundle ID deve seguir o formato com.company.app.',
|
|
800
|
+
'prompt.backend.select': 'Escolha o provedor de backend',
|
|
801
|
+
'prompt.features.select': 'Escolha as features opcionais para incluir',
|
|
802
|
+
'prompt.features.instructions': 'Espaco para marcar, enter para confirmar',
|
|
803
|
+
'prompt.multiselect.instructions': '\nInstrucoes:\n ↑/↓: Destacar opcao\n ←/→/[space]: Marcar/desmarcar\n a: Marcar/desmarcar todos\n enter/return: Confirmar',
|
|
804
|
+
'prompt.multiselect.warnDisabled': 'Use ↓ para ir a uma opcao selecionavel, Space para marcar, Enter para confirmar',
|
|
805
|
+
'prompt.firebase.projectId.enter': 'Digite o Firebase Project ID',
|
|
806
|
+
'prompt.firebase.projectId.required': 'Firebase Project ID e obrigatorio.',
|
|
807
|
+
'prompt.supabase.url.enter': 'Digite a URL do Supabase',
|
|
808
|
+
'prompt.supabase.url.required': 'A URL do Supabase e obrigatoria.',
|
|
809
|
+
'prompt.supabase.anonKey.enter': 'Digite a chave anon do Supabase',
|
|
810
|
+
'prompt.supabase.anonKey.required': 'A chave anon do Supabase e obrigatoria.',
|
|
811
|
+
'new.supabase.q.create': 'Criar novo projeto Supabase ou usar existente?',
|
|
812
|
+
'new.supabase.q.create.create': '✨ Criar novo projeto (recomendado para iniciantes)',
|
|
813
|
+
'new.supabase.q.create.existing': '📂 Usar projeto existente',
|
|
814
|
+
'new.firebase.q.setupMode': 'Como deseja configurar o Firebase?',
|
|
815
|
+
'new.firebase.q.setupMode.push': 'Projeto Firebase para notificações push (FCM):',
|
|
816
|
+
'new.firebase.q.setupMode.create': '✨ Criar do zero (recomendado para iniciantes)',
|
|
817
|
+
'new.firebase.q.setupMode.existing': '📂 Usar projeto existente',
|
|
818
|
+
'new.firebase.q.region': 'Onde está a maioria dos usuários do seu app?',
|
|
819
|
+
'new.firebase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — southamerica-east1',
|
|
820
|
+
'new.firebase.q.region.us': '🇺🇸 Estados Unidos — us-central1',
|
|
821
|
+
'new.firebase.q.region.europe': '🇪🇺 Europa — europe-west1',
|
|
822
|
+
'new.firebase.q.region.global': '🌍 Global / Não sei — us-central1',
|
|
823
|
+
'new.firebase.create.prereq': 'Voce precisa: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Plano Blaze necessario para deploy.',
|
|
824
|
+
'new.firebase.create.creating': 'Criando projeto Firebase…',
|
|
825
|
+
'new.firebase.create.includeWeb': 'Incluir app Web no Firebase? (para plataforma web)',
|
|
826
|
+
'new.firebase.create.nowDo': 'Agora ative a autenticação (antes de rodar o app):',
|
|
827
|
+
'new.firebase.create.activateEmail': 'Ative Email/Senha: Firebase Console → Authentication → Sign-in method',
|
|
828
|
+
'new.firebase.create.activateGoogle': 'Ative Google: mesma página, clique em Google → Ativar',
|
|
829
|
+
'new.firebase.create.beforeContinue.title': 'Antes de continuar, ative no Firebase Console:',
|
|
830
|
+
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Senha e Anonimo ja foram ativados automaticamente)',
|
|
831
|
+
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → ative Email/Senha, Anonimo e Google',
|
|
832
|
+
'new.firebase.create.beforeContinue.ready': 'Ativei o Google Sign-In. Continuar?',
|
|
833
|
+
'new.firebase.create.beforeContinue.ready.noAuth': 'Ativei Email/Senha, Anonimo e Google Sign-In. Continuar?',
|
|
834
|
+
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager e Storage já foram ativados automaticamente)',
|
|
835
|
+
'new.firebase.create.sha1Skipped': 'SHA-1 não adicionado',
|
|
836
|
+
'new.firebase.create.sha1ManualInstruction': 'Adicione o SHA-1 manualmente: Firebase Console → Configurações do projeto → Seus apps → Android → Adicionar impressão digital',
|
|
837
|
+
'new.firebase.create.sha1ParseError': 'Nao foi possivel extrair o SHA-1 da saida do keytool',
|
|
838
|
+
'new.firebase.create.sha1ErrorDetail': 'Motivo',
|
|
839
|
+
'new.firebase.create.useExistingHint': 'O projeto pode ter sido criado. Tente "Usar projeto existente" com ID: {id}',
|
|
840
|
+
'new.firebase.create.usingProjectId': 'Usando project ID: {id} (continuando com projeto existente)',
|
|
841
|
+
'new.firebase.create.waitPropagate': 'Aguardando propagação do projeto (20s)…',
|
|
842
|
+
'new.firebase.create.success': 'Projeto Firebase criado com sucesso.',
|
|
843
|
+
'new.firebase.create.failed': 'Nao foi possivel criar o projeto',
|
|
844
|
+
'new.firebase.create.gcloudRequired': 'gcloud CLI e obrigatorio para "criar do zero". Sem ele, o fluxo completo do Firebase nao pode rodar.',
|
|
845
|
+
'new.firebase.create.installTitle': 'Para instalar o gcloud CLI, execute:',
|
|
846
|
+
'new.firebase.create.installCommand': 'Comando',
|
|
847
|
+
'new.firebase.create.installAfter': 'Depois faca login',
|
|
848
|
+
'new.firebase.create.installUrl': 'Ou baixe em',
|
|
849
|
+
'new.firebase.create.authCommand': 'Execute: gcloud auth login',
|
|
850
|
+
'new.firebase.create.fallbackHint': 'Por enquanto, informe um Firebase Project ID existente para continuar (ou instale o gcloud e execute novamente):',
|
|
851
|
+
'new.firebase.q.billingAccount': 'Qual conta de faturamento vincular ao projeto?',
|
|
852
|
+
'new.firebase.q.billingAccount.hint': 'Escolha a conta com cota disponível (até 3 projetos por conta)',
|
|
853
|
+
'new.firebase.q.billingAccount.context': 'Limite: até 3 projetos por conta de faturamento. Escolha uma conta com cota disponível (remova projetos não usados em console.cloud.google.com/billing se necessário).',
|
|
854
|
+
'new.firebase.q.billingAccount.other': 'Outra — informar ID da conta manualmente',
|
|
855
|
+
'new.firebase.q.billingAccount.manualId': 'ID da conta de faturamento (ex: 018A70-7D0548-0F84A8)',
|
|
856
|
+
'new.firebase.q.billingAccount.manualId.hint': 'Encontre em console.cloud.google.com/billing',
|
|
857
|
+
'new.firebase.q.billingAccount.manualId.required': 'O ID da conta de faturamento é obrigatório.',
|
|
858
|
+
'new.firebase.q.organization': 'Em qual organização GCP criar o projeto?',
|
|
859
|
+
'new.firebase.q.organization.none': 'Sem organização (conta pessoal / projeto avulso)',
|
|
860
|
+
'new.firebase.q.organization.hint': 'Organizações vinculadas à sua conta gcloud',
|
|
861
|
+
'new.firebase.create.billingRetry.title': 'Vincule o faturamento manualmente (cota excedida ou erro de billing):',
|
|
862
|
+
'new.firebase.create.billingRetry.hint': 'Dica: O limite é 3 projetos por conta de faturamento. Remova projetos não usados no link acima. Se acabou de remover um, espere 2–5 min para a alteração propagar e tente novamente.',
|
|
863
|
+
'new.firebase.create.billingRetry.ready': 'Vinculei o faturamento. Tentar novamente?',
|
|
864
|
+
'new.firebase.create.billingRetry.retrying': 'Tentando novamente…',
|
|
865
|
+
'new.firebase.create.billingRetry.exit': 'Execute novamente com "Usar projeto existente" após vincular o faturamento.',
|
|
866
|
+
'new.firebase.create.projectQuotaExceeded': 'Cota de projetos excedida (limite por conta Google). Exclua projetos não usados em console.cloud.google.com ou informe um projeto existente abaixo.',
|
|
867
|
+
'new.supabase.q.orgSelect': 'Em qual organização criar o projeto?',
|
|
868
|
+
'new.supabase.orgsRequired': 'Nenhuma organização encontrada. Execute supabase login e tente novamente.',
|
|
869
|
+
'new.supabase.q.region': 'Onde está a maioria dos usuários do seu app?',
|
|
870
|
+
'new.supabase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — sa-east-1',
|
|
871
|
+
'new.supabase.q.region.us': '🇺🇸 Estados Unidos (Virginia) — us-east-1',
|
|
872
|
+
'new.supabase.q.region.europe': '🇪🇺 Europa (Irlanda) — eu-west-1',
|
|
873
|
+
'new.supabase.q.region.global': '🌍 Global / Não sei — us-east-1',
|
|
874
|
+
'new.supabase.q.dbPassword': 'Senha do banco (min 6 caracteres)',
|
|
875
|
+
'new.supabase.q.dbPassword.required': 'A senha deve ter pelo menos 6 caracteres.',
|
|
876
|
+
'new.supabase.creating': 'Criando projeto no Supabase…',
|
|
877
|
+
'new.supabase.created': 'Projeto criado com sucesso.',
|
|
878
|
+
'new.supabase.createFailed': 'Nao foi possivel criar o projeto',
|
|
879
|
+
'new.supabase.loginHint': 'Execute: supabase login. Depois informe a URL e chave do seu projeto existente.',
|
|
880
|
+
'new.supabase.setup': 'Vinculando projeto e publicando…',
|
|
881
|
+
'new.supabase.setupManual': 'Execute manualmente: supabase link, supabase db push, supabase functions deploy',
|
|
882
|
+
'new.supabase.q.useExisting.orgSelect': 'Em qual organização está o projeto?',
|
|
883
|
+
'new.supabase.q.useExisting.projectSelect': 'Qual projeto Supabase existente deseja usar?',
|
|
884
|
+
'new.supabase.projectsRequired': 'Nenhum projeto encontrado nesta organização.',
|
|
885
|
+
'new.supabase.q.dbPassword.existing': 'Senha do banco do projeto (necessária para vincular e aplicar migrations)',
|
|
886
|
+
'new.supabase.existingLinked': 'Projeto pronto para vincular e aplicar migrations.',
|
|
887
|
+
'setup.license.loaded': '✓ Chave de licenca carregada da configuracao local.',
|
|
888
|
+
'setup.license.saved': '✓ Chave de licenca validada e salva.',
|
|
889
|
+
'setup.license.invalid': 'Formato de licenca invalido. Esperado XXXX-XXXX-XXXX-XXXX.',
|
|
890
|
+
'setup.error.targetNotEmpty': 'O diretorio de destino nao esta vazio: {path}',
|
|
891
|
+
'setup.error.targetExists': 'O diretorio de destino ja existe: {path}',
|
|
892
|
+
'setup.error.coreMissing': 'Pasta do core template nao encontrada: {path}',
|
|
893
|
+
'setup.error.requiredChecksFailed': 'Falha nas verificacoes obrigatorias. Execute `kasy doctor`.',
|
|
894
|
+
'setup.error.generatingFailed': 'Falha ao gerar o projeto.',
|
|
895
|
+
'setup.error.conflictHint': 'Dica: Remova a pasta do projeto e execute novamente, ou use um diretório vazio.',
|
|
896
|
+
'setup.spinner.generating': 'Gerando arquivos do projeto...',
|
|
897
|
+
'setup.success.created': 'Projeto criado com sucesso.',
|
|
898
|
+
'setup.success.complete': '✓ Setup concluido',
|
|
899
|
+
'setup.success.location': 'Local',
|
|
900
|
+
'setup.success.nextSteps': 'Proximos passos',
|
|
901
|
+
'setup.success.stepPubGet': 'flutter pub get',
|
|
902
|
+
'setup.success.stepRun': 'flutter run',
|
|
903
|
+
'validate.title': 'Kasy Validate',
|
|
904
|
+
'validate.success': '✓ Matriz de validacao aprovada.',
|
|
905
|
+
'validate.failed': 'Matriz de validacao falhou.',
|
|
906
|
+
'validate.error': 'Uma ou mais combinacoes de validacao falharam.',
|
|
907
|
+
'validate.projectNotFound': 'Projeto nao encontrado',
|
|
908
|
+
'validate.ok': 'ok',
|
|
909
|
+
'validate.fail': 'falhou',
|
|
910
|
+
'validate.passed': 'aprovado',
|
|
911
|
+
|
|
912
|
+
// ── Fluxo Firebase ────────────────────────────────────────────────────
|
|
913
|
+
'cli.command.firebase.description': '🔥 Criar app Flutter completo com Firebase (recomendado)',
|
|
914
|
+
'new.banner': '✨ Novo app Flutter',
|
|
915
|
+
'new.subtitle': 'Escolha o backend: Firebase, Supabase ou API REST.',
|
|
916
|
+
'new.subtitle2': '🔒 O setup roda na sua máquina com suas credenciais — sem acesso de terceiros.',
|
|
917
|
+
'new.q.backend': 'Onde voce quer salvar os dados do seu app?',
|
|
918
|
+
'new.q.backend.firebase.desc': 'Mais facil de comecar — auth, banco e armazenamento prontos',
|
|
919
|
+
'new.q.backend.supabase.desc': 'Banco SQL (PostgreSQL) com mais controle',
|
|
920
|
+
'new.q.backend.api.desc': 'Voce ja tem seu proprio servidor',
|
|
921
|
+
|
|
922
|
+
'new.q.mode': 'Como quer configurar?',
|
|
923
|
+
'new.q.mode.quick': '⚡ Rapido — poucas perguntas, padroes inteligentes',
|
|
924
|
+
'new.q.mode.advanced': '🛠 Avancado — todas as opcoes e credenciais agora',
|
|
925
|
+
|
|
926
|
+
'new.q.preset': 'Quais features incluir?',
|
|
927
|
+
'new.q.preset.starter': '⚡ Starter — analytics + erros + onboarding',
|
|
928
|
+
'new.q.preset.saas': '💰 SaaS — assinaturas + analytics + onboarding + feedback',
|
|
929
|
+
'new.q.preset.content': '📱 Conteudo — analytics + onboarding + camera + chat LLM',
|
|
930
|
+
'new.q.preset.full': '🚀 Completo — todas as features',
|
|
931
|
+
'new.q.preset.custom': '⚙️ Personalizar — escolha feature a feature',
|
|
932
|
+
'new.q.preset.none': '○ Nenhum — so o core',
|
|
933
|
+
|
|
934
|
+
'new.firebase.success.deployStep': '• Deploy do backend (de dentro da pasta do projeto):',
|
|
935
|
+
|
|
936
|
+
'cli.command.deploy.description': 'Deploy do backend (Firebase ou Supabase) — detecta projeto e configura FCM',
|
|
937
|
+
'cli.command.check.description': '🔔 Verifica configuração de push notifications (use --fix para corrigir)',
|
|
938
|
+
'deploy.q.project': 'Firebase Project ID:',
|
|
939
|
+
'deploy.q.serviceAccount': 'Caminho para o service account JSON:',
|
|
940
|
+
'deploy.detected.project': '✓ Projeto Firebase detectado:',
|
|
941
|
+
'deploy.detected.serviceAccount': '✓ Service account detectado:',
|
|
942
|
+
'deploy.error.notProject': 'Nenhum firebase.json encontrado. Execute kasy deploy de dentro da pasta do projeto.',
|
|
943
|
+
|
|
944
|
+
'cli.command.ios.description': 'Release iOS na App Store (Mac)',
|
|
945
|
+
'cli.command.ios.configure.description': 'Configurar credenciais Apple para envio local do IPA',
|
|
946
|
+
'cli.command.ios.release.description': 'Incrementa build, gera IPA e envia para App Store Connect',
|
|
947
|
+
'cli.command.ios.build.description': 'Só gera o IPA (sem enviar)',
|
|
948
|
+
'cli.command.ios.clean.description': 'Limpa caches Flutter/Xcode após falha no build iOS',
|
|
949
|
+
'cli.command.codemagic.description': 'Disparar build iOS no Codemagic (nuvem)',
|
|
950
|
+
'cli.command.codemagic.configure.description': 'Configurar credenciais da API Codemagic',
|
|
951
|
+
'cli.command.codemagic.release.description': 'Iniciar build do workflow iOS no Codemagic',
|
|
952
|
+
'cli.command.codemagic.status.description': 'Status do build Codemagic por ID',
|
|
953
|
+
|
|
954
|
+
'ios.configure.title': 'App Store iOS — configuração',
|
|
955
|
+
'ios.configure.bundleId': 'Bundle ID',
|
|
956
|
+
'ios.configure.doc': 'Guia',
|
|
957
|
+
'ios.configure.openingLinks': 'Abrindo App Store Connect no navegador…',
|
|
958
|
+
'ios.configure.q.apiKey': 'Key ID da API App Store Connect',
|
|
959
|
+
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
960
|
+
'ios.configure.q.p8Path': 'Caminho do arquivo AuthKey_XXXXX.p8 baixado',
|
|
961
|
+
'ios.configure.q.appId': 'App ID no App Store Connect (opcional)',
|
|
962
|
+
'ios.configure.q.required': 'Obrigatório',
|
|
963
|
+
'ios.configure.q.p8NotFound': 'Arquivo não encontrado',
|
|
964
|
+
'ios.configure.cancelled': 'Configuração cancelada',
|
|
965
|
+
'ios.configure.success': 'Credenciais Apple salvas',
|
|
966
|
+
'ios.configure.p8Installed': 'Chave instalada em',
|
|
967
|
+
'ios.configure.next': 'Próximo passo',
|
|
968
|
+
'ios.release.title': 'Gerando e enviando release iOS…',
|
|
969
|
+
'ios.release.success': 'Release iOS enviada',
|
|
970
|
+
'ios.build.title': 'Gerando IPA iOS…',
|
|
971
|
+
'ios.build.success': 'IPA gerado',
|
|
972
|
+
'ios.error.notProject': 'Não é um projeto Flutter iOS (pubspec.yaml + ios/ obrigatórios).',
|
|
973
|
+
'ios.error.noScript': 'scripts/release-ios.sh não encontrado. Execute: kasy update ios-release',
|
|
974
|
+
'ios.error.notMac': 'Release iOS local exige macOS com Xcode.',
|
|
975
|
+
'ios.error.useCodemagic': 'Use release na nuvem',
|
|
976
|
+
'ios.error.notConfigured': 'Credenciais Apple não configuradas',
|
|
977
|
+
'ios.error.runConfigure': 'Execute: kasy ios configure',
|
|
978
|
+
'ios.error.signing': 'Assinatura iOS não configurada (DEVELOPMENT_TEAM ausente).',
|
|
979
|
+
'ios.error.signingHint': 'Abra ios/Runner.xcworkspace no Xcode → Runner → Signing & Capabilities → escolha seu Team.',
|
|
980
|
+
'ios.error.googleUrlScheme': 'URL scheme iOS do Google Sign-In não configurado.',
|
|
981
|
+
'ios.error.googleUrlSchemeHint': 'Correção: rode flutterfire configure, depois kasy ios clean, ou gere o projeto novamente antes do build.',
|
|
982
|
+
'ios.warn.lowDisk': 'Pouco espaço em disco ({gb} GB livres; recomendado pelo menos {min} GB para builds Xcode).',
|
|
983
|
+
'ios.hints.title': 'Cache do Xcode pode estar corrompido — tente:',
|
|
984
|
+
'ios.hints.closeXcode': 'Feche o Xcode por completo',
|
|
985
|
+
'ios.hints.retry': 'Depois tente de novo',
|
|
986
|
+
'ios.hints.manual': 'Ou manualmente',
|
|
987
|
+
'ios.clean.title': 'Limpando caches do build iOS…',
|
|
988
|
+
'ios.clean.success': 'Caches limpos',
|
|
989
|
+
'ios.clean.notMac': 'Limpeza iOS só está disponível no macOS.',
|
|
990
|
+
'ios.clean.step.flutterClean': 'flutter clean',
|
|
991
|
+
'ios.clean.step.derivedData': 'Remover DerivedData do Xcode (Runner)',
|
|
992
|
+
'ios.clean.step.buildDir': 'Remover pastas build',
|
|
993
|
+
'ios.clean.step.pubGet': 'flutter pub get',
|
|
994
|
+
'ios.clean.step.pods': 'pod install',
|
|
995
|
+
|
|
996
|
+
'codemagic.configure.title': 'Codemagic — configuração',
|
|
997
|
+
'codemagic.configure.doc': 'Guia',
|
|
998
|
+
'codemagic.configure.checklist': 'Conclua assinatura + App Store Connect no painel Codemagic (veja o guia).',
|
|
999
|
+
'codemagic.configure.openingLinks': 'Abrindo Codemagic no navegador…',
|
|
1000
|
+
'codemagic.configure.q.token': 'Token da API Codemagic',
|
|
1001
|
+
'codemagic.configure.q.appId': 'App ID no Codemagic',
|
|
1002
|
+
'codemagic.configure.q.workflowId': 'Workflow ID (do codemagic.yaml)',
|
|
1003
|
+
'codemagic.configure.q.branch': 'Branch Git para build',
|
|
1004
|
+
'codemagic.configure.q.required': 'Obrigatório',
|
|
1005
|
+
'codemagic.configure.cancelled': 'Configuração cancelada',
|
|
1006
|
+
'codemagic.configure.success': 'Credenciais Codemagic salvas',
|
|
1007
|
+
'codemagic.configure.next': 'Próximo passo',
|
|
1008
|
+
'codemagic.release.title': 'Disparando build no Codemagic…',
|
|
1009
|
+
'codemagic.release.triggered': 'Build iniciado',
|
|
1010
|
+
'codemagic.status.title': 'Status do build',
|
|
1011
|
+
'codemagic.status.usage': 'Uso: kasy codemagic status <buildId>',
|
|
1012
|
+
'codemagic.error.notProject': 'Não é um projeto Flutter iOS (pubspec.yaml + ios/ obrigatórios).',
|
|
1013
|
+
'codemagic.error.notConfigured': 'Codemagic não configurado',
|
|
1014
|
+
'codemagic.error.addCi': 'Adicione CI primeiro: kasy add ci (cria codemagic.yaml)',
|
|
1015
|
+
'codemagic.error.runConfigure': 'Execute: kasy codemagic configure',
|
|
1016
|
+
'codemagic.error.googleUrlScheme': 'Build Codemagic bloqueado: URL scheme iOS do Google Sign-In não configurado.',
|
|
1017
|
+
|
|
1018
|
+
'doctor.ios.title': 'Release iOS',
|
|
1019
|
+
'doctor.ios.appleOk': 'Credenciais Apple configuradas',
|
|
1020
|
+
'doctor.ios.appleMissing': 'Credenciais Apple ausentes — kasy ios configure',
|
|
1021
|
+
'doctor.ios.p8Ok': 'Arquivo da chave API encontrado',
|
|
1022
|
+
'doctor.ios.p8Missing': 'AuthKey .p8 ausente — kasy ios configure',
|
|
1023
|
+
'doctor.ios.codemagicOk': 'Credenciais Codemagic configuradas',
|
|
1024
|
+
'doctor.ios.codemagicMissing': 'Codemagic opcional — kasy codemagic configure',
|
|
1025
|
+
'doctor.ios.notMac': 'Release iOS local exige macOS',
|
|
1026
|
+
'doctor.ios.doc': 'Documentação',
|
|
1027
|
+
'doctor.ios.signingOk': 'Assinatura Xcode (Development Team) configurada',
|
|
1028
|
+
'doctor.ios.signingMissing': 'Assinatura Xcode não definida — abra Runner no Xcode e escolha seu Team',
|
|
1029
|
+
'doctor.ios.googleUrlSchemeOk': 'URL scheme iOS do Google Sign-In configurado',
|
|
1030
|
+
'doctor.ios.googleUrlSchemeMissing': 'URL scheme iOS do Google Sign-In divergente',
|
|
1031
|
+
'doctor.ios.googleUrlSchemeSkipped': 'Check do URL scheme iOS do Google Sign-In ignorado (GoogleService-Info.plist ausente)',
|
|
1032
|
+
'doctor.ios.appleSignInEntitlementOk': 'Entitlement do Apple Sign-In configurado',
|
|
1033
|
+
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement do Apple Sign-In ausente — adicione a capability Sign In with Apple no Xcode',
|
|
1034
|
+
'doctor.ios.facebookOk': 'Credenciais do Facebook configuradas (iOS)',
|
|
1035
|
+
'doctor.ios.facebookPlaceholders': 'Credenciais do Facebook ainda são placeholders — atualize FacebookAppID e FacebookClientToken no Info.plist',
|
|
1036
|
+
'doctor.ios.facebookSkipped': 'Check das credenciais do Facebook ignorado (FacebookAppID ausente no Info.plist)',
|
|
1037
|
+
'doctor.android.facebookOk': 'Credenciais do Facebook configuradas (Android)',
|
|
1038
|
+
'doctor.android.facebookPlaceholders': 'Credenciais do Facebook ainda são placeholders — atualize facebook_app_id e facebook_client_token em android/app/src/main/res/values/strings.xml',
|
|
1039
|
+
|
|
1040
|
+
'doctor.revenuecat.title': 'RevenueCat',
|
|
1041
|
+
'doctor.revenuecat.keysOk': 'Chaves de API configuradas (iOS + Android)',
|
|
1042
|
+
'doctor.revenuecat.keysEmpty': 'Chaves de API não configuradas — defina RC_IOS_API_KEY e RC_ANDROID_API_KEY no Makefile e .vscode/launch.json',
|
|
1043
|
+
'doctor.revenuecat.keysTest': 'Usando chaves Test Store (test_) — substitua por appl_ e goog_ para produção',
|
|
1044
|
+
'doctor.revenuecat.webhookUrlSupabase': 'URL do webhook (cole no RevenueCat → Integrations → Webhooks)',
|
|
1045
|
+
'doctor.revenuecat.webhookUrlFirebase': 'URL do webhook: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
1046
|
+
|
|
1047
|
+
'update.iosRelease.success': 'Arquivos de release iOS atualizados',
|
|
1048
|
+
'add.iosRelease.success': 'Arquivos de release iOS adicionados',
|
|
1049
|
+
'add.iosRelease.already': 'Arquivos de release iOS já existem',
|
|
1050
|
+
|
|
1051
|
+
'new.api.q.baseUrl': 'Qual e a URL base da sua API?',
|
|
1052
|
+
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
1053
|
+
'new.firebase.banner': '🔥 Novo app Flutter — Firebase',
|
|
1054
|
+
'new.firebase.subtitle': 'Projeto completo: auth, Firestore, notificacoes, login social e muito mais.',
|
|
1055
|
+
'new.prereq.title': 'Antes de comecar, certifique-se de que voce tem:',
|
|
1056
|
+
'new.firebase.prereq.title': 'Antes de comecar, certifique-se de que voce tem:',
|
|
1057
|
+
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
1058
|
+
'new.firebase.prereq.create.2': '2. Plano Blaze (cartão de crédito — necessário para Cloud Functions)',
|
|
1059
|
+
'new.firebase.prereq.create.billingLimit': '3. Limite: até 3 projetos por conta de faturamento. Remova projetos não usados ou solicite aumento de cota se já atingiu o limite.',
|
|
1060
|
+
'new.firebase.prereq.create.projectQuota': '4. Cota de projetos: a conta Google tem limite (ex.: 10–30 projetos). Exclua projetos não usados em console.cloud.google.com se necessário.',
|
|
1061
|
+
'new.firebase.prereq.create.note': ' Projeto e APIs serão criados automaticamente.',
|
|
1062
|
+
'new.firebase.prereq.create.pushNote': ' Projeto Firebase para FCM + Remote Config será criado automaticamente (sem conta de serviço).',
|
|
1063
|
+
'new.firebase.create.creatingPush': 'Criando projeto Firebase para notificações push…',
|
|
1064
|
+
'new.firebase.create.successPush': 'Projeto Firebase criado para FCM + Remote Config.',
|
|
1065
|
+
'new.firebase.prereq.1': '1. Firebase CLI instalado (npm i -g firebase-tools) + firebase login',
|
|
1066
|
+
'new.firebase.prereq.2': '2. Projeto Firebase criado em console.firebase.google.com',
|
|
1067
|
+
'new.firebase.prereq.3': '3. Plano Blaze ativado (cartao de credito — necessario para Cloud Functions)',
|
|
1068
|
+
'new.firebase.prereq.4': '4. gcloud CLI instalado + gcloud auth login (usado para ativar APIs automaticamente)',
|
|
1069
|
+
'new.firebase.prereq.5': '5. Antes do deploy: ative Secret Manager API e Firebase Storage (ver PREREQUISITES.md ou links apos gerar)',
|
|
1070
|
+
'new.firebase.prereq.doc': ' Checklist completo: PREREQUISITES.md',
|
|
1071
|
+
|
|
1072
|
+
'new.firebase.q.appName': 'Qual e o nome do seu app?',
|
|
1073
|
+
'new.firebase.q.appName.hint': 'ex: Meu App Incrivel',
|
|
1074
|
+
'new.firebase.q.appName.required': 'O nome do app e obrigatorio.',
|
|
1075
|
+
|
|
1076
|
+
'new.firebase.q.bundleId': 'Qual e o identificador unico (Bundle ID) do seu app?',
|
|
1077
|
+
'new.firebase.q.bundleId.hint': 'Funciona como um endereco para o seu app, ex: com.minhaempresa.meuapp',
|
|
1078
|
+
'new.firebase.q.bundleId.invalid': 'Formato invalido. Use: com.empresa.app',
|
|
1079
|
+
'new.firebase.q.bundleId.required': 'O Bundle ID e obrigatorio.',
|
|
1080
|
+
|
|
1081
|
+
'new.firebase.q.projectId': 'Qual e o ID do seu projeto Firebase?',
|
|
1082
|
+
'new.firebase.q.projectId.hint': 'Encontre no Firebase Console → seu projeto → Configuracoes',
|
|
1083
|
+
'new.firebase.q.projectId.required': 'O Firebase Project ID e obrigatorio.',
|
|
1084
|
+
|
|
1085
|
+
'new.firebase.q.modules': 'Quais features opcionais voce quer incluir?',
|
|
1086
|
+
'new.firebase.q.modules.hint': 'Espaco para selecionar, Enter para confirmar',
|
|
1087
|
+
'new.modules.header.common': '── Comuns (todos os backends) ──',
|
|
1088
|
+
'new.modules.header.features': '── Telas e features ──',
|
|
1089
|
+
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
1090
|
+
'new.modules.header.ci': '── CI/CD ──',
|
|
1091
|
+
'new.modules.header.monetization': '── Monetizacao ──',
|
|
1092
|
+
'new.firebase.module.revenuecat': '💰 Assinaturas no app (RevenueCat)',
|
|
1093
|
+
'new.firebase.module.sentry': '🚨 Relatorio de erros (Sentry)',
|
|
1094
|
+
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
1095
|
+
'new.firebase.module.facebook': '👤 Login com Facebook (requer App ID + Token)',
|
|
1096
|
+
'new.firebase.module.web': '🌐 Web (adicional ao nativo — iOS/Android sempre incluidos)',
|
|
1097
|
+
'new.firebase.module.widget': '📱 Widget na tela inicial (iOS/Android)',
|
|
1098
|
+
'new.firebase.module.camera': '📷 Feature de camera',
|
|
1099
|
+
'new.firebase.module.llm_chat': '🤖 Feature de chat com LLM',
|
|
1100
|
+
'new.firebase.module.local_notifications': '🔔 Lembretes locais — agendados pelo usuario (apenas iOS e Android)',
|
|
1101
|
+
'new.firebase.module.feedback': '💬 Feedback / sugestoes de features',
|
|
1102
|
+
'new.firebase.module.ci': '⚙️ CI: GitHub/GitLab (testes + build) + Codemagic (publicacao nas lojas)',
|
|
1103
|
+
'new.firebase.module.onboarding': '👋 Onboarding (telas de boas-vindas, perguntas de perfil)',
|
|
1104
|
+
|
|
1105
|
+
'new.firebase.q.secrets.configureNow': 'Configurar as secrets do servidor agora? (webhook RevenueCat, Meta Ads)',
|
|
1106
|
+
'new.firebase.q.secrets.configureNow.hint': 'Se nao agora, veja o README para os comandos de configuracao depois',
|
|
1107
|
+
'new.firebase.q.secrets.later': '• Secrets do servidor nao configuradas — serao configuradas durante `kasy deploy`.',
|
|
1108
|
+
'new.firebase.q.revenuecat.webhookKey': 'Chave secreta do webhook (um valor aleatorio foi sugerido — pressione Enter para aceitar ou digite o seu)',
|
|
1109
|
+
'new.firebase.q.revenuecat.webhookKey.hint': 'Salve esse valor. No painel RevenueCat, cole como: Bearer <esse-valor>',
|
|
1110
|
+
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (Conversions API, opcional)',
|
|
1111
|
+
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (opcional)',
|
|
1112
|
+
'new.firebase.q.revenuecat.android': 'Chave de API RevenueCat para Android',
|
|
1113
|
+
'new.firebase.q.revenuecat.ios': 'Chave de API RevenueCat para iOS',
|
|
1114
|
+
'new.firebase.q.paywall': 'Qual estilo de paywall?',
|
|
1115
|
+
'new.firebase.q.paywall.hint': 'Layout da tela de assinaturas — pode alterar depois no RevenueCat',
|
|
1116
|
+
'new.firebase.q.revenuecat.web': 'Habilitar assinaturas na web (RevenueCat Web Billing)?',
|
|
1117
|
+
'new.firebase.q.revenuecat.web.hint': 'Requer Web Billing no dashboard RevenueCat + Stripe. Deixe desmarcado se nao precisar.',
|
|
1118
|
+
'new.firebase.q.revenuecat.webKey': 'Chave API RevenueCat Web Billing (rcb_xxx ou rcb_sb_xxx, opcional — configure depois)',
|
|
1119
|
+
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: adicione RC_WEB_API_KEY (launch.json) para assinaturas na web',
|
|
1120
|
+
'new.firebase.q.sentry.dsn': 'DSN do Sentry (deixe em branco para configurar depois)',
|
|
1121
|
+
'new.firebase.q.sentry.dsn.invalid': 'DSN invalido. Formato esperado: https://chave@host/project-id',
|
|
1122
|
+
'new.firebase.q.mixpanel.token': 'Token do Mixpanel (deixe em branco para configurar depois)',
|
|
1123
|
+
'new.firebase.q.facebook.appId': 'App ID do Facebook',
|
|
1124
|
+
'new.firebase.q.facebook.appId.required': 'App ID do Facebook é obrigatório.',
|
|
1125
|
+
'new.firebase.q.facebook.appId.invalid': 'App ID do Facebook deve ser numerico (ex: 1234567890).',
|
|
1126
|
+
'new.firebase.q.facebook.token': 'Token do App Facebook',
|
|
1127
|
+
'new.firebase.q.facebook.token.required': 'Token do App Facebook é obrigatório.',
|
|
1128
|
+
'new.firebase.q.revenuecat.android.required': 'Chave Android do RevenueCat é obrigatória.',
|
|
1129
|
+
'new.firebase.q.revenuecat.ios.required': 'Chave iOS do RevenueCat é obrigatória.',
|
|
1130
|
+
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID deve ser numerico (ex: 1234567890).',
|
|
1131
|
+
'new.firebase.q.revenuecat.webKey.invalid': 'Chave Web Billing deve comecar com rcb_ (ex: rcb_sb_xxx ou rcb_xxx).',
|
|
1132
|
+
|
|
1133
|
+
'new.firebase.confirm.title': 'Resumo da configuracao:',
|
|
1134
|
+
'new.firebase.confirm.app': 'App',
|
|
1135
|
+
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
1136
|
+
'new.firebase.confirm.project': 'Firebase',
|
|
1137
|
+
'new.firebase.confirm.modules': 'Features',
|
|
1138
|
+
'new.firebase.confirm.none': 'nenhum',
|
|
1139
|
+
'new.firebase.confirm.proceed': 'Criar o projeto agora?',
|
|
1140
|
+
|
|
1141
|
+
'new.firebase.step.copying': 'Criando seu projeto...',
|
|
1142
|
+
'new.firebase.step.pubGet': 'Instalando pacotes Flutter...',
|
|
1143
|
+
'new.firebase.step.buildRunner': 'Gerando codigo (Riverpod/Freezed)...',
|
|
1144
|
+
'new.firebase.step.flutterfire': 'Configurando Firebase (flutterfire)...',
|
|
1145
|
+
'new.firebase.step.deploy': 'Fazendo deploy das Cloud Functions + regras do Firestore...',
|
|
1146
|
+
'new.firebase.step.done': 'Pronto!',
|
|
1147
|
+
|
|
1148
|
+
'new.firebase.success.title': '🎉 Seu app esta pronto!',
|
|
1149
|
+
'new.firebase.success.open': 'Abra o projeto:',
|
|
1150
|
+
'new.firebase.success.run': 'Rode o app:',
|
|
1151
|
+
'new.firebase.success.runMake': 'Ou use make: make run | make run-ios | make run-android',
|
|
1152
|
+
'new.firebase.success.deviceSetup': 'Antes de rodar em dispositivo:',
|
|
1153
|
+
'new.firebase.success.deviceSetup.ios': 'iOS: conecte o iPhone por cabo → confie neste computador → Xcode → Window → Devices → parear',
|
|
1154
|
+
'new.firebase.success.deviceSetup.android': 'Android: Configurações → Opções do desenvolvedor → ativar depuração USB',
|
|
1155
|
+
'new.firebase.success.hotReload': "Hot reload: pressione 'r' no terminal enquanto o app roda. Mudanças aparecem na hora.",
|
|
1156
|
+
'new.firebase.success.oneLiner': 'Ou copie e cole para entrar e executar:',
|
|
1157
|
+
'new.firebase.success.configure': 'Configure quando quiser:',
|
|
1158
|
+
'new.firebase.success.alreadyDone': 'Ja configurado pela CLI:',
|
|
1159
|
+
'new.firebase.success.manualNeeded': 'Configure manualmente (se necessario):',
|
|
1160
|
+
'new.firebase.success.apn': '• Chave APN (push iOS): Firebase Console → Config. do Projeto → Cloud Messaging',
|
|
1161
|
+
'new.firebase.success.social': '• Ative o login social no Firebase Console → Authentication (Google e Apple ja estao no codigo; so ative la)',
|
|
1162
|
+
'new.firebase.success.googleSignIn': '• Login com Gmail: 1) Ative em Firebase Console → Auth → Sign-in method → Google. 2) O CLI preenche kGoogleWebClientId (google_auth_options.dart) do google-services.json para Android/iOS. Web usa signInWithPopup.',
|
|
1163
|
+
'new.firebase.success.sentry': '• Sentry: Para relatorios de erro em producao. Pegue o DSN em sentry.io. Ja no launch.json para dev. Para release: --dart-define=SENTRY_DSN=xxx',
|
|
1164
|
+
'new.firebase.success.mixpanel': '• Mixpanel: Para analytics em producao. Ja no launch.json para dev. Para release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
1165
|
+
'new.firebase.success.web': '• Web (adicional): Android e iOS funcionam normalmente. Para testar no browser: "flutter run -d chrome" ou "flutter run -d web-server --web-port=5000". Para publicar: "flutter build web". Notificacoes push sao exclusivas de mobile e desativadas automaticamente na web.',
|
|
1166
|
+
|
|
1167
|
+
'new.firebase.q.deploy': 'Fazer deploy das Cloud Functions + regras do Firestore agora?',
|
|
1168
|
+
'new.firebase.q.deploy.hint': 'Requer plano Blaze e firebase-tools instalado globalmente',
|
|
1169
|
+
'new.firebase.deployFailed.hint': 'Se o deploy falhou: crie Firestore e Storage no Console primeiro:',
|
|
1170
|
+
'new.firebase.deployFailed.firestore': '• Firestore: crie o banco (Criar banco → Modo Nativo)',
|
|
1171
|
+
'new.firebase.deployFailed.storage': '• Storage: clique em Começar',
|
|
1172
|
+
'new.firebase.deployFailed.orGcloud': 'Ou crie o Firestore via CLI:',
|
|
1173
|
+
'new.firebase.success.deployLater': '• Deploy do backend quando estiver pronto (de dentro da pasta do projeto):',
|
|
1174
|
+
'new.firebase.success.beforeDeploy': 'Antes do firebase deploy, ative (clique para abrir):',
|
|
1175
|
+
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
1176
|
+
'new.firebase.success.firestore': '• Firestore (crie o banco se não existir)',
|
|
1177
|
+
'new.firebase.success.storage': '• Firebase Storage (Comecar)',
|
|
1178
|
+
'new.firebase.success.auth': '• Firebase Authentication (Email/Senha)',
|
|
1179
|
+
'new.firebase.success.security': '🔒 .gitignore exclui .env e outros segredos. Cloud Functions usam secrets no servidor.',
|
|
1180
|
+
|
|
1181
|
+
'new.firebase.interactive.title': '⚠️ Configuração de Nuvem Requerida',
|
|
1182
|
+
'new.firebase.interactive.desc': 'Por motivos de segurança e faturamento, o Firebase exige aprovação manual:',
|
|
1183
|
+
'new.firebase.interactive.step1': '1. Crie o Banco de Dados (Firestore): ',
|
|
1184
|
+
'new.firebase.interactive.step2': '2. Faça upgrade para o plano Blaze (Pay-as-you-go): ',
|
|
1185
|
+
'new.firebase.interactive.step3': '3. Confirme que habilitou Auth (Email/Senha): ',
|
|
1186
|
+
|
|
1187
|
+
'new.firebase.interactive.prompt1': 'Voce ja criou o banco Firestore e habilitou a Autenticacao no link acima?',
|
|
1188
|
+
'new.firebase.interactive.prompt2': 'Voce ja fez o upgrade pro Plano Blaze? (Obrigatorio para deploy de funcoes)',
|
|
1189
|
+
'new.firebase.interactive.googleAuthNote': '* Ative o Google Sign-In manualmente (Email/Senha e Anonimo ja foram ativados): ',
|
|
1190
|
+
'new.firebase.interactive.billingNeeded': 'Plano Blaze ainda nao ativo. Ative no link acima e aguarde a deteccao automatica.',
|
|
1191
|
+
'new.firebase.interactive.billingWaiting': 'Verificando status do Blaze...',
|
|
1192
|
+
'new.firebase.interactive.billingTimeout': 'Plano Blaze nao confirmado apos o tempo limite. Deploy ignorado — rode manualmente quando estiver pronto.',
|
|
1193
|
+
'new.firebase.interactive.authWarn': 'Nao foi possivel ativar Email/Senha e Anonimo automaticamente. Ative manualmente:',
|
|
1194
|
+
|
|
1195
|
+
'new.firebase.interactive.ready': 'Pronto para publicar Push Notifications + Regras agora?',
|
|
1196
|
+
'new.firebase.interactive.deploying': 'Fazendo deploy das Cloud Functions + Regras (Storage e Firestore)...',
|
|
1197
|
+
'new.firebase.interactive.errorTitle': 'Ocorreu um erro durante o deploy.',
|
|
1198
|
+
'new.firebase.interactive.errorHint': 'Verifique se você ativou o Firestore e vinculou um cartão de crédito para o Plano Blaze.',
|
|
1199
|
+
'new.firebase.interactive.laterHint': 'Você pode publicar depois abrindo o terminal na pasta do projeto e rodando: ',
|
|
1200
|
+
'new.firebase.interactive.skipped': 'Deploy de Funções ignorado. Você pode publicar depois quando quiser.',
|
|
1201
|
+
|
|
1202
|
+
'new.firebase.warn.flutterfire': '⚠️ FlutterFire nao conseguiu gerar firebase_options_dev.dart automaticamente.',
|
|
1203
|
+
'new.firebase.warn.flutterfire.manual': 'Execute manualmente na pasta do projeto:',
|
|
1204
|
+
|
|
1205
|
+
'new.firebase.error.templateMissing': 'Template Firebase nao encontrado em: {path}. Certifique-se de que a pasta Firebase/ existe.',
|
|
1206
|
+
'new.firebase.error.dirNotEmpty': 'O diretorio "{path}" ja existe e nao esta vazio.',
|
|
1207
|
+
'new.firebase.error.aborted': 'Setup cancelado.',
|
|
1208
|
+
|
|
1209
|
+
'new.supabase.prereq.1': '1. Conta Supabase em supabase.com',
|
|
1210
|
+
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI instalados (ambos obrigatorios)',
|
|
1211
|
+
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase necessario para push)',
|
|
1212
|
+
'new.supabase.prereq.login': ' Se criar manualmente: tenha URL e anon key do projeto prontos',
|
|
1213
|
+
'new.supabase.loginRequired': '⚠️ Voce precisa estar logado para criar projeto. Execute supabase login primeiro.',
|
|
1214
|
+
'new.supabase.loginCommand': ' supabase login',
|
|
1215
|
+
'new.supabase.success.done.db': '• Banco: tabelas, politicas RLS',
|
|
1216
|
+
'new.supabase.success.done.storage': '• Storage: bucket kasy com politicas',
|
|
1217
|
+
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
1218
|
+
'new.supabase.success.done.secrets': '• Secrets da Edge Function (se informados)',
|
|
1219
|
+
'new.supabase.success.done.launch': '• launch.json com Sentry, Mixpanel, RevenueCat',
|
|
1220
|
+
'new.supabase.success.auth': '• Auth: Email ja vem ativado. Ative Google, Apple e Facebook em: {authUrl}',
|
|
1221
|
+
'new.supabase.success.storage': '• Storage: Bucket kasy criado com politicas (ja pronto)',
|
|
1222
|
+
'new.supabase.success.fcm': '• Push (FCM): Configure no Firebase Console (plano Blaze). App ja pronto para Supabase + FCM. URL: {fcmUrl}',
|
|
1223
|
+
'new.supabase.success.deployLater': '• Deploy do backend quando estiver pronto (de dentro da pasta do projeto):',
|
|
1224
|
+
|
|
1225
|
+
'new.api.prereq.1': '1. Sua API REST rodando e acessivel',
|
|
1226
|
+
'new.api.prereq.2': '2. URL base da API (ex: https://api.yourapp.com)',
|
|
1227
|
+
'new.api.prereq.3': '3. Firebase CLI obrigatorio para notificacoes push (FCM)',
|
|
1228
|
+
'new.api.success.backendUrl': '• Aponte o BACKEND_URL para sua API (launch.json)',
|
|
1229
|
+
'new.api.success.fcm': '• Firebase e necessario para notificacoes push (FCM) — configure a chave APNs no console do Firebase',
|
|
1230
|
+
'new.api.success.auth': '• Implemente os endpoints de auth social (Google, Apple) no seu backend',
|
|
1231
|
+
|
|
1232
|
+
'new.success.title': 'Projeto criado com sucesso!',
|
|
1233
|
+
'new.success.nextSteps': 'Proximos passos:',
|
|
1234
|
+
'new.success.step.cd': 'Entre na pasta do projeto:',
|
|
1235
|
+
'new.success.step.run': 'Execute o app (com suas chaves configuradas):',
|
|
1236
|
+
'new.success.step.console': 'Abra o console do backend:',
|
|
1237
|
+
'new.firebase.create.estimatedTime': '(geralmente 3-5 min — nao feche o terminal)',
|
|
1238
|
+
'new.internet.warning': '📶 Verifique se voce esta com uma internet estavel — esta etapa precisa de conexao.',
|
|
1239
|
+
|
|
1240
|
+
// run command
|
|
1241
|
+
'cli.command.run.description': '▶ Executa o app Flutter usando .env (fallback para dart-defines do launch.json)',
|
|
1242
|
+
'run.launching': 'Iniciando app Flutter...',
|
|
1243
|
+
'run.error.notFlutterProject': 'Nenhum pubspec.yaml encontrado. Execute este comando dentro de um projeto Flutter.',
|
|
1244
|
+
'run.error.flutterNotFound': 'Flutter nao encontrado. Verifique se o Flutter esta instalado e no PATH.',
|
|
1245
|
+
|
|
1246
|
+
// doctor project checks
|
|
1247
|
+
'doctor.project.title': 'Projeto',
|
|
1248
|
+
'doctor.project.appName': 'Nome do app',
|
|
1249
|
+
'doctor.project.backend': 'Backend',
|
|
1250
|
+
'doctor.project.bundleId': 'Bundle ID',
|
|
1251
|
+
'doctor.project.pubGet': 'Dependencias instaladas (pubspec.lock presente)',
|
|
1252
|
+
'doctor.project.pubGetMissing': 'Execute flutter pub get — pubspec.lock nao encontrado',
|
|
1253
|
+
'doctor.project.modules': 'Features ativas',
|
|
1254
|
+
'doctor.project.noModules': 'Nenhuma feature opcional ativa',
|
|
1255
|
+
|
|
1256
|
+
// add command
|
|
1257
|
+
'cli.command.add.description': '➕ Adiciona uma feature a um projeto existente',
|
|
1258
|
+
|
|
1259
|
+
// docs command
|
|
1260
|
+
'cli.command.docs.description': '📖 Exibe a documentacao e comandos disponiveis',
|
|
1261
|
+
|
|
1262
|
+
// notifications command
|
|
1263
|
+
'cli.command.notifications.description': '🔔 Textos de notificacao local (lembretes + demo na Home)',
|
|
1264
|
+
'cli.command.notifications.text.description': 'Define titulos e mensagens das notificacoes locais',
|
|
1265
|
+
'notifications.error.notKasyProject': 'kit_setup.json nao encontrado. Execute dentro de um projeto Kasy.',
|
|
1266
|
+
'notifications.error.noI18n': 'lib/i18n/*.i18n.json nao encontrado neste projeto.',
|
|
1267
|
+
'notifications.error.noFeatures': 'lib/core/config/features.dart nao encontrado.',
|
|
1268
|
+
'notifications.error.notEnabled': 'Notificacoes locais desativadas. Execute: kasy add local_notifications',
|
|
1269
|
+
'notifications.error.cancelled': 'Cancelado.',
|
|
1270
|
+
'notifications.prompt.intro': 'Textos de notificacao local',
|
|
1271
|
+
'notifications.prompt.hint': 'Demo Home = teste instantaneo em Features. Lembrete = alerta agendado em Configuracoes.',
|
|
1272
|
+
'notifications.prompt.demoTitle': 'Demo Home — titulo da notificacao',
|
|
1273
|
+
'notifications.prompt.demoBody': 'Demo Home — descricao / corpo',
|
|
1274
|
+
'notifications.prompt.reminderTitle': 'Lembrete agendado — titulo',
|
|
1275
|
+
'notifications.prompt.reminderBody': 'Lembrete agendado — corpo',
|
|
1276
|
+
'notifications.prompt.required': 'Obrigatorio.',
|
|
1277
|
+
'notifications.writing': 'Atualizando lib/i18n/*.i18n.json...',
|
|
1278
|
+
'notifications.written': 'Atualizado: {langs}',
|
|
1279
|
+
'notifications.slang': 'Executando dart run slang...',
|
|
1280
|
+
'notifications.slangDone': 'Traducoes regeneradas',
|
|
1281
|
+
'notifications.slangFailed': 'dart run slang falhou — execute manualmente no projeto',
|
|
1282
|
+
'notifications.done': 'Textos de notificacao local atualizados.',
|
|
1283
|
+
'notifications.summary.demo': 'Home → Features (demo):',
|
|
1284
|
+
'notifications.summary.reminder': 'Configuracoes → Lembretes (agendado):',
|
|
1285
|
+
|
|
1286
|
+
'add.list.title': 'Features disponiveis (✓ = ja ativa)',
|
|
1287
|
+
'add.error.noModule': 'Informe o nome da feature ou use --list para ver as disponiveis.',
|
|
1288
|
+
'add.error.notKasyProject': 'kit_setup.json nao encontrado. Execute este comando dentro de um projeto Kasy.',
|
|
1289
|
+
'add.error.unknownModule': 'Feature desconhecida: {module}\nDisponiveis: {list}',
|
|
1290
|
+
'add.alreadyActive': 'A feature "{module}" ja esta ativa neste projeto.',
|
|
1291
|
+
'add.applying': 'Adicionando feature: {module}',
|
|
1292
|
+
'add.applyingPatch': 'Aplicando arquivos de patch...',
|
|
1293
|
+
'add.patchApplied': 'Patch aplicado',
|
|
1294
|
+
'add.patchFailed': 'Patch falhou — verifique a saida acima',
|
|
1295
|
+
'add.pubGet': 'Executando flutter pub get...',
|
|
1296
|
+
'add.pubGetDone': 'Dependencias atualizadas',
|
|
1297
|
+
'add.pubGetFailed': 'flutter pub get falhou — execute manualmente',
|
|
1298
|
+
'add.buildRunner': 'Executando build_runner...',
|
|
1299
|
+
'add.buildRunnerDone': 'Geracao de codigo concluida',
|
|
1300
|
+
'add.buildRunnerFailed': 'build_runner falhou — execute manualmente',
|
|
1301
|
+
'add.success': 'Feature "{module}" adicionada com sucesso.',
|
|
1302
|
+
'add.cancelled': 'Cancelado.',
|
|
1303
|
+
'add.prompt.sentryDsn': 'Sentry DSN (deixe em branco para configurar depois):',
|
|
1304
|
+
'add.prompt.mixpanelToken': 'Mixpanel Token (deixe em branco para configurar depois):',
|
|
1305
|
+
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (deixe em branco para configurar depois):',
|
|
1306
|
+
'add.prompt.rcIosKey': 'RevenueCat iOS API key (deixe em branco para configurar depois):',
|
|
1307
|
+
'add.note.facebook': 'Adicione seu Facebook App ID e token no .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
1308
|
+
'new.q.llm_chat.configureNow': 'Configurar o agente de Chat LLM agora?',
|
|
1309
|
+
'new.q.llm_chat.configureNow.hint': 'Pode pular e executar "kasy add llm_chat" depois',
|
|
1310
|
+
'add.llm_chat.reconfigure': 'Feature ja ativa — reconfigurando apenas as credenciais.',
|
|
1311
|
+
'add.prompt.llmProvider': 'Provedor de LLM:',
|
|
1312
|
+
'add.prompt.llmSystemPrompt': 'Instrucao do agente — system prompt (deixe em branco para nenhuma):\n Exemplo: "Voce e um assistente de suporte do app Fitsync. Responda apenas sobre treinos."\n >',
|
|
1313
|
+
'add.prompt.llmApiKey': 'Chave de API (OpenAI ou Gemini) — fica no servidor, nunca no app (deixe em branco para configurar depois):',
|
|
1314
|
+
'add.prompt.llmEndpoint': 'URL do seu endpoint LLM (deixe em branco para configurar depois):',
|
|
1315
|
+
'add.llm_chat.settingSecret': 'Salvando chave de API como secret no servidor...',
|
|
1316
|
+
'add.llm_chat.secretSet': 'Chave de API salva como secret',
|
|
1317
|
+
'add.llm_chat.secretFailed': 'Nao foi possivel salvar o secret automaticamente — configure manualmente (veja instrucoes abaixo)',
|
|
1318
|
+
'add.llm_chat.skipSecret': 'Chave de API ignorada — configure antes do deploy via CLI do servidor',
|
|
1319
|
+
'add.llm_chat.deploying': 'Fazendo deploy da funcao LLM no servidor...',
|
|
1320
|
+
'add.llm_chat.deployed': 'Funcao LLM deployada com sucesso',
|
|
1321
|
+
'add.llm_chat.deployFailed': 'Deploy automatico falhou — faca o deploy manualmente (veja instrucoes abaixo)',
|
|
1322
|
+
'add.llm_chat.nextSteps.firebase': '\n Proximos passos:\n 1. O LLM_CHAT_ENDPOINT no .vscode/launch.json ja foi preenchido.\n 2. Rode o app: kasy run\n',
|
|
1323
|
+
'add.llm_chat.nextSteps.firebase.deployFailed': '\n Proximos passos:\n 1. Deploy manual: firebase deploy --only functions:llmChat\n 2. O LLM_CHAT_ENDPOINT no .vscode/launch.json ja foi preenchido.\n 3. Rode o app: kasy run\n',
|
|
1324
|
+
'add.llm_chat.nextSteps.supabase': '\n Proximos passos:\n 1. O LLM_CHAT_ENDPOINT no .vscode/launch.json ja foi preenchido.\n 2. Rode o app: kasy run\n',
|
|
1325
|
+
'add.llm_chat.nextSteps.supabase.deployFailed': '\n Proximos passos:\n 1. Deploy manual: supabase functions deploy llm-chat --no-verify-jwt\n 2. O LLM_CHAT_ENDPOINT no .vscode/launch.json ja foi preenchido.\n 3. Rode o app: kasy run\n',
|
|
1326
|
+
'add.llm_chat.nextSteps.api': '\n Proximos passos:\n 1. Crie um endpoint no seu servidor que aceite {message, history} e chame sua LLM.\n 2. Atualize LLM_CHAT_ENDPOINT no .vscode/launch.json com a URL do seu endpoint.\n 3. Rode o app: kasy run\n',
|
|
1327
|
+
'cli.command.remove.description': '🗑️ Remove uma feature de um projeto existente',
|
|
1328
|
+
'remove.error.noModule': 'Informe o nome da feature. Uso: kasy remove <feature>',
|
|
1329
|
+
'remove.error.notKasyProject': 'kit_setup.json nao encontrado. Execute este comando dentro de um projeto Kasy.',
|
|
1330
|
+
'remove.error.unknownModule': 'Feature desconhecida: {module}\nDisponiveis: {list}',
|
|
1331
|
+
'remove.error.notActive': 'A feature "{module}" nao esta ativa neste projeto.',
|
|
1332
|
+
'remove.confirm': 'Remover a feature "{module}"? Isso vai deletar arquivos e dependencias.',
|
|
1333
|
+
'remove.cancelled': 'Cancelado.',
|
|
1334
|
+
'remove.removing': 'Removendo feature: {module}',
|
|
1335
|
+
'remove.pubGet': 'Executando flutter pub get...',
|
|
1336
|
+
'remove.pubGetDone': 'Dependencias atualizadas',
|
|
1337
|
+
'remove.pubGetFailed': 'flutter pub get falhou — execute manualmente',
|
|
1338
|
+
'remove.buildRunner': 'Executando build_runner...',
|
|
1339
|
+
'remove.buildRunnerDone': 'Geracao de codigo concluida',
|
|
1340
|
+
'remove.buildRunnerFailed': 'build_runner falhou — execute manualmente',
|
|
1341
|
+
'remove.success': 'Feature "{module}" removida com sucesso.',
|
|
1342
|
+
'remove.warn.ci': 'Arquivos de CI removidos. Se tinha workflows customizados, restaure-os pelo git.',
|
|
1343
|
+
'remove.warn.sentry.shared': 'sentry_flutter mantido — ainda necessario para features ativas (revenuecat/facebook).',
|
|
1344
|
+
'cli.command.update.description': '⬆️ Atualiza features/componentes em um projeto existente',
|
|
1345
|
+
'cli.command.update.targetArg': 'Alvo para atualizar (ex.: camera, revenuecat, sentry, components)',
|
|
1346
|
+
'update.error.noProject': 'kit_setup.json nao encontrado. Execute dentro de um projeto Kasy.',
|
|
1347
|
+
'update.error.unknownModule': 'Modulo desconhecido: {module}\nDisponiveis: {list}',
|
|
1348
|
+
'update.error.unknownTarget': 'Alvo de atualizacao desconhecido: {module}\nDisponiveis: {list}',
|
|
1349
|
+
'update.error.notActive': 'A feature "{module}" nao esta ativa neste projeto.',
|
|
1350
|
+
'update.alreadyUpToDate': 'Projeto ja esta atualizado (v{version}).',
|
|
1351
|
+
'update.status': 'Projeto: v{from} → CLI: v{to}',
|
|
1352
|
+
'update.noVersion': 'Projeto foi gerado sem rastreamento de versao. Todas as features podem ser atualizadas.',
|
|
1353
|
+
'update.changesTitle': 'Mudancas disponiveis para suas features:',
|
|
1354
|
+
'update.howToUpdate': 'Para atualizar uma feature:',
|
|
1355
|
+
'update.howToUpdateComponents': 'Para atualizar componentes base:',
|
|
1356
|
+
'update.warn.commit': 'Isso vai sobrescrever os arquivos da feature "{module}". Faca commit de tudo antes de continuar.',
|
|
1357
|
+
'update.warn.commitComponents': 'Isso vai sobrescrever arquivos dos componentes base. Faca commit de tudo antes de continuar.',
|
|
1358
|
+
'update.confirm': 'Sobrescrever arquivos da feature "{module}" com a versao mais recente?',
|
|
1359
|
+
'update.confirmComponents': 'Sobrescrever arquivos dos componentes base com a versao mais recente?',
|
|
1360
|
+
'update.cancelled': 'Cancelado.',
|
|
1361
|
+
'update.applying': 'Aplicando atualizacao da feature: {module}',
|
|
1362
|
+
'update.applyingComponents': 'Aplicando atualizacao dos componentes base...',
|
|
1363
|
+
'update.applied': 'Feature {module} atualizada',
|
|
1364
|
+
'update.appliedComponents': '{count} arquivos de componentes base atualizados',
|
|
1365
|
+
'update.applyFailed': 'Falha ao aplicar atualizacao da feature {module}',
|
|
1366
|
+
'update.applyComponentsFailed': 'Falha ao aplicar atualizacao dos componentes base',
|
|
1367
|
+
'update.noPatch': 'Feature "{module}" nao tem arquivos para atualizar (feature so de configuracao).',
|
|
1368
|
+
'update.noComponentFiles': 'Nenhum arquivo de componente base foi encontrado para atualizar.',
|
|
1369
|
+
'update.pubGet': 'Executando flutter pub get...',
|
|
1370
|
+
'update.pubGetDone': 'Dependencias atualizadas',
|
|
1371
|
+
'update.pubGetFailed': 'flutter pub get falhou — execute manualmente',
|
|
1372
|
+
'update.buildRunner': 'Executando build_runner...',
|
|
1373
|
+
'update.buildRunnerDone': 'Geracao de codigo concluida',
|
|
1374
|
+
'update.buildRunnerFailed': 'build_runner falhou — execute manualmente',
|
|
1375
|
+
'update.success': 'Feature "{module}" atualizada com sucesso.',
|
|
1376
|
+
'update.componentsSuccess': 'Componentes base atualizados com sucesso.',
|
|
1377
|
+
},
|
|
1378
|
+
es: {
|
|
1379
|
+
'cli.tagline': 'Crea apps móviles sin dolor de configuración',
|
|
1380
|
+
'cli.description': 'Crea apps Flutter sin dolor de configuración.',
|
|
1381
|
+
'cli.usage': '<comando> [argumentos]',
|
|
1382
|
+
'cli.option.version': 'Mostrar version instalada',
|
|
1383
|
+
'cli.option.lang': 'Idioma (en, pt, es)',
|
|
1384
|
+
'cli.help.afterError': '(ejecuta con --help para detalles de uso)',
|
|
1385
|
+
'cli.help.more': 'Ejecuta "{command}" para detalles de un comando especifico.',
|
|
1386
|
+
'cli.help.quickStart': 'Crear un nuevo app:',
|
|
1387
|
+
'cli.help.optionDescription': 'Mostrar ayuda del comando',
|
|
1388
|
+
'cli.help.commandDescription': 'Mostrar ayuda del comando',
|
|
1389
|
+
'cli.help.inline.options': '[opciones]',
|
|
1390
|
+
'cli.help.heading.usage': 'Uso',
|
|
1391
|
+
'cli.help.heading.arguments': 'Argumentos',
|
|
1392
|
+
'cli.help.heading.options': 'Opciones',
|
|
1393
|
+
'cli.help.heading.globalOptions': 'Opciones Globales',
|
|
1394
|
+
'cli.help.heading.commands': 'Comandos',
|
|
1395
|
+
'cli.command.setup.description': '📱 Configura una nueva plantilla Flutter',
|
|
1396
|
+
'cli.command.new.description': '✨ Crea un nuevo app',
|
|
1397
|
+
'cli.command.new.projectName': 'nombre del proyecto',
|
|
1398
|
+
'cli.command.new.projectNameArg': 'Nombre de la carpeta del proyecto',
|
|
1399
|
+
'prompt.projectName.enter': '¿Cuál es el nombre de tu proyecto?',
|
|
1400
|
+
'prompt.projectName.required': 'El nombre del proyecto es obligatorio.',
|
|
1401
|
+
'prompt.projectName.default': 'mi_app',
|
|
1402
|
+
'cli.command.setup.directoryName': 'directorio',
|
|
1403
|
+
'cli.command.setup.directoryArg': 'Directorio destino (por defecto: carpeta actual .)',
|
|
1404
|
+
'cli.command.setup.langName': 'idioma',
|
|
1405
|
+
'cli.command.setup.langOption': 'Idioma de prompts (en, pt, es)',
|
|
1406
|
+
'cli.command.setup.backendOption': 'Adapter de backend (firebase, supabase, api)',
|
|
1407
|
+
'cli.command.setup.featuresOption': 'Features opcionales separadas por coma (web,widget,camera,llm_chat,revenuecat,ci)',
|
|
1408
|
+
'cli.command.help.paramName': 'comando',
|
|
1409
|
+
'cli.command.doctor.description': '🩺 Verifica entorno y dependencias',
|
|
1410
|
+
'cli.command.modules.description': '🧩 Lista backends y features disponibles',
|
|
1411
|
+
'cli.command.validate.description': '✅ Valida combinaciones minimas de backend/features',
|
|
1412
|
+
'cli.command.validate.analyzeOnlyOption': 'Ejecuta solo flutter analyze (sin build)',
|
|
1413
|
+
'cli.command.version.description': '🏷️ Muestra la version instalada de la CLI',
|
|
1414
|
+
'cli.command.upgrade.description': '⬆️ Actualiza la CLI kasy a la ultima version',
|
|
1415
|
+
'cli.command.uninstall.description': '🗑️ Desinstala la CLI kasy de esta maquina',
|
|
1416
|
+
'cli.command.upgrade.running': 'Actualizando la CLI kasy...',
|
|
1417
|
+
'cli.command.upgrade.done': 'kasy actualizado correctamente!',
|
|
1418
|
+
'cli.command.uninstall.running': 'Desinstalando la CLI kasy...',
|
|
1419
|
+
'cli.command.uninstall.done': 'kasy desinstalado. Hasta luego!',
|
|
1420
|
+
'new.checks.environment': 'Verificaciones de entorno',
|
|
1421
|
+
'new.checks.environment.checking': 'Verificando entorno',
|
|
1422
|
+
'new.checks.environment.done': 'Entorno listo',
|
|
1423
|
+
'setup.checks.backend.checking': 'Verificando herramientas {backend}',
|
|
1424
|
+
'setup.checks.backend.done': 'Herramientas {backend} listas',
|
|
1425
|
+
'new.checks.firebaseForPush': 'Nota: Firebase CLI es obligatorio para notificaciones push (FCM) en todos los backends.',
|
|
1426
|
+
'new.checks.requiredBlock': 'Faltan herramientas obligatorias. Instalalas para continuar.',
|
|
1427
|
+
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
1428
|
+
'new.checks.installSupabase': 'Supabase: npm i -g supabase (o brew install supabase/tap/supabase) && supabase login',
|
|
1429
|
+
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (o npm i -g supabase)',
|
|
1430
|
+
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
1431
|
+
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
1432
|
+
'setup.checks.environment': 'Verificaciones de entorno',
|
|
1433
|
+
'setup.checks.prepareFirebase': 'Herramientas Firebase (push, remote config)',
|
|
1434
|
+
'setup.checks.backend': 'Verificaciones de backend ({backend})',
|
|
1435
|
+
'setup.firebase.installing': 'Instalando Firebase CLI...',
|
|
1436
|
+
'setup.supabase.installing': 'Instalando Supabase CLI...',
|
|
1437
|
+
'setup.flutterfire.installing': 'Instalando FlutterFire CLI...',
|
|
1438
|
+
'setup.warn.hang': 'Si se cuelga, ejecuta manualmente: flutterfire --version',
|
|
1439
|
+
'setup.warn.supabase': '¿Usas Supabase o API propia? Firebase sigue siendo útil para push y remote config.',
|
|
1440
|
+
'doctor.title': 'Kasy Doctor',
|
|
1441
|
+
'doctor.baseEnvironment': 'Entorno base',
|
|
1442
|
+
'doctor.optionalBackend': 'Herramientas opcionales de backend',
|
|
1443
|
+
'doctor.requiredMissing': 'Faltan dependencias obligatorias. Corrige los errores anteriores y ejecuta doctor nuevamente.',
|
|
1444
|
+
'doctor.requiredPassed': '✓ Verificaciones obligatorias de entorno aprobadas.',
|
|
1445
|
+
'modules.backends': 'Backends disponibles:',
|
|
1446
|
+
'modules.features': 'Features opcionales disponibles:',
|
|
1447
|
+
'modules.backend.firebase.description': 'Adapter de backend Firebase',
|
|
1448
|
+
'modules.backend.supabase.description': 'Adapter de backend Supabase',
|
|
1449
|
+
'modules.backend.api.description': 'Adapter de backend API REST/GraphQL',
|
|
1450
|
+
'modules.feature.sentry.description': 'Seguimiento de errores y crashes con Sentry',
|
|
1451
|
+
'modules.feature.analytics.description': 'Seguimiento de eventos de analytics (Firebase Analytics)',
|
|
1452
|
+
'modules.feature.facebook.description': 'Integracion de inicio de sesion con Facebook',
|
|
1453
|
+
'modules.feature.revenuecat.description': 'Integracion de suscripciones con RevenueCat',
|
|
1454
|
+
'modules.feature.onboarding.description': 'Feature de flujo de onboarding',
|
|
1455
|
+
'modules.feature.web.description': 'Capa de compatibilidad Web',
|
|
1456
|
+
'modules.feature.widget.description': 'Integracion de widget iOS/Android',
|
|
1457
|
+
'modules.feature.camera.description': 'Plantilla de la feature de camara',
|
|
1458
|
+
'modules.feature.llm_chat.description': 'Plantilla de la feature de chat con LLM',
|
|
1459
|
+
'modules.feature.feedback.description': 'Feature de feedback y sugerencias de funcionalidades',
|
|
1460
|
+
'modules.feature.local_notifications.description': 'Recordatorios locales — programados por el usuario (solo iOS y Android)',
|
|
1461
|
+
'modules.feature.ci.description': 'CI: GitHub/GitLab (tests + build) + Codemagic (publicacion en tiendas)',
|
|
1462
|
+
'checks.checking': 'Verificando {name}...',
|
|
1463
|
+
'checks.found': '{name} encontrado',
|
|
1464
|
+
'checks.foundWithVersion': '{name} listo ({version})',
|
|
1465
|
+
'checks.missing': '{name} ausente',
|
|
1466
|
+
'checks.notFound': '{name} no encontrado',
|
|
1467
|
+
'checks.flutter.warn': 'Flutter SDK no encontrado. Instala Flutter para compilar y ejecutar apps: https://docs.flutter.dev/get-started/install',
|
|
1468
|
+
'checks.install.failed': 'instalación automática falló — ejecuta el comando manualmente',
|
|
1469
|
+
'banner.title': 'Kasy CLI · Generador Flutter SaaS',
|
|
1470
|
+
'welcome.firstRun': '¡Bienvenido a Kasy CLI!',
|
|
1471
|
+
'welcome.chooseLanguage': 'Primero, elige tu idioma:',
|
|
1472
|
+
'prompt.language.select': 'Elige tu idioma',
|
|
1473
|
+
'prompt.cancelled': 'Comando cancelado por el usuario.',
|
|
1474
|
+
'license.required': '🔑 Se requiere clave de activación para usar Kasy CLI',
|
|
1475
|
+
'license.checking': 'Validando clave de activación...',
|
|
1476
|
+
'license.saved': '✅ Clave validada correctamente',
|
|
1477
|
+
'license.invalid': 'Formato inválido. Usa XXXX-XXXX-XXXX-XXXX.',
|
|
1478
|
+
'prompt.license.enter': '👉 Ingresa tu clave de activación (XXXX-XXXX-XXXX-XXXX)',
|
|
1479
|
+
'prompt.license.invalid': 'Formato inválido. Usa XXXX-XXXX-XXXX-XXXX.',
|
|
1480
|
+
'prompt.appName.enter': 'Ingresa el nombre de tu app',
|
|
1481
|
+
'prompt.appName.required': 'El nombre de la app es obligatorio.',
|
|
1482
|
+
'prompt.bundleId.enter': 'Ingresa el bundle ID (com.company.app)',
|
|
1483
|
+
'prompt.bundleId.required': 'El bundle ID es obligatorio.',
|
|
1484
|
+
'prompt.bundleId.invalid': 'El bundle ID debe verse como com.company.app.',
|
|
1485
|
+
'prompt.backend.select': 'Elige el proveedor de backend',
|
|
1486
|
+
'prompt.features.select': 'Elige las features opcionales a incluir',
|
|
1487
|
+
'prompt.features.instructions': 'Espacio para marcar, enter para confirmar',
|
|
1488
|
+
'prompt.multiselect.instructions': '\nInstrucciones:\n ↑/↓: Resaltar opcion\n ←/→/[space]: Marcar/desmarcar\n a: Marcar/desmarcar todos\n enter/return: Confirmar',
|
|
1489
|
+
'prompt.multiselect.warnDisabled': 'Usa ↓ para ir a una opcion seleccionable, Space para marcar, Enter para confirmar',
|
|
1490
|
+
'prompt.firebase.projectId.enter': 'Ingresa el Firebase Project ID',
|
|
1491
|
+
'prompt.firebase.projectId.required': 'Firebase Project ID es obligatorio.',
|
|
1492
|
+
'prompt.supabase.url.enter': 'Ingresa la URL de Supabase',
|
|
1493
|
+
'prompt.supabase.url.required': 'La URL de Supabase es obligatoria.',
|
|
1494
|
+
'prompt.supabase.anonKey.enter': 'Ingresa la clave anon de Supabase',
|
|
1495
|
+
'prompt.supabase.anonKey.required': 'La clave anon de Supabase es obligatoria.',
|
|
1496
|
+
'new.supabase.q.create': '¿Crear nuevo proyecto Supabase o usar existente?',
|
|
1497
|
+
'new.supabase.q.create.create': '✨ Crear nuevo proyecto (recomendado para principiantes)',
|
|
1498
|
+
'new.supabase.q.create.existing': '📂 Usar proyecto existente',
|
|
1499
|
+
'new.firebase.q.setupMode': '¿Cómo quieres configurar Firebase?',
|
|
1500
|
+
'new.firebase.q.setupMode.push': 'Proyecto Firebase para notificaciones push (FCM):',
|
|
1501
|
+
'new.firebase.q.setupMode.create': '✨ Crear desde cero (recomendado para principiantes)',
|
|
1502
|
+
'new.firebase.q.setupMode.existing': '📂 Usar proyecto existente',
|
|
1503
|
+
'new.firebase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
|
|
1504
|
+
'new.firebase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — southamerica-east1',
|
|
1505
|
+
'new.firebase.q.region.us': '🇺🇸 Estados Unidos — us-central1',
|
|
1506
|
+
'new.firebase.q.region.europe': '🇪🇺 Europa — europe-west1',
|
|
1507
|
+
'new.firebase.q.region.global': '🌍 Global / No sé — us-central1',
|
|
1508
|
+
'new.firebase.create.prereq': 'Necesitas: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Plan Blaze necesario para deploy.',
|
|
1509
|
+
'new.firebase.create.creating': 'Creando proyecto Firebase…',
|
|
1510
|
+
'new.firebase.create.includeWeb': '¿Incluir app Web en Firebase? (para plataforma web)',
|
|
1511
|
+
'new.firebase.create.nowDo': 'Ahora activa la autenticación (antes de ejecutar el app):',
|
|
1512
|
+
'new.firebase.create.activateEmail': 'Activa Email/Contraseña: Firebase Console → Authentication → Sign-in method',
|
|
1513
|
+
'new.firebase.create.activateGoogle': 'Activa Google: misma página, clic en Google → Activar',
|
|
1514
|
+
'new.firebase.create.beforeContinue.title': 'Antes de continuar, activa en Firebase Console:',
|
|
1515
|
+
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Contraseña y Anónimo ya fueron activados automáticamente)',
|
|
1516
|
+
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → activa Email/Contraseña, Anónimo y Google',
|
|
1517
|
+
'new.firebase.create.beforeContinue.ready': 'He activado Google Sign-In. ¿Continuar?',
|
|
1518
|
+
'new.firebase.create.beforeContinue.ready.noAuth': 'He activado Email/Contraseña, Anónimo y Google Sign-In. ¿Continuar?',
|
|
1519
|
+
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager y Storage ya fueron activados automáticamente)',
|
|
1520
|
+
'new.firebase.create.sha1Skipped': 'SHA-1 no añadido',
|
|
1521
|
+
'new.firebase.create.sha1ManualInstruction': 'Añade el SHA-1 manualmente: Firebase Console → Configuración del proyecto → Tus apps → Android → Añadir huella digital',
|
|
1522
|
+
'new.firebase.create.sha1ParseError': 'No se pudo extraer el SHA-1 de la salida de keytool',
|
|
1523
|
+
'new.firebase.create.sha1ErrorDetail': 'Motivo',
|
|
1524
|
+
'new.firebase.create.useExistingHint': 'El proyecto puede haberse creado. Prueba "Usar proyecto existente" con ID: {id}',
|
|
1525
|
+
'new.firebase.create.usingProjectId': 'Usando project ID: {id} (continuando con proyecto existente)',
|
|
1526
|
+
'new.firebase.create.waitPropagate': 'Esperando propagación del proyecto (20s)…',
|
|
1527
|
+
'new.firebase.create.success': 'Proyecto Firebase creado correctamente.',
|
|
1528
|
+
'new.firebase.create.failed': 'No se pudo crear el proyecto',
|
|
1529
|
+
'new.firebase.create.gcloudRequired': 'gcloud CLI es obligatorio para "crear desde cero". Sin él, el flujo completo de Firebase no puede ejecutarse.',
|
|
1530
|
+
'new.firebase.create.installTitle': 'Para instalar gcloud CLI, ejecuta:',
|
|
1531
|
+
'new.firebase.create.installCommand': 'Comando',
|
|
1532
|
+
'new.firebase.create.installAfter': 'Luego inicia sesión',
|
|
1533
|
+
'new.firebase.create.installUrl': 'O descarga en',
|
|
1534
|
+
'new.firebase.create.authCommand': 'Ejecuta: gcloud auth login',
|
|
1535
|
+
'new.firebase.create.fallbackHint': 'Por ahora, ingresa un Firebase Project ID existente para continuar (o instala gcloud y ejecuta de nuevo):',
|
|
1536
|
+
'new.firebase.q.billingAccount': '¿Qué cuenta de facturación vincular al proyecto?',
|
|
1537
|
+
'new.firebase.q.billingAccount.hint': 'Elige la cuenta con cuota disponible (hasta 3 proyectos por cuenta)',
|
|
1538
|
+
'new.firebase.q.billingAccount.context': 'Límite: hasta 3 proyectos por cuenta de facturación. Elige una con cuota disponible (elimina proyectos no usados en console.cloud.google.com/billing si hace falta).',
|
|
1539
|
+
'new.firebase.q.billingAccount.other': 'Otra — introducir ID de cuenta manualmente',
|
|
1540
|
+
'new.firebase.q.billingAccount.manualId': 'ID de cuenta de facturación (ej: 018A70-7D0548-0F84A8)',
|
|
1541
|
+
'new.firebase.q.billingAccount.manualId.hint': 'Encuéntralo en console.cloud.google.com/billing',
|
|
1542
|
+
'new.firebase.q.billingAccount.manualId.required': 'El ID de la cuenta de facturación es obligatorio.',
|
|
1543
|
+
'new.firebase.q.organization': '¿En qué organización GCP crear el proyecto?',
|
|
1544
|
+
'new.firebase.q.organization.none': 'Sin organización (cuenta personal / proyecto independiente)',
|
|
1545
|
+
'new.firebase.q.organization.hint': 'Organizaciones vinculadas a tu cuenta gcloud',
|
|
1546
|
+
'new.firebase.create.billingRetry.title': 'Vincula la facturación manualmente (cuota excedida o error de billing):',
|
|
1547
|
+
'new.firebase.create.billingRetry.hint': 'Consejo: El límite es 3 proyectos por cuenta de facturación. Elimina proyectos no usados en el enlace de arriba. Si acabas de eliminar uno, espera 2–5 min a que se propague el cambio y reintenta.',
|
|
1548
|
+
'new.firebase.create.billingRetry.ready': 'He vinculado la facturación. ¿Reintentar?',
|
|
1549
|
+
'new.firebase.create.billingRetry.retrying': 'Reintentando…',
|
|
1550
|
+
'new.firebase.create.billingRetry.exit': 'Ejecuta de nuevo con "Usar proyecto existente" después de vincular la facturación.',
|
|
1551
|
+
'new.firebase.create.projectQuotaExceeded': 'Cuota de proyectos excedida. Elimina proyectos no usados en console.cloud.google.com o ingresa un proyecto existente abajo.',
|
|
1552
|
+
'new.firebase.create.creatingPush': 'Creando proyecto Firebase para notificaciones push…',
|
|
1553
|
+
'new.firebase.create.successPush': 'Proyecto Firebase creado para FCM + Remote Config.',
|
|
1554
|
+
'new.supabase.q.orgSelect': '¿En qué organización crear el proyecto?',
|
|
1555
|
+
'new.supabase.orgsRequired': 'No se encontraron organizaciones. Ejecuta supabase login e intenta de nuevo.',
|
|
1556
|
+
'new.supabase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
|
|
1557
|
+
'new.supabase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — sa-east-1',
|
|
1558
|
+
'new.supabase.q.region.us': '🇺🇸 Estados Unidos (Virginia) — us-east-1',
|
|
1559
|
+
'new.supabase.q.region.europe': '🇪🇺 Europa (Irlanda) — eu-west-1',
|
|
1560
|
+
'new.supabase.q.region.global': '🌍 Global / No sé — us-east-1',
|
|
1561
|
+
'new.supabase.q.dbPassword': 'Contraseña del banco (mín 6 caracteres)',
|
|
1562
|
+
'new.supabase.q.dbPassword.required': 'La contraseña debe tener al menos 6 caracteres.',
|
|
1563
|
+
'new.supabase.creating': 'Creando proyecto en Supabase…',
|
|
1564
|
+
'new.supabase.created': 'Proyecto creado correctamente.',
|
|
1565
|
+
'new.supabase.createFailed': 'No se pudo crear el proyecto',
|
|
1566
|
+
'new.supabase.loginHint': 'Ejecuta: supabase login. Luego ingresa la URL y clave de tu proyecto existente.',
|
|
1567
|
+
'new.supabase.setup': 'Vinculando proyecto y desplegando…',
|
|
1568
|
+
'new.supabase.setupManual': 'Ejecuta manualmente: supabase link, supabase db push, supabase functions deploy',
|
|
1569
|
+
'new.supabase.q.useExisting.orgSelect': '¿En qué organización está el proyecto?',
|
|
1570
|
+
'new.supabase.q.useExisting.projectSelect': '¿Qué proyecto Supabase existente quieres usar?',
|
|
1571
|
+
'new.supabase.projectsRequired': 'No se encontraron proyectos en esta organización.',
|
|
1572
|
+
'new.supabase.q.dbPassword.existing': 'Contraseña del banco del proyecto (necesaria para vincular y aplicar migraciones)',
|
|
1573
|
+
'new.supabase.existingLinked': 'Proyecto listo para vincular y aplicar migraciones.',
|
|
1574
|
+
'setup.license.loaded': '✓ Clave de licencia cargada desde la configuracion local.',
|
|
1575
|
+
'setup.license.saved': '✓ Clave de licencia validada y guardada.',
|
|
1576
|
+
'setup.license.invalid': 'Formato de licencia invalido. Se espera XXXX-XXXX-XXXX-XXXX.',
|
|
1577
|
+
'setup.error.targetNotEmpty': 'El directorio de destino no esta vacio: {path}',
|
|
1578
|
+
'setup.error.targetExists': 'El directorio de destino ya existe: {path}',
|
|
1579
|
+
'setup.error.coreMissing': 'No se encontro la carpeta del core template: {path}',
|
|
1580
|
+
'setup.error.requiredChecksFailed': 'Fallo en verificaciones obligatorias. Ejecuta `kasy doctor`.',
|
|
1581
|
+
'setup.error.generatingFailed': 'Error al generar el proyecto.',
|
|
1582
|
+
'setup.error.conflictHint': 'Consejo: Elimina la carpeta del proyecto y ejecuta de nuevo, o usa un directorio vacío.',
|
|
1583
|
+
'setup.spinner.generating': 'Generando archivos del proyecto...',
|
|
1584
|
+
'setup.success.created': 'Proyecto creado correctamente.',
|
|
1585
|
+
'setup.success.complete': '✓ Setup completado',
|
|
1586
|
+
'setup.success.location': 'Ubicacion',
|
|
1587
|
+
'setup.success.nextSteps': 'Siguientes pasos',
|
|
1588
|
+
'setup.success.stepPubGet': 'flutter pub get',
|
|
1589
|
+
'setup.success.stepRun': 'flutter run',
|
|
1590
|
+
'validate.title': 'Kasy Validate',
|
|
1591
|
+
'validate.success': '✓ Matriz de validacion aprobada.',
|
|
1592
|
+
'validate.failed': 'La matriz de validacion fallo.',
|
|
1593
|
+
'validate.error': 'Una o mas combinaciones de validacion fallaron.',
|
|
1594
|
+
'validate.projectNotFound': 'Proyecto no encontrado',
|
|
1595
|
+
'validate.ok': 'ok',
|
|
1596
|
+
'validate.fail': 'fallo',
|
|
1597
|
+
'validate.passed': 'aprobado',
|
|
1598
|
+
|
|
1599
|
+
// ── Flujo Firebase ────────────────────────────────────────────────────
|
|
1600
|
+
'cli.command.firebase.description': '🔥 Crear app Flutter completo con Firebase (recomendado)',
|
|
1601
|
+
'new.banner': '✨ Nuevo app Flutter',
|
|
1602
|
+
'new.subtitle': 'Elige el backend: Firebase, Supabase o API REST.',
|
|
1603
|
+
'new.subtitle2': '🔒 El setup corre en tu máquina con tus credenciales — sin acceso de terceros.',
|
|
1604
|
+
'new.q.backend': '¿Donde quieres guardar los datos de tu app?',
|
|
1605
|
+
'new.q.backend.firebase.desc': 'El mas facil para empezar — auth, base de datos y storage listos',
|
|
1606
|
+
'new.q.backend.supabase.desc': 'Base de datos SQL (PostgreSQL) con mas control',
|
|
1607
|
+
'new.q.backend.api.desc': 'Ya tienes tu propio servidor',
|
|
1608
|
+
|
|
1609
|
+
'new.q.mode': '¿Como quieres configurar?',
|
|
1610
|
+
'new.q.mode.quick': '⚡ Rapido — pocas preguntas, valores inteligentes',
|
|
1611
|
+
'new.q.mode.advanced': '🛠 Avanzado — todas las opciones y credenciales ahora',
|
|
1612
|
+
|
|
1613
|
+
'new.q.preset': '¿Qué features incluir?',
|
|
1614
|
+
'new.q.preset.starter': '⚡ Starter — analytics + errores + onboarding',
|
|
1615
|
+
'new.q.preset.saas': '💰 SaaS — suscripciones + analytics + onboarding + feedback',
|
|
1616
|
+
'new.q.preset.content': '📱 Contenido — analytics + onboarding + camara + chat LLM',
|
|
1617
|
+
'new.q.preset.full': '🚀 Completo — todas las features',
|
|
1618
|
+
'new.q.preset.custom': '⚙️ Personalizar — elige feature a feature',
|
|
1619
|
+
'new.q.preset.none': '○ Ninguno — solo el core',
|
|
1620
|
+
|
|
1621
|
+
'new.firebase.success.deployStep': '• Desplegar backend (desde dentro de la carpeta del proyecto):',
|
|
1622
|
+
|
|
1623
|
+
'cli.command.deploy.description': 'Despliega el backend (Firebase o Supabase) — detecta proyecto y configura FCM',
|
|
1624
|
+
'cli.command.check.description': '🔔 Verifica configuración de push notifications (usa --fix para corregir)',
|
|
1625
|
+
'deploy.q.project': 'Firebase Project ID:',
|
|
1626
|
+
'deploy.q.serviceAccount': 'Ruta al service account JSON:',
|
|
1627
|
+
'deploy.detected.project': '✓ Proyecto Firebase detectado:',
|
|
1628
|
+
'deploy.detected.serviceAccount': '✓ Service account detectado:',
|
|
1629
|
+
'deploy.error.notProject': 'No se encontro firebase.json. Ejecute kasy deploy desde dentro de la carpeta del proyecto.',
|
|
1630
|
+
|
|
1631
|
+
'cli.command.ios.description': 'Release iOS en App Store (Mac)',
|
|
1632
|
+
'cli.command.ios.configure.description': 'Configurar credenciales Apple para subida local del IPA',
|
|
1633
|
+
'cli.command.ios.release.description': 'Incrementa build, genera IPA y sube a App Store Connect',
|
|
1634
|
+
'cli.command.ios.build.description': 'Solo genera el IPA (sin subir)',
|
|
1635
|
+
'cli.command.ios.clean.description': 'Limpia cachés Flutter/Xcode tras fallo en build iOS',
|
|
1636
|
+
'cli.command.codemagic.description': 'Disparar build iOS en Codemagic (nube)',
|
|
1637
|
+
'cli.command.codemagic.configure.description': 'Configurar credenciales API de Codemagic',
|
|
1638
|
+
'cli.command.codemagic.release.description': 'Iniciar build del workflow iOS en Codemagic',
|
|
1639
|
+
'cli.command.codemagic.status.description': 'Estado del build Codemagic por ID',
|
|
1640
|
+
|
|
1641
|
+
'ios.configure.title': 'App Store iOS — configuración',
|
|
1642
|
+
'ios.configure.bundleId': 'Bundle ID',
|
|
1643
|
+
'ios.configure.doc': 'Guía',
|
|
1644
|
+
'ios.configure.openingLinks': 'Abriendo App Store Connect en el navegador…',
|
|
1645
|
+
'ios.configure.q.apiKey': 'Key ID de la API App Store Connect',
|
|
1646
|
+
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
1647
|
+
'ios.configure.q.p8Path': 'Ruta del archivo AuthKey_XXXXX.p8 descargado',
|
|
1648
|
+
'ios.configure.q.appId': 'App ID en App Store Connect (opcional)',
|
|
1649
|
+
'ios.configure.q.required': 'Obligatorio',
|
|
1650
|
+
'ios.configure.q.p8NotFound': 'Archivo no encontrado',
|
|
1651
|
+
'ios.configure.cancelled': 'Configuración cancelada',
|
|
1652
|
+
'ios.configure.success': 'Credenciales Apple guardadas',
|
|
1653
|
+
'ios.configure.p8Installed': 'Clave instalada en',
|
|
1654
|
+
'ios.configure.next': 'Siguiente paso',
|
|
1655
|
+
'ios.release.title': 'Generando y subiendo release iOS…',
|
|
1656
|
+
'ios.release.success': 'Release iOS subida',
|
|
1657
|
+
'ios.build.title': 'Generando IPA iOS…',
|
|
1658
|
+
'ios.build.success': 'IPA generado',
|
|
1659
|
+
'ios.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
|
|
1660
|
+
'ios.error.noScript': 'scripts/release-ios.sh no encontrado. Ejecute: kasy update ios-release',
|
|
1661
|
+
'ios.error.notMac': 'Release iOS local requiere macOS con Xcode.',
|
|
1662
|
+
'ios.error.useCodemagic': 'Use release en la nube',
|
|
1663
|
+
'ios.error.notConfigured': 'Credenciales Apple no configuradas',
|
|
1664
|
+
'ios.error.runConfigure': 'Ejecute: kasy ios configure',
|
|
1665
|
+
'ios.error.signing': 'Firma iOS no configurada (falta DEVELOPMENT_TEAM).',
|
|
1666
|
+
'ios.error.signingHint': 'Abra ios/Runner.xcworkspace en Xcode → Runner → Signing & Capabilities → elija su Team.',
|
|
1667
|
+
'ios.error.googleUrlScheme': 'URL scheme iOS de Google Sign-In no configurado.',
|
|
1668
|
+
'ios.error.googleUrlSchemeHint': 'Corrección: ejecute flutterfire configure, luego kasy ios clean, o regenere el proyecto antes del build.',
|
|
1669
|
+
'ios.warn.lowDisk': 'Poco espacio en disco ({gb} GB libres; se recomiendan al menos {min} GB para builds Xcode).',
|
|
1670
|
+
'ios.hints.title': 'La caché de Xcode puede estar corrupta — intente:',
|
|
1671
|
+
'ios.hints.closeXcode': 'Cierre Xcode por completo',
|
|
1672
|
+
'ios.hints.retry': 'Luego reintente',
|
|
1673
|
+
'ios.hints.manual': 'O manualmente',
|
|
1674
|
+
'ios.clean.title': 'Limpiando cachés de build iOS…',
|
|
1675
|
+
'ios.clean.success': 'Cachés limpiadas',
|
|
1676
|
+
'ios.clean.notMac': 'La limpieza iOS solo está disponible en macOS.',
|
|
1677
|
+
'ios.clean.step.flutterClean': 'flutter clean',
|
|
1678
|
+
'ios.clean.step.derivedData': 'Eliminar DerivedData de Xcode (Runner)',
|
|
1679
|
+
'ios.clean.step.buildDir': 'Eliminar carpetas build',
|
|
1680
|
+
'ios.clean.step.pubGet': 'flutter pub get',
|
|
1681
|
+
'ios.clean.step.pods': 'pod install',
|
|
1682
|
+
|
|
1683
|
+
'codemagic.configure.title': 'Codemagic — configuración',
|
|
1684
|
+
'codemagic.configure.doc': 'Guía',
|
|
1685
|
+
'codemagic.configure.checklist': 'Complete firma + App Store Connect en el panel Codemagic (vea la guía).',
|
|
1686
|
+
'codemagic.configure.openingLinks': 'Abriendo Codemagic en el navegador…',
|
|
1687
|
+
'codemagic.configure.q.token': 'Token API de Codemagic',
|
|
1688
|
+
'codemagic.configure.q.appId': 'App ID en Codemagic',
|
|
1689
|
+
'codemagic.configure.q.workflowId': 'Workflow ID (de codemagic.yaml)',
|
|
1690
|
+
'codemagic.configure.q.branch': 'Rama Git para build',
|
|
1691
|
+
'codemagic.configure.q.required': 'Obligatorio',
|
|
1692
|
+
'codemagic.configure.cancelled': 'Configuración cancelada',
|
|
1693
|
+
'codemagic.configure.success': 'Credenciales Codemagic guardadas',
|
|
1694
|
+
'codemagic.configure.next': 'Siguiente paso',
|
|
1695
|
+
'codemagic.release.title': 'Disparando build en Codemagic…',
|
|
1696
|
+
'codemagic.release.triggered': 'Build iniciado',
|
|
1697
|
+
'codemagic.status.title': 'Estado del build',
|
|
1698
|
+
'codemagic.status.usage': 'Uso: kasy codemagic status <buildId>',
|
|
1699
|
+
'codemagic.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
|
|
1700
|
+
'codemagic.error.notConfigured': 'Codemagic no configurado',
|
|
1701
|
+
'codemagic.error.addCi': 'Agregue CI primero: kasy add ci (crea codemagic.yaml)',
|
|
1702
|
+
'codemagic.error.runConfigure': 'Ejecute: kasy codemagic configure',
|
|
1703
|
+
'codemagic.error.googleUrlScheme': 'Build Codemagic bloqueado: URL scheme iOS de Google Sign-In no configurado.',
|
|
1704
|
+
|
|
1705
|
+
'doctor.ios.title': 'Release iOS',
|
|
1706
|
+
'doctor.ios.appleOk': 'Credenciales Apple configuradas',
|
|
1707
|
+
'doctor.ios.appleMissing': 'Credenciales Apple faltantes — kasy ios configure',
|
|
1708
|
+
'doctor.ios.p8Ok': 'Archivo de clave API encontrado',
|
|
1709
|
+
'doctor.ios.p8Missing': 'AuthKey .p8 faltante — kasy ios configure',
|
|
1710
|
+
'doctor.ios.codemagicOk': 'Credenciales Codemagic configuradas',
|
|
1711
|
+
'doctor.ios.codemagicMissing': 'Codemagic opcional — kasy codemagic configure',
|
|
1712
|
+
'doctor.ios.notMac': 'Release iOS local requiere macOS',
|
|
1713
|
+
'doctor.ios.doc': 'Documentación',
|
|
1714
|
+
'doctor.ios.signingOk': 'Firma Xcode (Development Team) configurada',
|
|
1715
|
+
'doctor.ios.signingMissing': 'Firma Xcode no definida — abra Runner en Xcode y elija su Team',
|
|
1716
|
+
'doctor.ios.googleUrlSchemeOk': 'URL scheme iOS de Google Sign-In configurado',
|
|
1717
|
+
'doctor.ios.googleUrlSchemeMissing': 'URL scheme iOS de Google Sign-In divergente',
|
|
1718
|
+
'doctor.ios.googleUrlSchemeSkipped': 'Check del URL scheme iOS de Google Sign-In omitido (GoogleService-Info.plist ausente)',
|
|
1719
|
+
'doctor.ios.appleSignInEntitlementOk': 'Entitlement de Apple Sign-In configurado',
|
|
1720
|
+
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement de Apple Sign-In ausente — agrega la capability Sign In with Apple en Xcode',
|
|
1721
|
+
'doctor.ios.facebookOk': 'Credenciales de Facebook configuradas (iOS)',
|
|
1722
|
+
'doctor.ios.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza FacebookAppID y FacebookClientToken en Info.plist',
|
|
1723
|
+
'doctor.ios.facebookSkipped': 'Check de credenciales de Facebook omitido (FacebookAppID ausente en Info.plist)',
|
|
1724
|
+
'doctor.android.facebookOk': 'Credenciales de Facebook configuradas (Android)',
|
|
1725
|
+
'doctor.android.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza facebook_app_id y facebook_client_token en android/app/src/main/res/values/strings.xml',
|
|
1726
|
+
|
|
1727
|
+
'doctor.revenuecat.title': 'RevenueCat',
|
|
1728
|
+
'doctor.revenuecat.keysOk': 'Claves de API configuradas (iOS + Android)',
|
|
1729
|
+
'doctor.revenuecat.keysEmpty': 'Claves de API no configuradas — define RC_IOS_API_KEY y RC_ANDROID_API_KEY en Makefile y .vscode/launch.json',
|
|
1730
|
+
'doctor.revenuecat.keysTest': 'Usando claves Test Store (test_) — reemplaza por appl_ y goog_ para producción',
|
|
1731
|
+
'doctor.revenuecat.webhookUrlSupabase': 'URL del webhook (pega en RevenueCat → Integrations → Webhooks)',
|
|
1732
|
+
'doctor.revenuecat.webhookUrlFirebase': 'URL del webhook: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
1733
|
+
|
|
1734
|
+
'update.iosRelease.success': 'Archivos de release iOS actualizados',
|
|
1735
|
+
'add.iosRelease.success': 'Archivos de release iOS agregados',
|
|
1736
|
+
'add.iosRelease.already': 'Archivos de release iOS ya presentes',
|
|
1737
|
+
|
|
1738
|
+
'new.api.q.baseUrl': '¿Cual es la URL base de tu API?',
|
|
1739
|
+
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
1740
|
+
'new.firebase.banner': '🔥 Nuevo app Flutter — Firebase',
|
|
1741
|
+
'new.firebase.subtitle': 'Proyecto completo: auth, Firestore, notificaciones, login social y más.',
|
|
1742
|
+
'new.prereq.title': 'Antes de empezar, asegurate de tener:',
|
|
1743
|
+
'new.firebase.prereq.title': 'Antes de empezar, asegurate de tener:',
|
|
1744
|
+
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
1745
|
+
'new.firebase.prereq.create.2': '2. Plan Blaze (tarjeta de crédito — requerido para Cloud Functions)',
|
|
1746
|
+
'new.firebase.prereq.create.billingLimit': '3. Límite: hasta 3 proyectos por cuenta de facturación. Elimina proyectos no usados o solicita aumento de cuota si ya alcanzaste el límite.',
|
|
1747
|
+
'new.firebase.prereq.create.projectQuota': '4. Cuota de proyectos: la cuenta Google tiene un límite (ej. 10–30 proyectos). Elimina proyectos no usados en console.cloud.google.com si es necesario.',
|
|
1748
|
+
'new.firebase.prereq.create.note': ' Proyecto y APIs se crearán automáticamente.',
|
|
1749
|
+
'new.firebase.prereq.create.pushNote': ' Proyecto Firebase para FCM + Remote Config se creará automáticamente (sin cuenta de servicio).',
|
|
1750
|
+
'new.firebase.prereq.1': '1. Firebase CLI instalado (npm i -g firebase-tools) + firebase login',
|
|
1751
|
+
'new.firebase.prereq.2': '2. Proyecto Firebase creado en console.firebase.google.com',
|
|
1752
|
+
'new.firebase.prereq.3': '3. Plan Blaze activado (tarjeta de credito — requerido para Cloud Functions)',
|
|
1753
|
+
'new.firebase.prereq.4': '4. gcloud CLI instalado + gcloud auth login (para activar APIs automáticamente)',
|
|
1754
|
+
'new.firebase.prereq.5': '5. Antes del deploy: activa Secret Manager API y Firebase Storage (ver PREREQUISITES.md o enlaces tras generar)',
|
|
1755
|
+
'new.firebase.prereq.doc': ' Lista completa: PREREQUISITES.md',
|
|
1756
|
+
|
|
1757
|
+
'new.firebase.q.appName': '¿Cuál es el nombre de tu app?',
|
|
1758
|
+
'new.firebase.q.appName.hint': 'ej: Mi App Increible',
|
|
1759
|
+
'new.firebase.q.appName.required': 'El nombre de la app es obligatorio.',
|
|
1760
|
+
|
|
1761
|
+
'new.firebase.q.bundleId': '¿Cuál es el identificador único (Bundle ID) de tu app?',
|
|
1762
|
+
'new.firebase.q.bundleId.hint': 'Funciona como una dirección para tu app, ej: com.miempresa.miapp',
|
|
1763
|
+
'new.firebase.q.bundleId.invalid': 'Formato inválido. Usa: com.empresa.app',
|
|
1764
|
+
'new.firebase.q.bundleId.required': 'El Bundle ID es obligatorio.',
|
|
1765
|
+
|
|
1766
|
+
'new.firebase.q.projectId': '¿Cuál es el ID de tu proyecto Firebase?',
|
|
1767
|
+
'new.firebase.q.projectId.hint': 'Encuéntralo en Firebase Console → tu proyecto → Configuración',
|
|
1768
|
+
'new.firebase.q.projectId.required': 'El Firebase Project ID es obligatorio.',
|
|
1769
|
+
|
|
1770
|
+
'new.firebase.q.modules': '¿Qué features opcionales quieres incluir?',
|
|
1771
|
+
'new.firebase.q.modules.hint': 'Espacio para seleccionar, Enter para confirmar',
|
|
1772
|
+
'new.modules.header.common': '── Comunes (todos los backends) ──',
|
|
1773
|
+
'new.modules.header.features': '── Pantallas y features ──',
|
|
1774
|
+
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
1775
|
+
'new.modules.header.ci': '── CI/CD ──',
|
|
1776
|
+
'new.modules.header.monetization': '── Monetizacion ──',
|
|
1777
|
+
'new.firebase.module.revenuecat': '💰 Suscripciones en app (RevenueCat)',
|
|
1778
|
+
'new.firebase.module.sentry': '🚨 Reporte de errores (Sentry)',
|
|
1779
|
+
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
1780
|
+
'new.firebase.module.facebook': '👤 Login con Facebook (requiere App ID + Token)',
|
|
1781
|
+
'new.firebase.module.web': '🌐 Web (adicional al nativo — iOS/Android siempre incluidos)',
|
|
1782
|
+
'new.firebase.module.widget': '📱 Widget de inicio (iOS/Android)',
|
|
1783
|
+
'new.firebase.module.camera': '📷 Feature de camara',
|
|
1784
|
+
'new.firebase.module.llm_chat': '🤖 Feature de chat con LLM',
|
|
1785
|
+
'new.firebase.module.local_notifications': '🔔 Recordatorios locales — programados por el usuario (solo iOS y Android)',
|
|
1786
|
+
'new.firebase.module.feedback': '💬 Feedback / sugerencias de features',
|
|
1787
|
+
'new.firebase.module.ci': '⚙️ CI: GitHub/GitLab (tests + build) + Codemagic (publicacion en tiendas)',
|
|
1788
|
+
'new.firebase.module.onboarding': '👋 Onboarding (pantallas de bienvenida, preguntas de perfil)',
|
|
1789
|
+
|
|
1790
|
+
'new.firebase.q.secrets.configureNow': '¿Configurar los secrets del servidor ahora? (webhook RevenueCat, Meta Ads)',
|
|
1791
|
+
'new.firebase.q.secrets.configureNow.hint': 'Si no ahora, vea el README para los comandos de configuración después',
|
|
1792
|
+
'new.firebase.q.secrets.later': '• Secrets del servidor no configurados — se configurarán durante `kasy deploy`.',
|
|
1793
|
+
'new.firebase.q.revenuecat.webhookKey': 'Clave secreta del webhook (se sugirió un valor aleatorio — presiona Enter para aceptar o escribe el tuyo)',
|
|
1794
|
+
'new.firebase.q.revenuecat.webhookKey.hint': 'Guarda este valor. En el panel RevenueCat, pega como: Bearer <este-valor>',
|
|
1795
|
+
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (Conversions API, opcional)',
|
|
1796
|
+
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (opcional)',
|
|
1797
|
+
'new.firebase.q.revenuecat.android': 'Clave API RevenueCat para Android',
|
|
1798
|
+
'new.firebase.q.revenuecat.ios': 'Clave API RevenueCat para iOS',
|
|
1799
|
+
'new.firebase.q.paywall': '¿Qué estilo de paywall?',
|
|
1800
|
+
'new.firebase.q.paywall.hint': 'Layout de la pantalla de suscripciones — puedes cambiarlo despues en RevenueCat',
|
|
1801
|
+
'new.firebase.q.revenuecat.web': '¿Habilitar suscripciones en web (RevenueCat Web Billing)?',
|
|
1802
|
+
'new.firebase.q.revenuecat.web.hint': 'Requiere Web Billing en dashboard RevenueCat + Stripe. Deja desmarcado si no necesitas.',
|
|
1803
|
+
'new.firebase.q.revenuecat.webKey': 'Clave API RevenueCat Web Billing (rcb_xxx o rcb_sb_xxx, opcional — configurar después)',
|
|
1804
|
+
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: agrega RC_WEB_API_KEY (launch.json) para suscripciones en web',
|
|
1805
|
+
'new.firebase.q.sentry.dsn': 'DSN de Sentry (deja en blanco para configurar después)',
|
|
1806
|
+
'new.firebase.q.sentry.dsn.invalid': 'DSN inválido. Formato esperado: https://clave@host/project-id',
|
|
1807
|
+
'new.firebase.q.mixpanel.token': 'Token de Mixpanel (deja en blanco para configurar después)',
|
|
1808
|
+
'new.firebase.q.facebook.appId': 'App ID de Facebook',
|
|
1809
|
+
'new.firebase.q.facebook.appId.required': 'App ID de Facebook es obligatorio.',
|
|
1810
|
+
'new.firebase.q.facebook.appId.invalid': 'App ID de Facebook debe ser numérico (ej: 1234567890).',
|
|
1811
|
+
'new.firebase.q.facebook.token': 'Token de App Facebook',
|
|
1812
|
+
'new.firebase.q.facebook.token.required': 'Token de App Facebook es obligatorio.',
|
|
1813
|
+
'new.firebase.q.revenuecat.android.required': 'Clave Android de RevenueCat es obligatoria.',
|
|
1814
|
+
'new.firebase.q.revenuecat.ios.required': 'Clave iOS de RevenueCat es obligatoria.',
|
|
1815
|
+
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID debe ser numérico (ej: 1234567890).',
|
|
1816
|
+
'new.firebase.q.revenuecat.webKey.invalid': 'La clave Web Billing debe empezar con rcb_ (ej: rcb_sb_xxx o rcb_xxx).',
|
|
1817
|
+
|
|
1818
|
+
'new.firebase.confirm.title': 'Resumen de configuración:',
|
|
1819
|
+
'new.firebase.confirm.app': 'App',
|
|
1820
|
+
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
1821
|
+
'new.firebase.confirm.project': 'Firebase',
|
|
1822
|
+
'new.firebase.confirm.modules': 'Features',
|
|
1823
|
+
'new.firebase.confirm.none': 'ninguno',
|
|
1824
|
+
'new.firebase.confirm.proceed': '¿Crear el proyecto ahora?',
|
|
1825
|
+
|
|
1826
|
+
'new.firebase.step.copying': 'Copiando plantilla del proyecto...',
|
|
1827
|
+
'new.firebase.step.pubGet': 'Instalando paquetes Flutter...',
|
|
1828
|
+
'new.firebase.step.buildRunner': 'Generando código (Riverpod/Freezed)...',
|
|
1829
|
+
'new.firebase.step.flutterfire': 'Configurando Firebase (flutterfire)...',
|
|
1830
|
+
'new.firebase.step.deploy': 'Desplegando Cloud Functions + reglas de Firestore...',
|
|
1831
|
+
'new.firebase.step.done': '¡Listo!',
|
|
1832
|
+
|
|
1833
|
+
'new.firebase.success.title': '🎉 ¡Tu app está lista!',
|
|
1834
|
+
'new.firebase.success.open': 'Abre el proyecto:',
|
|
1835
|
+
'new.firebase.success.run': 'Ejecuta el app:',
|
|
1836
|
+
'new.firebase.success.runMake': 'O usa make: make run | make run-ios | make run-android',
|
|
1837
|
+
'new.firebase.success.deviceSetup': 'Antes de ejecutar en dispositivo:',
|
|
1838
|
+
'new.firebase.success.deviceSetup.ios': 'iOS: conecta iPhone por cable → confiar en este ordenador → Xcode → Window → Devices → emparejar',
|
|
1839
|
+
'new.firebase.success.deviceSetup.android': 'Android: Ajustes → Opciones de desarrollador → activar depuración USB',
|
|
1840
|
+
'new.firebase.success.hotReload': "Hot reload: pulsa 'r' en la terminal mientras el app corre. Los cambios aparecen al instante.",
|
|
1841
|
+
'new.firebase.success.oneLiner': 'O copia y pega para entrar y ejecutar:',
|
|
1842
|
+
'new.firebase.success.configure': 'Configura cuando quieras:',
|
|
1843
|
+
'new.firebase.success.alreadyDone': 'Ya configurado por la CLI:',
|
|
1844
|
+
'new.firebase.success.manualNeeded': 'Configura manualmente (si hace falta):',
|
|
1845
|
+
'new.firebase.success.apn': '• Clave APN (push iOS): Firebase Console → Config. del Proyecto → Cloud Messaging',
|
|
1846
|
+
'new.firebase.success.social': '• Activa login social en Firebase Console → Authentication (Google y Apple ya están en el código; solo actívalos allí)',
|
|
1847
|
+
'new.firebase.success.googleSignIn': '• Login con Gmail: 1) Activa en Firebase Console → Auth → Sign-in method → Google. 2) El CLI rellena kGoogleWebClientId (google_auth_options.dart) desde google-services.json para Android/iOS. Web usa signInWithPopup.',
|
|
1848
|
+
'new.firebase.success.sentry': '• Sentry: Para reportes de error en produccion. Obtén DSN en sentry.io. Ya en launch.json para dev. Para release: --dart-define=SENTRY_DSN=xxx',
|
|
1849
|
+
'new.firebase.success.mixpanel': '• Mixpanel: Para analytics en produccion. Ya en launch.json para dev. Para release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
1850
|
+
'new.firebase.success.web': '• Web (adicional): Android e iOS funcionan con normalidad. Para probar en browser: "flutter run -d chrome" o "flutter run -d web-server --web-port=5000". Para publicar: "flutter build web". Las notificaciones push son exclusivas de mobile y se desactivan automaticamente en web.',
|
|
1851
|
+
|
|
1852
|
+
'new.firebase.q.deploy': '¿Hacer deploy de Cloud Functions + reglas de Firestore ahora?',
|
|
1853
|
+
'new.firebase.q.deploy.hint': 'Requiere plan Blaze y firebase-tools instalado globalmente',
|
|
1854
|
+
'new.firebase.deployFailed.hint': 'Si el deploy falló: crea Firestore y Storage en la Consola primero:',
|
|
1855
|
+
'new.firebase.deployFailed.firestore': '• Firestore: crea la base (Crear base → Modo Nativo)',
|
|
1856
|
+
'new.firebase.deployFailed.storage': '• Storage: clic en Comenzar',
|
|
1857
|
+
'new.firebase.deployFailed.orGcloud': 'O crea Firestore por CLI:',
|
|
1858
|
+
'new.firebase.success.deployLater': '• Deploy del backend cuando estés listo (desde dentro de la carpeta del proyecto):',
|
|
1859
|
+
'new.firebase.success.beforeDeploy': 'Antes del firebase deploy, activa (clic para abrir):',
|
|
1860
|
+
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
1861
|
+
'new.firebase.success.firestore': '• Firestore (crea la base si no existe)',
|
|
1862
|
+
'new.firebase.success.storage': '• Firebase Storage (Comenzar)',
|
|
1863
|
+
'new.firebase.success.auth': '• Firebase Authentication (Email/Contraseña)',
|
|
1864
|
+
'new.firebase.success.security': '🔒 .gitignore excluye .env y otros secretos. Cloud Functions usan secrets en el servidor.',
|
|
1865
|
+
|
|
1866
|
+
'new.firebase.interactive.title': '⚠️ Configuración de la Nube Requerida',
|
|
1867
|
+
'new.firebase.interactive.desc': 'Por medidas de seguridad de Google, necesitas hacer estos pasos:',
|
|
1868
|
+
'new.firebase.interactive.step1': '1. Crea la base de datos (Firestore): ',
|
|
1869
|
+
'new.firebase.interactive.step2': '2. Sube al plan Blaze (Pay-as-you-go): ',
|
|
1870
|
+
'new.firebase.interactive.step3': '3. Habilita Auth (Email y Contraseña): ',
|
|
1871
|
+
|
|
1872
|
+
'new.firebase.interactive.prompt1': '¿Ya creaste Firestore y habilitaste Autenticacion en el enlace arriba?',
|
|
1873
|
+
'new.firebase.interactive.prompt2': '¿Hiciste el upgrade al Plan Blaze? (Requerido para Cloud Functions)',
|
|
1874
|
+
'new.firebase.interactive.googleAuthNote': '* Activa Google Sign-In manualmente (Email/Contraseña y Anonimo ya fueron activados): ',
|
|
1875
|
+
'new.firebase.interactive.billingNeeded': 'Plan Blaze aun no activo. Actívalo en el enlace de arriba y espera la detección automática.',
|
|
1876
|
+
'new.firebase.interactive.billingWaiting': 'Verificando estado del Blaze...',
|
|
1877
|
+
'new.firebase.interactive.billingTimeout': 'Plan Blaze no confirmado tras el tiempo límite. Despliegue omitido — ejecuta manualmente cuando estés listo.',
|
|
1878
|
+
'new.firebase.interactive.authWarn': 'No se pudo activar Email/Contraseña y Anónimo automáticamente. Actívalos manualmente:',
|
|
1879
|
+
|
|
1880
|
+
'new.firebase.interactive.ready': '¿Listo para publicar Push Notifications + Reglas ahora?',
|
|
1881
|
+
'new.firebase.interactive.deploying': 'Desplegando Cloud Functions + Reglas (Storage y Firestore)...',
|
|
1882
|
+
'new.firebase.interactive.errorTitle': 'Ocurrio un error en el despliegue.',
|
|
1883
|
+
'new.firebase.interactive.errorHint': 'Revisa haber creado Firestore y activado el plan Blaze con tarjeta.',
|
|
1884
|
+
'new.firebase.interactive.laterHint': 'Puedes publicar luego desde la carpeta de tu proyecto corriendo: ',
|
|
1885
|
+
'new.firebase.interactive.skipped': 'Despliegue omitido. Puedes publicar mas tarde.',
|
|
1886
|
+
|
|
1887
|
+
'new.firebase.warn.flutterfire': '⚠️ FlutterFire no pudo generar firebase_options_dev.dart automáticamente.',
|
|
1888
|
+
'new.firebase.warn.flutterfire.manual': 'Ejecuta manualmente en la carpeta del proyecto:',
|
|
1889
|
+
|
|
1890
|
+
'new.firebase.error.templateMissing': 'Plantilla Firebase no encontrada en: {path}. Asegurate de que la carpeta Firebase/ existe.',
|
|
1891
|
+
'new.firebase.error.dirNotEmpty': 'El directorio "{path}" ya existe y no está vacío.',
|
|
1892
|
+
'new.firebase.error.aborted': 'Setup cancelado.',
|
|
1893
|
+
|
|
1894
|
+
'new.supabase.prereq.1': '1. Cuenta Supabase en supabase.com',
|
|
1895
|
+
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI instalados (ambos obligatorios)',
|
|
1896
|
+
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase necesario para push)',
|
|
1897
|
+
'new.supabase.prereq.login': ' Si creas manualmente: ten URL y anon key del proyecto listos',
|
|
1898
|
+
'new.supabase.loginRequired': '⚠️ Debes estar conectado para crear proyecto. Ejecuta supabase login primero.',
|
|
1899
|
+
'new.supabase.loginCommand': ' supabase login',
|
|
1900
|
+
'new.supabase.success.done.db': '• Base de datos: tablas, politicas RLS',
|
|
1901
|
+
'new.supabase.success.done.storage': '• Storage: bucket kasy con politicas',
|
|
1902
|
+
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
1903
|
+
'new.supabase.success.done.secrets': '• Secrets de Edge Function (si se informaron)',
|
|
1904
|
+
'new.supabase.success.done.launch': '• launch.json con Sentry, Mixpanel, RevenueCat',
|
|
1905
|
+
'new.supabase.success.auth': '• Auth: Email ya activado. Activa Google, Apple y Facebook en: {authUrl}',
|
|
1906
|
+
'new.supabase.success.storage': '• Storage: Bucket kasy creado con politicas (listo)',
|
|
1907
|
+
'new.supabase.success.fcm': '• Push (FCM): Configura en Firebase Console (plan Blaze). App lista para Supabase + FCM. URL: {fcmUrl}',
|
|
1908
|
+
'new.supabase.success.deployLater': '• Deploy del backend cuando estes listo (desde dentro de la carpeta del proyecto):',
|
|
1909
|
+
|
|
1910
|
+
'new.api.prereq.1': '1. Tu API REST corriendo y accesible',
|
|
1911
|
+
'new.api.prereq.2': '2. URL base de la API (ej: https://api.yourapp.com)',
|
|
1912
|
+
'new.api.prereq.3': '3. Firebase CLI obligatorio para notificaciones push (FCM)',
|
|
1913
|
+
'new.api.success.backendUrl': '• Apunta BACKEND_URL a tu API en ejecución (launch.json)',
|
|
1914
|
+
'new.api.success.fcm': '• Firebase es necesario para notificaciones push (FCM) — configura la clave APNs en la consola de Firebase',
|
|
1915
|
+
'new.api.success.auth': '• Implementa los endpoints de auth social (Google, Apple) en tu backend',
|
|
1916
|
+
|
|
1917
|
+
'new.success.title': '¡Proyecto creado con exito!',
|
|
1918
|
+
'new.success.nextSteps': 'Proximos pasos:',
|
|
1919
|
+
'new.success.step.cd': 'Ve a la carpeta del proyecto:',
|
|
1920
|
+
'new.success.step.run': 'Ejecuta el app (con tus claves configuradas):',
|
|
1921
|
+
'new.success.step.console': 'Abre la consola del backend:',
|
|
1922
|
+
'new.firebase.create.estimatedTime': '(generalmente 3-5 min — no cierres la terminal)',
|
|
1923
|
+
'new.internet.warning': '📶 Asegurate de tener una conexion a internet estable — este paso requiere red.',
|
|
1924
|
+
|
|
1925
|
+
// run command
|
|
1926
|
+
'cli.command.run.description': '▶ Ejecuta el app Flutter usando .env (fallback a dart-defines del launch.json)',
|
|
1927
|
+
'run.launching': 'Iniciando app Flutter...',
|
|
1928
|
+
'run.error.notFlutterProject': 'No se encontro pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter.',
|
|
1929
|
+
'run.error.flutterNotFound': 'Flutter no encontrado. Verifica que Flutter este instalado y en el PATH.',
|
|
1930
|
+
|
|
1931
|
+
// doctor project checks
|
|
1932
|
+
'doctor.project.title': 'Proyecto',
|
|
1933
|
+
'doctor.project.appName': 'Nombre del app',
|
|
1934
|
+
'doctor.project.backend': 'Backend',
|
|
1935
|
+
'doctor.project.bundleId': 'Bundle ID',
|
|
1936
|
+
'doctor.project.pubGet': 'Dependencias instaladas (pubspec.lock presente)',
|
|
1937
|
+
'doctor.project.pubGetMissing': 'Ejecuta flutter pub get — pubspec.lock no encontrado',
|
|
1938
|
+
'doctor.project.modules': 'Features activos',
|
|
1939
|
+
'doctor.project.noModules': 'Ninguna feature opcional activa',
|
|
1940
|
+
|
|
1941
|
+
// add command
|
|
1942
|
+
'cli.command.add.description': '➕ Agrega una feature a un proyecto existente',
|
|
1943
|
+
|
|
1944
|
+
// docs command
|
|
1945
|
+
'cli.command.docs.description': '📖 Muestra la documentacion y comandos disponibles',
|
|
1946
|
+
|
|
1947
|
+
// notifications command
|
|
1948
|
+
'cli.command.notifications.description': '🔔 Textos de notificacion local (recordatorios + demo en Home)',
|
|
1949
|
+
'cli.command.notifications.text.description': 'Define titulos y mensajes de notificaciones locales',
|
|
1950
|
+
'notifications.error.notKasyProject': 'No se encontro kit_setup.json. Ejecuta dentro de un proyecto Kasy.',
|
|
1951
|
+
'notifications.error.noI18n': 'lib/i18n/*.i18n.json no encontrado en este proyecto.',
|
|
1952
|
+
'notifications.error.noFeatures': 'lib/core/config/features.dart no encontrado.',
|
|
1953
|
+
'notifications.error.notEnabled': 'Notificaciones locales desactivadas. Ejecuta: kasy add local_notifications',
|
|
1954
|
+
'notifications.error.cancelled': 'Cancelado.',
|
|
1955
|
+
'notifications.prompt.intro': 'Textos de notificacion local',
|
|
1956
|
+
'notifications.prompt.hint': 'Demo Home = prueba instantanea en Features. Recordatorio = alerta programada en Ajustes.',
|
|
1957
|
+
'notifications.prompt.demoTitle': 'Demo Home — titulo de la notificacion',
|
|
1958
|
+
'notifications.prompt.demoBody': 'Demo Home — descripcion / cuerpo',
|
|
1959
|
+
'notifications.prompt.reminderTitle': 'Recordatorio programado — titulo',
|
|
1960
|
+
'notifications.prompt.reminderBody': 'Recordatorio programado — cuerpo',
|
|
1961
|
+
'notifications.prompt.required': 'Obligatorio.',
|
|
1962
|
+
'notifications.writing': 'Actualizando lib/i18n/*.i18n.json...',
|
|
1963
|
+
'notifications.written': 'Actualizado: {langs}',
|
|
1964
|
+
'notifications.slang': 'Ejecutando dart run slang...',
|
|
1965
|
+
'notifications.slangDone': 'Traducciones regeneradas',
|
|
1966
|
+
'notifications.slangFailed': 'dart run slang fallo — ejecuta manualmente en el proyecto',
|
|
1967
|
+
'notifications.done': 'Textos de notificacion local actualizados.',
|
|
1968
|
+
'notifications.summary.demo': 'Home → Features (demo):',
|
|
1969
|
+
'notifications.summary.reminder': 'Ajustes → Recordatorios (programado):',
|
|
1970
|
+
|
|
1971
|
+
'add.list.title': 'Features disponibles (✓ = ya activa)',
|
|
1972
|
+
'add.error.noModule': 'Indica el nombre de la feature o usa --list para ver las disponibles.',
|
|
1973
|
+
'add.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
|
|
1974
|
+
'add.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
|
|
1975
|
+
'add.alreadyActive': 'La feature "{module}" ya está activa en este proyecto.',
|
|
1976
|
+
'add.applying': 'Agregando feature: {module}',
|
|
1977
|
+
'add.applyingPatch': 'Aplicando archivos de patch...',
|
|
1978
|
+
'add.patchApplied': 'Patch aplicado',
|
|
1979
|
+
'add.patchFailed': 'Patch fallo — revisa la salida anterior',
|
|
1980
|
+
'add.pubGet': 'Ejecutando flutter pub get...',
|
|
1981
|
+
'add.pubGetDone': 'Dependencias actualizadas',
|
|
1982
|
+
'add.pubGetFailed': 'flutter pub get fallo — ejecutalo manualmente',
|
|
1983
|
+
'add.buildRunner': 'Ejecutando build_runner...',
|
|
1984
|
+
'add.buildRunnerDone': 'Generacion de codigo completada',
|
|
1985
|
+
'add.buildRunnerFailed': 'build_runner fallo — ejecutalo manualmente',
|
|
1986
|
+
'add.success': 'Feature "{module}" agregada exitosamente.',
|
|
1987
|
+
'add.cancelled': 'Cancelado.',
|
|
1988
|
+
'add.prompt.sentryDsn': 'Sentry DSN (deja en blanco para configurar despues):',
|
|
1989
|
+
'add.prompt.mixpanelToken': 'Mixpanel Token (deja en blanco para configurar despues):',
|
|
1990
|
+
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (deja en blanco para configurar despues):',
|
|
1991
|
+
'add.prompt.rcIosKey': 'RevenueCat iOS API key (deja en blanco para configurar despues):',
|
|
1992
|
+
'add.note.facebook': 'Agrega tu Facebook App ID y token en .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
1993
|
+
'new.q.llm_chat.configureNow': 'Configurar el agente de Chat LLM ahora?',
|
|
1994
|
+
'new.q.llm_chat.configureNow.hint': 'Puedes omitir y ejecutar "kasy add llm_chat" despues',
|
|
1995
|
+
'add.llm_chat.reconfigure': 'Feature ya activa — reconfigurando solo las credenciales.',
|
|
1996
|
+
'add.prompt.llmProvider': 'Proveedor de LLM:',
|
|
1997
|
+
'add.prompt.llmSystemPrompt': 'Instruccion del agente — system prompt (deja en blanco para ninguna):\n Ejemplo: "Eres un asistente de soporte del app Fitsync. Solo responde sobre entrenamientos."\n >',
|
|
1998
|
+
'add.prompt.llmApiKey': 'Clave de API (OpenAI o Gemini) — se guarda en el servidor, nunca en el app (deja en blanco para configurar despues):',
|
|
1999
|
+
'add.prompt.llmEndpoint': 'URL de tu endpoint LLM (deja en blanco para configurar despues):',
|
|
2000
|
+
'add.llm_chat.settingSecret': 'Guardando clave de API como secret en el servidor...',
|
|
2001
|
+
'add.llm_chat.secretSet': 'Clave de API guardada como secret',
|
|
2002
|
+
'add.llm_chat.secretFailed': 'No se pudo guardar el secret automaticamente — configuralo manualmente (ver instrucciones abajo)',
|
|
2003
|
+
'add.llm_chat.skipSecret': 'Clave de API omitida — configura antes del deploy via CLI del servidor',
|
|
2004
|
+
'add.llm_chat.deploying': 'Desplegando funcion LLM en el servidor...',
|
|
2005
|
+
'add.llm_chat.deployed': 'Funcion LLM desplegada con exito',
|
|
2006
|
+
'add.llm_chat.deployFailed': 'Deploy automatico fallo — despliega manualmente (ver instrucciones abajo)',
|
|
2007
|
+
'add.llm_chat.nextSteps.firebase': '\n Proximos pasos:\n 1. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n 2. Corre el app: kasy run\n',
|
|
2008
|
+
'add.llm_chat.nextSteps.firebase.deployFailed': '\n Proximos pasos:\n 1. Deploy manual: firebase deploy --only functions:llmChat\n 2. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n 3. Corre el app: kasy run\n',
|
|
2009
|
+
'add.llm_chat.nextSteps.supabase': '\n Proximos pasos:\n 1. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n 2. Corre el app: kasy run\n',
|
|
2010
|
+
'add.llm_chat.nextSteps.supabase.deployFailed': '\n Proximos pasos:\n 1. Deploy manual: supabase functions deploy llm-chat --no-verify-jwt\n 2. El LLM_CHAT_ENDPOINT en .vscode/launch.json ya fue pre-llenado.\n 3. Corre el app: kasy run\n',
|
|
2011
|
+
'add.llm_chat.nextSteps.api': '\n Proximos pasos:\n 1. Crea un endpoint en tu servidor que acepte {message, history} y llame tu LLM.\n 2. Actualiza LLM_CHAT_ENDPOINT en .vscode/launch.json con la URL de tu endpoint.\n 3. Corre el app: kasy run\n',
|
|
2012
|
+
'cli.command.remove.description': '🗑️ Elimina una feature de un proyecto existente',
|
|
2013
|
+
'remove.error.noModule': 'Ingresa el nombre de la feature. Uso: kasy remove <feature>',
|
|
2014
|
+
'remove.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
|
|
2015
|
+
'remove.error.unknownModule': 'Modulo desconocido: {module}\nDisponibles: {list}',
|
|
2016
|
+
'remove.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
|
|
2017
|
+
'remove.confirm': 'Eliminar la feature "{module}"? Esto borrara archivos y dependencias.',
|
|
2018
|
+
'remove.cancelled': 'Cancelado.',
|
|
2019
|
+
'remove.removing': 'Eliminando feature: {module}',
|
|
2020
|
+
'remove.pubGet': 'Ejecutando flutter pub get...',
|
|
2021
|
+
'remove.pubGetDone': 'Dependencias actualizadas',
|
|
2022
|
+
'remove.pubGetFailed': 'flutter pub get fallo — ejecutalo manualmente',
|
|
2023
|
+
'remove.buildRunner': 'Ejecutando build_runner...',
|
|
2024
|
+
'remove.buildRunnerDone': 'Generacion de codigo completada',
|
|
2025
|
+
'remove.buildRunnerFailed': 'build_runner fallo — ejecutalo manualmente',
|
|
2026
|
+
'remove.success': 'Feature "{module}" eliminada exitosamente.',
|
|
2027
|
+
'remove.warn.ci': 'Archivos de CI eliminados. Si tenias workflows personalizados, restauralos desde git.',
|
|
2028
|
+
'remove.warn.sentry.shared': 'sentry_flutter conservado — todavia requerido por features activas (revenuecat/facebook).',
|
|
2029
|
+
'cli.command.update.description': '⬆️ Actualiza features/componentes en un proyecto existente',
|
|
2030
|
+
'cli.command.update.targetArg': 'Objetivo a actualizar (ej.: camera, revenuecat, sentry, components)',
|
|
2031
|
+
'update.error.noProject': 'kit_setup.json no encontrado. Ejecuta dentro de un proyecto Kasy.',
|
|
2032
|
+
'update.error.unknownModule': 'Modulo desconocido: {module}\nDisponibles: {list}',
|
|
2033
|
+
'update.error.unknownTarget': 'Objetivo de actualizacion desconocido: {module}\nDisponibles: {list}',
|
|
2034
|
+
'update.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
|
|
2035
|
+
'update.alreadyUpToDate': 'El proyecto ya esta actualizado (v{version}).',
|
|
2036
|
+
'update.status': 'Proyecto: v{from} → CLI: v{to}',
|
|
2037
|
+
'update.noVersion': 'El proyecto fue generado sin seguimiento de version. Todas las features pueden actualizarse.',
|
|
2038
|
+
'update.changesTitle': 'Cambios disponibles para tus features:',
|
|
2039
|
+
'update.howToUpdate': 'Para actualizar una feature:',
|
|
2040
|
+
'update.howToUpdateComponents': 'Para actualizar componentes base:',
|
|
2041
|
+
'update.warn.commit': 'Esto sobreescribira los archivos de la feature "{module}". Asegurate de haber hecho commit antes.',
|
|
2042
|
+
'update.warn.commitComponents': 'Esto sobreescribira archivos de los componentes base. Asegurate de haber hecho commit antes.',
|
|
2043
|
+
'update.confirm': 'Sobreescribir archivos de la feature "{module}" con la version mas reciente?',
|
|
2044
|
+
'update.confirmComponents': 'Sobreescribir archivos de los componentes base con la version mas reciente?',
|
|
2045
|
+
'update.cancelled': 'Cancelado.',
|
|
2046
|
+
'update.applying': 'Aplicando actualizacion de la feature: {module}',
|
|
2047
|
+
'update.applyingComponents': 'Aplicando actualizacion de componentes base...',
|
|
2048
|
+
'update.applied': 'Feature {module} actualizada',
|
|
2049
|
+
'update.appliedComponents': '{count} archivos de componentes base actualizados',
|
|
2050
|
+
'update.applyFailed': 'Error al aplicar actualizacion de la feature {module}',
|
|
2051
|
+
'update.applyComponentsFailed': 'Error al aplicar actualizacion de componentes base',
|
|
2052
|
+
'update.noPatch': 'La feature "{module}" no tiene archivos para actualizar (feature solo de configuracion).',
|
|
2053
|
+
'update.noComponentFiles': 'No se encontraron archivos de componentes base para actualizar.',
|
|
2054
|
+
'update.pubGet': 'Ejecutando flutter pub get...',
|
|
2055
|
+
'update.pubGetDone': 'Dependencias actualizadas',
|
|
2056
|
+
'update.pubGetFailed': 'flutter pub get fallo — ejecutalo manualmente',
|
|
2057
|
+
'update.buildRunner': 'Ejecutando build_runner...',
|
|
2058
|
+
'update.buildRunnerDone': 'Generacion de codigo completada',
|
|
2059
|
+
'update.buildRunnerFailed': 'build_runner fallo — ejecutalo manualmente',
|
|
2060
|
+
'update.success': 'Feature "{module}" actualizada exitosamente.',
|
|
2061
|
+
'update.componentsSuccess': 'Componentes base actualizados exitosamente.',
|
|
2062
|
+
}
|
|
2063
|
+
};
|
|
2064
|
+
|
|
2065
|
+
function normalizeLanguage(value) {
|
|
2066
|
+
if (!value) {
|
|
2067
|
+
return null;
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
const normalized = String(value).trim().toLowerCase().replace('_', '-');
|
|
2071
|
+
if (!normalized) {
|
|
2072
|
+
return null;
|
|
2073
|
+
}
|
|
2074
|
+
|
|
2075
|
+
if (normalized.startsWith('pt') || normalized === 'portugues' || normalized === 'portuguese') {
|
|
2076
|
+
return 'pt';
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2079
|
+
if (normalized.startsWith('es') || normalized === 'espanol' || normalized === 'spanish') {
|
|
2080
|
+
return 'es';
|
|
2081
|
+
}
|
|
2082
|
+
|
|
2083
|
+
if (normalized.startsWith('en') || normalized === 'english') {
|
|
2084
|
+
return 'en';
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
return null;
|
|
2088
|
+
}
|
|
2089
|
+
|
|
2090
|
+
function detectDefaultLanguage() {
|
|
2091
|
+
return (
|
|
2092
|
+
normalizeLanguage(process.env.KASY_CLI_LANG) ||
|
|
2093
|
+
normalizeLanguage(process.env.LC_ALL) ||
|
|
2094
|
+
normalizeLanguage(process.env.LANG) ||
|
|
2095
|
+
'en'
|
|
2096
|
+
);
|
|
2097
|
+
}
|
|
2098
|
+
|
|
2099
|
+
function interpolate(template, params) {
|
|
2100
|
+
return template.replace(/\{(\w+)\}/g, (_, key) => {
|
|
2101
|
+
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
|
2102
|
+
return String(params[key]);
|
|
2103
|
+
}
|
|
2104
|
+
return `{${key}}`;
|
|
2105
|
+
});
|
|
2106
|
+
}
|
|
2107
|
+
|
|
2108
|
+
function createTranslator(language) {
|
|
2109
|
+
const activeLanguage = normalizeLanguage(language) || 'en';
|
|
2110
|
+
const activeMessages = MESSAGES[activeLanguage] || MESSAGES.en;
|
|
2111
|
+
|
|
2112
|
+
return (key, params = {}) => {
|
|
2113
|
+
const message = activeMessages[key] || MESSAGES.en[key] || key;
|
|
2114
|
+
return interpolate(message, params);
|
|
2115
|
+
};
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
module.exports = {
|
|
2119
|
+
LANGUAGE_CHOICES,
|
|
2120
|
+
createTranslator,
|
|
2121
|
+
detectDefaultLanguage,
|
|
2122
|
+
normalizeLanguage
|
|
2123
|
+
};
|