feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Client-side Language Lines
|--------------------------------------------------------------------------
|
| These are messages made available to the client browser via JavaScript.
| To compile this file run: php artisan winter:util compile lang
|
*/
'markdowneditor' => [
'formatting' => 'Formatering',
'quote' => 'Sitat',
'code' => 'Kode',
'header1' => 'Overskrift 1',
'header2' => 'Overskrift 2',
'header3' => 'Overskrift 3',
'header4' => 'Overskrift 4',
'header5' => 'Overskrift 5',
'header6' => 'Overskrift 6',
'bold' => 'Fet',
'italic' => 'Kursiv',
'unorderedlist' => 'Punktliste',
'orderedlist' => 'Nummerert liste',
'video' => 'Video',
'image' => 'Bilde',
'link' => 'Lenke',
'horizontalrule' => 'Sett inn horisontal linje',
'fullscreen' => 'Fullskjerm',
'preview' => 'Forhåndsvisning',
],
'mediamanager' => [
'insert_link' => 'Sett inn Media lenke',
'insert_image' => 'Sett inn Media bilde',
'insert_video' => 'Sett inn Media video',
'insert_audio' => 'Sett inn Media lyd',
'invalid_file_empty_insert' => 'Velg fil å sette lenken inn i.',
'invalid_file_single_insert' => 'Vennligst velg én enkelt fil.',
'invalid_image_empty_insert' => 'Velg bilde(r) å sette inn.',
'invalid_video_empty_insert' => 'Velg en video å sette inn.',
'invalid_audio_empty_insert' => 'Velg lyd å sette inn.',
],
'alert' => [
'confirm_button_text' => 'OK',
'cancel_button_text' => 'Avbryt',
'widget_remove_confirm' => 'Fjerne widget?'
],
'datepicker' => [
'previousMonth' => 'Forrige måned',
'nextMonth' => 'Neste måned',
'months' => ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'july', 'august', 'september', 'oktober', 'november', 'desember'],
'weekdays' => ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
'weekdaysShort' => ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør']
],
'filter' => [
'group' => [
'all' => 'alle'
],
'dates' => [
'all' => 'alle',
'filter_button_text' => 'Filter',
'reset_button_text' => 'Tilbakestill',
'date_placeholder' => 'Dato',
'after_placeholder' => 'Etter',
'before_placeholder' => 'Før'
]
],
'eventlog' => [
'show_stacktrace' => 'Vis stacktrace',
'hide_stacktrace' => 'Skjul stacktrace',
'tabs' => [
'formatted' => 'Formattert',
'raw' => 'Raw',
],
'editor' => [
'title' => 'Kildekodeeditor',
'description' => 'Ditt operativsystem bør være konfigurert for å åpne ett av disse URL-schemaene.',
'openWith' => 'Åpne med',
'remember_choice' => 'Husk valget for denne sesjonen',
'open' => 'Åpne',
'cancel' => 'Avbryt'
]
]
];

View File

