**Motivations:** - Allow users to set their preferred language (fr/en) in the settings page - Load language preference from localStorage at startup to configure the application locale **Root causes:** - Language preference was only available in the header via LanguageSelector component - Language preference was stored in IndexedDB instead of localStorage - No centralized language settings management in the settings page **Correctifs:** - Created LanguageSettingsManager component for settings page - Migrated language storage from IndexedDB to localStorage for consistency - Updated _app.tsx to load locale from localStorage synchronously at startup - Updated useI18n hook to use localStorage instead of IndexedDB - Updated LanguageSelector component to use localStorage instead of IndexedDB **Evolutions:** - Added language preference section in settings page (displayed first) - Language preference is now loaded at application startup from localStorage - Added translations for language settings (settings.language.*) **Pages affectées:** - components/LanguageSettingsManager.tsx (new) - pages/settings.tsx - pages/_app.tsx - hooks/useI18n.ts - components/LanguageSelector.tsx - locales/fr.txt - locales/en.txt
271 lines
13 KiB
Plaintext
271 lines
13 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.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
|
|
|
|
# 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.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
|