kasy-cli 1.14.0 → 1.16.0
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/bin/kasy.js +18 -5
- package/lib/commands/icon.js +29 -1
- package/lib/commands/ios.js +8 -2
- package/lib/commands/reset.js +100 -2
- package/lib/commands/run.js +61 -2
- package/lib/commands/splash.js +11 -0
- package/lib/scaffold/backends/api/pubspec.yaml.tpl +4 -2
- package/lib/scaffold/backends/supabase/pubspec.yaml.tpl +4 -2
- package/lib/utils/apple-release.js +30 -0
- package/lib/utils/checks.js +41 -2
- package/lib/utils/debug.js +75 -0
- package/lib/utils/friendly-error.js +91 -0
- package/lib/utils/i18n/messages-en.js +977 -0
- package/lib/utils/i18n/messages-es.js +975 -0
- package/lib/utils/i18n/messages-pt.js +975 -0
- package/lib/utils/i18n.js +21 -2818
- package/lib/utils/png-padding.js +252 -0
- package/package.json +8 -3
- package/templates/firebase/android/app/src/main/kotlin/com/aicrus/firebase/kit/MyWidget.kt +12 -11
- package/templates/firebase/android/app/src/main/res/drawable-hdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-hdpi/ic_launcher_background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-mdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-mdpi/ic_launcher_background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-night-hdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-night-mdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-night-xhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xhdpi/ic_launcher_background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxhdpi/ic_launcher_background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxxhdpi/android12splash.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_background.png +0 -0
- package/templates/firebase/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/templates/firebase/android/app/src/main/res/layout/widget_preview.xml +18 -11
- package/templates/firebase/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +9 -0
- package/templates/firebase/assets/images/icon_android.png +0 -0
- package/templates/firebase/assets/images/icon_foreground_empty.png +0 -0
- package/templates/firebase/assets/images/splash_logo_dark_android12.png +0 -0
- package/templates/firebase/assets/images/splash_logo_light_android12.png +0 -0
- package/templates/firebase/lib/components/components.dart +1 -0
- package/templates/firebase/lib/components/kasy_avatar.dart +88 -57
- package/templates/firebase/lib/components/kasy_avatar_presets.dart +116 -74
- package/templates/firebase/lib/components/kasy_tabs.dart +431 -0
- package/templates/firebase/lib/core/home_widgets/home_widget_mywidget_service.dart +12 -6
- package/templates/firebase/lib/features/home/home_components_page.dart +1 -1
- package/templates/firebase/lib/features/home/home_components_preview_registry.dart +316 -93
- package/templates/firebase/pubspec.yaml +4 -2
- package/templates/firebase/web/index.html +9 -0
package/lib/utils/i18n.js
CHANGED
|
@@ -1,2838 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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.help.group.start': 'Get started',
|
|
26
|
-
'cli.help.group.work': 'Work on your app',
|
|
27
|
-
'cli.help.group.publish': 'Publish & test',
|
|
28
|
-
'cli.help.group.maintenance': 'Kasy CLI maintenance',
|
|
29
|
-
'cli.help.group.advanced': 'Advanced',
|
|
30
|
-
'cli.help.group.other': 'Other',
|
|
31
|
-
'cli.help.tip': 'Tip: run `kasy <command> --help` for details. Use --lang pt|en|es to switch language.',
|
|
32
|
-
'cli.command.setup.description': '(advanced) Set up an existing Flutter project',
|
|
33
|
-
'cli.command.new.description': 'Create a new app (e.g.: kasy new my-app)',
|
|
34
|
-
'cli.command.new.projectName': 'project name',
|
|
35
|
-
'cli.command.new.projectNameArg': 'Project folder name',
|
|
36
|
-
'prompt.projectName.enter': "What's your project name?",
|
|
37
|
-
'prompt.projectName.required': 'Project name is required.',
|
|
38
|
-
'prompt.projectName.default': 'my_app',
|
|
39
|
-
'cli.command.setup.directoryName': 'directory',
|
|
40
|
-
'cli.command.setup.directoryArg': 'Target directory (default: current folder .)',
|
|
41
|
-
'cli.command.setup.langName': 'lang',
|
|
42
|
-
'cli.command.setup.langOption': 'Prompt language (en, pt, es)',
|
|
43
|
-
'cli.command.setup.backendOption': 'Backend adapter (firebase, supabase, api)',
|
|
44
|
-
'cli.command.setup.featuresOption': 'Comma separated optional features (web,widget,llm_chat,revenuecat,ci)',
|
|
45
|
-
'cli.command.help.paramName': 'command',
|
|
46
|
-
'cli.command.doctor.description': 'Check if your computer is ready to run Kasy',
|
|
47
|
-
'cli.command.modules.description': 'Show what comes included and what you can add',
|
|
48
|
-
'cli.command.validate.description': '(advanced) Validate backend + feature combinations',
|
|
49
|
-
'cli.command.validate.analyzeOnlyOption': 'Run flutter analyze only (skip builds)',
|
|
50
|
-
'cli.command.version.description': 'Show the installed Kasy version',
|
|
51
|
-
'cli.command.upgrade.description': 'Update the Kasy CLI to the latest version',
|
|
52
|
-
'cli.command.uninstall.description': 'Uninstall Kasy from this computer',
|
|
53
|
-
'cli.command.upgrade.running': 'Updating kasy CLI...',
|
|
54
|
-
'cli.command.upgrade.done': 'kasy updated successfully!',
|
|
55
|
-
'cli.command.uninstall.running': 'Uninstalling kasy CLI...',
|
|
56
|
-
'cli.command.uninstall.done': 'kasy uninstalled. Goodbye!',
|
|
57
|
-
'new.checks.environment': 'Environment checks',
|
|
58
|
-
'new.checks.environment.checking': 'Checking environment',
|
|
59
|
-
'new.checks.environment.done': 'Environment ready',
|
|
60
|
-
'setup.checks.backend.checking': 'Checking {backend} tools',
|
|
61
|
-
'setup.checks.backend.done': '{backend} tools ready',
|
|
62
|
-
'new.checks.firebaseForPush': 'Note: Firebase CLI is required for push notifications (Firebase Cloud Messaging / FCM) on all backends.',
|
|
63
|
-
'new.checks.requiredBlock': 'Required tools are missing. Install them to continue.',
|
|
64
|
-
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
65
|
-
'new.checks.installSupabase': 'Supabase: npm i -g supabase (or brew install supabase/tap/supabase) && supabase login',
|
|
66
|
-
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (or npm i -g supabase)',
|
|
67
|
-
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
68
|
-
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
69
|
-
'setup.checks.environment': 'Environment checks',
|
|
70
|
-
'setup.checks.prepareFirebase': 'Firebase tooling (push, remote config)',
|
|
71
|
-
'setup.checks.backend': 'Backend checks ({backend})',
|
|
72
|
-
'setup.firebase.installing': 'Installing Firebase CLI...',
|
|
73
|
-
'setup.supabase.installing': 'Installing Supabase CLI...',
|
|
74
|
-
'setup.flutterfire.installing': 'Installing FlutterFire CLI...',
|
|
75
|
-
'setup.warn.hang': 'If setup stalls, run manually: flutterfire --version',
|
|
76
|
-
'setup.warn.supabase': 'Using Supabase or custom API? Firebase still helps with push notifications and remote config.',
|
|
77
|
-
'doctor.title': 'Kasy Doctor',
|
|
78
|
-
'doctor.baseEnvironment': 'Base environment',
|
|
79
|
-
'doctor.optionalBackend': 'Optional backend tooling',
|
|
80
|
-
'doctor.requiredMissing': 'Missing required dependencies. Fix the errors above and rerun doctor.',
|
|
81
|
-
'doctor.requiredPassed': '✓ Required environment checks passed.',
|
|
82
|
-
'modules.backends': 'Available backends:',
|
|
83
|
-
'modules.featuresBase': 'Always included:',
|
|
84
|
-
'modules.features': 'Optional features:',
|
|
85
|
-
'modules.tag.firebaseOnly': 'Firebase only',
|
|
86
|
-
'modules.tag.requiresDb': 'requires Firebase or Supabase',
|
|
87
|
-
'modules.tag.enhances': 'enables {target}',
|
|
88
|
-
'modules.hint.subscriptionNoRc': 'Tip: Subscriptions screen is included but inactive. Run `kasy add revenuecat` to enable real payments.',
|
|
89
|
-
'modules.feature.base.authentication.description': 'Sign up, login and account management',
|
|
90
|
-
'modules.feature.base.home.description': 'Main app screen after login',
|
|
91
|
-
'modules.feature.base.settings.description': 'Theme, language, account and preferences',
|
|
92
|
-
'modules.feature.base.notifications.description': 'Push notifications via Firebase Cloud Messaging (works with any backend)',
|
|
93
|
-
'modules.feature.base.subscription.description': 'Premium subscription screen and data model (add RevenueCat to enable real payments)',
|
|
94
|
-
'modules.backend.firebase.description': 'Firebase backend adapter',
|
|
95
|
-
'modules.backend.supabase.description': 'Supabase backend adapter',
|
|
96
|
-
'modules.backend.api.description': 'REST/GraphQL API backend adapter',
|
|
97
|
-
'modules.feature.sentry.description': 'Sentry error tracking and crash reporting',
|
|
98
|
-
'modules.feature.analytics.description': 'Analytics event tracking (Firebase Analytics)',
|
|
99
|
-
'modules.feature.facebook.description': 'Facebook Login and Meta Ads event tracking (always bundled together)',
|
|
100
|
-
'modules.feature.revenuecat.description': 'Enables real in-app payments on the Subscriptions screen',
|
|
101
|
-
'modules.feature.onboarding.description': 'Welcome flow shown on first launch',
|
|
102
|
-
'modules.feature.web.description': 'Web/PWA support',
|
|
103
|
-
'modules.feature.widget.description': 'iOS/Android home screen widget integration',
|
|
104
|
-
'modules.feature.llm_chat.description': 'AI chat screen with OpenAI or Gemini',
|
|
105
|
-
'modules.feature.feedback.description': 'In-app feature requests and voting',
|
|
106
|
-
'modules.feature.local_notifications.description': 'Local reminders scheduled by the user (no server required)',
|
|
107
|
-
'modules.feature.ci.description': 'CI/CD: GitHub/GitLab (tests + build) + Codemagic (publish to stores)',
|
|
108
|
-
'checks.checking': 'Checking {name}...',
|
|
109
|
-
'checks.found': '{name} found',
|
|
110
|
-
'checks.foundWithVersion': '{name} ready ({version})',
|
|
111
|
-
'checks.missing': '{name} missing',
|
|
112
|
-
'checks.notFound': '{name} not found',
|
|
113
|
-
'checks.flutter.warn': 'Flutter SDK not found. Install Flutter to build and run apps: https://docs.flutter.dev/get-started/install',
|
|
114
|
-
'checks.install.failed': 'auto-install failed — run the command manually',
|
|
115
|
-
'checks.diagnostic.xcodeLicense': '{name} is installed, but Xcode needs the license accepted. Run: sudo xcodebuild -license',
|
|
116
|
-
'checks.diagnostic.xcodeCli': '{name} is installed, but Xcode Command Line Tools are missing. Run: xcode-select --install',
|
|
117
|
-
'banner.title': 'Kasy CLI · Flutter SaaS Generator',
|
|
118
|
-
'welcome.firstRun': 'Welcome to Kasy CLI!',
|
|
119
|
-
'welcome.chooseLanguage': 'First, choose your language:',
|
|
120
|
-
'prompt.language.select': 'Choose your language',
|
|
121
|
-
'prompt.cancelled': 'Command cancelled by user.',
|
|
122
|
-
'license.required': '🔑 License key required to use Kasy CLI',
|
|
123
|
-
'license.checking': 'Validating license key...',
|
|
124
|
-
'license.saved': '✅ License validated successfully',
|
|
125
|
-
'license.invalid': 'Invalid license key. Check your key or contact support at kasy.dev.',
|
|
126
|
-
'license.expired': '❌ Your license has expired. Renew at kasy.dev.',
|
|
127
|
-
'license.inactive': '❌ Your license has been deactivated. Contact support at kasy.dev.',
|
|
128
|
-
'license.offlineWarning': '⚠️ Could not reach license server — continuing offline.',
|
|
129
|
-
'license.subscriptionExpired': '❌ Your subscription has expired. Updates require an active plan. Renew at kasy.dev.\n Your existing projects still work — only updates are locked.',
|
|
130
|
-
'prompt.license.enter': '👉 Enter your license key (XXXX-XXXX-XXXX-XXXX)',
|
|
131
|
-
'prompt.license.invalid': 'Invalid format. Use XXXX-XXXX-XXXX-XXXX.',
|
|
132
|
-
'prompt.appName.enter': 'Enter the name of your app',
|
|
133
|
-
'prompt.appName.required': 'App name is required.',
|
|
134
|
-
'prompt.bundleId.enter': 'Enter the bundle ID (com.company.app)',
|
|
135
|
-
'prompt.bundleId.required': 'Bundle ID is required.',
|
|
136
|
-
'prompt.bundleId.invalid': 'Bundle ID must look like com.company.app.',
|
|
137
|
-
'prompt.backend.select': 'Select backend provider',
|
|
138
|
-
'prompt.features.select': 'Select optional features to include',
|
|
139
|
-
'prompt.features.instructions': 'Space to toggle, enter to confirm',
|
|
140
|
-
'prompt.multiselect.instructions': '\nInstructions:\n ↑/↓: Highlight option\n ←/→/[space]: Toggle selection\n a: Toggle all\n enter/return: Complete answer',
|
|
141
|
-
'prompt.multiselect.warnDisabled': 'Use ↓ to go to a selectable option, then Space to select, Enter to confirm',
|
|
142
|
-
'prompt.firebase.projectId.enter': 'Enter Firebase Project ID',
|
|
143
|
-
'prompt.firebase.projectId.required': 'Firebase Project ID is required.',
|
|
144
|
-
'prompt.supabase.url.enter': 'Enter Supabase URL',
|
|
145
|
-
'prompt.supabase.url.required': 'Supabase URL is required.',
|
|
146
|
-
'prompt.supabase.anonKey.enter': 'Enter Supabase anon key',
|
|
147
|
-
'prompt.supabase.anonKey.required': 'Supabase anon key is required.',
|
|
148
|
-
'new.supabase.q.create': 'Create new Supabase project or use existing?',
|
|
149
|
-
'new.supabase.q.create.create': '✨ Create new project (recommended for beginners)',
|
|
150
|
-
'new.supabase.q.create.existing': '📂 Use existing project',
|
|
151
|
-
'new.firebase.q.setupMode': 'How do you want to set up Firebase?',
|
|
152
|
-
'new.firebase.q.setupMode.push': 'Firebase project for push notifications (FCM):',
|
|
153
|
-
'new.firebase.q.setupMode.push.explain': 'Push notifications (FCM) require a Firebase project, even when your main backend is Supabase or API REST.',
|
|
154
|
-
'new.firebase.q.setupMode.create': '✨ Create from scratch (recommended for beginners)',
|
|
155
|
-
'new.firebase.q.setupMode.existing': '📂 Use existing project',
|
|
156
|
-
'new.firebase.q.region': 'Where are most of your app users located?',
|
|
157
|
-
'new.firebase.q.region.brazil': '🇧🇷 Brazil (São Paulo) — southamerica-east1',
|
|
158
|
-
'new.firebase.q.region.us': '🇺🇸 United States — us-central1',
|
|
159
|
-
'new.firebase.q.region.europe': '🇪🇺 Europe — europe-west1',
|
|
160
|
-
'new.firebase.q.region.global': '🌍 Global / Not sure — us-central1',
|
|
161
|
-
'new.firebase.create.prereq': 'You need: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Blaze plan required for deploy.',
|
|
162
|
-
'new.firebase.create.creating': 'Creating Firebase project…',
|
|
163
|
-
'new.firebase.create.includeWeb': 'Include Web app in Firebase? (for web platform)',
|
|
164
|
-
'new.firebase.create.nowDo': 'Now activate authentication (before running the app):',
|
|
165
|
-
'new.firebase.create.activateEmail': 'Enable Email/Password: Firebase Console → Authentication → Sign-in method',
|
|
166
|
-
'new.firebase.create.activateGoogle': 'Enable Google: same page, click Google → Enable',
|
|
167
|
-
'new.firebase.create.beforeContinue.title': 'Before continuing, enable in Firebase Console:',
|
|
168
|
-
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Password and Anonymous were enabled automatically)',
|
|
169
|
-
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → enable Email/Password, Anonymous and Google',
|
|
170
|
-
'new.firebase.create.beforeContinue.ready': 'I have enabled Google Sign-In. Continue?',
|
|
171
|
-
'new.firebase.create.beforeContinue.ready.noAuth': 'I have enabled Email/Password, Anonymous and Google Sign-In. Continue?',
|
|
172
|
-
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager and Storage were enabled automatically)',
|
|
173
|
-
'new.firebase.create.sha1Skipped': 'SHA-1 not added',
|
|
174
|
-
'new.firebase.create.sha1ManualInstruction': 'Add SHA-1 manually: Firebase Console → Project settings → Your apps → Android → Add fingerprint',
|
|
175
|
-
'new.firebase.create.sha1ParseError': 'Could not parse SHA1 from keytool output',
|
|
176
|
-
'new.firebase.create.sha1ErrorDetail': 'Reason',
|
|
177
|
-
'new.firebase.create.useExistingHint': 'Project may have been created. Try "Use existing project" with ID: {id}',
|
|
178
|
-
'new.firebase.create.usingProjectId': 'Using project ID: {id} (continuing with existing project)',
|
|
179
|
-
'new.firebase.create.waitPropagate': 'Waiting for project propagation (20s)…',
|
|
180
|
-
'new.firebase.create.success': 'Firebase project created successfully.',
|
|
181
|
-
'new.firebase.create.failed': 'Could not create project',
|
|
182
|
-
'new.firebase.create.gcloudRequired': 'gcloud CLI is required for "create from scratch". Without it, the full Firebase flow cannot run.',
|
|
183
|
-
'new.firebase.create.installTitle': 'To install gcloud CLI, run:',
|
|
184
|
-
'new.firebase.create.installCommand': 'Command',
|
|
185
|
-
'new.firebase.create.installAfter': 'Then log in',
|
|
186
|
-
'new.firebase.create.installUrl': 'Or download from',
|
|
187
|
-
'new.firebase.create.authCommand': 'Run: gcloud auth login',
|
|
188
|
-
'new.firebase.create.fallbackHint': 'For now, enter an existing Firebase Project ID to continue (or install gcloud and run again):',
|
|
189
|
-
'new.firebase.q.billingAccount': 'Which billing account to link to the project?',
|
|
190
|
-
'new.firebase.q.billingAccount.hint': 'Choose the account with available quota (up to 3 projects per account)',
|
|
191
|
-
'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).',
|
|
192
|
-
'new.firebase.q.billingAccount.other': 'Other — enter billing account ID manually',
|
|
193
|
-
'new.firebase.q.billingAccount.manualId': 'Billing account ID (e.g. 018A70-7D0548-0F84A8)',
|
|
194
|
-
'new.firebase.q.billingAccount.manualId.hint': 'Find it at console.cloud.google.com/billing',
|
|
195
|
-
'new.firebase.q.billingAccount.manualId.required': 'Billing account ID is required.',
|
|
196
|
-
'new.firebase.q.organization': 'In which GCP organization should the project be created?',
|
|
197
|
-
'new.firebase.q.organization.none': 'No organization (personal account / standalone project)',
|
|
198
|
-
'new.firebase.q.organization.hint': 'Organizations linked to your gcloud account',
|
|
199
|
-
'new.firebase.create.billingRetry.title': 'Link billing manually (quota exceeded or billing error):',
|
|
200
|
-
'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.',
|
|
201
|
-
'new.firebase.create.billingRetry.ready': 'Linked billing. Retry setup?',
|
|
202
|
-
'new.firebase.create.billingRetry.retrying': 'Retrying setup…',
|
|
203
|
-
'new.firebase.create.billingRetry.exit': 'Run again with "Use existing project" after linking billing.',
|
|
204
|
-
'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.',
|
|
205
|
-
'new.supabase.q.orgSelect': 'Which organization to create the project in?',
|
|
206
|
-
'new.supabase.orgsRequired': 'No organizations found. Run supabase login and try again.',
|
|
207
|
-
'new.supabase.q.region': 'Where are most of your app users located?',
|
|
208
|
-
'new.supabase.q.region.brazil': '🇧🇷 Brazil (São Paulo) — sa-east-1',
|
|
209
|
-
'new.supabase.q.region.us': '🇺🇸 United States (Virginia) — us-east-1',
|
|
210
|
-
'new.supabase.q.region.europe': '🇪🇺 Europe (Ireland) — eu-west-1',
|
|
211
|
-
'new.supabase.q.region.global': '🌍 Global / Not sure — us-east-1',
|
|
212
|
-
'new.supabase.q.dbPassword': 'Database password (min 6 chars)',
|
|
213
|
-
'new.supabase.q.dbPassword.required': 'Password must be at least 6 characters.',
|
|
214
|
-
'new.supabase.creating': 'Creating project on Supabase…',
|
|
215
|
-
'new.supabase.created': 'Project created successfully.',
|
|
216
|
-
'new.supabase.createFailed': 'Could not create project',
|
|
217
|
-
'new.supabase.loginHint': 'Run: supabase login. Then enter your existing project URL and key below.',
|
|
218
|
-
'new.supabase.setup': 'Linking project and deploying…',
|
|
219
|
-
'new.supabase.setupManual': 'Run manually: supabase link, supabase db push, supabase functions deploy',
|
|
220
|
-
'new.supabase.q.useExisting.orgSelect': 'Which organization is the project in?',
|
|
221
|
-
'new.supabase.q.useExisting.projectSelect': 'Which existing Supabase project do you want to use?',
|
|
222
|
-
'new.supabase.projectsRequired': 'No projects found in this organization.',
|
|
223
|
-
'new.supabase.q.dbPassword.existing': 'Database password (required to link and apply migrations)',
|
|
224
|
-
'new.supabase.existingLinked': 'Project ready to link and apply migrations.',
|
|
225
|
-
'setup.license.loaded': '✓ License key loaded from local config.',
|
|
226
|
-
'setup.license.saved': '✓ License key validated and saved.',
|
|
227
|
-
'setup.license.invalid': 'Invalid license key format. Expected XXXX-XXXX-XXXX-XXXX.',
|
|
228
|
-
'setup.error.targetNotEmpty': 'Target directory is not empty: {path}',
|
|
229
|
-
'setup.error.targetExists': 'Target directory already exists: {path}',
|
|
230
|
-
'setup.error.coreMissing': 'Core template folder not found: {path}',
|
|
231
|
-
'setup.error.requiredChecksFailed': 'Required environment checks failed. Run `kasy doctor`.',
|
|
232
|
-
'setup.error.generatingFailed': 'Project generation failed.',
|
|
233
|
-
'setup.error.conflictHint': 'Tip: Remove the project folder and run again, or use an empty directory.',
|
|
234
|
-
'setup.spinner.generating': 'Generating project files...',
|
|
235
|
-
'setup.success.created': 'Project created successfully.',
|
|
236
|
-
'setup.success.complete': '✓ Setup complete',
|
|
237
|
-
'setup.success.location': 'Location',
|
|
238
|
-
'setup.success.nextSteps': 'Next steps',
|
|
239
|
-
'setup.success.stepPubGet': 'flutter pub get',
|
|
240
|
-
'setup.success.stepRun': 'flutter run',
|
|
241
|
-
'validate.title': 'Kasy Validate',
|
|
242
|
-
'validate.success': '✓ Validation matrix passed.',
|
|
243
|
-
'validate.failed': 'Validation matrix failed.',
|
|
244
|
-
'validate.error': 'One or more validation combinations failed.',
|
|
245
|
-
'validate.projectNotFound': 'Project not found',
|
|
246
|
-
'validate.ok': 'ok',
|
|
247
|
-
'validate.fail': 'fail',
|
|
248
|
-
'validate.passed': 'passed',
|
|
249
|
-
|
|
250
|
-
// ── New Firebase flow ─────────────────────────────────────────────────
|
|
251
|
-
'cli.command.firebase.description': '🔥 Create a complete Flutter app with Firebase (recommended)',
|
|
252
|
-
'new.banner': '✨ New Flutter app',
|
|
253
|
-
'new.subtitle': 'Choose backend: Firebase, Supabase or REST API.',
|
|
254
|
-
'new.subtitle2': '🔒 Setup runs on your machine with your credentials — no third-party access needed.',
|
|
255
|
-
'new.q.backend': 'Where do you want to store your app data?',
|
|
256
|
-
'new.q.backend.firebase.desc': 'Easiest to start — auth, database and storage included',
|
|
257
|
-
'new.q.backend.supabase.desc': 'SQL database (PostgreSQL) with more control',
|
|
258
|
-
'new.q.backend.api.desc': 'You already have your own backend server',
|
|
259
|
-
|
|
260
|
-
'new.q.mode': 'How do you want to configure?',
|
|
261
|
-
'new.q.mode.quick': '⚡ Quick — minimal questions, smart defaults',
|
|
262
|
-
'new.q.mode.advanced': '🛠 Advanced — all options and credentials now',
|
|
263
|
-
|
|
264
|
-
'new.q.preset': 'Which features to include?',
|
|
265
|
-
'new.q.preset.starter': '⚡ Starter — analytics + crash reports + onboarding',
|
|
266
|
-
'new.q.preset.saas': '💰 SaaS — subscriptions + analytics + onboarding + feedback',
|
|
267
|
-
'new.q.preset.content': '📱 Content — crash reports + analytics + onboarding + AI chat',
|
|
268
|
-
'new.q.preset.full': '🚀 Full — all features',
|
|
269
|
-
'new.q.preset.custom': '⚙️ Custom — choose features one by one',
|
|
270
|
-
'new.q.preset.none': '○ None — just the core',
|
|
271
|
-
|
|
272
|
-
'new.firebase.success.deployStep': '• Deploy backend (from inside the project folder):',
|
|
273
|
-
|
|
274
|
-
'cli.command.deploy.description': 'Publish the server to Firebase or Supabase',
|
|
275
|
-
'cli.command.check.description': 'Check push notifications setup (use --fix to fix it)',
|
|
276
|
-
'deploy.q.project': 'Firebase Project ID:',
|
|
277
|
-
'deploy.q.serviceAccount': 'Path to service account JSON:',
|
|
278
|
-
'deploy.detected.project': '✓ Firebase project detected:',
|
|
279
|
-
'deploy.detected.serviceAccount': '✓ Service account detected:',
|
|
280
|
-
'deploy.error.notProject': 'No firebase.json found in this directory. Run kasy deploy from inside the project folder.',
|
|
281
|
-
|
|
282
|
-
'cli.command.ios.description': 'Publish the app to the App Store (Mac needed)',
|
|
283
|
-
'cli.command.ios.configure.description': 'Configure Apple API credentials for local IPA upload',
|
|
284
|
-
'cli.command.ios.release.description': 'Bump build, create IPA, and upload to App Store Connect',
|
|
285
|
-
'cli.command.ios.build.description': 'Build IPA only (no upload)',
|
|
286
|
-
'cli.command.ios.clean.description': 'Clean Flutter/Xcode caches before a failed iOS build',
|
|
287
|
-
'cli.command.ios.picker.intro': 'Publish to the App Store',
|
|
288
|
-
'cli.command.ios.picker.message': 'What do you want to do?',
|
|
289
|
-
'cli.command.ios.help.before': 'How to publish to the App Store:\n 1) kasy ios configure → do this once (saves Apple credentials)\n 2) kasy ios release → run for each new version (build + upload)\n\nUse "build" to only generate the IPA, "clean" if a build fails.\n',
|
|
290
|
-
'cli.command.codemagic.description': 'Build the app in the cloud (no Mac needed)',
|
|
291
|
-
'cli.command.codemagic.configure.description': 'Configure Codemagic API credentials',
|
|
292
|
-
'cli.command.codemagic.release.description': 'Start a Codemagic iOS workflow build',
|
|
293
|
-
'cli.command.codemagic.status.description': 'Show Codemagic build status by ID',
|
|
294
|
-
'cli.command.codemagic.picker.intro': 'Build in the cloud with Codemagic',
|
|
295
|
-
'cli.command.codemagic.picker.message': 'What do you want to do?',
|
|
296
|
-
'cli.command.codemagic.picker.statusHint': 'Asks for the build ID',
|
|
297
|
-
'cli.command.codemagic.help.before': 'How to build with Codemagic (no Mac needed):\n 1) kasy codemagic configure → do this once (saves API token)\n 2) kasy codemagic release → starts a cloud build for each version\n\nUse "status <buildId>" to check the progress of a running build.\n',
|
|
298
|
-
|
|
299
|
-
'ios.configure.title': 'iOS App Store — setup',
|
|
300
|
-
'ios.configure.bundleId': 'Bundle ID',
|
|
301
|
-
'ios.configure.doc': 'Guide',
|
|
302
|
-
'ios.configure.openingLinks': 'Opening App Store Connect in your browser…',
|
|
303
|
-
'ios.configure.note.title': 'I will ask 3 things from App Store Connect',
|
|
304
|
-
'ios.configure.note.body': '1) API Key ID — under Users and Access → Keys.\n2) Issuer ID — at the top of the same page.\n3) The .p8 private key file you downloaded when creating the key.\n\nThe App ID is optional and only needed if you have multiple apps.',
|
|
305
|
-
'ios.configure.q.apiKey': 'App Store Connect API Key ID',
|
|
306
|
-
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
307
|
-
'ios.configure.q.p8Path': 'Path to downloaded AuthKey_XXXXX.p8 file',
|
|
308
|
-
'ios.configure.q.appId': 'App Store Connect App ID (optional)',
|
|
309
|
-
'ios.configure.q.required': 'Required',
|
|
310
|
-
'ios.configure.q.p8NotFound': 'File not found',
|
|
311
|
-
'ios.configure.cancelled': 'Setup cancelled',
|
|
312
|
-
'ios.configure.success': 'Apple credentials saved',
|
|
313
|
-
'ios.configure.p8Installed': 'Private key installed at',
|
|
314
|
-
'ios.configure.next': 'Next',
|
|
315
|
-
'ios.release.title': 'Building and uploading iOS release…',
|
|
316
|
-
'ios.release.success': 'iOS release uploaded',
|
|
317
|
-
'ios.release.task.building': 'Building IPA (this can take 2-5 min)…',
|
|
318
|
-
'ios.release.task.uploading': 'Uploading IPA to App Store Connect…',
|
|
319
|
-
'ios.release.task.done': 'Build + upload finished',
|
|
320
|
-
'ios.release.task.failed': 'Build failed — see output below',
|
|
321
|
-
'ios.build.title': 'Building iOS IPA…',
|
|
322
|
-
'ios.build.success': 'IPA built',
|
|
323
|
-
'ios.build.task.building': 'Building IPA (this can take 2-5 min)…',
|
|
324
|
-
'ios.build.task.done': 'IPA built at build/ios/ipa/',
|
|
325
|
-
'ios.build.task.failed': 'Build failed — see output below',
|
|
326
|
-
'ios.error.notProject': 'Not a Flutter iOS project (pubspec.yaml + ios/ required).',
|
|
327
|
-
'ios.error.noScript': 'scripts/release-ios.sh not found. Run: kasy update ios-release',
|
|
328
|
-
'ios.error.notMac': 'iOS release requires macOS with Xcode.',
|
|
329
|
-
'ios.error.useCodemagic': 'Use cloud release instead',
|
|
330
|
-
'ios.error.notConfigured': 'Apple credentials not configured',
|
|
331
|
-
'ios.error.runConfigure': 'Run: kasy ios configure',
|
|
332
|
-
'ios.release.askConfigure': 'Want to configure Apple credentials now?',
|
|
333
|
-
'ios.error.signing': 'iOS code signing is not configured (DEVELOPMENT_TEAM missing).',
|
|
334
|
-
'ios.error.signingHint': 'Open ios/Runner.xcworkspace in Xcode → Runner → Signing & Capabilities → select your Team.',
|
|
335
|
-
'ios.error.googleUrlScheme': 'Google Sign-In iOS URL scheme is not configured.',
|
|
336
|
-
'ios.error.googleUrlSchemeHint': 'Fix: run flutterfire configure, then kasy ios clean, or re-run project setup before building.',
|
|
337
|
-
'ios.warn.lowDisk': 'Low disk space ({gb} GB free; recommend at least {min} GB for Xcode builds).',
|
|
338
|
-
'ios.hints.title': 'Xcode cache may be corrupted — try:',
|
|
339
|
-
'ios.hints.closeXcode': 'Close Xcode completely',
|
|
340
|
-
'ios.hints.retry': 'Then retry',
|
|
341
|
-
'ios.hints.manual': 'Or manually',
|
|
342
|
-
'ios.clean.title': 'Cleaning iOS build caches…',
|
|
343
|
-
'ios.clean.success': 'Caches cleaned',
|
|
344
|
-
'ios.clean.notMac': 'iOS clean is only available on macOS.',
|
|
345
|
-
'ios.clean.step.flutterClean': 'flutter clean',
|
|
346
|
-
'ios.clean.step.derivedData': 'Remove Xcode DerivedData (Runner)',
|
|
347
|
-
'ios.clean.step.buildDir': 'Remove build folders',
|
|
348
|
-
'ios.clean.step.pubGet': 'flutter pub get',
|
|
349
|
-
'ios.clean.step.pods': 'pod install',
|
|
350
|
-
|
|
351
|
-
'codemagic.configure.title': 'Codemagic — setup',
|
|
352
|
-
'codemagic.configure.doc': 'Guide',
|
|
353
|
-
'codemagic.configure.checklist': 'Complete signing + App Store Connect in the Codemagic dashboard (see guide).',
|
|
354
|
-
'codemagic.configure.openingLinks': 'Opening Codemagic in your browser…',
|
|
355
|
-
'codemagic.configure.q.token': 'Codemagic API token',
|
|
356
|
-
'codemagic.configure.q.appId': 'Codemagic App ID',
|
|
357
|
-
'codemagic.configure.q.workflowId': 'Workflow ID (from codemagic.yaml)',
|
|
358
|
-
'codemagic.configure.q.branch': 'Git branch to build',
|
|
359
|
-
'codemagic.configure.q.required': 'Required',
|
|
360
|
-
'codemagic.configure.cancelled': 'Setup cancelled',
|
|
361
|
-
'codemagic.configure.success': 'Codemagic credentials saved',
|
|
362
|
-
'codemagic.configure.next': 'Next',
|
|
363
|
-
'codemagic.release.title': 'Triggering Codemagic build…',
|
|
364
|
-
'codemagic.release.triggered': 'Build started',
|
|
365
|
-
'codemagic.release.spin': 'Starting build on Codemagic…',
|
|
366
|
-
'codemagic.release.spinDone': 'Build queued on Codemagic',
|
|
367
|
-
'codemagic.status.title': 'Build status',
|
|
368
|
-
'codemagic.status.usage': 'Usage: kasy codemagic status <buildId>',
|
|
369
|
-
'codemagic.status.spin': 'Fetching build status…',
|
|
370
|
-
'codemagic.status.spinDone': 'Status fetched',
|
|
371
|
-
'codemagic.error.notProject': 'Not a Flutter iOS project (pubspec.yaml + ios/ required).',
|
|
372
|
-
'codemagic.error.notConfigured': 'Codemagic not configured',
|
|
373
|
-
'codemagic.error.addCi': 'Add CI first: kasy add ci (creates codemagic.yaml)',
|
|
374
|
-
'codemagic.error.runConfigure': 'Run: kasy codemagic configure',
|
|
375
|
-
'codemagic.error.googleUrlScheme': 'Codemagic build blocked: Google Sign-In iOS URL scheme is not configured.',
|
|
376
|
-
|
|
377
|
-
'doctor.ios.title': 'iOS release',
|
|
378
|
-
'doctor.ios.appleOk': 'Apple credentials configured',
|
|
379
|
-
'doctor.ios.appleMissing': 'Apple credentials missing — kasy ios configure',
|
|
380
|
-
'doctor.ios.p8Ok': 'API key file found',
|
|
381
|
-
'doctor.ios.p8Missing': 'AuthKey .p8 missing — kasy ios configure',
|
|
382
|
-
'doctor.ios.codemagicOk': 'Codemagic credentials configured',
|
|
383
|
-
'doctor.ios.codemagicMissing': 'Codemagic optional — kasy codemagic configure',
|
|
384
|
-
'doctor.ios.notMac': 'Local iOS release requires macOS',
|
|
385
|
-
'doctor.ios.doc': 'Documentation',
|
|
386
|
-
'doctor.ios.signingOk': 'Xcode signing (Development Team) configured',
|
|
387
|
-
'doctor.ios.signingMissing': 'Xcode signing not set — open Runner in Xcode and choose your Team',
|
|
388
|
-
'doctor.ios.googleUrlSchemeOk': 'Google Sign-In iOS URL scheme configured',
|
|
389
|
-
'doctor.ios.googleUrlSchemeMissing': 'Google Sign-In iOS URL scheme mismatch',
|
|
390
|
-
'doctor.ios.googleUrlSchemeSkipped': 'Google Sign-In iOS URL scheme check skipped (GoogleService-Info.plist not found)',
|
|
391
|
-
'doctor.ios.appleSignInEntitlementOk': 'Apple Sign-In entitlement configured',
|
|
392
|
-
'doctor.ios.appleSignInEntitlementMissing': 'Apple Sign-In entitlement missing — add Sign In with Apple capability in Xcode',
|
|
393
|
-
'doctor.ios.facebookOk': 'Facebook credentials configured (iOS)',
|
|
394
|
-
'doctor.ios.facebookPlaceholders': 'Facebook credentials are still placeholders — update FacebookAppID and FacebookClientToken in Info.plist',
|
|
395
|
-
'doctor.ios.facebookSkipped': 'Facebook credential check skipped (no FacebookAppID in Info.plist)',
|
|
396
|
-
'doctor.android.facebookOk': 'Facebook credentials configured (Android)',
|
|
397
|
-
'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',
|
|
398
|
-
|
|
399
|
-
'doctor.revenuecat.title': 'RevenueCat',
|
|
400
|
-
'doctor.revenuecat.keysOk': 'API keys configured (iOS + Android)',
|
|
401
|
-
'doctor.revenuecat.keysEmpty': 'API keys not configured — set RC_IOS_API_KEY and RC_ANDROID_API_KEY in Makefile and .vscode/launch.json',
|
|
402
|
-
'doctor.revenuecat.keysTest': 'Using Test Store keys (test_) — replace with appl_ and goog_ for production',
|
|
403
|
-
'doctor.revenuecat.webhookUrlSupabase': 'Webhook URL (paste in RevenueCat → Integrations → Webhooks)',
|
|
404
|
-
'doctor.revenuecat.webhookUrlFirebase': 'Webhook URL: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
405
|
-
|
|
406
|
-
'update.iosRelease.success': 'iOS release files updated',
|
|
407
|
-
'add.iosRelease.success': 'iOS release files added',
|
|
408
|
-
'add.iosRelease.already': 'iOS release files already present',
|
|
409
|
-
|
|
410
|
-
'new.api.q.baseUrl': 'What is your API base URL?',
|
|
411
|
-
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
412
|
-
'new.firebase.banner': '🔥 New Flutter app — Firebase',
|
|
413
|
-
'new.firebase.subtitle': 'Full project: auth, Firestore, notifications, social login and more.',
|
|
414
|
-
'new.prereq.title': 'Before we start, make sure you have:',
|
|
415
|
-
'new.firebase.prereq.title': 'Before we start, make sure you have:',
|
|
416
|
-
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
417
|
-
'new.firebase.prereq.create.2': '2. Blaze plan (credit card — required for Cloud Functions)',
|
|
418
|
-
'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.',
|
|
419
|
-
'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.',
|
|
420
|
-
'new.firebase.prereq.create.note': ' Project and APIs will be created automatically.',
|
|
421
|
-
'new.firebase.prereq.create.pushNote': ' Firebase project for FCM + Remote Config will be created automatically (no service account needed).',
|
|
422
|
-
'new.firebase.create.creatingPush': 'Creating Firebase project for push notifications…',
|
|
423
|
-
'new.firebase.create.successPush': 'Firebase project created for FCM + Remote Config.',
|
|
424
|
-
'new.firebase.prereq.1': '1. Firebase CLI installed (npm i -g firebase-tools) + firebase login',
|
|
425
|
-
'new.firebase.prereq.2': '2. Firebase project created at console.firebase.google.com',
|
|
426
|
-
'new.firebase.prereq.3': '3. Blaze plan activated (credit card — required for Cloud Functions)',
|
|
427
|
-
'new.firebase.prereq.4': '4. gcloud CLI installed + gcloud auth login (used to enable APIs automatically)',
|
|
428
|
-
'new.firebase.prereq.5': '5. Before deploy: enable Secret Manager API + Firebase Storage (see PREREQUISITES.md or links after generation)',
|
|
429
|
-
'new.firebase.prereq.doc': ' Full checklist: PREREQUISITES.md',
|
|
430
|
-
|
|
431
|
-
'new.firebase.q.appName': "What is the name of your app?",
|
|
432
|
-
'new.firebase.q.appName.hint': 'e.g.: My Amazing App',
|
|
433
|
-
'new.firebase.q.appName.required': 'App name is required.',
|
|
434
|
-
|
|
435
|
-
'new.firebase.q.bundleId': 'What is the unique identifier (Bundle ID) of your app?',
|
|
436
|
-
'new.firebase.q.bundleId.hint': 'It works like an address for your app, e.g.: com.mycompany.myapp',
|
|
437
|
-
'new.firebase.q.bundleId.invalid': 'Invalid format. Use: com.company.app',
|
|
438
|
-
'new.firebase.q.bundleId.required': 'Bundle ID is required.',
|
|
439
|
-
|
|
440
|
-
'new.firebase.q.projectId': 'What is your Firebase Project ID?',
|
|
441
|
-
'new.firebase.q.projectId.hint': 'Find it in the Firebase Console → your project → Settings',
|
|
442
|
-
'new.firebase.q.projectId.required': 'Firebase Project ID is required.',
|
|
443
|
-
|
|
444
|
-
'new.firebase.q.modules': 'Which optional features do you want to include?',
|
|
445
|
-
'new.firebase.q.modules.hint': 'Space to select, Enter to confirm',
|
|
446
|
-
'new.modules.header.common': '── Common (all backends) ──',
|
|
447
|
-
'new.modules.header.features': '── Screens & features ──',
|
|
448
|
-
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
449
|
-
'new.modules.header.ci': '── CI/CD ──',
|
|
450
|
-
'new.modules.header.monetization': '── Monetization ──',
|
|
451
|
-
'new.firebase.module.revenuecat': '💰 RevenueCat (enables Subscriptions)',
|
|
452
|
-
'new.firebase.module.sentry': '🚨 Crash Reports (Sentry)',
|
|
453
|
-
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
454
|
-
'new.firebase.module.facebook': '👤 Facebook (Login + Ads)',
|
|
455
|
-
'new.firebase.module.web': '🌐 Web Support (PWA, Firebase only)',
|
|
456
|
-
'new.firebase.module.widget': '📱 Home Widget (iOS/Android)',
|
|
457
|
-
'new.firebase.module.llm_chat': '🤖 AI Chat (OpenAI/Gemini)',
|
|
458
|
-
'new.firebase.module.local_notifications': '🔔 Local Reminders (no server)',
|
|
459
|
-
'new.firebase.module.feedback': '💬 Feature Requests (requires Firebase or Supabase)',
|
|
460
|
-
'new.firebase.module.ci': '⚙️ CI/CD (GitHub + Codemagic)',
|
|
461
|
-
'new.firebase.module.onboarding': '👋 Onboarding (welcome flow)',
|
|
462
|
-
|
|
463
|
-
'new.firebase.q.secrets.configureNow': 'Configure server secrets now? (RevenueCat webhook, Meta Ads)',
|
|
464
|
-
'new.firebase.q.secrets.configureNow.hint': 'If not now, see the README for commands to add them later',
|
|
465
|
-
'new.firebase.q.secrets.later': '• Server secrets not configured — they will be set up during `kasy deploy`.',
|
|
466
|
-
'new.firebase.q.revenuecat.webhookKey': 'Webhook secret key (a random value was suggested — press Enter to accept or type your own)',
|
|
467
|
-
'new.firebase.q.revenuecat.webhookKey.hint': 'Save this value. In RevenueCat dashboard, paste as: Bearer <this-value>',
|
|
468
|
-
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (for Ads Conversions API, optional)',
|
|
469
|
-
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (optional)',
|
|
470
|
-
'new.firebase.q.revenuecat.android': 'RevenueCat API key for Android',
|
|
471
|
-
'new.firebase.q.revenuecat.ios': 'RevenueCat API key for iOS',
|
|
472
|
-
'new.firebase.q.paywall': 'Which paywall style?',
|
|
473
|
-
'new.firebase.q.paywall.hint': 'Layout of the subscription screen — you can change it later in RevenueCat',
|
|
474
|
-
'new.firebase.q.revenuecat.web': 'Enable subscriptions on web (RevenueCat Web Billing)?',
|
|
475
|
-
'new.firebase.q.revenuecat.web.hint': 'Requires Web Billing setup in RevenueCat dashboard + Stripe. Leave unchecked if not needed.',
|
|
476
|
-
'new.firebase.q.revenuecat.webKey': 'RevenueCat Web Billing API key (rcb_xxx or rcb_sb_xxx, optional — configure later)',
|
|
477
|
-
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: add RC_WEB_API_KEY (launch.json) for web subscriptions',
|
|
478
|
-
'new.firebase.q.sentry.dsn': 'Sentry DSN (leave blank to configure later)',
|
|
479
|
-
'new.firebase.q.sentry.dsn.invalid': 'Invalid DSN. Expected format: https://key@host/project-id',
|
|
480
|
-
'new.firebase.q.mixpanel.token': 'Mixpanel Token (leave blank to configure later)',
|
|
481
|
-
'new.firebase.q.facebook.appId': 'Facebook App ID',
|
|
482
|
-
'new.firebase.q.facebook.appId.required': 'Facebook App ID is required.',
|
|
483
|
-
'new.firebase.q.facebook.appId.invalid': 'Facebook App ID must be numeric (e.g. 1234567890).',
|
|
484
|
-
'new.firebase.q.facebook.token': 'Facebook App Token',
|
|
485
|
-
'new.firebase.q.facebook.token.required': 'Facebook App Token is required.',
|
|
486
|
-
'new.firebase.q.revenuecat.android.required': 'RevenueCat Android key is required.',
|
|
487
|
-
'new.firebase.q.revenuecat.ios.required': 'RevenueCat iOS key is required.',
|
|
488
|
-
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID must be numeric (e.g. 1234567890).',
|
|
489
|
-
'new.firebase.q.revenuecat.webKey.invalid': 'Web Billing key must start with rcb_ (e.g. rcb_sb_xxx or rcb_xxx).',
|
|
490
|
-
|
|
491
|
-
'new.firebase.confirm.title': 'Configuration summary:',
|
|
492
|
-
'new.firebase.confirm.app': 'App',
|
|
493
|
-
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
494
|
-
'new.firebase.confirm.project': 'Firebase',
|
|
495
|
-
'new.firebase.confirm.modules': 'Features',
|
|
496
|
-
'new.firebase.confirm.none': 'none',
|
|
497
|
-
'new.firebase.confirm.proceed': 'Create project now?',
|
|
498
|
-
|
|
499
|
-
'new.firebase.step.copying': 'Setting up your project...',
|
|
500
|
-
'new.firebase.step.pubGet': 'Installing Flutter packages...',
|
|
501
|
-
'new.firebase.step.buildRunner': 'Generating code (Riverpod/Freezed)...',
|
|
502
|
-
'new.firebase.step.flutterfire': 'Configuring Firebase (flutterfire)...',
|
|
503
|
-
'new.firebase.step.deploy': 'Deploying Cloud Functions + Firestore rules...',
|
|
504
|
-
'new.firebase.step.done': 'Done!',
|
|
505
|
-
|
|
506
|
-
'new.firebase.success.title': '🎉 Your app is ready!',
|
|
507
|
-
'new.firebase.success.open': 'Open the project:',
|
|
508
|
-
'new.firebase.success.run': 'Run the app:',
|
|
509
|
-
'new.firebase.success.runMake': 'Or use make: make run | make run-ios | make run-android',
|
|
510
|
-
'new.firebase.success.deviceSetup': 'Before running on device:',
|
|
511
|
-
'new.firebase.success.deviceSetup.ios': 'iOS: connect iPhone via cable → trust computer → Xcode → Window → Devices → pair',
|
|
512
|
-
'new.firebase.success.deviceSetup.android': 'Android: Settings → Developer options → enable USB debugging',
|
|
513
|
-
'new.firebase.success.hotReload': "Hot reload: press 'r' in terminal while app runs. Changes appear instantly.",
|
|
514
|
-
'new.firebase.success.oneLiner': 'Or copy-paste to enter and run:',
|
|
515
|
-
'new.firebase.success.configure': 'Configure when ready:',
|
|
516
|
-
'new.firebase.success.alreadyDone': 'Already configured by CLI:',
|
|
517
|
-
'new.firebase.success.manualNeeded': 'Configure manually (if needed):',
|
|
518
|
-
'new.firebase.success.apn': '• APN Key (iOS push): Firebase Console → Project Settings → Cloud Messaging',
|
|
519
|
-
'new.firebase.success.social': '• Enable social login in Firebase Console → Authentication (Google and Apple are already in the code; just activate them there)',
|
|
520
|
-
'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.',
|
|
521
|
-
'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',
|
|
522
|
-
'new.firebase.success.mixpanel': '• Mixpanel: For production analytics. Already in launch.json for dev. For release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
523
|
-
'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.',
|
|
524
|
-
|
|
525
|
-
'new.firebase.q.deploy': 'Deploy Cloud Functions + Firestore rules now?',
|
|
526
|
-
'new.firebase.q.deploy.hint': 'Requires Blaze plan and firebase-tools installed globally',
|
|
527
|
-
'new.firebase.deployFailed.hint': 'If deploy failed: create Firestore and Storage in Console first:',
|
|
528
|
-
'new.firebase.deployFailed.firestore': '• Firestore: create database (Create database → Native mode)',
|
|
529
|
-
'new.firebase.deployFailed.storage': '• Storage: click Get Started',
|
|
530
|
-
'new.firebase.deployFailed.orGcloud': 'Or create Firestore via CLI:',
|
|
531
|
-
'new.firebase.success.deployLater': '• Deploy backend when ready (from inside the project folder):',
|
|
532
|
-
'new.firebase.success.beforeDeploy': 'Before firebase deploy, enable (click to open):',
|
|
533
|
-
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
534
|
-
'new.firebase.success.firestore': '• Firestore (create database if missing)',
|
|
535
|
-
'new.firebase.success.storage': '• Firebase Storage (Get Started)',
|
|
536
|
-
'new.firebase.success.auth': '• Firebase Authentication (Email/Password)',
|
|
537
|
-
'new.firebase.success.security': '🔒 .gitignore excludes .env and other secrets. Cloud Functions use server-side secrets.',
|
|
538
|
-
|
|
539
|
-
'new.firebase.interactive.title': '⚠️ Cloud Configuration Required',
|
|
540
|
-
'new.firebase.interactive.desc': 'For security and billing reasons, Firebase requires manual activation of these services:',
|
|
541
|
-
'new.firebase.interactive.step1': '1. Create Firestore Database (Native mode): ',
|
|
542
|
-
'new.firebase.interactive.step2': '2. Upgrade to Blaze Plan (Pay-as-you-go): ',
|
|
543
|
-
'new.firebase.interactive.step3': '3. Enable Authentication (Email/Password): ',
|
|
544
|
-
|
|
545
|
-
'new.firebase.interactive.prompt1': 'Did you create the Firestore Database and enabled Authentication?',
|
|
546
|
-
'new.firebase.interactive.prompt2': 'Did you upgrade to the Blaze Plan? (Required for Cloud Functions)',
|
|
547
|
-
'new.firebase.interactive.googleAuthNote': '* Enable Google Sign-In manually (Email/Password and Anonymous are already enabled): ',
|
|
548
|
-
'new.firebase.interactive.billingNeeded': 'Blaze plan not yet active. Activate it at the link above, then wait.',
|
|
549
|
-
'new.firebase.interactive.billingWaiting': 'Checking Blaze status...',
|
|
550
|
-
'new.firebase.interactive.billingTimeout': 'Blaze plan not confirmed after timeout. Deploy skipped — run manually when ready.',
|
|
551
|
-
'new.firebase.interactive.authWarn': 'Could not enable Email/Password and Anonymous auth automatically. Enable manually:',
|
|
552
|
-
'new.firebase.existing.apisFailed': 'Could not activate APIs:',
|
|
553
|
-
'new.firebase.existing.googleSignInManual': 'Google Sign-In: enable manually in Authentication → Sign-in method → Google',
|
|
554
|
-
|
|
555
|
-
'new.firebase.interactive.ready': 'Ready to deploy Push Notifications + Security Rules now?',
|
|
556
|
-
'new.firebase.interactive.deploying': 'Deploying Cloud Functions + Firestore/Storage rules...',
|
|
557
|
-
'new.firebase.interactive.errorTitle': 'Deploy failed.',
|
|
558
|
-
'new.firebase.interactive.errorHint': 'Make sure Firestore is created and the Blaze plan is active with a credit card.',
|
|
559
|
-
'new.firebase.interactive.laterHint': 'You can deploy later inside the project folder using: ',
|
|
560
|
-
'new.firebase.interactive.skipped': 'Deploy skipped. You can deploy later manually.',
|
|
561
|
-
|
|
562
|
-
'new.firebase.warn.flutterfire': '⚠️ FlutterFire could not generate firebase_options_dev.dart automatically.',
|
|
563
|
-
'new.firebase.warn.flutterfire.manual': 'Run manually in the project folder:',
|
|
564
|
-
|
|
565
|
-
'new.firebase.error.templateMissing': 'Firebase template not found at: {path}. Make sure the Firebase/ folder exists.',
|
|
566
|
-
'new.firebase.error.dirNotEmpty': 'Directory "{path}" already exists and is not empty.',
|
|
567
|
-
'new.firebase.error.aborted': 'Setup aborted.',
|
|
568
|
-
|
|
569
|
-
'new.supabase.prereq.1': '1. Supabase account at supabase.com',
|
|
570
|
-
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI installed (both required)',
|
|
571
|
-
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase needed for push notifications)',
|
|
572
|
-
'new.supabase.prereq.login': ' If creating manually: have your project URL and anon key ready',
|
|
573
|
-
'new.supabase.loginRequired': '⚠️ You must be logged in to create a project. Run supabase login first.',
|
|
574
|
-
'new.supabase.loginCommand': ' supabase login',
|
|
575
|
-
'new.supabase.success.done.db': '• Database: tables, RLS policies',
|
|
576
|
-
'new.supabase.success.done.storage': '• Storage: bucket kasy with policies',
|
|
577
|
-
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
578
|
-
'new.supabase.success.done.secrets': '• Edge Function secrets (if provided)',
|
|
579
|
-
'new.supabase.success.done.launch': '• launch.json with Sentry, Mixpanel, RevenueCat',
|
|
580
|
-
'new.supabase.success.auth': '• Auth: Email already enabled. Enable Google, Apple, Facebook at: {authUrl}',
|
|
581
|
-
'new.supabase.success.storage': '• Storage: Bucket kasy created with policies (ready to use)',
|
|
582
|
-
'new.supabase.success.fcm': '• Push (FCM): Must configure in Firebase Console (Blaze plan). App is ready for Supabase + FCM. URL: {fcmUrl}',
|
|
583
|
-
'new.supabase.success.deployLater': '• Deploy backend when ready (from inside the project folder):',
|
|
584
|
-
|
|
585
|
-
'new.api.prereq.1': '1. Your REST API running and reachable',
|
|
586
|
-
'new.api.prereq.2': '2. API base URL (e.g. https://api.yourapp.com)',
|
|
587
|
-
'new.api.prereq.3': '3. Firebase CLI required for push notifications (FCM)',
|
|
588
|
-
'new.api.success.backendUrl': '• Point BACKEND_URL to your running API (launch.json)',
|
|
589
|
-
'new.api.success.fcm': '• Firebase is required for push notifications (FCM) — configure APNs key in Firebase console',
|
|
590
|
-
'new.api.success.auth': '• Implement the social auth endpoints (Google, Apple) on your backend',
|
|
591
|
-
|
|
592
|
-
'new.outdated.hint': "projects created now won't include the latest improvements.",
|
|
593
|
-
'new.outdated.upgradeNow': 'Upgrade to the latest version before creating? (requires active subscription)',
|
|
594
|
-
'new.outdated.upgraded': 'kasy updated! Run kasy new again.',
|
|
595
|
-
'new.success.title': 'Project created successfully!',
|
|
596
|
-
'new.success.nextSteps': 'Next steps:',
|
|
597
|
-
'new.success.step.cd': 'Go to your project folder:',
|
|
598
|
-
'new.success.step.deploy': 'Deploy your backend to Firebase:',
|
|
599
|
-
'new.success.step.run': 'Run your app (with your configured keys):',
|
|
600
|
-
'new.success.step.run.vscode': '(or F5 in VS Code)',
|
|
601
|
-
'new.success.step.console': 'Open your backend console:',
|
|
602
|
-
'new.fcm.generating': 'Generating push notifications key (Firebase Service Account)…',
|
|
603
|
-
'new.sha1.registering': 'Registering SHA-1 for Google Sign-In (Android)…',
|
|
604
|
-
'new.sha1.failed': 'SHA-1 not added automatically: {error}',
|
|
605
|
-
'new.sha1.manual': 'Add it manually so Google Sign-In works on Android:',
|
|
606
|
-
'new.sha1.skipped.apiFailed': 'SHA-1 not added automatically. Reason: {error}',
|
|
607
|
-
'new.sha1.skipped.other': 'SHA-1 not added: {reason}',
|
|
608
|
-
'new.sha1.addManually': 'Add manually: Firebase Console → Project settings → Your apps → Android → Add fingerprint',
|
|
609
|
-
'new.sha1.added': '✓ SHA-1 added (Google Sign-In)',
|
|
610
|
-
'new.firestore.created': '✓ Firestore created automatically',
|
|
611
|
-
'new.firestore.notCreated.error': '⚠ Firestore not created. Reason: {error}',
|
|
612
|
-
'new.firestore.notCreated': '⚠ Firestore not created automatically',
|
|
613
|
-
'new.storage.created': '✓ Firebase Storage created automatically',
|
|
614
|
-
'new.storage.notCreated.error': '⚠ Storage not created. Reason: {error}',
|
|
615
|
-
'new.storage.notCreated': '⚠ Storage not created automatically',
|
|
616
|
-
'new.activateManually': 'Activate manually in the console:',
|
|
617
|
-
'new.fcm.serverConfig': 'Configure on your server: FIREBASE_SERVICE_ACCOUNT_JSON="$(cat .kasy/fcm-service-account.json)"',
|
|
618
|
-
'new.apns.warning': '⚠ iOS Push: configure the APNs Key in Firebase Console',
|
|
619
|
-
'new.apns.step1': '1. Apple Developer Portal → Keys → create APNs Key (.p8)',
|
|
620
|
-
'new.apns.step2': '2. Firebase Console → Cloud Messaging → iOS app → upload APNs Key',
|
|
621
|
-
'new.firebase.create.estimatedTime': '(usually 3–5 min — do not close the terminal)',
|
|
622
|
-
'new.internet.warning': '📶 Make sure you have a stable internet connection — this step requires network access.',
|
|
623
|
-
|
|
624
|
-
// run command
|
|
625
|
-
'cli.command.run.description': 'Run your app on phone, simulator, or browser',
|
|
626
|
-
'run.launching': 'Launching Flutter app...',
|
|
627
|
-
'run.updateHint.prefix': 'Project improvements available —',
|
|
628
|
-
'run.updateHint.suffix': 'to see what\'s new',
|
|
629
|
-
'run.spinner.building': 'Starting Flutter…',
|
|
630
|
-
'run.spinner.ready': 'Flutter ready — use r (reload), R (restart), q (quit)',
|
|
631
|
-
'run.spinner.failed': 'Flutter run failed before starting',
|
|
632
|
-
'run.stage.gradleFirstTime': 'Building Android (first run takes 5-15 min while Gradle downloads deps)…',
|
|
633
|
-
'run.stage.gradle': 'Building Android…',
|
|
634
|
-
'run.stage.xcode': 'Building iOS…',
|
|
635
|
-
'run.stage.pods': 'Installing iOS pods…',
|
|
636
|
-
'run.stage.installing': 'Installing on device…',
|
|
637
|
-
'run.stage.syncing': 'Syncing files to device…',
|
|
638
|
-
'run.stage.buildSuccess': 'Build done — launching app…',
|
|
639
|
-
'run.error.notFlutterProject': 'No pubspec.yaml found. Run this command from inside a Flutter project.',
|
|
640
|
-
'run.error.flutterNotFound': 'Flutter not found. Make sure Flutter is installed and on your PATH.',
|
|
641
|
-
|
|
642
|
-
// reset command
|
|
643
|
-
'cli.command.reset.description': 'Uninstall the app on a simulator/emulator/device so you can test as a fresh install',
|
|
644
|
-
'reset.title': 'Reset app on device',
|
|
645
|
-
'reset.scanning': 'Looking for running simulators, emulators and connected devices...',
|
|
646
|
-
'reset.prompt.pickDevice': 'Which one do you want to reset?',
|
|
647
|
-
'reset.resetting': 'Resetting',
|
|
648
|
-
'reset.reinstalling': 'Reinstalling the app...',
|
|
649
|
-
'reset.success.uninstalled': 'App uninstalled. All local data and permissions cleared.',
|
|
650
|
-
'reset.info.notInstalled': 'App was not installed on this device.',
|
|
651
|
-
'reset.warn.noDevices': 'No matching simulator, emulator or device is running. Start one and try again.',
|
|
652
|
-
'reset.warn.nothingSelected': 'No device selected.',
|
|
653
|
-
'reset.warn.iosUninstallFailed': 'simctl uninstall failed.',
|
|
654
|
-
'reset.warn.androidUninstallFailed': 'adb uninstall did not return success.',
|
|
655
|
-
'reset.warn.iosDeviceManual': 'iOS physical device: remove the app manually (long-press the icon → Remove App), then reinstall with kasy run.',
|
|
656
|
-
'reset.warn.iosDeviceUninstallFailed': 'devicectl uninstall failed. Make sure the device is unlocked and trusted by this Mac.',
|
|
657
|
-
'reset.warn.webIncognito': 'Web: open the app in an incognito / private window of your browser to test as a fresh visitor.',
|
|
658
|
-
'reset.warn.unknownPlatform': 'Unsupported platform',
|
|
659
|
-
'reset.error.notFlutterProject': 'No pubspec.yaml found. Run this command from inside a Flutter project.',
|
|
660
|
-
'reset.error.noIdentifier': 'Could not read bundle id or Android package name from this project.',
|
|
661
|
-
'reset.error.noBundleId': 'iOS bundle id not found for this project.',
|
|
662
|
-
'reset.error.noPackageName': 'Android applicationId not found for this project.',
|
|
663
|
-
'reset.outro.skipped': 'Done. App was not uninstalled.',
|
|
664
|
-
'reset.outro.uninstalledOnly': 'Done. Run kasy run to reinstall.',
|
|
665
|
-
'reset.outro.cancelled': 'Cancelled. App was not uninstalled.',
|
|
666
|
-
'reset.prompt.xcodeOpen': 'Xcode is open and will conflict with the install. What do you want to do?',
|
|
667
|
-
'reset.prompt.xcodeOpen.close': 'Close Xcode automatically (recommended)',
|
|
668
|
-
'reset.prompt.xcodeOpen.skip': 'Leave Xcode open and try anyway',
|
|
669
|
-
'reset.prompt.xcodeOpen.cancel': 'Cancel reset',
|
|
670
|
-
'reset.info.xcodeClosed': 'Xcode closed.',
|
|
671
|
-
'reset.prompt.reinstallNow': 'App removed. Check the device, then reinstall now?',
|
|
672
|
-
|
|
673
|
-
// doctor project checks
|
|
674
|
-
'doctor.project.title': 'Project',
|
|
675
|
-
'doctor.project.appName': 'App name',
|
|
676
|
-
'doctor.project.backend': 'Backend',
|
|
677
|
-
'doctor.project.bundleId': 'Bundle ID',
|
|
678
|
-
'doctor.project.pubGet': 'Dependencies installed (pubspec.lock present)',
|
|
679
|
-
'doctor.project.pubGetMissing': 'Run flutter pub get — pubspec.lock not found',
|
|
680
|
-
'doctor.project.modules': 'Active features',
|
|
681
|
-
'doctor.project.noModules': 'No optional features active',
|
|
682
|
-
|
|
683
|
-
// add command
|
|
684
|
-
'cli.command.add.description': 'Add a new feature to your app (e.g.: kasy add ai_chat)',
|
|
685
|
-
|
|
686
|
-
// docs command
|
|
687
|
-
'cli.command.docs.description': 'Open the full documentation',
|
|
688
|
-
|
|
689
|
-
// splash command
|
|
690
|
-
'cli.command.splash.description': 'Swap splash screen logos (light/dark) and regenerate native assets',
|
|
691
|
-
'splash.intro': 'Splash screen',
|
|
692
|
-
'splash.validating': 'Validating PNG files...',
|
|
693
|
-
'splash.validated': 'PNG files look good',
|
|
694
|
-
'splash.copying': 'Copying logos to assets/images/...',
|
|
695
|
-
'splash.copied': 'Logos copied',
|
|
696
|
-
'splash.generating': 'Regenerating native splash (Android, iOS, Web)...',
|
|
697
|
-
'splash.generated': 'Native splash regenerated',
|
|
698
|
-
'splash.done': 'Done. Run "flutter run" to see the new splash.',
|
|
699
|
-
'splash.warn.title': 'Warnings',
|
|
700
|
-
'splash.warn.noAlphaLight': '{path} has no alpha channel. The logo will show with a solid background instead of being transparent.',
|
|
701
|
-
'splash.warn.noAlphaDark': '{path} has no alpha channel. The logo will show with a solid background instead of being transparent.',
|
|
702
|
-
'splash.warn.smallLight': 'Light logo is {w}x{h}. Recommended is at least 768x768 to avoid blurry edges.',
|
|
703
|
-
'splash.warn.smallDark': 'Dark logo is {w}x{h}. Recommended is at least 768x768 to avoid blurry edges.',
|
|
704
|
-
'splash.summary.title': 'Saved',
|
|
705
|
-
'splash.summary.light': 'Light mode',
|
|
706
|
-
'splash.summary.dark': 'Dark mode',
|
|
707
|
-
'splash.skipGenerate.title': 'Skipped generation',
|
|
708
|
-
'splash.skipGenerate.hint': 'Run `dart run flutter_native_splash:create` when you are ready.',
|
|
709
|
-
'splash.error.notKasyProject': 'pubspec.yaml not found. Run this command from inside a Flutter/Kasy project.',
|
|
710
|
-
'splash.error.bothRequired': '--light and --dark are both required.',
|
|
711
|
-
'splash.error.fileNotFound': 'File not found: {path}',
|
|
712
|
-
'splash.error.notPng': 'One of the files is not a valid PNG.',
|
|
713
|
-
'splash.error.generateFailed': 'flutter_native_splash:create failed. Check the output above.',
|
|
714
|
-
|
|
715
|
-
// icon command
|
|
716
|
-
'cli.command.icon.description': 'Swap the app icon (iOS + Android) and regenerate native assets',
|
|
717
|
-
'icon.intro': 'App icon',
|
|
718
|
-
'icon.validating': 'Validating PNG file...',
|
|
719
|
-
'icon.validated': 'PNG looks good',
|
|
720
|
-
'icon.copying': 'Copying icon to assets/images/icon.png...',
|
|
721
|
-
'icon.copied': 'Icon copied',
|
|
722
|
-
'icon.generating': 'Regenerating native icons (Android + iOS)...',
|
|
723
|
-
'icon.generated': 'Native icons regenerated',
|
|
724
|
-
'icon.done': 'Done. Uninstall the app from the device and reinstall to see the new icon.',
|
|
725
|
-
'icon.warn.title': 'Warnings',
|
|
726
|
-
'icon.warn.notSquare': 'Icon is {w}x{h} (not square). The image will be stretched. Use a square image (1024x1024 recommended).',
|
|
727
|
-
'icon.warn.small': 'Icon is {w}x{h}. Recommended is at least 1024x1024 (App Store requires this size).',
|
|
728
|
-
'icon.warn.hasAlpha': 'Icon has transparency. iOS rejects icons with alpha channel — flutter_launcher_icons will remove it automatically (remove_alpha_ios: true).',
|
|
729
|
-
'icon.summary.title': 'Saved',
|
|
730
|
-
'icon.summary.icon': 'App icon',
|
|
731
|
-
'icon.skipGenerate.title': 'Skipped generation',
|
|
732
|
-
'icon.skipGenerate.hint': 'Run `dart run flutter_launcher_icons` when you are ready.',
|
|
733
|
-
'icon.reinstall.title': 'Important',
|
|
734
|
-
'icon.reinstall.hint': 'iOS and Android cache the old icon. Uninstall the app and reinstall to see the new one.',
|
|
735
|
-
'icon.error.notKasyProject': 'pubspec.yaml not found. Run this command from inside a Flutter/Kasy project.',
|
|
736
|
-
'icon.error.imageRequired': '--image is required.',
|
|
737
|
-
'icon.error.fileNotFound': 'File not found: {path}',
|
|
738
|
-
'icon.error.notPng': 'The file is not a valid PNG.',
|
|
739
|
-
'icon.error.generateFailed': 'flutter_launcher_icons failed. Check the output above.',
|
|
740
|
-
|
|
741
|
-
// favicon command
|
|
742
|
-
'cli.command.favicon.description': 'Swap the web favicon / PWA icon and regenerate web assets',
|
|
743
|
-
'favicon.intro': 'Web favicon',
|
|
744
|
-
'favicon.validating': 'Validating PNG file...',
|
|
745
|
-
'favicon.validated': 'PNG looks good',
|
|
746
|
-
'favicon.copying': 'Copying favicon to assets/images/favicon.png...',
|
|
747
|
-
'favicon.copied': 'Favicon copied',
|
|
748
|
-
'favicon.generating': 'Regenerating web icons (favicon + PWA sizes)...',
|
|
749
|
-
'favicon.generated': 'Web icons regenerated',
|
|
750
|
-
'favicon.done': 'Done. Run "flutter run -d chrome" to see the new favicon.',
|
|
751
|
-
'favicon.warn.title': 'Warnings',
|
|
752
|
-
'favicon.warn.notSquare': 'Favicon is {w}x{h} (not square). It will be stretched. Use a square image (512x512+ recommended).',
|
|
753
|
-
'favicon.warn.small': 'Favicon is {w}x{h}. Recommended is at least 512x512 so it stays sharp on PWA install screens.',
|
|
754
|
-
'favicon.summary.title': 'Saved',
|
|
755
|
-
'favicon.summary.favicon': 'Favicon',
|
|
756
|
-
'favicon.skipGenerate.title': 'Skipped generation',
|
|
757
|
-
'favicon.skipGenerate.hint': 'Run `dart run flutter_launcher_icons` when you are ready.',
|
|
758
|
-
'favicon.error.notKasyProject': 'pubspec.yaml not found. Run this command from inside a Flutter/Kasy project.',
|
|
759
|
-
'favicon.error.imageRequired': '--image is required.',
|
|
760
|
-
'favicon.error.fileNotFound': 'File not found: {path}',
|
|
761
|
-
'favicon.error.notPng': 'The file is not a valid PNG.',
|
|
762
|
-
'favicon.error.generateFailed': 'flutter_launcher_icons failed. Check the output above.',
|
|
763
|
-
|
|
764
|
-
// notifications command
|
|
765
|
-
'cli.command.notifications.description': 'Edit the text of local notifications and reminders',
|
|
766
|
-
'cli.command.notifications.text.description': 'Set titles and bodies shown in local notifications',
|
|
767
|
-
'cli.command.notifications.picker.intro': 'Edit notification texts',
|
|
768
|
-
'cli.command.notifications.picker.message': 'What do you want to do?',
|
|
769
|
-
'notifications.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
770
|
-
'notifications.error.noI18n': 'lib/i18n/*.i18n.json not found in this project.',
|
|
771
|
-
'notifications.error.noFeatures': 'lib/core/config/features.dart not found.',
|
|
772
|
-
'notifications.error.notEnabled': 'Local notifications are disabled. Run: kasy add local_notifications',
|
|
773
|
-
'notifications.error.cancelled': 'Cancelled.',
|
|
774
|
-
'notifications.prompt.intro': 'Local notification texts',
|
|
775
|
-
'notifications.prompt.hint': 'Home demo = instant test from Features. Reminder = scheduled alert from Settings.',
|
|
776
|
-
'notifications.prompt.demoTitle': 'Home demo — notification title',
|
|
777
|
-
'notifications.prompt.demoBody': 'Home demo — description / body',
|
|
778
|
-
'notifications.prompt.reminderTitle': 'Scheduled reminder — title',
|
|
779
|
-
'notifications.prompt.reminderBody': 'Scheduled reminder — body',
|
|
780
|
-
'notifications.prompt.required': 'Required.',
|
|
781
|
-
'notifications.writing': 'Updating lib/i18n/*.i18n.json...',
|
|
782
|
-
'notifications.written': 'Updated: {langs}',
|
|
783
|
-
'notifications.slang': 'Running dart run slang...',
|
|
784
|
-
'notifications.slangDone': 'Translations regenerated',
|
|
785
|
-
'notifications.slangFailed': 'dart run slang failed — run it manually in the project',
|
|
786
|
-
'notifications.done': 'Local notification copy updated.',
|
|
787
|
-
'notifications.summary.demo': 'Home → Features (demo):',
|
|
788
|
-
'notifications.summary.reminder': 'Settings → Reminders (scheduled):',
|
|
789
|
-
|
|
790
|
-
'add.list.title': 'Project features',
|
|
791
|
-
'add.error.noModule': 'Provide a feature name or use --list to see available features.',
|
|
792
|
-
'add.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
793
|
-
'add.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
794
|
-
'add.alreadyActive': 'Feature "{module}" is already active in this project.',
|
|
795
|
-
'add.applying': 'Adding feature: {module}',
|
|
796
|
-
'add.applyingPatch': 'Applying feature changes...',
|
|
797
|
-
'add.patchApplied': 'Patch applied',
|
|
798
|
-
'add.patchFailed': 'Patch failed — check the output above',
|
|
799
|
-
'add.pubGet': 'Installing Flutter packages (flutter pub get)...',
|
|
800
|
-
'add.pubGetDone': 'Dependencies updated',
|
|
801
|
-
'add.pubGetFailed': 'Failed to install Flutter packages — run `flutter pub get` manually',
|
|
802
|
-
'add.buildRunner': 'Generating code (Riverpod/Freezed)...',
|
|
803
|
-
'add.buildRunnerDone': 'Code generation complete',
|
|
804
|
-
'add.buildRunnerFailed': 'Code generation failed — run `dart run build_runner build` manually',
|
|
805
|
-
'add.success': 'Feature "{module}" added successfully.',
|
|
806
|
-
'add.cancelled': 'Cancelled.',
|
|
807
|
-
'add.prompt.sentryDsn': 'Sentry DSN (leave blank to configure later):',
|
|
808
|
-
'add.prompt.mixpanelToken': 'Mixpanel Token (leave blank to configure later):',
|
|
809
|
-
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (leave blank to configure later):',
|
|
810
|
-
'add.prompt.rcIosKey': 'RevenueCat iOS API key (leave blank to configure later):',
|
|
811
|
-
'add.note.facebook': 'Add your Facebook App ID and token in .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
812
|
-
'new.q.llm_chat.configureNow': 'Configure the LLM Chat agent now?',
|
|
813
|
-
'new.q.llm_chat.configureNow.hint': 'You can skip and run "kasy add llm_chat" later',
|
|
814
|
-
'add.llm_chat.reconfigure': 'Feature already active — reconfiguring credentials only.',
|
|
815
|
-
'add.prompt.llmProvider': 'LLM provider:',
|
|
816
|
-
'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 >',
|
|
817
|
-
'add.prompt.llmApiKey': 'API key (OpenAI or Gemini) — stored as server secret, never in the app (leave blank to set later):',
|
|
818
|
-
'add.prompt.llmEndpoint': 'Your LLM endpoint URL (leave blank to configure later):',
|
|
819
|
-
'add.llm_chat.settingSecret': 'Storing API key as server secret...',
|
|
820
|
-
'add.llm_chat.secretSet': 'API key stored as secret',
|
|
821
|
-
'add.llm_chat.secretFailed': 'Could not set secret automatically — set it manually (see instructions below)',
|
|
822
|
-
'add.llm_chat.skipSecret': 'API key skipped — set it later via the server CLI before deploying',
|
|
823
|
-
'add.llm_chat.deploying': 'Deploying LLM function to server...',
|
|
824
|
-
'add.llm_chat.deployed': 'LLM function deployed successfully',
|
|
825
|
-
'add.llm_chat.deployFailed': 'Auto-deploy failed — deploy manually (see instructions below)',
|
|
826
|
-
'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',
|
|
827
|
-
'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',
|
|
828
|
-
'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',
|
|
829
|
-
'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',
|
|
830
|
-
'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',
|
|
831
|
-
'cli.command.remove.description': 'Remove a feature you no longer use (e.g.: kasy remove sentry)',
|
|
832
|
-
'remove.error.noModule': 'Provide a feature name. Usage: kasy remove <feature>',
|
|
833
|
-
'remove.error.notKasyProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
834
|
-
'remove.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
835
|
-
'remove.error.notActive': 'Feature "{module}" is not active in this project.',
|
|
836
|
-
'remove.confirm': 'Remove feature "{module}"? This will delete files and dependencies.',
|
|
837
|
-
'remove.cancelled': 'Cancelled.',
|
|
838
|
-
'remove.removing': 'Removing feature: {module}',
|
|
839
|
-
'remove.pubGet': 'Installing Flutter packages (flutter pub get)...',
|
|
840
|
-
'remove.pubGetDone': 'Dependencies updated',
|
|
841
|
-
'remove.pubGetFailed': 'Failed to install Flutter packages — run `flutter pub get` manually',
|
|
842
|
-
'remove.buildRunner': 'Generating code (Riverpod/Freezed)...',
|
|
843
|
-
'remove.buildRunnerDone': 'Code generation complete',
|
|
844
|
-
'remove.buildRunnerFailed': 'Code generation failed — run `dart run build_runner build` manually',
|
|
845
|
-
'remove.success': 'Feature "{module}" removed successfully.',
|
|
846
|
-
'remove.warn.ci': 'CI files removed. If you had custom workflow files, restore them from git.',
|
|
847
|
-
'remove.warn.sentry.shared': 'sentry_flutter kept — still required by active features (revenuecat/facebook).',
|
|
848
|
-
'cli.command.update.description': 'Update parts of your app to the latest (e.g.: kasy update components)',
|
|
849
|
-
'cli.command.update.targetArg': 'Target to update (e.g. revenuecat, sentry, components)',
|
|
850
|
-
'update.error.noProject': 'No kit_setup.json found. Run this command from inside a Kasy project.',
|
|
851
|
-
'update.error.unknownModule': 'Unknown feature: {module}\nAvailable: {list}',
|
|
852
|
-
'update.error.unknownTarget': 'Unknown update target: {module}\nAvailable: {list}',
|
|
853
|
-
'update.error.notActive': 'Feature "{module}" is not active in this project.',
|
|
854
|
-
'update.alreadyUpToDate': 'Project is already up to date (v{version}).',
|
|
855
|
-
'update.status': 'Project: v{from} → CLI: v{to}',
|
|
856
|
-
'update.noVersion': 'Project was generated without version tracking. All features can be updated.',
|
|
857
|
-
'update.changesTitle': 'Updates available:',
|
|
858
|
-
'update.reapplyTitle': 'No new changes — can re-apply if needed:',
|
|
859
|
-
'update.howToUpdate': 'To update a feature:',
|
|
860
|
-
'update.howToUpdateComponents': 'To update base components:',
|
|
861
|
-
'update.warn.commit': 'This will overwrite files from feature "{module}". Make sure you have committed your changes first.',
|
|
862
|
-
'update.warn.commitComponents': 'This will overwrite base component files. Make sure you have committed your changes first.',
|
|
863
|
-
'update.confirm': 'Overwrite feature "{module}" files with the latest version?',
|
|
864
|
-
'update.confirmComponents': 'Overwrite base component files with the latest version?',
|
|
865
|
-
'update.confirmCore': 'Overwrite core files (animations, widgets, theme, dev tools) with the latest version?',
|
|
866
|
-
'update.cancelled': 'Cancelled.',
|
|
867
|
-
'update.applying': 'Applying update for feature: {module}',
|
|
868
|
-
'update.applyingComponents': 'Applying update for base components...',
|
|
869
|
-
'update.applyingCore': 'Applying update for core files...',
|
|
870
|
-
'update.applied': 'Feature {module} updated',
|
|
871
|
-
'update.appliedComponents': '{count} base component files updated',
|
|
872
|
-
'update.appliedCore': '{count} core files updated',
|
|
873
|
-
'update.applyFailed': 'Failed to apply update for feature {module}',
|
|
874
|
-
'update.applyComponentsFailed': 'Failed to apply update for base components',
|
|
875
|
-
'update.noPatch': 'Feature "{module}" has no files to update (configuration-only feature).',
|
|
876
|
-
'update.noComponentFiles': 'No base component files were found to update.',
|
|
877
|
-
'update.pubGet': 'Installing Flutter packages (flutter pub get)...',
|
|
878
|
-
'update.pubGetDone': 'Dependencies updated',
|
|
879
|
-
'update.pubGetFailed': 'Failed to install Flutter packages — run `flutter pub get` manually',
|
|
880
|
-
'update.buildRunner': 'Generating code (Riverpod/Freezed)...',
|
|
881
|
-
'update.buildRunnerDone': 'Code generation complete',
|
|
882
|
-
'update.buildRunnerFailed': 'Code generation failed — run `dart run build_runner build` manually',
|
|
883
|
-
'update.success': 'Feature "{module}" updated successfully.',
|
|
884
|
-
'update.componentsSuccess': 'Base components updated successfully.',
|
|
885
|
-
'update.coreSuccess': 'Core files updated successfully.',
|
|
886
|
-
'check.intro': 'Kasy Check — Push Notifications',
|
|
887
|
-
'check.firebase.detected': 'Firebase backend',
|
|
888
|
-
'check.firebase.adcInfo': 'Firebase uses Application Default Credentials — no extra setup needed.',
|
|
889
|
-
'check.apns.warn': 'iOS push requires APNs Key (cannot be verified via CLI)',
|
|
890
|
-
'check.apns.where': 'Firebase Console → Cloud Messaging → iOS app → APNs Authentication Key',
|
|
891
|
-
'check.done': 'Done',
|
|
892
|
-
'check.notKasy': 'This directory does not look like a Kasy project.',
|
|
893
|
-
'check.aborted': 'Aborted',
|
|
894
|
-
'check.supabase.notLinked': 'Supabase project not linked',
|
|
895
|
-
'check.supabase.notLinkedHint': 'run: supabase link --project-ref YOUR_REF',
|
|
896
|
-
'check.supabase.linked': 'Project linked',
|
|
897
|
-
'check.spin.secrets': 'Checking secrets…',
|
|
898
|
-
'check.spin.secretsDone': 'Secrets checked',
|
|
899
|
-
'check.secrets.listFailed': 'Could not list secrets',
|
|
900
|
-
'check.secrets.checkLogin': 'verify: supabase login',
|
|
901
|
-
'check.fbProjId.ok': 'FIREBASE_PROJECT_ID configured',
|
|
902
|
-
'check.fbProjId.missing': 'FIREBASE_PROJECT_ID missing',
|
|
903
|
-
'check.fbProjId.fixHint': 'Fix: supabase secrets set FIREBASE_PROJECT_ID="{id}"',
|
|
904
|
-
'check.fbProjId.fixed': 'FIREBASE_PROJECT_ID → set automatically',
|
|
905
|
-
'check.fbProjId.fixFailed': 'FIREBASE_PROJECT_ID → failed to set',
|
|
906
|
-
'check.fbSak.ok': 'FIREBASE_SERVICE_ACCOUNT_JSON configured',
|
|
907
|
-
'check.fbSak.missing': 'FIREBASE_SERVICE_ACCOUNT_JSON missing',
|
|
908
|
-
'check.fbSak.spin': 'Generating and setting FCM key…',
|
|
909
|
-
'check.fbSak.spinDone': 'FCM key generated',
|
|
910
|
-
'check.fbSak.fixed': 'FIREBASE_SERVICE_ACCOUNT_JSON → set automatically',
|
|
911
|
-
'check.fbSak.fixFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → failed to set',
|
|
912
|
-
'check.fbSak.genFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → could not generate key',
|
|
913
|
-
'check.fbSak.manual': "Manual: Firebase Console → Settings → Service accounts → Generate key\nThen: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat key.json)'",
|
|
914
|
-
'check.fbSak.hint': "Auto-fix: kasy check --fix\nOr manually: Firebase Console → Settings → Service accounts → Generate key\nThen: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat key.json)'",
|
|
915
|
-
'check.fn.spin': 'Checking edge functions…',
|
|
916
|
-
'check.fn.spinDone': 'Edge functions checked',
|
|
917
|
-
'check.fn.listFailed': 'Could not list edge functions',
|
|
918
|
-
'check.fn.deployed': 'Edge function send-push-notification deployed',
|
|
919
|
-
'check.fn.missing': 'Edge function send-push-notification not deployed',
|
|
920
|
-
'check.fn.deploySpin': 'Deploying send-push-notification…',
|
|
921
|
-
'check.fn.deployDone': 'send-push-notification → deployed automatically',
|
|
922
|
-
'check.fn.deployFailed': 'send-push-notification → deploy failed',
|
|
923
|
-
'check.fn.hint': 'Auto-fix: kasy check --fix\nOr manually: supabase functions deploy send-push-notification',
|
|
924
|
-
'deploy.firebase.intro': 'Deploy — Firebase',
|
|
925
|
-
'deploy.firebase.spin': 'Deploying Firebase...',
|
|
926
|
-
'deploy.firebase.spinDone': 'Firebase deploy completed',
|
|
927
|
-
'deploy.apns.title': 'iOS push: configure the APNs Key in Firebase Console',
|
|
928
|
-
'deploy.apns.step1': '1. Apple Developer Portal → Keys → create APNs Key (.p8)',
|
|
929
|
-
'deploy.apns.step2': '2. Firebase Console → Cloud Messaging → iOS app → upload APNs Key',
|
|
930
|
-
'deploy.supabase.intro': 'Deploy — Supabase',
|
|
931
|
-
'deploy.supabase.notLinked': 'Supabase project not linked in this directory.',
|
|
932
|
-
'deploy.supabase.linkHint': 'Run: supabase link --project-ref YOUR_PROJECT_REF',
|
|
933
|
-
'deploy.supabase.projectRef': 'Project ref: {ref}',
|
|
934
|
-
'deploy.supabase.sakAlready': 'FIREBASE_SERVICE_ACCOUNT_JSON already configured',
|
|
935
|
-
'deploy.supabase.sakSpin': 'Generating FCM key (Service Account)…',
|
|
936
|
-
'deploy.supabase.sakSpinDone': 'FCM key generated',
|
|
937
|
-
'deploy.supabase.sakManual': "Configure manually: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='...'",
|
|
938
|
-
'deploy.supabase.sakNoGS': 'google-services.json not found — configure manually',
|
|
939
|
-
'deploy.supabase.fnSpin': 'Deploying edge functions…',
|
|
940
|
-
'deploy.supabase.fnSpinDone': 'Edge functions processed',
|
|
941
|
-
'deploy.supabase.fnNone': 'edge functions (none found)',
|
|
942
|
-
'deploy.outro': 'Deploy completed',
|
|
943
|
-
},
|
|
944
|
-
pt: {
|
|
945
|
-
'cli.tagline': 'Crie apps móveis sem dor de configuração',
|
|
946
|
-
'cli.description': 'Crie apps Flutter sem dor de configuração.',
|
|
947
|
-
'cli.usage': '<comando> [argumentos]',
|
|
948
|
-
'cli.option.version': 'Mostrar versão instalada',
|
|
949
|
-
'cli.option.lang': 'Idioma (en, pt, es)',
|
|
950
|
-
'cli.help.afterError': '(execute com --help para detalhes de uso)',
|
|
951
|
-
'cli.help.more': 'Execute "{command}" para detalhes de um comando específico.',
|
|
952
|
-
'cli.help.quickStart': 'Criar um novo app:',
|
|
953
|
-
'cli.help.optionDescription': 'Mostrar ajuda do comando',
|
|
954
|
-
'cli.help.commandDescription': 'Mostrar ajuda do comando',
|
|
955
|
-
'cli.help.inline.options': '[opções]',
|
|
956
|
-
'cli.help.heading.usage': 'Uso',
|
|
957
|
-
'cli.help.heading.arguments': 'Argumentos',
|
|
958
|
-
'cli.help.heading.options': 'Opções',
|
|
959
|
-
'cli.help.heading.globalOptions': 'Opções globais',
|
|
960
|
-
'cli.help.heading.commands': 'Comandos',
|
|
961
|
-
'cli.help.group.start': 'Para começar',
|
|
962
|
-
'cli.help.group.work': 'Trabalhar no app',
|
|
963
|
-
'cli.help.group.publish': 'Publicar e testar',
|
|
964
|
-
'cli.help.group.maintenance': 'Manutenção da Kasy CLI',
|
|
965
|
-
'cli.help.group.advanced': 'Avançado',
|
|
966
|
-
'cli.help.group.other': 'Outros',
|
|
967
|
-
'cli.help.tip': 'Dica: rode `kasy <comando> --help` para detalhes. Use --lang pt|en|es para mudar o idioma.',
|
|
968
|
-
'cli.command.setup.description': '(avançado) Configura um projeto Flutter existente',
|
|
969
|
-
'cli.command.new.description': 'Cria um app novo (ex: kasy new meu-app)',
|
|
970
|
-
'cli.command.new.projectName': 'nome do projeto',
|
|
971
|
-
'cli.command.new.projectNameArg': 'Nome da pasta do projeto',
|
|
972
|
-
'prompt.projectName.enter': 'Qual o nome do seu projeto?',
|
|
973
|
-
'prompt.projectName.required': 'O nome do projeto é obrigatório.',
|
|
974
|
-
'prompt.projectName.default': 'meu_app',
|
|
975
|
-
'cli.command.setup.directoryName': 'diretório',
|
|
976
|
-
'cli.command.setup.directoryArg': 'Diretório de destino (padrão: pasta atual .)',
|
|
977
|
-
'cli.command.setup.langName': 'idioma',
|
|
978
|
-
'cli.command.setup.langOption': 'Idioma dos prompts (en, pt, es)',
|
|
979
|
-
'cli.command.setup.backendOption': 'Adapter de backend (firebase, supabase, api)',
|
|
980
|
-
'cli.command.setup.featuresOption': 'Features opcionais separadas por virgula (web,widget,llm_chat,revenuecat,ci)',
|
|
981
|
-
'cli.command.help.paramName': 'comando',
|
|
982
|
-
'cli.command.doctor.description': 'Verifica se o seu computador está pronto para rodar a Kasy',
|
|
983
|
-
'cli.command.modules.description': 'Mostra o que já vem incluso e o que você pode adicionar',
|
|
984
|
-
'cli.command.validate.description': '(avançado) Valida combinações de backend e features',
|
|
985
|
-
'cli.command.validate.analyzeOnlyOption': 'Executa apenas flutter analyze (sem build)',
|
|
986
|
-
'cli.command.version.description': 'Mostra a versão instalada da Kasy',
|
|
987
|
-
'cli.command.upgrade.description': 'Atualiza a Kasy CLI para a versão mais recente',
|
|
988
|
-
'cli.command.uninstall.description': 'Desinstala a Kasy deste computador',
|
|
989
|
-
'cli.command.upgrade.running': 'Atualizando a CLI kasy...',
|
|
990
|
-
'cli.command.upgrade.done': 'kasy atualizado com sucesso!',
|
|
991
|
-
'cli.command.uninstall.running': 'Desinstalando a CLI kasy...',
|
|
992
|
-
'cli.command.uninstall.done': 'kasy desinstalado. Até mais!',
|
|
993
|
-
'new.checks.environment': 'Verificações de ambiente',
|
|
994
|
-
'new.checks.environment.checking': 'Verificando ambiente',
|
|
995
|
-
'new.checks.environment.done': 'Ambiente pronto',
|
|
996
|
-
'setup.checks.backend.checking': 'Verificando ferramentas {backend}',
|
|
997
|
-
'setup.checks.backend.done': 'Ferramentas {backend} prontas',
|
|
998
|
-
'new.checks.firebaseForPush': 'Atenção: Firebase CLI é obrigatório para notificações push (Firebase Cloud Messaging / FCM) em todos os backends.',
|
|
999
|
-
'new.checks.requiredBlock': 'Ferramentas obrigatórias não encontradas. Instale-as para continuar.',
|
|
1000
|
-
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
1001
|
-
'new.checks.installSupabase': 'Supabase: npm i -g supabase (ou brew install supabase/tap/supabase) && supabase login',
|
|
1002
|
-
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (ou npm i -g supabase)',
|
|
1003
|
-
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
1004
|
-
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
1005
|
-
'setup.checks.environment': 'Verificações de ambiente',
|
|
1006
|
-
'setup.checks.prepareFirebase': 'Ferramentas Firebase (push, remote config)',
|
|
1007
|
-
'setup.checks.backend': 'Verificações de backend ({backend})',
|
|
1008
|
-
'setup.firebase.installing': 'Instalando Firebase CLI...',
|
|
1009
|
-
'setup.supabase.installing': 'Instalando Supabase CLI...',
|
|
1010
|
-
'setup.flutterfire.installing': 'Instalando FlutterFire CLI...',
|
|
1011
|
-
'setup.warn.hang': 'Se travar, execute manualmente: flutterfire --version',
|
|
1012
|
-
'setup.warn.supabase': 'Usando Supabase ou API propria? O Firebase ainda ajuda com push e remote config.',
|
|
1013
|
-
'doctor.title': 'Kasy Doctor',
|
|
1014
|
-
'doctor.baseEnvironment': 'Ambiente base',
|
|
1015
|
-
'doctor.optionalBackend': 'Ferramentas opcionais de backend',
|
|
1016
|
-
'doctor.requiredMissing': 'Dependencias obrigatórias ausentes. Corrija os erros acima e execute o doctor novamente.',
|
|
1017
|
-
'doctor.requiredPassed': '✓ Verificações obrigatórias de ambiente aprovadas.',
|
|
1018
|
-
'modules.backends': 'Backends disponíveis:',
|
|
1019
|
-
'modules.featuresBase': 'Sempre incluído:',
|
|
1020
|
-
'modules.features': 'Features opcionais:',
|
|
1021
|
-
'modules.tag.firebaseOnly': 'somente Firebase',
|
|
1022
|
-
'modules.tag.requiresDb': 'requer Firebase ou Supabase',
|
|
1023
|
-
'modules.tag.enhances': 'ativa {target}',
|
|
1024
|
-
'modules.hint.subscriptionNoRc': 'Dica: a tela de Subscriptions está inclusa mas inativa. Rode `kasy add revenuecat` para habilitar pagamentos reais.',
|
|
1025
|
-
'modules.feature.base.authentication.description': 'Cadastro, login e gerenciamento de conta',
|
|
1026
|
-
'modules.feature.base.home.description': 'Tela principal do app apos o login',
|
|
1027
|
-
'modules.feature.base.settings.description': 'Tema, idioma, conta e preferencias',
|
|
1028
|
-
'modules.feature.base.notifications.description': 'Notificações push via Firebase Cloud Messaging (funciona com qualquer backend)',
|
|
1029
|
-
'modules.feature.base.subscription.description': 'Tela e modelo de assinatura premium (adicione RevenueCat para habilitar pagamentos reais)',
|
|
1030
|
-
'modules.backend.firebase.description': 'Adapter de backend Firebase',
|
|
1031
|
-
'modules.backend.supabase.description': 'Adapter de backend Supabase',
|
|
1032
|
-
'modules.backend.api.description': 'Adapter de backend API REST/GraphQL',
|
|
1033
|
-
'modules.feature.sentry.description': 'Rastreamento de erros e crashes com Sentry',
|
|
1034
|
-
'modules.feature.analytics.description': 'Rastreamento de eventos de analytics (Firebase Analytics)',
|
|
1035
|
-
'modules.feature.facebook.description': 'Login do Facebook e rastreamento de eventos Meta Ads (vem sempre junto)',
|
|
1036
|
-
'modules.feature.revenuecat.description': 'Habilita pagamentos reais na tela de Subscriptions',
|
|
1037
|
-
'modules.feature.onboarding.description': 'Fluxo de boas-vindas mostrado no primeiro acesso',
|
|
1038
|
-
'modules.feature.web.description': 'Suporte Web/PWA',
|
|
1039
|
-
'modules.feature.widget.description': 'Widget de tela inicial iOS/Android',
|
|
1040
|
-
'modules.feature.llm_chat.description': 'Tela de chat com IA usando OpenAI ou Gemini',
|
|
1041
|
-
'modules.feature.feedback.description': 'Pedidos e votacao de features dentro do app',
|
|
1042
|
-
'modules.feature.local_notifications.description': 'Lembretes locais agendados pelo usuario (sem servidor)',
|
|
1043
|
-
'modules.feature.ci.description': 'CI/CD: GitHub/GitLab (testes + build) + Codemagic (publicação nas lojas)',
|
|
1044
|
-
'checks.checking': 'Verificando {name}...',
|
|
1045
|
-
'checks.found': '{name} encontrado',
|
|
1046
|
-
'checks.foundWithVersion': '{name} pronto ({version})',
|
|
1047
|
-
'checks.missing': '{name} ausente',
|
|
1048
|
-
'checks.notFound': '{name} não encontrado',
|
|
1049
|
-
'checks.flutter.warn': 'Flutter SDK não encontrado. Instale o Flutter para compilar e executar apps: https://docs.flutter.dev/get-started/install',
|
|
1050
|
-
'checks.install.failed': 'instalação automática falhou — execute o comando manualmente',
|
|
1051
|
-
'checks.diagnostic.xcodeLicense': '{name} está instalado, mas o Xcode precisa que a licenca seja aceita. Execute: sudo xcodebuild -license',
|
|
1052
|
-
'checks.diagnostic.xcodeCli': '{name} está instalado, mas faltam as Command Line Tools do Xcode. Execute: xcode-select --install',
|
|
1053
|
-
'banner.title': 'Kasy CLI · Gerador Flutter SaaS',
|
|
1054
|
-
'welcome.firstRun': 'Bem-vindo ao Kasy CLI!',
|
|
1055
|
-
'welcome.chooseLanguage': 'Primeiro, escolha seu idioma:',
|
|
1056
|
-
'prompt.language.select': 'Escolha seu idioma',
|
|
1057
|
-
'prompt.cancelled': 'Comando cancelado pelo usuario.',
|
|
1058
|
-
'license.required': '🔑 Chave de ativação necessária para usar o Kasy CLI',
|
|
1059
|
-
'license.checking': 'Validando chave de ativação...',
|
|
1060
|
-
'license.saved': '✅ Chave validada com sucesso',
|
|
1061
|
-
'license.invalid': 'Chave inválida. Verifique sua chave ou entre em contato em kasy.dev.',
|
|
1062
|
-
'license.expired': '❌ Sua assinatura expirou. Renove em kasy.dev.',
|
|
1063
|
-
'license.inactive': '❌ Sua chave foi desativada. Entre em contato em kasy.dev.',
|
|
1064
|
-
'license.offlineWarning': '⚠️ Servidor fora do ar — continuando no modo offline.',
|
|
1065
|
-
'license.subscriptionExpired': '❌ Sua assinatura expirou. Atualizações exigem plano ativo. Renove em kasy.dev.\n Seus projetos continuam funcionando — apenas atualizações estão bloqueadas.',
|
|
1066
|
-
'prompt.license.enter': '👉 Digite sua chave de ativação (XXXX-XXXX-XXXX-XXXX)',
|
|
1067
|
-
'prompt.license.invalid': 'Formato inválido. Use XXXX-XXXX-XXXX-XXXX.',
|
|
1068
|
-
'prompt.appName.enter': 'Digite o nome do seu app',
|
|
1069
|
-
'prompt.appName.required': 'O nome do app é obrigatório.',
|
|
1070
|
-
'prompt.bundleId.enter': 'Digite o bundle ID (com.company.app)',
|
|
1071
|
-
'prompt.bundleId.required': 'O bundle ID é obrigatório.',
|
|
1072
|
-
'prompt.bundleId.invalid': 'O bundle ID deve seguir o formato com.company.app.',
|
|
1073
|
-
'prompt.backend.select': 'Escolha o provedor de backend',
|
|
1074
|
-
'prompt.features.select': 'Escolha as features opcionais para incluir',
|
|
1075
|
-
'prompt.features.instructions': 'Espaco para marcar, enter para confirmar',
|
|
1076
|
-
'prompt.multiselect.instructions': '\nInstrucoes:\n ↑/↓: Destacar opção\n ←/→/[space]: Marcar/desmarcar\n a: Marcar/desmarcar todos\n enter/return: Confirmar',
|
|
1077
|
-
'prompt.multiselect.warnDisabled': 'Use ↓ para ir a uma opção selecionavel, Space para marcar, Enter para confirmar',
|
|
1078
|
-
'prompt.firebase.projectId.enter': 'Digite o Firebase Project ID',
|
|
1079
|
-
'prompt.firebase.projectId.required': 'Firebase Project ID é obrigatório.',
|
|
1080
|
-
'prompt.supabase.url.enter': 'Digite a URL do Supabase',
|
|
1081
|
-
'prompt.supabase.url.required': 'A URL do Supabase é obrigatória.',
|
|
1082
|
-
'prompt.supabase.anonKey.enter': 'Digite a chave anon do Supabase',
|
|
1083
|
-
'prompt.supabase.anonKey.required': 'A chave anon do Supabase é obrigatória.',
|
|
1084
|
-
'new.supabase.q.create': 'Criar novo projeto Supabase ou usar existente?',
|
|
1085
|
-
'new.supabase.q.create.create': '✨ Criar novo projeto (recomendado para iniciantes)',
|
|
1086
|
-
'new.supabase.q.create.existing': '📂 Usar projeto existente',
|
|
1087
|
-
'new.firebase.q.setupMode': 'Como deseja configurar o Firebase?',
|
|
1088
|
-
'new.firebase.q.setupMode.push': 'Projeto Firebase para notificações push (FCM):',
|
|
1089
|
-
'new.firebase.q.setupMode.push.explain': 'Notificações push (FCM) precisam de um projeto Firebase, mesmo quando seu backend principal é Supabase ou API REST.',
|
|
1090
|
-
'new.firebase.q.setupMode.create': '✨ Criar do zero (recomendado para iniciantes)',
|
|
1091
|
-
'new.firebase.q.setupMode.existing': '📂 Usar projeto existente',
|
|
1092
|
-
'new.firebase.q.region': 'Onde está a maioria dos usuários do seu app?',
|
|
1093
|
-
'new.firebase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — southamerica-east1',
|
|
1094
|
-
'new.firebase.q.region.us': '🇺🇸 Estados Unidos — us-central1',
|
|
1095
|
-
'new.firebase.q.region.europe': '🇪🇺 Europa — europe-west1',
|
|
1096
|
-
'new.firebase.q.region.global': '🌍 Global / Não sei — us-central1',
|
|
1097
|
-
'new.firebase.create.prereq': 'Você precisa: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Plano Blaze necessário para deploy.',
|
|
1098
|
-
'new.firebase.create.creating': 'Criando projeto Firebase…',
|
|
1099
|
-
'new.firebase.create.includeWeb': 'Incluir app Web no Firebase? (para plataforma web)',
|
|
1100
|
-
'new.firebase.create.nowDo': 'Agora ative a autenticação (antes de rodar o app):',
|
|
1101
|
-
'new.firebase.create.activateEmail': 'Ative Email/Senha: Firebase Console → Authentication → Sign-in method',
|
|
1102
|
-
'new.firebase.create.activateGoogle': 'Ative Google: mesma página, clique em Google → Ativar',
|
|
1103
|
-
'new.firebase.create.beforeContinue.title': 'Antes de continuar, ative no Firebase Console:',
|
|
1104
|
-
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Senha e Anônimo já foram ativados automaticamente)',
|
|
1105
|
-
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → ative Email/Senha, Anônimo e Google',
|
|
1106
|
-
'new.firebase.create.beforeContinue.ready': 'Ativei o Google Sign-In. Continuar?',
|
|
1107
|
-
'new.firebase.create.beforeContinue.ready.noAuth': 'Ativei Email/Senha, Anônimo e Google Sign-In. Continuar?',
|
|
1108
|
-
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager e Storage já foram ativados automaticamente)',
|
|
1109
|
-
'new.firebase.create.sha1Skipped': 'SHA-1 não adicionado',
|
|
1110
|
-
'new.firebase.create.sha1ManualInstruction': 'Adicione o SHA-1 manualmente: Firebase Console → Configurações do projeto → Seus apps → Android → Adicionar impressão digital',
|
|
1111
|
-
'new.firebase.create.sha1ParseError': 'Não foi possível extrair o SHA-1 da saída do keytool',
|
|
1112
|
-
'new.firebase.create.sha1ErrorDetail': 'Motivo',
|
|
1113
|
-
'new.firebase.create.useExistingHint': 'O projeto pode ter sido criado. Tente "Usar projeto existente" com ID: {id}',
|
|
1114
|
-
'new.firebase.create.usingProjectId': 'Usando project ID: {id} (continuando com projeto existente)',
|
|
1115
|
-
'new.firebase.create.waitPropagate': 'Aguardando propagação do projeto (20s)…',
|
|
1116
|
-
'new.firebase.create.success': 'Projeto Firebase criado com sucesso.',
|
|
1117
|
-
'new.firebase.create.failed': 'Não foi possível criar o projeto',
|
|
1118
|
-
'new.firebase.create.gcloudRequired': 'gcloud CLI é obrigatório para "criar do zero". Sem ele, o fluxo completo do Firebase não pode rodar.',
|
|
1119
|
-
'new.firebase.create.installTitle': 'Para instalar o gcloud CLI, execute:',
|
|
1120
|
-
'new.firebase.create.installCommand': 'Comando',
|
|
1121
|
-
'new.firebase.create.installAfter': 'Depois faca login',
|
|
1122
|
-
'new.firebase.create.installUrl': 'Ou baixe em',
|
|
1123
|
-
'new.firebase.create.authCommand': 'Execute: gcloud auth login',
|
|
1124
|
-
'new.firebase.create.fallbackHint': 'Por enquanto, informe um Firebase Project ID existente para continuar (ou instale o gcloud e execute novamente):',
|
|
1125
|
-
'new.firebase.q.billingAccount': 'Qual conta de faturamento vincular ao projeto?',
|
|
1126
|
-
'new.firebase.q.billingAccount.hint': 'Escolha a conta com cota disponível (até 3 projetos por conta)',
|
|
1127
|
-
'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).',
|
|
1128
|
-
'new.firebase.q.billingAccount.other': 'Outra — informar ID da conta manualmente',
|
|
1129
|
-
'new.firebase.q.billingAccount.manualId': 'ID da conta de faturamento (ex: 018A70-7D0548-0F84A8)',
|
|
1130
|
-
'new.firebase.q.billingAccount.manualId.hint': 'Encontre em console.cloud.google.com/billing',
|
|
1131
|
-
'new.firebase.q.billingAccount.manualId.required': 'O ID da conta de faturamento é obrigatório.',
|
|
1132
|
-
'new.firebase.q.organization': 'Em qual organização GCP criar o projeto?',
|
|
1133
|
-
'new.firebase.q.organization.none': 'Sem organização (conta pessoal / projeto avulso)',
|
|
1134
|
-
'new.firebase.q.organization.hint': 'Organizações vinculadas à sua conta gcloud',
|
|
1135
|
-
'new.firebase.create.billingRetry.title': 'Vincule o faturamento manualmente (cota excedida ou erro de billing):',
|
|
1136
|
-
'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.',
|
|
1137
|
-
'new.firebase.create.billingRetry.ready': 'Vinculei o faturamento. Tentar novamente?',
|
|
1138
|
-
'new.firebase.create.billingRetry.retrying': 'Tentando novamente…',
|
|
1139
|
-
'new.firebase.create.billingRetry.exit': 'Execute novamente com "Usar projeto existente" após vincular o faturamento.',
|
|
1140
|
-
'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.',
|
|
1141
|
-
'new.supabase.q.orgSelect': 'Em qual organização criar o projeto?',
|
|
1142
|
-
'new.supabase.orgsRequired': 'Nenhuma organização encontrada. Execute supabase login e tente novamente.',
|
|
1143
|
-
'new.supabase.q.region': 'Onde está a maioria dos usuários do seu app?',
|
|
1144
|
-
'new.supabase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — sa-east-1',
|
|
1145
|
-
'new.supabase.q.region.us': '🇺🇸 Estados Unidos (Virginia) — us-east-1',
|
|
1146
|
-
'new.supabase.q.region.europe': '🇪🇺 Europa (Irlanda) — eu-west-1',
|
|
1147
|
-
'new.supabase.q.region.global': '🌍 Global / Não sei — us-east-1',
|
|
1148
|
-
'new.supabase.q.dbPassword': 'Senha do banco (min 6 caracteres)',
|
|
1149
|
-
'new.supabase.q.dbPassword.required': 'A senha deve ter pelo menos 6 caracteres.',
|
|
1150
|
-
'new.supabase.creating': 'Criando projeto no Supabase…',
|
|
1151
|
-
'new.supabase.created': 'Projeto criado com sucesso.',
|
|
1152
|
-
'new.supabase.createFailed': 'Não foi possível criar o projeto',
|
|
1153
|
-
'new.supabase.loginHint': 'Execute: supabase login. Depois informe a URL e chave do seu projeto existente.',
|
|
1154
|
-
'new.supabase.setup': 'Vinculando projeto e publicando…',
|
|
1155
|
-
'new.supabase.setupManual': 'Execute manualmente: supabase link, supabase db push, supabase functions deploy',
|
|
1156
|
-
'new.supabase.q.useExisting.orgSelect': 'Em qual organização está o projeto?',
|
|
1157
|
-
'new.supabase.q.useExisting.projectSelect': 'Qual projeto Supabase existente deseja usar?',
|
|
1158
|
-
'new.supabase.projectsRequired': 'Nenhum projeto encontrado nesta organização.',
|
|
1159
|
-
'new.supabase.q.dbPassword.existing': 'Senha do banco do projeto (necessária para vincular e aplicar migrations)',
|
|
1160
|
-
'new.supabase.existingLinked': 'Projeto pronto para vincular e aplicar migrations.',
|
|
1161
|
-
'setup.license.loaded': '✓ Chave de licenca carregada da configuração local.',
|
|
1162
|
-
'setup.license.saved': '✓ Chave de licenca validada e salva.',
|
|
1163
|
-
'setup.license.invalid': 'Formato de licenca inválido. Esperado XXXX-XXXX-XXXX-XXXX.',
|
|
1164
|
-
'setup.error.targetNotEmpty': 'O diretório de destino não está vazio: {path}',
|
|
1165
|
-
'setup.error.targetExists': 'O diretório de destino já existe: {path}',
|
|
1166
|
-
'setup.error.coreMissing': 'Pasta do core template não encontrada: {path}',
|
|
1167
|
-
'setup.error.requiredChecksFailed': 'Falha nas verificações obrigatórias. Execute `kasy doctor`.',
|
|
1168
|
-
'setup.error.generatingFailed': 'Falha ao gerar o projeto.',
|
|
1169
|
-
'setup.error.conflictHint': 'Dica: Remova a pasta do projeto e execute novamente, ou use um diretório vazio.',
|
|
1170
|
-
'setup.spinner.generating': 'Gerando arquivos do projeto...',
|
|
1171
|
-
'setup.success.created': 'Projeto criado com sucesso.',
|
|
1172
|
-
'setup.success.complete': '✓ Setup concluido',
|
|
1173
|
-
'setup.success.location': 'Local',
|
|
1174
|
-
'setup.success.nextSteps': 'Proximos passos',
|
|
1175
|
-
'setup.success.stepPubGet': 'flutter pub get',
|
|
1176
|
-
'setup.success.stepRun': 'flutter run',
|
|
1177
|
-
'validate.title': 'Kasy Validate',
|
|
1178
|
-
'validate.success': '✓ Matriz de validacao aprovada.',
|
|
1179
|
-
'validate.failed': 'Matriz de validacao falhou.',
|
|
1180
|
-
'validate.error': 'Uma ou mais combinacoes de validacao falharam.',
|
|
1181
|
-
'validate.projectNotFound': 'Projeto não encontrado',
|
|
1182
|
-
'validate.ok': 'ok',
|
|
1183
|
-
'validate.fail': 'falhou',
|
|
1184
|
-
'validate.passed': 'aprovado',
|
|
1185
|
-
|
|
1186
|
-
// ── Fluxo Firebase ────────────────────────────────────────────────────
|
|
1187
|
-
'cli.command.firebase.description': '🔥 Criar app Flutter completo com Firebase (recomendado)',
|
|
1188
|
-
'new.banner': '✨ Novo app Flutter',
|
|
1189
|
-
'new.subtitle': 'Escolha o backend: Firebase, Supabase ou API REST.',
|
|
1190
|
-
'new.subtitle2': '🔒 O setup roda na sua máquina com suas credenciais — sem acesso de terceiros.',
|
|
1191
|
-
'new.q.backend': 'Onde você quer salvar os dados do seu app?',
|
|
1192
|
-
'new.q.backend.firebase.desc': 'Mais fácil de começar — auth, banco e armazenamento prontos',
|
|
1193
|
-
'new.q.backend.supabase.desc': 'Banco SQL (PostgreSQL) com mais controle',
|
|
1194
|
-
'new.q.backend.api.desc': 'Você já tem seu próprio servidor',
|
|
1195
|
-
|
|
1196
|
-
'new.q.mode': 'Como quer configurar?',
|
|
1197
|
-
'new.q.mode.quick': '⚡ Rapido — poucas perguntas, padrões inteligentes',
|
|
1198
|
-
'new.q.mode.advanced': '🛠 Avançado — todas as opções e credenciais agora',
|
|
1199
|
-
|
|
1200
|
-
'new.q.preset': 'Quais features incluir?',
|
|
1201
|
-
'new.q.preset.starter': '⚡ Starter — analytics + erros + onboarding',
|
|
1202
|
-
'new.q.preset.saas': '💰 SaaS — assinaturas + analytics + onboarding + feedback',
|
|
1203
|
-
'new.q.preset.content': '📱 Conteúdo — crash reports + analytics + onboarding + AI chat',
|
|
1204
|
-
'new.q.preset.full': '🚀 Completo — todas as features',
|
|
1205
|
-
'new.q.preset.custom': '⚙️ Personalizar — escolha feature a feature',
|
|
1206
|
-
'new.q.preset.none': '○ Nenhum — so o core',
|
|
1207
|
-
|
|
1208
|
-
'new.firebase.success.deployStep': '• Deploy do backend (de dentro da pasta do projeto):',
|
|
1209
|
-
|
|
1210
|
-
'cli.command.deploy.description': 'Publica o servidor no Firebase ou Supabase',
|
|
1211
|
-
'cli.command.check.description': 'Confere se as notificações push estão configuradas (use --fix para corrigir)',
|
|
1212
|
-
'deploy.q.project': 'Firebase Project ID:',
|
|
1213
|
-
'deploy.q.serviceAccount': 'Caminho para o service account JSON:',
|
|
1214
|
-
'deploy.detected.project': '✓ Projeto Firebase detectado:',
|
|
1215
|
-
'deploy.detected.serviceAccount': '✓ Service account detectado:',
|
|
1216
|
-
'deploy.error.notProject': 'Nenhum firebase.json encontrado. Execute kasy deploy de dentro da pasta do projeto.',
|
|
1217
|
-
|
|
1218
|
-
'cli.command.ios.description': 'Publica o app na App Store (precisa de Mac)',
|
|
1219
|
-
'cli.command.ios.configure.description': 'Configurar credenciais Apple para envio local do IPA',
|
|
1220
|
-
'cli.command.ios.release.description': 'Incrementa build, gera IPA e envia para App Store Connect',
|
|
1221
|
-
'cli.command.ios.build.description': 'Só gera o IPA (sem enviar)',
|
|
1222
|
-
'cli.command.ios.clean.description': 'Limpa caches Flutter/Xcode após falha no build iOS',
|
|
1223
|
-
'cli.command.ios.picker.intro': 'Publicar na App Store',
|
|
1224
|
-
'cli.command.ios.picker.message': 'O que você quer fazer?',
|
|
1225
|
-
'cli.command.ios.help.before': 'Como publicar na App Store:\n 1) kasy ios configure → faça isso uma vez (salva as credenciais Apple)\n 2) kasy ios release → rode em cada nova versão (build + envio)\n\nUse "build" se quiser só gerar o IPA, "clean" se um build falhou.\n',
|
|
1226
|
-
'cli.command.codemagic.description': 'Compila o app na nuvem (sem precisar de Mac)',
|
|
1227
|
-
'cli.command.codemagic.configure.description': 'Configurar credenciais da API Codemagic',
|
|
1228
|
-
'cli.command.codemagic.release.description': 'Iniciar build do workflow iOS no Codemagic',
|
|
1229
|
-
'cli.command.codemagic.status.description': 'Status do build Codemagic por ID',
|
|
1230
|
-
'cli.command.codemagic.picker.intro': 'Compilar na nuvem com Codemagic',
|
|
1231
|
-
'cli.command.codemagic.picker.message': 'O que você quer fazer?',
|
|
1232
|
-
'cli.command.codemagic.picker.statusHint': 'Pergunta o ID do build',
|
|
1233
|
-
'cli.command.codemagic.help.before': 'Como compilar com Codemagic (sem precisar de Mac):\n 1) kasy codemagic configure → faça isso uma vez (salva o token da API)\n 2) kasy codemagic release → inicia um build na nuvem a cada versão\n\nUse "status <buildId>" para acompanhar o progresso de um build.\n',
|
|
1234
|
-
|
|
1235
|
-
'ios.configure.title': 'App Store iOS — configuração',
|
|
1236
|
-
'ios.configure.bundleId': 'Bundle ID',
|
|
1237
|
-
'ios.configure.doc': 'Guia',
|
|
1238
|
-
'ios.configure.openingLinks': 'Abrindo App Store Connect no navegador…',
|
|
1239
|
-
'ios.configure.note.title': 'Vou precisar de 3 coisas do App Store Connect',
|
|
1240
|
-
'ios.configure.note.body': '1) API Key ID — em Users and Access → Keys.\n2) Issuer ID — no topo da mesma página.\n3) O arquivo .p8 (chave privada) baixado quando você criou a key.\n\nO App ID é opcional, só usa se tiver vários apps.',
|
|
1241
|
-
'ios.configure.q.apiKey': 'Key ID da API App Store Connect',
|
|
1242
|
-
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
1243
|
-
'ios.configure.q.p8Path': 'Caminho do arquivo AuthKey_XXXXX.p8 baixado',
|
|
1244
|
-
'ios.configure.q.appId': 'App ID no App Store Connect (opcional)',
|
|
1245
|
-
'ios.configure.q.required': 'Obrigatório',
|
|
1246
|
-
'ios.configure.q.p8NotFound': 'Arquivo não encontrado',
|
|
1247
|
-
'ios.configure.cancelled': 'Configuração cancelada',
|
|
1248
|
-
'ios.configure.success': 'Credenciais Apple salvas',
|
|
1249
|
-
'ios.configure.p8Installed': 'Chave instalada em',
|
|
1250
|
-
'ios.configure.next': 'Próximo passo',
|
|
1251
|
-
'ios.release.title': 'Gerando e enviando release iOS…',
|
|
1252
|
-
'ios.release.success': 'Release iOS enviada',
|
|
1253
|
-
'ios.release.task.building': 'Compilando IPA (pode levar 2-5 min)…',
|
|
1254
|
-
'ios.release.task.uploading': 'Enviando IPA para o App Store Connect…',
|
|
1255
|
-
'ios.release.task.done': 'Compilação + envio concluídos',
|
|
1256
|
-
'ios.release.task.failed': 'Compilação falhou — veja a saída abaixo',
|
|
1257
|
-
'ios.build.title': 'Gerando IPA iOS…',
|
|
1258
|
-
'ios.build.success': 'IPA gerado',
|
|
1259
|
-
'ios.build.task.building': 'Compilando IPA (pode levar 2-5 min)…',
|
|
1260
|
-
'ios.build.task.done': 'IPA pronto em build/ios/ipa/',
|
|
1261
|
-
'ios.build.task.failed': 'Compilação falhou — veja a saída abaixo',
|
|
1262
|
-
'ios.error.notProject': 'Não é um projeto Flutter iOS (pubspec.yaml + ios/ obrigatórios).',
|
|
1263
|
-
'ios.error.noScript': 'scripts/release-ios.sh não encontrado. Execute: kasy update ios-release',
|
|
1264
|
-
'ios.error.notMac': 'Release iOS local exige macOS com Xcode.',
|
|
1265
|
-
'ios.error.useCodemagic': 'Use release na nuvem',
|
|
1266
|
-
'ios.error.notConfigured': 'Credenciais Apple não configuradas',
|
|
1267
|
-
'ios.error.runConfigure': 'Execute: kasy ios configure',
|
|
1268
|
-
'ios.release.askConfigure': 'Quer configurar as credenciais Apple agora?',
|
|
1269
|
-
'ios.error.signing': 'Assinatura iOS não configurada (DEVELOPMENT_TEAM ausente).',
|
|
1270
|
-
'ios.error.signingHint': 'Abra ios/Runner.xcworkspace no Xcode → Runner → Signing & Capabilities → escolha seu Team.',
|
|
1271
|
-
'ios.error.googleUrlScheme': 'URL scheme iOS do Google Sign-In não configurado.',
|
|
1272
|
-
'ios.error.googleUrlSchemeHint': 'Correção: rode flutterfire configure, depois kasy ios clean, ou gere o projeto novamente antes do build.',
|
|
1273
|
-
'ios.warn.lowDisk': 'Pouco espaço em disco ({gb} GB livres; recomendado pelo menos {min} GB para builds Xcode).',
|
|
1274
|
-
'ios.hints.title': 'Cache do Xcode pode estar corrompido — tente:',
|
|
1275
|
-
'ios.hints.closeXcode': 'Feche o Xcode por completo',
|
|
1276
|
-
'ios.hints.retry': 'Depois tente de novo',
|
|
1277
|
-
'ios.hints.manual': 'Ou manualmente',
|
|
1278
|
-
'ios.clean.title': 'Limpando caches do build iOS…',
|
|
1279
|
-
'ios.clean.success': 'Caches limpos',
|
|
1280
|
-
'ios.clean.notMac': 'Limpeza iOS só está disponível no macOS.',
|
|
1281
|
-
'ios.clean.step.flutterClean': 'flutter clean',
|
|
1282
|
-
'ios.clean.step.derivedData': 'Remover DerivedData do Xcode (Runner)',
|
|
1283
|
-
'ios.clean.step.buildDir': 'Remover pastas build',
|
|
1284
|
-
'ios.clean.step.pubGet': 'flutter pub get',
|
|
1285
|
-
'ios.clean.step.pods': 'pod install',
|
|
1286
|
-
|
|
1287
|
-
'codemagic.configure.title': 'Codemagic — configuração',
|
|
1288
|
-
'codemagic.configure.doc': 'Guia',
|
|
1289
|
-
'codemagic.configure.checklist': 'Conclua assinatura + App Store Connect no painel Codemagic (veja o guia).',
|
|
1290
|
-
'codemagic.configure.openingLinks': 'Abrindo Codemagic no navegador…',
|
|
1291
|
-
'codemagic.configure.q.token': 'Token da API Codemagic',
|
|
1292
|
-
'codemagic.configure.q.appId': 'App ID no Codemagic',
|
|
1293
|
-
'codemagic.configure.q.workflowId': 'Workflow ID (do codemagic.yaml)',
|
|
1294
|
-
'codemagic.configure.q.branch': 'Branch Git para build',
|
|
1295
|
-
'codemagic.configure.q.required': 'Obrigatório',
|
|
1296
|
-
'codemagic.configure.cancelled': 'Configuração cancelada',
|
|
1297
|
-
'codemagic.configure.success': 'Credenciais Codemagic salvas',
|
|
1298
|
-
'codemagic.configure.next': 'Próximo passo',
|
|
1299
|
-
'codemagic.release.title': 'Disparando build no Codemagic…',
|
|
1300
|
-
'codemagic.release.triggered': 'Build iniciado',
|
|
1301
|
-
'codemagic.release.spin': 'Iniciando build no Codemagic…',
|
|
1302
|
-
'codemagic.release.spinDone': 'Build enfileirado no Codemagic',
|
|
1303
|
-
'codemagic.status.title': 'Status do build',
|
|
1304
|
-
'codemagic.status.usage': 'Uso: kasy codemagic status <buildId>',
|
|
1305
|
-
'codemagic.status.spin': 'Consultando status do build…',
|
|
1306
|
-
'codemagic.status.spinDone': 'Status obtido',
|
|
1307
|
-
'codemagic.error.notProject': 'Não é um projeto Flutter iOS (pubspec.yaml + ios/ obrigatórios).',
|
|
1308
|
-
'codemagic.error.notConfigured': 'Codemagic não configurado',
|
|
1309
|
-
'codemagic.error.addCi': 'Adicione CI primeiro: kasy add ci (cria codemagic.yaml)',
|
|
1310
|
-
'codemagic.error.runConfigure': 'Execute: kasy codemagic configure',
|
|
1311
|
-
'codemagic.error.googleUrlScheme': 'Build Codemagic bloqueado: URL scheme iOS do Google Sign-In não configurado.',
|
|
1312
|
-
|
|
1313
|
-
'doctor.ios.title': 'Release iOS',
|
|
1314
|
-
'doctor.ios.appleOk': 'Credenciais Apple configuradas',
|
|
1315
|
-
'doctor.ios.appleMissing': 'Credenciais Apple ausentes — kasy ios configure',
|
|
1316
|
-
'doctor.ios.p8Ok': 'Arquivo da chave API encontrado',
|
|
1317
|
-
'doctor.ios.p8Missing': 'AuthKey .p8 ausente — kasy ios configure',
|
|
1318
|
-
'doctor.ios.codemagicOk': 'Credenciais Codemagic configuradas',
|
|
1319
|
-
'doctor.ios.codemagicMissing': 'Codemagic opcional — kasy codemagic configure',
|
|
1320
|
-
'doctor.ios.notMac': 'Release iOS local exige macOS',
|
|
1321
|
-
'doctor.ios.doc': 'Documentação',
|
|
1322
|
-
'doctor.ios.signingOk': 'Assinatura Xcode (Development Team) configurada',
|
|
1323
|
-
'doctor.ios.signingMissing': 'Assinatura Xcode não definida — abra Runner no Xcode e escolha seu Team',
|
|
1324
|
-
'doctor.ios.googleUrlSchemeOk': 'URL scheme iOS do Google Sign-In configurado',
|
|
1325
|
-
'doctor.ios.googleUrlSchemeMissing': 'URL scheme iOS do Google Sign-In divergente',
|
|
1326
|
-
'doctor.ios.googleUrlSchemeSkipped': 'Check do URL scheme iOS do Google Sign-In ignorado (GoogleService-Info.plist ausente)',
|
|
1327
|
-
'doctor.ios.appleSignInEntitlementOk': 'Entitlement do Apple Sign-In configurado',
|
|
1328
|
-
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement do Apple Sign-In ausente — adicione a capability Sign In with Apple no Xcode',
|
|
1329
|
-
'doctor.ios.facebookOk': 'Credenciais do Facebook configuradas (iOS)',
|
|
1330
|
-
'doctor.ios.facebookPlaceholders': 'Credenciais do Facebook ainda são placeholders — atualize FacebookAppID e FacebookClientToken no Info.plist',
|
|
1331
|
-
'doctor.ios.facebookSkipped': 'Check das credenciais do Facebook ignorado (FacebookAppID ausente no Info.plist)',
|
|
1332
|
-
'doctor.android.facebookOk': 'Credenciais do Facebook configuradas (Android)',
|
|
1333
|
-
'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',
|
|
1334
|
-
|
|
1335
|
-
'doctor.revenuecat.title': 'RevenueCat',
|
|
1336
|
-
'doctor.revenuecat.keysOk': 'Chaves de API configuradas (iOS + Android)',
|
|
1337
|
-
'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',
|
|
1338
|
-
'doctor.revenuecat.keysTest': 'Usando chaves Test Store (test_) — substitua por appl_ e goog_ para produção',
|
|
1339
|
-
'doctor.revenuecat.webhookUrlSupabase': 'URL do webhook (cole no RevenueCat → Integrations → Webhooks)',
|
|
1340
|
-
'doctor.revenuecat.webhookUrlFirebase': 'URL do webhook: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
1341
|
-
|
|
1342
|
-
'update.iosRelease.success': 'Arquivos de release iOS atualizados',
|
|
1343
|
-
'add.iosRelease.success': 'Arquivos de release iOS adicionados',
|
|
1344
|
-
'add.iosRelease.already': 'Arquivos de release iOS já existem',
|
|
1345
|
-
|
|
1346
|
-
'new.api.q.baseUrl': 'Qual e a URL base da sua API?',
|
|
1347
|
-
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
1348
|
-
'new.firebase.banner': '🔥 Novo app Flutter — Firebase',
|
|
1349
|
-
'new.firebase.subtitle': 'Projeto completo: auth, Firestore, notificações, login social e muito mais.',
|
|
1350
|
-
'new.prereq.title': 'Antes de começar, certifique-se de que você tem:',
|
|
1351
|
-
'new.firebase.prereq.title': 'Antes de começar, certifique-se de que você tem:',
|
|
1352
|
-
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
1353
|
-
'new.firebase.prereq.create.2': '2. Plano Blaze (cartão de crédito — necessário para Cloud Functions)',
|
|
1354
|
-
'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.',
|
|
1355
|
-
'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.',
|
|
1356
|
-
'new.firebase.prereq.create.note': ' Projeto e APIs serão criados automaticamente.',
|
|
1357
|
-
'new.firebase.prereq.create.pushNote': ' Projeto Firebase para FCM + Remote Config será criado automaticamente (sem conta de serviço).',
|
|
1358
|
-
'new.firebase.create.creatingPush': 'Criando projeto Firebase para notificações push…',
|
|
1359
|
-
'new.firebase.create.successPush': 'Projeto Firebase criado para FCM + Remote Config.',
|
|
1360
|
-
'new.firebase.prereq.1': '1. Firebase CLI instalado (npm i -g firebase-tools) + firebase login',
|
|
1361
|
-
'new.firebase.prereq.2': '2. Projeto Firebase criado em console.firebase.google.com',
|
|
1362
|
-
'new.firebase.prereq.3': '3. Plano Blaze ativado (cartao de credito — necessário para Cloud Functions)',
|
|
1363
|
-
'new.firebase.prereq.4': '4. gcloud CLI instalado + gcloud auth login (usado para ativar APIs automaticamente)',
|
|
1364
|
-
'new.firebase.prereq.5': '5. Antes do deploy: ative Secret Manager API e Firebase Storage (ver PREREQUISITES.md ou links apos gerar)',
|
|
1365
|
-
'new.firebase.prereq.doc': ' Checklist completo: PREREQUISITES.md',
|
|
1366
|
-
|
|
1367
|
-
'new.firebase.q.appName': 'Qual e o nome do seu app?',
|
|
1368
|
-
'new.firebase.q.appName.hint': 'ex: Meu App Incrivel',
|
|
1369
|
-
'new.firebase.q.appName.required': 'O nome do app é obrigatório.',
|
|
1370
|
-
|
|
1371
|
-
'new.firebase.q.bundleId': 'Qual e o identificador único (Bundle ID) do seu app?',
|
|
1372
|
-
'new.firebase.q.bundleId.hint': 'Funciona como um endereço para o seu app, ex: com.minhaempresa.meuapp',
|
|
1373
|
-
'new.firebase.q.bundleId.invalid': 'Formato inválido. Use: com.empresa.app',
|
|
1374
|
-
'new.firebase.q.bundleId.required': 'O Bundle ID é obrigatório.',
|
|
1375
|
-
|
|
1376
|
-
'new.firebase.q.projectId': 'Qual e o ID do seu projeto Firebase?',
|
|
1377
|
-
'new.firebase.q.projectId.hint': 'Encontre no Firebase Console → seu projeto → Configurações',
|
|
1378
|
-
'new.firebase.q.projectId.required': 'O Firebase Project ID é obrigatório.',
|
|
1379
|
-
|
|
1380
|
-
'new.firebase.q.modules': 'Quais features opcionais você quer incluir?',
|
|
1381
|
-
'new.firebase.q.modules.hint': 'Espaco para selecionar, Enter para confirmar',
|
|
1382
|
-
'new.modules.header.common': '── Comuns (todos os backends) ──',
|
|
1383
|
-
'new.modules.header.features': '── Telas e features ──',
|
|
1384
|
-
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
1385
|
-
'new.modules.header.ci': '── CI/CD ──',
|
|
1386
|
-
'new.modules.header.monetization': '── Monetizacao ──',
|
|
1387
|
-
'new.firebase.module.revenuecat': '💰 RevenueCat (ativa Subscriptions)',
|
|
1388
|
-
'new.firebase.module.sentry': '🚨 Crash Reports (Sentry)',
|
|
1389
|
-
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
1390
|
-
'new.firebase.module.facebook': '👤 Facebook (Login + Ads)',
|
|
1391
|
-
'new.firebase.module.web': '🌐 Web Support (PWA, somente Firebase)',
|
|
1392
|
-
'new.firebase.module.widget': '📱 Home Widget (iOS/Android)',
|
|
1393
|
-
'new.firebase.module.llm_chat': '🤖 AI Chat (OpenAI/Gemini)',
|
|
1394
|
-
'new.firebase.module.local_notifications': '🔔 Local Reminders (sem servidor)',
|
|
1395
|
-
'new.firebase.module.feedback': '💬 Feature Requests (requer Firebase ou Supabase)',
|
|
1396
|
-
'new.firebase.module.ci': '⚙️ CI/CD (GitHub + Codemagic)',
|
|
1397
|
-
'new.firebase.module.onboarding': '👋 Onboarding (fluxo de boas-vindas)',
|
|
1398
|
-
|
|
1399
|
-
'new.firebase.q.secrets.configureNow': 'Configurar as secrets do servidor agora? (webhook RevenueCat, Meta Ads)',
|
|
1400
|
-
'new.firebase.q.secrets.configureNow.hint': 'Se não agora, veja o README para os comandos de configuração depois',
|
|
1401
|
-
'new.firebase.q.secrets.later': '• Secrets do servidor não configuradas — serão configuradas durante `kasy deploy`.',
|
|
1402
|
-
'new.firebase.q.revenuecat.webhookKey': 'Chave secreta do webhook (um valor aleatorio foi sugerido — pressione Enter para aceitar ou digite o seu)',
|
|
1403
|
-
'new.firebase.q.revenuecat.webhookKey.hint': 'Salve esse valor. No painel RevenueCat, cole como: Bearer <esse-valor>',
|
|
1404
|
-
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (Conversions API, opcional)',
|
|
1405
|
-
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (opcional)',
|
|
1406
|
-
'new.firebase.q.revenuecat.android': 'Chave de API RevenueCat para Android',
|
|
1407
|
-
'new.firebase.q.revenuecat.ios': 'Chave de API RevenueCat para iOS',
|
|
1408
|
-
'new.firebase.q.paywall': 'Qual estilo de paywall?',
|
|
1409
|
-
'new.firebase.q.paywall.hint': 'Layout da tela de assinaturas — pode alterar depois no RevenueCat',
|
|
1410
|
-
'new.firebase.q.revenuecat.web': 'Habilitar assinaturas na web (RevenueCat Web Billing)?',
|
|
1411
|
-
'new.firebase.q.revenuecat.web.hint': 'Requer Web Billing no dashboard RevenueCat + Stripe. Deixe desmarcado se não precisar.',
|
|
1412
|
-
'new.firebase.q.revenuecat.webKey': 'Chave API RevenueCat Web Billing (rcb_xxx ou rcb_sb_xxx, opcional — configure depois)',
|
|
1413
|
-
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: adicione RC_WEB_API_KEY (launch.json) para assinaturas na web',
|
|
1414
|
-
'new.firebase.q.sentry.dsn': 'DSN do Sentry (deixe em branco para configurar depois)',
|
|
1415
|
-
'new.firebase.q.sentry.dsn.invalid': 'DSN inválido. Formato esperado: https://chave@host/project-id',
|
|
1416
|
-
'new.firebase.q.mixpanel.token': 'Token do Mixpanel (deixe em branco para configurar depois)',
|
|
1417
|
-
'new.firebase.q.facebook.appId': 'App ID do Facebook',
|
|
1418
|
-
'new.firebase.q.facebook.appId.required': 'App ID do Facebook é obrigatório.',
|
|
1419
|
-
'new.firebase.q.facebook.appId.invalid': 'App ID do Facebook deve ser numerico (ex: 1234567890).',
|
|
1420
|
-
'new.firebase.q.facebook.token': 'Token do App Facebook',
|
|
1421
|
-
'new.firebase.q.facebook.token.required': 'Token do App Facebook é obrigatório.',
|
|
1422
|
-
'new.firebase.q.revenuecat.android.required': 'Chave Android do RevenueCat é obrigatória.',
|
|
1423
|
-
'new.firebase.q.revenuecat.ios.required': 'Chave iOS do RevenueCat é obrigatória.',
|
|
1424
|
-
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID deve ser numerico (ex: 1234567890).',
|
|
1425
|
-
'new.firebase.q.revenuecat.webKey.invalid': 'Chave Web Billing deve começar com rcb_ (ex: rcb_sb_xxx ou rcb_xxx).',
|
|
1426
|
-
|
|
1427
|
-
'new.firebase.confirm.title': 'Resumo da configuração:',
|
|
1428
|
-
'new.firebase.confirm.app': 'App',
|
|
1429
|
-
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
1430
|
-
'new.firebase.confirm.project': 'Firebase',
|
|
1431
|
-
'new.firebase.confirm.modules': 'Features',
|
|
1432
|
-
'new.firebase.confirm.none': 'nenhum',
|
|
1433
|
-
'new.firebase.confirm.proceed': 'Criar o projeto agora?',
|
|
1434
|
-
|
|
1435
|
-
'new.firebase.step.copying': 'Criando seu projeto...',
|
|
1436
|
-
'new.firebase.step.pubGet': 'Instalando pacotes Flutter...',
|
|
1437
|
-
'new.firebase.step.buildRunner': 'Gerando código (Riverpod/Freezed)...',
|
|
1438
|
-
'new.firebase.step.flutterfire': 'Configurando Firebase (flutterfire)...',
|
|
1439
|
-
'new.firebase.step.deploy': 'Fazendo deploy das Cloud Functions + regras do Firestore...',
|
|
1440
|
-
'new.firebase.step.done': 'Pronto!',
|
|
1
|
+
/**
|
|
2
|
+
* Kasy CLI i18n entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* Messages live in lib/utils/i18n/messages-{en,pt,es}.js — one file per
|
|
5
|
+
* language so merge conflicts stay isolated and reviewers can read each
|
|
6
|
+
* language end-to-end. This file only ties the three together and exposes
|
|
7
|
+
* the public translator API.
|
|
8
|
+
*/
|
|
1441
9
|
|
|
1442
|
-
|
|
1443
|
-
'new.firebase.success.open': 'Abra o projeto:',
|
|
1444
|
-
'new.firebase.success.run': 'Rode o app:',
|
|
1445
|
-
'new.firebase.success.runMake': 'Ou use make: make run | make run-ios | make run-android',
|
|
1446
|
-
'new.firebase.success.deviceSetup': 'Antes de rodar em dispositivo:',
|
|
1447
|
-
'new.firebase.success.deviceSetup.ios': 'iOS: conecte o iPhone por cabo → confie neste computador → Xcode → Window → Devices → parear',
|
|
1448
|
-
'new.firebase.success.deviceSetup.android': 'Android: Configurações → Opções do desenvolvedor → ativar depuração USB',
|
|
1449
|
-
'new.firebase.success.hotReload': "Hot reload: pressione 'r' no terminal enquanto o app roda. Mudanças aparecem na hora.",
|
|
1450
|
-
'new.firebase.success.oneLiner': 'Ou copie e cole para entrar e executar:',
|
|
1451
|
-
'new.firebase.success.configure': 'Configure quando quiser:',
|
|
1452
|
-
'new.firebase.success.alreadyDone': 'Já configurado pela CLI:',
|
|
1453
|
-
'new.firebase.success.manualNeeded': 'Configure manualmente (se necessário):',
|
|
1454
|
-
'new.firebase.success.apn': '• Chave APN (push iOS): Firebase Console → Config. do Projeto → Cloud Messaging',
|
|
1455
|
-
'new.firebase.success.social': '• Ative o login social no Firebase Console → Authentication (Google e Apple já estão no código; so ative la)',
|
|
1456
|
-
'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.',
|
|
1457
|
-
'new.firebase.success.sentry': '• Sentry: Para relatórios de erro em produção. Pegue o DSN em sentry.io. Já no launch.json para dev. Para release: --dart-define=SENTRY_DSN=xxx',
|
|
1458
|
-
'new.firebase.success.mixpanel': '• Mixpanel: Para analytics em produção. Já no launch.json para dev. Para release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
1459
|
-
'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". Notificações push são exclusivas de mobile e desativadas automaticamente na web.',
|
|
10
|
+
'use strict';
|
|
1460
11
|
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
'new.firebase.deployFailed.firestore': '• Firestore: crie o banco (Criar banco → Modo Nativo)',
|
|
1465
|
-
'new.firebase.deployFailed.storage': '• Storage: clique em Começar',
|
|
1466
|
-
'new.firebase.deployFailed.orGcloud': 'Ou crie o Firestore via CLI:',
|
|
1467
|
-
'new.firebase.success.deployLater': '• Deploy do backend quando estiver pronto (de dentro da pasta do projeto):',
|
|
1468
|
-
'new.firebase.success.beforeDeploy': 'Antes do firebase deploy, ative (clique para abrir):',
|
|
1469
|
-
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
1470
|
-
'new.firebase.success.firestore': '• Firestore (crie o banco se não existir)',
|
|
1471
|
-
'new.firebase.success.storage': '• Firebase Storage (Começar)',
|
|
1472
|
-
'new.firebase.success.auth': '• Firebase Authentication (Email/Senha)',
|
|
1473
|
-
'new.firebase.success.security': '🔒 .gitignore exclui .env e outros segredos. Cloud Functions usam secrets no servidor.',
|
|
12
|
+
const en = require('./i18n/messages-en');
|
|
13
|
+
const pt = require('./i18n/messages-pt');
|
|
14
|
+
const es = require('./i18n/messages-es');
|
|
1474
15
|
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
'new.firebase.interactive.prompt1': 'Você já criou o banco Firestore e habilitou a Autenticação no link acima?',
|
|
1482
|
-
'new.firebase.interactive.prompt2': 'Você já fez o upgrade pro Plano Blaze? (Obrigatório para deploy de funções)',
|
|
1483
|
-
'new.firebase.interactive.googleAuthNote': '* Ative o Google Sign-In manualmente (Email/Senha e Anônimo já foram ativados): ',
|
|
1484
|
-
'new.firebase.interactive.billingNeeded': 'Plano Blaze ainda não ativo. Ative no link acima e aguarde a detecção automática.',
|
|
1485
|
-
'new.firebase.interactive.billingWaiting': 'Verificando status do Blaze...',
|
|
1486
|
-
'new.firebase.interactive.billingTimeout': 'Plano Blaze não confirmado apos o tempo limite. Deploy ignorado — rode manualmente quando estiver pronto.',
|
|
1487
|
-
'new.firebase.interactive.authWarn': 'Não foi possível ativar Email/Senha e Anônimo automaticamente. Ative manualmente:',
|
|
1488
|
-
'new.firebase.existing.apisFailed': 'Não foi possível ativar APIs:',
|
|
1489
|
-
'new.firebase.existing.googleSignInManual': 'Google Sign-In: ative manualmente em Authentication → Sign-in method → Google',
|
|
1490
|
-
|
|
1491
|
-
'new.firebase.interactive.ready': 'Pronto para publicar Push Notifications + Regras agora?',
|
|
1492
|
-
'new.firebase.interactive.deploying': 'Fazendo deploy das Cloud Functions + Regras (Storage e Firestore)...',
|
|
1493
|
-
'new.firebase.interactive.errorTitle': 'Ocorreu um erro durante o deploy.',
|
|
1494
|
-
'new.firebase.interactive.errorHint': 'Verifique se você ativou o Firestore e vinculou um cartão de crédito para o Plano Blaze.',
|
|
1495
|
-
'new.firebase.interactive.laterHint': 'Você pode publicar depois abrindo o terminal na pasta do projeto e rodando: ',
|
|
1496
|
-
'new.firebase.interactive.skipped': 'Deploy de Funções ignorado. Você pode publicar depois quando quiser.',
|
|
1497
|
-
|
|
1498
|
-
'new.firebase.warn.flutterfire': '⚠️ FlutterFire não conseguiu gerar firebase_options_dev.dart automaticamente.',
|
|
1499
|
-
'new.firebase.warn.flutterfire.manual': 'Execute manualmente na pasta do projeto:',
|
|
1500
|
-
|
|
1501
|
-
'new.firebase.error.templateMissing': 'Template Firebase não encontrado em: {path}. Certifique-se de que a pasta Firebase/ existe.',
|
|
1502
|
-
'new.firebase.error.dirNotEmpty': 'O diretório "{path}" já existe e não está vazio.',
|
|
1503
|
-
'new.firebase.error.aborted': 'Setup cancelado.',
|
|
1504
|
-
|
|
1505
|
-
'new.supabase.prereq.1': '1. Conta Supabase em supabase.com',
|
|
1506
|
-
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI instalados (ambos obrigatórios)',
|
|
1507
|
-
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase necessário para push)',
|
|
1508
|
-
'new.supabase.prereq.login': ' Se criar manualmente: tenha URL e anon key do projeto prontos',
|
|
1509
|
-
'new.supabase.loginRequired': '⚠️ Você precisa estar logado para criar projeto. Execute supabase login primeiro.',
|
|
1510
|
-
'new.supabase.loginCommand': ' supabase login',
|
|
1511
|
-
'new.supabase.success.done.db': '• Banco: tabelas, politicas RLS',
|
|
1512
|
-
'new.supabase.success.done.storage': '• Storage: bucket kasy com politicas',
|
|
1513
|
-
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
1514
|
-
'new.supabase.success.done.secrets': '• Secrets da Edge Function (se informados)',
|
|
1515
|
-
'new.supabase.success.done.launch': '• launch.json com Sentry, Mixpanel, RevenueCat',
|
|
1516
|
-
'new.supabase.success.auth': '• Auth: Email já vem ativado. Ative Google, Apple e Facebook em: {authUrl}',
|
|
1517
|
-
'new.supabase.success.storage': '• Storage: Bucket kasy criado com politicas (já pronto)',
|
|
1518
|
-
'new.supabase.success.fcm': '• Push (FCM): Configure no Firebase Console (plano Blaze). App já pronto para Supabase + FCM. URL: {fcmUrl}',
|
|
1519
|
-
'new.supabase.success.deployLater': '• Deploy do backend quando estiver pronto (de dentro da pasta do projeto):',
|
|
1520
|
-
|
|
1521
|
-
'new.api.prereq.1': '1. Sua API REST rodando e acessivel',
|
|
1522
|
-
'new.api.prereq.2': '2. URL base da API (ex: https://api.yourapp.com)',
|
|
1523
|
-
'new.api.prereq.3': '3. Firebase CLI obrigatório para notificações push (FCM)',
|
|
1524
|
-
'new.api.success.backendUrl': '• Aponte o BACKEND_URL para sua API (launch.json)',
|
|
1525
|
-
'new.api.success.fcm': '• Firebase e necessário para notificações push (FCM) — configure a chave APNs no console do Firebase',
|
|
1526
|
-
'new.api.success.auth': '• Implemente os endpoints de auth social (Google, Apple) no seu backend',
|
|
1527
|
-
|
|
1528
|
-
'new.outdated.hint': 'projetos criados agora não terão as últimas melhorias.',
|
|
1529
|
-
'new.outdated.upgradeNow': 'Atualizar antes de criar? (requer assinatura ativa)',
|
|
1530
|
-
'new.outdated.upgraded': 'kasy atualizado! Rode kasy new novamente.',
|
|
1531
|
-
'new.success.title': 'Projeto criado com sucesso!',
|
|
1532
|
-
'new.success.nextSteps': 'Proximos passos:',
|
|
1533
|
-
'new.success.step.cd': 'Entre na pasta do projeto:',
|
|
1534
|
-
'new.success.step.deploy': 'Publique o backend no Firebase:',
|
|
1535
|
-
'new.success.step.run': 'Execute o app (com suas chaves configuradas):',
|
|
1536
|
-
'new.success.step.run.vscode': '(ou F5 no VS Code)',
|
|
1537
|
-
'new.success.step.console': 'Abra o console do backend:',
|
|
1538
|
-
'new.fcm.generating': 'Gerando chave de Service Account FCM…',
|
|
1539
|
-
'new.sha1.registering': 'Registrando SHA-1 para Google Sign-In (Android)…',
|
|
1540
|
-
'new.sha1.failed': 'SHA-1 não adicionado automaticamente: {error}',
|
|
1541
|
-
'new.sha1.manual': 'Adicione manualmente para o Google Sign-In funcionar no Android:',
|
|
1542
|
-
'new.sha1.skipped.apiFailed': 'SHA-1 não adicionado automaticamente. Motivo: {error}',
|
|
1543
|
-
'new.sha1.skipped.other': 'SHA-1 não adicionado: {reason}',
|
|
1544
|
-
'new.sha1.addManually': 'Adicione manualmente: Firebase Console → Configurações do projeto → Seus apps → Android → Adicionar impressão digital',
|
|
1545
|
-
'new.sha1.added': '✓ SHA-1 adicionado (Google Sign-In)',
|
|
1546
|
-
'new.firestore.created': '✓ Firestore criado automaticamente',
|
|
1547
|
-
'new.firestore.notCreated.error': '⚠ Firestore não criado. Motivo: {error}',
|
|
1548
|
-
'new.firestore.notCreated': '⚠ Firestore não criado automaticamente',
|
|
1549
|
-
'new.storage.created': '✓ Firebase Storage criado automaticamente',
|
|
1550
|
-
'new.storage.notCreated.error': '⚠ Storage não criado. Motivo: {error}',
|
|
1551
|
-
'new.storage.notCreated': '⚠ Storage não criado automaticamente',
|
|
1552
|
-
'new.activateManually': 'Ative manualmente no console:',
|
|
1553
|
-
'new.fcm.serverConfig': 'Configure no servidor: FIREBASE_SERVICE_ACCOUNT_JSON="$(cat .kasy/fcm-service-account.json)"',
|
|
1554
|
-
'new.apns.warning': '⚠ Push iOS: configure a APNs Key no Firebase Console',
|
|
1555
|
-
'new.apns.step1': '1. Apple Developer Portal → Keys → criar APNs Key (.p8)',
|
|
1556
|
-
'new.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → fazer upload da APNs Key',
|
|
1557
|
-
'new.firebase.create.estimatedTime': '(geralmente 3-5 min — não feche o terminal)',
|
|
1558
|
-
'new.internet.warning': '📶 Verifique se você está com uma internet estável — esta etapa precisa de conexão.',
|
|
1559
|
-
|
|
1560
|
-
// run command
|
|
1561
|
-
'cli.command.run.description': 'Roda o app no celular, simulador ou navegador',
|
|
1562
|
-
'cli.command.reset.description': 'Desinstala o app no simulador/emulador/dispositivo pra testar como primeira instalação',
|
|
1563
|
-
'reset.title': 'Resetar app no dispositivo',
|
|
1564
|
-
'reset.scanning': 'Procurando simuladores, emuladores e dispositivos conectados...',
|
|
1565
|
-
'reset.prompt.pickDevice': 'Em qual deles você quer resetar?',
|
|
1566
|
-
'reset.resetting': 'Resetando',
|
|
1567
|
-
'reset.reinstalling': 'Reinstalando o app...',
|
|
1568
|
-
'reset.success.uninstalled': 'App desinstalado. Todos os dados e permissões foram limpos.',
|
|
1569
|
-
'reset.info.notInstalled': 'O app não estava instalado neste dispositivo.',
|
|
1570
|
-
'reset.warn.noDevices': 'Nenhum simulador, emulador ou dispositivo em execução. Inicie um e tente de novo.',
|
|
1571
|
-
'reset.warn.nothingSelected': 'Nenhum dispositivo selecionado.',
|
|
1572
|
-
'reset.warn.iosUninstallFailed': 'simctl uninstall falhou.',
|
|
1573
|
-
'reset.warn.androidUninstallFailed': 'adb uninstall não retornou sucesso.',
|
|
1574
|
-
'reset.warn.iosDeviceManual': 'iPhone físico: apague o app manualmente (segure o ícone → Remover app), depois reinstale com kasy run.',
|
|
1575
|
-
'reset.warn.iosDeviceUninstallFailed': 'devicectl não conseguiu desinstalar. Verifique se o iPhone está desbloqueado e confia neste Mac.',
|
|
1576
|
-
'reset.warn.webIncognito': 'Web: abra o app em uma janela anônima/privada do navegador pra testar como visitante novo.',
|
|
1577
|
-
'reset.warn.unknownPlatform': 'Plataforma não suportada',
|
|
1578
|
-
'reset.error.notFlutterProject': 'Nenhum pubspec.yaml encontrado. Execute este comando dentro de um projeto Flutter.',
|
|
1579
|
-
'reset.error.noIdentifier': 'Não consegui ler o bundle id nem o package name Android deste projeto.',
|
|
1580
|
-
'reset.error.noBundleId': 'Bundle id do iOS não encontrado.',
|
|
1581
|
-
'reset.error.noPackageName': 'applicationId do Android não encontrado.',
|
|
1582
|
-
'reset.outro.skipped': 'Pronto. O app não foi desinstalado.',
|
|
1583
|
-
'reset.outro.uninstalledOnly': 'Pronto. Rode kasy run pra reinstalar.',
|
|
1584
|
-
'reset.outro.cancelled': 'Cancelado. O app não foi desinstalado.',
|
|
1585
|
-
'reset.prompt.xcodeOpen': 'O Xcode está aberto e vai atrapalhar a instalação. O que você quer fazer?',
|
|
1586
|
-
'reset.prompt.xcodeOpen.close': 'Fechar o Xcode automaticamente (recomendado)',
|
|
1587
|
-
'reset.prompt.xcodeOpen.skip': 'Deixar o Xcode aberto e tentar mesmo assim',
|
|
1588
|
-
'reset.prompt.xcodeOpen.cancel': 'Cancelar o reset',
|
|
1589
|
-
'reset.info.xcodeClosed': 'Xcode fechado.',
|
|
1590
|
-
'reset.prompt.reinstallNow': 'App removido. Confere no dispositivo e reinstala agora?',
|
|
1591
|
-
'run.launching': 'Iniciando app Flutter...',
|
|
1592
|
-
'run.updateHint.prefix': 'Melhorias disponíveis para o projeto —',
|
|
1593
|
-
'run.updateHint.suffix': 'para ver o que há de novo',
|
|
1594
|
-
'run.spinner.building': 'Iniciando Flutter…',
|
|
1595
|
-
'run.spinner.ready': 'Flutter pronto — use r (reload), R (restart), q (sair)',
|
|
1596
|
-
'run.spinner.failed': 'Flutter run falhou antes de iniciar',
|
|
1597
|
-
'run.stage.gradleFirstTime': 'Compilando Android (1ª vez leva 5-15 min — Gradle baixando dependências)…',
|
|
1598
|
-
'run.stage.gradle': 'Compilando Android…',
|
|
1599
|
-
'run.stage.xcode': 'Compilando iOS…',
|
|
1600
|
-
'run.stage.pods': 'Instalando pods iOS…',
|
|
1601
|
-
'run.stage.installing': 'Instalando no dispositivo…',
|
|
1602
|
-
'run.stage.syncing': 'Sincronizando arquivos com o dispositivo…',
|
|
1603
|
-
'run.stage.buildSuccess': 'Build pronto — abrindo o app…',
|
|
1604
|
-
'run.error.notFlutterProject': 'Nenhum pubspec.yaml encontrado. Execute este comando dentro de um projeto Flutter.',
|
|
1605
|
-
'run.error.flutterNotFound': 'Flutter não encontrado. Verifique se o Flutter está instalado e no PATH.',
|
|
1606
|
-
|
|
1607
|
-
// doctor project checks
|
|
1608
|
-
'doctor.project.title': 'Projeto',
|
|
1609
|
-
'doctor.project.appName': 'Nome do app',
|
|
1610
|
-
'doctor.project.backend': 'Backend',
|
|
1611
|
-
'doctor.project.bundleId': 'Bundle ID',
|
|
1612
|
-
'doctor.project.pubGet': 'Dependencias instaladas (pubspec.lock presente)',
|
|
1613
|
-
'doctor.project.pubGetMissing': 'Execute flutter pub get — pubspec.lock não encontrado',
|
|
1614
|
-
'doctor.project.modules': 'Features ativas',
|
|
1615
|
-
'doctor.project.noModules': 'Nenhuma feature opcional ativa',
|
|
1616
|
-
|
|
1617
|
-
// add command
|
|
1618
|
-
'cli.command.add.description': 'Adiciona algo novo ao app (ex: kasy add ai_chat)',
|
|
1619
|
-
|
|
1620
|
-
// docs command
|
|
1621
|
-
'cli.command.docs.description': 'Abre a documentação completa',
|
|
1622
|
-
|
|
1623
|
-
// splash command
|
|
1624
|
-
'cli.command.splash.description': 'Troca os logos da splash (claro/escuro) e regenera os assets nativos',
|
|
1625
|
-
'splash.intro': 'Splash screen',
|
|
1626
|
-
'splash.validating': 'Validando arquivos PNG...',
|
|
1627
|
-
'splash.validated': 'PNGs estão bons',
|
|
1628
|
-
'splash.copying': 'Copiando logos para assets/images/...',
|
|
1629
|
-
'splash.copied': 'Logos copiados',
|
|
1630
|
-
'splash.generating': 'Regenerando splash nativa (Android, iOS, Web)...',
|
|
1631
|
-
'splash.generated': 'Splash nativa regenerada',
|
|
1632
|
-
'splash.done': 'Pronto. Rode "flutter run" para ver a nova splash.',
|
|
1633
|
-
'splash.warn.title': 'Avisos',
|
|
1634
|
-
'splash.warn.noAlphaLight': '{path} não tem canal alpha (fundo transparente). O logo vai aparecer com fundo sólido em vez de transparente.',
|
|
1635
|
-
'splash.warn.noAlphaDark': '{path} não tem canal alpha (fundo transparente). O logo vai aparecer com fundo sólido em vez de transparente.',
|
|
1636
|
-
'splash.warn.smallLight': 'Logo claro tem {w}x{h}. Recomendado pelo menos 768x768 para evitar bordas borradas.',
|
|
1637
|
-
'splash.warn.smallDark': 'Logo escuro tem {w}x{h}. Recomendado pelo menos 768x768 para evitar bordas borradas.',
|
|
1638
|
-
'splash.summary.title': 'Salvo',
|
|
1639
|
-
'splash.summary.light': 'Modo claro',
|
|
1640
|
-
'splash.summary.dark': 'Modo escuro',
|
|
1641
|
-
'splash.skipGenerate.title': 'Geração pulada',
|
|
1642
|
-
'splash.skipGenerate.hint': 'Rode `dart run flutter_native_splash:create` quando quiser regenerar.',
|
|
1643
|
-
'splash.error.notKasyProject': 'pubspec.yaml não encontrado. Rode este comando dentro de um projeto Flutter/Kasy.',
|
|
1644
|
-
'splash.error.bothRequired': '--light e --dark são obrigatórios.',
|
|
1645
|
-
'splash.error.fileNotFound': 'Arquivo não encontrado: {path}',
|
|
1646
|
-
'splash.error.notPng': 'Um dos arquivos não é um PNG válido.',
|
|
1647
|
-
'splash.error.generateFailed': 'flutter_native_splash:create falhou. Veja a saída acima.',
|
|
1648
|
-
|
|
1649
|
-
// icon command
|
|
1650
|
-
'cli.command.icon.description': 'Troca o ícone do app (iOS + Android) e regenera os assets nativos',
|
|
1651
|
-
'icon.intro': 'Ícone do app',
|
|
1652
|
-
'icon.validating': 'Validando arquivo PNG...',
|
|
1653
|
-
'icon.validated': 'PNG está bom',
|
|
1654
|
-
'icon.copying': 'Copiando ícone para assets/images/icon.png...',
|
|
1655
|
-
'icon.copied': 'Ícone copiado',
|
|
1656
|
-
'icon.generating': 'Regenerando ícones nativos (Android + iOS)...',
|
|
1657
|
-
'icon.generated': 'Ícones nativos regenerados',
|
|
1658
|
-
'icon.done': 'Pronto. Desinstale o app do dispositivo e reinstale para ver o novo ícone.',
|
|
1659
|
-
'icon.warn.title': 'Avisos',
|
|
1660
|
-
'icon.warn.notSquare': 'Ícone tem {w}x{h} (não é quadrado). A imagem vai ser esticada. Use uma imagem quadrada (1024x1024 recomendado).',
|
|
1661
|
-
'icon.warn.small': 'Ícone tem {w}x{h}. Recomendado pelo menos 1024x1024 (App Store exige esse tamanho).',
|
|
1662
|
-
'icon.warn.hasAlpha': 'Ícone tem transparência. iOS rejeita ícones com canal alpha — flutter_launcher_icons remove automaticamente (remove_alpha_ios: true).',
|
|
1663
|
-
'icon.summary.title': 'Salvo',
|
|
1664
|
-
'icon.summary.icon': 'Ícone do app',
|
|
1665
|
-
'icon.skipGenerate.title': 'Geração pulada',
|
|
1666
|
-
'icon.skipGenerate.hint': 'Rode `dart run flutter_launcher_icons` quando quiser regenerar.',
|
|
1667
|
-
'icon.reinstall.title': 'Importante',
|
|
1668
|
-
'icon.reinstall.hint': 'iOS e Android cacheiam o ícone antigo. Desinstale o app e reinstale para ver o novo.',
|
|
1669
|
-
'icon.error.notKasyProject': 'pubspec.yaml não encontrado. Rode este comando dentro de um projeto Flutter/Kasy.',
|
|
1670
|
-
'icon.error.imageRequired': '--image é obrigatório.',
|
|
1671
|
-
'icon.error.fileNotFound': 'Arquivo não encontrado: {path}',
|
|
1672
|
-
'icon.error.notPng': 'O arquivo não é um PNG válido.',
|
|
1673
|
-
'icon.error.generateFailed': 'flutter_launcher_icons falhou. Veja a saída acima.',
|
|
1674
|
-
|
|
1675
|
-
// favicon command
|
|
1676
|
-
'cli.command.favicon.description': 'Troca o favicon / ícone PWA da web e regenera os assets web',
|
|
1677
|
-
'favicon.intro': 'Favicon web',
|
|
1678
|
-
'favicon.validating': 'Validando arquivo PNG...',
|
|
1679
|
-
'favicon.validated': 'PNG está bom',
|
|
1680
|
-
'favicon.copying': 'Copiando favicon para assets/images/favicon.png...',
|
|
1681
|
-
'favicon.copied': 'Favicon copiado',
|
|
1682
|
-
'favicon.generating': 'Regenerando ícones web (favicon + tamanhos PWA)...',
|
|
1683
|
-
'favicon.generated': 'Ícones web regenerados',
|
|
1684
|
-
'favicon.done': 'Pronto. Rode "flutter run -d chrome" para ver o novo favicon.',
|
|
1685
|
-
'favicon.warn.title': 'Avisos',
|
|
1686
|
-
'favicon.warn.notSquare': 'Favicon tem {w}x{h} (não é quadrado). Vai ser esticado. Use uma imagem quadrada (512x512+ recomendado).',
|
|
1687
|
-
'favicon.warn.small': 'Favicon tem {w}x{h}. Recomendado pelo menos 512x512 para ficar nítido nas telas de instalação da PWA.',
|
|
1688
|
-
'favicon.summary.title': 'Salvo',
|
|
1689
|
-
'favicon.summary.favicon': 'Favicon',
|
|
1690
|
-
'favicon.skipGenerate.title': 'Geração pulada',
|
|
1691
|
-
'favicon.skipGenerate.hint': 'Rode `dart run flutter_launcher_icons` quando quiser regenerar.',
|
|
1692
|
-
'favicon.error.notKasyProject': 'pubspec.yaml não encontrado. Rode este comando dentro de um projeto Flutter/Kasy.',
|
|
1693
|
-
'favicon.error.imageRequired': '--image é obrigatório.',
|
|
1694
|
-
'favicon.error.fileNotFound': 'Arquivo não encontrado: {path}',
|
|
1695
|
-
'favicon.error.notPng': 'O arquivo não é um PNG válido.',
|
|
1696
|
-
'favicon.error.generateFailed': 'flutter_launcher_icons falhou. Veja a saída acima.',
|
|
1697
|
-
|
|
1698
|
-
// notifications command
|
|
1699
|
-
'cli.command.notifications.description': 'Edita os textos das notificações locais e lembretes',
|
|
1700
|
-
'cli.command.notifications.text.description': 'Define títulos e mensagens das notificações locais',
|
|
1701
|
-
'cli.command.notifications.picker.intro': 'Editar textos das notificações',
|
|
1702
|
-
'cli.command.notifications.picker.message': 'O que você quer fazer?',
|
|
1703
|
-
'notifications.error.notKasyProject': 'kit_setup.json não encontrado. Execute dentro de um projeto Kasy.',
|
|
1704
|
-
'notifications.error.noI18n': 'lib/i18n/*.i18n.json não encontrado neste projeto.',
|
|
1705
|
-
'notifications.error.noFeatures': 'lib/core/config/features.dart não encontrado.',
|
|
1706
|
-
'notifications.error.notEnabled': 'Notificações locais desativadas. Execute: kasy add local_notifications',
|
|
1707
|
-
'notifications.error.cancelled': 'Cancelado.',
|
|
1708
|
-
'notifications.prompt.intro': 'Textos de notificação local',
|
|
1709
|
-
'notifications.prompt.hint': 'Demo Home = teste instantâneo em Features. Lembrete = alerta agendado em Configurações.',
|
|
1710
|
-
'notifications.prompt.demoTitle': 'Demo Home — título da notificação',
|
|
1711
|
-
'notifications.prompt.demoBody': 'Demo Home — descrição / corpo',
|
|
1712
|
-
'notifications.prompt.reminderTitle': 'Lembrete agendado — título',
|
|
1713
|
-
'notifications.prompt.reminderBody': 'Lembrete agendado — corpo',
|
|
1714
|
-
'notifications.prompt.required': 'Obrigatório.',
|
|
1715
|
-
'notifications.writing': 'Atualizando lib/i18n/*.i18n.json...',
|
|
1716
|
-
'notifications.written': 'Atualizado: {langs}',
|
|
1717
|
-
'notifications.slang': 'Executando dart run slang...',
|
|
1718
|
-
'notifications.slangDone': 'Traducoes regeneradas',
|
|
1719
|
-
'notifications.slangFailed': 'dart run slang falhou — execute manualmente no projeto',
|
|
1720
|
-
'notifications.done': 'Textos de notificação local atualizados.',
|
|
1721
|
-
'notifications.summary.demo': 'Home → Features (demo):',
|
|
1722
|
-
'notifications.summary.reminder': 'Configurações → Lembretes (agendado):',
|
|
1723
|
-
|
|
1724
|
-
'add.list.title': 'Features do projeto',
|
|
1725
|
-
'add.error.noModule': 'Informe o nome da feature ou use --list para ver as disponíveis.',
|
|
1726
|
-
'add.error.notKasyProject': 'kit_setup.json não encontrado. Execute este comando dentro de um projeto Kasy.',
|
|
1727
|
-
'add.error.unknownModule': 'Feature desconhecida: {module}\nDisponiveis: {list}',
|
|
1728
|
-
'add.alreadyActive': 'A feature "{module}" já está ativa neste projeto.',
|
|
1729
|
-
'add.applying': 'Adicionando feature: {module}',
|
|
1730
|
-
'add.applyingPatch': 'Aplicando mudanças da feature...',
|
|
1731
|
-
'add.patchApplied': 'Patch aplicado',
|
|
1732
|
-
'add.patchFailed': 'Patch falhou — verifique a saída acima',
|
|
1733
|
-
'add.pubGet': 'Instalando pacotes do Flutter (flutter pub get)...',
|
|
1734
|
-
'add.pubGetDone': 'Dependencias atualizadas',
|
|
1735
|
-
'add.pubGetFailed': 'Falha ao instalar pacotes do Flutter — execute `flutter pub get` manualmente',
|
|
1736
|
-
'add.buildRunner': 'Gerando código (Riverpod/Freezed)...',
|
|
1737
|
-
'add.buildRunnerDone': 'Geração de código concluída',
|
|
1738
|
-
'add.buildRunnerFailed': 'Geração de código falhou — execute `dart run build_runner build` manualmente',
|
|
1739
|
-
'add.success': 'Feature "{module}" adicionada com sucesso.',
|
|
1740
|
-
'add.cancelled': 'Cancelado.',
|
|
1741
|
-
'add.prompt.sentryDsn': 'Sentry DSN (deixe em branco para configurar depois):',
|
|
1742
|
-
'add.prompt.mixpanelToken': 'Mixpanel Token (deixe em branco para configurar depois):',
|
|
1743
|
-
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (deixe em branco para configurar depois):',
|
|
1744
|
-
'add.prompt.rcIosKey': 'RevenueCat iOS API key (deixe em branco para configurar depois):',
|
|
1745
|
-
'add.note.facebook': 'Adicione seu Facebook App ID e token no .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
1746
|
-
'new.q.llm_chat.configureNow': 'Configurar o agente de Chat LLM agora?',
|
|
1747
|
-
'new.q.llm_chat.configureNow.hint': 'Pode pular e executar "kasy add llm_chat" depois',
|
|
1748
|
-
'add.llm_chat.reconfigure': 'Feature já ativa — reconfigurando apenas as credenciais.',
|
|
1749
|
-
'add.prompt.llmProvider': 'Provedor de LLM:',
|
|
1750
|
-
'add.prompt.llmSystemPrompt': 'Instrução do agente — system prompt (deixe em branco para nenhuma):\n Exemplo: "Você e um assistente de suporte do app Fitsync. Responda apenas sobre treinos."\n >',
|
|
1751
|
-
'add.prompt.llmApiKey': 'Chave de API (OpenAI ou Gemini) — fica no servidor, nunca no app (deixe em branco para configurar depois):',
|
|
1752
|
-
'add.prompt.llmEndpoint': 'URL do seu endpoint LLM (deixe em branco para configurar depois):',
|
|
1753
|
-
'add.llm_chat.settingSecret': 'Salvando chave de API como secret no servidor...',
|
|
1754
|
-
'add.llm_chat.secretSet': 'Chave de API salva como secret',
|
|
1755
|
-
'add.llm_chat.secretFailed': 'Não foi possível salvar o secret automaticamente — configure manualmente (veja instruções abaixo)',
|
|
1756
|
-
'add.llm_chat.skipSecret': 'Chave de API ignorada — configure antes do deploy via CLI do servidor',
|
|
1757
|
-
'add.llm_chat.deploying': 'Fazendo deploy da função LLM no servidor...',
|
|
1758
|
-
'add.llm_chat.deployed': 'Função LLM deployada com sucesso',
|
|
1759
|
-
'add.llm_chat.deployFailed': 'Deploy automático falhou — faca o deploy manualmente (veja instruções abaixo)',
|
|
1760
|
-
'add.llm_chat.nextSteps.firebase': '\n Proximos passos:\n 1. O LLM_CHAT_ENDPOINT no .vscode/launch.json já foi preenchido.\n 2. Rode o app: kasy run\n',
|
|
1761
|
-
'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 já foi preenchido.\n 3. Rode o app: kasy run\n',
|
|
1762
|
-
'add.llm_chat.nextSteps.supabase': '\n Proximos passos:\n 1. O LLM_CHAT_ENDPOINT no .vscode/launch.json já foi preenchido.\n 2. Rode o app: kasy run\n',
|
|
1763
|
-
'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 já foi preenchido.\n 3. Rode o app: kasy run\n',
|
|
1764
|
-
'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',
|
|
1765
|
-
'cli.command.remove.description': 'Remove algo que você não usa mais (ex: kasy remove sentry)',
|
|
1766
|
-
'remove.error.noModule': 'Informe o nome da feature. Uso: kasy remove <feature>',
|
|
1767
|
-
'remove.error.notKasyProject': 'kit_setup.json não encontrado. Execute este comando dentro de um projeto Kasy.',
|
|
1768
|
-
'remove.error.unknownModule': 'Feature desconhecida: {module}\nDisponiveis: {list}',
|
|
1769
|
-
'remove.error.notActive': 'A feature "{module}" não está ativa neste projeto.',
|
|
1770
|
-
'remove.confirm': 'Remover a feature "{module}"? Isso vai deletar arquivos e dependências.',
|
|
1771
|
-
'remove.cancelled': 'Cancelado.',
|
|
1772
|
-
'remove.removing': 'Removendo feature: {module}',
|
|
1773
|
-
'remove.pubGet': 'Instalando pacotes do Flutter (flutter pub get)...',
|
|
1774
|
-
'remove.pubGetDone': 'Dependencias atualizadas',
|
|
1775
|
-
'remove.pubGetFailed': 'Falha ao instalar pacotes do Flutter — execute `flutter pub get` manualmente',
|
|
1776
|
-
'remove.buildRunner': 'Gerando código (Riverpod/Freezed)...',
|
|
1777
|
-
'remove.buildRunnerDone': 'Geração de código concluída',
|
|
1778
|
-
'remove.buildRunnerFailed': 'Geração de código falhou — execute `dart run build_runner build` manualmente',
|
|
1779
|
-
'remove.success': 'Feature "{module}" removida com sucesso.',
|
|
1780
|
-
'remove.warn.ci': 'Arquivos de CI removidos. Se tinha workflows customizados, restaure-os pelo git.',
|
|
1781
|
-
'remove.warn.sentry.shared': 'sentry_flutter mantido — ainda necessário para features ativas (revenuecat/facebook).',
|
|
1782
|
-
'cli.command.update.description': 'Atualiza partes do app para a última versão (ex: kasy update components)',
|
|
1783
|
-
'cli.command.update.targetArg': 'Alvo para atualizar (ex.: revenuecat, sentry, components)',
|
|
1784
|
-
'update.error.noProject': 'kit_setup.json não encontrado. Execute dentro de um projeto Kasy.',
|
|
1785
|
-
'update.error.unknownModule': 'Feature desconhecida: {module}\nDisponíveis: {list}',
|
|
1786
|
-
'update.error.unknownTarget': 'Alvo de atualização desconhecido: {module}\nDisponiveis: {list}',
|
|
1787
|
-
'update.error.notActive': 'A feature "{module}" não está ativa neste projeto.',
|
|
1788
|
-
'update.alreadyUpToDate': 'Projeto já está atualizado (v{version}).',
|
|
1789
|
-
'update.status': 'Projeto: v{from} → CLI: v{to}',
|
|
1790
|
-
'update.noVersion': 'Projeto foi gerado sem rastreamento de versão. Todas as features podem ser atualizadas.',
|
|
1791
|
-
'update.changesTitle': 'Atualizações disponíveis:',
|
|
1792
|
-
'update.reapplyTitle': 'Sem mudancas novas — pode reaplicar se precisar:',
|
|
1793
|
-
'update.howToUpdate': 'Para atualizar uma feature:',
|
|
1794
|
-
'update.howToUpdateComponents': 'Para atualizar componentes base:',
|
|
1795
|
-
'update.warn.commit': 'Isso vai sobrescrever os arquivos da feature "{module}". Faca commit de tudo antes de continuar.',
|
|
1796
|
-
'update.warn.commitComponents': 'Isso vai sobrescrever arquivos dos componentes base. Faca commit de tudo antes de continuar.',
|
|
1797
|
-
'update.confirm': 'Sobrescrever arquivos da feature "{module}" com a versão mais recente?',
|
|
1798
|
-
'update.confirmComponents': 'Sobrescrever arquivos dos componentes base com a versão mais recente?',
|
|
1799
|
-
'update.confirmCore': 'Sobrescrever arquivos do core (animacoes, widgets, tema, ferramentas de dev) com a versão mais recente?',
|
|
1800
|
-
'update.cancelled': 'Cancelado.',
|
|
1801
|
-
'update.applying': 'Aplicando atualização da feature: {module}',
|
|
1802
|
-
'update.applyingComponents': 'Aplicando atualização dos componentes base...',
|
|
1803
|
-
'update.applyingCore': 'Aplicando atualização dos arquivos de core...',
|
|
1804
|
-
'update.applied': 'Feature {module} atualizada',
|
|
1805
|
-
'update.appliedComponents': '{count} arquivos de componentes base atualizados',
|
|
1806
|
-
'update.appliedCore': '{count} arquivos de core atualizados',
|
|
1807
|
-
'update.applyFailed': 'Falha ao aplicar atualização da feature {module}',
|
|
1808
|
-
'update.applyComponentsFailed': 'Falha ao aplicar atualização dos componentes base',
|
|
1809
|
-
'update.noPatch': 'Feature "{module}" não tem arquivos para atualizar (feature so de configuração).',
|
|
1810
|
-
'update.noComponentFiles': 'Nenhum arquivo de componente base foi encontrado para atualizar.',
|
|
1811
|
-
'update.pubGet': 'Instalando pacotes do Flutter (flutter pub get)...',
|
|
1812
|
-
'update.pubGetDone': 'Dependencias atualizadas',
|
|
1813
|
-
'update.pubGetFailed': 'Falha ao instalar pacotes do Flutter — execute `flutter pub get` manualmente',
|
|
1814
|
-
'update.buildRunner': 'Gerando código (Riverpod/Freezed)...',
|
|
1815
|
-
'update.buildRunnerDone': 'Geração de código concluída',
|
|
1816
|
-
'update.buildRunnerFailed': 'Geração de código falhou — execute `dart run build_runner build` manualmente',
|
|
1817
|
-
'update.success': 'Feature "{module}" atualizada com sucesso.',
|
|
1818
|
-
'update.componentsSuccess': 'Componentes base atualizados com sucesso.',
|
|
1819
|
-
'update.coreSuccess': 'Arquivos de core atualizados com sucesso.',
|
|
1820
|
-
'check.intro': 'Kasy Check — Notificações Push',
|
|
1821
|
-
'check.firebase.detected': 'Backend Firebase',
|
|
1822
|
-
'check.firebase.adcInfo': 'Firebase usa Application Default Credentials — nenhuma configuração extra necessária.',
|
|
1823
|
-
'check.apns.warn': 'Push iOS requer APNs Key (não verificável via CLI)',
|
|
1824
|
-
'check.apns.where': 'Firebase Console → Cloud Messaging → app iOS → Chave de autenticação APNs',
|
|
1825
|
-
'check.done': 'Pronto',
|
|
1826
|
-
'check.notKasy': 'Esse diretório não parece ser um projeto Kasy.',
|
|
1827
|
-
'check.aborted': 'Cancelado',
|
|
1828
|
-
'check.supabase.notLinked': 'Projeto Supabase não vinculado',
|
|
1829
|
-
'check.supabase.notLinkedHint': 'execute: supabase link --project-ref SEU_REF',
|
|
1830
|
-
'check.supabase.linked': 'Projeto vinculado',
|
|
1831
|
-
'check.spin.secrets': 'Verificando secrets…',
|
|
1832
|
-
'check.spin.secretsDone': 'Secrets verificados',
|
|
1833
|
-
'check.secrets.listFailed': 'Não foi possível listar secrets',
|
|
1834
|
-
'check.secrets.checkLogin': 'verifique: supabase login',
|
|
1835
|
-
'check.fbProjId.ok': 'FIREBASE_PROJECT_ID configurado',
|
|
1836
|
-
'check.fbProjId.missing': 'FIREBASE_PROJECT_ID ausente',
|
|
1837
|
-
'check.fbProjId.fixHint': 'Corrija: supabase secrets set FIREBASE_PROJECT_ID="{id}"',
|
|
1838
|
-
'check.fbProjId.fixed': 'FIREBASE_PROJECT_ID → configurado automaticamente',
|
|
1839
|
-
'check.fbProjId.fixFailed': 'FIREBASE_PROJECT_ID → falhou ao configurar',
|
|
1840
|
-
'check.fbSak.ok': 'FIREBASE_SERVICE_ACCOUNT_JSON configurado',
|
|
1841
|
-
'check.fbSak.missing': 'FIREBASE_SERVICE_ACCOUNT_JSON ausente',
|
|
1842
|
-
'check.fbSak.spin': 'Gerando e configurando chave FCM…',
|
|
1843
|
-
'check.fbSak.spinDone': 'Chave FCM gerada',
|
|
1844
|
-
'check.fbSak.fixed': 'FIREBASE_SERVICE_ACCOUNT_JSON → configurado automaticamente',
|
|
1845
|
-
'check.fbSak.fixFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → falhou ao configurar',
|
|
1846
|
-
'check.fbSak.genFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → não foi possível gerar chave',
|
|
1847
|
-
'check.fbSak.manual': "Manual: Firebase Console → Configurações → Contas de serviço → Gerar chave\nDepois: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat chave.json)'",
|
|
1848
|
-
'check.fbSak.hint': "Corrija automaticamente: kasy check --fix\nOu manualmente: Firebase Console → Configurações → Contas de serviço → Gerar chave\nDepois: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat chave.json)'",
|
|
1849
|
-
'check.fn.spin': 'Verificando edge functions…',
|
|
1850
|
-
'check.fn.spinDone': 'Edge functions verificadas',
|
|
1851
|
-
'check.fn.listFailed': 'Não foi possível listar edge functions',
|
|
1852
|
-
'check.fn.deployed': 'Edge function send-push-notification deployada',
|
|
1853
|
-
'check.fn.missing': 'Edge function send-push-notification não deployada',
|
|
1854
|
-
'check.fn.deploySpin': 'Publicando send-push-notification…',
|
|
1855
|
-
'check.fn.deployDone': 'send-push-notification → deployada automaticamente',
|
|
1856
|
-
'check.fn.deployFailed': 'send-push-notification → falhou no deploy',
|
|
1857
|
-
'check.fn.hint': 'Corrija automaticamente: kasy check --fix\nOu manualmente: supabase functions deploy send-push-notification',
|
|
1858
|
-
'deploy.firebase.intro': 'Deploy — Firebase',
|
|
1859
|
-
'deploy.firebase.spin': 'Publicando no Firebase...',
|
|
1860
|
-
'deploy.firebase.spinDone': 'Deploy do Firebase concluído',
|
|
1861
|
-
'deploy.apns.title': 'Push iOS: configure a APNs Key no Firebase Console',
|
|
1862
|
-
'deploy.apns.step1': '1. Apple Developer Portal → Keys → criar APNs Key (.p8)',
|
|
1863
|
-
'deploy.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → upload da APNs Key',
|
|
1864
|
-
'deploy.supabase.intro': 'Deploy — Supabase',
|
|
1865
|
-
'deploy.supabase.notLinked': 'Projeto Supabase não está vinculado neste diretório.',
|
|
1866
|
-
'deploy.supabase.linkHint': 'Execute: supabase link --project-ref SEU_PROJECT_REF',
|
|
1867
|
-
'deploy.supabase.projectRef': 'Project ref: {ref}',
|
|
1868
|
-
'deploy.supabase.sakAlready': 'FIREBASE_SERVICE_ACCOUNT_JSON já configurado',
|
|
1869
|
-
'deploy.supabase.sakSpin': 'Gerando chave FCM (Service Account)…',
|
|
1870
|
-
'deploy.supabase.sakSpinDone': 'Chave FCM gerada',
|
|
1871
|
-
'deploy.supabase.sakManual': "Configure manualmente: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='...'",
|
|
1872
|
-
'deploy.supabase.sakNoGS': 'google-services.json não encontrado — configure manualmente',
|
|
1873
|
-
'deploy.supabase.fnSpin': 'Publicando edge functions…',
|
|
1874
|
-
'deploy.supabase.fnSpinDone': 'Edge functions processadas',
|
|
1875
|
-
'deploy.supabase.fnNone': 'edge functions (nenhuma encontrada)',
|
|
1876
|
-
'deploy.outro': 'Deploy concluído',
|
|
1877
|
-
},
|
|
1878
|
-
es: {
|
|
1879
|
-
'cli.tagline': 'Crea apps móviles sin dolor de configuración',
|
|
1880
|
-
'cli.description': 'Crea apps Flutter sin dolor de configuración.',
|
|
1881
|
-
'cli.usage': '<comando> [argumentos]',
|
|
1882
|
-
'cli.option.version': 'Mostrar versión instalada',
|
|
1883
|
-
'cli.option.lang': 'Idioma (en, pt, es)',
|
|
1884
|
-
'cli.help.afterError': '(ejecuta con --help para detalles de uso)',
|
|
1885
|
-
'cli.help.more': 'Ejecuta "{command}" para detalles de un comando específico.',
|
|
1886
|
-
'cli.help.quickStart': 'Crear un nuevo app:',
|
|
1887
|
-
'cli.help.optionDescription': 'Mostrar ayuda del comando',
|
|
1888
|
-
'cli.help.commandDescription': 'Mostrar ayuda del comando',
|
|
1889
|
-
'cli.help.inline.options': '[opciones]',
|
|
1890
|
-
'cli.help.heading.usage': 'Uso',
|
|
1891
|
-
'cli.help.heading.arguments': 'Argumentos',
|
|
1892
|
-
'cli.help.heading.options': 'Opciones',
|
|
1893
|
-
'cli.help.heading.globalOptions': 'Opciones globales',
|
|
1894
|
-
'cli.help.heading.commands': 'Comandos',
|
|
1895
|
-
'cli.help.group.start': 'Para empezar',
|
|
1896
|
-
'cli.help.group.work': 'Trabajar en tu app',
|
|
1897
|
-
'cli.help.group.publish': 'Publicar y probar',
|
|
1898
|
-
'cli.help.group.maintenance': 'Mantenimiento de Kasy CLI',
|
|
1899
|
-
'cli.help.group.advanced': 'Avanzado',
|
|
1900
|
-
'cli.help.group.other': 'Otros',
|
|
1901
|
-
'cli.help.tip': 'Tip: ejecuta `kasy <comando> --help` para más detalles. Usa --lang pt|en|es para cambiar idioma.',
|
|
1902
|
-
'cli.command.setup.description': '(avanzado) Configura un proyecto Flutter existente',
|
|
1903
|
-
'cli.command.new.description': 'Crea una app nueva (ej: kasy new mi-app)',
|
|
1904
|
-
'cli.command.new.projectName': 'nombre del proyecto',
|
|
1905
|
-
'cli.command.new.projectNameArg': 'Nombre de la carpeta del proyecto',
|
|
1906
|
-
'prompt.projectName.enter': '¿Cuál es el nombre de tu proyecto?',
|
|
1907
|
-
'prompt.projectName.required': 'El nombre del proyecto es obligatorio.',
|
|
1908
|
-
'prompt.projectName.default': 'mi_app',
|
|
1909
|
-
'cli.command.setup.directoryName': 'directorio',
|
|
1910
|
-
'cli.command.setup.directoryArg': 'Directorio destino (por defecto: carpeta actual .)',
|
|
1911
|
-
'cli.command.setup.langName': 'idioma',
|
|
1912
|
-
'cli.command.setup.langOption': 'Idioma de prompts (en, pt, es)',
|
|
1913
|
-
'cli.command.setup.backendOption': 'Adapter de backend (firebase, supabase, api)',
|
|
1914
|
-
'cli.command.setup.featuresOption': 'Features opcionales separadas por coma (web,widget,llm_chat,revenuecat,ci)',
|
|
1915
|
-
'cli.command.help.paramName': 'comando',
|
|
1916
|
-
'cli.command.doctor.description': 'Verifica si tu computadora está lista para correr Kasy',
|
|
1917
|
-
'cli.command.modules.description': 'Muestra lo que viene incluido y lo que puedes añadir',
|
|
1918
|
-
'cli.command.validate.description': '(avanzado) Valida combinaciones de backend y features',
|
|
1919
|
-
'cli.command.validate.analyzeOnlyOption': 'Ejecuta solo flutter analyze (sin build)',
|
|
1920
|
-
'cli.command.version.description': 'Muestra la versión instalada de Kasy',
|
|
1921
|
-
'cli.command.upgrade.description': 'Actualiza la Kasy CLI a la última versión',
|
|
1922
|
-
'cli.command.uninstall.description': 'Desinstala Kasy de esta computadora',
|
|
1923
|
-
'cli.command.upgrade.running': 'Actualizando la CLI kasy...',
|
|
1924
|
-
'cli.command.upgrade.done': 'kasy actualizado correctamente!',
|
|
1925
|
-
'cli.command.uninstall.running': 'Desinstalando la CLI kasy...',
|
|
1926
|
-
'cli.command.uninstall.done': 'kasy desinstalado. Hasta luego!',
|
|
1927
|
-
'new.checks.environment': 'Verificaciones de entorno',
|
|
1928
|
-
'new.checks.environment.checking': 'Verificando entorno',
|
|
1929
|
-
'new.checks.environment.done': 'Entorno listo',
|
|
1930
|
-
'setup.checks.backend.checking': 'Verificando herramientas {backend}',
|
|
1931
|
-
'setup.checks.backend.done': 'Herramientas {backend} listas',
|
|
1932
|
-
'new.checks.firebaseForPush': 'Nota: Firebase CLI es obligatorio para notificaciones push (Firebase Cloud Messaging / FCM) en todos los backends.',
|
|
1933
|
-
'new.checks.requiredBlock': 'Faltan herramientas obligatorias. Instalalas para continuar.',
|
|
1934
|
-
'new.checks.installFirebase': 'Firebase: npm i -g firebase-tools && firebase login. FlutterFire: dart pub global activate flutterfire_cli',
|
|
1935
|
-
'new.checks.installSupabase': 'Supabase: npm i -g supabase (o brew install supabase/tap/supabase) && supabase login',
|
|
1936
|
-
'new.checks.installSupabase.darwin': 'Supabase: brew install supabase/tap/supabase && supabase login (o npm i -g supabase)',
|
|
1937
|
-
'new.checks.installSupabase.win32': 'Supabase: npm i -g supabase && supabase login',
|
|
1938
|
-
'new.checks.installSupabase.linux': 'Supabase: npm i -g supabase && supabase login',
|
|
1939
|
-
'setup.checks.environment': 'Verificaciones de entorno',
|
|
1940
|
-
'setup.checks.prepareFirebase': 'Herramientas Firebase (push, remote config)',
|
|
1941
|
-
'setup.checks.backend': 'Verificaciones de backend ({backend})',
|
|
1942
|
-
'setup.firebase.installing': 'Instalando Firebase CLI...',
|
|
1943
|
-
'setup.supabase.installing': 'Instalando Supabase CLI...',
|
|
1944
|
-
'setup.flutterfire.installing': 'Instalando FlutterFire CLI...',
|
|
1945
|
-
'setup.warn.hang': 'Si se cuelga, ejecuta manualmente: flutterfire --versión',
|
|
1946
|
-
'setup.warn.supabase': '¿Usas Supabase o API propia? Firebase sigue siendo útil para push y remote config.',
|
|
1947
|
-
'doctor.title': 'Kasy Doctor',
|
|
1948
|
-
'doctor.baseEnvironment': 'Entorno base',
|
|
1949
|
-
'doctor.optionalBackend': 'Herramientas opcionales de backend',
|
|
1950
|
-
'doctor.requiredMissing': 'Faltan dependencias obligatorias. Corrige los errores anteriores y ejecuta doctor nuevamente.',
|
|
1951
|
-
'doctor.requiredPassed': '✓ Verificaciones obligatorias de entorno aprobadas.',
|
|
1952
|
-
'modules.backends': 'Backends disponibles:',
|
|
1953
|
-
'modules.featuresBase': 'Siempre incluido:',
|
|
1954
|
-
'modules.features': 'Features opcionales:',
|
|
1955
|
-
'modules.tag.firebaseOnly': 'solo Firebase',
|
|
1956
|
-
'modules.tag.requiresDb': 'requiere Firebase o Supabase',
|
|
1957
|
-
'modules.tag.enhances': 'activa {target}',
|
|
1958
|
-
'modules.hint.subscriptionNoRc': 'Tip: la pantalla de Subscriptions está incluida pero inactiva. Ejecuta `kasy add revenuecat` para habilitar pagos reales.',
|
|
1959
|
-
'modules.feature.base.authentication.description': 'Registro, inicio de sesión y gestión de cuenta',
|
|
1960
|
-
'modules.feature.base.home.description': 'Pantalla principal de la app después del login',
|
|
1961
|
-
'modules.feature.base.settings.description': 'Tema, idioma, cuenta y preferencias',
|
|
1962
|
-
'modules.feature.base.notifications.description': 'Notificaciones push via Firebase Cloud Messaging (funciona con cualquier backend)',
|
|
1963
|
-
'modules.feature.base.subscription.description': 'Pantalla y modelo de suscripcion premium (anade RevenueCat para habilitar pagos reales)',
|
|
1964
|
-
'modules.backend.firebase.description': 'Adapter de backend Firebase',
|
|
1965
|
-
'modules.backend.supabase.description': 'Adapter de backend Supabase',
|
|
1966
|
-
'modules.backend.api.description': 'Adapter de backend API REST/GraphQL',
|
|
1967
|
-
'modules.feature.sentry.description': 'Seguimiento de errores y crashes con Sentry',
|
|
1968
|
-
'modules.feature.analytics.description': 'Seguimiento de eventos de analytics (Firebase Analytics)',
|
|
1969
|
-
'modules.feature.facebook.description': 'Login de Facebook y seguimiento de eventos Meta Ads (siempre juntos)',
|
|
1970
|
-
'modules.feature.revenuecat.description': 'Habilita pagos reales en la pantalla de Subscriptions',
|
|
1971
|
-
'modules.feature.onboarding.description': 'Flujo de bienvenida mostrado en el primer acceso',
|
|
1972
|
-
'modules.feature.web.description': 'Soporte Web/PWA',
|
|
1973
|
-
'modules.feature.widget.description': 'Widget de pantalla inicial iOS/Android',
|
|
1974
|
-
'modules.feature.llm_chat.description': 'Pantalla de chat con IA usando OpenAI o Gemini',
|
|
1975
|
-
'modules.feature.feedback.description': 'Solicitudes y votacion de features dentro de la app',
|
|
1976
|
-
'modules.feature.local_notifications.description': 'Recordatorios locales programados por el usuario (sin servidor)',
|
|
1977
|
-
'modules.feature.ci.description': 'CI/CD: GitHub/GitLab (tests + build) + Codemagic (publicación en tiendas)',
|
|
1978
|
-
'checks.checking': 'Verificando {name}...',
|
|
1979
|
-
'checks.found': '{name} encontrado',
|
|
1980
|
-
'checks.foundWithVersion': '{name} listo ({versión})',
|
|
1981
|
-
'checks.missing': '{name} ausente',
|
|
1982
|
-
'checks.notFound': '{name} no encontrado',
|
|
1983
|
-
'checks.flutter.warn': 'Flutter SDK no encontrado. Instala Flutter para compilar y ejecutar apps: https://docs.flutter.dev/get-started/install',
|
|
1984
|
-
'checks.install.failed': 'instalación automática falló — ejecuta el comando manualmente',
|
|
1985
|
-
'checks.diagnostic.xcodeLicense': '{name} está instalado, pero Xcode necesita que aceptes la licencia. Ejecuta: sudo xcodebuild -license',
|
|
1986
|
-
'checks.diagnostic.xcodeCli': '{name} está instalado, pero faltan las Command Line Tools de Xcode. Ejecuta: xcode-select --install',
|
|
1987
|
-
'banner.title': 'Kasy CLI · Generador Flutter SaaS',
|
|
1988
|
-
'welcome.firstRun': '¡Bienvenido a Kasy CLI!',
|
|
1989
|
-
'welcome.chooseLanguage': 'Primero, elige tu idioma:',
|
|
1990
|
-
'prompt.language.select': 'Elige tu idioma',
|
|
1991
|
-
'prompt.cancelled': 'Comando cancelado por el usuario.',
|
|
1992
|
-
'license.required': '🔑 Se requiere clave de activación para usar Kasy CLI',
|
|
1993
|
-
'license.checking': 'Validando clave de activación...',
|
|
1994
|
-
'license.saved': '✅ Clave validada correctamente',
|
|
1995
|
-
'license.invalid': 'Clave inválida. Verifica tu clave o contacta soporte en kasy.dev.',
|
|
1996
|
-
'license.expired': '❌ Tu suscripción ha expirado. Renueva en kasy.dev.',
|
|
1997
|
-
'license.inactive': '❌ Tu clave fue desactivada. Contacta soporte en kasy.dev.',
|
|
1998
|
-
'license.offlineWarning': '⚠️ No se pudo conectar al servidor — continuando sin conexión.',
|
|
1999
|
-
'license.subscriptionExpired': '❌ Tu suscripcion expiró. Las actualizaciones requieren plan activo. Renueva en kasy.dev.\n Tus proyectos siguen funcionando — solo las actualizaciones están bloqueadas.',
|
|
2000
|
-
'prompt.license.enter': '👉 Ingresa tu clave de activación (XXXX-XXXX-XXXX-XXXX)',
|
|
2001
|
-
'prompt.license.invalid': 'Formato inválido. Usa XXXX-XXXX-XXXX-XXXX.',
|
|
2002
|
-
'prompt.appName.enter': 'Ingresa el nombre de tu app',
|
|
2003
|
-
'prompt.appName.required': 'El nombre de la app es obligatorio.',
|
|
2004
|
-
'prompt.bundleId.enter': 'Ingresa el bundle ID (com.company.app)',
|
|
2005
|
-
'prompt.bundleId.required': 'El bundle ID es obligatorio.',
|
|
2006
|
-
'prompt.bundleId.invalid': 'El bundle ID debe verse como com.company.app.',
|
|
2007
|
-
'prompt.backend.select': 'Elige el proveedor de backend',
|
|
2008
|
-
'prompt.features.select': 'Elige las features opcionales a incluir',
|
|
2009
|
-
'prompt.features.instructions': 'Espacio para marcar, enter para confirmar',
|
|
2010
|
-
'prompt.multiselect.instructions': '\nInstrucciones:\n ↑/↓: Resaltar opción\n ←/→/[space]: Marcar/desmarcar\n a: Marcar/desmarcar todos\n enter/return: Confirmar',
|
|
2011
|
-
'prompt.multiselect.warnDisabled': 'Usa ↓ para ir a una opción seleccionable, Space para marcar, Enter para confirmar',
|
|
2012
|
-
'prompt.firebase.projectId.enter': 'Ingresa el Firebase Project ID',
|
|
2013
|
-
'prompt.firebase.projectId.required': 'Firebase Project ID es obligatorio.',
|
|
2014
|
-
'prompt.supabase.url.enter': 'Ingresa la URL de Supabase',
|
|
2015
|
-
'prompt.supabase.url.required': 'La URL de Supabase es obligatoria.',
|
|
2016
|
-
'prompt.supabase.anonKey.enter': 'Ingresa la clave anon de Supabase',
|
|
2017
|
-
'prompt.supabase.anonKey.required': 'La clave anon de Supabase es obligatoria.',
|
|
2018
|
-
'new.supabase.q.create': '¿Crear nuevo proyecto Supabase o usar existente?',
|
|
2019
|
-
'new.supabase.q.create.create': '✨ Crear nuevo proyecto (recomendado para principiantes)',
|
|
2020
|
-
'new.supabase.q.create.existing': '📂 Usar proyecto existente',
|
|
2021
|
-
'new.firebase.q.setupMode': '¿Cómo quieres configurar Firebase?',
|
|
2022
|
-
'new.firebase.q.setupMode.push': 'Proyecto Firebase para notificaciones push (FCM):',
|
|
2023
|
-
'new.firebase.q.setupMode.push.explain': 'Las notificaciones push (FCM) requieren un proyecto Firebase, incluso cuando tu backend principal es Supabase o API REST.',
|
|
2024
|
-
'new.firebase.q.setupMode.create': '✨ Crear desde cero (recomendado para principiantes)',
|
|
2025
|
-
'new.firebase.q.setupMode.existing': '📂 Usar proyecto existente',
|
|
2026
|
-
'new.firebase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
|
|
2027
|
-
'new.firebase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — southamerica-east1',
|
|
2028
|
-
'new.firebase.q.region.us': '🇺🇸 Estados Unidos — us-central1',
|
|
2029
|
-
'new.firebase.q.region.europe': '🇪🇺 Europa — europe-west1',
|
|
2030
|
-
'new.firebase.q.region.global': '🌍 Global / No sé — us-central1',
|
|
2031
|
-
'new.firebase.create.prereq': 'Necesitas: gcloud CLI (cloud.google.com/sdk) + gcloud auth login. Plan Blaze necesario para deploy.',
|
|
2032
|
-
'new.firebase.create.creating': 'Creando proyecto Firebase…',
|
|
2033
|
-
'new.firebase.create.includeWeb': '¿Incluir app Web en Firebase? (para plataforma web)',
|
|
2034
|
-
'new.firebase.create.nowDo': 'Ahora activa la autenticación (antes de ejecutar el app):',
|
|
2035
|
-
'new.firebase.create.activateEmail': 'Activa Email/Contraseña: Firebase Console → Authentication → Sign-in method',
|
|
2036
|
-
'new.firebase.create.activateGoogle': 'Activa Google: misma página, clic en Google → Activar',
|
|
2037
|
-
'new.firebase.create.beforeContinue.title': 'Antes de continuar, activa en Firebase Console:',
|
|
2038
|
-
'new.firebase.create.beforeContinue.step1': '1. Authentication → Sign-in method → Google (Email/Contraseña y Anónimo ya fueron activados automáticamente)',
|
|
2039
|
-
'new.firebase.create.beforeContinue.step1.noAuth': '1. Authentication → Sign-in method → activa Email/Contraseña, Anónimo y Google',
|
|
2040
|
-
'new.firebase.create.beforeContinue.ready': 'He activado Google Sign-In. ¿Continuar?',
|
|
2041
|
-
'new.firebase.create.beforeContinue.ready.noAuth': 'He activado Email/Contraseña, Anónimo y Google Sign-In. ¿Continuar?',
|
|
2042
|
-
'new.firebase.create.beforeContinue.secretManagerAuto': '(Secret Manager y Storage ya fueron activados automáticamente)',
|
|
2043
|
-
'new.firebase.create.sha1Skipped': 'SHA-1 no añadido',
|
|
2044
|
-
'new.firebase.create.sha1ManualInstruction': 'Añade el SHA-1 manualmente: Firebase Console → Configuración del proyecto → Tus apps → Android → Añadir huella digital',
|
|
2045
|
-
'new.firebase.create.sha1ParseError': 'No se pudo extraer el SHA-1 de la salida de keytool',
|
|
2046
|
-
'new.firebase.create.sha1ErrorDetail': 'Motivo',
|
|
2047
|
-
'new.firebase.create.useExistingHint': 'El proyecto puede haberse creado. Prueba "Usar proyecto existente" con ID: {id}',
|
|
2048
|
-
'new.firebase.create.usingProjectId': 'Usando project ID: {id} (continuando con proyecto existente)',
|
|
2049
|
-
'new.firebase.create.waitPropagate': 'Esperando propagación del proyecto (20s)…',
|
|
2050
|
-
'new.firebase.create.success': 'Proyecto Firebase creado correctamente.',
|
|
2051
|
-
'new.firebase.create.failed': 'No se pudo crear el proyecto',
|
|
2052
|
-
'new.firebase.create.gcloudRequired': 'gcloud CLI es obligatorio para "crear desde cero". Sin él, el flujo completo de Firebase no puede ejecutarse.',
|
|
2053
|
-
'new.firebase.create.installTitle': 'Para instalar gcloud CLI, ejecuta:',
|
|
2054
|
-
'new.firebase.create.installCommand': 'Comando',
|
|
2055
|
-
'new.firebase.create.installAfter': 'Luego inicia sesión',
|
|
2056
|
-
'new.firebase.create.installUrl': 'O descarga en',
|
|
2057
|
-
'new.firebase.create.authCommand': 'Ejecuta: gcloud auth login',
|
|
2058
|
-
'new.firebase.create.fallbackHint': 'Por ahora, ingresa un Firebase Project ID existente para continuar (o instala gcloud y ejecuta de nuevo):',
|
|
2059
|
-
'new.firebase.q.billingAccount': '¿Qué cuenta de facturación vincular al proyecto?',
|
|
2060
|
-
'new.firebase.q.billingAccount.hint': 'Elige la cuenta con cuota disponible (hasta 3 proyectos por cuenta)',
|
|
2061
|
-
'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).',
|
|
2062
|
-
'new.firebase.q.billingAccount.other': 'Otra — introducir ID de cuenta manualmente',
|
|
2063
|
-
'new.firebase.q.billingAccount.manualId': 'ID de cuenta de facturación (ej: 018A70-7D0548-0F84A8)',
|
|
2064
|
-
'new.firebase.q.billingAccount.manualId.hint': 'Encuéntralo en console.cloud.google.com/billing',
|
|
2065
|
-
'new.firebase.q.billingAccount.manualId.required': 'El ID de la cuenta de facturación es obligatorio.',
|
|
2066
|
-
'new.firebase.q.organization': '¿En qué organización GCP crear el proyecto?',
|
|
2067
|
-
'new.firebase.q.organization.none': 'Sin organización (cuenta personal / proyecto independiente)',
|
|
2068
|
-
'new.firebase.q.organization.hint': 'Organizaciones vinculadas a tu cuenta gcloud',
|
|
2069
|
-
'new.firebase.create.billingRetry.title': 'Vincula la facturación manualmente (cuota excedida o error de billing):',
|
|
2070
|
-
'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.',
|
|
2071
|
-
'new.firebase.create.billingRetry.ready': 'He vinculado la facturación. ¿Reintentar?',
|
|
2072
|
-
'new.firebase.create.billingRetry.retrying': 'Reintentando…',
|
|
2073
|
-
'new.firebase.create.billingRetry.exit': 'Ejecuta de nuevo con "Usar proyecto existente" después de vincular la facturación.',
|
|
2074
|
-
'new.firebase.create.projectQuotaExceeded': 'Cuota de proyectos excedida. Elimina proyectos no usados en console.cloud.google.com o ingresa un proyecto existente abajo.',
|
|
2075
|
-
'new.firebase.create.creatingPush': 'Creando proyecto Firebase para notificaciones push…',
|
|
2076
|
-
'new.firebase.create.successPush': 'Proyecto Firebase creado para FCM + Remote Config.',
|
|
2077
|
-
'new.supabase.q.orgSelect': '¿En qué organización crear el proyecto?',
|
|
2078
|
-
'new.supabase.orgsRequired': 'No se encontraron organizaciones. Ejecuta supabase login e intenta de nuevo.',
|
|
2079
|
-
'new.supabase.q.region': '¿Dónde están la mayoría de los usuarios de tu app?',
|
|
2080
|
-
'new.supabase.q.region.brazil': '🇧🇷 Brasil (São Paulo) — sa-east-1',
|
|
2081
|
-
'new.supabase.q.region.us': '🇺🇸 Estados Unidos (Virginia) — us-east-1',
|
|
2082
|
-
'new.supabase.q.region.europe': '🇪🇺 Europa (Irlanda) — eu-west-1',
|
|
2083
|
-
'new.supabase.q.region.global': '🌍 Global / No sé — us-east-1',
|
|
2084
|
-
'new.supabase.q.dbPassword': 'Contraseña del banco (mín 6 caracteres)',
|
|
2085
|
-
'new.supabase.q.dbPassword.required': 'La contraseña debe tener al menos 6 caracteres.',
|
|
2086
|
-
'new.supabase.creating': 'Creando proyecto en Supabase…',
|
|
2087
|
-
'new.supabase.created': 'Proyecto creado correctamente.',
|
|
2088
|
-
'new.supabase.createFailed': 'No se pudo crear el proyecto',
|
|
2089
|
-
'new.supabase.loginHint': 'Ejecuta: supabase login. Luego ingresa la URL y clave de tu proyecto existente.',
|
|
2090
|
-
'new.supabase.setup': 'Vinculando proyecto y desplegando…',
|
|
2091
|
-
'new.supabase.setupManual': 'Ejecuta manualmente: supabase link, supabase db push, supabase functions deploy',
|
|
2092
|
-
'new.supabase.q.useExisting.orgSelect': '¿En qué organización está el proyecto?',
|
|
2093
|
-
'new.supabase.q.useExisting.projectSelect': '¿Qué proyecto Supabase existente quieres usar?',
|
|
2094
|
-
'new.supabase.projectsRequired': 'No se encontraron proyectos en esta organización.',
|
|
2095
|
-
'new.supabase.q.dbPassword.existing': 'Contraseña del banco del proyecto (necesaria para vincular y aplicar migraciones)',
|
|
2096
|
-
'new.supabase.existingLinked': 'Proyecto listo para vincular y aplicar migraciones.',
|
|
2097
|
-
'setup.license.loaded': '✓ Clave de licencia cargada desde la configuración local.',
|
|
2098
|
-
'setup.license.saved': '✓ Clave de licencia validada y guardada.',
|
|
2099
|
-
'setup.license.invalid': 'Formato de licencia inválido. Se espera XXXX-XXXX-XXXX-XXXX.',
|
|
2100
|
-
'setup.error.targetNotEmpty': 'El directorio de destino no está vacío: {path}',
|
|
2101
|
-
'setup.error.targetExists': 'El directorio de destino ya existe: {path}',
|
|
2102
|
-
'setup.error.coreMissing': 'No se encontro la carpeta del core template: {path}',
|
|
2103
|
-
'setup.error.requiredChecksFailed': 'Fallo en verificaciones obligatorias. Ejecuta `kasy doctor`.',
|
|
2104
|
-
'setup.error.generatingFailed': 'Error al generar el proyecto.',
|
|
2105
|
-
'setup.error.conflictHint': 'Consejo: Elimina la carpeta del proyecto y ejecuta de nuevo, o usa un directorio vacío.',
|
|
2106
|
-
'setup.spinner.generating': 'Generando archivos del proyecto...',
|
|
2107
|
-
'setup.success.created': 'Proyecto creado correctamente.',
|
|
2108
|
-
'setup.success.complete': '✓ Setup completado',
|
|
2109
|
-
'setup.success.location': 'Ubicacion',
|
|
2110
|
-
'setup.success.nextSteps': 'Siguientes pasos',
|
|
2111
|
-
'setup.success.stepPubGet': 'flutter pub get',
|
|
2112
|
-
'setup.success.stepRun': 'flutter run',
|
|
2113
|
-
'validate.title': 'Kasy Validate',
|
|
2114
|
-
'validate.success': '✓ Matriz de validación aprobada.',
|
|
2115
|
-
'validate.failed': 'La matriz de validación fallo.',
|
|
2116
|
-
'validate.error': 'Una o más combinaciones de validación fallaron.',
|
|
2117
|
-
'validate.projectNotFound': 'Proyecto no encontrado',
|
|
2118
|
-
'validate.ok': 'ok',
|
|
2119
|
-
'validate.fail': 'fallo',
|
|
2120
|
-
'validate.passed': 'aprobado',
|
|
2121
|
-
|
|
2122
|
-
// ── Flujo Firebase ────────────────────────────────────────────────────
|
|
2123
|
-
'cli.command.firebase.description': '🔥 Crear app Flutter completo con Firebase (recomendado)',
|
|
2124
|
-
'new.banner': '✨ Nuevo app Flutter',
|
|
2125
|
-
'new.subtitle': 'Elige el backend: Firebase, Supabase o API REST.',
|
|
2126
|
-
'new.subtitle2': '🔒 El setup corre en tu máquina con tus credenciales — sin acceso de terceros.',
|
|
2127
|
-
'new.q.backend': '¿Donde quieres guardar los datos de tu app?',
|
|
2128
|
-
'new.q.backend.firebase.desc': 'El más fácil para empezar — auth, base de datos y storage listos',
|
|
2129
|
-
'new.q.backend.supabase.desc': 'Base de datos SQL (PostgreSQL) con más control',
|
|
2130
|
-
'new.q.backend.api.desc': 'Ya tienes tu propio servidor',
|
|
2131
|
-
|
|
2132
|
-
'new.q.mode': '¿Como quieres configurar?',
|
|
2133
|
-
'new.q.mode.quick': '⚡ Rápido — pocas preguntas, valores inteligentes',
|
|
2134
|
-
'new.q.mode.advanced': '🛠 Avanzado — todas las opciones y credenciales ahora',
|
|
2135
|
-
|
|
2136
|
-
'new.q.preset': '¿Qué features incluir?',
|
|
2137
|
-
'new.q.preset.starter': '⚡ Starter — analytics + errores + onboarding',
|
|
2138
|
-
'new.q.preset.saas': '💰 SaaS — suscripciones + analytics + onboarding + feedback',
|
|
2139
|
-
'new.q.preset.content': '📱 Contenido — crash reports + analytics + onboarding + AI chat',
|
|
2140
|
-
'new.q.preset.full': '🚀 Completo — todas las features',
|
|
2141
|
-
'new.q.preset.custom': '⚙️ Personalizar — elige feature a feature',
|
|
2142
|
-
'new.q.preset.none': '○ Ninguno — solo el core',
|
|
2143
|
-
|
|
2144
|
-
'new.firebase.success.deployStep': '• Desplegar backend (desde dentro de la carpeta del proyecto):',
|
|
2145
|
-
|
|
2146
|
-
'cli.command.deploy.description': 'Publica el servidor en Firebase o Supabase',
|
|
2147
|
-
'cli.command.check.description': 'Verifica si las notificaciones push están configuradas (usa --fix para arreglar)',
|
|
2148
|
-
'deploy.q.project': 'Firebase Project ID:',
|
|
2149
|
-
'deploy.q.serviceAccount': 'Ruta al service account JSON:',
|
|
2150
|
-
'deploy.detected.project': '✓ Proyecto Firebase detectado:',
|
|
2151
|
-
'deploy.detected.serviceAccount': '✓ Service account detectado:',
|
|
2152
|
-
'deploy.error.notProject': 'No se encontro firebase.json. Ejecute kasy deploy desde dentro de la carpeta del proyecto.',
|
|
2153
|
-
|
|
2154
|
-
'cli.command.ios.description': 'Publica la app en la App Store (necesita Mac)',
|
|
2155
|
-
'cli.command.ios.configure.description': 'Configurar credenciales Apple para subida local del IPA',
|
|
2156
|
-
'cli.command.ios.release.description': 'Incrementa build, genera IPA y sube a App Store Connect',
|
|
2157
|
-
'cli.command.ios.build.description': 'Solo genera el IPA (sin subir)',
|
|
2158
|
-
'cli.command.ios.clean.description': 'Limpia cachés Flutter/Xcode tras fallo en build iOS',
|
|
2159
|
-
'cli.command.ios.picker.intro': 'Publicar en la App Store',
|
|
2160
|
-
'cli.command.ios.picker.message': '¿Qué quieres hacer?',
|
|
2161
|
-
'cli.command.ios.help.before': 'Como publicar en la App Store:\n 1) kasy ios configure → hazlo una vez (guarda las credenciales Apple)\n 2) kasy ios release → ejecuta en cada nueva version (build + subida)\n\nUsa "build" si solo quieres generar el IPA, "clean" si un build fallo.\n',
|
|
2162
|
-
'cli.command.codemagic.description': 'Compila la app en la nube (sin necesitar Mac)',
|
|
2163
|
-
'cli.command.codemagic.configure.description': 'Configurar credenciales API de Codemagic',
|
|
2164
|
-
'cli.command.codemagic.release.description': 'Iniciar build del workflow iOS en Codemagic',
|
|
2165
|
-
'cli.command.codemagic.status.description': 'Estado del build Codemagic por ID',
|
|
2166
|
-
'cli.command.codemagic.picker.intro': 'Compilar en la nube con Codemagic',
|
|
2167
|
-
'cli.command.codemagic.picker.message': '¿Qué quieres hacer?',
|
|
2168
|
-
'cli.command.codemagic.picker.statusHint': 'Pregunta el ID del build',
|
|
2169
|
-
'cli.command.codemagic.help.before': 'Como compilar con Codemagic (sin necesitar Mac):\n 1) kasy codemagic configure → hazlo una vez (guarda el token de la API)\n 2) kasy codemagic release → inicia un build en la nube por version\n\nUsa "status <buildId>" para seguir el progreso de un build.\n',
|
|
2170
|
-
|
|
2171
|
-
'ios.configure.title': 'App Store iOS — configuración',
|
|
2172
|
-
'ios.configure.bundleId': 'Bundle ID',
|
|
2173
|
-
'ios.configure.doc': 'Guía',
|
|
2174
|
-
'ios.configure.openingLinks': 'Abriendo App Store Connect en el navegador…',
|
|
2175
|
-
'ios.configure.note.title': 'Voy a pedir 3 cosas de App Store Connect',
|
|
2176
|
-
'ios.configure.note.body': '1) API Key ID — en Users and Access → Keys.\n2) Issuer ID — arriba de la misma pagina.\n3) El archivo .p8 (clave privada) descargado al crear la key.\n\nEl App ID es opcional, solo si tienes varias apps.',
|
|
2177
|
-
'ios.configure.q.apiKey': 'Key ID de la API App Store Connect',
|
|
2178
|
-
'ios.configure.q.issuerId': 'Issuer ID (UUID)',
|
|
2179
|
-
'ios.configure.q.p8Path': 'Ruta del archivo AuthKey_XXXXX.p8 descargado',
|
|
2180
|
-
'ios.configure.q.appId': 'App ID en App Store Connect (opcional)',
|
|
2181
|
-
'ios.configure.q.required': 'Obligatorio',
|
|
2182
|
-
'ios.configure.q.p8NotFound': 'Archivo no encontrado',
|
|
2183
|
-
'ios.configure.cancelled': 'Configuración cancelada',
|
|
2184
|
-
'ios.configure.success': 'Credenciales Apple guardadas',
|
|
2185
|
-
'ios.configure.p8Installed': 'Clave instalada en',
|
|
2186
|
-
'ios.configure.next': 'Siguiente paso',
|
|
2187
|
-
'ios.release.title': 'Generando y subiendo release iOS…',
|
|
2188
|
-
'ios.release.success': 'Release iOS subida',
|
|
2189
|
-
'ios.release.task.building': 'Compilando IPA (puede tardar 2-5 min)…',
|
|
2190
|
-
'ios.release.task.uploading': 'Subiendo IPA a App Store Connect…',
|
|
2191
|
-
'ios.release.task.done': 'Compilacion + subida completadas',
|
|
2192
|
-
'ios.release.task.failed': 'La compilacion fallo — mira la salida debajo',
|
|
2193
|
-
'ios.build.title': 'Generando IPA iOS…',
|
|
2194
|
-
'ios.build.success': 'IPA generado',
|
|
2195
|
-
'ios.build.task.building': 'Compilando IPA (puede tardar 2-5 min)…',
|
|
2196
|
-
'ios.build.task.done': 'IPA listo en build/ios/ipa/',
|
|
2197
|
-
'ios.build.task.failed': 'La compilacion fallo — mira la salida debajo',
|
|
2198
|
-
'ios.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
|
|
2199
|
-
'ios.error.noScript': 'scripts/release-ios.sh no encontrado. Ejecute: kasy update ios-release',
|
|
2200
|
-
'ios.error.notMac': 'Release iOS local requiere macOS con Xcode.',
|
|
2201
|
-
'ios.error.useCodemagic': 'Use release en la nube',
|
|
2202
|
-
'ios.error.notConfigured': 'Credenciales Apple no configuradas',
|
|
2203
|
-
'ios.error.runConfigure': 'Ejecute: kasy ios configure',
|
|
2204
|
-
'ios.release.askConfigure': '¿Quieres configurar las credenciales Apple ahora?',
|
|
2205
|
-
'ios.error.signing': 'Firma iOS no configurada (falta DEVELOPMENT_TEAM).',
|
|
2206
|
-
'ios.error.signingHint': 'Abra ios/Runner.xcworkspace en Xcode → Runner → Signing & Capabilities → elija su Team.',
|
|
2207
|
-
'ios.error.googleUrlScheme': 'URL scheme iOS de Google Sign-In no configurado.',
|
|
2208
|
-
'ios.error.googleUrlSchemeHint': 'Corrección: ejecute flutterfire configure, luego kasy ios clean, o regenere el proyecto antes del build.',
|
|
2209
|
-
'ios.warn.lowDisk': 'Poco espacio en disco ({gb} GB libres; se recomiendan al menos {min} GB para builds Xcode).',
|
|
2210
|
-
'ios.hints.title': 'La caché de Xcode puede estar corrupta — intente:',
|
|
2211
|
-
'ios.hints.closeXcode': 'Cierre Xcode por completo',
|
|
2212
|
-
'ios.hints.retry': 'Luego reintente',
|
|
2213
|
-
'ios.hints.manual': 'O manualmente',
|
|
2214
|
-
'ios.clean.title': 'Limpiando cachés de build iOS…',
|
|
2215
|
-
'ios.clean.success': 'Cachés limpiadas',
|
|
2216
|
-
'ios.clean.notMac': 'La limpieza iOS solo está disponible en macOS.',
|
|
2217
|
-
'ios.clean.step.flutterClean': 'flutter clean',
|
|
2218
|
-
'ios.clean.step.derivedData': 'Eliminar DerivedData de Xcode (Runner)',
|
|
2219
|
-
'ios.clean.step.buildDir': 'Eliminar carpetas build',
|
|
2220
|
-
'ios.clean.step.pubGet': 'flutter pub get',
|
|
2221
|
-
'ios.clean.step.pods': 'pod install',
|
|
2222
|
-
|
|
2223
|
-
'codemagic.configure.title': 'Codemagic — configuración',
|
|
2224
|
-
'codemagic.configure.doc': 'Guía',
|
|
2225
|
-
'codemagic.configure.checklist': 'Complete firma + App Store Connect en el panel Codemagic (vea la guía).',
|
|
2226
|
-
'codemagic.configure.openingLinks': 'Abriendo Codemagic en el navegador…',
|
|
2227
|
-
'codemagic.configure.q.token': 'Token API de Codemagic',
|
|
2228
|
-
'codemagic.configure.q.appId': 'App ID en Codemagic',
|
|
2229
|
-
'codemagic.configure.q.workflowId': 'Workflow ID (de codemagic.yaml)',
|
|
2230
|
-
'codemagic.configure.q.branch': 'Rama Git para build',
|
|
2231
|
-
'codemagic.configure.q.required': 'Obligatorio',
|
|
2232
|
-
'codemagic.configure.cancelled': 'Configuración cancelada',
|
|
2233
|
-
'codemagic.configure.success': 'Credenciales Codemagic guardadas',
|
|
2234
|
-
'codemagic.configure.next': 'Siguiente paso',
|
|
2235
|
-
'codemagic.release.title': 'Disparando build en Codemagic…',
|
|
2236
|
-
'codemagic.release.triggered': 'Build iniciado',
|
|
2237
|
-
'codemagic.release.spin': 'Iniciando build en Codemagic…',
|
|
2238
|
-
'codemagic.release.spinDone': 'Build encolado en Codemagic',
|
|
2239
|
-
'codemagic.status.title': 'Estado del build',
|
|
2240
|
-
'codemagic.status.usage': 'Uso: kasy codemagic status <buildId>',
|
|
2241
|
-
'codemagic.status.spin': 'Consultando estado del build…',
|
|
2242
|
-
'codemagic.status.spinDone': 'Estado obtenido',
|
|
2243
|
-
'codemagic.error.notProject': 'No es un proyecto Flutter iOS (pubspec.yaml + ios/ requeridos).',
|
|
2244
|
-
'codemagic.error.notConfigured': 'Codemagic no configurado',
|
|
2245
|
-
'codemagic.error.addCi': 'Agregue CI primero: kasy add ci (crea codemagic.yaml)',
|
|
2246
|
-
'codemagic.error.runConfigure': 'Ejecute: kasy codemagic configure',
|
|
2247
|
-
'codemagic.error.googleUrlScheme': 'Build Codemagic bloqueado: URL scheme iOS de Google Sign-In no configurado.',
|
|
2248
|
-
|
|
2249
|
-
'doctor.ios.title': 'Release iOS',
|
|
2250
|
-
'doctor.ios.appleOk': 'Credenciales Apple configuradas',
|
|
2251
|
-
'doctor.ios.appleMissing': 'Credenciales Apple faltantes — kasy ios configure',
|
|
2252
|
-
'doctor.ios.p8Ok': 'Archivo de clave API encontrado',
|
|
2253
|
-
'doctor.ios.p8Missing': 'AuthKey .p8 faltante — kasy ios configure',
|
|
2254
|
-
'doctor.ios.codemagicOk': 'Credenciales Codemagic configuradas',
|
|
2255
|
-
'doctor.ios.codemagicMissing': 'Codemagic opcional — kasy codemagic configure',
|
|
2256
|
-
'doctor.ios.notMac': 'Release iOS local requiere macOS',
|
|
2257
|
-
'doctor.ios.doc': 'Documentación',
|
|
2258
|
-
'doctor.ios.signingOk': 'Firma Xcode (Development Team) configurada',
|
|
2259
|
-
'doctor.ios.signingMissing': 'Firma Xcode no definida — abra Runner en Xcode y elija su Team',
|
|
2260
|
-
'doctor.ios.googleUrlSchemeOk': 'URL scheme iOS de Google Sign-In configurado',
|
|
2261
|
-
'doctor.ios.googleUrlSchemeMissing': 'URL scheme iOS de Google Sign-In divergente',
|
|
2262
|
-
'doctor.ios.googleUrlSchemeSkipped': 'Check del URL scheme iOS de Google Sign-In omitido (GoogleService-Info.plist ausente)',
|
|
2263
|
-
'doctor.ios.appleSignInEntitlementOk': 'Entitlement de Apple Sign-In configurado',
|
|
2264
|
-
'doctor.ios.appleSignInEntitlementMissing': 'Entitlement de Apple Sign-In ausente — agrega la capability Sign In with Apple en Xcode',
|
|
2265
|
-
'doctor.ios.facebookOk': 'Credenciales de Facebook configuradas (iOS)',
|
|
2266
|
-
'doctor.ios.facebookPlaceholders': 'Credenciales de Facebook son aún placeholders — actualiza FacebookAppID y FacebookClientToken en Info.plist',
|
|
2267
|
-
'doctor.ios.facebookSkipped': 'Check de credenciales de Facebook omitido (FacebookAppID ausente en Info.plist)',
|
|
2268
|
-
'doctor.android.facebookOk': 'Credenciales de Facebook configuradas (Android)',
|
|
2269
|
-
'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',
|
|
2270
|
-
|
|
2271
|
-
'doctor.revenuecat.title': 'RevenueCat',
|
|
2272
|
-
'doctor.revenuecat.keysOk': 'Claves de API configuradas (iOS + Android)',
|
|
2273
|
-
'doctor.revenuecat.keysEmpty': 'Claves de API no configuradas — define RC_IOS_API_KEY y RC_ANDROID_API_KEY en Makefile y .vscode/launch.json',
|
|
2274
|
-
'doctor.revenuecat.keysTest': 'Usando claves Test Store (test_) — reemplaza por appl_ y goog_ para producción',
|
|
2275
|
-
'doctor.revenuecat.webhookUrlSupabase': 'URL del webhook (pega en RevenueCat → Integrations → Webhooks)',
|
|
2276
|
-
'doctor.revenuecat.webhookUrlFirebase': 'URL del webhook: Firebase Console → Functions → subscriptionsOnRcPremiumUpdate',
|
|
2277
|
-
|
|
2278
|
-
'update.iosRelease.success': 'Archivos de release iOS actualizados',
|
|
2279
|
-
'add.iosRelease.success': 'Archivos de release iOS agregados',
|
|
2280
|
-
'add.iosRelease.already': 'Archivos de release iOS ya presentes',
|
|
2281
|
-
|
|
2282
|
-
'new.api.q.baseUrl': '¿Cual es la URL base de tu API?',
|
|
2283
|
-
'new.api.q.baseUrl.hint': 'https://api.example.com',
|
|
2284
|
-
'new.firebase.banner': '🔥 Nuevo app Flutter — Firebase',
|
|
2285
|
-
'new.firebase.subtitle': 'Proyecto completo: auth, Firestore, notificaciones, login social y más.',
|
|
2286
|
-
'new.prereq.title': 'Antes de empezar, asegúrate de tener:',
|
|
2287
|
-
'new.firebase.prereq.title': 'Antes de empezar, asegúrate de tener:',
|
|
2288
|
-
'new.firebase.prereq.create.1': '1. gcloud CLI (cloud.google.com/sdk) + gcloud auth login',
|
|
2289
|
-
'new.firebase.prereq.create.2': '2. Plan Blaze (tarjeta de crédito — requerido para Cloud Functions)',
|
|
2290
|
-
'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.',
|
|
2291
|
-
'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.',
|
|
2292
|
-
'new.firebase.prereq.create.note': ' Proyecto y APIs se crearán automáticamente.',
|
|
2293
|
-
'new.firebase.prereq.create.pushNote': ' Proyecto Firebase para FCM + Remote Config se creará automáticamente (sin cuenta de servicio).',
|
|
2294
|
-
'new.firebase.prereq.1': '1. Firebase CLI instalado (npm i -g firebase-tools) + firebase login',
|
|
2295
|
-
'new.firebase.prereq.2': '2. Proyecto Firebase creado en console.firebase.google.com',
|
|
2296
|
-
'new.firebase.prereq.3': '3. Plan Blaze activado (tarjeta de crédito — requerido para Cloud Functions)',
|
|
2297
|
-
'new.firebase.prereq.4': '4. gcloud CLI instalado + gcloud auth login (para activar APIs automáticamente)',
|
|
2298
|
-
'new.firebase.prereq.5': '5. Antes del deploy: activa Secret Manager API y Firebase Storage (ver PREREQUISITES.md o enlaces tras generar)',
|
|
2299
|
-
'new.firebase.prereq.doc': ' Lista completa: PREREQUISITES.md',
|
|
2300
|
-
|
|
2301
|
-
'new.firebase.q.appName': '¿Cuál es el nombre de tu app?',
|
|
2302
|
-
'new.firebase.q.appName.hint': 'ej: Mi App Increible',
|
|
2303
|
-
'new.firebase.q.appName.required': 'El nombre de la app es obligatorio.',
|
|
2304
|
-
|
|
2305
|
-
'new.firebase.q.bundleId': '¿Cuál es el identificador único (Bundle ID) de tu app?',
|
|
2306
|
-
'new.firebase.q.bundleId.hint': 'Funciona como una dirección para tu app, ej: com.miempresa.miapp',
|
|
2307
|
-
'new.firebase.q.bundleId.invalid': 'Formato inválido. Usa: com.empresa.app',
|
|
2308
|
-
'new.firebase.q.bundleId.required': 'El Bundle ID es obligatorio.',
|
|
2309
|
-
|
|
2310
|
-
'new.firebase.q.projectId': '¿Cuál es el ID de tu proyecto Firebase?',
|
|
2311
|
-
'new.firebase.q.projectId.hint': 'Encuéntralo en Firebase Console → tu proyecto → Configuración',
|
|
2312
|
-
'new.firebase.q.projectId.required': 'El Firebase Project ID es obligatorio.',
|
|
2313
|
-
|
|
2314
|
-
'new.firebase.q.modules': '¿Qué features opcionales quieres incluir?',
|
|
2315
|
-
'new.firebase.q.modules.hint': 'Espacio para seleccionar, Enter para confirmar',
|
|
2316
|
-
'new.modules.header.common': '── Comunes (todos los backends) ──',
|
|
2317
|
-
'new.modules.header.features': '── Pantallas y features ──',
|
|
2318
|
-
'new.modules.header.feedback': '── Feedback (Firebase + Supabase) ──',
|
|
2319
|
-
'new.modules.header.ci': '── CI/CD ──',
|
|
2320
|
-
'new.modules.header.monetization': '── Monetizacion ──',
|
|
2321
|
-
'new.firebase.module.revenuecat': '💰 RevenueCat (activa Subscriptions)',
|
|
2322
|
-
'new.firebase.module.sentry': '🚨 Crash Reports (Sentry)',
|
|
2323
|
-
'new.firebase.module.analytics': '📊 Analytics (Mixpanel)',
|
|
2324
|
-
'new.firebase.module.facebook': '👤 Facebook (Login + Ads)',
|
|
2325
|
-
'new.firebase.module.web': '🌐 Web Support (PWA, solo Firebase)',
|
|
2326
|
-
'new.firebase.module.widget': '📱 Home Widget (iOS/Android)',
|
|
2327
|
-
'new.firebase.module.llm_chat': '🤖 AI Chat (OpenAI/Gemini)',
|
|
2328
|
-
'new.firebase.module.local_notifications': '🔔 Local Reminders (sin servidor)',
|
|
2329
|
-
'new.firebase.module.feedback': '💬 Feature Requests (requiere Firebase o Supabase)',
|
|
2330
|
-
'new.firebase.module.ci': '⚙️ CI/CD (GitHub + Codemagic)',
|
|
2331
|
-
'new.firebase.module.onboarding': '👋 Onboarding (flujo de bienvenida)',
|
|
2332
|
-
|
|
2333
|
-
'new.firebase.q.secrets.configureNow': '¿Configurar los secrets del servidor ahora? (webhook RevenueCat, Meta Ads)',
|
|
2334
|
-
'new.firebase.q.secrets.configureNow.hint': 'Si no ahora, vea el README para los comandos de configuración después',
|
|
2335
|
-
'new.firebase.q.secrets.later': '• Secrets del servidor no configurados — se configurarán durante `kasy deploy`.',
|
|
2336
|
-
'new.firebase.q.revenuecat.webhookKey': 'Clave secreta del webhook (se sugirió un valor aleatorio — presiona Enter para aceptar o escribe el tuyo)',
|
|
2337
|
-
'new.firebase.q.revenuecat.webhookKey.hint': 'Guarda este valor. En el panel RevenueCat, pega como: Bearer <este-valor>',
|
|
2338
|
-
'new.firebase.q.revenuecat.metaToken': 'Meta Access Token (Conversions API, opcional)',
|
|
2339
|
-
'new.firebase.q.revenuecat.metaDataset': 'Meta Dataset ID / Pixel ID (opcional)',
|
|
2340
|
-
'new.firebase.q.revenuecat.android': 'Clave API RevenueCat para Android',
|
|
2341
|
-
'new.firebase.q.revenuecat.ios': 'Clave API RevenueCat para iOS',
|
|
2342
|
-
'new.firebase.q.paywall': '¿Qué estilo de paywall?',
|
|
2343
|
-
'new.firebase.q.paywall.hint': 'Layout de la pantalla de suscripciones — puedes cambiarlo después en RevenueCat',
|
|
2344
|
-
'new.firebase.q.revenuecat.web': '¿Habilitar suscripciones en web (RevenueCat Web Billing)?',
|
|
2345
|
-
'new.firebase.q.revenuecat.web.hint': 'Requiere Web Billing en dashboard RevenueCat + Stripe. Deja desmarcado si no necesitas.',
|
|
2346
|
-
'new.firebase.q.revenuecat.webKey': 'Clave API RevenueCat Web Billing (rcb_xxx o rcb_sb_xxx, opcional — configurar después)',
|
|
2347
|
-
'new.firebase.success.revenuecatWeb': '• RevenueCat Web: agrega RC_WEB_API_KEY (launch.json) para suscripciones en web',
|
|
2348
|
-
'new.firebase.q.sentry.dsn': 'DSN de Sentry (deja en blanco para configurar después)',
|
|
2349
|
-
'new.firebase.q.sentry.dsn.invalid': 'DSN inválido. Formato esperado: https://clave@host/project-id',
|
|
2350
|
-
'new.firebase.q.mixpanel.token': 'Token de Mixpanel (deja en blanco para configurar después)',
|
|
2351
|
-
'new.firebase.q.facebook.appId': 'App ID de Facebook',
|
|
2352
|
-
'new.firebase.q.facebook.appId.required': 'App ID de Facebook es obligatorio.',
|
|
2353
|
-
'new.firebase.q.facebook.appId.invalid': 'App ID de Facebook debe ser numérico (ej: 1234567890).',
|
|
2354
|
-
'new.firebase.q.facebook.token': 'Token de App Facebook',
|
|
2355
|
-
'new.firebase.q.facebook.token.required': 'Token de App Facebook es obligatorio.',
|
|
2356
|
-
'new.firebase.q.revenuecat.android.required': 'Clave Android de RevenueCat es obligatoria.',
|
|
2357
|
-
'new.firebase.q.revenuecat.ios.required': 'Clave iOS de RevenueCat es obligatoria.',
|
|
2358
|
-
'new.firebase.q.revenuecat.metaDataset.invalid': 'Pixel ID debe ser numérico (ej: 1234567890).',
|
|
2359
|
-
'new.firebase.q.revenuecat.webKey.invalid': 'La clave Web Billing debe empezar con rcb_ (ej: rcb_sb_xxx o rcb_xxx).',
|
|
2360
|
-
|
|
2361
|
-
'new.firebase.confirm.title': 'Resumen de configuración:',
|
|
2362
|
-
'new.firebase.confirm.app': 'App',
|
|
2363
|
-
'new.firebase.confirm.bundleId': 'Bundle ID',
|
|
2364
|
-
'new.firebase.confirm.project': 'Firebase',
|
|
2365
|
-
'new.firebase.confirm.modules': 'Features',
|
|
2366
|
-
'new.firebase.confirm.none': 'ninguno',
|
|
2367
|
-
'new.firebase.confirm.proceed': '¿Crear el proyecto ahora?',
|
|
2368
|
-
|
|
2369
|
-
'new.firebase.step.copying': 'Copiando plantilla del proyecto...',
|
|
2370
|
-
'new.firebase.step.pubGet': 'Instalando paquetes Flutter...',
|
|
2371
|
-
'new.firebase.step.buildRunner': 'Generando código (Riverpod/Freezed)...',
|
|
2372
|
-
'new.firebase.step.flutterfire': 'Configurando Firebase (flutterfire)...',
|
|
2373
|
-
'new.firebase.step.deploy': 'Desplegando Cloud Functions + reglas de Firestore...',
|
|
2374
|
-
'new.firebase.step.done': '¡Listo!',
|
|
2375
|
-
|
|
2376
|
-
'new.firebase.success.title': '🎉 ¡Tu app está lista!',
|
|
2377
|
-
'new.firebase.success.open': 'Abre el proyecto:',
|
|
2378
|
-
'new.firebase.success.run': 'Ejecuta el app:',
|
|
2379
|
-
'new.firebase.success.runMake': 'O usa make: make run | make run-ios | make run-android',
|
|
2380
|
-
'new.firebase.success.deviceSetup': 'Antes de ejecutar en dispositivo:',
|
|
2381
|
-
'new.firebase.success.deviceSetup.ios': 'iOS: conecta iPhone por cable → confiar en este ordenador → Xcode → Window → Devices → emparejar',
|
|
2382
|
-
'new.firebase.success.deviceSetup.android': 'Android: Ajustes → Opciones de desarrollador → activar depuración USB',
|
|
2383
|
-
'new.firebase.success.hotReload': "Hot reload: pulsa 'r' en la terminal mientras el app corre. Los cambios aparecen al instante.",
|
|
2384
|
-
'new.firebase.success.oneLiner': 'O copia y pega para entrar y ejecutar:',
|
|
2385
|
-
'new.firebase.success.configure': 'Configura cuando quieras:',
|
|
2386
|
-
'new.firebase.success.alreadyDone': 'Ya configurado por la CLI:',
|
|
2387
|
-
'new.firebase.success.manualNeeded': 'Configura manualmente (si hace falta):',
|
|
2388
|
-
'new.firebase.success.apn': '• Clave APN (push iOS): Firebase Console → Config. del Proyecto → Cloud Messaging',
|
|
2389
|
-
'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í)',
|
|
2390
|
-
'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.',
|
|
2391
|
-
'new.firebase.success.sentry': '• Sentry: Para reportes de error en producción. Obtén DSN en sentry.io. Ya en launch.json para dev. Para release: --dart-define=SENTRY_DSN=xxx',
|
|
2392
|
-
'new.firebase.success.mixpanel': '• Mixpanel: Para analytics en producción. Ya en launch.json para dev. Para release: --dart-define=MIXPANEL_TOKEN=xxx',
|
|
2393
|
-
'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.',
|
|
2394
|
-
|
|
2395
|
-
'new.firebase.q.deploy': '¿Hacer deploy de Cloud Functions + reglas de Firestore ahora?',
|
|
2396
|
-
'new.firebase.q.deploy.hint': 'Requiere plan Blaze y firebase-tools instalado globalmente',
|
|
2397
|
-
'new.firebase.deployFailed.hint': 'Si el deploy falló: crea Firestore y Storage en la Consola primero:',
|
|
2398
|
-
'new.firebase.deployFailed.firestore': '• Firestore: crea la base (Crear base → Modo Nativo)',
|
|
2399
|
-
'new.firebase.deployFailed.storage': '• Storage: clic en Comenzar',
|
|
2400
|
-
'new.firebase.deployFailed.orGcloud': 'O crea Firestore por CLI:',
|
|
2401
|
-
'new.firebase.success.deployLater': '• Deploy del backend cuando estés listo (desde dentro de la carpeta del proyecto):',
|
|
2402
|
-
'new.firebase.success.beforeDeploy': 'Antes del firebase deploy, activa (clic para abrir):',
|
|
2403
|
-
'new.firebase.success.secretManager': '• Secret Manager API',
|
|
2404
|
-
'new.firebase.success.firestore': '• Firestore (crea la base si no existe)',
|
|
2405
|
-
'new.firebase.success.storage': '• Firebase Storage (Comenzar)',
|
|
2406
|
-
'new.firebase.success.auth': '• Firebase Authentication (Email/Contraseña)',
|
|
2407
|
-
'new.firebase.success.security': '🔒 .gitignore excluye .env y otros secretos. Cloud Functions usan secrets en el servidor.',
|
|
2408
|
-
|
|
2409
|
-
'new.firebase.interactive.title': '⚠️ Configuración de la Nube Requerida',
|
|
2410
|
-
'new.firebase.interactive.desc': 'Por medidas de seguridad de Google, necesitas hacer estos pasos:',
|
|
2411
|
-
'new.firebase.interactive.step1': '1. Crea la base de datos (Firestore): ',
|
|
2412
|
-
'new.firebase.interactive.step2': '2. Sube al plan Blaze (Pay-as-you-go): ',
|
|
2413
|
-
'new.firebase.interactive.step3': '3. Habilita Auth (Email y Contraseña): ',
|
|
2414
|
-
|
|
2415
|
-
'new.firebase.interactive.prompt1': '¿Ya creaste Firestore y habilitaste Autenticación en el enlace arriba?',
|
|
2416
|
-
'new.firebase.interactive.prompt2': '¿Hiciste el upgrade al Plan Blaze? (Requerido para Cloud Functions)',
|
|
2417
|
-
'new.firebase.interactive.googleAuthNote': '* Activa Google Sign-In manualmente (Email/Contraseña y Anônimo ya fueron activados): ',
|
|
2418
|
-
'new.firebase.interactive.billingNeeded': 'Plan Blaze aún no activo. Actívalo en el enlace de arriba y espera la detección automática.',
|
|
2419
|
-
'new.firebase.interactive.billingWaiting': 'Verificando estado del Blaze...',
|
|
2420
|
-
'new.firebase.interactive.billingTimeout': 'Plan Blaze no confirmado tras el tiempo límite. Despliegue omitido — ejecuta manualmente cuando estés listo.',
|
|
2421
|
-
'new.firebase.interactive.authWarn': 'No se pudo activar Email/Contraseña y Anónimo automáticamente. Actívalos manualmente:',
|
|
2422
|
-
'new.firebase.existing.apisFailed': 'No se pudieron activar las APIs:',
|
|
2423
|
-
'new.firebase.existing.googleSignInManual': 'Google Sign-In: activa manualmente en Authentication → Sign-in method → Google',
|
|
2424
|
-
|
|
2425
|
-
'new.firebase.interactive.ready': '¿Listo para publicar Push Notifications + Reglas ahora?',
|
|
2426
|
-
'new.firebase.interactive.deploying': 'Desplegando Cloud Functions + Reglas (Storage y Firestore)...',
|
|
2427
|
-
'new.firebase.interactive.errorTitle': 'Ocurrio un error en el despliegue.',
|
|
2428
|
-
'new.firebase.interactive.errorHint': 'Revisa haber creado Firestore y activado el plan Blaze con tarjeta.',
|
|
2429
|
-
'new.firebase.interactive.laterHint': 'Puedes publicar luego desde la carpeta de tu proyecto corriendo: ',
|
|
2430
|
-
'new.firebase.interactive.skipped': 'Despliegue omitido. Puedes publicar más tarde.',
|
|
2431
|
-
|
|
2432
|
-
'new.firebase.warn.flutterfire': '⚠️ FlutterFire no pudo generar firebase_options_dev.dart automáticamente.',
|
|
2433
|
-
'new.firebase.warn.flutterfire.manual': 'Ejecuta manualmente en la carpeta del proyecto:',
|
|
2434
|
-
|
|
2435
|
-
'new.firebase.error.templateMissing': 'Plantilla Firebase no encontrada en: {path}. Asegúrate de que la carpeta Firebase/ existe.',
|
|
2436
|
-
'new.firebase.error.dirNotEmpty': 'El directorio "{path}" ya existe y no está vacío.',
|
|
2437
|
-
'new.firebase.error.aborted': 'Setup cancelado.',
|
|
2438
|
-
|
|
2439
|
-
'new.supabase.prereq.1': '1. Cuenta Supabase en supabase.com',
|
|
2440
|
-
'new.supabase.prereq.2': '2. Supabase CLI + Firebase CLI instalados (ambos obligatorios)',
|
|
2441
|
-
'new.supabase.prereq.3': '3. supabase login + firebase login (Firebase necesario para push)',
|
|
2442
|
-
'new.supabase.prereq.login': ' Si creas manualmente: ten URL y anon key del proyecto listos',
|
|
2443
|
-
'new.supabase.loginRequired': '⚠️ Debes estar conectado para crear proyecto. Ejecuta supabase login primero.',
|
|
2444
|
-
'new.supabase.loginCommand': ' supabase login',
|
|
2445
|
-
'new.supabase.success.done.db': '• Base de datos: tablas, politicas RLS',
|
|
2446
|
-
'new.supabase.success.done.storage': '• Storage: bucket kasy con politicas',
|
|
2447
|
-
'new.supabase.success.done.webhook': '• Edge Function revenuecat-webhook',
|
|
2448
|
-
'new.supabase.success.done.secrets': '• Secrets de Edge Function (si se informaron)',
|
|
2449
|
-
'new.supabase.success.done.launch': '• launch.json con Sentry, Mixpanel, RevenueCat',
|
|
2450
|
-
'new.supabase.success.auth': '• Auth: Email ya activado. Activa Google, Apple y Facebook en: {authUrl}',
|
|
2451
|
-
'new.supabase.success.storage': '• Storage: Bucket kasy creado con politicas (listo)',
|
|
2452
|
-
'new.supabase.success.fcm': '• Push (FCM): Configura en Firebase Console (plan Blaze). App lista para Supabase + FCM. URL: {fcmUrl}',
|
|
2453
|
-
'new.supabase.success.deployLater': '• Deploy del backend cuando estes listo (desde dentro de la carpeta del proyecto):',
|
|
2454
|
-
|
|
2455
|
-
'new.api.prereq.1': '1. Tu API REST corriendo y accesible',
|
|
2456
|
-
'new.api.prereq.2': '2. URL base de la API (ej: https://api.yourapp.com)',
|
|
2457
|
-
'new.api.prereq.3': '3. Firebase CLI obligatorio para notificaciones push (FCM)',
|
|
2458
|
-
'new.api.success.backendUrl': '• Apunta BACKEND_URL a tu API en ejecución (launch.json)',
|
|
2459
|
-
'new.api.success.fcm': '• Firebase es necesario para notificaciones push (FCM) — configura la clave APNs en la consola de Firebase',
|
|
2460
|
-
'new.api.success.auth': '• Implementa los endpoints de auth social (Google, Apple) en tu backend',
|
|
2461
|
-
|
|
2462
|
-
'new.outdated.hint': 'los proyectos creados ahora no tendrán las últimas mejoras.',
|
|
2463
|
-
'new.outdated.upgradeNow': '¿Actualizar a la última versión antes de crear? (requiere suscripción activa)',
|
|
2464
|
-
'new.outdated.upgraded': '¡kasy actualizado! Ejecuta kasy new nuevamente.',
|
|
2465
|
-
'new.success.title': '¡Proyecto creado con exito!',
|
|
2466
|
-
'new.success.nextSteps': 'Proximos pasos:',
|
|
2467
|
-
'new.success.step.cd': 'Ve a la carpeta del proyecto:',
|
|
2468
|
-
'new.success.step.deploy': 'Despliega el backend en Firebase:',
|
|
2469
|
-
'new.success.step.run': 'Ejecuta el app (con tus claves configuradas):',
|
|
2470
|
-
'new.success.step.run.vscode': '(o F5 en VS Code)',
|
|
2471
|
-
'new.success.step.console': 'Abre la consola del backend:',
|
|
2472
|
-
'new.fcm.generating': 'Generando clave de Service Account FCM…',
|
|
2473
|
-
'new.sha1.registering': 'Registrando SHA-1 para Google Sign-In (Android)…',
|
|
2474
|
-
'new.sha1.failed': 'SHA-1 no añadido automaticamente: {error}',
|
|
2475
|
-
'new.sha1.manual': 'Agregalo manualmente para que Google Sign-In funcione en Android:',
|
|
2476
|
-
'new.sha1.skipped.apiFailed': 'SHA-1 no añadido automáticamente. Motivo: {error}',
|
|
2477
|
-
'new.sha1.skipped.other': 'SHA-1 no añadido: {reason}',
|
|
2478
|
-
'new.sha1.addManually': 'Agrega manualmente: Firebase Console → Configuración del proyecto → Tus apps → Android → Agregar huella digital',
|
|
2479
|
-
'new.sha1.added': '✓ SHA-1 añadido (Google Sign-In)',
|
|
2480
|
-
'new.firestore.created': '✓ Firestore creado automáticamente',
|
|
2481
|
-
'new.firestore.notCreated.error': '⚠ Firestore no creado. Motivo: {error}',
|
|
2482
|
-
'new.firestore.notCreated': '⚠ Firestore no creado automáticamente',
|
|
2483
|
-
'new.storage.created': '✓ Firebase Storage creado automáticamente',
|
|
2484
|
-
'new.storage.notCreated.error': '⚠ Storage no creado. Motivo: {error}',
|
|
2485
|
-
'new.storage.notCreated': '⚠ Storage no creado automáticamente',
|
|
2486
|
-
'new.activateManually': 'Activa manualmente en la consola:',
|
|
2487
|
-
'new.fcm.serverConfig': 'Configura en tu servidor: FIREBASE_SERVICE_ACCOUNT_JSON="$(cat .kasy/fcm-service-account.json)"',
|
|
2488
|
-
'new.apns.warning': '⚠ Push iOS: configura la APNs Key en Firebase Console',
|
|
2489
|
-
'new.apns.step1': '1. Apple Developer Portal → Keys → crear APNs Key (.p8)',
|
|
2490
|
-
'new.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → subir la APNs Key',
|
|
2491
|
-
'new.firebase.create.estimatedTime': '(generalmente 3-5 min — no cierres la terminal)',
|
|
2492
|
-
'new.internet.warning': '📶 Asegúrate de tener una conexión a internet estable — este paso requiere red.',
|
|
2493
|
-
|
|
2494
|
-
// run command
|
|
2495
|
-
'cli.command.run.description': 'Corre la app en celular, simulador o navegador',
|
|
2496
|
-
'cli.command.reset.description': 'Desinstala la app en simulador/emulador/dispositivo para probar como primera instalación',
|
|
2497
|
-
'reset.title': 'Resetear app en el dispositivo',
|
|
2498
|
-
'reset.scanning': 'Buscando simuladores, emuladores y dispositivos conectados...',
|
|
2499
|
-
'reset.prompt.pickDevice': '¿En cuál quieres resetear?',
|
|
2500
|
-
'reset.resetting': 'Reseteando',
|
|
2501
|
-
'reset.reinstalling': 'Reinstalando la app...',
|
|
2502
|
-
'reset.success.uninstalled': 'App desinstalada. Todos los datos y permisos fueron eliminados.',
|
|
2503
|
-
'reset.info.notInstalled': 'La app no estaba instalada en este dispositivo.',
|
|
2504
|
-
'reset.warn.noDevices': 'Ningún simulador, emulador o dispositivo en ejecución. Inicia uno e intenta de nuevo.',
|
|
2505
|
-
'reset.warn.nothingSelected': 'Ningún dispositivo seleccionado.',
|
|
2506
|
-
'reset.warn.iosUninstallFailed': 'simctl uninstall falló.',
|
|
2507
|
-
'reset.warn.androidUninstallFailed': 'adb uninstall no devolvió éxito.',
|
|
2508
|
-
'reset.warn.iosDeviceManual': 'iPhone físico: borra la app manualmente (mantén pulsado el ícono → Eliminar app), luego reinstala con kasy run.',
|
|
2509
|
-
'reset.warn.iosDeviceUninstallFailed': 'devicectl no pudo desinstalar. Verifica que el iPhone esté desbloqueado y confíe en esta Mac.',
|
|
2510
|
-
'reset.warn.webIncognito': 'Web: abre la app en una ventana de incógnito/privada del navegador para probar como nuevo visitante.',
|
|
2511
|
-
'reset.warn.unknownPlatform': 'Plataforma no soportada',
|
|
2512
|
-
'reset.error.notFlutterProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter.',
|
|
2513
|
-
'reset.error.noIdentifier': 'No pude leer el bundle id ni el package name de Android de este proyecto.',
|
|
2514
|
-
'reset.error.noBundleId': 'Bundle id de iOS no encontrado.',
|
|
2515
|
-
'reset.error.noPackageName': 'applicationId de Android no encontrado.',
|
|
2516
|
-
'reset.outro.skipped': 'Listo. La app no fue desinstalada.',
|
|
2517
|
-
'reset.outro.uninstalledOnly': 'Listo. Ejecuta kasy run para reinstalar.',
|
|
2518
|
-
'reset.outro.cancelled': 'Cancelado. La app no fue desinstalada.',
|
|
2519
|
-
'reset.prompt.xcodeOpen': 'Xcode está abierto y va a entrar en conflicto con la instalación. ¿Qué quieres hacer?',
|
|
2520
|
-
'reset.prompt.xcodeOpen.close': 'Cerrar Xcode automáticamente (recomendado)',
|
|
2521
|
-
'reset.prompt.xcodeOpen.skip': 'Dejar Xcode abierto e intentar igual',
|
|
2522
|
-
'reset.prompt.xcodeOpen.cancel': 'Cancelar reset',
|
|
2523
|
-
'reset.info.xcodeClosed': 'Xcode cerrado.',
|
|
2524
|
-
'reset.prompt.reinstallNow': 'App removida. Verifica en el dispositivo y reinstalar ahora?',
|
|
2525
|
-
'run.launching': 'Iniciando app Flutter...',
|
|
2526
|
-
'run.updateHint.prefix': 'Mejoras disponibles para el proyecto —',
|
|
2527
|
-
'run.updateHint.suffix': 'para ver las novedades',
|
|
2528
|
-
'run.spinner.building': 'Iniciando Flutter…',
|
|
2529
|
-
'run.spinner.ready': 'Flutter listo — usa r (reload), R (restart), q (salir)',
|
|
2530
|
-
'run.spinner.failed': 'Flutter run fallo antes de iniciar',
|
|
2531
|
-
'run.stage.gradleFirstTime': 'Compilando Android (1.ª vez tarda 5-15 min — Gradle bajando dependencias)…',
|
|
2532
|
-
'run.stage.gradle': 'Compilando Android…',
|
|
2533
|
-
'run.stage.xcode': 'Compilando iOS…',
|
|
2534
|
-
'run.stage.pods': 'Instalando pods iOS…',
|
|
2535
|
-
'run.stage.installing': 'Instalando en el dispositivo…',
|
|
2536
|
-
'run.stage.syncing': 'Sincronizando archivos con el dispositivo…',
|
|
2537
|
-
'run.stage.buildSuccess': 'Build listo — abriendo la app…',
|
|
2538
|
-
'run.error.notFlutterProject': 'No se encontro pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter.',
|
|
2539
|
-
'run.error.flutterNotFound': 'Flutter no encontrado. Verifica que Flutter este instalado y en el PATH.',
|
|
2540
|
-
|
|
2541
|
-
// doctor project checks
|
|
2542
|
-
'doctor.project.title': 'Proyecto',
|
|
2543
|
-
'doctor.project.appName': 'Nombre del app',
|
|
2544
|
-
'doctor.project.backend': 'Backend',
|
|
2545
|
-
'doctor.project.bundleId': 'Bundle ID',
|
|
2546
|
-
'doctor.project.pubGet': 'Dependencias instaladas (pubspec.lock presente)',
|
|
2547
|
-
'doctor.project.pubGetMissing': 'Ejecuta flutter pub get — pubspec.lock no encontrado',
|
|
2548
|
-
'doctor.project.modules': 'Features activos',
|
|
2549
|
-
'doctor.project.noModules': 'Ninguna feature opcional activa',
|
|
2550
|
-
|
|
2551
|
-
// add command
|
|
2552
|
-
'cli.command.add.description': 'Añade algo nuevo a tu app (ej: kasy add ai_chat)',
|
|
2553
|
-
|
|
2554
|
-
// docs command
|
|
2555
|
-
'cli.command.docs.description': 'Abre la documentación completa',
|
|
2556
|
-
|
|
2557
|
-
// splash command
|
|
2558
|
-
'cli.command.splash.description': 'Cambia los logos del splash (claro/oscuro) y regenera los assets nativos',
|
|
2559
|
-
'splash.intro': 'Splash screen',
|
|
2560
|
-
'splash.validating': 'Validando archivos PNG...',
|
|
2561
|
-
'splash.validated': 'Los PNGs están bien',
|
|
2562
|
-
'splash.copying': 'Copiando logos a assets/images/...',
|
|
2563
|
-
'splash.copied': 'Logos copiados',
|
|
2564
|
-
'splash.generating': 'Regenerando splash nativo (Android, iOS, Web)...',
|
|
2565
|
-
'splash.generated': 'Splash nativo regenerado',
|
|
2566
|
-
'splash.done': 'Listo. Ejecuta "flutter run" para ver el nuevo splash.',
|
|
2567
|
-
'splash.warn.title': 'Avisos',
|
|
2568
|
-
'splash.warn.noAlphaLight': '{path} no tiene canal alpha (fondo transparente). El logo aparecerá con fondo sólido en vez de transparente.',
|
|
2569
|
-
'splash.warn.noAlphaDark': '{path} no tiene canal alpha (fondo transparente). El logo aparecerá con fondo sólido en vez de transparente.',
|
|
2570
|
-
'splash.warn.smallLight': 'El logo claro mide {w}x{h}. Lo recomendado es al menos 768x768 para evitar bordes borrosos.',
|
|
2571
|
-
'splash.warn.smallDark': 'El logo oscuro mide {w}x{h}. Lo recomendado es al menos 768x768 para evitar bordes borrosos.',
|
|
2572
|
-
'splash.summary.title': 'Guardado',
|
|
2573
|
-
'splash.summary.light': 'Modo claro',
|
|
2574
|
-
'splash.summary.dark': 'Modo oscuro',
|
|
2575
|
-
'splash.skipGenerate.title': 'Generación omitida',
|
|
2576
|
-
'splash.skipGenerate.hint': 'Ejecuta `dart run flutter_native_splash:create` cuando estés listo.',
|
|
2577
|
-
'splash.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
|
|
2578
|
-
'splash.error.bothRequired': '--light y --dark son obligatorios.',
|
|
2579
|
-
'splash.error.fileNotFound': 'Archivo no encontrado: {path}',
|
|
2580
|
-
'splash.error.notPng': 'Uno de los archivos no es un PNG válido.',
|
|
2581
|
-
'splash.error.generateFailed': 'flutter_native_splash:create falló. Revisa la salida.',
|
|
2582
|
-
|
|
2583
|
-
// icon command
|
|
2584
|
-
'cli.command.icon.description': 'Cambia el ícono del app (iOS + Android) y regenera los assets nativos',
|
|
2585
|
-
'icon.intro': 'Ícono del app',
|
|
2586
|
-
'icon.validating': 'Validando archivo PNG...',
|
|
2587
|
-
'icon.validated': 'PNG está bien',
|
|
2588
|
-
'icon.copying': 'Copiando ícono a assets/images/icon.png...',
|
|
2589
|
-
'icon.copied': 'Ícono copiado',
|
|
2590
|
-
'icon.generating': 'Regenerando íconos nativos (Android + iOS)...',
|
|
2591
|
-
'icon.generated': 'Íconos nativos regenerados',
|
|
2592
|
-
'icon.done': 'Listo. Desinstala el app del dispositivo y reinstala para ver el nuevo ícono.',
|
|
2593
|
-
'icon.warn.title': 'Avisos',
|
|
2594
|
-
'icon.warn.notSquare': 'El ícono mide {w}x{h} (no es cuadrado). La imagen se estirará. Usa una imagen cuadrada (1024x1024 recomendado).',
|
|
2595
|
-
'icon.warn.small': 'El ícono mide {w}x{h}. Lo recomendado es al menos 1024x1024 (App Store exige ese tamaño).',
|
|
2596
|
-
'icon.warn.hasAlpha': 'El ícono tiene transparencia. iOS rechaza íconos con canal alpha — flutter_launcher_icons lo elimina automáticamente (remove_alpha_ios: true).',
|
|
2597
|
-
'icon.summary.title': 'Guardado',
|
|
2598
|
-
'icon.summary.icon': 'Ícono del app',
|
|
2599
|
-
'icon.skipGenerate.title': 'Generación omitida',
|
|
2600
|
-
'icon.skipGenerate.hint': 'Ejecuta `dart run flutter_launcher_icons` cuando estés listo.',
|
|
2601
|
-
'icon.reinstall.title': 'Importante',
|
|
2602
|
-
'icon.reinstall.hint': 'iOS y Android cachean el ícono anterior. Desinstala el app y reinstala para ver el nuevo.',
|
|
2603
|
-
'icon.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
|
|
2604
|
-
'icon.error.imageRequired': '--image es obligatorio.',
|
|
2605
|
-
'icon.error.fileNotFound': 'Archivo no encontrado: {path}',
|
|
2606
|
-
'icon.error.notPng': 'El archivo no es un PNG válido.',
|
|
2607
|
-
'icon.error.generateFailed': 'flutter_launcher_icons falló. Revisa la salida.',
|
|
2608
|
-
|
|
2609
|
-
// favicon command
|
|
2610
|
-
'cli.command.favicon.description': 'Cambia el favicon / ícono PWA de la web y regenera los assets web',
|
|
2611
|
-
'favicon.intro': 'Favicon web',
|
|
2612
|
-
'favicon.validating': 'Validando archivo PNG...',
|
|
2613
|
-
'favicon.validated': 'PNG está bien',
|
|
2614
|
-
'favicon.copying': 'Copiando favicon a assets/images/favicon.png...',
|
|
2615
|
-
'favicon.copied': 'Favicon copiado',
|
|
2616
|
-
'favicon.generating': 'Regenerando íconos web (favicon + tamaños PWA)...',
|
|
2617
|
-
'favicon.generated': 'Íconos web regenerados',
|
|
2618
|
-
'favicon.done': 'Listo. Ejecuta "flutter run -d chrome" para ver el nuevo favicon.',
|
|
2619
|
-
'favicon.warn.title': 'Avisos',
|
|
2620
|
-
'favicon.warn.notSquare': 'El favicon mide {w}x{h} (no es cuadrado). Se estirará. Usa una imagen cuadrada (512x512+ recomendado).',
|
|
2621
|
-
'favicon.warn.small': 'El favicon mide {w}x{h}. Lo recomendado es al menos 512x512 para que se vea nítido en las pantallas de instalación PWA.',
|
|
2622
|
-
'favicon.summary.title': 'Guardado',
|
|
2623
|
-
'favicon.summary.favicon': 'Favicon',
|
|
2624
|
-
'favicon.skipGenerate.title': 'Generación omitida',
|
|
2625
|
-
'favicon.skipGenerate.hint': 'Ejecuta `dart run flutter_launcher_icons` cuando estés listo.',
|
|
2626
|
-
'favicon.error.notKasyProject': 'No se encontró pubspec.yaml. Ejecuta este comando dentro de un proyecto Flutter/Kasy.',
|
|
2627
|
-
'favicon.error.imageRequired': '--image es obligatorio.',
|
|
2628
|
-
'favicon.error.fileNotFound': 'Archivo no encontrado: {path}',
|
|
2629
|
-
'favicon.error.notPng': 'El archivo no es un PNG válido.',
|
|
2630
|
-
'favicon.error.generateFailed': 'flutter_launcher_icons falló. Revisa la salida.',
|
|
16
|
+
const LANGUAGE_CHOICES = [
|
|
17
|
+
{ title: 'English', value: 'en' },
|
|
18
|
+
{ title: 'Português', value: 'pt' },
|
|
19
|
+
{ title: 'Español', value: 'es' },
|
|
20
|
+
];
|
|
2631
21
|
|
|
2632
|
-
|
|
2633
|
-
'cli.command.notifications.description': 'Edita los textos de las notificaciones locales y recordatorios',
|
|
2634
|
-
'cli.command.notifications.text.description': 'Define titulos y mensajes de notificaciones locales',
|
|
2635
|
-
'cli.command.notifications.picker.intro': 'Editar textos de las notificaciones',
|
|
2636
|
-
'cli.command.notifications.picker.message': '¿Qué quieres hacer?',
|
|
2637
|
-
'notifications.error.notKasyProject': 'No se encontro kit_setup.json. Ejecuta dentro de un proyecto Kasy.',
|
|
2638
|
-
'notifications.error.noI18n': 'lib/i18n/*.i18n.json no encontrado en este proyecto.',
|
|
2639
|
-
'notifications.error.noFeatures': 'lib/core/config/features.dart no encontrado.',
|
|
2640
|
-
'notifications.error.notEnabled': 'Notificaciones locales desactivadas. Ejecuta: kasy add local_notifications',
|
|
2641
|
-
'notifications.error.cancelled': 'Cancelado.',
|
|
2642
|
-
'notifications.prompt.intro': 'Textos de notificación local',
|
|
2643
|
-
'notifications.prompt.hint': 'Demo Home = prueba instantanea en Features. Recordatorio = alerta programada en Ajustes.',
|
|
2644
|
-
'notifications.prompt.demoTitle': 'Demo Home — titulo de la notificación',
|
|
2645
|
-
'notifications.prompt.demoBody': 'Demo Home — descripción / cuerpo',
|
|
2646
|
-
'notifications.prompt.reminderTitle': 'Recordatorio programado — titulo',
|
|
2647
|
-
'notifications.prompt.reminderBody': 'Recordatorio programado — cuerpo',
|
|
2648
|
-
'notifications.prompt.required': 'Obligatorio.',
|
|
2649
|
-
'notifications.writing': 'Actualizando lib/i18n/*.i18n.json...',
|
|
2650
|
-
'notifications.written': 'Actualizado: {langs}',
|
|
2651
|
-
'notifications.slang': 'Ejecutando dart run slang...',
|
|
2652
|
-
'notifications.slangDone': 'Traducciones regeneradas',
|
|
2653
|
-
'notifications.slangFailed': 'dart run slang fallo — ejecuta manualmente en el proyecto',
|
|
2654
|
-
'notifications.done': 'Textos de notificación local actualizados.',
|
|
2655
|
-
'notifications.summary.demo': 'Home → Features (demo):',
|
|
2656
|
-
'notifications.summary.reminder': 'Ajustes → Recordatorios (programado):',
|
|
2657
|
-
|
|
2658
|
-
'add.list.title': 'Features del proyecto',
|
|
2659
|
-
'add.error.noModule': 'Indica el nombre de la feature o usa --list para ver las disponibles.',
|
|
2660
|
-
'add.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
|
|
2661
|
-
'add.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
|
|
2662
|
-
'add.alreadyActive': 'La feature "{module}" ya está activa en este proyecto.',
|
|
2663
|
-
'add.applying': 'Agregando feature: {module}',
|
|
2664
|
-
'add.applyingPatch': 'Aplicando cambios de la feature...',
|
|
2665
|
-
'add.patchApplied': 'Patch aplicado',
|
|
2666
|
-
'add.patchFailed': 'Patch fallo — revisa la salida anterior',
|
|
2667
|
-
'add.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
|
|
2668
|
-
'add.pubGetDone': 'Dependencias actualizadas',
|
|
2669
|
-
'add.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
|
|
2670
|
-
'add.buildRunner': 'Generando código (Riverpod/Freezed)...',
|
|
2671
|
-
'add.buildRunnerDone': 'Generación de código completada',
|
|
2672
|
-
'add.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
|
|
2673
|
-
'add.success': 'Feature "{module}" agregada exitosamente.',
|
|
2674
|
-
'add.cancelled': 'Cancelado.',
|
|
2675
|
-
'add.prompt.sentryDsn': 'Sentry DSN (deja en blanco para configurar después):',
|
|
2676
|
-
'add.prompt.mixpanelToken': 'Mixpanel Token (deja en blanco para configurar después):',
|
|
2677
|
-
'add.prompt.rcAndroidKey': 'RevenueCat Android API key (deja en blanco para configurar después):',
|
|
2678
|
-
'add.prompt.rcIosKey': 'RevenueCat iOS API key (deja en blanco para configurar después):',
|
|
2679
|
-
'add.note.facebook': 'Agrega tu Facebook App ID y token en .vscode/launch.json (FB_APP_ID, FB_TOKEN).',
|
|
2680
|
-
'new.q.llm_chat.configureNow': 'Configurar el agente de Chat LLM ahora?',
|
|
2681
|
-
'new.q.llm_chat.configureNow.hint': 'Puedes omitir y ejecutar "kasy add llm_chat" después',
|
|
2682
|
-
'add.llm_chat.reconfigure': 'Feature ya activa — reconfigurando solo las credenciales.',
|
|
2683
|
-
'add.prompt.llmProvider': 'Proveedor de LLM:',
|
|
2684
|
-
'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 >',
|
|
2685
|
-
'add.prompt.llmApiKey': 'Clave de API (OpenAI o Gemini) — se guarda en el servidor, nunca en el app (deja en blanco para configurar después):',
|
|
2686
|
-
'add.prompt.llmEndpoint': 'URL de tu endpoint LLM (deja en blanco para configurar después):',
|
|
2687
|
-
'add.llm_chat.settingSecret': 'Guardando clave de API como secret en el servidor...',
|
|
2688
|
-
'add.llm_chat.secretSet': 'Clave de API guardada como secret',
|
|
2689
|
-
'add.llm_chat.secretFailed': 'No se pudo guardar el secret automaticamente — configuralo manualmente (ver instrucciones abajo)',
|
|
2690
|
-
'add.llm_chat.skipSecret': 'Clave de API omitida — configura antes del deploy via CLI del servidor',
|
|
2691
|
-
'add.llm_chat.deploying': 'Desplegando funcion LLM en el servidor...',
|
|
2692
|
-
'add.llm_chat.deployed': 'Funcion LLM desplegada con exito',
|
|
2693
|
-
'add.llm_chat.deployFailed': 'Deploy automático fallo — despliega manualmente (ver instrucciones abajo)',
|
|
2694
|
-
'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',
|
|
2695
|
-
'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',
|
|
2696
|
-
'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',
|
|
2697
|
-
'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',
|
|
2698
|
-
'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',
|
|
2699
|
-
'cli.command.remove.description': 'Elimina algo que ya no usas (ej: kasy remove sentry)',
|
|
2700
|
-
'remove.error.noModule': 'Ingresa el nombre de la feature. Uso: kasy remove <feature>',
|
|
2701
|
-
'remove.error.notKasyProject': 'kit_setup.json no encontrado. Ejecuta este comando dentro de un proyecto Kasy.',
|
|
2702
|
-
'remove.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
|
|
2703
|
-
'remove.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
|
|
2704
|
-
'remove.confirm': 'Eliminar la feature "{module}"? Esto borrara archivos y dependencias.',
|
|
2705
|
-
'remove.cancelled': 'Cancelado.',
|
|
2706
|
-
'remove.removing': 'Eliminando feature: {module}',
|
|
2707
|
-
'remove.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
|
|
2708
|
-
'remove.pubGetDone': 'Dependencias actualizadas',
|
|
2709
|
-
'remove.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
|
|
2710
|
-
'remove.buildRunner': 'Generando código (Riverpod/Freezed)...',
|
|
2711
|
-
'remove.buildRunnerDone': 'Generación de código completada',
|
|
2712
|
-
'remove.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
|
|
2713
|
-
'remove.success': 'Feature "{module}" eliminada exitosamente.',
|
|
2714
|
-
'remove.warn.ci': 'Archivos de CI eliminados. Si tenias workflows personalizados, restauralos desde git.',
|
|
2715
|
-
'remove.warn.sentry.shared': 'sentry_flutter conservado — todavia requerido por features activas (revenuecat/facebook).',
|
|
2716
|
-
'cli.command.update.description': 'Actualiza partes de tu app a la última versión (ej: kasy update components)',
|
|
2717
|
-
'cli.command.update.targetArg': 'Objetivo a actualizar (ej.: revenuecat, sentry, components)',
|
|
2718
|
-
'update.error.noProject': 'kit_setup.json no encontrado. Ejecuta dentro de un proyecto Kasy.',
|
|
2719
|
-
'update.error.unknownModule': 'Feature desconocida: {module}\nDisponibles: {list}',
|
|
2720
|
-
'update.error.unknownTarget': 'Objetivo de actualización desconocido: {module}\nDisponibles: {list}',
|
|
2721
|
-
'update.error.notActive': 'La feature "{module}" no está activa en este proyecto.',
|
|
2722
|
-
'update.alreadyUpToDate': 'El proyecto ya está actualizado (v{versión}).',
|
|
2723
|
-
'update.status': 'Proyecto: v{from} → CLI: v{to}',
|
|
2724
|
-
'update.noVersion': 'El proyecto fue generado sin seguimiento de versión. Todas las features pueden actualizarse.',
|
|
2725
|
-
'update.changesTitle': 'Actualizaciones disponibles:',
|
|
2726
|
-
'update.reapplyTitle': 'Sin cambios nuevos — puedes reaplicar si es necesario:',
|
|
2727
|
-
'update.howToUpdate': 'Para actualizar una feature:',
|
|
2728
|
-
'update.howToUpdateComponents': 'Para actualizar componentes base:',
|
|
2729
|
-
'update.warn.commit': 'Esto sobrescribirá los archivos de la feature "{module}". Asegúrate de haber hecho commit antes.',
|
|
2730
|
-
'update.warn.commitComponents': 'Esto sobrescribirá archivos de los componentes base. Asegúrate de haber hecho commit antes.',
|
|
2731
|
-
'update.confirm': 'Sobrescribir archivos de la feature "{module}" con la versión más reciente?',
|
|
2732
|
-
'update.confirmComponents': 'Sobrescribir archivos de los componentes base con la versión más reciente?',
|
|
2733
|
-
'update.confirmCore': 'Sobrescribir archivos de core (animaciones, widgets, tema, herramientas dev) con la versión más reciente?',
|
|
2734
|
-
'update.cancelled': 'Cancelado.',
|
|
2735
|
-
'update.applying': 'Aplicando actualización de la feature: {module}',
|
|
2736
|
-
'update.applyingComponents': 'Aplicando actualización de componentes base...',
|
|
2737
|
-
'update.applyingCore': 'Aplicando actualización de archivos de core...',
|
|
2738
|
-
'update.applied': 'Feature {module} actualizada',
|
|
2739
|
-
'update.appliedComponents': '{count} archivos de componentes base actualizados',
|
|
2740
|
-
'update.appliedCore': '{count} archivos de core actualizados',
|
|
2741
|
-
'update.applyFailed': 'Error al aplicar actualización de la feature {module}',
|
|
2742
|
-
'update.applyComponentsFailed': 'Error al aplicar actualización de componentes base',
|
|
2743
|
-
'update.noPatch': 'La feature "{module}" no tiene archivos para actualizar (feature solo de configuración).',
|
|
2744
|
-
'update.noComponentFiles': 'No se encontraron archivos de componentes base para actualizar.',
|
|
2745
|
-
'update.pubGet': 'Instalando paquetes de Flutter (flutter pub get)...',
|
|
2746
|
-
'update.pubGetDone': 'Dependencias actualizadas',
|
|
2747
|
-
'update.pubGetFailed': 'Falló al instalar paquetes de Flutter — ejecuta `flutter pub get` manualmente',
|
|
2748
|
-
'update.buildRunner': 'Generando código (Riverpod/Freezed)...',
|
|
2749
|
-
'update.buildRunnerDone': 'Generación de código completada',
|
|
2750
|
-
'update.buildRunnerFailed': 'Generación de código falló — ejecuta `dart run build_runner build` manualmente',
|
|
2751
|
-
'update.success': 'Feature "{module}" actualizada exitosamente.',
|
|
2752
|
-
'update.componentsSuccess': 'Componentes base actualizados exitosamente.',
|
|
2753
|
-
'update.coreSuccess': 'Archivos de core actualizados exitosamente.',
|
|
2754
|
-
'check.intro': 'Kasy Check — Notificaciones Push',
|
|
2755
|
-
'check.firebase.detected': 'Backend Firebase',
|
|
2756
|
-
'check.firebase.adcInfo': 'Firebase usa Application Default Credentials — no requiere configuración extra.',
|
|
2757
|
-
'check.apns.warn': 'Push iOS requiere APNs Key (no verificable via CLI)',
|
|
2758
|
-
'check.apns.where': 'Firebase Console → Cloud Messaging → app iOS → Clave de autenticación APNs',
|
|
2759
|
-
'check.done': 'Listo',
|
|
2760
|
-
'check.notKasy': 'Este directorio no parece ser un proyecto Kasy.',
|
|
2761
|
-
'check.aborted': 'Cancelado',
|
|
2762
|
-
'check.supabase.notLinked': 'Proyecto Supabase no vinculado',
|
|
2763
|
-
'check.supabase.notLinkedHint': 'ejecuta: supabase link --project-ref TU_REF',
|
|
2764
|
-
'check.supabase.linked': 'Proyecto vinculado',
|
|
2765
|
-
'check.spin.secrets': 'Verificando secrets…',
|
|
2766
|
-
'check.spin.secretsDone': 'Secrets verificados',
|
|
2767
|
-
'check.secrets.listFailed': 'No se pudo listar los secrets',
|
|
2768
|
-
'check.secrets.checkLogin': 'verifica: supabase login',
|
|
2769
|
-
'check.fbProjId.ok': 'FIREBASE_PROJECT_ID configurado',
|
|
2770
|
-
'check.fbProjId.missing': 'FIREBASE_PROJECT_ID ausente',
|
|
2771
|
-
'check.fbProjId.fixHint': 'Corrige: supabase secrets set FIREBASE_PROJECT_ID="{id}"',
|
|
2772
|
-
'check.fbProjId.fixed': 'FIREBASE_PROJECT_ID → configurado automáticamente',
|
|
2773
|
-
'check.fbProjId.fixFailed': 'FIREBASE_PROJECT_ID → falló al configurar',
|
|
2774
|
-
'check.fbSak.ok': 'FIREBASE_SERVICE_ACCOUNT_JSON configurado',
|
|
2775
|
-
'check.fbSak.missing': 'FIREBASE_SERVICE_ACCOUNT_JSON ausente',
|
|
2776
|
-
'check.fbSak.spin': 'Generando y configurando clave FCM…',
|
|
2777
|
-
'check.fbSak.spinDone': 'Clave FCM generada',
|
|
2778
|
-
'check.fbSak.fixed': 'FIREBASE_SERVICE_ACCOUNT_JSON → configurado automáticamente',
|
|
2779
|
-
'check.fbSak.fixFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → falló al configurar',
|
|
2780
|
-
'check.fbSak.genFailed': 'FIREBASE_SERVICE_ACCOUNT_JSON → no se pudo generar la clave',
|
|
2781
|
-
'check.fbSak.manual': "Manual: Firebase Console → Configuración → Cuentas de servicio → Generar clave\nLuego: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat clave.json)'",
|
|
2782
|
-
'check.fbSak.hint': "Corrige automáticamente: kasy check --fix\nO manualmente: Firebase Console → Configuración → Cuentas de servicio → Generar clave\nLuego: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='$(cat clave.json)'",
|
|
2783
|
-
'check.fn.spin': 'Verificando edge functions…',
|
|
2784
|
-
'check.fn.spinDone': 'Edge functions verificadas',
|
|
2785
|
-
'check.fn.listFailed': 'No se pudo listar edge functions',
|
|
2786
|
-
'check.fn.deployed': 'Edge function send-push-notification publicada',
|
|
2787
|
-
'check.fn.missing': 'Edge function send-push-notification no publicada',
|
|
2788
|
-
'check.fn.deploySpin': 'Publicando send-push-notification…',
|
|
2789
|
-
'check.fn.deployDone': 'send-push-notification → publicada automáticamente',
|
|
2790
|
-
'check.fn.deployFailed': 'send-push-notification → falló el deploy',
|
|
2791
|
-
'check.fn.hint': 'Corrige automáticamente: kasy check --fix\nO manualmente: supabase functions deploy send-push-notification',
|
|
2792
|
-
'deploy.firebase.intro': 'Deploy — Firebase',
|
|
2793
|
-
'deploy.firebase.spin': 'Publicando en Firebase...',
|
|
2794
|
-
'deploy.firebase.spinDone': 'Deploy de Firebase completado',
|
|
2795
|
-
'deploy.apns.title': 'Push iOS: configura la APNs Key en Firebase Console',
|
|
2796
|
-
'deploy.apns.step1': '1. Apple Developer Portal → Keys → crear APNs Key (.p8)',
|
|
2797
|
-
'deploy.apns.step2': '2. Firebase Console → Cloud Messaging → app iOS → subir APNs Key',
|
|
2798
|
-
'deploy.supabase.intro': 'Deploy — Supabase',
|
|
2799
|
-
'deploy.supabase.notLinked': 'Proyecto Supabase no vinculado en este directorio.',
|
|
2800
|
-
'deploy.supabase.linkHint': 'Ejecuta: supabase link --project-ref TU_PROJECT_REF',
|
|
2801
|
-
'deploy.supabase.projectRef': 'Project ref: {ref}',
|
|
2802
|
-
'deploy.supabase.sakAlready': 'FIREBASE_SERVICE_ACCOUNT_JSON ya configurado',
|
|
2803
|
-
'deploy.supabase.sakSpin': 'Generando clave FCM (Service Account)…',
|
|
2804
|
-
'deploy.supabase.sakSpinDone': 'Clave FCM generada',
|
|
2805
|
-
'deploy.supabase.sakManual': "Configura manualmente: supabase secrets set FIREBASE_SERVICE_ACCOUNT_JSON='...'",
|
|
2806
|
-
'deploy.supabase.sakNoGS': 'google-services.json no encontrado — configura manualmente',
|
|
2807
|
-
'deploy.supabase.fnSpin': 'Publicando edge functions…',
|
|
2808
|
-
'deploy.supabase.fnSpinDone': 'Edge functions procesadas',
|
|
2809
|
-
'deploy.supabase.fnNone': 'edge functions (ninguna encontrada)',
|
|
2810
|
-
'deploy.outro': 'Deploy completado',
|
|
2811
|
-
}
|
|
2812
|
-
};
|
|
22
|
+
const MESSAGES = { en, pt, es };
|
|
2813
23
|
|
|
2814
24
|
function normalizeLanguage(value) {
|
|
2815
|
-
if (!value)
|
|
2816
|
-
return null;
|
|
2817
|
-
}
|
|
25
|
+
if (!value) return null;
|
|
2818
26
|
|
|
2819
27
|
const normalized = String(value).trim().toLowerCase().replace('_', '-');
|
|
2820
|
-
if (!normalized)
|
|
2821
|
-
return null;
|
|
2822
|
-
}
|
|
28
|
+
if (!normalized) return null;
|
|
2823
29
|
|
|
2824
30
|
if (normalized.startsWith('pt') || normalized === 'portugues' || normalized === 'portuguese') {
|
|
2825
31
|
return 'pt';
|
|
2826
32
|
}
|
|
2827
|
-
|
|
2828
33
|
if (normalized.startsWith('es') || normalized === 'espanol' || normalized === 'spanish') {
|
|
2829
34
|
return 'es';
|
|
2830
35
|
}
|
|
2831
|
-
|
|
2832
36
|
if (normalized.startsWith('en') || normalized === 'english') {
|
|
2833
37
|
return 'en';
|
|
2834
38
|
}
|
|
2835
|
-
|
|
2836
39
|
return null;
|
|
2837
40
|
}
|
|
2838
41
|
|
|
@@ -2868,5 +71,5 @@ module.exports = {
|
|
|
2868
71
|
LANGUAGE_CHOICES,
|
|
2869
72
|
createTranslator,
|
|
2870
73
|
detectDefaultLanguage,
|
|
2871
|
-
normalizeLanguage
|
|
74
|
+
normalizeLanguage,
|
|
2872
75
|
};
|