@@ -0,0 +1,303 @@
<?php
return [
'app' => [
'name' => 'Winter CMS',
'tagline' => 'Getting back to basics'
],
'directory' => [
'create_fail' => 'Kan ikke opprette mappen: :name'
],
'file' => [
'create_fail' => 'Kan ikke opprette filen: :name'
],
'page' => [
'invalid_token' => [
'label' => 'Ugyldig sikkerhets-token',
],
],
'combiner' => [
'not_found' => "Kombinasjonsfilen ':name' ble ikke funnet."
],
'system' => [
'name' => 'System',
'menu_label' => 'System',
'categories' => [
'cms' => 'CMS',
'misc' => 'Div.',
'logs' => 'Logger',
'mail' => 'E-post',
'shop' => 'Shop',
'team' => 'Team',
'users' => 'Brukere',
'system' => 'System',
'social' => 'Sosialt',
'events' => 'Hendelser',
'customers' => 'Kunder',
'my_settings' => 'Mine innstillinger'
]
],
'theme' => [
'label' => 'Tema',
'unnamed' => 'Tema uten navn',
'name' => [
'label' => 'Navn på tema',
'help' => 'Navngi temaet ved et unikt navn. For eksempel, Winter.Vanilla'
],
],
'themes' => [
'install' => 'Installer tema',
'search' => 'søk etter temaer å installere...',
'installed' => 'Installerte temaer',
'no_themes' => 'Det er ingen installerte temaer fra markedsplassen.',
'recommended' => 'Anbefalt',
'remove_confirm' => 'Vil du virkelig slette dette temaet?'
],
'plugin' => [
'label' => 'Plugin',
'unnamed' => 'Plugin uten navn',
'name' => [
'label' => 'Navn på plugin',
'help' => 'Navngi pluginen ved et unikt navn. For eksempel, Winter.Blog'
]
],
'plugins' => [
'manage' => 'Administrere plugins',
'enable_or_disable' => 'Aktivere eller deaktivere',
'enable_or_disable_title' => 'Aktivere eller deaktivere plugins',
'install' => 'Installer plugins',
'install_products' => 'Installer produkter',
'search' => 'søk etter plugins å installere...',
'installed' => 'Installerte plugins',
'no_plugins' => 'Det er ingen installerte plugins fra markedsplassen.',
'recommended' => 'Anbefalt',
'remove' => 'Fjern',
'refresh' => 'Oppdater',
'disabled_label' => 'Deaktivert',
'disabled_help' => 'Deaktiverte plugins blir ignorert av applikasjonen.',
'frozen_label' => 'Frys oppdaterionger',
'frozen_help' => 'Fryste plugins blir ignorert ved oppdatering.',
'selected_amount' => 'Valgte plugins: :amount',
'remove_confirm' => 'Er du sikker?',
'remove_success' => 'Plugins har blitt fjernet fra systemet.',
'refresh_confirm' => 'Er du sikker?',
'refresh_success' => 'Plugins har blitt oppdatert i systemet.',
'disable_confirm' => 'Er du sikker?',
'disable_success' => 'Plugins har blitt deaktivert.',
'enable_success' => 'Plugins har blitt aktivert.',
'unknown_plugin' => 'Plugins har blitt fjernet fra systemet.'
],
'project' => [
'name' => 'Prosjekt',
'owner_label' => 'Eier',
'attach' => 'Tilkoble prosjekt',
'detach' => 'Avkoble prosjekt',
'none' => 'Ingen',
'id' => [
'label' => 'Prosjekt-ID',
'help' => 'Hvordan finne din prosjekt-ID',
'missing' => 'Vennligst spesifiser en prosjekt-ID.'
],
'detach_confirm' => 'Vil du virkelig avkoble dette prosjektet?',
'unbind_success' => 'Prosjektet har blitt avkoblet.'
],
'settings' => [
'menu_label' => 'Innstillinger',
'not_found' => 'Fant ikke spesifiserte innstilling.',
'missing_model' => 'Innstillingssiden mangler en modell-definisjon.',
'update_success' => 'Innstillingene for :name har blitt lagret.',
'return' => 'Tilbake til systeminnstillinger',
'search' => 'Søk'
],
'mail' => [
'log_file' => 'Loggfil',
'menu_label' => 'E-postinnstillinger',
'menu_description' => 'Administrere e-postinnstillinger.',
'general' => 'Generelt',
'method' => 'E-postmetode',
'sender_name' => 'Avsendernavn',
'sender_email' => 'Avsenderens e-postadresse',
'php_mail' => 'PHP mail',
'smtp' => 'SMTP',
'smtp_address' => 'SMTP-adresse',
'smtp_authorization' => 'SMTP-autentisering kreves',
'smtp_authorization_comment' => 'Kryss av dersom SMTP-tjeneren krever autentisering.',
'smtp_username' => 'Brukernavn',
'smtp_password' => 'Passord',
'smtp_port' => 'SMTP-port',
'sendmail' => 'Sendmail',
'sendmail_path' => 'Sendmail-sti',
'sendmail_path_comment' => 'Vennligst oppgi stien til sendmail-programmet.',
],
'mail_templates' => [
'menu_label' => 'E-postmaler',
'menu_description' => 'Modifisere e-postmalene som blir sendt til brukere og administratorer, administrere e-postlayouts.',
'new_template' => 'Ny mal',
'new_layout' => 'Ny layout',
'template' => 'Mal',
'templates' => 'Maler',
'menu_layouts_label' => 'E-postlayouts',
'layout' => 'Layout',
'layouts' => 'Layouts',
'no_layout' => '-- ingen layout --',
'name' => 'Navn',
'name_comment' => 'Unikt navn som tilknyttes denne layouten',
'code' => 'Code',
'code_comment' => 'Unik kode som tilknyttes denne malen',
'subject' => 'Emne',
'subject_comment' => 'Emnet til e-posten',
'description' => 'Beskrivelse',
'content_html' => 'HTML',
'content_css' => 'CSS',
'content_text' => 'Ren tekst',
'test_send' => 'Send testmelding',
'test_success' => 'Testmeldingen er sendt.',
'test_confirm' => 'Sender testmelding til :email. Fortsette?',
'creating' => 'Oppretter mal...',
'creating_layout' => 'Oppretter layout...',
'saving' => 'Lagrer mal...',
'saving_layout' => 'Lagrer layout...',
'delete_confirm' => 'Slette denne malen?',
'delete_layout_confirm' => 'Slette denne layouten?',
'deleting' => 'Sletter mal...',
'deleting_layout' => 'Sletter layout...',
'sending' => 'Sender testmelding...',
'return' => 'Tilbake til mallisten'
],
'install' => [
'project_label' => 'Tilkoble prosjekt',
'plugin_label' => 'Installér',
'theme_label' => 'Installér tema',
'missing_plugin_name' => 'Vennligst oppgi pluginens navn.',
'missing_theme_name' => 'Oppgi tema-navn for å installere.',
'install_completing' => 'Fullfører installasjonen',
'install_success' => 'Plugin har blitt installert.'
],
'updates' => [
'title' => 'Administrer oppdateringer',
'name' => 'Programvareoppdateringer',
'menu_label' => 'Oppdateringer',
'menu_description' => 'Oppdatere systemet, administrer og installere plugins og temaer.',
'return_link' => 'Tilbake til oppdateringer',
'check_label' => 'Se etter oppdateringer',
'retry_label' => 'Prøv igjen',
'plugin_name' => 'Navn',
'plugin_code' => 'Kode',
'plugin_description' => 'Beskrivelse',
'plugin_version' => 'Versjon',
'plugin_author' => 'Utgiver',
'plugin_not_found' => 'Plugin not found',
'core_current_build' => 'Nåværende build',
'core_build' => 'Build :build',
'core_build_help' => 'Siste build er tilgjengelig.',
'core_downloading' => 'Laster ned applikasjonsfiler',
'core_extracting' => 'Pakker ut applikasjonsfiler',
'plugins' => 'Plugins',
'themes' => 'Teamer',
'disabled' => 'Deaktivert',
'plugin_downloading' => 'Laster ned plugin: :name',
'plugin_extracting' => 'Pakker ut plugin: :name',
'plugin_version_none' => 'Ny plugin',
'plugin_current_version' => 'Nåværende versjon',
'theme_new_install' => 'Ny tema-installasjon.',
'theme_downloading' => 'Laster ned tema: :name',
'theme_extracting' => 'Pakker ut tema: :name',
'update_label' => 'Oppdatér programvare',
'update_completing' => 'Ferdiggjør oppdatering',
'update_loading' => 'Henter tilgjengelige oppdateringer...',
'update_success' => 'Oppdatering har fullført.',
'update_failed_label' => 'Oppdateringen mislyktes',
'force_label' => 'Tving update',
'found' => [
'label' => 'Fant nye oppdateringer!',
'help' => 'Klikk på Oppdatér programvare for å oppdatere.'
],
'none' => [
'label' => 'Ingen oppdateringer',
'help' => 'Ingen nye oppdateringer ble funnet.'
],
'important_action' => [
'empty' => 'Velg handling',
'confirm' => 'Bekreft oppdatering',
'skip' => 'Hopp over plugin (bare denne gangen)',
'ignore' => 'Hopp over plugin (alltid)',
],
'important_action_required' => 'Velg handling',
'important_view_guide' => 'Vis oppgraderingsguide',
'important_alert_text' => 'Noen oppdateringer krever ettersyn.',
'details_title' => 'Plugin detaljer',
'details_view_homepage' => 'Vis nettside',
'details_readme' => 'Dokumentasjon',
'details_readme_missing' => 'Ingen dokumentasjon å vise.',
'details_upgrades' => 'Oppgraderingsguide',
'details_upgrades_missing' => 'Det er ingen instruksjoner å vise.',
'details_current_version' => 'Nåværende versjon',
'details_author' => 'Forfatter',
],
'server' => [
'connect_error' => 'Kunne ikke koble til serveren.',
'response_not_found' => 'Oppdateringsserveren ble ikke funnet.',
'response_invalid' => 'Feilaktig respons fra serveren.',
'response_empty' => 'Tom respons fra serveren.',
'file_error' => 'Serveren kunne ikke levere pakken.',
'file_corrupt' => 'Pakken fra serveren er korrupt.'
],
'behavior' => [
'missing_property' => 'Klassen :class må definere egenskapen $:property som brukes av :behavior -egenskapen.'
],
'config' => [
'not_found' => 'Fant ikke konfigurasjonsfilen :file definert for for :location.',
'required' => "Konfigurasjon brukt i :location må angi verdien ':property'."
],
'zip' => [
'extract_failed' => "Kunne ikke pakke opp core-fil ':file'."
],
'event_log' => [
'hint' => 'Denne loggen viser en liste over potensielle feilmeldinger som oppstår i applikasjonen, for eksempel unntak og debugginginformasjon.',
'menu_label' => 'Hendelseslogg',
'menu_description' => 'Se systemloggmeldinger med registrert tid og detaljer.',
'empty_link' => 'Tøm hendelseslogg',
'empty_loading' => 'Tømmer hendelseslogg...',
'empty_success' => 'Hendelsesloggen er tømt.',
'return_link' => 'Tilbake til hendelseslogg',
'id' => 'ID',
'id_label' => 'Hendelses-ID',
'created_at' => 'Tid',
'message' => 'Melding',
'level' => 'Nivå',
'preview_title' => 'Hendelse'
],
'request_log' => [
'hint' => 'Denne loggen viser en liste over nettleserforespørsler som kan kreve oppmerksomhet. For eksempel, hvis en bruker besøker en side som ikke eksisterer, vil det bli oppført her med statuskode 404.',
'menu_label' => 'Forespørselslogg',
'menu_description' => 'Se feilaktige forespørsler, for eksempel Ikke funnet (404).',
'empty_link' => 'Tøm forespørselslogg',
'empty_loading' => 'Tømmer forespørselslogg...',
'empty_success' => 'Forespørselsloggen er tømt.',
'return_link' => 'Tilbake til forespørselslogg',
'id' => 'ID',
'id_label' => 'Logg-ID',
'count' => 'Antall',
'referer' => 'Referers',
'url' => 'URL',
'status_code' => 'Status',
'preview_title' => 'Forespørsel'
],
'permissions' => [
'name' => 'System',
'manage_system_settings' => 'Administrer systeminnstillinger',
'manage_software_updates' => 'Administrer programvareoppdateringer',
'access_logs' => 'Se systemlogger',
'manage_mail_templates' => 'Administrer e-postmaler',
'manage_mail_settings' => 'Administrer e-postinnstillinger',
'manage_other_administrators' => 'Administrer andre administratorer',
'manage_preferences' => 'Administrer backend-innstillinger',
'manage_editor' => 'Administrer kodeeditor-innstillinger',
'view_the_dashboard' => 'Se dashboard',
'manage_branding' => 'Tilpasse backend'
],
'media' => [
'invalid_path' => "Ugyldig filsti: ':path'.",
'folder_size_items' => 'fil(er)',
],
];

