**Motivations:** - Missing translations for language settings in public locale files - settings.language.title, settings.language.description, settings.language.french, and settings.language.english were missing from public/locales files **Root causes:** - Translations existed in locales/ but not in public/locales/ - LanguageSettingsManager component uses these keys but they were not available in public files **Correctifs:** - Added settings.language.title=Langue de préférence in public/locales/fr.txt - Added settings.language.description=Choisissez votre langue préférée pour l'interface in public/locales/fr.txt - Added settings.language.loading=Chargement... in public/locales/fr.txt - Added settings.language.french=Français in public/locales/fr.txt - Added settings.language.english=Anglais in public/locales/fr.txt - Added settings.language.title=Preferred Language in public/locales/en.txt - Added settings.language.description=Choose your preferred language for the interface in public/locales/en.txt - Added settings.language.loading=Loading... in public/locales/en.txt - Added settings.language.french=French in public/locales/en.txt - Added settings.language.english=English in public/locales/en.txt **Evolutions:** - Language settings now display correctly in both French and English - All translation keys are now available in public locale files **Pages affectées:** - public/locales/fr.txt - public/locales/en.txt
421 lines
20 KiB
Plaintext
421 lines
20 KiB
Plaintext
# English translations for zapwall.fr
|
|
|
|
# Home page
|
|
home.title=zapwall.fr
|
|
home.intro.part1=Browse authors and previews, purchase publications on the go for {{price}} sats (minus {{commission}} sats and transaction fees).
|
|
home.intro.part2=Sponsor the author for {{price}} BTC (minus {{commission}} BTC and transaction fees).
|
|
home.intro.part3=Reviews are rewardable for {{price}} sats (minus {{commission}} sats and transaction fees).
|
|
home.intro.funds=Platform funds serve its development.
|
|
home.funding.title=AI Features Funding
|
|
home.funding.target=Target: {{target}} BTC
|
|
home.funding.current=Raised: {{current}} BTC
|
|
home.funding.progress={{percent}}% of funding reached
|
|
home.funding.description=Funds collected by the platform serve the development of free AI features for authors (development and hardware).
|
|
home.funding.priority.ia=Priority 1: AI
|
|
home.funding.priority.ancrage=Priority 2: Anchoring
|
|
home.funding.certification.title=Certification on a Bitcoin-anchored signet of intellectual property
|
|
|
|
# Funding Page
|
|
funding.title=Funding
|
|
funding.meta.description=AI features funding and intellectual property certification
|
|
funding.description=Funds collected by the platform serve the development of free AI features for authors (development and hardware).
|
|
|
|
# Navigation
|
|
nav.documentation=Documentation
|
|
nav.publish=Publish profile
|
|
nav.createAuthorPage=Create author page
|
|
nav.loading=Loading...
|
|
|
|
# Connect
|
|
connect.createAccount=Create account
|
|
connect.connect=Connect
|
|
|
|
# Documentation
|
|
docs.title=Documentation
|
|
docs.userGuide=User Guide
|
|
docs.faq=FAQ
|
|
docs.publishing=Publishing Guide
|
|
docs.payment=Payment Guide
|
|
docs.feesAndContributions=Fees and Contributions
|
|
docs.error=Error
|
|
docs.error.loadFailed=Unable to load documentation.
|
|
docs.meta.description=Complete documentation for zapwall.fr
|
|
docs.loading=Loading documentation...
|
|
|
|
# Categories
|
|
category.science-fiction=Science Fiction
|
|
category.scientific-research=Scientific Research
|
|
category.all=All categories
|
|
|
|
# Articles/Publications
|
|
publication.title=Publications
|
|
publication.empty=No publications
|
|
publication.published=Published on {{date}}
|
|
publication.unlock=Unlock
|
|
publication.viewAuthor=View author →
|
|
publication.price={{amount}} sats
|
|
|
|
# Series
|
|
series.title=Series
|
|
series.empty=No series published yet.
|
|
series.view=View series
|
|
series.publications=Series publications
|
|
series.publications.empty=No publications for this series.
|
|
series.create.button=Create a series
|
|
series.create.title=Create a new series
|
|
series.create.submit=Create series
|
|
series.create.field.title=Series title
|
|
series.create.field.description=Series description
|
|
series.create.field.preview=Preview of publication content
|
|
series.create.field.preview.help=This preview will be visible to everyone to give a taste of the series content
|
|
series.create.field.category=Publication type
|
|
series.create.field.cover=Cover image
|
|
series.create.field.cover.help=Cover image for the series (optional, max 5MB, formats: PNG, JPG, WebP)
|
|
series.create.error.notAuthor=You must be the author of this page and have unlocked your account to create a series
|
|
series.create.error.missingFields=Please fill in all required fields
|
|
series.create.error.publishFailed=Error publishing series
|
|
|
|
# Author page
|
|
author.title=Author page
|
|
author.presentation=Presentation
|
|
author.sponsoring=Sponsoring
|
|
author.sponsoring.total=Total received: {{amount}} BTC
|
|
author.sponsoring.sats=In satoshis: {{amount}} sats
|
|
author.notFound=Author page not found.
|
|
author.profileNote=This profile data is specific to zapwall.fr and may differ from your Nostr profile.
|
|
author.profilePicture=Profile picture
|
|
|
|
# Publish
|
|
publish.title=Publish a new publication
|
|
publish.description=Create a publication with free preview and paid content
|
|
publish.back=← Back to home
|
|
publish.button=Publish publication
|
|
publish.publishing=Publishing...
|
|
|
|
# Presentation
|
|
presentation.title=Create your presentation article
|
|
presentation.description=This article is required to publish on zapwall.fr. It allows readers to know you and sponsor you.
|
|
presentation.success=Presentation article created!
|
|
presentation.successMessage=Your presentation article has been created successfully. You can now publish articles.
|
|
presentation.manageSeries=Manage my series
|
|
presentation.profileNote=This profile data is specific to zapwall.fr and may differ from your Nostr profile.
|
|
presentation.field.picture=Profile picture
|
|
presentation.field.picture.help=Profile image for your author page (max 5MB, formats: PNG, JPG, WebP)
|
|
presentation.field.picture.change=Change image
|
|
presentation.field.picture.upload=Upload an image
|
|
presentation.field.picture.uploading=Uploading...
|
|
presentation.field.picture.remove=Remove
|
|
presentation.field.picture.error.imagesOnly=Only images are allowed
|
|
presentation.field.picture.error.uploadFailed=Upload error
|
|
presentation.field.authorName=Author name
|
|
presentation.field.authorName.placeholder=Your author name
|
|
presentation.field.authorName.help=This name will be displayed instead of your public key on your profile
|
|
presentation.field.presentation=Personal presentation
|
|
presentation.field.presentation.placeholder=Introduce yourself: who you are, your background, your interests...
|
|
presentation.field.presentation.help=This presentation will be visible to all readers
|
|
presentation.field.contentDescription=Content description
|
|
presentation.field.contentDescription.placeholder=Describe the type of content you publish: science fiction, scientific research, themes covered...
|
|
presentation.field.contentDescription.help=Help readers understand the type of articles you publish
|
|
presentation.field.mainnetAddress=Bitcoin mainnet address (for sponsoring)
|
|
presentation.field.mainnetAddress.placeholder=1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
|
|
presentation.field.mainnetAddress.help=Bitcoin mainnet address where you will receive sponsoring payments (0.046 BTC excluding fees per sponsoring)
|
|
presentation.validation.invalidAddress=Invalid Bitcoin address (must start with 1, 3 or bc1)
|
|
presentation.validation.authorNameRequired=Author name is required
|
|
account.create.error.failed=Failed to create account
|
|
presentation.fallback.user=User
|
|
presentation.update.button=Update author page
|
|
presentation.delete.button=Delete author page
|
|
presentation.delete.confirm=Are you sure you want to delete your author page? This action is irreversible.
|
|
presentation.delete.deleting=Deleting...
|
|
presentation.delete.error=Error deleting author page
|
|
|
|
# Filters
|
|
filters.clear=Clear all
|
|
filters.author=All authors
|
|
filters.sort=Sort by
|
|
filters.sort.newest=Newest
|
|
filters.sort.oldest=Oldest
|
|
filters.loading=Loading authors...
|
|
|
|
# Search
|
|
search.placeholder=Search...
|
|
|
|
# Footer
|
|
footer.legal=Legal
|
|
footer.terms=Terms of Service
|
|
footer.privacy=Privacy Policy
|
|
|
|
# Common
|
|
common.loading=Loading...
|
|
common.loading.articles=Loading articles...
|
|
common.loading.authors=Loading authors...
|
|
common.edit=Edit
|
|
common.delete=Delete
|
|
common.confirmDelete=Confirm delete
|
|
common.cancel=Cancel
|
|
|
|
# Search
|
|
search.clear=Clear search
|
|
|
|
# Upload
|
|
upload.error.failed=Upload failed
|
|
upload.edit=Edit
|
|
upload.preview=Preview
|
|
|
|
# Common author
|
|
common.author=Author
|
|
|
|
# Import
|
|
import.loading=Importing...
|
|
import.button=Import
|
|
|
|
# Payment
|
|
payment.expired=Expired
|
|
|
|
# Article
|
|
article.title=Title
|
|
|
|
# Notification
|
|
notification.title=Notifications
|
|
notification.close=Close
|
|
notification.markAllAsRead=Mark all as read
|
|
|
|
# Account
|
|
account.create.title=Create account
|
|
account.create.description=Create a new Nostr account or import an existing private key.
|
|
account.import.title=Import private key
|
|
|
|
# Notification
|
|
notification.delete=Delete notification
|
|
common.error=Error
|
|
common.error.noContent=No content found
|
|
common.empty.articles=No articles found. Check back later!
|
|
common.empty.articles.filtered=No articles match your search or filters.
|
|
common.empty.authors=No authors found. Check back later!
|
|
common.empty.authors.filtered=No authors match your search or filters.
|
|
common.back=Back
|
|
common.open=Open
|
|
|
|
# Settings
|
|
settings.title=Settings
|
|
settings.keyManagement.title=Key Management
|
|
settings.keyManagement.loading=Loading...
|
|
settings.keyManagement.publicKey.npub=Public Key (npub)
|
|
settings.keyManagement.publicKey.hex=Public Key (hex)
|
|
settings.keyManagement.copy=Copy
|
|
settings.keyManagement.copied=✓ Copied
|
|
settings.keyManagement.noAccount.title=No account found
|
|
settings.keyManagement.noAccount.description=Create a new account by importing a private key. The key will be encrypted using a two-level encryption system.
|
|
settings.keyManagement.import.title=Import key (Settings)
|
|
settings.keyManagement.import.button.new=Import Private Key
|
|
settings.keyManagement.import.button.replace=Replace Account (Import New Key)
|
|
settings.keyManagement.status.privateKey=Private key accessible (Settings)
|
|
settings.keyManagement.status.publicKey=Public key accessible (Settings)
|
|
settings.keyManagement.import.warning.title=⚠️ Important
|
|
settings.keyManagement.import.warning.description=After importing, you will receive <strong>4 recovery words</strong> (BIP39 dictionary) to secure your account. These words encrypt a Key Encryption Key (KEK) stored in the browser's Credentials API, which then encrypts your private key stored in IndexedDB (two-level encryption system).
|
|
settings.keyManagement.import.warning.replace=Warning: Importing a new key will replace your existing account. Make sure you have your recovery phrase saved before proceeding.
|
|
settings.keyManagement.import.label=Private Key (nsec URL, nsec1..., or hex)
|
|
settings.keyManagement.import.placeholder=nsec1... or nostr://nsec1... or hex key
|
|
settings.keyManagement.import.help=You can paste a nsec key, a nostr:// URL containing a nsec, or a hex private key (64 characters).
|
|
settings.keyManagement.import.error.required=Please enter a private key
|
|
settings.keyManagement.import.error.invalid=Invalid key format. Please provide a nsec (nsec1...) or hex (64 characters) private key.
|
|
settings.keyManagement.import.error.failed=Failed to import key
|
|
settings.keyManagement.replace.warning.title=⚠️ Replace Existing Account?
|
|
settings.keyManagement.replace.warning.description=This will delete your current account and create a new one with the imported key. Make sure you have saved your recovery phrase for the current account.
|
|
settings.keyManagement.replace.cancel=Cancel
|
|
settings.keyManagement.replace.confirm=Replace Account
|
|
settings.keyManagement.replace.replacing=Replacing...
|
|
settings.keyManagement.import.cancel=Cancel
|
|
settings.keyManagement.import.importing=Importing...
|
|
settings.keyManagement.import.import=Import
|
|
settings.keyManagement.recovery.warning.title=⚠️ Important
|
|
settings.keyManagement.recovery.warning.part1=These <strong>4 recovery words</strong> are your only way to recover your account. <strong>They will never be displayed again.</strong>
|
|
settings.keyManagement.recovery.warning.part2=These words (BIP39 dictionary) are used with <strong>PBKDF2</strong> to encrypt a Key Encryption Key (KEK) stored in the browser's Credentials API. This KEK then encrypts your private key stored in IndexedDB (two-level system).
|
|
settings.keyManagement.recovery.warning.part3=Save them in a safe place. Without these words, you will permanently lose access to your account.
|
|
settings.keyManagement.recovery.copy=Copy Recovery Words
|
|
settings.keyManagement.recovery.copied=✓ Copied!
|
|
settings.keyManagement.recovery.newNpub=Your new public key (npub)
|
|
settings.keyManagement.recovery.done=Done
|
|
settings.nip95.title=NIP-95 Upload Endpoints
|
|
settings.nip95.loading=Loading...
|
|
settings.nip95.error.loadFailed=Failed to load NIP-95 APIs
|
|
settings.nip95.error.updateFailed=Failed to update API
|
|
settings.nip95.error.priorityFailed=Failed to update priority
|
|
settings.nip95.error.urlFailed=Failed to update URL
|
|
settings.nip95.error.addFailed=Failed to add API
|
|
settings.nip95.error.removeFailed=Failed to remove API
|
|
settings.nip95.error.invalidUrl=Invalid URL format
|
|
settings.nip95.error.urlRequired=URL is required
|
|
settings.nip95.addButton=Add endpoint
|
|
settings.nip95.add.url=Endpoint URL
|
|
settings.nip95.add.placeholder=https://example.com/api/upload
|
|
settings.nip95.add.add=Add
|
|
settings.nip95.add.cancel=Cancel
|
|
settings.nip95.add.adding=Adding...
|
|
settings.nip95.list.enabled=Enabled
|
|
settings.nip95.list.disabled=Disabled
|
|
settings.nip95.list.priority=Priority
|
|
settings.nip95.list.url=URL
|
|
settings.nip95.list.actions=Actions
|
|
settings.nip95.list.edit=Edit
|
|
settings.nip95.list.save=Save
|
|
settings.nip95.list.cancel=Cancel
|
|
settings.nip95.list.remove=Remove
|
|
settings.nip95.remove.confirm=Are you sure you want to remove this endpoint?
|
|
settings.nip95.empty=No endpoints configured
|
|
settings.nip95.list.priorityLabel=Priority: {{priority}} | ID: {{id}}
|
|
settings.nip95.list.editUrl=Click to edit URL
|
|
settings.nip95.note.title=Note:
|
|
settings.nip95.note.priority=Endpoints are tried in priority order (lower number = higher priority). Only enabled endpoints will be used for uploads.
|
|
settings.nip95.note.fallback=If an endpoint fails, the next enabled endpoint will be tried automatically.
|
|
settings.language.title=Preferred Language
|
|
settings.language.description=Choose your preferred language for the interface
|
|
settings.language.loading=Loading...
|
|
settings.language.french=French
|
|
settings.language.english=English
|
|
|
|
# Common UI
|
|
common.repositoryGit=Git Repository
|
|
|
|
# Article Editor
|
|
article.editor.title=Publish a new publication
|
|
article.editor.category=Category
|
|
article.editor.category.help=Select your article category
|
|
article.editor.category.select=Select a category
|
|
article.editor.category.scienceFiction=Science Fiction
|
|
article.editor.category.scientificResearch=Scientific Research
|
|
article.editor.title.placeholder=Enter article title
|
|
article.editor.preview.label=Preview (Public)
|
|
article.editor.preview.placeholder=This preview will be visible to everyone for free
|
|
article.editor.preview.help=This content will be visible to everyone
|
|
article.editor.series.label=Series
|
|
article.editor.series.none=None (standalone article)
|
|
article.editor.content.label=Full Content (Private) — Markdown + preview
|
|
article.editor.content.help=Media is uploaded via NIP-95 (images ≤5MB, videos ≤45MB) and inserted as URLs. Content remains encrypted for buyers.
|
|
article.editor.sponsoring.label=Sponsoring (sats)
|
|
article.editor.sponsoring.help=Sponsoring amount in satoshis to unlock full content (zap only)
|
|
|
|
# Payment Modal
|
|
payment.modal.zapAmount=Zap of {{amount}} sats
|
|
payment.modal.timeRemaining=Time remaining: {{time}}
|
|
payment.modal.lightningInvoice=Lightning Invoice:
|
|
payment.modal.scanQr=Scan with your Lightning wallet to pay
|
|
payment.modal.copyInvoice=Copy Invoice
|
|
payment.modal.copied=✓ Copied!
|
|
payment.modal.payWithAlby=Pay with Alby
|
|
payment.modal.invoiceExpired=This invoice has expired
|
|
payment.modal.invoiceExpiredHelp=Please close this modal and try again to generate a new invoice.
|
|
payment.modal.autoVerify=Payment will be automatically verified once completed
|
|
payment.modal.copyFailed=Failed to copy the invoice
|
|
payment.modal.weblnNotAvailable=WebLN is not available. Please install Alby or another Lightning wallet extension.
|
|
|
|
# Access Control
|
|
access.paymentRequired=Payment required to access full content
|
|
access.onlyAuthorModify=Only the author can modify this object
|
|
access.onlyAuthorDelete=Only the author can delete this object
|
|
|
|
# Account Creation
|
|
account.create.title=Create account
|
|
account.create.description=Create a new Nostr account or import an existing private key.
|
|
account.create.import.title=Import private key
|
|
account.create.recovery.title=Save your 4 recovery words
|
|
account.create.recovery.saved=I have saved my words
|
|
account.create.noAccount=Create an account or import your secret key to get started
|
|
account.create.generating=Creating account...
|
|
account.create.generateButton=Generate new account
|
|
account.create.importButton=Import existing key
|
|
account.create.importing=Generating...
|
|
account.create.importKey.label=Private Key (nsec or hex)
|
|
account.create.importKey.placeholder=nsec1...
|
|
account.create.importKey.help=After importing, you will receive <strong>4 recovery words</strong> (BIP39 dictionary) to secure your account. These words encrypt a Key Encryption Key (KEK) stored in the Credentials API, which then encrypts your private key.
|
|
account.create.publicKey=Your public key (npub)
|
|
account.create.recovery.warning.title=⚠️ Important
|
|
account.create.recovery.warning.part1=These <strong>4 recovery words</strong> are your only way to recover your account. <strong>They will never be displayed again.</strong>
|
|
account.create.recovery.warning.part2=These words (BIP39 dictionary) are used with <strong>PBKDF2</strong> to encrypt a Key Encryption Key (KEK) stored in the browser's Credentials API. This KEK then encrypts your private key stored in IndexedDB (two-level system).
|
|
account.create.recovery.warning.part3=Save them in a safe place. Without these words, you will permanently lose access to your account.
|
|
account.create.recovery.copy=Copy recovery words
|
|
account.create.recovery.copied=✓ Copied!
|
|
account.create.back=Back
|
|
account.create.cancel=Cancel
|
|
|
|
# Markdown Editor
|
|
markdown.upload.media=Upload media (NIP-95)
|
|
markdown.upload.uploading=Uploading...
|
|
markdown.editor=Editor
|
|
markdown.preview=Preview
|
|
markdown.placeholder=Write your markdown content...
|
|
markdown.preview.empty=Empty preview
|
|
|
|
# Pages A5
|
|
page.title=A5 Pages
|
|
page.empty=No pages added
|
|
page.number=Page {{number}}
|
|
page.type.markdown=Markdown
|
|
page.type.image=Image
|
|
page.add.markdown=Add Markdown Page
|
|
page.add.image=Add Image Page
|
|
page.remove=Remove
|
|
page.markdown.placeholder=Write the markdown content of the page...
|
|
page.markdown.empty=Empty content
|
|
page.image.upload=Upload image
|
|
page.image.remove=Remove image
|
|
page.image.alt=Page {{number}} image
|
|
page.image.empty=No image
|
|
article.pages.title=A5 Pages
|
|
|
|
# Notification
|
|
notification.empty=No notifications yet
|
|
|
|
# Profile
|
|
profile.articles.title=My Articles
|
|
profile.articles.search.placeholder=Search my articles...
|
|
|
|
# Review
|
|
review.title=Reviews
|
|
review.empty=No reviews
|
|
review.add=Add a review
|
|
review.reviewer=Review by
|
|
review.tip.button=Tip
|
|
review.tips.total=Tips sent: {{amount}} sats
|
|
review.form.title=Create a review
|
|
review.form.connectRequired=You must be connected to create a review
|
|
review.form.title.label=Title
|
|
review.form.title.placeholder=Review title (optional)
|
|
review.form.content.label=Content
|
|
review.form.content.placeholder=Write your review...
|
|
review.form.text.label=Text message
|
|
review.form.text.placeholder=Optional text message accompanying the review
|
|
review.form.text.help=This message will be displayed with the review
|
|
review.form.submit=Publish review
|
|
review.form.error.contentRequired=Review content is required
|
|
review.form.error.noPrivateKey=Private key not available
|
|
review.form.error.publishFailed=Error publishing review
|
|
|
|
# Review Tip
|
|
reviewTip.form.title=Tip a review
|
|
reviewTip.form.description=Total amount: {{amount}} sats ({{reviewer}} sats to reviewer, {{platform}} sats commission)
|
|
reviewTip.form.connectRequired=You must be connected to tip a review
|
|
reviewTip.form.text.label=Text message
|
|
reviewTip.form.text.placeholder=Optional text message accompanying the tip
|
|
reviewTip.form.text.help=This message will be displayed with the tip
|
|
reviewTip.form.submit=Tip with {{amount}} sats
|
|
reviewTip.form.error.noPrivateKey=Private key not available
|
|
reviewTip.form.error.paymentFailed=Error processing tip payment
|
|
|
|
# Sponsoring
|
|
sponsoring.form.title=Sponsor author
|
|
sponsoring.form.description=Amount: {{amount}} BTC (0.042 BTC to author, 0.004 BTC commission)
|
|
sponsoring.form.connectRequired=You must be connected to sponsor
|
|
sponsoring.form.text.label=Text message
|
|
sponsoring.form.text.placeholder=Optional text message accompanying the sponsoring
|
|
sponsoring.form.text.help=This message will be displayed with the sponsoring
|
|
sponsoring.form.submit=Sponsor
|
|
sponsoring.form.error.noAddress=Author has not configured a Bitcoin mainnet address
|
|
sponsoring.form.error.noPrivateKey=Private key not available
|
|
sponsoring.form.error.paymentFailed=Error processing sponsoring
|
|
sponsoring.form.instructions=Create a Bitcoin transaction with two outputs:\n1. Author address ({{authorAddress}}): {{authorAmount}} BTC\n2. Platform address ({{platformAddress}}): {{platformAmount}} BTC\n\nAfter the transaction is confirmed, the sponsoring will be recorded.
|
|
reviewTip.form.error.noLightningAddress=Reviewer has not configured a Lightning address
|
|
|
|
# Common
|
|
common.optional=Optional
|