View File

@@ -0,0 +1,99 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| such as the size rules. Feel free to tweak each of these messages.
|
*/
"accepted" => ":attribute må aksepteres.",
"active_url" => ":attribute er ikke en gyldig URL.",
"after" => ":attribute må være en dato etter :date.",
"alpha" => ":attribute kan kun inneholde bokstaver.",
"alpha_dash" => ":attribute kan kun inneholde bokstaver, tall og bindestreker.",
"alpha_num" => ":attribute kan kun inneholde bokstaver og tall.",
"array" => ":attribute må være et array.",
"before" => ":attribute må være en dato før :date.",
"between" => [
"numeric" => ":attribute må være mellom :min - :max.",
"file" => ":attribute må være mellom :min - :max kilobytes.",
"string" => ":attribute må være mellom :min - :max tegn.",
"array" => ":attribute må ha mellom :min - :max elementer.",
],
"confirmed" => ":attribute bekreftelse samsvarer ikke.",
"date" => ":attribute er ikke en gyldig dato.",
"date_format" => ":attribute samsvarer ikke med formatet :format.",
"different" => ":attribute og :other må være forskjellig.",
"digits" => ":attribute må være :digits tall.",
"digits_between" => ":attribute må være mellom :min og :max tall.",
"email" => ":attribute format ugyldig.",
"exists" => "Valgt :attribute er ugyldig.",
"image" => ":attribute må være et bilde.",
"in" => "Valgt :attribute er ugyldig.",
"integer" => ":attribute må være et heltall.",
"ip" => ":attribute må være en gyldig IP-adresse.",
"max" => [
"numeric" => ":attribute kan ikke være større enn :max.",
"file" => ":attribute kan ikke være større enn :max kilobytes.",
"string" => ":attribute kan ikke inneholde mer enn :max tegn.",
"array" => ":attribute kan ikke ha mer enn :max elementer.",
],
"mimes" => ":attribute må være av filtype: :values.",
"extensions" => ":attribute må ha filendelse: :values.",
"min" => [
"numeric" => ":attribute må være minst :min.",
"file" => ":attribute må være minst :min kilobytes.",
"string" => ":attribute må være minst :min tegn.",
"array" => ":attribute må ha minst :min elementer.",
],
"not_in" => "Valgt :attribute er ugyldig.",
"numeric" => ":attribute må være et tall.",
"regex" => ":attribute format er ugyldig.",
"required" => ":attribute felt kreves.",
"required_if" => ":attribute felt kreves når :other er :value.",
"required_with" => ":attribute felt kreves når :values er til stede.",
"required_without" => ":attribute felt kreves når :values ikke er til stede.",
"same" => ":attribute og :other må samsvare.",
"size" => [
"numeric" => ":attribute må være :size.",
"file" => ":attribute må være :size kilobytes.",
"string" => ":attribute må være :size tegn.",
"array" => " :attribute må inneholde :size elementer.",
],
"unique" => ":attribute er allerede i bruk.",
"url" => ":attribute format er ugyldig.",
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];